the cutting room mirror

Doubutsu no Mori

This article has a talk page!
view on tcrf.net

Doubutsu no Mori (Animal Forest) is a late-era Japan-only Nintendo 64 game that was re-released for the GameCube in Japan, then updated and released in the West as Animal Crossing, and that version was re-re-released in Japan and (finally) released to the rest of the world, except for China, which got the original Nintendo 64 version years after its Japanese release.

Weird sentence, weirder story.

Crash Debugger#

Present in the game is a crash debugger similar to the crash debuggers seen in Ocarina of Time and Majora's Mask on the N64. Whenever the game crashes, it will display a small red line at the upper-left corner of the screen. Input the following code which is the same code from Ocarina of Time:

  1. L + R, then while holding both press Z.
  2. D-Up
  3. C-Down
  4. C-Up
  5. D-Down
  6. D-Left
  7. C-Left
  8. C-Right
  9. D-Right
  10. A + B, then while holding both press Start.

(Source: Fkualol)

Debug Tools#

Memory Usage Display#

GameShark code 801DFA64 0001 will display some colorful memory usage bars. What each bar represents is currently unknown.

Debug Mode#

There exists a debug mode that will display some build info on the title screen and enable some additional debug displays that can be toggled on and off by pressing buttons on the second controller.
There are 2 modes for this debug mode. Mode 1 allows you to enable or disable other debug features, but you can not manipulate the game with it in any way. Mode 2 allows you to have full control over the debug menu. It also allows using raw iNES Famicom ROMs on Controller Paks outside of its native NESINFO wrapper.

GameShark code 8010FD63 000X can be used to access this mode.
Replace X with 1 (Mode 1) or 2 (Mode 2).

Debug mode can also be enabled by entering the crash debugger code above on controller 2. Holding recenter on controller 1 when entering the code will also activate all Famicom emulator features, even for built-in games.

Normally, mode 2 replaces mode 1 when the game's GUID is set to "NAFJ#" (version code = 23). It can also be forced via a specially-crafted Controller Pak entry, even on iQue.

The color of the letter "D" indicates the current mode:

Color

Description

Yellow

Mode 1, Resetti enabled

Pink

Mode 1

Green

Mode 2, Resetti enabled

Gray

Mode 2

Left of the "D", two error codes will always be displayed when relevant.

Bad Town Data: "X" is displayed if towndata[0xF8AC] is zero.

FLASH error codes: one of the following letters are printed if there is a problem with the game's internal save file.

Error Code

Description

If not displayed, no error is present.

N

Not found or no good. A failure occurred during initialization or it's an unrecognized chip ID.

A

Allocation error. Failed to allocate a 0xF980 byte temporary buffer.

W

Write error.

R

Read error.

C

Checksum error.

O

Other. Typically due to a mismatch b/w master and its copy. Naturally occurs with uninitialized/erased saves since the copy isn't valid yet.

All of the combinations below must be done on a controller plugged into port 2. (Some features only work on MODE 2.)

  • Pressing A will bring up a heads-up-display that displays coordinates, time, item IDs and other information. If you press R, you can cycle through different clock speeds. The time can only go forward. Settings are roughly an hour a minute, an hour every ten seconds, then restore clock using RTC. When active, the framecount will be displayed on the line just below "D". Only use this feature if a clock is on the board! It does not safely fall back to the default buffer and can lock the game, especially on iQue.
  • Pressing C-Right will display different colored numbers on-screen. What they represent is currently unknown.
  • Pressing C-Up will display "zelda_malloc" and "graph_malloc" followed by some Japanese text and numbers. What these are for is unknown.
  • Pressing D-Pad Down will make text appear that says 'ファミコン' which translates to 'Famicom'. Pressing Start will increase the number, this number represents which Famicom game to place. While inside of your house, pressing Z will force display a Famicom as a furniture item.
  • Pressing D-Pad Left will display yellow numbers and text. The periods will change characters based off what is going on in-game. What triggers these to change is unknown.
  • Pressing D-Pad Right will display orange numbers, their usage is unknown.
  • Pressing D-Pad Up will display a bunch of hex values, as you may have guessed by now, what these represent is unknown.

(Source: Nekokabu)

Memory View/Edit#

Most town, player, and character memory registers can be viewed via the debugger. In mode 1 this is solely read-only, but values can be edited, to some degree, in mode 2. Hold the given button while pressing the other to display the menu. While holding the button, press the other again to display additional pages. There are 96 signed 16bit values (hw) in each list (0xC0 per block). When released, use D-Pad up/down to select an address. Press D-Pad left/right to change values; hold C down to change in faster increments. To clear from the screen, input the button sequence for any of the menus below.

HOLD

PRESS

Address (J)

Address (iQue)

Displayed Name

L

R

801DFE24

801F0144

Y(SBREG)

L

D-Pad Left

801DFEE4

801F0204

D(DREG)

L

D-Pad Right

801DFFA4

801F02C4

U(UREG)

L

D-Pad Up

801E0064

801F0384

I(IREG)

L

D-Pad Down

801E02A4

801F05C4

N(NS1)

L

A

801DFBE4

801EFF04

P(PREG)

L

B

801E0124

801F0444

Z(ZREG)

L

Z

801E01E4

801F0504

C(CRV)

L

Start

801E0A24

801F0D44

G(GREG)

L

C Left

801DFA64

801EFD84

S(SREG)

L

C Right

801DFD64

801F0084

M(MREG)

L

C Up

801DF9A4

801EFCC4

(REG)

L

C Down

801DFB24

801EFE44

O(OREG)

R

L

801E05A4

801F08C4

s(DEMOREG)

R

D-Pad Left

801E07E4

801F0B04

A(AREG)

R

D-Pad Right

801E0AE4

801F0E04

m(mREG)

R

D-Pad Up

801E0BA4

801F0EC4

n(nREG)

R

D-Pad Down



*pause execution*

R

A

801E0364

801F0684

K(SND)

R

B

801E0424

801F0744

X(XREG)

R

Z

801E04E4

801F0804

C(CRV2)

R

Start

801E0964

801F0C84

H(HREG)

R

C Left

801E08A4

801F0BC4

V(VREG)

R

C Right

801E0724

801F0A44

W(WREG)

R

C Up

801E0664

801F0984

i(TREG)

R

C Down

801DFCA4

801EFFC4

Q(QREG)

Start

L

801E10E4

801F1404

*(NIIREG)

Start

R

801E0C64

801F0F84

B(BREG)

Start

D-Pad Left

801E14A4

801F17C4

*(TAKREG)

Start

D-Pad Right

801E13E4

801F1704

*(SAKREG)

Start

D-Pad Up

801E1324

801F1644

*(CAMREG)

Start

D-Pad Down

801E1564

801F1884

*(PL2REG)

Start

A

801E0D24

801F1044

d(DORO)

Start

B

801E0DE4

801F1104

k(kREG)

Start

Z

801E11A4

801F14C4

*(GENREG)

Start

C Left

801E0F64

801F1284

*(PLAYERREG)

Start

C Right

801E0EA4

801F11C4

b(BAK)

Start

C Up

801E1264

801F1584

*(MYKREG)

Start

C Down

801E1024

801F1344

*(OTUREG)

Debug Gyroid#

Title Theme#

To do:
Figure out a way to have the title theme fully playback that doesn't involve the risk of damaging your cart and console through cart tilting.

In the normal course of play, the game's title theme fades out after a minute and 3 seconds, corresponding with the length of time of the demos played on the title screen. However, the full track runs for an additional 21 seconds. If you don't mind risking the long-term health of your cartridge, it is possible to hear the full title screen by slowly tilting the left side of the cartridge out of the console until the game crashes. If done correctly, the game will continue to play the title screen music on an endless loop.

In-game

Full

Unused Items#

Unused Clothing#

Two clothing items are present in the game's code but never appear either as obtainable items or as items worn by villagers within the normal course of play:

Name (Japanese)

Name (Chinese)

Name (English translation)

Hexadecimal ID

Image

Texture

パーティードレス

舞会礼服

Party Dress

18 14

タキシード

晚礼服

Tuxedo

18 18

Unused Furniture#

Several items in the game's files are unused and unobtainable through gameplay. Below is a list of the item's names along with their internal hexadecimal IDs. These items appear in Doubutsu no Mori +, Animal Crossing, and Doubutsu no Mori e+ as well, but with the sole exception of the unused chair in +, their models are replaced with duplicates of the Spooky Wardrobe furniture item (in +) or the DUMMY furniture item (in Animal Crossing and e+).

Name (Japanese)

Name (English)

ID

Image

Notes

しょうふがざぶとん

zabuton

10 9C

-

しょうふかチェスト

chest

10 B0

-

しようふかラック

rack

10 B4

-

いいスピーカー

nice speaker

11 F8

-

しょうふかタンス

unused dresser

12 F0

-

しょうふかおさる

unused monkey

13 14

Animated; perpetually claps.

モノクロじむイス

modern den chair

13 44

Interactive; can be sat on.

しょうふかチェア

unused chair

14 CC

DnM+_unused_chair.png DnM+_unused_chair_2.png

Interactive; can be sat on.

Build Date#

Present at 0x19D00 in the Japanese version and 0x21D50 in the Chinese version is a build date in the same format as Ocarina of Time and Majora's Mask. Curiously, it seems the Chinese version was compiled really early compared to the actual release date, even predating the Chinese version of Ocarina of Time by seven months.

Japanese

Chinese

forest@srd038J.srd.nintendo.co.jp
01-02-14 16:37:16
root@indy500
03-03-07 16:48:26

Unused Overworld Textures#

Most of these textures can be found in the final build of the game. It even survived through the localization process. These textures do not appear in any pre-release screenshots. The textures are also not compatible with the models of the retail build of the game, and they need to be converted in order to be viewed properly. Some of these textures can be seen if you place test acres in your town, but it should also be noted that the models for said early acres are bigger, and overlap surrounding areas in the game.

Dirt#

Early

Final

Early

Final

Cliff#

Early

Final

Grass/Snow#

Early

Final

Early

Final

Sign Board#

To do:
what differences? please add photo of the Spaceworld sign.

The early Sign texture resembles its Spaceworld 2000 counterpart, however there are still a few minor differences.

Early

Final

Debugging Text#

8003D180 boot
8003D188 idle
8003D190 ../idle.c
8003D19C main
8003D1B0 %ld
8003D1B4 ovlmgr: Out of Memory
8003D1D8 DMA ERROR: %.50s %d
8003D1EC DMA ERROR: %.50s %d
8003D200 DMA ERROR: %.50s
8003D218 %07X %08X %X %.50s
8003D230 percial_DMA
8003D23C ILLIGAL ALIGNMENT
8003D250 アライメント異常
8003D26C Segment Alignment Error
8003D284 セグメント境界をまたがってDMA転送することはできません
8003D2C4 Can't Transfer Segment
8003D2DC 圧縮されたセグメントの途中からはDMA転送することはできません
8003D320 Can't Transfer Segment
8003D338 圧縮されたセグメントの一部だけをDMA転送することはできません
8003D378 DATA DON'T EXIST
8003D38C 該当するデータが存在しません
8003D3AC ILLIGAL DMA-FUNCTION CALL
8003D3C8 パラメータ異常です
8003D3DC dmamgr
8003D3F0 圧縮展開異常
8003D400 slidma slidstart_szs ret=%d
8003D41C src:%08lx dst:%08lx siz:%08lx
8003D440 Interrupt
8003D44C TLB modification
8003D460 TLB exception on load
8003D478 TLB exception on store
8003D490 Address error on load
8003D4A8 Address error on store
8003D4C0 Bus error on inst.
8003D4D4 Bus error on data
8003D4E8 System call exception
8003D500 Breakpoint exception
8003D518 Reserved instruction
8003D530 Coprocessor unusable
8003D548 Arithmetic overflow
8003D55C Trap exception
8003D56C Virtual coherency on inst.
8003D588 Floating point exception
8003D5A4 Watchpoint exception
8003D5BC Virtual coherency on data
8003D5D8 Unimplemented operation
8003D5F0 Invalid operation
8003D604 Division by zero
8003D618 Overflow
8003D624 Underflow
8003D630 Inexact operation
8003D64C fault_AddClient: %08x は既にリスト中にある
8003D684 fault_RemoveClient: %08x リスト不整合です
8003D6BC fault_AddressConverterAddClient: %08x は既にリスト中にある
8003D704 fault_AddressConverterRemoveClient: %08x は既にリスト中にある
8003D748 F%02d:%14.7e
8003D758 F%02d:  %08x(16) 
8003D76C F%02d:%14.7e 
8003D77C F%02d:  %08x(16) 
8003D790 FPCSR:%08xH
8003D7A0 (%s)
8003D7AC FPCSR:%08xH 
8003D7BC (%s)
8003D7C4 THREAD:%d (%d:%s)
8003D7D8 PC:%08xH SR:%08xH VA:%08xH
8003D7F4 AT:%08xH V0:%08xH V1:%08xH
8003D810 A0:%08xH A1:%08xH A2:%08xH
8003D82C A3:%08xH T0:%08xH T1:%08xH
8003D848 T2:%08xH T3:%08xH T4:%08xH
8003D864 T5:%08xH T6:%08xH T7:%08xH
8003D880 S0:%08xH S1:%08xH S2:%08xH
8003D89C S3:%08xH S4:%08xH S5:%08xH
8003D8B8 S6:%08xH S7:%08xH T8:%08xH
8003D8D4 T9:%08xH GP:%08xH SP:%08xH
8003D8F0 S8:%08xH RA:%08xH LO:%08xH
8003D938 THREAD ID:%d (%d:%s)
8003D950 PC:%08xH   SR:%08xH   VA:%08xH
8003D970 AT:%08xH   V0:%08xH   V1:%08xH
8003D990 A0:%08xH   A1:%08xH   A2:%08xH
8003D9B0 A3:%08xH   T0:%08xH   T1:%08xH
8003D9D0 T2:%08xH   T3:%08xH   T4:%08xH
8003D9F0 T5:%08xH   T6:%08xH   T7:%08xH
8003DA10 S0:%08xH   S1:%08xH   S2:%08xH
8003DA30 S3:%08xH   S4:%08xH   S5:%08xH
8003DA50 S6:%08xH   S7:%08xH   T8:%08xH
8003DA70 T9:%08xH   GP:%08xH   SP:%08xH
8003DA90 S8:%08xH   RA:%08xH   LO:%08xH
8003DAD8 KeyWaitB (LRZ 上下 上下 左左 右右 BASTART)
8003DB84 %s %08x
8003DB8C PrintDump
8003DB98 %06x
8003DBA0 %08x
8003DBA8 Dump
8003DBB0 SP       PC       (VPC)
8003DBC8 %08x %08x
8003DBD4  -> %08x
8003DBE0 STACK TRACE
SP       PC       (VPC)
8003DC08 %08x %08x
8003DC14  -> %08x
8003DC24 CallBack (%d) %08x %08x %08x
8003DC48 フォルトマネージャ:OS_EVENT_CPU_BREAKを受信しました
8003DC80 フォルトマネージャ:OS_EVENT_FAULTを受信しました
8003DCB4 フォルトマネージャ:不明なメッセージを受信しました
8003DCE8 __osGetCurrFaultedThread()=%08x
8003DD0C FindFaultedThread()=%08x
8003DD28 STACK TRACE
8003DD34     CONGRATURATIONS!    
8003DD50 All Pages are displayed.
8003DD6C        THANK YOU!       
8003DD88  You are great debugger!
8003DDA4 fault
8003DDAC HungUp on Thread %d
8003DDC4 %s
8003DDC8 (NULL)
8003DDD0 %s
8003DDD4 (NULL)
8003DDDC HungUp on Thread %d
8003DDF4 %s
8003DDF8 (NULL)
8003DE00 %s
8003DE04 (NULL)
8003DE0C HungUp %s:%d
8003E280 (null)
8003E2B0 Reset
8003E310 __osRealloc(%08x, %d)
8003E46C ARENA INFO (0x%08x, %d)
8003E484 Arena is unitialized
8003E49C Memory Block Region status size
8003E4C0 %08x-%08x%c %s %08x
8003E4E0 %08x Block Invalid
8003E4F4 Total Alloc Block Size %08x
8003E514 Total Free Block Size %08x
8003E534 Largest Free Block Size %08x
8003E57C (%08x)
8003E594 (%08x %08x)
8003E900 forest@srd038J.srd.nintendo.co.jp
8003E924 01-02-14 16:37:16
80113310 GLOBAL USE %x
80113320 GLOBAL FREE %x
80113330 GLOBAL RELEASE %x
80113344 GLOBAL RELWAIT %x
80113358 List %x
80113364 Root %x
80116160 %4d %1d%1d %1d%1d %1d%1d %1d%1d
80116184 %1d%1d %4d %1d%1d %1d%1d %1d%1d
801161B0 ACTOR NAME is NULL
801161C8 ACTOR NAME %08x %s
801161DC Actor_draw
80116200 actor_dlftbls %u
80116214 No. RamStart- RamEnd cn Name
80116234 %3d %08x-%08x %3d %s
801163E0 ../m_choice_main.c
801163F4 ../m_choice_main.c
8011640C ../m_choice_main.c
8011641F ../m_choice_main.c
80116450 ../m_collision_bg.c
80116470 ../m_collision_bg.c
801164B4 ../m_collision_bg_rewrite.c_inc
80116830 %s
80116834 %s
80116838 REG
8011683C SREG
80116844 OREG
8011684C PREG
80116854 QREG
8011685C MREG
80116864 SBREG
8011686C DREG
80116874 UREG
8011687C IREG
80116884 ZREG
8011688C CRV
80116890 NS1
80116894 SND
80116898 XREG
801168A0 CRV2
801168A8 DEMOREG
801168B0 TREG
801168B8 WREG
801168C0 AREG
801168C8 VREG
801168D0 HREG
801168D8 GREG
801168E0 mREG
801168E8 nREG
801168F0 BREG
801168F8 DORO
80116900 kREG
80116908 BAK
8011690C PLAY
80116910 ERREG
80116918 OTUREG
80116920 NIIREG
80116928 GENREG
80116830 MYKREG
80116838 CAMREG
80116840 SAKREG
80116848 TAKREG
80116950 PL2REG
80116958 %c(%s)
80116960 %02d%6d
80116964 %s%02d%6d
80116974 zelda_malloc
801169B0 graph_alloc
80116AAC %3d
80116AB4 %3d %02d-%02d-%02d
80116AC4 %c%c%c%c%c%c%c%c
80116D40 %04d %04d %04d
80116D50  %02d %02d %02d %02d
80116D70 ../m_field_make.c
80116D88 ../m_field_make.c
80116D9C ../m_field_make.c
80116DAC ../m_field_make.c
80116DC0 ../m_field_make.c
80116DD4 ../m_field_make.c
80116DE8 ../m_field_make.c
80116DFC ../m_field_make.c
80116E10 ../m_field_make.c
80116E24 ../m_field_make.c
80116E40 ../m_field_info.c
80116E54 %d
80116E58 %d,%d - %4x - %d - %d
80116F30 ../m_font_basic.c
80116F44 ../m_font_basic.c
80116F58 ../m_font_mark.c
80116F6C ../m_font_mark.c
80116FC0 ../m_handbill.c
80116FD0 ../m_handbill.c
80116FE0 ../m_handbill.c
80116FF0 ../m_handbill.c
80117000 ../m_handbill.c
80117010 ../m_handbill.c
80117020 ../m_handbill.c
80117030 ../m_handbill.c
80117040 ../m_handbill.c
80117050 ../m_handbill.c
80117060 ../m_handbill.c
80117070 ../m_handbill.c
80117080 ../m_handbill.c
80117090 ../m_handbill.c
801170B0 ../m_item_name.c
80117250 ../m_msg_main.c
80117260 ../m_msg_main.c
80117270 ../m_msg_main.c
80117280 ../m_msg_main.c
80117290 %5d
80117294 C9ff:
../m_npc.c
../m_npc.c
../m_npc.c
../m_npc.c
../m_npc.c
../m_npc.c
../m_npc.c
%4x %3d %3d
%4x %3d ---
%4x --- %3d
%4x --- ---
****
%4x %3d 
**** *** 
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
../m_player_lib.c
%04x 
%04x 
**** 
%x
*
%x
*
%x
*
ショキカ
カワガケセイセイ
ウミセイセイ
ハシサカセイセイ
コウバンヒロバセイセイ
ミセユウビンキョクセイセイ
イケセイセ
ベースセッテイ
ウミニカワセイセイ
ブロックセンタク
ランダムカンリョウ
RandomTry %d
RandomStep %s
ファミコン %d
../m_scene_ftr.c
../m_shop.c
../m_shop.c
../m_shop.c
../m_shop.c
Pre
End
Opn
Rnw
%d %d %s
A%2d,%2d,%2d,%2d,%2d
%d %d %s->%d.%d.%d
A%2d,%2d,%2d,%2d,%2d
B%2d,%2d,%2d,%2d,%2d
C%2d,%2d,%2d,%2d,%2d
../m_string.c
../m_string.c
../m_string.c
../m_string.c
submenu_ovl
player_actor
SubmenuArea_visit
RamStart-RamEnd  Offset
%08x-%08x %06x
PC:%08x
RA:%08x
player infomation
main_index         :%d %d
request_main_index :%d %d %d
pos :%d %d %d
angleY :%d %d
../m_scene.c
../m_scene.c
../m_scene.c
../m_titledemo.c
sFRm_flashrom
AUDIO SP TIMEOUT2 %08x %08x
AUDIO CANSEL&RETRY %d
../cfbinfo.c
(予約)
../game.c
../game.c
ShowFrameBuffer PAGE 0/1/2
RCP is HUNG UP!!
Oh! MY GOD!!
../graph.c
../graph.c
CLASS SIZE= %d bytes
GAME CLASS MALLOC FAILED
GRAPH INF.LOOP %2d %3d %3d %6lu
AUDIO INF.LOOP %2d %3d     %6lu
irqmgr
sched
audio
padmgr
graph
何かのパックが抜かれました
何かのパックが差し込まれました
認識しました
オーバーランエラーが発生
応答しません
../padmgr.c
標準コントローラを認識しました
マウス装置を認識しました
音声認識装置を認識しました
知らない種類のコントローラを認識?しました
応答しません
../sched.c
__scHandleRSP:this->curRSPTask == NULL
__scHandleRDP:this->curRDPTask == NULL
../sys_initial_check.c
SUPERDMA
FastCopy
FastCopy
SLOWCOPY
BGCOPY
801F6100 == MML PASS CHECK ==
803BA610 ../m_trademark.c