diff --git a/.gitignore b/.gitignore index 0fbd6c8a..1649f4d3 100644 --- a/.gitignore +++ b/.gitignore @@ -84,3 +84,5 @@ lib/libs2d_engine.a !/lib/PR/hvqm/*.o +# .orig files +*.orig diff --git a/Makefile b/Makefile index f67b59c4..3e6c813e 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,8 @@ USE_DEBUG := 0 # Build for the N64 (turn this off for ports) TARGET_N64 ?= 1 +# Virtual Console hacks. Enabling this makes your hack (hopefully) compatible with the Wii Virtual Console. +# One of the thing this does is disable the instant input patch, so do NOT use this for your normal z64 release. VC_HACKS ?= 0 # CONSOLE - selects the console to target @@ -297,6 +299,10 @@ ifeq ($(filter clean distclean print-%,$(MAKECMDGOALS)),) ifeq ($(DUMMY),FAIL) $(error Failed to extract assets) endif + DUMMY != $(PYTHON) extract_assets.py jp >&2 || echo FAIL + ifeq ($(DUMMY),FAIL) + $(error Failed to extract assets) + endif endif # Make tools if out of date @@ -780,20 +786,20 @@ $(BUILD_DIR)/libz.a: $(LIBZ_O_FILES) $(V)$(AR) rcs -o $@ $(LIBZ_O_FILES) # SS2: Goddard rules to get size -$(BUILD_DIR)/goddard.ld: goddard.ld $(BUILD_DIR)/libgoddard.a - $(call print,Preprocessing linker script:,$<,$@) - $(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< +$(BUILD_DIR)/sm64_prelim.ld: sm64.ld $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/libgoddard.a $(BUILD_DIR)/libz.a + $(call print,Preprocessing preliminary linker script:,$<,$@) + $(V)$(CPP) $(CPPFLAGS) -DPRELIMINARY=1 -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $< -$(BUILD_DIR)/goddard.elf: $(BUILD_DIR)/goddard.ld - @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" - $(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $< -Map $(BUILD_DIR)/goddard.map --no-check-sections -o $@ -T tools/hardcoded_syms.txt $(wildcard $(BUILD_DIR)/src/menu/*.o) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib -lgoddard -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc +$(BUILD_DIR)/sm64_prelim.elf: $(BUILD_DIR)/sm64_prelim.ld + @$(PRINT) "$(GREEN)Linking Preliminary ELF file: $(BLUE)$@ $(NO_COL)\n" + $(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $< -Map $(BUILD_DIR)/sm64_prelim.map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc -$(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/goddard.elf +$(BUILD_DIR)/goddard.txt: $(BUILD_DIR)/sm64_prelim.elf $(call print,Getting Goddard size...) - $(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/goddard.map + $(V)python3 tools/getGoddardSize.py $(BUILD_DIR)/sm64_prelim.map $(VERSION) # Link SM64 ELF file -$(ELF): $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a +$(ELF): $(BUILD_DIR)/sm64_prelim.elf $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) undefined_syms.txt $(BUILD_DIR)/libz.a $(BUILD_DIR)/libgoddard.a @$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n" $(V)$(LD) --gc-sections -L $(BUILD_DIR) -T undefined_syms.txt -T $(BUILD_DIR)/$(LD_SCRIPT) -T goddard.txt -Map $(BUILD_DIR)/sm64.$(VERSION).map --no-check-sections $(addprefix -R ,$(SEG_FILES)) -o $@ $(O_FILES) -L$(LIBS_DIR) -l$(ULTRALIB) -Llib $(LINK_LIBRARIES) -u sprintf -u osMapTLB -Llib/gcclib/$(LIBGCCDIR) -lgcc @@ -801,7 +807,7 @@ $(ELF): $(O_FILES) $(YAY0_OBJ_FILES) $(SEG_FILES) $(BUILD_DIR)/$(LD_SCRIPT) unde $(ROM): $(ELF) $(call print,Building ROM:,$<,$@) ifeq ($(CONSOLE),n64) - $(V)$(OBJCOPY) --pad-to=0x800000 --gap-fill=0xFF $< $@ -O binary + $(V)$(OBJCOPY) --pad-to=0x101000 --gap-fill=0xFF $< $@ -O binary else ifeq ($(CONSOLE),bb) $(V)$(OBJCOPY) --gap-fill=0x00 $< $@ -O binary $(V)dd if=$@ of=tmp bs=16K conv=sync diff --git a/README.md b/README.md index 3bc5c41b..a9261b12 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # HackerSM64 **AFTER CLONING THE REPO, CHECK OUT THE `include/config.h` FILE BEFORE ANYTHING ELSE! IT THERE'S A LOT OF STUFF IN THIS REPO THAT CAN BE TOGGLED THERE.** +This repo needs BOTH an US ROM and a JP ROM in order to build. Place baserom.us.z64 in the repo as usual and ALSO place baserom.jp.z64 + This repo needs gcc in order to be able to build it. To install it, run `sudo apt install gcc-mips-linux-gnu` This is a fork of the ultrasm64 repo by CrashOveride which includes the following commonly used patches (patches marked with `*` are toggleable in `config.h`): -**About Puppycam** -- Puppycam is available **on a dedicated branch**. If you want puppycam in your hack, clone the `puppycamera2` branch instead of `master`. +**Puppycam** +- Puppycam is available on the master branch now, you can toogle it in config.h. * **Collision:** - Slope fix and exposed ceilings fix diff --git a/asm/rom_header.s b/asm/rom_header.s index ee296ff0..763a5b78 100644 --- a/asm/rom_header.s +++ b/asm/rom_header.s @@ -14,14 +14,10 @@ .word 0x00000000 /* Checksum 2 */ .word 0x00000000 /* Unknown */ .word 0x00000000 /* Unknown */ -.if VERSION_SH == 1 .ascii INTERNAL_ROM_NAME /* Internal ROM name */ -.else -.ascii INTERNAL_ROM_NAME /* Internal ROM name */ -.endif .word 0x00000000 /* Unknown */ .word 0x0000004E /* Cartridge */ -.ascii "SM" /* Cartridge ID */ +.ascii "ED" /* Cartridge ID */ /* Region */ #if defined(VERSION_JP) || defined(VERSION_SH) @@ -29,6 +25,4 @@ #else .ascii "E" /* NTSC-U (North America) */ #endif - - .byte 0x00 /* Version */ diff --git a/bin/segment2.c b/bin/segment2.c index d46b1bde..13f3cb7b 100644 --- a/bin/segment2.c +++ b/bin/segment2.c @@ -2166,7 +2166,6 @@ const Gfx dl_draw_text_bg_box[] = { gsSPEndDisplayList(), }; -#ifndef VERSION_EU // 0x0200EE28 - 0x0200EE68 static const Vtx vertex_ia8_char[] = { #if defined(VERSION_JP) || defined(VERSION_SH) @@ -2181,21 +2180,8 @@ static const Vtx vertex_ia8_char[] = { {{{ 0, 16, 0}, 0, { 480, 256}, {0xff, 0xff, 0xff, 0xff}}}, #endif }; -// !EU -#endif #ifdef VERSION_EU -// 0x020073B0 -const Gfx dl_ia_text_begin[] = { - gsDPPipeSync(), - gsDPSetTexturePersp(G_TP_NONE), - gsDPSetCombineMode(G_CC_FADEA, G_CC_FADEA), - gsDPSetEnvColor(255, 255, 255, 255), - gsDPSetRenderMode(G_RM_XLU_SURF, G_RM_XLU_SURF2), - gsDPSetTextureFilter(G_TF_POINT), - gsSPEndDisplayList(), -}; - // 0x020073E8 - 0x02007418 const Gfx dl_ia_text_tex_settings[] = { gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_MIRROR, 3, G_TX_NOLOD, G_TX_WRAP | G_TX_MIRROR, 4, G_TX_NOLOD), @@ -2203,21 +2189,14 @@ const Gfx dl_ia_text_tex_settings[] = { gsDPLoadBlock(G_TX_LOADTILE, 0, 0, ((16 * 8 + G_IM_SIZ_4b_INCR) >> G_IM_SIZ_4b_SHIFT) - 1, CALC_DXT(16, G_IM_SIZ_4b_BYTES)), gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_4b, 1, 0, G_TX_RENDERTILE, 0, G_TX_WRAP | G_TX_MIRROR, 3, G_TX_NOLOD, G_TX_WRAP | G_TX_MIRROR, 4, G_TX_NOLOD), gsDPSetTileSize(0, 0, 0, (16 - 1) << G_TEXTURE_IMAGE_FRAC, (8 - 1) << G_TEXTURE_IMAGE_FRAC), + gsSPVertex(vertex_ia8_char, 4, 0), + gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), + gsSPEndDisplayList(), gsSPEndDisplayList(), }; +#endif -// 0x02007418 - 0x02007450 -const Gfx dl_ia_text_end[] = { - gsDPPipeSync(), - gsDPSetTexturePersp(G_TP_PERSP), - gsDPSetRenderMode(G_RM_AA_ZB_OPA_SURF, G_RM_AA_ZB_OPA_SURF2), - gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), - gsDPSetEnvColor(255, 255, 255, 255), - gsDPSetTextureFilter(G_TF_BILERP), - gsSPEndDisplayList(), -}; - -#elif defined(VERSION_US) +#if defined(VERSION_US) || defined(VERSION_EU) const Gfx dl_ia_text_begin[] = { gsDPPipeSync(), gsSPClearGeometryMode(G_LIGHTING), @@ -2228,7 +2207,9 @@ const Gfx dl_ia_text_begin[] = { gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), gsSPEndDisplayList(), }; +#endif +#ifdef VERSION_US const Gfx dl_ia_text_tex_settings[] = { gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, 3, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, 4, G_TX_NOLOD), gsDPLoadSync(), @@ -2239,8 +2220,9 @@ const Gfx dl_ia_text_tex_settings[] = { gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0), gsSPEndDisplayList(), }; +#endif -#else +#if defined(VERSION_JP) || defined(VERSION_SH) // 0x0200EE68 - 0x0200EEA8 const Gfx dl_ia_text_begin[] = { gsDPPipeSync(), @@ -2266,7 +2248,6 @@ const Gfx dl_ia_text_tex_settings[] = { }; #endif -#ifndef VERSION_EU // 0x0200EEF0 - 0x0200EF30 const Gfx dl_ia_text_end[] = { gsDPPipeSync(), @@ -2278,7 +2259,6 @@ const Gfx dl_ia_text_end[] = { gsDPSetTextureFilter(G_TF_BILERP), gsSPEndDisplayList(), }; -#endif // 0x0200EF30 - 0x0200EF60 static const Vtx vertex_triangle[] = { diff --git a/enhancements/reonucam3.patch b/enhancements/reonucam3.patch index 35b36221..169eab26 100644 --- a/enhancements/reonucam3.patch +++ b/enhancements/reonucam3.patch @@ -1,8 +1,8 @@ diff --git a/include/text_strings.h.in b/include/text_strings.h.in -index 8ccc6b1..d2bb516 100644 +index 711d4562..f1c83171 100644 --- a/include/text_strings.h.in +++ b/include/text_strings.h.in -@@ -33,6 +33,12 @@ +@@ -93,6 +93,12 @@ #define TEXT_HUD_WIDE_INFO _("PLEASE CONFIGURE YOUR DISPLAY OR YOUR EMULATOR TO\nSTRETCH THE IMAGE TO 16:9") #endif @@ -16,7 +16,7 @@ index 8ccc6b1..d2bb516 100644 /** diff --git a/src/game/camera.c b/src/game/camera.c -index dfcf16a..e56f8c0 100644 +index 25b27983..2ff11930 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -98,6 +98,7 @@ Vec3f sPlayer2FocusOffset; @@ -137,6 +137,10 @@ index dfcf16a..e56f8c0 100644 - if (gPlayer1Controller->buttonPressed & R_CBUTTONS) { - s8DirModeYawOffset += DEGREES(45); - play_sound_cbutton_side(); +- } +- if (gPlayer1Controller->buttonPressed & L_CBUTTONS) { +- s8DirModeYawOffset -= DEGREES(45); +- play_sound_cbutton_side(); + if ((gPlayer1Controller->buttonPressed & L_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { + s8DirModeBaseYaw -= DEGREES(45); + } else if ((gPlayer1Controller->buttonPressed & R_CBUTTONS) && !(gPlayer1Controller->buttonDown & R_TRIG)) { @@ -144,10 +148,6 @@ index dfcf16a..e56f8c0 100644 + } else if (gPlayer2Controller->rawStickX) { + s8DirModeBaseYaw += DEGREES(gPlayer2Controller->rawStickX * 4 / 64); // Analog camera support (Use the "Dual Analog" input mode in Parallel Launcher) } -- if (gPlayer1Controller->buttonPressed & L_CBUTTONS) { -- s8DirModeYawOffset -= DEGREES(45); -- play_sound_cbutton_side(); -- } -#ifdef PARALLEL_LAKITU_CAM - // extra functionality - else if (gPlayer1Controller->buttonPressed & U_JPAD) { @@ -156,6 +156,9 @@ index dfcf16a..e56f8c0 100644 - } - else if (gPlayer1Controller->buttonDown & L_JPAD) { - s8DirModeYawOffset -= DEGREES(2); +- } +- else if (gPlayer1Controller->buttonDown & R_JPAD) { +- s8DirModeYawOffset += DEGREES(2); + + if (gPlayer1Controller->buttonDown & R_TRIG) { + if (gPlayer1Controller->buttonDown & L_CBUTTONS) { @@ -184,14 +187,11 @@ index dfcf16a..e56f8c0 100644 + } else { + rButtonCounter2++; } -- else if (gPlayer1Controller->buttonDown & R_JPAD) { -- s8DirModeYawOffset += DEGREES(2); +- else if (gPlayer1Controller->buttonPressed & D_JPAD) { +- s8DirModeYawOffset = s8DirModeYawOffset&0xE000; + if (gPlayer1Controller->buttonPressed & D_JPAD) { + s8DirModeBaseYaw = (s8DirModeBaseYaw + 0x1000) & 0xE000; // Lock the camera to the nearest 45deg axis } -- else if (gPlayer1Controller->buttonPressed & D_JPAD) { -- s8DirModeYawOffset = s8DirModeYawOffset&0xE000; -- } -#endif lakitu_zoom(400.f, 0x900); @@ -216,7 +216,7 @@ index dfcf16a..e56f8c0 100644 handle_c_button_movement(c); vec3f_get_dist_and_angle(sMarioCamState->pos, c->pos, &dist, &pitch, &yaw); -@@ -3036,20 +3097,21 @@ void update_lakitu(struct Camera *c) { +@@ -3036,6 +3097,8 @@ void update_lakitu(struct Camera *c) { void update_camera(struct Camera *c) { UNUSED u8 unused[24]; @@ -224,7 +224,8 @@ index dfcf16a..e56f8c0 100644 + gCamera = c; update_camera_hud_status(c); - if (c->cutscene == 0) { + if (c->cutscene == 0 && +@@ -3046,14 +3109,13 @@ void update_camera(struct Camera *c) { // Only process R_TRIG if 'fixed' is not selected in the menu if (cam_select_alt_mode(0) == CAM_SELECTION_MARIO) { if (gPlayer1Controller->buttonPressed & R_TRIG) { @@ -242,7 +243,15 @@ index dfcf16a..e56f8c0 100644 } // Initialize the camera -@@ -4849,15 +4911,15 @@ void play_camera_buzz_if_c_sideways(void) { +@@ -3356,7 +3418,6 @@ void init_camera(struct Camera *c) { + struct Surface *floor = 0; + Vec3f marioOffset; + s32 i; +- + sCreditsPlayer2Pitch = 0; + sCreditsPlayer2Yaw = 0; + gPrevLevel = gCurrLevelArea / 16; +@@ -4901,15 +4962,15 @@ void play_camera_buzz_if_c_sideways(void) { } void play_sound_cbutton_up(void) { @@ -261,7 +270,7 @@ index dfcf16a..e56f8c0 100644 } void play_sound_button_change_blocked(void) { -@@ -4961,7 +5023,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { +@@ -5013,7 +5074,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { } // Zoom in / enter C-Up @@ -270,7 +279,7 @@ index dfcf16a..e56f8c0 100644 if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) { gCameraMovementFlags &= ~CAM_MOVE_ZOOMED_OUT; play_sound_cbutton_up(); -@@ -4971,7 +5033,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { +@@ -5023,7 +5084,7 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { } // Zoom out @@ -279,7 +288,7 @@ index dfcf16a..e56f8c0 100644 if (gCameraMovementFlags & CAM_MOVE_ZOOMED_OUT) { gCameraMovementFlags |= CAM_MOVE_ALREADY_ZOOMED_OUT; #ifndef VERSION_JP -@@ -4983,6 +5045,12 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { +@@ -5035,6 +5096,12 @@ s32 radial_camera_input(struct Camera *c, UNUSED f32 unused) { } } @@ -292,7 +301,7 @@ index dfcf16a..e56f8c0 100644 //! returning uninitialized variable return dummy; } -@@ -5548,7 +5616,7 @@ void set_camera_mode_8_directions(struct Camera *c) { +@@ -5600,7 +5667,7 @@ void set_camera_mode_8_directions(struct Camera *c) { if (c->mode != CAMERA_MODE_8_DIRECTIONS) { c->mode = CAMERA_MODE_8_DIRECTIONS; sStatusFlags &= ~CAM_FLAG_SMOOTH_MOVEMENT; @@ -302,10 +311,10 @@ index dfcf16a..e56f8c0 100644 } } diff --git a/src/game/game_init.c b/src/game/game_init.c -index 8693507..fb8729d 100644 +index 317e33bf..6687016d 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c -@@ -49,6 +49,11 @@ u8 gBorderHeight; +@@ -51,6 +51,11 @@ u8 gBorderHeight; #ifdef CUSTOM_DEBUG u8 gCustomDebugMode; #endif @@ -317,7 +326,7 @@ index 8693507..fb8729d 100644 #ifdef EEP s8 gEepromProbe; #endif -@@ -725,6 +730,7 @@ void thread5_game_loop(UNUSED void *arg) { +@@ -739,6 +744,7 @@ void thread5_game_loop(UNUSED void *arg) { play_music(SEQ_PLAYER_SFX, SEQUENCE_ARGS(0, SEQ_SOUND_PLAYER), 0); set_sound_mode(save_file_get_sound_mode()); @@ -326,12 +335,12 @@ index 8693507..fb8729d 100644 gWidescreen = save_file_get_widescreen_mode(); #endif diff --git a/src/game/game_init.h b/src/game/game_init.h -index f3f650c..fdf20b6 100644 +index 84a31755..817c58df 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -45,6 +45,10 @@ extern u8 gIsConsole; #ifdef WIDE - extern u8 gWidescreen; + extern s16 gWidescreen; #endif +extern u8 gCameraSpeed; +extern u8 gWaterCamOverride; @@ -341,12 +350,12 @@ index f3f650c..fdf20b6 100644 #ifdef CUSTOM_DEBUG extern u8 gCustomDebugMode; diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c -index 158154c..9ffefec 100644 +index 6cbfd8e1..01dd4de8 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c -@@ -38,6 +38,12 @@ u8 textPressL[] = { TEXT_HUD_PRESS_L }; - u8 textWideInfo[] = { TEXT_HUD_WIDE_INFO }; - #endif +@@ -59,6 +59,12 @@ void *languageTable[][3] = + #endif + }; +u8 textCamInfoSlowest[] = { TEXT_CAM_INFO_SLOWEST }; +u8 textCamInfoSlow[] = { TEXT_CAM_INFO_SLOW }; @@ -357,7 +366,7 @@ index 158154c..9ffefec 100644 extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; -@@ -1434,6 +1440,45 @@ void reset_red_coins_collected(void) { +@@ -1504,6 +1510,45 @@ void reset_red_coins_collected(void) { gRedCoinsCollected = 0; } @@ -403,9 +412,9 @@ index 158154c..9ffefec 100644 void change_dialog_camera_angle(void) { if (cam_select_alt_mode(0) == CAM_SELECTION_MARIO) { gDialogCameraAngleIndex = CAM_SELECTION_MARIO; -@@ -1866,6 +1911,11 @@ s16 render_pause_courses_and_castle(void) { +@@ -1942,6 +1987,11 @@ s16 render_pause_courses_and_castle(void) { } - #ifdef WIDE + #if defined(WIDE) && !defined(PUPPYCAM) render_widescreen_setting(); + render_camera_speed_setting(); + if (gPlayer1Controller->buttonPressed & L_TRIG){ @@ -416,10 +425,10 @@ index 158154c..9ffefec 100644 if (gDialogTextAlpha < 250) { gDialogTextAlpha += 25; diff --git a/src/game/mario.c b/src/game/mario.c -index c0b5f76..b6da9d4 100644 +index 31e97bce..29b5e9c4 100644 --- a/src/game/mario.c +++ b/src/game/mario.c -@@ -1460,32 +1460,39 @@ void update_mario_inputs(struct MarioState *m) { +@@ -1468,32 +1468,39 @@ void update_mario_inputs(struct MarioState *m) { void set_submerged_cam_preset_and_spawn_bubbles(struct MarioState *m) { f32 heightBelowWater; s16 camPreset; @@ -481,7 +490,7 @@ index c0b5f76..b6da9d4 100644 } diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c -index ce6467e..c7e998c 100644 +index ce6467ef..c7e998c1 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -1736,6 +1736,10 @@ s32 act_shot_from_cannon(struct MarioState *m) { @@ -526,10 +535,10 @@ index ce6467e..c7e998c 100644 } diff --git a/src/game/save_file.c b/src/game/save_file.c -index b27d869..7fbf045 100644 +index bcdcdbaf..3f0b8ca1 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c -@@ -634,6 +634,12 @@ u8 save_file_get_widescreen_mode(void) { +@@ -673,6 +673,12 @@ u8 save_file_get_widescreen_mode(void) { return gSaveBuffer.menuData[0].wideMode; } @@ -542,7 +551,7 @@ index b27d869..7fbf045 100644 void save_file_set_widescreen_mode(u8 mode) { gSaveBuffer.menuData[0].wideMode = mode; -@@ -646,6 +652,10 @@ u16 save_file_get_sound_mode(void) { +@@ -685,6 +691,10 @@ u16 save_file_get_sound_mode(void) { return gSaveBuffer.menuData[0].soundMode; } @@ -554,10 +563,10 @@ index b27d869..7fbf045 100644 if (save_file_get_flags() & SAVE_FLAG_CAP_ON_GROUND) { switch (gSaveBuffer.files[gCurrSaveFileNum - 1][0].capLevel) { diff --git a/src/game/save_file.h b/src/game/save_file.h -index 3ac0c4d..d46a7e1 100644 +index 64cf0c63..085ec1d9 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h -@@ -62,6 +62,7 @@ struct MainMenuSaveData +@@ -63,6 +63,7 @@ struct MainMenuSaveData #ifdef WIDE u8 wideMode: 1; #endif @@ -565,7 +574,7 @@ index 3ac0c4d..d46a7e1 100644 #ifdef VERSION_EU u8 language: 2; -@@ -167,6 +168,8 @@ u16 save_file_get_sound_mode(void); +@@ -178,6 +179,8 @@ u16 save_file_get_sound_mode(void); u8 save_file_get_widescreen_mode(void); void save_file_set_widescreen_mode(u8 mode); #endif diff --git a/goddard.ld b/goddard.ld deleted file mode 100644 index 572d1a3c..00000000 --- a/goddard.ld +++ /dev/null @@ -1,46 +0,0 @@ -OUTPUT_ARCH (mips) - -#define BEGIN_SEG(name, addr) \ - _##name##SegmentStart = ADDR(.name); \ - _##name##SegmentRomStart = __romPos; \ - .name addr : AT(__romPos) - -#define END_SEG(name) \ - _##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \ - _##name##SegmentRomEnd = __romPos + SIZEOF(.name); \ - __romPos += SIZEOF(.name); - -#define BEGIN_NOLOAD(name) \ - _##name##SegmentBssStart = ADDR(.name.noload); \ - .name.noload (NOLOAD) : - -#define END_NOLOAD(name) \ - _##name##SegmentBssEnd = ADDR(.name.noload) + SIZEOF(.name.noload); \ - _##name##SegmentBssSize = SIZEOF(.name.noload); - -SECTIONS { - __romPos = 0; - SEG_GODDARD = 0x80345670; - BEGIN_SEG(goddard, SEG_GODDARD) - { - #define LOAD - #include "goddard.ld.inc" - #undef LOAD - . = ALIGN(16); - } - END_SEG(goddard) - BEGIN_NOLOAD(goddard) { - #define NOLOAD - #include "goddard.ld.inc" - #undef NOLOAD - . = ALIGN(16); - } - END_NOLOAD(goddard) - - GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload); - - /DISCARD/ : - { - *(*); - } -} diff --git a/goddard.ld.inc b/goddard.ld.inc deleted file mode 100644 index 203b718d..00000000 --- a/goddard.ld.inc +++ /dev/null @@ -1,41 +0,0 @@ -#ifdef LOAD - KEEP(BUILD_DIR/src/menu*.o(.text)); - KEEP(BUILD_DIR/src/menu*.o(.data*)); - KEEP(BUILD_DIR/src/menu*.o(.rodata*)); -#ifdef KEEP_MARIO_HEAD - KEEP(BUILD_DIR/libgoddard.a:*.o(.text)); - KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*)); - KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*)); - KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*)); -#endif -#endif - - - -#ifdef NOLOAD - KEEP(BUILD_DIR/src/menu*.o(.bss*)); -#ifdef KEEP_MARIO_HEAD - KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*)); -#endif -#endif - diff --git a/include/config.h b/include/config.h index f170f10a..72a0670f 100644 --- a/include/config.h +++ b/include/config.h @@ -1,6 +1,6 @@ #ifndef CONFIG_H #define CONFIG_H -// ULTRASM64-EXTBOUNDS CONFIG FLAGS NEAR BOTTOM +// HACKERSM64 CONFIG DEFINES NEAR BOTTOM /** * @file config.h * A catch-all file for configuring various bugfixes and other settings (maybe eventually) in SM64 @@ -52,7 +52,7 @@ #endif -// -- ultrasm64-extbounds specific settings -- +// -- HackerSM64 specific settings -- // TEST LEVEL // Uncomment this define and set a test level in order to boot straight into said level. @@ -98,11 +98,13 @@ #define PARALLEL_LAKITU_CAM // Allows Mario to ledgegrab sloped floors #define NO_FALSE_LEDGEGRABS +//Adds multiple languages to the game. Just a placeholder for the most part, because it only works with EU, and must be enabled with EU. +#define MULTILANG (0 || VERSION_EU) //Enables Puppy Camera 2, a rewritten camera that can be freely configured and modified. //#define PUPPYCAM -// HACKER QOL +// HACKER QOL // Increase the maximum pole length (it will treat bparam1 and bparam2 as a single value) #define LONGER_POLES // Number of possible unique model ID's (keep it higher than 256) @@ -115,7 +117,7 @@ //#define CUSTOM_DEBUG // Include Puppyprint, a display library for text and large images. Also includes a custom, enhanced performance profiler. //#define PUPPYPRINT -#define PUPPYPRINT_DEBUG 0 +//#define PUPPYPRINT_DEBUG 0 // BUG/GAME QOL FIXES // Fix instant warp offset not working when warping across different areas diff --git a/include/eu_translation.h b/include/eu_translation.h index 19686825..90f62ff4 100644 --- a/include/eu_translation.h +++ b/include/eu_translation.h @@ -4,7 +4,8 @@ // EU changes most text to arrays for each language. This define allows these // differences to be combined. #ifdef VERSION_EU - #define LANGUAGE_ARRAY(cmd) cmd[LANGUAGE_FUNCTION] + //#define LANGUAGE_ARRAY(cmd) cmd[LANGUAGE_FUNCTION] + #define LANGUAGE_ARRAY(cmd) cmd #else #define LANGUAGE_ARRAY(cmd) cmd #endif diff --git a/include/text_strings.h.in b/include/text_strings.h.in index 30d01fa6..c5ee3fa8 100644 --- a/include/text_strings.h.in +++ b/include/text_strings.h.in @@ -3,12 +3,10 @@ #include "text_menu_strings.h" -#ifdef PUPPYCAM +#if defined(PUPPYCAM) #define NC_CAMX_EN _("Camera X Sensitivity") #define NC_CAMY_EN _("Camera Y Sensitivity") #define NC_INVERTX_EN _("Invert X Axis") -#define NC_INVERTX_FR _("Invertir Axe X") -#define NC_INVERTX_DE _("Invert X Axis") #define NC_INVERTY_EN _("Invert Y Axis") #define NC_CAMC_EN _("Camera Centre Speed") #define NC_ANALOGUE_EN _("Analogue Camera") @@ -18,59 +16,50 @@ #define OPTION_SCHEME1_EN _("Double Tap") #define OPTION_SCHEME2_EN _("Single Press") #define OPTION_SCHEME3_EN _("Classic") +#define OPTION_LANGUAGE_EN _("Language") #define NC_WIDE_EN _("Widescreen") #define NC_HIGHLIGHT_L _(">") #define NC_HIGHLIGHT_R _("<") #define NC_BUTTON_EN _("[R]: Options") #define NC_BUTTON2_EN _("[R]: Return") -#define NC_OPTION_EN _("PUPPYCAM OPTIONS") +#define NC_OPTION_EN _("OPTIONS") - -#if defined(VERSION_EU) +#if MULTILANG #define NC_CAMX_FR _("Sensibilite sur l'axe X") -#define NC_CAMX_DE _("Camera X Sensitivity") - #define NC_CAMY_FR _("Sensibilite sur l'axe Y") -#define NC_CAMY_DE _("Camera Y Sensitivity") - +#define NC_INVERTX_FR _("Invertir Axe X") #define NC_INVERTY_FR _("Invertir Axe Y") -#define NC_INVERTY_DE _("Invert Y Axis") - #define NC_CAMC_FR _("Vitesse de Centrage") -#define NC_CAMC_DE _("Camera Centre Speed") - #define NC_ANALOGUE_FR _("Camera Analogue") -#define NC_ANALOGUE_DE _("Analogue Camera") - #define NC_SCHEME_FR _("Control Scheme") -#define NC_SCHEME_DE _("Control Scheme") - +#define OPTION_ENABLED_FR _("Active") +#define OPTION_DISABLED_FR _("Desactive") +#define OPTION_SCHEME1_FR _("Double Tap") +#define OPTION_SCHEME2_FR _("Single Press") +#define OPTION_SCHEME3_FR _("Classic") +#define OPTION_LANGUAGE_FR _("Language") #define NC_WIDE_FR _("Widescreen") +#define NC_BUTTON_FR _("[R]: Options") +#define NC_BUTTON2_FR _("[R]: Retournez") +#define NC_OPTION_FR _("OPTIONS") + +#define NC_CAMX_DE _("Camera X Sensitivity") +#define NC_CAMY_DE _("Camera Y Sensitivity") +#define NC_INVERTY_DE _("Invert Y Axis") +#define NC_INVERTX_DE _("Invert X Axis") +#define NC_CAMC_DE _("Camera Centre Speed") +#define NC_ANALOGUE_DE _("Analogue Camera") +#define NC_SCHEME_DE _("Control Scheme") +#define OPTION_ENABLED_DE _("Enabled") +#define OPTION_DISABLED_DE _("Disabled") +#define OPTION_SCHEME1_DE _("Double Tap") +#define OPTION_SCHEME2_DE _("Single Press") +#define OPTION_SCHEME3_DE _("Classic") +#define OPTION_LANGUAGE_DE _("Language") #define NC_WIDE_DE _("Widescreen") - -#define OPTION_ENABLED_FR _("Active") -#define OPTION_ENABLED_DE _("Enabled") - -#define OPTION_DISABLED_FR _("Desactive") -#define OPTION_DISABLED_DE _("Disabled") - -#define OPTION_SCHEME1_FR _("Double Tap") -#define OPTION_SCHEME1_DE _("Double Tap") - -#define OPTION_SCHEME2_FR _("Single Press") -#define OPTION_SCHEME2_DE _("Single Press") - -#define OPTION_SCHEME3_FR _("Classic") -#define OPTION_SCHEME3_DE _("Classic") - -#define NC_BUTTON_FR _("[R]: Options") -#define NC_BUTTON_DE _("[R]: Options") - -#define NC_BUTTON2_FR _("[R]: Retournez") -#define NC_BUTTON2_DE _("[R]: Return") - -#define NC_OPTION_FR _("OPTIONS PUPPYCAM") -#define NC_OPTION_DE _("PUPPYCAM OPTIONS") +#define NC_BUTTON_DE _("[R]: Options") +#define NC_BUTTON2_DE _("[R]: Return") +#define NC_OPTION_DE _("OPTIONS") #endif #endif @@ -97,11 +86,10 @@ #define TEXT_HUD_CONGRATULATIONS _("CONGRATULATIONS") // Course Complete Text, Bowser Courses //Widescreen stuff -#ifdef WIDE +#if defined(WIDE) && !defined(PUPPYCAM) #define TEXT_HUD_CURRENT_RATIO_43 _("ASPECT RATIO: 4:3") #define TEXT_HUD_CURRENT_RATIO_169 _("ASPECT RATIO: 16:9") #define TEXT_HUD_PRESS_L _("PRESS L TO SWITCH") -#define TEXT_HUD_WIDE_INFO _("PLEASE CONFIGURE YOUR DISPLAY OR YOUR EMULATOR TO\nSTRETCH THE IMAGE TO 16:9") #endif #if defined(VERSION_JP) || defined(VERSION_SH) @@ -303,7 +291,12 @@ #endif -#ifdef VERSION_EU + +#define TEXT_ENGLISH _("ENGLISH") +#define TEXT_FRENCH _("FRANÇAIS") +#define TEXT_GERMAN _("DEUTSCH") + +#if MULTILANG /** * File Select Text @@ -387,10 +380,6 @@ #define TEXT_MONO_DE _("MONO") #define TEXT_HEADSET_DE _("PHONES") -#define TEXT_ENGLISH _("ENGLISH") -#define TEXT_FRENCH _("FRANÇAIS") -#define TEXT_GERMAN _("DEUTSCH") - #define TEXT_HI_SCORE_FR _("MEILLEUR SCORE") #define TEXT_HI_SCORE_DE _("BESTLEISTUNG") diff --git a/levels/scripts.h b/levels/scripts.h index 24bdec37..dc019682 100644 --- a/levels/scripts.h +++ b/levels/scripts.h @@ -2,6 +2,7 @@ #define SCRIPTS_H #include "types.h" +#include "game/puppycam2.h" // scripts extern const LevelScript level_main_scripts_entry[]; diff --git a/sm64.ld b/sm64.ld index 8c7b86fd..e581587f 100755 --- a/sm64.ld +++ b/sm64.ld @@ -190,7 +190,9 @@ SECTIONS lib/PR/hvqm/hvqm2sp1.o(.rodata*); } END_SEG(main) - ASSERT((_mainSegmentRomEnd <= 0x101000), "Error: Please shrink your main segment to under 1MB.") + #ifndef PRELIMINARY + ASSERT((_mainSegmentRomEnd <= 0x101000), "Error: Please shrink your main segment to under 1MB.") + #endif BEGIN_NOLOAD(main) { BUILD_DIR/src/game*.o(.*bss*); @@ -247,7 +249,9 @@ SECTIONS __expansionRamStart = 0x80400000; #ifndef USE_EXT_RAM - ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.") + #ifndef PRELIMINARY + ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.") + #endif #endif BEGIN_SEG(entry, 0x10000000) @@ -300,22 +304,54 @@ SECTIONS /* 0x8016F000 21D7D0-255EC0 [386F0] */ BEGIN_SEG(goddard, RAM_END - GODDARD_SIZE) { - #define LOAD - #include "goddard.ld.inc" - #undef LOAD + KEEP(BUILD_DIR/src/menu*.o(.text)); + KEEP(BUILD_DIR/src/menu*.o(.data*)); + KEEP(BUILD_DIR/src/menu*.o(.rodata*)); + #ifdef KEEP_MARIO_HEAD + KEEP(BUILD_DIR/libgoddard.a:*.o(.text)); + KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:objects.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:particles.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:joints.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:renderer.o(.data*)); + KEEP(BUILD_DIR/libgoddard.a:gd_main.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:objects.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:particles.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:old_menu.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:joints.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:skin.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:gd_math.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*)); + KEEP(BUILD_DIR/libgoddard.a:renderer.o(.rodata*)); + #endif . = ALIGN(16); } END_SEG(goddard) BEGIN_NOLOAD(goddard) { - #define NOLOAD - #include "goddard.ld.inc" - #undef NOLOAD + KEEP(BUILD_DIR/src/menu*.o(.bss*)); + #ifdef KEEP_MARIO_HEAD + KEEP(BUILD_DIR/libgoddard.a:*.o(.bss*)); + #endif . = ALIGN(16); } END_NOLOAD(goddard) - ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.") + #ifndef PRELIMINARY + ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.") + #endif + #ifdef PRELIMINARY + GODDARD_SIZE = SIZEOF(.goddard) + SIZEOF(.goddard.noload); + #endif /* 0x268020 0x268020-0 [0] */ BEGIN_SEG(intro, 0x14000000) diff --git a/src/audio/data.h b/src/audio/data.h index a8bc7f78..e0f7b1cd 100644 --- a/src/audio/data.h +++ b/src/audio/data.h @@ -116,8 +116,8 @@ extern u32 gAudioRandom; #define EXT_AUDIO_INIT_POOL_SIZE 0x8000 #else // EU and SH versions not yet supported for extended audio heap -#define EXT_AUDIO_HEAP_SIZE 0x0 -#define EXT_AUDIO_INIT_POOL_SIZE 0x0 +#define EXT_AUDIO_HEAP_SIZE 0x24400 +#define EXT_AUDIO_INIT_POOL_SIZE 0x8000 #endif #else #define EXT_AUDIO_HEAP_SIZE 0x0 diff --git a/src/audio/load.c b/src/audio/load.c index d7d7b50a..31ca8bd4 100644 --- a/src/audio/load.c +++ b/src/audio/load.c @@ -1000,8 +1000,9 @@ void audio_init() { } #endif - D_EU_802298D0 = 20.03042f; - gRefreshRate = 50; + //D_EU_802298D0 = 20.03042f; + D_EU_802298D0 = 16.713f; + gRefreshRate = 60; port_eu_init(); if (k) { } diff --git a/src/buffers/buffers.c b/src/buffers/buffers.c index 95174530..a20b7592 100644 --- a/src/buffers/buffers.c +++ b/src/buffers/buffers.c @@ -10,13 +10,7 @@ #include "audio/synthesis.h" ALIGNED8 u8 gDecompressionHeap[0xD000]; -#if defined(VERSION_EU) -ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200 + EXT_AUDIO_HEAP_SIZE + EXT_AUDIO_INIT_POOL_SIZE) - 0x3800]; -#elif defined(VERSION_SH) -ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200 + EXT_AUDIO_HEAP_SIZE + EXT_AUDIO_INIT_POOL_SIZE) - 0x4800]; -#else ALIGNED16 u8 gAudioHeap[DOUBLE_SIZE_ON_64_BIT(0x31200 + EXT_AUDIO_HEAP_SIZE + EXT_AUDIO_INIT_POOL_SIZE + BETTER_REVERB_SIZE)]; -#endif ALIGNED8 u8 gIdleThreadStack[0x800]; ALIGNED8 u8 gThread3Stack[0x2000]; @@ -26,9 +20,14 @@ ALIGNED8 u8 gThread5Stack[0x2000]; ALIGNED8 u8 gThread6Stack[0x2000]; #endif // 0x400 bytes -ALIGNED8 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; +#if UNF +ALIGNED16 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; +ALIGNED16 u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; +#else // 0xc00 bytes for f3dex, 0x900 otherwise +ALIGNED8 u8 gGfxSPTaskStack[SP_DRAM_STACK_SIZE8]; ALIGNED8 u8 gGfxSPTaskYieldBuffer[OS_YIELD_DATA_SIZE]; +#endif // UNF // 0x200 bytes struct SaveBuffer __attribute__ ((aligned (8))) gSaveBuffer; // 0x190a0 bytes diff --git a/src/engine/math_util.c b/src/engine/math_util.c index 8a5359e3..491d6d33 100644 --- a/src/engine/math_util.c +++ b/src/engine/math_util.c @@ -210,7 +210,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s16 roll) { dx = to[0] - from[0]; dz = to[2] - from[2]; - invLength = -1.0 / sqrtf(dx * dx + dz * dz); + invLength = -1.0f / MAX(sqrtf(dx * dx + dz * dz), 0.00001f); dx *= invLength; dz *= invLength; @@ -222,7 +222,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s16 roll) { yColZ = to[1] - from[1]; zColZ = to[2] - from[2]; - invLength = -1.0 / sqrtf(xColZ * xColZ + yColZ * yColZ + zColZ * zColZ); + invLength = -1.0f / MAX(sqrtf(xColZ * xColZ + yColZ * yColZ + zColZ * zColZ), 0.00001f); xColZ *= invLength; yColZ *= invLength; zColZ *= invLength; @@ -231,7 +231,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s16 roll) { yColX = zColY * xColZ - xColY * zColZ; zColX = xColY * yColZ - yColY * xColZ; - invLength = 1.0 / sqrtf(xColX * xColX + yColX * yColX + zColX * zColX); + invLength = 1.0f / MAX(sqrtf(xColX * xColX + yColX * yColX + zColX * zColX), 0.00001f); xColX *= invLength; yColX *= invLength; @@ -241,7 +241,7 @@ void mtxf_lookat(Mat4 mtx, Vec3f from, Vec3f to, s16 roll) { yColY = zColZ * xColX - xColZ * zColX; zColY = xColZ * yColX - yColZ * xColX; - invLength = 1.0 / sqrtf(xColY * xColY + yColY * yColY + zColY * zColY); + invLength = 1.0f / MAX(sqrtf(xColY * xColY + yColY * yColY + zColY * zColY), 0.00001f); xColY *= invLength; yColY *= invLength; zColY *= invLength; @@ -575,7 +575,7 @@ void mtxf_mul_vec3s(Mat4 mtx, Vec3s b) { void mtxf_to_mtx(Mtx *dest, Mat4 src) { Mat4 temp; register s32 i, j; - + for( i = 0; i < 4; i++ ) { for( j = 0; j < 3; j++ ) { temp[i][j] = src[i][j] / WORLD_SCALE; diff --git a/src/engine/surface_collision.c b/src/engine/surface_collision.c index 98f7f396..26da733c 100644 --- a/src/engine/surface_collision.c +++ b/src/engine/surface_collision.c @@ -184,10 +184,10 @@ s32 f32_find_wall_collision(f32 *xPtr, f32 *yPtr, f32 *zPtr, f32 offsetY, f32 ra */ s32 find_wall_collisions(struct WallCollisionData *colData) { struct SurfaceNode *node; - s16 cellX, cellZ; + s32 cellX, cellZ; s32 numCollisions = 0; - s16 x = colData->x; - s16 z = colData->z; + s32 x = colData->x; + s32 z = colData->z; #ifdef PUPPYPRINT OSTime first = osGetTime(); #endif @@ -271,7 +271,7 @@ static struct Surface *find_ceil_from_list(struct SurfaceNode *surfaceNode, s32 nx = surf->normal.x; ny = surf->normal.y; nz = surf->normal.z; - oo = surf->originOffset; + oo = surf->originOffset; // If a wall, ignore it. Likely a remnant, should never occur. if (ny == 0.0f) { continue; @@ -301,22 +301,19 @@ static struct Surface *find_ceil_from_list(struct SurfaceNode *surfaceNode, s32 * Find the lowest ceiling above a given position and return the height. */ f32 find_ceil(f32 posX, f32 posY, f32 posZ, struct Surface **pceil) { - s16 cellZ, cellX; + s32 cellZ, cellX; struct Surface *ceil, *dynamicCeil; struct SurfaceNode *surfaceList; f32 height = CELL_HEIGHT_LIMIT; f32 dynamicHeight = CELL_HEIGHT_LIMIT; - s16 x, y, z; + s32 x, y, z; #ifdef PUPPYPRINT OSTime first = osGetTime(); #endif - //! (Parallel Universes) Because position is casted to an s16, reaching higher - // float locations can return ceilings despite them not existing there. - //(Dynamic ceilings will unload due to the range.) - x = (s16) posX; - y = (s16) posY; - z = (s16) posZ; + x = posX; + y = posY; + z = posZ; *pceil = NULL; if (x <= -LEVEL_BOUNDARY_MAX || x >= LEVEL_BOUNDARY_MAX) { @@ -491,17 +488,17 @@ static f32 get_floor_height_at_location(s32 x, s32 z, struct Surface *surf) { * Iterate through the list of water floors and find the first water floor under a given point. */ struct Surface *find_water_floor_from_list(struct SurfaceNode *surfaceNode, s32 x, s32 y, s32 z, - f32 *pheight) { + s32 *pheight) { register struct Surface *surf; struct Surface *floor = NULL; struct SurfaceNode *topSurfaceNode = surfaceNode; struct SurfaceNode *bottomSurfaceNode = surfaceNode; - f32 height = FLOOR_LOWER_LIMIT; - f32 bottomHeight = FLOOR_LOWER_LIMIT; + s32 height = FLOOR_LOWER_LIMIT; + s32 bottomHeight = FLOOR_LOWER_LIMIT; // Iterate through the list of water floors until there are no more water floors. while (bottomSurfaceNode != NULL) { - f32 curBottomHeight = FLOOR_LOWER_LIMIT; + s32 curBottomHeight = FLOOR_LOWER_LIMIT; surf = bottomSurfaceNode->surface; bottomSurfaceNode = bottomSurfaceNode->next; @@ -515,7 +512,7 @@ struct Surface *find_water_floor_from_list(struct SurfaceNode *surfaceNode, s32 // Iterate through the list of water tops until there are no more water tops. while (topSurfaceNode != NULL) { - f32 curHeight = FLOOR_LOWER_LIMIT; + s32 curHeight = FLOOR_LOWER_LIMIT; surf = topSurfaceNode->surface; topSurfaceNode = topSurfaceNode->next; @@ -556,13 +553,13 @@ f32 unused_find_dynamic_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfl f32 floorHeight = FLOOR_LOWER_LIMIT; // Would normally cause PUs, but dynamic floors unload at that range. - s16 x = (s16) xPos; - s16 y = (s16) yPos; - s16 z = (s16) zPos; + s32 x = xPos; + s32 y = yPos; + s32 z = zPos; // Each level is split into cells to limit load, find the appropriate cell. - s16 cellX = ((x + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & NUM_CELLS_INDEX; - s16 cellZ = ((z + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & NUM_CELLS_INDEX; + s32 cellX = ((x + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & NUM_CELLS_INDEX; + s32 cellZ = ((z + LEVEL_BOUNDARY_MAX) / CELL_SIZE) & NUM_CELLS_INDEX; surfaceList = gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_FLOORS].next; floor = find_floor_from_list(surfaceList, x, y, z, &floorHeight); @@ -576,7 +573,7 @@ f32 unused_find_dynamic_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfl * Find the highest floor under a given position and return the height. */ f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { - s16 cellZ, cellX; + s32 cellZ, cellX; #ifdef PUPPYPRINT OSTime first = osGetTime(); #endif @@ -590,9 +587,9 @@ f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { //! (Parallel Universes) Because position is casted to an s16, reaching higher // float locations can return floors despite them not existing there. //(Dynamic floors will unload due to the range.) - s16 x = (s16) xPos; - s16 y = (s16) yPos; - s16 z = (s16) zPos; + s32 x = xPos; + s32 y = yPos; + s32 z = zPos; *pfloor = NULL; @@ -662,17 +659,17 @@ f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { /** * Find the highest water floor under a given position and return the height. */ -f32 find_water_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { - s16 cellZ, cellX; +s32 find_water_floor(s32 xPos, s32 yPos, s32 zPos, struct Surface **pfloor) { + s32 cellZ, cellX; struct Surface *floor = NULL; struct SurfaceNode *surfaceList; - f32 height = FLOOR_LOWER_LIMIT; + s32 height = FLOOR_LOWER_LIMIT; - s16 x = (s16) xPos; - s16 y = (s16) yPos; - s16 z = (s16) zPos; + s32 x = xPos; + s32 y = yPos; + s32 z = zPos; if (x <= -LEVEL_BOUNDARY_MAX || x >= LEVEL_BOUNDARY_MAX) { return height; @@ -705,7 +702,7 @@ f32 find_water_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor) { /** * Finds the height of water at a given location. */ -f32 find_water_level_and_floor(f32 x, f32 z, struct Surface **pfloor) { +s32 find_water_level_and_floor(s32 x, s32 z, struct Surface **pfloor) { s32 i; s32 numRegions; s32 val; @@ -756,7 +753,7 @@ f32 find_water_level_and_floor(f32 x, f32 z, struct Surface **pfloor) { /** * Finds the height of water at a given location. */ -f32 find_water_level(f32 x, f32 z) { +s32 find_water_level(s32 x, s32 z) { s32 i; s32 numRegions; s32 val; @@ -805,7 +802,7 @@ f32 find_water_level(f32 x, f32 z) { /** * Finds the height of the poison gas (used only in HMC) at a given location. */ -f32 find_poison_gas_level(f32 x, f32 z) { +s32 find_poison_gas_level(s32 x, s32 z) { s32 i; s32 numRegions; s32 val; diff --git a/src/engine/surface_collision.h b/src/engine/surface_collision.h index 86540788..bcd6baf4 100644 --- a/src/engine/surface_collision.h +++ b/src/engine/surface_collision.h @@ -11,7 +11,7 @@ #define CELL_HEIGHT_LIMIT 20000 #define FLOOR_LOWER_LIMIT -11000 #define FLOOR_LOWER_LIMIT_MISC (FLOOR_LOWER_LIMIT + 1000) -// same as FLOOR_LOWER_LIMIT_MISC, explicitly for shadow.c +// same as FLOOR_LOWER_LIMIT_MISC, explicitly for shadow.c // It doesn't match if ".0" is removed or ".f" is added #define FLOOR_LOWER_LIMIT_SHADOW (FLOOR_LOWER_LIMIT + 1000.0) @@ -40,9 +40,9 @@ f32 find_ceil(f32 posX, f32 posY, f32 posZ, struct Surface **pceil); f32 find_floor_height_and_data(f32 xPos, f32 yPos, f32 zPos, struct FloorGeometry **floorGeo); f32 find_floor_height(f32 x, f32 y, f32 z); f32 find_floor(f32 xPos, f32 yPos, f32 zPos, struct Surface **pfloor); -f32 find_water_level_and_floor(f32 x, f32 z, struct Surface **pfloor); -f32 find_water_level(f32 x, f32 z); -f32 find_poison_gas_level(f32 x, f32 z); +s32 find_water_level_and_floor(s32 x, s32 z, struct Surface **pfloor); +s32 find_water_level(s32 x, s32 z); +s32 find_poison_gas_level(s32 x, s32 z); void debug_surface_list_info(f32 xPos, f32 zPos); #endif // SURFACE_COLLISION_H diff --git a/src/game/camera.c b/src/game/camera.c index 25b27983..64604a7c 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -3509,6 +3509,9 @@ void init_camera(struct Camera *c) { gLakituState.nextYaw = gLakituState.yaw; c->yaw = gLakituState.yaw; c->nextYaw = gLakituState.yaw; + #ifdef CAMERA_FIX + set_camera_mode(c, CAMERA_MODE_8_DIRECTIONS, 0); + #endif #ifdef PUPPYCAM puppycam_init(); #endif diff --git a/src/game/game_init.h b/src/game/game_init.h index 481c81b0..84a31755 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -9,7 +9,7 @@ #include "types.h" #include "memory.h" -#define GFX_POOL_SIZE 6400 // Size of how large the master display list (gDisplayListHead) can be +#define GFX_POOL_SIZE 10000 // Size of how large the master display list (gDisplayListHead) can be struct GfxPool { Gfx buffer[GFX_POOL_SIZE]; diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index c5736037..7d3175b6 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -8,6 +8,7 @@ #include "dialog_ids.h" #include "engine/math_util.h" #include "eu_translation.h" +#include "segment_symbols.h" #include "game_init.h" #include "gfx_dimensions.h" #include "ingame_menu.h" @@ -32,13 +33,31 @@ u16 gDialogTextAlpha; s16 gCutsceneMsgXOffset; s16 gCutsceneMsgYOffset; s8 gRedCoinsCollected; -#ifdef WIDE +#if defined(WIDE) && !defined(PUPPYCAM) u8 textCurrRatio43[] = { TEXT_HUD_CURRENT_RATIO_43 }; u8 textCurrRatio169[] = { TEXT_HUD_CURRENT_RATIO_169 }; u8 textPressL[] = { TEXT_HUD_PRESS_L }; -u8 textWideInfo[] = { TEXT_HUD_WIDE_INFO }; #endif +#if MULTILANG +#define seg2_course_name_table course_name_table_eu_en +#define seg2_act_name_table act_name_table_eu_en +#define seg2_dialog_table dialog_table_eu_en +#endif + +s16 gInGameLanguage = 0; +s16 gLoadedLanguage = 0; + +void *languageTable[][3] = +{ + {&seg2_dialog_table, &seg2_course_name_table, &seg2_act_name_table}, //In EU, this is just mirroring English. + #if MULTILANG + {&dialog_table_eu_en, &course_name_table_eu_en, &act_name_table_eu_en}, + {&dialog_table_eu_fr, &course_name_table_eu_fr, &act_name_table_eu_fr}, + {&dialog_table_eu_de, &course_name_table_eu_de, &act_name_table_eu_de}, + #endif +}; + extern u8 gLastCompletedCourseNum; extern u8 gLastCompletedStarNum; @@ -65,6 +84,7 @@ enum DialogMark { DIALOG_MARK_NONE = 0, DIALOG_MARK_DAKUTEN = 1, DIALOG_MARK_HAN #define DEFAULT_DIALOG_BOX_ANGLE 90.0f #define DEFAULT_DIALOG_BOX_SCALE 19.0f +#if defined(VERSION_US) || defined(VERSION_EU) u8 gDialogCharWidths[256] = { // TODO: Is there a way to auto generate this? 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 5, 8, 8, 6, 6, 6, 6, 6, 5, 6, 6, @@ -72,17 +92,30 @@ u8 gDialogCharWidths[256] = { // TODO: Is there a way to auto generate this? 7, 5, 5, 5, 6, 5, 5, 5, 5, 5, 7, 7, 5, 5, 4, 4, 8, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8, 8, 7, 7, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, +#ifdef VERSION_EU + 6, 6, 6, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 4, + 5, 5, 5, 5, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 5, 5, 5, 0, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 5, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 5, 6, + 0, 4, 4, 0, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#else 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#endif 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#ifdef VERSION_EU + 7, 5, 10, 5, 9, 8, 4, 0, 0, 0, 0, 5, 5, 6, 5, 0, +#else 7, 5, 10, 5, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, +#endif 0, 0, 5, 7, 7, 6, 6, 8, 0, 8, 10, 6, 4, 10, 0, 0 }; +#endif s8 gDialogBoxState = DIALOG_STATE_OPENING; f32 gDialogBoxOpenTimer = DEFAULT_DIALOG_BOX_ANGLE; @@ -217,15 +250,50 @@ static u8 *alloc_ia8_text_from_i1(u16 *in, s16 width, s16 height) { return out; } +u8 *alloc_ia4_tex_from_i1(u8 *in, s16 width, s16 height) { + u32 size = (u32) width * (u32) height; + u8 *out; + s32 inPos; + s16 outPos; + u8 bitMask; + + outPos = 0; + out = (u8 *) alloc_display_list(size); + + if (out == NULL) { + return NULL; + } + + for (inPos = 0; inPos < (width * height) / 4; inPos++) { + bitMask = 0x80; + while (bitMask != 0) { + out[outPos] = (in[inPos] & bitMask) ? 0xF0 : 0x00; + bitMask /= 2; + out[outPos] = (in[inPos] & bitMask) ? out[outPos] + 0x0F : out[outPos]; + bitMask /= 2; + outPos++; + } + } + + return out; +} + void render_generic_char(u8 c) { void **fontLUT; void *packedTexture; + void *unpackedTexture; fontLUT = segmented_to_virtual(main_font_lut); packedTexture = segmented_to_virtual(fontLUT[c]); - + #ifdef VERSION_EU + unpackedTexture = alloc_ia4_tex_from_i1(packedTexture, 8, 8); + gDPPipeSync(gDisplayListHead++); + gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(unpackedTexture)); + #else gDPPipeSync(gDisplayListHead++); gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_IA, G_IM_SIZ_16b, 1, VIRTUAL_TO_PHYSICAL(packedTexture)); + #endif + gSPDisplayList(gDisplayListHead++, dl_ia_text_tex_settings); } @@ -1106,7 +1174,7 @@ void render_dialog_entries(void) { void **dialogTable; struct DialogEntry *dialog; s8 lowerBound = 0; - dialogTable = segmented_to_virtual(seg2_dialog_table); + dialogTable = segmented_to_virtual(languageTable[gInGameLanguage][0]); dialog = segmented_to_virtual(dialogTable[gDialogID]); // if the dialog entry is invalid, set the ID to -1. @@ -1354,7 +1422,7 @@ void print_peach_letter_message(void) { void **dialogTable; struct DialogEntry *dialog; u8 *str; - dialogTable = segmented_to_virtual(seg2_dialog_table); + dialogTable = segmented_to_virtual(languageTable[gInGameLanguage][0]); dialog = segmented_to_virtual(dialogTable[gDialogID]); str = segmented_to_virtual(dialog->str); @@ -1506,7 +1574,6 @@ void render_widescreen_setting(void) { else { print_generic_string(10, 20, textCurrRatio169); print_generic_string(10, 7, textPressL); - print_generic_string(10, 220, textWideInfo); } gSPDisplayList(gDisplayListHead++, dl_ia_text_end); if (gPlayer1Controller->buttonPressed & L_TRIG){ @@ -1536,8 +1603,8 @@ void render_pause_my_score_coins(void) { u8 courseIndex; u8 starFlags; - courseNameTbl = segmented_to_virtual(seg2_course_name_table); - actNameTbl = segmented_to_virtual(seg2_act_name_table); + courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); + actNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][2]); courseIndex = gCurrCourseNum - 1; starFlags = save_file_get_star_flags(gCurrSaveFileNum - 1, gCurrCourseNum - 1); @@ -1738,7 +1805,7 @@ void render_pause_castle_course_stars(s16 x, s16 y, s16 fileNum, s16 courseNum) } void render_pause_castle_main_strings(s16 x, s16 y) { - void **courseNameTbl = segmented_to_virtual(seg2_course_name_table); + void **courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); u8 textCoin[] = { TEXT_COIN_X }; @@ -1981,8 +2048,8 @@ void render_course_complete_lvl_info_and_hud_str(void) { u8 strCourseNum[4]; - actNameTbl = segmented_to_virtual(seg2_act_name_table); - courseNameTbl = segmented_to_virtual(seg2_course_name_table); + actNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][2]); + courseNameTbl = segmented_to_virtual(languageTable[gInGameLanguage][1]); if (gLastCompletedCourseNum <= COURSE_STAGES_MAX) { print_hud_course_complete_coins(118, 103); @@ -2068,9 +2135,6 @@ void render_save_confirmation(s16 x, s16 y, s8 *index, s16 sp6e) s16 render_course_complete_screen(void) { s16 index; -#ifdef VERSION_EU - gInGameLanguage = eu_get_language(); -#endif switch (gDialogBoxState) { case DIALOG_STATE_OPENING: diff --git a/src/game/ingame_menu.h b/src/game/ingame_menu.h index 1102d2f5..30c17aa3 100644 --- a/src/game/ingame_menu.h +++ b/src/game/ingame_menu.h @@ -37,6 +37,7 @@ enum MenuMode { extern s8 gDialogCourseActNum; extern s8 gHudFlash; +extern s16 gInGameLanguage; struct DialogEntry { diff --git a/src/game/level_update.c b/src/game/level_update.c index d179cfd8..2917081e 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -20,7 +20,7 @@ #include "obj_behaviors.h" #include "save_file.h" #include "debug_course.h" -#ifdef VERSION_EU +#if MULTILANG #include "memory.h" #include "eu_translation.h" #include "segment_symbols.h" @@ -28,6 +28,7 @@ #include "level_table.h" #include "course_table.h" #include "rumble_init.h" +#include "puppycam2.h" #include "config.h" @@ -640,6 +641,18 @@ void initiate_warp(s16 destLevel, s16 destArea, s16 destWarpNode, s32 arg3) { sWarpDest.areaIdx = destArea; sWarpDest.nodeId = destWarpNode; sWarpDest.arg = arg3; + + #ifdef PUPPYCAM + s32 i = 0; + if (sWarpDest.type != WARP_TYPE_SAME_AREA) + { + for (i = 0; i < gPuppyVolumeCount; i++) + { + mem_pool_free(gPuppyMemoryPool, sPuppyVolumeStack[i]); + } + gPuppyVolumeCount = 0; + } + #endif } // From Surface 0xD3 to 0xFC @@ -1268,23 +1281,28 @@ s32 lvl_init_or_update(s16 initOrUpdate, UNUSED s32 unused) { return result; } -s32 lvl_init_from_save_file(UNUSED s16 arg0, s32 levelNum) { -#ifdef VERSION_EU - s16 var = eu_get_language(); - switch (var) { +#if MULTILANG +void load_language_text(void) +{ + switch (gInGameLanguage-1) + { case LANGUAGE_ENGLISH: - load_segment_decompress(0x19, _translation_en_yay0SegmentRomStart, - _translation_en_yay0SegmentRomEnd); + load_segment_decompress(0x19, _translation_en_yay0SegmentRomStart, _translation_en_yay0SegmentRomEnd); break; case LANGUAGE_FRENCH: - load_segment_decompress(0x19, _translation_fr_yay0SegmentRomStart, - _translation_fr_yay0SegmentRomEnd); + load_segment_decompress(0x19, _translation_fr_yay0SegmentRomStart, _translation_fr_yay0SegmentRomEnd); break; case LANGUAGE_GERMAN: - load_segment_decompress(0x19, _translation_de_yay0SegmentRomStart, - _translation_de_yay0SegmentRomEnd); + load_segment_decompress(0x19, _translation_de_yay0SegmentRomStart, _translation_de_yay0SegmentRomEnd); break; } +} +#endif + +s32 lvl_init_from_save_file(UNUSED s16 arg0, s32 levelNum) { +#if MULTILANG + gInGameLanguage = eu_get_language()+1; + load_language_text(); #endif sWarpDest.type = WARP_TYPE_NOT_WARPING; sDelayedWarpOp = WARP_OP_NONE; diff --git a/src/game/level_update.h b/src/game/level_update.h index 521b4efe..8080d2dc 100644 --- a/src/game/level_update.h +++ b/src/game/level_update.h @@ -70,6 +70,7 @@ extern u16 D_80339ECA; extern s16 sTransitionTimer; extern void (*sTransitionUpdate)(s16 *); extern u8 unused3[4]; +extern void load_language_text(void); struct WarpDest { u8 type; diff --git a/src/game/puppycam2.c b/src/game/puppycam2.c index d69c5bb5..21189f87 100644 --- a/src/game/puppycam2.c +++ b/src/game/puppycam2.c @@ -22,11 +22,12 @@ #include "behavior_data.h" #include "save_file.h" #include "mario.h" +#include "puppyprint.h" #ifdef PUPPYCAM #define OFFSET 30.0f -#define STEPS 1 +#define STEPS 4 #define DECELERATION 0.66f #define DEADZONE 20 #define SCRIPT_MEMORY_POOL 0x1000 @@ -44,25 +45,23 @@ struct MemoryPool *gPuppyMemoryPool; s32 gPuppyError = 0; #if defined(VERSION_EU) -static u8 gPCOptionStringsFR[][64] = {{NC_ANALOGUE_FR}, {NC_CAMX_FR}, {NC_CAMY_FR}, {NC_INVERTX_FR}, {NC_INVERTY_FR}, {NC_CAMC_FR}, {NC_SCHEME_FR}, {NC_WIDE_FR},}; -static u8 gPCOptionStringsDE[][64] = {{NC_ANALOGUE_DE}, {NC_CAMX_DE}, {NC_CAMY_DE}, {NC_INVERTX_DE}, {NC_INVERTY_DE}, {NC_CAMC_DE}, {NC_SCHEME_DE}, {NC_WIDE_DE},}; -static u8 gPCFlagStringsFR[][64] = {{OPTION_DISABLED_FR}, {OPTION_ENABLED_FR}, {OPTION_SCHEME1_FR}, {OPTION_SCHEME2_FR}, {OPTION_SCHEME3_FR}}; -static u8 gPCFlagStringsDE[][64] = {{OPTION_DISABLED_DE}, {OPTION_ENABLED_DE}, {OPTION_SCHEME1_DE}, {OPTION_SCHEME2_DE}, {OPTION_SCHEME3_DE}}; -static u8 gPCToggleStringsFR[][64] = {{NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}}; -static u8 gPCToggleStringsDE[][64] = {{NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}, {NC_ANALOGUE_EN}}; -//static u8 gPCToggleStringsFR[][64] = {{NC_BUTTON_FR}, {NC_BUTTON2_FR}, {NC_OPTION_FR}, {NC_HIGHLIGHT_L_FR}, {NC_HIGHLIGHT_R_FR}}; -//static u8 gPCToggleStringsDE[][64] = {{NC_BUTTON_DE}, {NC_BUTTON2_DE}, {NC_OPTION_DE}, {NC_HIGHLIGHT_L_DE}, {NC_HIGHLIGHT_R_DE}}; +static unsigned char gPCOptionStringsFR[][64] = {{NC_ANALOGUE_FR}, {NC_CAMX_FR}, {NC_CAMY_FR}, {NC_INVERTX_FR}, {NC_INVERTY_FR}, {NC_CAMC_FR}, {NC_SCHEME_FR}, {NC_WIDE_FR}, {OPTION_LANGUAGE_FR}}; +static unsigned char gPCOptionStringsDE[][64] = {{NC_ANALOGUE_DE}, {NC_CAMX_DE}, {NC_CAMY_DE}, {NC_INVERTX_DE}, {NC_INVERTY_DE}, {NC_CAMC_DE}, {NC_SCHEME_DE}, {NC_WIDE_DE}, {OPTION_LANGUAGE_DE}}; +static unsigned char gPCFlagStringsFR[][64] = {{OPTION_DISABLED_FR}, {OPTION_ENABLED_FR}, {OPTION_SCHEME1_FR}, {OPTION_SCHEME2_FR}, {OPTION_SCHEME3_FR}, {TEXT_ENGLISH}, {TEXT_FRENCH}, {TEXT_GERMAN},}; +static unsigned char gPCFlagStringsDE[][64] = {{OPTION_DISABLED_DE}, {OPTION_ENABLED_DE}, {OPTION_SCHEME1_DE}, {OPTION_SCHEME2_DE}, {OPTION_SCHEME3_DE}, {TEXT_ENGLISH}, {TEXT_FRENCH}, {TEXT_GERMAN},}; +static unsigned char gPCToggleStringsFR[][64] = {{NC_BUTTON_FR}, {NC_BUTTON2_FR}, {NC_OPTION_FR}, {NC_HIGHLIGHT_L}, {NC_HIGHLIGHT_R},}; +static unsigned char gPCToggleStringsDE[][64] = {{NC_BUTTON_DE}, {NC_BUTTON2_DE}, {NC_OPTION_DE}, {NC_HIGHLIGHT_L}, {NC_HIGHLIGHT_R},}; #endif -static u8 gPCOptionStringsEN[][64] = {{NC_ANALOGUE_EN}, {NC_CAMX_EN}, {NC_CAMY_EN}, {NC_INVERTX_EN}, {NC_INVERTY_EN}, {NC_CAMC_EN}, {NC_SCHEME_EN}, {NC_WIDE_EN},}; -static u8 gPCFlagStringsEN[][64] = {{OPTION_DISABLED_EN}, {OPTION_ENABLED_EN}, {OPTION_SCHEME1_EN}, {OPTION_SCHEME2_EN}, {OPTION_SCHEME3_EN}}; -static u8 gPCToggleStringsEN[][64] = {{NC_BUTTON_EN}, {NC_BUTTON2_EN}, {NC_OPTION_EN}, {NC_HIGHLIGHT_L}, {NC_HIGHLIGHT_R}}; +static unsigned char gPCOptionStringsEN[][64] = {{NC_ANALOGUE_EN}, {NC_CAMX_EN}, {NC_CAMY_EN}, {NC_INVERTX_EN}, {NC_INVERTY_EN}, {NC_CAMC_EN}, {NC_SCHEME_EN}, {NC_WIDE_EN}, {OPTION_LANGUAGE_EN}}; +static unsigned char gPCFlagStringsEN[][64] = {{OPTION_DISABLED_EN}, {OPTION_ENABLED_EN}, {OPTION_SCHEME1_EN}, {OPTION_SCHEME2_EN}, {OPTION_SCHEME3_EN}, {TEXT_ENGLISH}, {TEXT_FRENCH}, {TEXT_GERMAN},}; +static unsigned char gPCToggleStringsEN[][64] = {{NC_BUTTON_EN}, {NC_BUTTON2_EN}, {NC_OPTION_EN}, {NC_HIGHLIGHT_L}, {NC_HIGHLIGHT_R},}; #define OPT 32 //Just a temp thing -static u8 (*gPCOptionStringsPtr)[OPT][64] = &gPCOptionStringsEN; -static u8 (*gPCFlagStringsPtr)[OPT][64] = &gPCFlagStringsEN; -static u8 (*gPCToggleStringsPtr)[OPT][64] = &gPCToggleStringsEN; +static unsigned char (*gPCOptionStringsPtr)[OPT][64] = &gPCOptionStringsEN; +static unsigned char (*gPCFlagStringsPtr)[OPT][64] = &gPCFlagStringsEN; +static unsigned char (*gPCToggleStringsPtr)[OPT][64] = &gPCToggleStringsEN; static const struct gPCOptionStruct @@ -76,7 +75,12 @@ static const struct gPCOptionStruct static const struct gPCOptionStruct gPCOptions[]= { //If the min and max are 0 and 1, then the value text is used, otherwise it's ignored. + #ifdef WIDE {/*Option Name*/ 7, /*Option Variable*/ &gWidescreen, /*Option Value Text Start*/ 0, /*Option Minimum*/ FALSE, /*Option Maximum*/ TRUE}, + #endif + #if MULTILANG + {/*Option Name*/ 8, /*Option Variable*/ &gInGameLanguage, /*Option Value Text Start*/ 4, /*Option Minimum*/ 1, /*Option Maximum*/ 3}, + #endif {/*Option Name*/ 0, /*Option Variable*/ &gPuppyCam.options.analogue, /*Option Value Text Start*/ 0, /*Option Minimum*/ FALSE, /*Option Maximum*/ TRUE}, {/*Option Name*/ 6, /*Option Variable*/ &gPuppyCam.options.inputType, /*Option Value Text Start*/ 2, /*Option Minimum*/ 0, /*Option Maximum*/ 2}, {/*Option Name*/ 1, /*Option Variable*/ &gPuppyCam.options.sensitivityX, /*Option Value Text Start*/ 255, /*Option Minimum*/ 10, /*Option Maximum*/ 500}, @@ -161,10 +165,10 @@ void puppycam_warp(f32 displacementX, f32 displacementY, f32 displacementZ) gPuppyCam.floorY[1] += displacementY; } -#if defined(VERSION_EU) +#if MULTILANG static void newcam_set_language(void) { - switch (eu_get_language()) + switch (gInGameLanguage-1) { case 0: gPCOptionStringsPtr = &gPCOptionStringsEN; @@ -213,7 +217,7 @@ static void newcam_process_cutscene(void) #define BLANK 0, 0, 0, ENVIRONMENT, 0, 0, 0, ENVIRONMENT -static void puppycam_display_box(s16 x1, s16 y1, s16 x2, s16 y2, u8 r, u8 g, u8 b, u8 a) +static void puppycam_display_box(s32 x1, s32 y1, s32 x2, s32 y2, u8 r, u8 g, u8 b, u8 a) { gDPSetCombineMode(gDisplayListHead++, BLANK, BLANK); gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE); @@ -249,11 +253,15 @@ void puppycam_change_setting(s8 toggle) *gPCOptions[gPCOptionSelected].gPCOptionVar += toggle; //Forgive me father, for I have sinned. I guess if you wanted a selling point for a 21:9 monitor though, "I can view this line in puppycam's code without scrolling!" can be added to it. *gPCOptions[gPCOptionSelected].gPCOptionVar = CLAMP(*gPCOptions[gPCOptionSelected].gPCOptionVar, gPCOptions[gPCOptionSelected].gPCOptionMin, gPCOptions[gPCOptionSelected].gPCOptionMax); + + #if defined(VERSION_EU) + newcam_set_language(); + #endif } -void puppycam_print_text(s16 x, s16 y, u8 str[], u8 col) +void puppycam_print_text(s32 x, s32 y, unsigned char *str, s32 col) { - u8 textX; + s32 textX; textX = get_str_x_pos_from_center(x,str,10.0f); gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, 255); print_generic_string(textX+1,y-1,str); @@ -271,14 +279,14 @@ void puppycam_print_text(s16 x, s16 y, u8 str[], u8 col) //Options menu void puppycam_display_options() { - u8 i = 0; - u8 newstring[32]; - s16 scroll; - s16 scrollpos; - s16 var = gPCOptions; - s16 vr; - u16 maxvar; - u16 minvar; + s32 i = 0; + unsigned char newstring[32]; + s32 scroll; + s32 scrollpos; + s16 var; + s32 vr; + s32 maxvar; + s32 minvar; f32 newcam_sinpos; puppycam_display_box(47,83,281,84,0x0,0x0,0x0, 0xFF); @@ -290,7 +298,7 @@ void puppycam_display_options() puppycam_display_box(48,84,272,218,0x0,0x0,0x0, 0x50); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, 255); - print_hud_lut_string(HUD_LUT_GLOBAL, 64, 40, (*gPCToggleStringsPtr)[2]); + print_hud_lut_string(HUD_LUT_GLOBAL, 112, 40, (*gPCToggleStringsPtr)[2]); gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); if (gPCOptionCap>4) @@ -353,14 +361,17 @@ void puppycam_check_pause_buttons() if (gPCOptionOpen == 0) { gPCOptionOpen = 1; - #if defined(VERSION_EU) + #if MULTILANG newcam_set_language(); + eu_set_language(gInGameLanguage-1); #endif } - else { gPCOptionOpen = 0; + #if MULTILANG + load_language_text(); + #endif puppycam_set_save(); } } @@ -430,13 +441,12 @@ void puppycam_check_pause_buttons() //Just a function that sets a bunch of camera values to 0. It's a function because it's got shared functionality. void puppycam_reset_values(void) { - gPuppyCam.posHeight[0] = 0; - gPuppyCam.posHeight[1] = 0; gPuppyCam.swimPitch = 0; gPuppyCam.edgePitch = 0; gPuppyCam.moveZoom = 0; gPuppyCam.floorY[0] = 0; gPuppyCam.floorY[1] = 0; + gPuppyCam.terrainPitch = 0; } //Set up values. Runs on level load. @@ -484,8 +494,6 @@ void puppycam_init(void) void puppycam_input_pitch(void) { - f32 ivY = ((gPuppyCam.options.invertY*2)-1)*(gPuppyCam.options.sensitivityY/100.f); - if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_PITCH_ROTATION) { //Handles vertical inputs. @@ -495,7 +503,7 @@ void puppycam_input_pitch(void) if (gPlayer1Controller->buttonDown & D_CBUTTONS || gPuppyCam.stick2[1] != 0) gPuppyCam.pitchAcceleration += 50*(gPuppyCam.options.sensitivityY/100.f); else - gPuppyCam.pitchAcceleration = approach_f32_asymptotic(gPuppyCam.pitchAcceleration, 0, DECELERATION); + gPuppyCam.pitchAcceleration = 0; gPuppyCam.pitchAcceleration = CLAMP(gPuppyCam.pitchAcceleration, -100, 100); @@ -523,7 +531,7 @@ void puppycam_input_zoom(void) void puppycam_input_centre(void) { s32 inputDefault = L_TRIG; - if (gPuppyCam.options.inputType == 3) + if (gPuppyCam.options.inputType == 2) inputDefault = R_TRIG; //Handles L button centering. if (gPlayer1Controller->buttonPressed & inputDefault && gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_YAW_ROTATION && @@ -551,17 +559,17 @@ static void puppycam_input_hold_preset1(f32 ivX) if ((gPlayer1Controller->buttonDown & L_CBUTTONS && !gPuppyCam.options.analogue) || gPuppyCam.stick2[0] != 0) { - gPuppyCam.yawAcceleration -= 50*(gPuppyCam.options.sensitivityX/100.f); + gPuppyCam.yawAcceleration -= 75*(gPuppyCam.options.sensitivityX/100.f); gPuppyCam.framesSinceC[0] = 0; } else if ((gPlayer1Controller->buttonDown & R_CBUTTONS && !gPuppyCam.options.analogue) || gPuppyCam.stick2[0] != 0) { - gPuppyCam.yawAcceleration += 50*(gPuppyCam.options.sensitivityX/100.f); + gPuppyCam.yawAcceleration += 75*(gPuppyCam.options.sensitivityX/100.f); gPuppyCam.framesSinceC[1] = 0; } else - gPuppyCam.yawAcceleration = approach_f32_asymptotic(gPuppyCam.yawAcceleration, 0, DECELERATION); + gPuppyCam.yawAcceleration = 0; } //An alternative control scheme, hold the button down to turn the camera, or press it once to turn it quickly. @@ -596,15 +604,15 @@ static void puppycam_input_hold_preset2(f32 ivX) //Handles continuous movement as normal, as long as the button's held. if (gPlayer1Controller->buttonDown & L_CBUTTONS) { - gPuppyCam.yawAcceleration -= 10*(gPuppyCam.options.sensitivityX/100.f); + gPuppyCam.yawAcceleration -= 75*(gPuppyCam.options.sensitivityX/100.f); } else if (gPlayer1Controller->buttonDown & R_CBUTTONS) { - gPuppyCam.yawAcceleration += 10*(gPuppyCam.options.sensitivityX/100.f); + gPuppyCam.yawAcceleration += 75*(gPuppyCam.options.sensitivityX/100.f); } else - gPuppyCam.yawAcceleration = approach_f32_asymptotic(gPuppyCam.yawAcceleration, 0, DECELERATION); + gPuppyCam.yawAcceleration = 0; } //Another alternative control scheme. This one aims to mimic the parallel camera scheme down to the last bit from the original game. @@ -621,7 +629,6 @@ static void puppycam_input_hold_preset3(f32 ivX) if (gPuppyCam.mode3Flags & PUPPYCAM_MODE3_ZOOMED_IN) { gPuppyCam.flags &= ~PUPPYCAM_BEHAVIOUR_COLLISION; - f32 ivY = ((gPuppyCam.options.invertY*2)-1)*(gPuppyCam.options.sensitivityY/100.f); //Handles continuous movement as normal, as long as the button's held. if (ABS(gPlayer1Controller->rawStickX) > DEADZONE) @@ -629,7 +636,7 @@ static void puppycam_input_hold_preset3(f32 ivX) gPuppyCam.yawAcceleration -= (gPuppyCam.options.sensitivityX/100.f)*stickMag[0]; } else - gPuppyCam.yawAcceleration = approach_f32_asymptotic(gPuppyCam.yawAcceleration, 0, DECELERATION); + gPuppyCam.yawAcceleration = 0; if (ABS(gPlayer1Controller->rawStickY) > DEADZONE) { @@ -800,18 +807,20 @@ static void puppycam_view_panning(void) f32 panFloor, panMulti; s32 expectedPanX, expectedPanZ; s32 height = gPuppyCam.targetObj->oPosY; - s32 panEx = (gPuppyCam.zoomTarget >= 1000) * 250; //Removes the basic panning when idling if the zoom level is at the closest. + s32 panEx = (gPuppyCam.zoomTarget >= 1000) * 160; //Removes the basic panning when idling if the zoom level is at the closest. f32 slideSpeed = 1; panMulti = CLAMP(gPuppyCam.zoom/(f32)gPuppyCam.zoomPoints[2], 0.f, 1.f); + if (gPuppyCam.options.inputType == 2) + panMulti /= 2; if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_PANSHIFT && gMarioState->action != ACT_HOLDING_BOWSER && gMarioState->action != ACT_SLEEPING && gMarioState->action != ACT_START_SLEEPING) { if (gMarioState->action & ACT_FLAG_BUTT_OR_STOMACH_SLIDE) slideSpeed = 10; - expectedPanX = LENSIN(panEx+(200*(gMarioState->forwardVel/32.f)), gMarioState->faceAngle[1])*panMulti; - expectedPanZ = LENCOS(panEx+(200*(gMarioState->forwardVel/32.f)), gMarioState->faceAngle[1])*panMulti; + expectedPanX = LENSIN(panEx+(200*(gMarioState->forwardVel/320.f)), gMarioState->faceAngle[1])*panMulti; + expectedPanZ = LENCOS(panEx+(200*(gMarioState->forwardVel/320.f)), gMarioState->faceAngle[1])*panMulti; gPuppyCam.pan[0] = approach_f32_asymptotic(gPuppyCam.pan[0], expectedPanX, 0.02f*slideSpeed); gPuppyCam.pan[2] = approach_f32_asymptotic(gPuppyCam.pan[2], expectedPanZ, 0.02f*slideSpeed); @@ -819,21 +828,21 @@ static void puppycam_view_panning(void) { panFloor = CLAMP(find_floor_height((s16)(gPuppyCam.targetObj->oPosX+expectedPanX),(s16)(gPuppyCam.targetObj->oPosY + 200), (s16)(gPuppyCam.targetObj->oPosZ+expectedPanZ)),gPuppyCam.targetObj->oPosY-50,gPuppyCam.targetObj->oPosY+50); - //If the floor is lower than 50 units below Mario, then ignore the Y value and tilt the camera instead. - if (panFloor <= gPuppyCam.targetObj->oPosY-50) + //If the floor is lower than 150 units below Mario, then ignore the Y value and tilt the camera instead. + if (panFloor <= gPuppyCam.targetObj->oPosY-150) { panFloor = gPuppyCam.targetObj->oPosY; - gPuppyCam.edgePitch = approach_s32(gPuppyCam.edgePitch, -0x500, 0x80, 0x80); + gPuppyCam.edgePitch = approach_s32(gPuppyCam.edgePitch, -0x2000, 0x80, 0x80); } else { - gPuppyCam.edgePitch = approach_s32(gPuppyCam.edgePitch, 0, 0x80, 0x80); + gPuppyCam.edgePitch = approach_s32(gPuppyCam.edgePitch, 0, 0x100, 0x100); } - gPuppyCam.pan[1] = approach_f32_asymptotic(gPuppyCam.pan[1], panFloor-height, 0.25f); + gPuppyCam.pan[1] = approach_f32_asymptotic(gPuppyCam.pan[1], panFloor-height, 0.025f); } else - gPuppyCam.pan[1] = approach_f32_asymptotic(gPuppyCam.pan[1], 0, 0.5f); + gPuppyCam.pan[1] = approach_f32_asymptotic(gPuppyCam.pan[1], 0, 0.05f); } else { @@ -843,37 +852,52 @@ static void puppycam_view_panning(void) } } -//Sets the -static void puppycam_view_height_offset(void) +void puppycam_terrain_angle(void) { - s16 floorTemp; - s16 tempDist = sqrtf((gPuppyCam.pos[0] - gPuppyCam.focus[0]) * (gPuppyCam.pos[0] - gPuppyCam.focus[0]) + (gPuppyCam.pos[1] - gPuppyCam.focus[1]) * - (gPuppyCam.pos[1] - gPuppyCam.focus[1]) + (gPuppyCam.pos[2] - gPuppyCam.focus[2]) * (gPuppyCam.pos[2] - gPuppyCam.focus[2])); + f32 adjustSpeed; + s32 floor2 = find_floor_height(gPuppyCam.pos[0], gPuppyCam.pos[1]+100, gPuppyCam.pos[2]); + s32 ceil = 20000;//find_ceil(gPuppyCam.pos[0], gPuppyCam.pos[1]+100, gPuppyCam.pos[2]); + s32 farFromSurface; + s16 floorPitch; + s32 gotTheOkay = FALSE; - floorTemp = find_floor_height(gPuppyCam.targetObj->oPosX, gPuppyCam.targetObj->oPosY+50, gPuppyCam.targetObj->oPosZ); - if (floorTemp > gPuppyCam.targetObj->oPosY - 50 && !(gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING)) + if (gMarioState->action & ACT_FLAG_SWIMMING || !(gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_HEIGHT_HELPER)) { - gPuppyCam.posHeight[0] = approach_f32_asymptotic(gPuppyCam.posHeight[0],floorTemp-gPuppyCam.targetFloorHeight,0.05f); - //if (gPuppyCam.posHeight[0]-gPuppyCam.shake[1] - gPuppyCam.floorY[1] < floorTemp) - // gPuppyCam.posHeight[0] = floorTemp-gPuppyCam.shake[1]+gPuppyCam.povHeight - gPuppyCam.floorY[1]; + gPuppyCam.intendedTerrainPitch = 0; + adjustSpeed = 0.25f; + farFromSurface = TRUE; } else { - gPuppyCam.posHeight[0] = approach_f32_asymptotic(gPuppyCam.posHeight[0],0,0.1f); + f32 x, z, floorHeight; + adjustSpeed = CLAMP(MAX(gMarioState->forwardVel/480.0f, gPuppyCam.yawAcceleration/100.0f), 0.05f, 1.0f); + + x = gPuppyCam.targetObj->oPosX - (10 * sins(gPuppyCam.yaw)); + z = gPuppyCam.targetObj->oPosZ - (10 * coss(gPuppyCam.yaw)); + + floorHeight = find_floor_height(x, gPuppyCam.targetObj->oPosY+100, z); + + if (ABS(gMarioState->floorHeight - floorHeight) > 350) + { + gPuppyCam.intendedTerrainPitch = 0; + } + else + { + floorPitch = -atan2s(30.0f, gMarioState->floorHeight - floorHeight); + gPuppyCam.intendedTerrainPitch = approach_f32_asymptotic(gPuppyCam.intendedTerrainPitch, floorPitch, adjustSpeed); + gotTheOkay = TRUE; + } + + //Ensures that the camera is below and above floors and ceilings. It ignores this rule for each if the camera's headed upwards anyway. + farFromSurface = ((gPuppyCam.pos[1] > floor2 + 50 || gPuppyCam.intendedTerrainPitch < gPuppyCam.terrainPitch) && (gPuppyCam.pos[1] < ceil - 50 || gPuppyCam.intendedTerrainPitch > gPuppyCam.terrainPitch)); + + //If the camera is too close to a vertical obstruction, it'll make the intended pitch much further away, making it swivel faster. + if (!farFromSurface && gotTheOkay) + gPuppyCam.intendedTerrainPitch = approach_f32_asymptotic(gPuppyCam.intendedTerrainPitch, floorPitch, adjustSpeed*3); } - - floorTemp = find_floor_height(gPuppyCam.targetObj->oPosX + LENSIN(tempDist,gPuppyCam.yaw), gPuppyCam.targetObj->oPosY+50, gPuppyCam.targetObj->oPosZ + LENCOS(tempDist,gPuppyCam.yaw)); - if (floorTemp > gPuppyCam.targetObj->oPosY - 50 && !(gMarioState->action & ACT_FLAG_SWIMMING_OR_FLYING) && gPuppyCam.collisionDistance != gPuppyCam.zoomTarget) - { - gPuppyCam.posHeight[1] = approach_f32_asymptotic(gPuppyCam.posHeight[1],floorTemp-gPuppyCam.targetFloorHeight,0.05f); - //if (gPuppyCam.posHeight[1]-gPuppyCam.shake[1] - gPuppyCam.floorY[0] < floorTemp) - // gPuppyCam.posHeight[1] = floorTemp-gPuppyCam.shake[1]+gPuppyCam.povHeight - gPuppyCam.floorY[0]; - } - else - { - gPuppyCam.posHeight[1] = approach_f32_asymptotic(gPuppyCam.posHeight[1],0,0.1f); - } + if (farFromSurface) + gPuppyCam.terrainPitch = approach_f32_asymptotic(gPuppyCam.terrainPitch, gPuppyCam.intendedTerrainPitch, adjustSpeed); } /// Multiply vector 'dest' by a @@ -972,6 +996,9 @@ void find_surface_on_ray_list(struct SurfaceNode *list, Vec3f orig, Vec3f dir, f f32 length; Vec3f chk_hit_pos; f32 top, bottom; + #ifdef PUPPYPRINT + OSTime first = osGetTime(); + #endif // Get upper and lower bounds of ray if (dir[1] >= 0.0f) @@ -1003,39 +1030,49 @@ void find_surface_on_ray_list(struct SurfaceNode *list, Vec3f orig, Vec3f dir, f } } } + #ifdef PUPPYPRINT + collisionTime[perfIteration] += osGetTime()-first; + #endif } - -void find_surface_on_ray_cell(s16 cellX, s16 cellZ, Vec3f orig, Vec3f normalized_dir, f32 dir_length, struct Surface **hit_surface, Vec3f hit_pos, f32 *max_length) +void find_surface_on_ray_cell(s16 cellX, s16 cellZ, Vec3f orig, Vec3f normalized_dir, f32 dir_length, struct Surface **hit_surface, Vec3f hit_pos, f32 *max_length, s32 flags) { // Skip if OOB if (cellX >= 0 && cellX <= (NUM_CELLS - 1) && cellZ >= 0 && cellZ <= (NUM_CELLS - 1)) { // Iterate through each surface in this partition - if (normalized_dir[1] > -0.99999f) + if (normalized_dir[1] > -0.99999f && flags & RAYCAST_FIND_CEIL) { find_surface_on_ray_list(gStaticSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_CEILS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); find_surface_on_ray_list(gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_CEILS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); } - if (normalized_dir[1] < 0.99999f) + if (normalized_dir[1] < 0.99999f && flags & RAYCAST_FIND_FLOOR) { find_surface_on_ray_list(gStaticSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_FLOORS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); find_surface_on_ray_list(gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_FLOORS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); } - find_surface_on_ray_list(gStaticSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WALLS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); - find_surface_on_ray_list(gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WALLS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); + if (flags & RAYCAST_FIND_WALL) + { + find_surface_on_ray_list(gStaticSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WALLS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); + find_surface_on_ray_list(gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WALLS].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); + } + if (flags & RAYCAST_FIND_WATER) + { + find_surface_on_ray_list(gStaticSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WATER].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); + find_surface_on_ray_list(gDynamicSurfacePartition[cellZ][cellX][SPATIAL_PARTITION_WATER].next, orig, normalized_dir, dir_length, hit_surface, hit_pos, max_length); + } } } -void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Vec3f hit_pos) +void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Vec3f hit_pos, s32 flags) { f32 max_length; - s16 cellZ, cellX, cellPrevX, cellPrevZ; + s32 cellZ, cellX, cellPrevX, cellPrevZ; f32 fCellZ, fCellX; f32 dir_length; Vec3f normalized_dir; f32 step, dx, dz; - u32 i; + s32 i; // Set that no surface has been hit *hit_surface = NULL; @@ -1050,13 +1087,15 @@ void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Ve // Get our cell coordinate fCellX = (orig[0] + LEVEL_BOUNDARY_MAX) / CELL_SIZE; fCellZ = (orig[2] + LEVEL_BOUNDARY_MAX) / CELL_SIZE; - cellX = (s16)fCellX; - cellZ = (s16)fCellZ; + cellX = fCellX; + cellZ = fCellZ; + cellPrevX = cellX; + cellPrevZ = cellZ; // Don't do DDA if straight down if (normalized_dir[1] >= 0.99999f || normalized_dir[1] <= -0.99999f) { - find_surface_on_ray_cell(cellX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length); + find_surface_on_ray_cell(cellX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length, flags); return; } @@ -1071,20 +1110,20 @@ void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Ve for (i = 0; i < step && *hit_surface == NULL; i++) { - find_surface_on_ray_cell(cellX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length); + find_surface_on_ray_cell(cellX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length, flags); // Move cell coordinate fCellX += dx; fCellZ += dz; cellPrevX = cellX; cellPrevZ = cellZ; - cellX = (s16)fCellX; - cellZ = (s16)fCellZ; + cellX = fCellX; + cellZ = fCellZ; if ((cellPrevX != cellX) && (cellPrevZ != cellZ)) { - find_surface_on_ray_cell(cellX, cellPrevZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length); - find_surface_on_ray_cell(cellPrevX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length); + find_surface_on_ray_cell(cellX, cellPrevZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length, flags); + find_surface_on_ray_cell(cellPrevX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length, flags); } } } @@ -1093,9 +1132,9 @@ const struct sPuppyAngles puppyAnglesNull = { {PUPPY_NULL, PUPPY_NULL, PUPPY_NULL}, {PUPPY_NULL, PUPPY_NULL, PUPPY_NULL}, - {PUPPY_NULL}, - {PUPPY_NULL}, - {PUPPY_NULL}, + PUPPY_NULL, + PUPPY_NULL, + PUPPY_NULL, }; //Checks the bounding box of a puppycam volume. If it's inside, then set the pointer to the current index. @@ -1155,7 +1194,7 @@ void puppycam_projection_behaviours(void) f32 turnRate = 1; //This will only be executed if Mario's the target. If it's not, it'll reset the - if (gPuppyCam.targetObj = gMarioState->marioObj) + if (gPuppyCam.targetObj == gMarioState->marioObj) { if (gPuppyCam.options.turnAggression > 0 && gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_TURN_HELPER && !(gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_INPUT_8DIR) && gMarioState->vel[1] == 0.0f && !(gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_INPUT_4DIR) && gPuppyCam.options.inputType != 2) @@ -1216,12 +1255,6 @@ void puppycam_projection_behaviours(void) if (gPuppyCam.pitchTarget < 0x2000) gPuppyCam.pitchTarget = approach_f32_asymptotic(gPuppyCam.pitchTarget, 0x2000, 0.2f); - - /*//Will tilt the camera just a wip thing though, doesn't work too well but will hopefully replace view_height_offset eventually. - if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_HEIGHT_HELPER && gMarioState->floor && gMarioState->action & ACT_FLAG_MOVING) - gPuppyCam.terrainPitch = approach_f32_asymptotic(gPuppyCam.terrainPitch, find_floor_slope(gMarioState, 0), (gMarioState->intendedMag/32)*0.2); - else - gPuppyCam.terrainPitch = approach_f32_asymptotic(gPuppyCam.terrainPitch, 0, 0.2);*/ } //Applies a light outward zoom to the camera when moving. Sets it back to 0 when not moving. @@ -1264,15 +1297,7 @@ void puppycam_projection_behaviours(void) puppycam_view_panning(); //This sets a pseudo tilt offset based on the floor heights in front and behind mario. - if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_HEIGHT_HELPER) - { - puppycam_view_height_offset(); - } - else - { - gPuppyCam.posHeight[0] = 0; - gPuppyCam.posHeight[1] = 0; - } + puppycam_terrain_angle(); } else { @@ -1290,16 +1315,9 @@ void puppycam_shake(s16 x, s16 y, s16 z) //The centrepiece behind the input side of PuppyCam. The C buttons branch off. static void puppycam_input_core(void) { - s32 stickMag = 0; - puppycam_analogue_stick(); gPuppyCam.moveFlagAdd = 0; - if (gPuppyCam.options.analogue) - stickMag = gPuppyCam.stick2[1]*1.25f; - else - stickMag = 100; - //Decide which input for left and right C buttons to use based on behaviour type. if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_INPUT_NORMAL) puppycam_input_hold(); @@ -1323,7 +1341,7 @@ static void puppycam_projection(void) gPuppyCam.yaw = gPuppyCam.yawTarget - approach_f32_asymptotic((s16)(gPuppyCam.yawTarget - gPuppyCam.yaw), 0, 0.3335f); gPuppyCam.pitch = gPuppyCam.pitchTarget - approach_f32_asymptotic((s16)(gPuppyCam.pitchTarget - gPuppyCam.pitch), 0, 0.3335f); //This adds the pitch effect when underwater, which is capped so it doesn't get out of control. If you're not swimming, swimpitch is 0, so it's normal. - pitchTotal = CLAMP(gPuppyCam.pitch+(gPuppyCam.swimPitch*10)+gPuppyCam.edgePitch, 800, 0x7800); + pitchTotal = CLAMP(gPuppyCam.pitch+(gPuppyCam.swimPitch*10)+gPuppyCam.edgePitch + gPuppyCam.terrainPitch, 800, 0x7800); if (gPuppyCam.targetObj) { @@ -1348,14 +1366,14 @@ static void puppycam_projection(void) if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_X_MOVEMENT) gPuppyCam.focus[0] = targetPos3[0] + gPuppyCam.shake[0] + (gPuppyCam.pan[0]*gPuppyCam.targetDist[1]/gPuppyCam.zoomPoints[2])*panD; if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_Y_MOVEMENT) - gPuppyCam.focus[1] = targetPos3[1] + gPuppyCam.shake[1] + (gPuppyCam.pan[1]*gPuppyCam.targetDist[1]/gPuppyCam.zoomPoints[2]) + gPuppyCam.povHeight - gPuppyCam.floorY[0] + gPuppyCam.posHeight[0] + (gPuppyCam.swimPitch/10); + gPuppyCam.focus[1] = targetPos3[1] + gPuppyCam.shake[1] + (gPuppyCam.pan[1]*gPuppyCam.targetDist[1]/gPuppyCam.zoomPoints[2]) + gPuppyCam.povHeight - gPuppyCam.floorY[0] + (gPuppyCam.swimPitch/10); if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_Z_MOVEMENT) gPuppyCam.focus[2] = targetPos3[2] + gPuppyCam.shake[2] + (gPuppyCam.pan[2]*gPuppyCam.targetDist[1]/gPuppyCam.zoomPoints[2])*panD; if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_X_MOVEMENT) gPuppyCam.pos[0] = gPuppyCam.targetObj->oPosX + LENSIN(LENSIN(gPuppyCam.targetDist[1],pitchTotal),gPuppyCam.yaw) + gPuppyCam.shake[0]; if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_Y_MOVEMENT) - gPuppyCam.pos[1] = gPuppyCam.targetObj->oPosY + gPuppyCam.povHeight + LENCOS(gPuppyCam.targetDist[1],pitchTotal) + gPuppyCam.shake[1] - gPuppyCam.floorY[1] + gPuppyCam.posHeight[1]; + gPuppyCam.pos[1] = gPuppyCam.targetObj->oPosY + gPuppyCam.povHeight + LENCOS(gPuppyCam.targetDist[1],pitchTotal) + gPuppyCam.shake[1] - gPuppyCam.floorY[1]; if (gPuppyCam.flags & PUPPYCAM_BEHAVIOUR_Z_MOVEMENT) gPuppyCam.pos[2] = gPuppyCam.targetObj->oPosZ + LENCOS(LENSIN(gPuppyCam.targetDist[1],pitchTotal),gPuppyCam.yaw) + gPuppyCam.shake[2]; } @@ -1449,7 +1467,7 @@ static void puppycam_collision(void) Vec3f camdir[2]; Vec3f hitpos[2]; Vec3f target[2]; - s16 pitchTotal = CLAMP(gPuppyCam.pitch+(gPuppyCam.swimPitch*10), 800, 0x7800); + s16 pitchTotal = CLAMP(gPuppyCam.pitch+(gPuppyCam.swimPitch*10) + gPuppyCam.edgePitch + gPuppyCam.terrainPitch, 800, 0x7800); s32 dist[2]; if (gPuppyCam.targetObj == NULL) @@ -1465,21 +1483,20 @@ static void puppycam_collision(void) target[1][2] = gPuppyCam.targetObj->oPosZ; camdir[0][0] = LENSIN(LENSIN(gPuppyCam.zoomTarget,pitchTotal),gPuppyCam.yaw) + gPuppyCam.shake[0]; - camdir[0][1] = LENCOS(gPuppyCam.zoomTarget,pitchTotal) + gPuppyCam.shake[1];// + gPuppyCam.posHeight[1]; + camdir[0][1] = LENCOS(gPuppyCam.zoomTarget,pitchTotal) + gPuppyCam.shake[1]; camdir[0][2] = LENCOS(LENSIN(gPuppyCam.zoomTarget,pitchTotal),gPuppyCam.yaw) + gPuppyCam.shake[2]; camdir[1][0] = camdir[0][0]; camdir[1][1] = camdir[0][1]; camdir[1][2] = camdir[0][2]; - find_surface_on_ray(target[0], camdir[0], &surf[0], hitpos[0]); - find_surface_on_ray(target[1], camdir[1], &surf[1], hitpos[1]); - resolve_and_return_wall_collisions(hitpos[0], 0.0f, 50.0f); - resolve_and_return_wall_collisions(hitpos[1], 0.0f, 50.0f); + find_surface_on_ray(target[0], camdir[0], &surf[0], hitpos[0], RAYCAST_FIND_FLOOR | RAYCAST_FIND_CEIL | RAYCAST_FIND_WALL); + find_surface_on_ray(target[1], camdir[1], &surf[1], hitpos[1], RAYCAST_FIND_FLOOR | RAYCAST_FIND_CEIL | RAYCAST_FIND_WALL); + resolve_and_return_wall_collisions(hitpos[0], 0.0f, 25.0f); + resolve_and_return_wall_collisions(hitpos[1], 0.0f, 25.0f); dist[0] = ((target[0][0] - hitpos[0][0]) * (target[0][0] - hitpos[0][0]) + (target[0][1] - hitpos[0][1]) * (target[0][1] - hitpos[0][1]) + (target[0][2] - hitpos[0][2]) * (target[0][2] - hitpos[0][2])); dist[1] = ((target[1][0] - hitpos[1][0]) * (target[1][0] - hitpos[1][0]) + (target[1][1] - hitpos[1][1]) * (target[1][1] - hitpos[1][1]) + (target[1][2] - hitpos[1][2]) * (target[1][2] - hitpos[1][2])); - gPuppyCam.collisionDistance = gPuppyCam.zoomTarget; if (surf[0] && surf[1]) diff --git a/src/game/puppycam2.h b/src/game/puppycam2.h index 69819243..486d9b1e 100644 --- a/src/game/puppycam2.h +++ b/src/game/puppycam2.h @@ -3,6 +3,9 @@ #ifdef PUPPYCAM +//How many times to store the terrain pitch. This stores it over 10 frames to help smooth over changes in curvature. +#define NUM_PITCH_ITERATIONS 10 + #define PUPPYCAM_FLAGS_CUTSCENE 0x0001 #define PUPPYCAM_FLAGS_SMOOTH 0x0002 @@ -22,6 +25,13 @@ #define PUPPYCAM_MODE3_ZOOMED_OUT 0x4 #define PUPPYCAM_MODE3_ENTER_FIRST_PERSON 0x8 +#define RAYCAST_FIND_FLOOR (0x1) +#define RAYCAST_FIND_WALL (0x2) +#define RAYCAST_FIND_CEIL (0x4) +#define RAYCAST_FIND_WATER (0x8) +#define RAYCAST_FIND_ALL (0xFFFFFFFF) + + #include "include/command_macros_base.h" #define PUPPYVOLUME(x, y, z, length, height, width, yaw, functionptr, anglesptr, addflags, removeflags, flagpersistance, room, shape) \ @@ -56,7 +66,6 @@ struct gPuppyStruct s16 pitch; //Vertical Direction the game reads as the active value. s16 pitchTarget; //Vertical Direction that pitch tries to be. f32 pitchAcceleration; //Vertical Direction that sets pitchTarget. - s16 posHeight[2]; //The first index is the ground offset of pos[1], the second index is the ground offset of focus[1]. s16 zoom; //How far the camera is currently zoomed out u8 zoomSet; //The current setting of which zoompoint to set the target to. s16 zoomTarget; //The value that zoom tries to be. @@ -80,13 +89,15 @@ struct gPuppyStruct u8 opacity; //A value set by collision distance, to fade Mario out if you're too close. s8 stick2[2];//The value that's set and read for analogue stick. u8 stickN[2]; //This is set when the stick is neutral. It's to prevent rapidfire input. - u8 enabled; //A boolean that decides whether to use vanilla camera or puppy camera. Of course, anybody with this enabled is obligated to a death sentence :) + u8 enabled; //A boolean that decides whether to use vanilla camera or puppy camera. s16 swimPitch; //Pitch adjustment that's applied when swimming. All pitch adjustment is clamped. s16 edgePitch; //Pitch adjustment that's applied when stood near an edge. All pitch adjustment is clamped. s16 moveZoom; //A small zoom value that's added on top of the regular zoom when moving. It's pretty subtle, but gives the feeling of a bit of speed. u8 mode3Flags; //A flagset for classic mode. u8 moveFlagAdd; //A bit that multiplies movement rate of axes when moving, to centre them faster. - s16 targetDist[2]; + s16 targetDist[2]; //Used with secondary view targets to smooth out the between status. + s16 intendedTerrainPitch; //The pitch that the game wants the game to tilt towards, following the terrain. + s16 terrainPitch; //The pitch the game tilts towards, when following terrain inclines. u8 cutscene; //A boolean that decides whether a cutscene is active s32 (*sceneFunc)(); @@ -162,7 +173,7 @@ extern void puppycam_boot(void); extern void puppycam_init(void); extern void puppycam_loop(void); extern void puppycam_shake(s16 x, s16 y, s16 z); -extern void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Vec3f hit_pos); +extern void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Vec3f hit_pos, s32 flags); extern f32 approach_f32_asymptotic(f32 current, f32 target, f32 multiplier); extern void puppycam_default_config(void); extern s16 LENCOS(s16 length, s16 direction); diff --git a/src/game/save_file.c b/src/game/save_file.c index 1dd1606a..bcdcdbaf 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -226,7 +226,7 @@ static void save_main_menu_data(void) { add_save_block_signature(&gSaveBuffer.menuData[0], sizeof(gSaveBuffer.menuData[0]), MENU_DATA_MAGIC); // Back up data - bcopy(&gSaveBuffer.menuData[0], &gSaveBuffer.menuData[1], sizeof(gSaveBuffer.menuData[1])); + //bcopy(&gSaveBuffer.menuData[0], &gSaveBuffer.menuData[1], sizeof(gSaveBuffer.menuData[1])); // Write to EEPROM write_eeprom_data(gSaveBuffer.menuData, sizeof(gSaveBuffer.menuData)); @@ -360,7 +360,7 @@ void save_file_load_all(void) { // Verify the main menu data and create a backup copy if only one of the slots is valid. validSlots = verify_save_block_signature(&gSaveBuffer.menuData[0], sizeof(gSaveBuffer.menuData[0]), MENU_DATA_MAGIC); - validSlots |= verify_save_block_signature(&gSaveBuffer.menuData[1], sizeof(gSaveBuffer.menuData[1]),MENU_DATA_MAGIC) << 1; + //validSlots |= verify_save_block_signature(&gSaveBuffer.menuData[1], sizeof(gSaveBuffer.menuData[1]),MENU_DATA_MAGIC) << 1; switch (validSlots) { case 0: // Neither copy is correct wipe_main_menu_data(); @@ -407,6 +407,9 @@ void puppycam_get_save(void) gPuppyCam.options = gSaveBuffer.menuData[0].saveOptions; gSaveBuffer.menuData[0].firstBoot = gSaveBuffer.menuData[0].firstBoot; + #ifdef WIDE + gWidescreen = save_file_get_widescreen_mode(); + #endif puppycam_check_save(); } @@ -417,6 +420,10 @@ void puppycam_set_save(void) gSaveBuffer.menuData[0].firstBoot = 4; + #ifdef WIDE + save_file_set_widescreen_mode(gWidescreen); + #endif + gMainMenuDataModified = TRUE; save_main_menu_data(); } diff --git a/src/menu/file_select.c b/src/menu/file_select.c index a96f7d48..7f7dfb9e 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -23,6 +23,13 @@ #include "text_strings.h" #include "eu_translation.h" +#if MULTILANG +#undef LANGUAGE_FUNCTION +#define LANGUAGE_FUNCTION sLanguageMode +s8 sLanguageMode = LANGUAGE_ENGLISH; +#endif + +extern void *languageTable[][3]; /** * @file file_select.c @@ -32,7 +39,7 @@ */ // The current sound mode is automatically centered on US and Shindou. -static s16 sSoundTextX; +s16 sSoundTextX; //! @Bug (UB Array Access) For EU, more buttons were added than the array was extended. //! This causes no currently known issues on console (as the other variables are not changed @@ -41,121 +48,128 @@ static s16 sSoundTextX; // Amount of main menu buttons defined in the code called by spawn_object_rel_with_rot. // See file_select.h for the names in MenuButtonTypes. -static struct Object *sMainMenuButtons[NUM_BUTTONS]; +struct Object *sMainMenuButtons[NUM_BUTTONS]; // Used to defined yes/no fade colors after a file is selected in the erase menu. // sYesNoColor[0]: YES | sYesNoColor[1]: NO -static u8 sYesNoColor[2]; +u8 sYesNoColor[2]; // The button that is selected when it is clicked. -static s8 sSelectedButtonID = MENU_BUTTON_NONE; +s8 sSelectedButtonID = MENU_BUTTON_NONE; // Whether we are on the main menu or one of the submenus. -static s8 sCurrentMenuLevel = MENU_LAYER_MAIN; +s8 sCurrentMenuLevel = MENU_LAYER_MAIN; // Used for text opacifying. If it is below 250, it is constantly incremented. -static u8 sTextBaseAlpha = 0; +u8 sTextBaseAlpha = 0; // 2D position of the cursor on the screen. // sCursorPos[0]: X | sCursorPos[1]: Y -static f32 sCursorPos[] = {0, 0}; +f32 sCursorPos[] = {0, 0}; // Determines which graphic to use for the cursor. -static s16 sCursorClickingTimer = 0; +s16 sCursorClickingTimer = 0; // Equal to sCursorPos if the cursor gets clicked, {-10000, -10000} otherwise. -static s16 sClickPos[] = {-10000, -10000}; +s16 sClickPos[] = {-10000, -10000}; // Used for determining which file has been selected during copying and erasing. -static s8 sSelectedFileIndex = -1; +s8 sSelectedFileIndex = -1; // Whether to fade out text or not. -static s8 sFadeOutText = FALSE; +s8 sFadeOutText = FALSE; // The message currently being displayed at the top of a menu. -static s8 sStatusMessageID = 0; +s8 sStatusMessageID = 0; // Used for text fading. The alpha value of text is calculated as // sTextBaseAlpha - sTextFadeAlpha. -static u8 sTextFadeAlpha = 0; +u8 sTextFadeAlpha = 0; // File select timer that keeps counting until it reaches 1000. // Used to prevent buttons from being clickable as soon as a menu loads. // Gets reset when you click an empty save, existing saves in copy and erase menus // and when you click yes/no in the erase confirmation prompt. -static s16 sMainMenuTimer = 0; +s16 sMainMenuTimer = 0; // Sound mode menu buttonID, has different values compared to gSoundMode in audio. // 0: gSoundMode = 0 (Stereo) | 1: gSoundMode = 3 (Mono) | 2: gSoundMode = 1 (Headset) -static s8 sSoundMode = 0; +s8 sSoundMode = 0; // Active language for EU arrays, values defined similar to sSoundMode // 0: English | 1: French | 2: German // Tracks which button will be pressed in the erase confirmation prompt (yes/no). -static s8 sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; +s8 sEraseYesNoHoverState = MENU_ERASE_HOVER_NONE; // Used for the copy menu, defines if the game as all 4 save slots with data. // if TRUE, it doesn't allow copying more files. -static s8 sAllFilesExist = FALSE; +s8 sAllFilesExist = FALSE; // Defines the value of the save slot selected in the menu. // Mario A: 1 | Mario B: 2 | Mario C: 3 | Mario D: 4 -static s8 sSelectedFileNum = 0; +s8 sSelectedFileNum = 0; // Which coin score mode to use when scoring files. 0 for local // coin high score, 1 for high score across all files. -static s8 sScoreFileCoinScoreMode = 0; +s8 sScoreFileCoinScoreMode = 0; // In EU, if no save file exists, open the language menu so the user can find it. -static unsigned char textReturn[] = { TEXT_RETURN }; +unsigned char textReturn[][8] = { {TEXT_RETURN}, }; -static unsigned char textViewScore[] = { TEXT_CHECK_SCORE }; +unsigned char textViewScore[] = { TEXT_CHECK_SCORE }; -static unsigned char textCopyFileButton[] = { TEXT_COPY_FILE_BUTTON }; +unsigned char textCopyFileButton[] = { TEXT_COPY_FILE_BUTTON }; -static unsigned char textEraseFileButton[] = { TEXT_ERASE_FILE_BUTTON }; +unsigned char textEraseFileButton[] = { TEXT_ERASE_FILE_BUTTON }; -static unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; +unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; -static unsigned char textMarioA[] = { TEXT_FILE_MARIO_A }; -static unsigned char textMarioB[] = { TEXT_FILE_MARIO_B }; -static unsigned char textMarioC[] = { TEXT_FILE_MARIO_C }; -static unsigned char textMarioD[] = { TEXT_FILE_MARIO_D }; +#if MULTILANG +unsigned char textLanguageSelect[][17] = { { TEXT_LANGUAGE_SELECT }}; +#endif -static unsigned char textNew[] = { TEXT_NEW }; -static unsigned char starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; -static unsigned char xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; +unsigned char textSoundSelect[][13] = { { TEXT_SOUND_SELECT },}; -static unsigned char textSelectFile[] = { TEXT_SELECT_FILE }; +unsigned char textMarioA[] = { TEXT_FILE_MARIO_A }; +unsigned char textMarioB[] = { TEXT_FILE_MARIO_B }; +unsigned char textMarioC[] = { TEXT_FILE_MARIO_C }; +unsigned char textMarioD[] = { TEXT_FILE_MARIO_D }; -static unsigned char textScore[] = { TEXT_SCORE }; +unsigned char textNew[] = { TEXT_NEW }; +unsigned char starIcon[] = { GLYPH_STAR, GLYPH_SPACE }; +unsigned char xIcon[] = { GLYPH_MULTIPLY, GLYPH_SPACE }; -static unsigned char textCopy[] = { TEXT_COPY }; +unsigned char textSelectFile[] = { TEXT_SELECT_FILE }; -static unsigned char textErase[] = { TEXT_ERASE }; +unsigned char textScore[] = { TEXT_SCORE }; +unsigned char textCopy[] = { TEXT_COPY }; -static unsigned char textCheckFile[] = { TEXT_CHECK_FILE }; +unsigned char textErase[] = { TEXT_ERASE }; -static unsigned char textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; +unsigned char textLanguage[][9] = {{ TEXT_ENGLISH }, { TEXT_FRENCH }, { TEXT_GERMAN }}; -static unsigned char textCopyFile[] = { TEXT_COPY_FILE }; +unsigned char textCheckFile[] = { TEXT_CHECK_FILE }; -static unsigned char textCopyItToWhere[] = { TEXT_COPY_IT_TO_WHERE }; +unsigned char textNoSavedDataExists[] = { TEXT_NO_SAVED_DATA_EXISTS }; -static unsigned char textNoSavedDataExistsCopy[] = { TEXT_NO_SAVED_DATA_EXISTS }; +unsigned char textCopyFile[] = { TEXT_COPY_FILE }; -static unsigned char textCopyCompleted[] = { TEXT_COPYING_COMPLETED }; +unsigned char textCopyItToWhere[] = { TEXT_COPY_IT_TO_WHERE }; -static unsigned char textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; +unsigned char textNoSavedDataExistsCopy[] = { TEXT_NO_SAVED_DATA_EXISTS }; -static unsigned char textNoFileToCopyFrom[] = { TEXT_NO_FILE_TO_COPY_FROM }; +unsigned char textCopyCompleted[] = { TEXT_COPYING_COMPLETED }; -static unsigned char textYes[] = { TEXT_YES }; +unsigned char textSavedDataExists[] = { TEXT_SAVED_DATA_EXISTS }; -static unsigned char textNo[] = { TEXT_NO }; +unsigned char textNoFileToCopyFrom[] = { TEXT_NO_FILE_TO_COPY_FROM }; + +unsigned char textYes[] = { TEXT_YES }; + +unsigned char textNo[] = { TEXT_NO }; /** @@ -198,7 +212,7 @@ s32 check_clicked_button(s16 x, s16 y, f32 depth) { /** * Grow from main menu, used by selecting files and menus. */ -static void bhv_menu_button_growing_from_main_menu(struct Object *button) { +void bhv_menu_button_growing_from_main_menu(struct Object *button) { if (button->oMenuButtonTimer < 16) { button->oFaceAngleYaw += 0x800; } @@ -225,7 +239,7 @@ static void bhv_menu_button_growing_from_main_menu(struct Object *button) { /** * Shrink back to main menu, used to return back while inside menus. */ -static void bhv_menu_button_shrinking_to_main_menu(struct Object *button) { +void bhv_menu_button_shrinking_to_main_menu(struct Object *button) { if (button->oMenuButtonTimer < 16) { button->oFaceAngleYaw -= 0x800; } @@ -252,7 +266,7 @@ static void bhv_menu_button_shrinking_to_main_menu(struct Object *button) { /** * Grow from submenu, used by selecting a file in the score menu. */ -static void bhv_menu_button_growing_from_submenu(struct Object *button) { +void bhv_menu_button_growing_from_submenu(struct Object *button) { if (button->oMenuButtonTimer < 16) { button->oFaceAngleYaw += 0x800; } @@ -277,7 +291,7 @@ static void bhv_menu_button_growing_from_submenu(struct Object *button) { /** * Shrink back to submenu, used to return back while inside a score save menu. */ -static void bhv_menu_button_shrinking_to_submenu(struct Object *button) { +void bhv_menu_button_shrinking_to_submenu(struct Object *button) { if (button->oMenuButtonTimer < 16) { button->oFaceAngleYaw -= 0x800; } @@ -305,7 +319,7 @@ static void bhv_menu_button_shrinking_to_submenu(struct Object *button) { * A small increase and decrease in size. * Used by failed copy/erase/score operations and sound mode select. */ -static void bhv_menu_button_zoom_in_out(struct Object *button) { +void bhv_menu_button_zoom_in_out(struct Object *button) { if (sCurrentMenuLevel == MENU_LAYER_MAIN) { if (button->oMenuButtonTimer < 4) { button->oParentRelativePosZ -= 20.0f; @@ -332,7 +346,7 @@ static void bhv_menu_button_zoom_in_out(struct Object *button) { * A small temporary increase in size. * Used while selecting a target copy/erase file or yes/no erase confirmation prompt. */ -static void bhv_menu_button_zoom_in(struct Object *button) { +void bhv_menu_button_zoom_in(struct Object *button) { button->oMenuButtonScale += 0.0022; button->oMenuButtonTimer++; if (button->oMenuButtonTimer == 10) { @@ -346,7 +360,7 @@ static void bhv_menu_button_zoom_in(struct Object *button) { * Used after selecting a target copy/erase file or * yes/no erase confirmation prompt to undo the zoom in. */ -static void bhv_menu_button_zoom_out(struct Object *button) { +void bhv_menu_button_zoom_out(struct Object *button) { button->oMenuButtonScale -= 0.0022; button->oMenuButtonTimer++; if (button->oMenuButtonTimer == 10) { @@ -888,7 +902,11 @@ void check_erase_menu_clicked_buttons(struct Object *eraseButton) { #undef ACTION_TIMER #undef MAIN_RETURN_TIMER +#if MULTILANG + #define SOUND_BUTTON_Y 388 +#else #define SOUND_BUTTON_Y 0 +#endif /** * Render buttons for the sound mode menu. @@ -907,8 +925,28 @@ void render_sound_mode_menu_buttons(struct Object *soundModeButton) { soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, -533, SOUND_BUTTON_Y, -100, 0, -0x8000, 0); sMainMenuButtons[MENU_BUTTON_HEADSET]->oMenuButtonScale = 0.11111111f; + #if MULTILANG + // English option button + sMainMenuButtons[MENU_BUTTON_LANGUAGE_ENGLISH] = spawn_object_rel_with_rot( + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 533, -111, -100, 0, -0x8000, 0); + sMainMenuButtons[MENU_BUTTON_LANGUAGE_ENGLISH]->oMenuButtonScale = 0.11111111f; + // French option button + sMainMenuButtons[MENU_BUTTON_LANGUAGE_FRENCH] = spawn_object_rel_with_rot( + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, 0, -111, -100, 0, -0x8000, 0); + sMainMenuButtons[MENU_BUTTON_LANGUAGE_FRENCH]->oMenuButtonScale = 0.11111111f; + // German option button + sMainMenuButtons[MENU_BUTTON_LANGUAGE_GERMAN] = spawn_object_rel_with_rot( + soundModeButton, MODEL_MAIN_MENU_GENERIC_BUTTON, bhvMenuButton, -533, -111, -100, 0, -0x8000, 0); + sMainMenuButtons[MENU_BUTTON_LANGUAGE_GERMAN]->oMenuButtonScale = 0.11111111f; + + // Return button + sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN] = spawn_object_rel_with_rot( + soundModeButton, MODEL_MAIN_MENU_YELLOW_FILE_BUTTON, bhvMenuButton, 0, -533, -100, 0, -0x8000, 0); + sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN]->oMenuButtonScale = 0.11111111f; +#else // Zoom in current selection sMainMenuButtons[MENU_BUTTON_OPTION_MIN + sSoundMode]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN; +#endif } #undef SOUND_BUTTON_Y @@ -934,13 +972,33 @@ void check_sound_mode_menu_clicked_buttons(struct Object *soundModeButton) { queue_rumble_data(5, 80); #endif sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; +#if !MULTILANG // Sound menu buttons don't return to Main Menu in EU // because they don't have a case in bhv_menu_button_manager_loop sSelectedButtonID = buttonID; +#endif sSoundMode = buttonID - MENU_BUTTON_OPTION_MIN; save_file_set_sound_mode(sSoundMode); } } +#if MULTILANG + // If language mode button clicked, select it and change language + if (buttonID == MENU_BUTTON_LANGUAGE_ENGLISH || buttonID == MENU_BUTTON_LANGUAGE_FRENCH + || buttonID == MENU_BUTTON_LANGUAGE_GERMAN) { + if (soundModeButton->oMenuButtonActionPhase == SOUND_MODE_PHASE_MAIN) { + play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); + sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; + sLanguageMode = buttonID - MENU_BUTTON_LANGUAGE_MIN; + eu_set_language(sLanguageMode); + } + } + // If neither of the buttons above are pressed, return to main menu + if (buttonID == MENU_BUTTON_LANGUAGE_RETURN) { + play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource); + sMainMenuButtons[buttonID]->oMenuButtonState = MENU_BUTTON_STATE_ZOOM_IN_OUT; + sSelectedButtonID = buttonID; + } +#endif sCurrentMenuLevel = MENU_LAYER_SUBMENU; break; @@ -1386,6 +1444,11 @@ void bhv_menu_button_manager_loop(void) { check_sound_mode_menu_clicked_buttons(sMainMenuButtons[MENU_BUTTON_SOUND_MODE]); break; + #if MULTILANG + case MENU_BUTTON_LANGUAGE_RETURN: + return_to_main_menu(MENU_BUTTON_SOUND_MODE, sMainMenuButtons[MENU_BUTTON_LANGUAGE_RETURN]); + break; + #endif // STEREO, MONO and HEADSET buttons are undefined so they can be selected without // exiting the Options menu, as a result they added a return button case MENU_BUTTON_STEREO: @@ -1999,7 +2062,13 @@ void print_erase_menu_strings(void) { gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } - #define SOUND_HUD_X 88 +#if MULTILANG + #define SOUND_HUD_X 96 + #define SOUND_HUD_Y 141 +#else + #define SOUND_HUD_X 47 + #define SOUND_HUD_Y 87 +#endif /** * Prints sound mode menu strings that shows on the purple background menu screen. @@ -2008,33 +2077,49 @@ void print_erase_menu_strings(void) { */ void print_sound_mode_menu_strings(void) { s32 mode; - - s16 textX; - - unsigned char textSoundSelect[] = { TEXT_SOUND_SELECT }; + s32 textX; // Print "SOUND SELECT" text gSPDisplayList(gDisplayListHead++, dl_rgba16_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_hud_lut_string(HUD_LUT_DIFF, SOUND_HUD_X, 35, textSoundSelect); + print_hud_lut_string(HUD_LUT_DIFF, SOUND_HUD_X, 32, LANGUAGE_ARRAY(textSoundSelect)); + #if MULTILANG + print_hud_lut_string(HUD_LUT_DIFF, 47, 101, LANGUAGE_ARRAY(textLanguageSelect)); + #endif gSPDisplayList(gDisplayListHead++, dl_rgba16_text_end); gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); // Print sound mode names - for (mode = 0; mode < 3; mode++) { + for (mode = 0, textX = 90; mode < 3; textX += 70, mode++) { if (mode == sSoundMode) { gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); } else { gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, sTextBaseAlpha); } - // Mode names are centered correctly on US and Shindou - textX = get_str_x_pos_from_center(mode * 74 + 87, textSoundModes[mode], 10.0f); - print_generic_string(textX, 87, textSoundModes[mode]); + print_generic_string( + get_str_x_pos_from_center(textX, LANGUAGE_ARRAY(textSoundModes[mode]), 10.0f), + SOUND_HUD_Y, LANGUAGE_ARRAY(textSoundModes[mode])); } + #if MULTILANG + // In EU, print language mode names + for (mode = 0, textX = 90; mode < 3; textX += 70, mode++) { + if (mode == LANGUAGE_FUNCTION) { + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + } else { + gDPSetEnvColor(gDisplayListHead++, 0, 0, 0, sTextBaseAlpha); + } + print_generic_string( + get_str_x_pos_from_center(textX, textLanguage[mode], 10.0f), + 72, textLanguage[mode]); + } + + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); + print_generic_string(182, 29, LANGUAGE_ARRAY(textReturn)); + #endif gSPDisplayList(gDisplayListHead++, dl_ia_text_end); } @@ -2136,7 +2221,7 @@ void print_save_file_scores(s8 fileIndex) { unsigned char textHiScore[] = { TEXT_HI_SCORE }; unsigned char textMyScore[] = { TEXT_MY_SCORE }; unsigned char textFileLetter[] = { TEXT_ZERO }; - void **levelNameTable = segmented_to_virtual(seg2_course_name_table); + void **levelNameTable = segmented_to_virtual(languageTable[gInGameLanguage][1]); textFileLetter[0] = fileIndex + ASCII_TO_DIALOG('A'); // get letter of file selected @@ -2198,7 +2283,7 @@ void print_save_file_scores(s8 fileIndex) { * Prints file select strings depending on the menu selected. * Also checks if all saves exists and defines text and main menu timers. */ -static void print_file_select_strings(void) { +void print_file_select_strings(void) { UNUSED s32 unused1; UNUSED s32 unused2; diff --git a/src/menu/file_select.h b/src/menu/file_select.h index d4d75b65..47f72844 100644 --- a/src/menu/file_select.h +++ b/src/menu/file_select.h @@ -78,7 +78,7 @@ enum MenuButtonTypes { MENU_BUTTON_MONO, MENU_BUTTON_HEADSET, -#ifdef VERSION_EU +#if MULTILANG // Language Menu MENU_BUTTON_LANGUAGE_MIN, MENU_BUTTON_LANGUAGE_ENGLISH = MENU_BUTTON_LANGUAGE_MIN, diff --git a/tools/getGoddardSize.py b/tools/getGoddardSize.py index b8e9b272..c127fd56 100644 --- a/tools/getGoddardSize.py +++ b/tools/getGoddardSize.py @@ -4,7 +4,7 @@ with open(sys.argv[1]) as f: for line in f: if "GODDARD_SIZE" in line: tokens=line.split() - with open("build/us/goddard.txt", "w+") as f: + with open("build/%s/goddard.txt" % sys.argv[2], "w+") as f: sz = int(tokens[0], 16) sz += 16 sz &= 0xFFFFFFF0 diff --git a/tools/hardcoded_syms.txt b/tools/hardcoded_syms.txt deleted file mode 100644 index f5330899..00000000 --- a/tools/hardcoded_syms.txt +++ /dev/null @@ -1,5091 +0,0 @@ -gZBuffer = 0x80000400; -entry_point = 0x80246000; -handle_debug_key_sequences = 0x80246050; -unknown_main_func = 0x80246170; -stub_main_1 = 0x802461cc; -stub_main_2 = 0x802461dc; -stub_main_3 = 0x802461ec; -setup_mesg_queues = 0x802461fc; -alloc_pool = 0x802462e0; -create_thread = 0x80246338; -handle_nmi_request = 0x8024639c; -receive_new_tasks = 0x802463ec; -start_sptask = 0x8024651c; -interrupt_gfx_sptask = 0x8024659c; -start_gfx_sptask = 0x802465ec; -pretend_audio_sptask_done = 0x80246648; -handle_vblank = 0x8024669c; -handle_sp_complete = 0x802467fc; -handle_dp_complete = 0x8024694c; -thread3_main = 0x802469b8; -set_vblank_handler = 0x80246b14; -send_sp_task_message = 0x80246b74; -dispatch_audio_sptask = 0x80246bb4; -send_display_list = 0x80246c10; -turn_on_audio = 0x80246c9c; -turn_off_audio = 0x80246cb8; -thread1_idle = 0x80246cf0; -main_func = 0x80246df8; -my_rdp_init = 0x80246e70; -my_rsp_init = 0x802471a4; -clear_z_buffer = 0x80247284; -display_frame_buffer = 0x802473c8; -clear_frame_buffer = 0x802474b8; -clear_viewport = 0x80247620; -draw_screen_borders = 0x8024784c; -make_viewport_clip_rect = 0x802479bc; -create_task_structure = 0x80247b3c; -init_render_image = 0x80247ccc; -end_master_display_list = 0x80247d14; -draw_reset_bars = 0x80247db4; -rendering_init = 0x80247f08; -config_gfx_pool = 0x80247fdc; -display_and_vsync = 0x80248090; -adjust_analog_stick = 0x80248304; -run_demo_inputs = 0x80248498; -read_controller_inputs = 0x80248638; -init_controllers = 0x80248824; -setup_game_memory = 0x80248964; -thread5_game_loop = 0x80248af0; -reset_volume = 0x80248c40; -lower_background_noise = 0x80248c58; -raise_background_noise = 0x80248ce8; -disable_background_sound = 0x80248d78; -enable_background_sound = 0x80248dc0; -set_sound_mode = 0x80248e08; -play_menu_sounds = 0x80248e54; -play_painting_eject_sound = 0x80248fec; -play_infinite_stairs_music = 0x80249070; -set_background_music = 0x80249178; -fadeout_music = 0x8024922c; -fadeout_level_music = 0x8024927c; -play_cutscene_music = 0x802492d0; -play_shell_music = 0x80249310; -stop_shell_music = 0x8024934c; -play_cap_music = 0x80249398; -fadeout_cap_music = 0x80249404; -stop_cap_music = 0x80249448; -play_menu_sounds_extra = 0x80249494; -audio_game_loop_tick = 0x802494d8; -thread4_sound = 0x80249500; -level_control_timer = 0x802495e0; -pressed_pause = 0x802496b8; -set_play_mode = 0x80249764; -warp_special = 0x8024978c; -fade_into_special_warp = 0x802497b8; -stub_level_update_1 = 0x8024982c; -load_level_init_text = 0x8024983c; -init_door_warp = 0x8024995c; -set_mario_initial_cap_powerup = 0x80249a10; -set_mario_initial_action = 0x80249ab4; -init_mario_after_warp = 0x80249cd8; -warp_area = 0x8024a124; -warp_level = 0x8024a18c; -warp_credits = 0x8024a1d8; -check_instant_warp = 0x8024a374; -music_changed_through_warp = 0x8024a584; -initiate_warp = 0x8024a700; -get_painting_warp_node = 0x8024a7b4; -initiate_painting_warp = 0x8024a85c; -level_trigger_warp = 0x8024a9cc; -initiate_delayed_warp = 0x8024aedc; -update_hud_values = 0x8024b13c; -basic_update = 0x8024b390; -play_mode_normal = 0x8024b3e4; -play_mode_paused = 0x8024b5d4; -play_mode_frame_advance = 0x8024b6cc; -level_set_transition = 0x8024b798; -play_mode_change_area = 0x8024b7c0; -play_mode_change_level = 0x8024b880; -update_level = 0x8024b9b8; -init_level = 0x8024ba8c; -lvl_init_or_update = 0x8024bcd8; -lvl_init_from_save_file = 0x8024bd5c; -lvl_set_current_level = 0x8024be14; -lvl_play_the_end_screen_sound = 0x8024bfa0; -get_mario_cap_flag = 0x8024bff0; -object_facing_mario = 0x8024c0b8; -mario_obj_angle_to_object = 0x8024c16c; -determine_interaction = 0x8024c1d8; -attack_object = 0x8024c51c; -mario_stop_riding_object = 0x8024c618; -mario_grab_used_object = 0x8024c66c; -mario_drop_held_object = 0x8024c6c0; -mario_throw_held_object = 0x8024c780; -mario_stop_riding_and_holding = 0x8024c894; -does_mario_have_hat = 0x8024c8fc; -mario_blow_off_cap = 0x8024c928; -mario_lose_cap_to_enemy = 0x8024ca68; -mario_retrieve_cap = 0x8024caf8; -able_to_grab_object = 0x8024cb58; -mario_get_collided_object = 0x8024cbfc; -mario_check_object_grab = 0x8024cc7c; -bully_knock_back_mario = 0x8024ce08; -bounce_off_object = 0x8024d0b4; -hit_object_from_below = 0x8024d130; -determine_knockback_action = 0x8024d2bc; -push_mario_out_of_object = 0x8024d578; -bounce_back_from_attack = 0x8024d72c; -should_push_or_pull_door = 0x8024d804; -take_damage_from_interact_object = 0x8024d8b0; -take_damage_and_knock_back = 0x8024d998; -reset_mario_pitch = 0x8024daac; -interact_coin = 0x8024db2c; -interact_water_ring = 0x8024dbf0; -interact_star_or_key = 0x8024dc28; -interact_bbh_entrance = 0x8024de4c; -interact_warp = 0x8024df10; -interact_warp_door = 0x8024e0c4; -get_door_save_file_flag = 0x8024e2fc; -interact_door = 0x8024e420; -interact_cannon_base = 0x8024e6ec; -interact_igloo_barrier = 0x8024e778; -interact_tornado = 0x8024e7d4; -interact_whirlpool = 0x8024e8f0; -interact_strong_wind = 0x8024e9d0; -interact_flame = 0x8024ead8; -interact_snufit_bullet = 0x8024ec54; -interact_clam_or_bubba = 0x8024ed84; -interact_bully = 0x8024ee44; -interact_shock = 0x8024eff8; -interact_mr_blizzard = 0x8024f170; -interact_hit_from_below = 0x8024f1e0; -interact_bounce_top = 0x8024f354; -interact_unknown_08 = 0x8024f4ac; -interact_damage = 0x8024f55c; -interact_breakable = 0x8024f5cc; -interact_koopa_shell = 0x8024f6a4; -check_object_grab_mario = 0x8024f7a8; -interact_pole = 0x8024f8bc; -interact_hoot = 0x8024fa60; -interact_cap = 0x8024fb30; -interact_grabbable = 0x8024fd2c; -mario_can_talk = 0x8024fe6c; -check_read_sign = 0x8024ff04; -check_npc_talk = 0x80250098; -interact_text = 0x80250198; -check_kick_or_punch_wall = 0x80250230; -mario_process_interactions = 0x802503f0; -check_death_barrier = 0x802505c8; -check_lava_boost = 0x8025065c; -pss_begin_slide = 0x80250724; -pss_end_slide = 0x80250778; -mario_handle_special_floors = 0x802507fc; -is_anim_at_end = 0x80250940; -is_anim_past_end = 0x8025097c; -set_mario_animation = 0x802509b8; -set_mario_anim_with_accel = 0x80250b04; -set_anim_to_frame = 0x80250c7c; -is_anim_past_frame = 0x80250d38; -find_mario_anim_flags_and_translation = 0x80250e54; -update_mario_pos_for_anim = 0x80251020; -return_mario_anim_y_translation = 0x802510dc; -play_sound_if_no_flag = 0x80251120; -play_mario_jump_sound = 0x8025118c; -adjust_sound_for_speed = 0x80251274; -play_sound_and_spawn_particles = 0x80251310; -play_mario_action_sound = 0x80251444; -play_mario_landing_sound = 0x802514ac; -play_mario_landing_sound_once = 0x80251510; -play_mario_heavy_landing_sound = 0x80251574; -play_mario_heavy_landing_sound_once = 0x802515d8; -play_mario_sound = 0x8025163c; -mario_set_forward_vel = 0x80251708; -mario_get_floor_class = 0x8025177c; -mario_get_terrain_sound_addend = 0x802518a8; -resolve_and_return_wall_collisions = 0x80251a48; -vec3f_find_ceil = 0x80251afc; -mario_facing_downhill = 0x80251b54; -mario_floor_is_slippery = 0x80251bd4; -mario_floor_is_slope = 0x80251cfc; -mario_floor_is_steep = 0x80251e24; -find_floor_height_relative_polar = 0x80251f24; -find_floor_slope = 0x80252000; -update_mario_sound_and_camera = 0x802521a0; -set_steep_jump_action = 0x8025229c; -set_mario_action = 0x80252cf4; -set_jump_from_landing = 0x80252e5c; -set_jumping_action = 0x802530a0; -drop_and_set_mario_action = 0x80253178; -hurt_and_set_mario_action = 0x802531c4; -check_common_action_exits = 0x80253218; -check_common_hold_action_exits = 0x80253300; -transition_submerged_to_walking = 0x802533e4; -set_water_plunge_action = 0x80253488; -squish_mario_model = 0x80253588; -debug_print_speed_action_normal = 0x80253720; -update_mario_button_inputs = 0x80253838; -update_mario_joystick_inputs = 0x8025395c; -update_mario_geometry_inputs = 0x80253a60; -update_mario_inputs = 0x80253d58; -set_submerged_cam_preset_and_spawn_bubbles = 0x80253ec0; -update_mario_health = 0x80254060; -update_mario_info_for_cam = 0x802542b4; -mario_reset_bodystate = 0x80254338; -sink_mario_in_quicksand = 0x80254390; -update_and_return_cap_flags = 0x802543e8; -mario_update_hitbox_and_cap_model = 0x80254588; -execute_mario_action = 0x80254830; -init_mario = 0x80254b20; -init_mario_from_save_file = 0x80254f44; -get_additive_y_vel_for_jumps = 0x80255080; -stub_mario_step_1 = 0x8025509c; -stub_mario_step_2 = 0x802550b0; -transfer_bully_speed = 0x802550c0; -init_bully_collision_data = 0x80255238; -mario_bonk_reflection = 0x802552fc; -mario_update_quicksand = 0x80255414; -mario_push_off_steep_floor = 0x80255654; -mario_update_moving_sand = 0x8025570c; -mario_update_windy_ground = 0x8025580c; -stop_and_set_height_to_floor = 0x802559b0; -stationary_ground_step = 0x80255a34; -perform_ground_step = 0x80255d88; -check_ledge_grab = 0x80255ec4; -perform_air_quarter_step = 0x802560ac; -apply_twirl_gravity = 0x802564e0; -should_strengthen_gravity_for_jump_ascent = 0x80256584; -apply_gravity = 0x8025661c; -apply_vertical_wind = 0x802569f8; -perform_air_step = 0x80256b24; -set_vel_from_pitch_and_yaw = 0x80256cd8; -set_vel_from_yaw = 0x80256d8c; -get_credits_str_width = 0x80256e00; -print_displaying_credits_entry = 0x80256e88; -bhv_end_peach_loop = 0x80257060; -bhv_end_toad_loop = 0x802570dc; -geo_switch_peach_eyes = 0x80257198; -get_star_collection_dialog = 0x802572b0; -handle_save_menu = 0x8025733c; -spawn_obj_at_mario_rel_yaw = 0x80257450; -cutscene_take_cap_off = 0x802574e8; -cutscene_put_cap_on = 0x80257548; -mario_ready_to_speak = 0x802575a8; -set_mario_npc_dialog = 0x80257640; -act_reading_npc_dialog = 0x80257748; -act_waiting_for_dialog = 0x80257980; -act_disappeared = 0x80257a0c; -act_reading_automatic_dialog = 0x80257ab0; -act_reading_sign = 0x80257ce4; -act_debug_free_move = 0x80257eac; -general_star_dance_handler = 0x80258184; -act_star_dance = 0x80258420; -act_star_dance_water = 0x802584dc; -act_fall_after_star_grab = 0x802585c0; -common_death_handler = 0x802586cc; -act_standing_death = 0x80258744; -act_electrocution = 0x802587ec; -act_suffocation = 0x8025883c; -act_death_on_back = 0x8025888c; -act_death_on_stomach = 0x802588f8; -act_quicksand_death = 0x80258964; -act_eaten_by_bubba = 0x80258a7c; -launch_mario_until_land = 0x80258b24; -act_unlocking_key_door = 0x80258ba8; -act_unlocking_star_door = 0x80258dac; -act_entering_star_door = 0x80258f94; -act_going_through_door = 0x80259264; -act_warp_door_spawn = 0x802593cc; -act_emerge_from_pipe = 0x802594d4; -act_spawn_spin_airborne = 0x80259608; -act_spawn_spin_landing = 0x80259740; -act_exit_airborne = 0x802597ac; -act_falling_exit_airborne = 0x80259854; -act_exit_land_save_dialog = 0x802598d0; -act_death_exit = 0x80259c30; -act_unused_death_exit = 0x80259ce8; -act_falling_death_exit = 0x80259d74; -act_special_exit_airborne = 0x80259e00; -act_special_death_exit = 0x80259ef8; -act_spawn_no_spin_airborne = 0x80259fcc; -act_spawn_no_spin_landing = 0x8025a040; -act_bbh_enter_spin = 0x8025a0bc; -act_bbh_enter_jump = 0x8025a494; -act_teleport_fade_out = 0x8025a610; -act_teleport_fade_in = 0x8025a6fc; -act_shocked = 0x8025a858; -act_squished = 0x8025a9ac; -act_putting_on_cap = 0x8025ae0c; -stuck_in_ground_handler = 0x8025aea8; -act_head_stuck_in_ground = 0x8025affc; -act_butt_stuck_in_ground = 0x8025b050; -act_feet_stuck_in_ground = 0x8025b0a4; -generate_yellow_sparkles = 0x8025bc80; -mario_execute_cutscene_action = 0x8025d798; -add_tree_leaf_particles = 0x8025dd70; -play_climbing_sounds = 0x8025de1c; -set_pole_position = 0x8025df04; -act_holding_pole = 0x8025e21c; -act_climbing_pole = 0x8025e5a8; -act_grab_pole_slow = 0x8025e7a4; -act_grab_pole_fast = 0x8025e830; -act_top_of_pole_transition = 0x8025e930; -act_top_of_pole = 0x8025ea30; -perform_hanging_step = 0x8025eb50; -update_hang_moving = 0x8025ecfc; -update_hang_stationary = 0x8025eed0; -act_start_hanging = 0x8025ef58; -act_hanging = 0x8025f0b4; -act_hang_moving = 0x8025f1e4; -let_go_of_ledge = 0x8025f384; -climb_up_ledge = 0x8025f4b4; -update_ledge_climb_camera = 0x8025f560; -update_ledge_climb = 0x8025f644; -act_ledge_grab = 0x8025f6c0; -act_ledge_climb_slow = 0x8025f970; -act_ledge_climb_down = 0x8025fa64; -act_ledge_climb_fast = 0x8025fae8; -act_grabbed = 0x8025fb90; -act_in_cannon = 0x8025fc6c; -act_tornado_twirling = 0x80260154; -check_common_automatic_cancels = 0x80260568; -mario_execute_automatic_action = 0x802605d0; -check_common_idle_cancels = 0x802608b0; -check_common_hold_idle_cancels = 0x80260aac; -act_idle = 0x80260cb4; -play_anim_sound = 0x80260f94; -act_start_sleeping = 0x80261000; -act_sleeping = 0x80261268; -act_waking_up = 0x802614fc; -act_shivering = 0x8026168c; -act_coughing = 0x802618d8; -act_hold_idle = 0x802619d0; -act_hold_heavy_idle = 0x80261ad0; -act_standing_against_wall = 0x80261bf8; -act_in_quicksand = 0x80261cec; -act_crouching = 0x80261db4; -act_panting = 0x80261f70; -act_hold_panting_unused = 0x80262080; -stopping_step = 0x8026217c; -act_braking_stop = 0x802621dc; -act_butt_slide_stop = 0x802622dc; -act_hold_butt_slide_stop = 0x80262398; -act_slide_kick_slide_stop = 0x80262490; -act_start_crouching = 0x80262530; -act_stop_crouching = 0x80262650; -act_start_crawling = 0x80262770; -act_stop_crawling = 0x80262890; -act_shockwave_bounce = 0x80262980; -landing_step = 0x80262bc4; -check_common_landing_cancels = 0x80262c34; -act_jump_land_stop = 0x80262d68; -act_double_jump_land_stop = 0x80262dc4; -act_side_flip_land_stop = 0x80262e20; -act_freefall_land_stop = 0x80262e94; -act_triple_jump_land_stop = 0x80262ef0; -act_backflip_land_stop = 0x80262f50; -act_lava_boost_land = 0x80262fec; -act_long_jump_land_stop = 0x8026305c; -act_hold_jump_land_stop = 0x802630f8; -act_hold_freefall_land_stop = 0x802631f0; -act_air_throw_land = 0x802632e8; -act_twirl_land = 0x802633b4; -act_ground_pound_land = 0x8026350c; -act_first_person = 0x802635e8; -check_common_stationary_cancels = 0x80263784; -mario_execute_stationary_action = 0x80263898; -tilt_body_running = 0x80263e60; -play_step_sound = 0x80263ee4; -align_with_floor = 0x80264024; -begin_walking_action = 0x8026409c; -check_ledge_climb_down = 0x802640fc; -slide_bonk = 0x802642b4; -set_triple_jump_action = 0x80264340; -update_sliding_angle = 0x8026440c; -update_sliding = 0x80264740; -apply_slope_accel = 0x80264b54; -apply_landing_accel = 0x80264d80; -update_shell_speed = 0x80264e18; -apply_slope_decel = 0x80265080; -update_decelerating_speed = 0x802651b0; -update_walking_speed = 0x80265244; -should_begin_sliding = 0x80265458; -analog_stick_held_back = 0x80265514; -check_ground_dive_or_punch = 0x80265558; -begin_braking_action = 0x80265620; -anim_and_audio_for_walk = 0x80265700; -anim_and_audio_for_hold_walk = 0x80265b1c; -anim_and_audio_for_heavy_walk = 0x80265d90; -push_or_sidle_wall = 0x80265df8; -tilt_body_walking = 0x80266038; -tilt_body_ground_shell = 0x802661cc; -act_walking = 0x80266354; -act_move_punching = 0x802665b4; -act_hold_walking = 0x80266734; -act_hold_heavy_walking = 0x8026699c; -act_turning_around = 0x80266af8; -act_finish_turning_around = 0x80266d4c; -act_braking = 0x80266e48; -act_decelerating = 0x80266fc8; -act_hold_decelerating = 0x80267240; -act_riding_shell_ground = 0x80267504; -act_crawling = 0x80267728; -act_burning_ground = 0x8026795c; -tilt_body_butt_slide = 0x80267c24; -common_slide_action = 0x80267ce4; -common_slide_action_with_jump = 0x80267fa4; -act_butt_slide = 0x80268074; -act_hold_butt_slide = 0x802680d4; -act_crouch_slide = 0x80268168; -act_slide_kick_slide = 0x80268338; -stomach_slide_action = 0x802684ac; -act_stomach_slide = 0x802685c0; -act_hold_stomach_slide = 0x80268608; -act_dive_slide = 0x80268684; -common_ground_knockback_action = 0x802687b8; -act_hard_backward_ground_kb = 0x802689f8; -act_hard_forward_ground_kb = 0x80268adc; -act_backward_ground_kb = 0x80268b64; -act_forward_ground_kb = 0x80268bb0; -act_soft_backward_ground_kb = 0x80268bfc; -act_soft_forward_ground_kb = 0x80268c48; -act_ground_bonk = 0x80268c94; -act_death_exit_land = 0x80268d04; -common_landing_action = 0x80268dcc; -common_landing_cancels = 0x80268f78; -act_jump_land = 0x80269108; -act_freefall_land = 0x80269170; -act_side_flip_land = 0x802691d8; -act_hold_jump_land = 0x80269264; -act_hold_freefall_land = 0x80269300; -act_long_jump_land = 0x8026939c; -act_double_jump_land = 0x8026947c; -act_triple_jump_land = 0x802694e4; -act_backflip_land = 0x80269588; -quicksand_jump_land_action = 0x80269640; -act_quicksand_jump_land = 0x80269788; -act_hold_quicksand_jump_land = 0x802697dc; -check_common_moving_cancels = 0x80269830; -mario_execute_moving_action = 0x80269954; -play_flip_sounds = 0x80269f40; -play_far_fall_sound = 0x80269fc0; -play_knockback_sound = 0x8026a090; -lava_boost_on_wall = 0x8026a12c; -check_fall_damage = 0x8026a224; -check_kick_or_dive_in_air = 0x8026a400; -should_get_stuck_in_ground = 0x8026a494; -check_fall_damage_or_get_stuck = 0x8026a598; -check_horizontal_wind = 0x8026a62c; -update_air_with_turn = 0x8026a818; -update_air_without_turn = 0x8026aa48; -update_lava_boost_or_twirling = 0x8026acd8; -update_flying_yaw = 0x8026ae5c; -update_flying_pitch = 0x8026b004; -update_flying = 0x8026b17c; -common_air_action_step = 0x8026b444; -act_jump = 0x8026b6a0; -act_double_jump = 0x8026b740; -act_triple_jump = 0x8026b814; -act_backflip = 0x8026b90c; -act_freefall = 0x8026b9ac; -act_hold_jump = 0x8026bab8; -act_hold_freefall = 0x8026bbb4; -act_side_flip = 0x8026bcc0; -act_wall_kick_air = 0x8026bdcc; -act_long_jump = 0x8026be78; -act_riding_shell_air = 0x8026bf40; -act_twirling = 0x8026c034; -act_dive = 0x8026c1e0; -act_air_throw = 0x8026c4b8; -act_water_jump = 0x8026c5d0; -act_hold_water_jump = 0x8026c738; -act_steep_jump = 0x8026c880; -act_ground_pound = 0x8026c9fc; -act_burning_jump = 0x8026cd0c; -act_burning_fall = 0x8026ce50; -act_crazy_box_bounce = 0x8026cf28; -common_air_knockback_step = 0x8026d1b0; -check_wall_kick = 0x8026d33c; -act_backward_air_kb = 0x8026d3c8; -act_forward_air_kb = 0x8026d43c; -act_hard_backward_air_kb = 0x8026d4b0; -act_hard_forward_air_kb = 0x8026d508; -act_thrown_backward = 0x8026d560; -act_thrown_forward = 0x8026d608; -act_soft_bonk = 0x8026d6fc; -act_getting_blown = 0x8026d770; -act_air_hit_wall = 0x8026d988; -act_forward_rollout = 0x8026db54; -act_backward_rollout = 0x8026dcf4; -act_butt_slide_air = 0x8026de98; -act_hold_butt_slide_air = 0x8026e088; -act_lava_boost = 0x8026e2b4; -act_slide_kick = 0x8026e59c; -act_jump_kick = 0x8026e810; -act_shot_from_cannon = 0x8026e968; -act_flying = 0x8026ec00; -act_riding_hoot = 0x8026f158; -act_flying_triple_jump = 0x8026f2ec; -act_top_of_pole_jump = 0x8026f614; -act_vertical_wind = 0x8026f660; -act_special_triple_jump = 0x8026f840; -check_common_airborne_cancels = 0x8026fa18; -mario_execute_airborne_action = 0x8026fb04; -mario_execute_submerged_action = 0x8027499c; -animated_stationary_ground_step = 0x80274eb0; -mario_update_punch_sequence = 0x80274f10; -act_punching = 0x80275328; -act_picking_up = 0x8027546c; -act_dive_picking_up = 0x802755fc; -act_placing_down = 0x802756c8; -act_throwing = 0x80275794; -act_heavy_throw = 0x802758c0; -act_stomach_slide_stop = 0x802759b4; -act_picking_up_bowser = 0x80275a80; -act_holding_bowser = 0x80275b34; -act_releasing_bowser = 0x80275e78; -check_common_object_cancels = 0x80275f0c; -mario_execute_object_action = 0x80275fe0; -geo_envfx_main = 0x802761d0; -geo_skybox_main = 0x802763d4; -geo_draw_mario_head_goddard = 0x802764b0; -bhv_toad_message_loop = 0x8027684c; -bhv_toad_message_init = 0x80276910; -bhv_unlock_door_star_init = 0x80276bb8; -bhv_unlock_door_star_loop = 0x80276ccc; -geo_mirror_mario_set_alpha = 0x802770a4; -geo_switch_mario_stand_run = 0x80277150; -geo_switch_mario_eyes = 0x802771bc; -geo_mario_tilt_torso = 0x80277294; -geo_mario_head_rotation = 0x802773a4; -geo_switch_mario_hand = 0x802774f4; -geo_mario_hand_foot_scaler = 0x802775cc; -geo_switch_mario_cap_effect = 0x802776d8; -geo_switch_mario_cap_on_off = 0x80277740; -geo_mario_rotate_wing_cap_wings = 0x80277824; -geo_switch_mario_hand_grab_pos = 0x8027795c; -geo_render_mirror_mario = 0x80277b14; -geo_mirror_mario_backface_culling = 0x80277d6c; -set_segment_base_addr = 0x80277ee0; -get_segment_base_addr = 0x80277f20; -segmented_to_virtual = 0x80277f50; -virtual_to_segmented = 0x80277fa8; -move_segment_table_to_dmem = 0x80277ff0; -main_pool_init = 0x80278074; -main_pool_alloc = 0x80278120; -main_pool_free = 0x80278238; -main_pool_realloc = 0x80278358; -main_pool_available = 0x802783c8; -main_pool_push_state = 0x802783e8; -main_pool_pop_state = 0x80278498; -load_segment = 0x8027868c; -load_to_fixed_pool_addr = 0x802786f0; -load_segment_decompress = 0x802787d8; -load_segment_decompress_heap = 0x802788b4; -load_engine_code_segment = 0x80278974; -alloc_only_pool_init = 0x80278a14; -alloc_only_pool_alloc = 0x80278ab8; -alloc_only_pool_resize = 0x80278b28; -mem_pool_init = 0x80278b98; -mem_pool_alloc = 0x80278c58; -mem_pool_free = 0x80278d74; -alloc_display_list = 0x80278f2c; -func_80278A78 = 0x80279028; -load_patchable_table = 0x80279084; -save_file_do_save = 0x80279840; -save_file_erase = 0x802798fc; -save_file_copy = 0x80279960; -save_file_load_all = 0x802799dc; -save_file_reload = 0x80279bc8; -save_file_collect_star_or_key = 0x80279c44; -save_file_exists = 0x80279e44; -save_file_get_max_coin_score = 0x80279e80; -save_file_get_course_star_count = 0x80279f80; -save_file_get_total_star_count = 0x8027a010; -save_file_set_flags = 0x8027a0a8; -save_file_clear_flags = 0x8027a0f4; -save_file_get_flags = 0x8027a16c; -save_file_get_star_flags = 0x8027a1c8; -save_file_set_star_flags = 0x8027a23c; -save_file_get_course_coin_score = 0x8027a310; -save_file_is_cannon_unlocked = 0x8027a340; -save_file_set_cannon_unlocked = 0x8027a390; -save_file_set_cap_pos = 0x8027a418; -save_file_get_cap_pos = 0x8027a4ac; -save_file_set_sound_mode = 0x8027a564; -save_file_get_sound_mode = 0x8027a5b4; -save_file_move_cap_to_default_location = 0x8027a5d4; -disable_warp_checkpoint = 0x8027a698; -check_if_should_set_warp_checkpoint = 0x8027a6b0; -check_warp_checkpoint = 0x8027a718; -override_viewport_and_clip = 0x8027a7d0; -set_warp_transition_rgb = 0x8027a83c; -print_intro_text = 0x8027a8b0; -get_mario_spawn_type = 0x8027a93c; -area_get_warp_node = 0x8027a9c8; -area_get_warp_node_from_params = 0x8027aa28; -load_obj_warp_nodes = 0x8027aa74; -clear_areas = 0x8027ab04; -clear_area_graph_nodes = 0x8027ad74; -load_area = 0x8027ae44; -unload_area = 0x8027af48; -load_mario_area = 0x8027afbc; -unload_mario_area = 0x8027b038; -change_area = 0x8027b0c0; -area_update_objects = 0x8027b164; -play_transition = 0x8027b1a0; -play_transition_after_delay = 0x8027b35c; -render_game = 0x8027b3b4; -geo_set_animation_globals = 0x8027cf38; -geo_process_held_object = 0x8027da84; -geo_try_process_children = 0x8027de68; -geo_process_node_and_siblings = 0x8027dea8; -geo_process_root = 0x8027e130; -profiler_log_thread5_time = 0x8027e3e0; -profiler_log_thread4_time = 0x8027e490; -profiler_log_gfx_time = 0x8027e520; -profiler_log_vblank_time = 0x8027e5cc; -draw_profiler_bar = 0x8027e65c; -draw_reference_profiler_bars = 0x8027e958; -draw_profiler_mode_1 = 0x8027ebcc; -draw_profiler_mode_0 = 0x8027eeac; -draw_profiler = 0x8027f460; -decompress = 0x8027f4e0; -set_camera_shake_from_hit = 0x8027f590; -set_environmental_camera_shake = 0x8027f8b8; -set_camera_shake_from_point = 0x8027f9f0; -unused_set_camera_pitch_shake_env = 0x8027fb74; -calc_y_to_curr_floor = 0x8027fc18; -focus_on_mario = 0x8027fe20; -set_camera_height = 0x8027fff8; -look_down_slopes = 0x80280368; -pan_ahead_of_player = 0x802804f4; -find_in_bounds_yaw_wdw_bob_thi = 0x802806a4; -update_radial_camera = 0x80280810; -update_8_directions_camera = 0x80280970; -radial_camera_move = 0x80280b00; -lakitu_zoom = 0x80281188; -radial_camera_input_default = 0x802813bc; -update_yaw_and_dist_from_c_up = 0x802813ec; -mode_radial_camera = 0x8028146c; -mode_8_directions_camera = 0x80281588; -update_outward_radial_camera = 0x802816a0; -mode_outward_radial_camera = 0x802817fc; -update_parallel_tracking_camera = 0x80281904; -update_fixed_camera = 0x80282280; -update_boss_fight_camera = 0x802826a0; -unused_update_mode_5_camera = 0x80282c0c; -mode_boss_fight_camera = 0x80282c3c; -mode_parallel_tracking_camera = 0x80282c7c; -mode_fixed_camera = 0x80282ce0; -update_behind_mario_camera = 0x80282d78; -mode_behind_mario = 0x80283340; -update_slide_camera = 0x80283578; -mode_behind_mario_camera = 0x802839e4; -nop_update_water_camera = 0x80283a18; -mode_water_surface_camera = 0x80283a34; -update_mario_camera = 0x80283a68; -update_default_camera = 0x80283af8; -mode_default_camera = 0x80284cb8; -mode_lakitu_camera = 0x80284cfc; -mode_mario_camera = 0x80284d38; -update_spiral_stairs_camera = 0x80284d74; -mode_spiral_stairs_camera = 0x802850ac; -update_slide_or_0f_camera = 0x802850ec; -mode_slide_camera = 0x802851dc; -store_lakitu_cam_info_for_c_up = 0x8028526c; -set_mode_c_up = 0x802852f4; -exit_c_up = 0x80285370; -update_c_up = 0x80285808; -move_mario_head_c_up = 0x802858a4; -move_into_c_up = 0x80285a2c; -mode_c_up_camera = 0x80285d20; -update_in_cannon = 0x80285ed8; -mode_cannon_camera = 0x80285f60; -transition_next_state = 0x8028603c; -transition_to_camera_mode = 0x80286088; -set_camera_mode = 0x80286188; -update_lakitu = 0x80286420; -update_camera = 0x802868f8; -reset_camera = 0x80286f68; -init_camera = 0x8028724c; -zoom_out_if_paused_and_outside = 0x802879ec; -select_mario_cam_mode = 0x80287bc4; -create_camera = 0x80287be0; -update_graph_node_camera = 0x80287cb8; -geo_camera_main = 0x80287d30; -stub_camera_2 = 0x80287dc0; -stub_camera_3 = 0x80287dd4; -vec3f_sub = 0x80287de8; -object_pos_to_vec3f = 0x80287e28; -vec3f_to_object_pos = 0x80287e50; -unused_object_angle_to_vec3s = 0x80287e78; -evaluate_cubic_spline = 0x80287ea0; -move_point_along_spline = 0x802882e4; -cam_select_alt_mode = 0x80288624; -set_cam_angle = 0x80288718; -set_handheld_shake = 0x80288888; -shake_camera_handheld = 0x802889b0; -find_c_buttons_pressed = 0x80288ce4; -update_camera_hud_status = 0x80288e68; -collide_with_walls = 0x80288f5c; -vec3f_compare = 0x80289198; -clamp_pitch = 0x80289214; -is_within_100_units_of_mario = 0x802892d8; -set_or_approach_f32_asymptotic = 0x8028935c; -approach_f32_asymptotic_bool = 0x802893f4; -approach_f32_asymptotic = 0x80289488; -approach_s16_asymptotic_bool = 0x802894b4; -approach_s16_asymptotic = 0x8028956c; -approach_vec3f_asymptotic = 0x80289610; -set_or_approach_vec3f_asymptotic = 0x80289684; -approach_vec3s_asymptotic = 0x802896f8; -camera_approach_s16_symmetric_bool = 0x8028976c; -camera_approach_s16_symmetric = 0x8028984c; -set_or_approach_s16_symmetric = 0x8028993c; -camera_approach_f32_symmetric_bool = 0x802899cc; -camera_approach_f32_symmetric = 0x80289b0c; -random_vec3s = 0x80289c00; -reduce_by_dist_from_camera = 0x80289d20; -clamp_positions_and_find_yaw = 0x80289f88; -calc_avoid_yaw = 0x8028a080; -is_surf_within_bounding_box = 0x8028a0f4; -is_behind_surface = 0x8028a4ec; -is_range_behind_surface = 0x8028a6bc; -is_mario_behind_surface = 0x8028a7ec; -scale_along_line = 0x8028a834; -is_pos_in_bounds = 0x8028a8e8; -calculate_pitch = 0x8028aa28; -calculate_yaw = 0x8028aad8; -calculate_angles = 0x8028ab60; -calc_abs_dist = 0x8028ac28; -calc_hor_dist = 0x8028accc; -rotate_in_xz = 0x8028ad4c; -rotate_in_yz = 0x8028ae1c; -set_camera_pitch_shake = 0x8028aef0; -set_camera_yaw_shake = 0x8028af4c; -set_camera_roll_shake = 0x8028b00c; -set_pitch_shake_from_point = 0x8028b068; -set_yaw_shake_from_point = 0x8028b11c; -increment_shake_offset = 0x8028b1d0; -shake_camera_pitch = 0x8028b218; -shake_camera_yaw = 0x8028b32c; -shake_camera_roll = 0x8028b438; -offset_yaw_outward_radial = 0x8028b50c; -cutscene_intro_peach_play_message_music = 0x8028b724; -cutscene_intro_peach_play_lakitu_flying_music = 0x8028b754; -play_camera_buzz_if_cdown = 0x8028b784; -play_camera_buzz_if_cbutton = 0x8028b7c4; -play_camera_buzz_if_c_sideways = 0x8028b804; -play_sound_cbutton_up = 0x8028b850; -play_sound_cbutton_down = 0x8028b884; -play_sound_cbutton_side = 0x8028b8b8; -play_sound_button_change_blocked = 0x8028b8ec; -play_sound_rbutton_changed = 0x8028b920; -play_sound_if_cam_switched_to_lakitu_or_mario = 0x8028b954; -radial_camera_input = 0x8028b9c4; -trigger_cutscene_dialog = 0x8028bd34; -handle_c_button_movement = 0x8028bd98; -clear_cutscene_vars = 0x8028c038; -start_cutscene = 0x8028c13c; -determine_dance_cutscene = 0x8028c18c; -open_door_cutscene = 0x8028c26c; -get_cutscene_from_mario_status = 0x8028c2c8; -warp_camera = 0x8028c7a0; -approach_camera_height = 0x8028c8f0; -stub_camera_4 = 0x8028c9ac; -set_focus_rel_mario = 0x8028c9cc; -offset_rotated = 0x8028cbf0; -offset_rotated_coords = 0x8028cd94; -determine_pushing_or_pulling_door = 0x8028cdec; -next_lakitu_state = 0x8028ce24; -set_camera_mode_fixed = 0x8028d44c; -set_camera_mode_8_directions = 0x8028d5ac; -set_camera_mode_boss_fight = 0x8028d5fc; -set_camera_mode_close_cam = 0x8028d658; -set_camera_mode_radial = 0x8028d698; -parallel_tracking_init = 0x8028d79c; -set_fixed_cam_axis_sa_lobby = 0x8028d888; -check_blocking_area_processing = 0x8028d92c; -cam_rr_exit_building_side = 0x8028da18; -cam_rr_exit_building_top = 0x8028da50; -cam_rr_enter_building_window = 0x8028daec; -cam_rr_enter_building = 0x8028db38; -cam_rr_enter_building_side = 0x8028dbb4; -cam_cotmc_exit_waterfall = 0x8028dbf4; -cam_sl_snowman_head_8dir = 0x8028dc1c; -cam_sl_free_roam = 0x8028dc70; -move_camera_through_floor_while_descending = 0x8028dca4; -cam_hmc_enter_maze = 0x8028dd48; -cam_hmc_elevator_black_hole = 0x8028de2c; -cam_hmc_elevator_maze_emergency_exit = 0x8028de5c; -cam_hmc_elevator_lake = 0x8028de90; -cam_hmc_elevator_maze = 0x8028dec4; -cam_ssl_enter_pyramid_top = 0x8028def8; -cam_ssl_pyramid_center = 0x8028df24; -cam_ssl_boss_room = 0x8028df6c; -cam_thi_move_cam_through_tunnel = 0x8028dfb4; -cam_thi_look_through_tunnel = 0x8028dfe8; -cam_bob_tower = 0x8028e01c; -cam_bob_default_free_roam = 0x8028e064; -cam_castle_hmc_start_pool_cutscene = 0x8028e098; -cam_castle_lobby_entrance = 0x8028e0ec; -cam_castle_look_upstairs = 0x8028e164; -cam_castle_basement_look_downstairs = 0x8028e210; -cam_castle_enter_lobby = 0x8028e298; -cam_castle_enter_spiral_stairs = 0x8028e300; -cam_castle_close_mode = 0x8028e38c; -cam_castle_leave_lobby_sliding_door = 0x8028e3b8; -cam_castle_enter_lobby_sliding_door = 0x8028e3f0; -cam_bbh_room_6 = 0x8028e41c; -cam_bbh_fall_off_roof = 0x8028e450; -cam_bbh_fall_into_pool = 0x8028e47c; -cam_bbh_room_1 = 0x8028e524; -cam_bbh_leave_front_door = 0x8028e55c; -cam_bbh_room_2_lower = 0x8028e594; -cam_bbh_room_4 = 0x8028e5cc; -cam_bbh_room_8 = 0x8028e604; -cam_bbh_room_5_library = 0x8028e63c; -cam_bbh_room_5_library_to_hidden_transition = 0x8028e674; -cam_bbh_room_5_hidden_to_library_transition = 0x8028e6c4; -cam_bbh_room_5_hidden = 0x8028e714; -cam_bbh_room_3 = 0x8028e758; -cam_bbh_room_7_mr_i = 0x8028e790; -cam_bbh_room_7_mr_i_to_coffins_transition = 0x8028e7c8; -cam_bbh_room_7_coffins_to_mr_i_transition = 0x8028e818; -cam_bbh_elevator_room_lower = 0x8028e868; -cam_bbh_room_0_back_entrance = 0x8028e8a0; -cam_bbh_elevator = 0x8028e8cc; -cam_bbh_room_12_upper = 0x8028e930; -cam_bbh_enter_front_door = 0x8028e974; -cam_bbh_room_2_library = 0x8028e9a0; -cam_bbh_room_2_library_to_trapdoor_transition = 0x8028e9d8; -cam_bbh_room_2_trapdoor = 0x8028ea28; -cam_bbh_room_2_trapdoor_transition = 0x8028ea60; -cam_bbh_room_9_attic = 0x8028eab0; -cam_bbh_room_9_attic_transition = 0x8028eae8; -cam_bbh_room_9_mr_i_transition = 0x8028eb38; -cam_bbh_room_13_balcony = 0x8028eb88; -cam_bbh_room_0 = 0x8028ebc0; -cam_ccm_enter_slide_shortcut = 0x8028ec04; -cam_ccm_leave_slide_shortcut = 0x8028ec2c; -surface_type_modes = 0x8028ec58; -set_mode_if_not_set_by_surface = 0x8028ed30; -surface_type_modes_thi = 0x8028ed98; -camera_course_processing = 0x8028eeb0; -resolve_geometry_collisions = 0x8028f670; -rotate_camera_around_walls = 0x8028f914; -find_mario_floor_and_ceil = 0x8028fc9c; -start_object_cutscene = 0x8028fe24; -start_object_cutscene_without_focus = 0x8028fe58; -unused_dialog_cutscene_response = 0x8028fe84; -cutscene_object_with_dialog = 0x8028ff04; -cutscene_object_without_dialog = 0x8028ffc8; -cutscene_object = 0x8029000c; -update_camera_yaw = 0x80290098; -cutscene_reset_spline = 0x802900e0; -stop_cutscene_and_retrieve_stored_info = 0x80290104; -cap_switch_save = 0x80290168; -init_spline_point = 0x802901a4; -copy_spline_segment = 0x802901fc; -cutscene_common_set_dialog_state = 0x802903b8; -cutscene_intro_peach_start_letter_music = 0x802904a8; -cutscene_intro_peach_start_flying_music = 0x802904e4; -reset_pan_distance = 0x8029051c; -player2_rotate_cam = 0x8029053c; -store_info_cannon = 0x80290784; -retrieve_info_cannon = 0x802907f4; -store_info_star = 0x80290864; -retrieve_info_star = 0x802908e8; -pan_camera = 0x802909d0; -cutscene_shake_explosion = 0x80290a5c; -rotate_and_move_vec3f = 0x80290abc; -set_flag_post_door = 0x80290b54; -cutscene_soften_music = 0x80290ba4; -cutscene_unsoften_music = 0x80290bd8; -cutscene_unused_start = 0x80290c1c; -cutscene_unused_loop = 0x80290c30; -cutscene_ending_mario_fall_start = 0x80290c44; -cutscene_ending_mario_fall_focus_mario = 0x80290c9c; -cutscene_ending_mario_fall = 0x80290d90; -cutscene_ending_mario_land_closeup = 0x80290e00; -cutscene_ending_reset_spline = 0x80290e74; -cutscene_ending_fly_up_to_window = 0x80290eb0; -cutscene_ending_stars_free_peach = 0x80290f1c; -cutscene_ending_mario_land = 0x80290f8c; -cutscene_ending_peach_appear_closeup = 0x80291074; -cutscene_ending_peach_appears = 0x80291108; -cutscene_ending_peach_descends_start = 0x802911c8; -cutscene_ending_follow_peach_descent = 0x80291208; -cutscene_ending_peach_descent_lower_focus = 0x8029127c; -cutscene_ending_peach_descent_back_to_mario = 0x802912b8; -cutscene_ending_peach_descends = 0x80291354; -cutscene_ending_mario_to_peach = 0x8029142c; -cutscene_ending_look_up_at_castle = 0x802914cc; -cutscene_ending_peach_wakeup = 0x80291514; -cutscene_ending_dialog = 0x802915d4; -cutscene_ending_kiss_closeup = 0x80291654; -cutscene_ending_kiss_here_we_go = 0x802916b8; -cutscene_ending_kiss = 0x80291774; -cutscene_ending_look_at_sky = 0x802917e4; -cutscene_ending_zoom_fov = 0x8029184c; -cutscene_ending_cake_for_mario = 0x80291870; -cutscene_ending_stop = 0x80291924; -cutscene_grand_star_start = 0x80291964; -cutscene_grand_star_front_of_mario = 0x802919dc; -cutscene_grand_star_mario_jump = 0x80291ab4; -cutscene_grand_star_accel_cvar2 = 0x80291b18; -cutscene_grand_star_approach_mario = 0x80291b68; -cutscene_grand_star_move_cvar2 = 0x80291bf4; -cutscene_grand_star_focus_mario = 0x80291c3c; -cutscene_grand_star = 0x80291cd0; -cutscene_grand_star_fly_start = 0x80291db0; -cutscene_grand_star_fly_move_to_mario = 0x80291e84; -cutscene_grand_star_fly_mario_offscreen = 0x80291f18; -cutscene_grand_star_fly_app_cvars = 0x80292038; -cutscene_grand_star_fly = 0x80292164; -focus_in_front_of_mario = 0x802921fc; -cutscene_dance_move_to_mario = 0x8029228c; -cutscene_dance_rotate = 0x80292324; -cutscene_dance_rotate_move_back = 0x80292370; -cutscene_dance_rotate_move_towards_mario = 0x802923b8; -cutscene_dance_default_focus_mario = 0x80292414; -cutscene_dance_rotate_focus_mario = 0x8029244c; -cutscene_dance_shake_fov = 0x80292484; -cutscene_dance_default_rotate = 0x802924b8; -star_dance_bound_yaw = 0x80292628; -cutscene_dance_closeup_start = 0x802926dc; -cutscene_dance_closeup_focus_mario = 0x802927d0; -cutscene_dance_closeup_fly_above = 0x80292868; -cutscene_dance_closeup_fly_closer = 0x80292974; -cutscene_dance_closeup_zoom = 0x80292a20; -cutscene_dance_closeup_shake_fov = 0x80292a4c; -cutscene_dance_closeup = 0x80292a80; -cutscene_dance_fly_away_start = 0x80292c00; -cutscene_dance_fly_away_approach_mario = 0x80292d80; -cutscene_dance_fly_away_focus_mario = 0x80292e2c; -cutscene_pan_cvar9 = 0x80292ec4; -cutscene_dance_fly_rotate_around_mario = 0x80292f40; -cutscene_dance_fly_away_rotate_while_flying = 0x80292f98; -cutscene_dance_fly_away_shake_fov = 0x80292fe4; -cutscene_dance_fly_away = 0x80293018; -cutscene_key_dance_jump_cvar = 0x802930f0; -cutscene_key_dance_jump_closeup = 0x80293164; -cutscene_key_dance_jump_lower_left = 0x802931c0; -cutscene_key_dance_jump_above = 0x80293220; -cutscene_key_dance_jump_last = 0x8029328c; -cutscene_key_dance_shake_fov = 0x802932f4; -cutscene_key_dance_handheld_shake = 0x80293328; -cutscene_key_dance_focus_mario = 0x80293354; -cutscene_key_dance = 0x8029338c; -cutscene_bowser_area_shake_fov = 0x80293488; -cutscene_bowser_area_start_bowser_walking = 0x802934b4; -cutscene_bowser_arena_set_pos = 0x802934d8; -cutscene_bowser_arena_focus_sine = 0x80293548; -cutscene_bowser_arena_set_focus = 0x802935e0; -cutscene_bowser_arena_adjust_offsets = 0x80293624; -cutscene_bowser_arena_pan_left = 0x8029369c; -cutscene_bowser_arena_mario_dialog = 0x802936dc; -cutscene_stop_dialog = 0x80293708; -cutscene_bowser_arena_start = 0x80293734; -bowser_fight_intro_dialog = 0x802937e8; -cutscene_bowser_arena_dialog = 0x8029386c; -cutscene_bowser_arena_end = 0x802938c8; -cutscene_bowser_arena = 0x80293944; -cutscene_star_spawn_store_info = 0x80293abc; -cutscene_star_spawn_focus_star = 0x80293ae8; -cutscene_star_spawn_update_boss_fight = 0x80293b70; -cutscene_star_spawn_fly_back = 0x80293bf4; -cutscene_star_spawn = 0x80293c2c; -cutscene_star_spawn_back = 0x80293cb0; -cutscene_star_spawn_end = 0x80293d5c; -cutscene_exit_waterfall_warp = 0x80293d90; -cutscene_exit_to_castle_grounds_focus_mario = 0x80293dd4; -cutscene_exit_waterfall = 0x80293e7c; -cutscene_exit_to_castle_grounds_end = 0x80293ed8; -cutscene_exit_fall_to_castle_grounds_warp = 0x80293f2c; -cutscene_exit_fall_to_castle_grounds = 0x80293f70; -cutscene_red_coin_star_start = 0x80293fcc; -cutscene_red_coin_star_focus_xz = 0x80294024; -cutscene_red_coin_star_focus_y = 0x80294088; -cutscene_red_coin_star_look_up_at_star = 0x802940cc; -cutscene_red_coin_star_warp = 0x8029410c; -cutscene_red_coin_star_set_fov = 0x802942cc; -cutscene_red_coin_star = 0x802942f0; -cutscene_red_coin_star_end = 0x802943d4; -cutscene_goto_cvar_pos = 0x80294428; -cutscene_prepare_cannon_start = 0x80294718; -cutscene_prepare_cannon_fly_to_cannon = 0x802947a4; -cannon_approach_prev = 0x8029480c; -cutscene_prepare_cannon_fly_back = 0x802948a0; -cutscene_prepare_cannon = 0x80294a14; -cutscene_prepare_cannon_end = 0x80294a94; -water_death_move_to_mario_side = 0x80294ae8; -death_goto_mario = 0x80294b78; -cutscene_death_standing_start = 0x80294bb4; -cutscene_death_standing_goto_mario = 0x80294c28; -cutscene_death_standing = 0x80294c5c; -cutscene_death_stomach_start = 0x80294cc4; -cutscene_death_stomach_goto_mario = 0x80294d48; -cutscene_death_stomach = 0x80294db4; -cutscene_bbh_death_start = 0x80294e24; -cutscene_bbh_death_goto_mario = 0x80294ea8; -cutscene_bbh_death = 0x80294ee8; -cutscene_quicksand_death_start = 0x80294f58; -cutscene_quicksand_death_goto_mario = 0x80294f94; -cutscene_quicksand_death = 0x80294fec; -cutscene_suffocation_fly_away = 0x802950b0; -cutscene_suffocation_stay_above_gas = 0x80295140; -cutscene_suffocation_rotate = 0x802951f0; -cutscene_suffocation = 0x80295270; -cutscene_enter_pool_start = 0x80295310; -cutscene_enter_pool_loop = 0x802953dc; -cutscene_enter_pool = 0x80295418; -cutscene_pyramid_top_explode_start = 0x80295480; -cutscene_pyramid_top_explode_zoom_in = 0x802954ec; -cutscene_pyramid_top_explode_focus = 0x80295518; -cutscene_pyramid_top_explode_warp = 0x80295580; -cutscene_pyramid_top_explode_closeup = 0x80295670; -cutscene_pyramid_top_explode_cam_shake = 0x80295740; -cutscene_pyramid_top_explode_warp_back = 0x8029576c; -cutscene_pyramid_top_explode = 0x802957c8; -cutscene_pyramid_top_explode_end = 0x80295894; -cutscene_enter_pyramid_top_start = 0x802958d4; -cutscene_enter_pyramid_top = 0x80295930; -cutscene_dialog_start = 0x80295a58; -cutscene_dialog_move_mario_shoulder = 0x80295bf0; -cutscene_dialog_create_dialog_box = 0x80295e24; -cutscene_dialog = 0x80295e8c; -cutscene_dialog_set_flag = 0x80295fb0; -cutscene_dialog_end = 0x80295fd8; -cutscene_read_message_start = 0x80296020; -cutscene_read_message = 0x80296160; -cutscene_read_message_set_flag = 0x802962c8; -cutscene_read_message_end = 0x802962f0; -cutscene_exit_succ_start = 0x80296318; -cutscene_non_painting_set_cam_pos = 0x802963b8; -cutscene_non_painting_set_cam_focus = 0x8029652c; -cutscene_exit_bowser_succ_focus_left = 0x8029665c; -cutscene_exit_bowser_key_toss_shake = 0x8029669c; -cutscene_exit_succ_shake_landing = 0x802966e4; -cutscene_exit_bowser_succ = 0x80296710; -cutscene_non_painting_end = 0x802967c4; -cutscene_exit_non_painting_succ_override_cvar = 0x8029685c; -cutscene_exit_non_painting_succ = 0x802968a0; -cutscene_non_painting_death_start = 0x8029695c; -cutscene_exit_bowser_death = 0x802969f8; -cutscene_non_painting_death_override_offset = 0x80296a64; -cutscene_non_painting_death = 0x80296b30; -cutscene_cap_switch_press_start = 0x80296bc8; -cutscene_cap_switch_press_rotate_around_mario = 0x80296c4c; -cutscene_cap_switch_press_lower_cam = 0x80296d60; -cutscene_cap_switch_press_approach_mario = 0x80296da8; -cutscene_cap_switch_press_pan_left = 0x80296eb4; -cutscene_cap_switch_press_create_dialog = 0x80296f38; -cutscene_cap_switch_press = 0x80296fa8; -cutscene_unlock_key_door_start = 0x80297148; -cutscene_unlock_key_door_approach_mario = 0x8029720c; -cutscene_unlock_key_door_focus_lock = 0x80297290; -cutscene_unlock_key_door_stub = 0x802972ec; -cutscene_unlock_key_door_fly_back = 0x80297300; -cutscene_unlock_key_door_fov_shake = 0x80297384; -cutscene_unlock_key_door = 0x802973b0; -intro_peach_move_camera_start_to_pipe = 0x80297464; -peach_letter_text = 0x80297560; -play_sound_peach_reading_letter = 0x8029758c; -cutscene_intro_peach_start_to_pipe_spline = 0x802975c4; -cutscene_intro_peach_dialog = 0x8029762c; -cutscene_intro_peach_follow_pipe_spline = 0x802976bc; -cutscene_intro_peach_clear_cutscene_status = 0x80297728; -cutscene_intro_peach_zoom_fov = 0x80297748; -cutscene_intro_peach_reset_spline = 0x80297784; -cutscene_intro_peach_handheld_shake_off = 0x802977c8; -intro_pipe_exit_text = 0x802977f4; -play_sound_intro_turn_on_hud = 0x80297820; -cutscene_intro_peach_fly_to_pipe = 0x8029784c; -cutscene_intro_peach_mario_appears = 0x80297908; -cutscene_intro_peach_reset_fov = 0x80297a38; -cutscene_intro_peach_letter = 0x80297a64; -cutscene_end_waving_start = 0x80297b58; -cutscene_end_waving = 0x80297b84; -cutscene_credits_reset_spline = 0x80297c14; -cutscene_credits = 0x80297c40; -cutscene_sliding_doors_open_start = 0x802980dc; -cutscene_sliding_doors_open_set_cvars = 0x8029819c; -cutscene_sliding_doors_go_under_doorway = 0x80298218; -cutscene_sliding_doors_fly_back_up = 0x80298254; -cutscene_sliding_doors_follow_mario = 0x80298290; -cutscene_sliding_doors_open = 0x802983b4; -cutscene_double_doors_end = 0x80298458; -cutscene_enter_painting_stub = 0x802984a0; -cutscene_enter_painting = 0x802984b4; -cutscene_exit_painting_start = 0x802987b0; -cutscene_exit_painting_move_to_mario = 0x8029894c; -cutscene_exit_painting_move_to_floor = 0x802989e8; -cutscene_exit_painting = 0x80298af8; -cutscene_unused_exit_start = 0x80298ba0; -cutscene_unused_exit_focus_mario = 0x80298c2c; -cutscene_exit_painting_end = 0x80298ccc; -cutscene_enter_cannon_end = 0x80298d44; -cutscene_enter_cannon_raise = 0x80298d9c; -cutscene_enter_cannon_start = 0x80298fe8; -cutscene_door_start = 0x80299100; -cutscene_door_fix_cam = 0x80299154; -cutscene_door_loop = 0x802991a8; -cutscene_door_move_behind_mario = 0x802991f0; -cutscene_door_follow_mario = 0x802992cc; -cutscene_door_end = 0x80299360; -cutscene_door_mode = 0x80299404; -play_cutscene = 0x802994e8; -cutscene_event = 0x8029a2f8; -cutscene_spawn_obj = 0x8029a37c; -set_fov_shake = 0x8029a3b4; -set_fov_shake_from_point = 0x8029a41c; -shake_camera_fov = 0x8029a4d0; -set_fov_30 = 0x8029a5e8; -approach_fov_20 = 0x8029a60c; -set_fov_45 = 0x8029a64c; -set_fov_29 = 0x8029a670; -zoom_fov_30 = 0x8029a694; -fov_default = 0x8029a6f4; -approach_fov_30 = 0x8029a858; -approach_fov_60 = 0x8029a894; -approach_fov_45 = 0x8029a8d0; -approach_fov_80 = 0x8029a968; -set_fov_bbh = 0x8029a9a4; -geo_camera_fov = 0x8029aa3c; -set_fov_function = 0x8029ab94; -cutscene_set_fov_shake_preset = 0x8029abb0; -set_fov_shake_from_point_preset = 0x8029ac30; -obj_rotate_towards_point = 0x8029aef8; -intro_peach_set_pos_and_opacity = 0x8029af98; -bhv_intro_peach_loop = 0x8029b08c; -intro_lakitu_set_offset_from_camera = 0x8029b28c; -intro_lakitu_set_focus = 0x8029b358; -intro_lakitu_set_pos_and_focus = 0x8029b3c8; -bhv_intro_lakitu_loop = 0x8029b49c; -bhv_end_birds_1_loop = 0x8029bde4; -bhv_end_birds_2_loop = 0x8029bf64; -spawn_child_obj_relative = 0x8029c0e4; -bhv_intro_scene_loop = 0x8029c254; -nop_change_course = 0x8029c770; -copy_mario_state_to_object = 0x8029c780; -spawn_particle = 0x8029c9cc; -bhv_mario_update = 0x8029ca58; -update_objects_starting_at = 0x8029cb34; -update_objects_during_time_stop = 0x8029cbc8; -update_objects_in_list = 0x8029cd28; -unload_deactivated_objects_in_list = 0x8029cd98; -set_object_respawn_info_bits = 0x8029ce58; -unload_objects_from_area = 0x8029cedc; -spawn_objects_from_info = 0x8029cfb0; -stub_obj_list_processor_1 = 0x8029d1d8; -clear_objects = 0x8029d1e8; -update_terrain_objects = 0x8029d324; -update_non_terrain_objects = 0x8029d374; -unload_deactivated_objects = 0x8029d428; -update_objects = 0x8029d690; -geo_update_projectile_pos_from_parent = 0x8029d890; -geo_update_layer_transparency = 0x8029d924; -geo_switch_anim_state = 0x8029db48; -geo_switch_area = 0x8029dbd4; -obj_update_pos_from_parent_transformation = 0x8029dcd4; -obj_apply_scale_to_matrix = 0x8029dda8; -create_transformation_from_matrices = 0x8029de80; -obj_set_held_state = 0x8029e1b0; -lateral_dist_between_objects = 0x8029e27c; -dist_between_objects = 0x8029e2f8; -cur_obj_forward_vel_approach_upward = 0x8029e398; -approach_f32_signed = 0x8029e3e8; -approach_f32_symmetric = 0x8029e494; -approach_s16_symmetric = 0x8029e530; -cur_obj_rotate_yaw_toward = 0x8029e5ec; -obj_angle_to_object = 0x8029e694; -obj_turn_toward_object = 0x8029e714; -obj_set_parent_relative_pos = 0x8029e8bc; -obj_set_pos = 0x8029e914; -obj_set_angle = 0x8029e96c; -spawn_object_abs_with_rot = 0x8029e9ac; -spawn_object_rel_with_rot = 0x8029ea24; -spawn_obj_with_transform_flags = 0x8029eaac; -spawn_water_droplet = 0x8029eb04; -spawn_object_at_origin = 0x8029ed20; -spawn_object = 0x8029edcc; -try_to_spawn_object = 0x8029ee24; -spawn_object_with_scale = 0x8029eeb8; -spawn_object_relative = 0x8029ef64; -spawn_object_relative_with_scale = 0x8029effc; -cur_obj_move_using_vel = 0x8029f070; -obj_copy_graph_y_offset = 0x8029f0c8; -obj_copy_pos_and_angle = 0x8029f0e0; -obj_copy_pos = 0x8029f120; -obj_copy_angle = 0x8029f148; -obj_set_gfx_pos_from_pos = 0x8029f188; -obj_init_animation = 0x8029f1b0; -linear_mtxf_mul_vec3f = 0x8029f200; -linear_mtxf_transpose_mul_vec3f = 0x8029f274; -obj_apply_scale_to_transform = 0x8029f2ec; -obj_copy_scale = 0x8029f3a8; -obj_scale_xyz = 0x8029f3d0; -obj_scale = 0x8029f404; -cur_obj_scale = 0x8029f430; -cur_obj_init_animation = 0x8029f464; -cur_obj_init_animation_with_sound = 0x8029f4b4; -cur_obj_init_animation_with_accel_and_sound = 0x8029f514; -obj_init_animation_with_sound = 0x8029f59c; -cur_obj_enable_rendering_and_become_tangible = 0x8029f600; -cur_obj_enable_rendering = 0x8029f620; -cur_obj_disable_rendering_and_become_intangible = 0x8029f644; -cur_obj_disable_rendering = 0x8029f66c; -cur_obj_unhide = 0x8029f694; -cur_obj_hide = 0x8029f6bc; -cur_obj_set_pos_relative = 0x8029f6e0; -cur_obj_set_pos_relative_to_parent = 0x8029f7d8; -cur_obj_enable_rendering_2 = 0x8029f820; -cur_obj_unused_init_on_floor = 0x8029f848; -obj_set_face_angle_to_move_angle = 0x8029f8ec; -get_object_list_from_behavior = 0x8029f914; -cur_obj_nearest_object_with_behavior = 0x8029f95c; -cur_obj_dist_to_nearest_object_with_behavior = 0x8029f998; -cur_obj_find_nearest_object_with_behavior = 0x8029f9ec; -find_unimportant_object = 0x8029fb1c; -count_unimportant_objects = 0x8029fb68; -count_objects_with_behavior = 0x8029fbdc; -cur_obj_find_nearby_held_actor = 0x8029fc9c; -cur_obj_change_action = 0x8029fdb4; -cur_obj_set_vel_from_mario_vel = 0x8029fe00; -cur_obj_reverse_animation = 0x8029fe6c; -cur_obj_extend_animation_if_at_end = 0x8029fea4; -cur_obj_check_if_near_animation_end = 0x8029ff04; -cur_obj_check_if_at_animation_end = 0x8029ffa4; -cur_obj_check_anim_frame = 0x802a0008; -cur_obj_check_anim_frame_in_range = 0x802a0050; -cur_obj_check_frame_prior_current_frame = 0x802a00ac; -mario_is_in_air_action = 0x802a0114; -mario_is_dive_sliding = 0x802a0154; -cur_obj_set_y_vel_and_animation = 0x802a0198; -cur_obj_unrender_and_reset_state = 0x802a01d8; -cur_obj_get_thrown_or_placed = 0x802a0380; -cur_obj_get_dropped = 0x802a0474; -cur_obj_set_model = 0x802a04c0; -mario_set_flag = 0x802a04f0; -cur_obj_clear_interact_status_flag = 0x802a0514; -obj_mark_for_deletion = 0x802a0568; -cur_obj_disable = 0x802a057c; -cur_obj_become_intangible = 0x802a05b4; -cur_obj_become_tangible = 0x802a05d4; -obj_become_tangible = 0x802a05f0; -cur_obj_update_floor_height = 0x802a0604; -cur_obj_update_floor_height_and_get_floor = 0x802a064c; -cur_obj_apply_drag_xz = 0x802a079c; -cur_obj_move_y = 0x802a0e68; -cur_obj_unused_resolve_wall_collisions = 0x802a113c; -abs_angle_diff = 0x802a11a8; -cur_obj_move_xz_using_fvel_and_yaw = 0x802a120c; -cur_obj_move_y_with_terminal_vel = 0x802a12a4; -cur_obj_compute_vel_xz = 0x802a1308; -increment_velocity_toward_range = 0x802a1370; -obj_check_if_collided_with_object = 0x802a1424; -cur_obj_set_behavior = 0x802a148c; -obj_set_behavior = 0x802a14c4; -cur_obj_has_behavior = 0x802a14fc; -obj_has_behavior = 0x802a1554; -cur_obj_lateral_dist_from_mario_to_home = 0x802a15ac; -cur_obj_lateral_dist_to_home = 0x802a1634; -cur_obj_outside_home_square = 0x802a16ac; -cur_obj_outside_home_rectangle = 0x802a1774; -cur_obj_set_pos_to_home = 0x802a184c; -cur_obj_set_pos_to_home_and_stop = 0x802a188c; -cur_obj_shake_y = 0x802a18dc; -cur_obj_start_cam_event = 0x802a1930; -set_mario_interact_hoot_if_in_range = 0x802a1960; -obj_set_billboard = 0x802a19ac; -cur_obj_set_hitbox_radius_and_height = 0x802a19c8; -cur_obj_set_hurtbox_radius_and_height = 0x802a19f0; -obj_spawn_loot_blue_coins = 0x802a1b34; -obj_spawn_loot_yellow_coins = 0x802a1b8c; -cur_obj_spawn_loot_coin_at_mario_pos = 0x802a1bdc; -cur_obj_abs_y_dist_to_home = 0x802a1c68; -cur_obj_advance_looping_anim = 0x802a1cc4; -cur_obj_resolve_wall_collisions = 0x802a1f3c; -cur_obj_update_floor_and_walls = 0x802a2320; -cur_obj_move_standard = 0x802a2348; -cur_obj_move_using_vel_and_gravity = 0x802a25b4; -cur_obj_move_using_fvel_and_gravity = 0x802a2644; -obj_set_pos_relative = 0x802a2674; -cur_obj_angle_to_home = 0x802a2748; -obj_set_gfx_pos_at_obj_pos = 0x802a27b0; -obj_translate_local = 0x802a2804; -obj_build_transform_from_pos_and_angle = 0x802a2930; -obj_set_throw_matrix_from_transform = 0x802a2a18; -obj_build_transform_relative_to_parent = 0x802a2a84; -obj_create_transform_from_self = 0x802a2b28; -cur_obj_rotate_move_angle_using_vel = 0x802a2b6c; -cur_obj_rotate_face_angle_using_vel = 0x802a2bc4; -cur_obj_set_face_angle_to_move_angle = 0x802a2c1c; -cur_obj_follow_path = 0x802a2c5c; -chain_segment_init = 0x802a2ed4; -random_f32_around_zero = 0x802a2f14; -obj_scale_random = 0x802a2f5c; -obj_translate_xyz_random = 0x802a2fc0; -obj_translate_xz_random = 0x802a308c; -cur_obj_set_pos_via_transform = 0x802a31e0; -cur_obj_reflect_move_angle_off_wall = 0x802a3268; -cur_obj_spawn_particles = 0x802a32ac; -obj_set_hitbox = 0x802a34a4; -signum_positive = 0x802a3604; -absf = 0x802a3634; -absi = 0x802a3674; -cur_obj_wait_then_blink = 0x802a36a4; -cur_obj_is_mario_ground_pounding_platform = 0x802a3754; -spawn_mist_particles = 0x802a37ac; -spawn_mist_particles_with_sound = 0x802a37dc; -cur_obj_push_mario_away = 0x802a3818; -cur_obj_push_mario_away_from_cylinder = 0x802a390c; -bhv_dust_smoke_loop = 0x802a399c; -cur_obj_set_direction_table = 0x802a3a4c; -cur_obj_progress_direction_table = 0x802a3a88; -stub_obj_helpers_3 = 0x802a3b28; -cur_obj_scale_over_time = 0x802a3b40; -cur_obj_set_pos_to_home_with_debug = 0x802a3c18; -stub_obj_helpers_4 = 0x802a3cec; -cur_obj_is_mario_on_platform = 0x802a3cfc; -cur_obj_shake_y_until = 0x802a3d40; -cur_obj_move_up_and_down = 0x802a3dd4; -cur_obj_call_action_function = 0x802a3e30; -spawn_base_star_with_no_lvl_exit = 0x802a3ef8; -bit_shift_left = 0x802a3f24; -cur_obj_mario_far_away = 0x802a3f48; -is_mario_moving_fast_or_in_air = 0x802a404c; -is_item_in_array = 0x802a40b8; -bhv_init_room = 0x802a4120; -cur_obj_enable_rendering_if_mario_in_room = 0x802a4210; -cur_obj_set_hitbox_and_die_if_attacked = 0x802a4360; -obj_explode_and_spawn_coins = 0x802a4440; -obj_set_collision_data = 0x802a44f4; -cur_obj_if_hit_wall_bounce_away = 0x802a452c; -cur_obj_hide_if_mario_far_away_y = 0x802a4564; -geo_offset_klepto_held_object = 0x802a45e4; -geo_offset_klepto_debug = 0x802a462c; -obj_is_hidden = 0x802a46cc; -enable_time_stop = 0x802a4704; -disable_time_stop = 0x802a4728; -set_time_stop_flags = 0x802a4750; -clear_time_stop_flags = 0x802a4774; -cur_obj_can_mario_activate_textbox = 0x802a47a0; -cur_obj_can_mario_activate_textbox_2 = 0x802a48bc; -cur_obj_update_dialog = 0x802a4960; -cur_obj_update_dialog_with_cutscene = 0x802a4be4; -cur_obj_has_model = 0x802a4f04; -cur_obj_align_gfx_with_floor = 0x802a4f58; -mario_is_within_rectangle = 0x802a5034; -cur_obj_shake_screen = 0x802a50fc; -obj_attack_collided_from_other_object = 0x802a513c; -cur_obj_was_attacked_or_ground_pounded = 0x802a51ac; -obj_copy_behavior_params = 0x802a5228; -cur_obj_init_animation_and_anim_frame = 0x802a5248; -cur_obj_init_animation_and_check_if_near_end = 0x802a5288; -cur_obj_init_animation_and_extend_if_at_end = 0x802a52c4; -cur_obj_check_grabbed_mario = 0x802a52f8; -player_performed_grab_escape_action = 0x802a5358; -cur_obj_unused_play_footstep_sound = 0x802a540c; -enable_time_stop_including_mario = 0x802a5460; -disable_time_stop_including_mario = 0x802a5498; -cur_obj_check_interacted = 0x802a54d8; -cur_obj_spawn_loot_blue_coin = 0x802a5524; -cur_obj_spawn_star_at_y_offset = 0x802a5588; -star_door_update_pos = 0x802a5620; -bhv_star_door_loop = 0x802a56bc; -bhv_piranha_particle_loop = 0x802a58dc; -mr_i_piranha_particle_act_0 = 0x802a597c; -mr_i_piranha_particle_act_1 = 0x802a5a44; -bhv_mr_i_particle_loop = 0x802a5aa0; -spawn_mr_i_particle = 0x802a5acc; -bhv_mr_i_body_loop = 0x802a5bd4; -mr_i_act_3 = 0x802a5d4c; -mr_i_act_2 = 0x802a6518; -mr_i_act_1 = 0x802a68a0; -mr_i_act_0 = 0x802a6ad8; -bhv_mr_i_loop = 0x802a6b7c; -bhv_pole_init = 0x802a6c20; -bhv_giant_pole_loop = 0x802a6c74; -bhv_thi_huge_island_top_loop = 0x802a6cf4; -bhv_thi_tiny_island_top_loop = 0x802a6d64; -cap_switch_act_0 = 0x802a6ee4; -cap_switch_act_1 = 0x802a7020; -cap_switch_act_2 = 0x802a708c; -cap_switch_act_3 = 0x802a7160; -bhv_cap_switch_loop = 0x802a7170; -geo_update_held_mario_pos = 0x802a719c; -bhv_bobomb_anchor_mario_loop = 0x802a7230; -king_bobomb_act_0 = 0x802a7264; -mario_is_far_below_object = 0x802a7384; -king_bobomb_act_2 = 0x802a73d8; -king_bobomb_act_3 = 0x802a7598; -king_bobomb_act_1 = 0x802a7804; -king_bobomb_act_6 = 0x802a78d8; -king_bobomb_act_7 = 0x802a7a60; -king_bobomb_act_8 = 0x802a7b1c; -king_bobomb_act_4 = 0x802a7b5c; -king_bobomb_act_5 = 0x802a7d14; -king_bobomb_move = 0x802a7fbc; -bhv_king_bobomb_loop = 0x802a8064; -bhv_beta_chest_bottom_init = 0x802a816c; -bhv_beta_chest_bottom_loop = 0x802a81e8; -bhv_beta_chest_lid_loop = 0x802a821c; -bhv_water_air_bubble_init = 0x802a8370; -bhv_water_air_bubble_loop = 0x802a83a0; -bhv_bubble_wave_init = 0x802a8630; -scale_bubble_random = 0x802a86bc; -bhv_bubble_maybe_loop = 0x802a870c; -bhv_small_water_wave_loop = 0x802a88a4; -scale_bubble_sin = 0x802a8a38; -bhv_particle_init = 0x802a8b18; -bhv_particle_loop = 0x802a8bc0; -bhv_small_bubbles_loop = 0x802a8c88; -bhv_fish_group_loop = 0x802a8cdc; -bhv_water_waves_init = 0x802a8d48; -bhv_cannon_base_unused_loop = 0x802a8d98; -opened_cannon_act_0 = 0x802a8dc0; -opened_cannon_act_4 = 0x802a8f40; -opened_cannon_act_6 = 0x802a9114; -opened_cannon_act_5 = 0x802a92fc; -opened_cannon_act_1 = 0x802a93f8; -opened_cannon_act_2 = 0x802a9440; -opened_cannon_act_3 = 0x802a9460; -bhv_cannon_base_loop = 0x802a9498; -bhv_cannon_barrel_loop = 0x802a94f8; -common_anchor_mario_behavior = 0x802a958c; -bhv_chuckya_anchor_mario_loop = 0x802a9708; -unknown_chuckya_function = 0x802a973c; -approach_forward_vel = 0x802a98c4; -chuckya_act_0 = 0x802a9994; -chuckya_act_1 = 0x802a9d08; -chuckya_act_3 = 0x802a9f54; -chuckya_act_2 = 0x802a9fc8; -chuckya_move = 0x802aa02c; -bhv_chuckya_loop = 0x802aa0ac; -bhv_wf_breakable_wall_loop = 0x802aa1b8; -check_mario_attacking = 0x802aa280; -init_kickable_board_rock = 0x802aa3c8; -bhv_kickable_board_loop = 0x802aa3f4; -bhv_tower_door_loop = 0x802aa700; -bhv_wf_rotating_wooden_platform_loop = 0x802aa774; -bhv_rotating_platform_loop = 0x802aa830; -set_koopa_shell_underwater_hitbox = 0x802aa948; -bhv_koopa_shell_underwater_loop = 0x802aa97c; -bhv_warp_loop = 0x802aaa60; -bhv_fading_warp_loop = 0x802aab54; -bhv_white_puff_exploding_loop = 0x802aac48; -spawn_mist_particles_variable = 0x802aae8c; -bhv_spawned_star_init = 0x802aaf48; -set_sparkle_spawn_star_hitbox = 0x802aaffc; -set_home_to_mario = 0x802ab060; -set_y_home_to_pos = 0x802ab158; -slow_star_rotation = 0x802ab18c; -bhv_spawned_star_loop = 0x802ab1c8; -bhv_spawn_star_no_level_exit = 0x802ab558; -bhv_coin_sparkles_init = 0x802ab5c8; -bhv_yellow_coin_init = 0x802ab650; -bhv_yellow_coin_loop = 0x802ab70c; -bhv_temp_coin_loop = 0x802ab748; -bhv_coin_init = 0x802ab7a4; -bhv_coin_loop = 0x802ab860; -bhv_coin_formation_spawn_loop = 0x802aba40; -spawn_coin_in_formation = 0x802abc04; -bhv_coin_formation_init = 0x802abee4; -bhv_coin_formation_loop = 0x802abf0c; -coin_inside_boo_act_1 = 0x802ac068; -coin_inside_boo_act_0 = 0x802ac15c; -bhv_coin_inside_boo_loop = 0x802ac294; -bhv_coin_sparkles_loop = 0x802ac2c0; -bhv_golden_coin_sparkles_loop = 0x802ac2ec; -bhv_punch_tiny_triangle_loop = 0x802ac3a8; -bhv_punch_tiny_triangle_init = 0x802ac4a0; -bhv_wall_tiny_star_particle_loop = 0x802ac5b4; -bhv_tiny_star_particles_init = 0x802ac678; -bhv_pound_tiny_star_particle_loop = 0x802ac78c; -bhv_pound_tiny_star_particle_init = 0x802ac864; -door_animation_and_reset = 0x802ac910; -set_door_camera_event = 0x802ac958; -play_door_open_noise = 0x802ac9d0; -play_warp_door_open_noise = 0x802aca6c; -bhv_door_loop = 0x802acac8; -bhv_door_init = 0x802acc3c; -bhv_star_door_loop_2 = 0x802ace80; -grindel_thwomp_act_4 = 0x802ad078; -grindel_thwomp_act_2 = 0x802ad10c; -grindel_thwomp_act_3 = 0x802ad1a4; -grindel_thwomp_act_1 = 0x802ad238; -grindel_thwomp_act_0 = 0x802ad2d0; -bhv_grindel_thwomp_loop = 0x802ad34c; -bhv_tumbling_bridge_platform_loop = 0x802ad378; -tumbling_bridge_act_1 = 0x802ad580; -tumbling_bridge_act_2 = 0x802ad76c; -tumbling_bridge_act_3 = 0x802ad7f4; -tumbling_bridge_act_0 = 0x802ad828; -bhv_tumbling_bridge_loop = 0x802ad890; -elevator_starting_shake = 0x802ad8bc; -elevator_act_0 = 0x802ad8f0; -elevator_act_1 = 0x802ada4c; -elevator_act_2 = 0x802adb88; -elevator_act_4 = 0x802adce4; -elevator_act_3 = 0x802add70; -bhv_elevator_init = 0x802addf8; -bhv_elevator_loop = 0x802adf6c; -bhv_water_mist_spawn_loop = 0x802adf98; -bhv_water_mist_loop = 0x802adfd8; -spawn_triangle_break_particles = 0x802ae0cc; -bhv_water_mist_2_loop = 0x802ae238; -bhv_pound_white_puffs_init = 0x802ae304; -spawn_mist_from_global = 0x802ae334; -bhv_ground_sand_init = 0x802ae360; -spawn_smoke_with_velocity = 0x802ae394; -clear_particle_flags = 0x802ae45c; -bhv_ground_snow_init = 0x802ae48c; -spawn_wind_particles = 0x802ae4c0; -bhv_wind_loop = 0x802ae534; -bhv_unused_particle_spawn_loop = 0x802ae85c; -bhv_ukiki_cage_star_loop = 0x802ae908; -ukiki_cage_act_wait_for_ukiki = 0x802aea6c; -ukiki_cage_act_spin = 0x802aeab8; -ukiki_cage_act_fall = 0x802aeb1c; -ukiki_cage_act_hide = 0x802aeb74; -bhv_ukiki_cage_loop = 0x802aeb9c; -bhv_squishable_platform_loop = 0x802aebc8; -bhv_bitfs_sinking_platform_loop = 0x802aec40; -bhv_ddd_moving_pole_loop = 0x802aeca8; -bhv_bitfs_sinking_cage_platform_loop = 0x802aecdc; -bhv_beta_moving_flames_spawn_loop = 0x802aedc0; -bhv_beta_moving_flames_loop = 0x802aeea4; -bhv_flamethrower_flame_loop = 0x802aef1c; -bhv_flamethrower_loop = 0x802af1e8; -bhv_rr_rotating_bridge_platform_loop = 0x802af3fc; -bhv_bouncing_fireball_flame_loop = 0x802af448; -bhv_bouncing_fireball_loop = 0x802af5f8; -bhv_bowser_shock_wave_loop = 0x802af7c4; -bhv_black_smoke_upward_loop = 0x802af9cc; -bhv_black_smoke_bowser_loop = 0x802afa0c; -bhv_black_smoke_mario_loop = 0x802afae4; -bhv_flame_mario_loop = 0x802afbf8; -bhv_beta_fish_splash_spawner_loop = 0x802afce4; -bhv_spindrift_loop = 0x802afd1c; -bhv_wf_solid_tower_platform_loop = 0x802afee8; -bhv_wf_elevator_tower_platform_loop = 0x802aff30; -bhv_wf_sliding_tower_platform_loop = 0x802b00e4; -spawn_and_init_wf_platforms = 0x802b0244; -spawn_wf_platform_group = 0x802b039c; -bhv_tower_platform_group_loop = 0x802b04b4; -bhv_tree_snow_or_leaf_loop = 0x802b0614; -bhv_snow_leaf_particle_spawn_init = 0x802b0974; -square_plat_set_yaw_until_timer = 0x802b0b9c; -bhv_squarish_path_moving_loop = 0x802b0bec; -bhv_piranha_plant_waking_bubbles_loop = 0x802b0d48; -bhv_piranha_plant_bubble_loop = 0x802b0df0; -bhv_purple_switch_loop = 0x802b1278; -check_if_moving_over_floor = 0x802b14f4; -bhv_pushable_loop = 0x802b15e8; -breakable_box_init = 0x802b1714; -hidden_breakable_box_actions = 0x802b17f4; -hidden_unbreakable_box_actions = 0x802b19d8; -bhv_hidden_object_loop = 0x802b1ae0; -bhv_breakable_box_loop = 0x802b1b2c; -geo_move_mario_part_from_parent = 0x802b1bb0; -bhv_heave_ho_throw_mario_loop = 0x802b1c54; -heave_ho_act_1 = 0x802b1d7c; -heave_ho_act_2 = 0x802b1e6c; -heave_ho_act_3 = 0x802b1ff4; -heave_ho_act_0 = 0x802b20a0; -heave_ho_move = 0x802b2154; -bhv_heave_ho_loop = 0x802b2278; -bhv_ccm_touched_star_spawn_loop = 0x802b2340; -bhv_unused_poundable_platform = 0x802b23e0; -bhv_beta_trampoline_spring_loop = 0x802b2494; -bhv_beta_trampoline_top_loop = 0x802b25ac; -jumping_box_act_0 = 0x802b26a4; -jumping_box_act_1 = 0x802b27d8; -jumping_box_free_update = 0x802b2824; -bhv_jumping_box_loop = 0x802b288c; -bhv_boo_cage_loop = 0x802b29b8; -spawn_sparkle_particles = 0x802b2bc8; -bhv_alpha_boo_key_loop = 0x802b2d10; -bhv_beta_boo_key_loop = 0x802b3108; -arc_to_goal_pos = 0x802b3134; -grand_star_zero_velocity = 0x802b3250; -bhv_grand_star_loop = 0x802b329c; -bhv_bowser_key_loop = 0x802b3600; -bhv_white_puff_smoke_init = 0x802b37b8; -bhv_bullet_bill_init = 0x802b3810; -bullet_bill_act_0 = 0x802b3830; -bullet_bill_act_1 = 0x802b38b8; -bullet_bill_act_2 = 0x802b394c; -bullet_bill_act_3 = 0x802b3b08; -bullet_bill_act_4 = 0x802b3b24; -bhv_bullet_bill_loop = 0x802b3be0; -bowser_tail_anchor_act_0 = 0x802b3c2c; -bowser_tail_anchor_act_1 = 0x802b3cdc; -bowser_tail_anchor_act_2 = 0x802b3d10; -bhv_bowser_tail_anchor_loop = 0x802b3d74; -bhv_bowser_flame_spawn_loop = 0x802b3df4; -bhv_bowser_body_anchor_loop = 0x802b4080; -bowser_spawn_shockwave = 0x802b4184; -bowser_bounce = 0x802b41fc; -bowser_set_anim_look_up_and_walk = 0x802b4288; -bowser_set_anim_slow_gait = 0x802b4300; -bowser_set_anim_look_down = 0x802b4368; -bowser_initialize_action = 0x802b43dc; -bowser_act_text_wait = 0x802b4478; -bowser_act_intro_walk = 0x802b44bc; -bowser_bitdw_act_controller = 0x802b45f4; -bowser_bitfs_act_controller = 0x802b473c; -bowser_general_bits_act_controller = 0x802b48d4; -bowser_set_act_jump = 0x802b4a1c; -bowser_bits_act_controller = 0x802b4a3c; -bowser_reset_fallen_off_stage = 0x802b4af4; -bowser_act_unused_slow_walk = 0x802b4bac; -bowser_act_default = 0x802b4be8; -bowser_act_breath_fire = 0x802b4ca4; -bowser_act_walk_to_mario = 0x802b4d14; -bowser_act_teleport = 0x802b4f00; -bowser_act_spit_fire_into_sky = 0x802b5104; -bowser_act_hit_mine = 0x802b5218; -bowser_set_anim_in_air = 0x802b53f4; -bowser_land = 0x802b5444; -bowser_short_second_hop = 0x802b5554; -bowser_act_jump = 0x802b55cc; -bowser_act_jump_towards_mario = 0x802b5798; -bowser_act_hit_edge = 0x802b58bc; -bowser_act_spit_fire_onto_floor = 0x802b59cc; -bowser_turn_on_timer = 0x802b5aec; -bowser_act_turn_from_edge = 0x802b5c00; -bowser_act_charge_mario = 0x802b5c40; -bowser_check_hit_mine = 0x802b5f6c; -bowser_act_thrown_dropped = 0x802b5fec; -bowser_set_goal_invisible = 0x802b611c; -bowser_act_jump_onto_stage = 0x802b6190; -bowser_act_dance = 0x802b6568; -bowser_spawn_grand_star_key = 0x802b65d0; -bowser_fly_back_dead = 0x802b6670; -bowser_dead_bounce = 0x802b6730; -bowser_dead_wait_for_mario = 0x802b67d4; -bowser_dead_twirl_into_trophy = 0x802b6878; -bowser_dead_hide = 0x802b6a10; -bowser_dead_not_bits_end = 0x802b6a78; -bowser_dead_bits_end = 0x802b6bac; -bowser_act_dead = 0x802b6cf0; -bowser_tilt_platform = 0x802b6e40; -bowser_act_ride_tilting_platform = 0x802b6ee0; -bowser_check_fallen_off_stage = 0x802b711c; -bowser_free_update = 0x802b71e4; -bowser_held_update = 0x802b72d4; -bowser_thrown_dropped_update = 0x802b7418; -bhv_bowser_loop = 0x802b75a4; -bhv_bowser_init = 0x802b7878; -geo_update_body_rot_from_parent = 0x802b798c; -bowser_open_eye_switch = 0x802b7a20; -geo_switch_bowser_eyes = 0x802b7c64; -geo_bits_bowser_coloring = 0x802b7d44; -falling_bowser_plat_act_0 = 0x802b7e68; -falling_bowser_plat_act_1 = 0x802b7ef0; -falling_bowser_plat_act_2 = 0x802b8024; -bhv_falling_bowser_platform_loop = 0x802b8384; -bowser_flame_despawn = 0x802b83b0; -bowser_flame_should_despawn = 0x802b8434; -bhv_flame_bowser_init = 0x802b84ac; -bhv_flame_large_burning_out_init = 0x802b85b0; -bowser_flame_move = 0x802b8654; -bhv_flame_bowser_loop = 0x802b8734; -bhv_flame_moving_forward_growing_init = 0x802b8960; -bhv_flame_moving_forward_growing_loop = 0x802b89ec; -bhv_flame_floating_landing_init = 0x802b8b1c; -bhv_flame_floating_landing_loop = 0x802b8c38; -bhv_blue_bowser_flame_init = 0x802b8d68; -bhv_blue_bowser_flame_loop = 0x802b8e7c; -bhv_flame_bouncing_init = 0x802b9034; -bhv_flame_bouncing_loop = 0x802b90ec; -bhv_blue_flames_group_loop = 0x802b921c; -bhv_blue_fish_movement_loop = 0x802b935c; -bhv_tank_fish_group_loop = 0x802b9790; -vec3f_copy_2 = 0x802b98d4; -bhv_checkerboard_elevator_group_init = 0x802b98fc; -checkerboard_plat_act_move_y = 0x802b9a78; -checkerboard_plat_act_rotate = 0x802b9af8; -bhv_checkerboard_platform_init = 0x802b9bb4; -bhv_checkerboard_platform_loop = 0x802b9bd8; -bhv_ddd_warp_loop = 0x802b9e94; -water_level_pillar_undrained = 0x802b9efc; -water_level_pillar_drained = 0x802ba13c; -bhv_water_level_pillar_init = 0x802ba19c; -bhv_water_level_pillar_loop = 0x802ba1e0; -bhv_invisible_objects_under_bridge_init = 0x802ba25c; -geo_scale_bowser_key = 0x802ba2b0; -bhv_bowser_key_unlock_door_loop = 0x802ba2f8; -bhv_bowser_key_course_exit_loop = 0x802ba458; -bhv_moat_grills_loop = 0x802ba5bc; -bhv_rotating_clock_arm_loop = 0x802ba608; -handle_hat_ukiki_reset = 0x802ba7e0; -is_hat_ukiki_and_mario_has_hat = 0x802ba868; -geo_update_projectile_pos_from_parent_copy = 0x802ba8c4; -idle_ukiki_taunt = 0x802ba958; -ukiki_act_idle = 0x802bab7c; -ukiki_act_return_home = 0x802bae40; -ukiki_act_wait_to_respawn = 0x802baec4; -ukiki_act_unused_turn = 0x802baf10; -ukiki_act_turn_to_mario = 0x802baf64; -ukiki_act_run = 0x802bb07c; -ukiki_act_jump = 0x802bb288; -ukiki_act_go_to_cage = 0x802bb3b8; -ukiki_free_loop = 0x802bb798; -cage_ukiki_held_loop = 0x802bb888; -hat_ukiki_held_loop = 0x802bba3c; -bhv_ukiki_init = 0x802bbb98; -bhv_ukiki_loop = 0x802bbc0c; -lll_octagonal_mesh_move = 0x802bbd6c; -lll_octagonal_mesh_find_y_offset = 0x802bbfd8; -bhv_lll_moving_octagonal_mesh_platform_loop = 0x802bc0f0; -bhv_lll_sinking_rock_block_loop = 0x802bc22c; -bhv_lll_rotating_hex_flame_loop = 0x802bc294; -fire_bar_spawn_flames = 0x802bc348; -fire_bar_act_0 = 0x802bc4f4; -fire_bar_act_1 = 0x802bc538; -fire_bar_act_2 = 0x802bc590; -fire_bar_act_3 = 0x802bc5fc; -bhv_lll_rotating_block_fire_bars_loop = 0x802bc618; -bhv_lll_wood_piece_loop = 0x802bc660; -bhv_lll_floating_wood_bridge_loop = 0x802bc728; -bhv_volcano_flames_loop = 0x802bc898; -hexagonal_ring_spawn_flames = 0x802bc934; -bhv_lll_rotating_hexagonal_ring_loop = 0x802bca74; -sinking_rectangular_plat_actions = 0x802bcce8; -bhv_lll_sinking_rectangular_platform_loop = 0x802bcda8; -bhv_lll_sinking_square_platforms_loop = 0x802bce58; -create_transform_from_normals = 0x802bce9c; -bhv_platform_normals_init = 0x802bcf40; -approach_by_increment = 0x802bcfc4; -bhv_tilting_inverted_pyramid_loop = 0x802bd058; -koopa_shell_spawn_water_drop = 0x802bd3e4; -bhv_koopa_shell_flame_loop = 0x802bd488; -bhv_koopa_shell_flame_spawn = 0x802bd5dc; -koopa_shell_spawn_sparkles = 0x802bd62c; -bhv_koopa_shell_loop = 0x802bd680; -tox_box_shake_screen = 0x802bd8d0; -tox_box_move = 0x802bd91c; -tox_box_act_4 = 0x802bdb04; -tox_box_act_5 = 0x802bdb3c; -tox_box_act_6 = 0x802bdb74; -tox_box_act_7 = 0x802bdbac; -tox_box_act_1 = 0x802bdbe4; -tox_box_act_2 = 0x802bdc7c; -tox_box_act_3 = 0x802bdcc8; -tox_box_act_0 = 0x802bdd14; -bhv_tox_box_loop = 0x802bdd68; -piranha_plant_act_idle = 0x802bdd9c; -piranha_plant_check_interactions = 0x802bde10; -piranha_plant_act_sleeping = 0x802bdeec; -piranha_plant_act_woken_up = 0x802be034; -piranha_plant_reset_when_far = 0x802be0b8; -piranha_plant_attacked = 0x802be0ec; -piranha_plant_act_shrink_and_die = 0x802be150; -piranha_plant_act_wait_to_respawn = 0x802be234; -piranha_plant_act_respawn = 0x802be278; -piranha_plant_act_biting = 0x802be350; -mario_moving_fast_enough_to_make_piranha_plant_bite = 0x802be49c; -piranha_plant_act_stopped_biting = 0x802be50c; -bhv_piranha_plant_loop = 0x802be5a0; -bhv_lll_bowser_puzzle_spawn_piece = 0x802be628; -bhv_lll_bowser_puzzle_spawn_pieces = 0x802be6d4; -bhv_lll_bowser_puzzle_loop = 0x802be79c; -bhv_lll_bowser_puzzle_piece_action_0 = 0x802be8a8; -bhv_lll_bowser_puzzle_piece_action_1 = 0x802be8b8; -bhv_lll_bowser_puzzle_piece_update = 0x802be8f4; -bhv_lll_bowser_puzzle_piece_move = 0x802be9dc; -bhv_lll_bowser_puzzle_piece_idle = 0x802beb14; -bhv_lll_bowser_puzzle_piece_move_left = 0x802beb54; -bhv_lll_bowser_puzzle_piece_move_right = 0x802beb8c; -bhv_lll_bowser_puzzle_piece_move_up = 0x802bebc4; -bhv_lll_bowser_puzzle_piece_move_down = 0x802bebfc; -bhv_lll_bowser_puzzle_piece_loop = 0x802bec34; -set_obj_anim_with_accel_and_sound = 0x802becb0; -play_penguin_walking_sound = 0x802bed7c; -tuxies_mother_act_2 = 0x802bedec; -tuxies_mother_act_1 = 0x802bef8c; -tuxies_mother_act_0 = 0x802bf1d8; -bhv_tuxies_mother_loop = 0x802bf3c0; -small_penguin_dive_with_mario = 0x802bf424; -small_penguin_act_2 = 0x802bf474; -small_penguin_act_1 = 0x802bf57c; -small_penguin_act_3 = 0x802bf648; -small_penguin_act_4 = 0x802bf6e4; -small_penguin_act_0 = 0x802bf760; -small_penguin_act_5 = 0x802bf90c; -small_penguin_free_actions = 0x802bfa14; -bhv_small_penguin_loop = 0x802bfa88; -geo_switch_tuxie_mother_eyes = 0x802bfbac; -fish_act_spawn = 0x802bfcd8; -fish_act_respawn = 0x802bfeb8; -fish_act_init = 0x802bff20; -bhv_large_fish_group_loop = 0x802bff3c; -fish_regroup = 0x802bff68; -fish_group_act_rotation = 0x802c00b4; -fish_group_act_move = 0x802c0348; -fish_group_act_animate = 0x802c06a8; -bhv_fish_loop = 0x802c0768; -bhv_wdw_express_elevator_loop = 0x802c08a8; -bub_spawner_act_0 = 0x802c0aac; -bub_spawner_act_1 = 0x802c0b50; -bub_spawner_act_2 = 0x802c0ba4; -bub_spawner_act_3 = 0x802c0bc4; -bhv_bub_spawner_loop = 0x802c0be0; -bub_move_vertically = 0x802c0c0c; -bub_act_0 = 0x802c0cd4; -bub_act_1 = 0x802c0d44; -bub_act_2 = 0x802c0f90; -bhv_bub_loop = 0x802c1204; -bhv_rotating_exclamation_box_loop = 0x802c12c0; -exclamation_box_act_0 = 0x802c1308; -exclamation_box_act_1 = 0x802c13ec; -exclamation_box_act_2 = 0x802c14b0; -exclamation_box_act_3 = 0x802c15b8; -exclamation_box_spawn_contents = 0x802c17bc; -exclamation_box_act_4 = 0x802c18d0; -exclamation_box_act_5 = 0x802c1988; -bhv_exclamation_box_loop = 0x802c19c0; -bhv_sound_spawner_init = 0x802c19fc; -bhv_bowsers_sub_loop = 0x802c1a40; -bhv_sushi_shark_collision_loop = 0x802c1a80; -bhv_sushi_shark_loop = 0x802c1a90; -bhv_sunken_ship_part_loop = 0x802c1c44; -bhv_ship_part_3_loop = 0x802c1cd4; -bhv_jrb_sliding_box_loop = 0x802c1e10; -bhv_white_puff_1_loop = 0x802c2190; -bhv_white_puff_2_loop = 0x802c2274; -bhv_hidden_blue_coin_loop = 0x802c22b8; -bhv_blue_coin_switch_loop = 0x802c242c; -bhv_openable_cage_door_loop = 0x802c263c; -bhv_openable_grill_loop = 0x802c26f8; -bhv_init_changing_water_level_loop = 0x802c2930; -bhv_water_level_diamond_loop = 0x802c2a24; -tweester_scale_and_move = 0x802c2ce8; -tweester_act_idle = 0x802c2ebc; -tweester_act_chase = 0x802c2fbc; -tweester_act_hide = 0x802c31c4; -bhv_tweester_loop = 0x802c329c; -bhv_tweester_sand_particle_loop = 0x802c32e8; -bhv_boo_init = 0x802c3440; -bhv_courtyard_boo_triplet_init = 0x802c3684; -bhv_boo_loop = 0x802c4824; -bhv_big_boo_loop = 0x802c4f30; -bhv_boo_with_cage_init = 0x802c515c; -bhv_boo_with_cage_loop = 0x802c51d4; -bhv_merry_go_round_boo_manager_loop = 0x802c5224; -obj_set_secondary_camera_focus = 0x802c53cc; -bhv_animated_texture_loop = 0x802c53ec; -bhv_boo_in_castle_loop = 0x802c5414; -bhv_boo_boss_spawned_bridge_loop = 0x802c5688; -bhv_bbh_tilting_trap_platform_loop = 0x802c5890; -bhv_haunted_bookshelf_loop = 0x802c5a38; -bhv_merry_go_round_loop = 0x802c5ca8; -bhv_static_checkered_platform_loop = 0x802c5dc0; -bhv_beta_bowser_anchor_loop = 0x802c5f48; -bhv_play_music_track_when_touched_loop = 0x802c5fdc; -bhv_floor_trap_in_castle_loop = 0x802c6050; -bhv_castle_floor_trap_init = 0x802c60ac; -bhv_castle_floor_trap_open_detect = 0x802c6150; -bhv_castle_floor_trap_open = 0x802c61d4; -bhv_castle_floor_trap_close_detect = 0x802c6278; -bhv_castle_floor_trap_close = 0x802c62bc; -bhv_castle_floor_trap_rotate = 0x802c6328; -bhv_castle_floor_trap_loop = 0x802c6348; -bhv_pole_base_loop = 0x802c63e8; -bhv_sparkle_spawn_loop = 0x802c64a4; -update_angle_from_move_flags = 0x802c6538; -bhv_scuttlebug_loop = 0x802c65c0; -bhv_scuttlebug_spawn_loop = 0x802c6b6c; -whomp_play_sfx_from_pound_animation = 0x802c6ca0; -whomp_act_0 = 0x802c6d6c; -whomp_act_7 = 0x802c6ec8; -whomp_act_1 = 0x802c6fb0; -whomp_act_2 = 0x802c710c; -whomp_act_3 = 0x802c7254; -whomp_act_4 = 0x802c72b4; -whomp_act_5 = 0x802c7380; -king_whomp_on_ground = 0x802c7428; -whomp_on_ground = 0x802c75fc; -whomp_act_6 = 0x802c76d4; -whomp_act_8 = 0x802c7858; -whomp_act_9 = 0x802c7998; -bhv_whomp_loop = 0x802c79d8; -bhv_water_splash_spawn_droplets = 0x802c7a70; -bhv_water_droplet_loop = 0x802c7b14; -bhv_idle_water_wave_loop = 0x802c7cac; -bhv_water_droplet_splash_init = 0x802c7d40; -bhv_bubble_splash_init = 0x802c7d90; -bhv_shallow_water_splash_init = 0x802c7dfc; -bhv_wave_trail_shrink = 0x802c7e5c; -bhv_strong_wind_particle_loop = 0x802c7f98; -cur_obj_spawn_strong_wind_particles = 0x802c81b4; -bhv_sl_snowman_wind_loop = 0x802c834c; -bhv_sl_walking_penguin_loop = 0x802c863c; -update_mario_platform = 0x802c89f0; -get_mario_pos = 0x802c8b4c; -set_mario_pos = 0x802c8b8c; -apply_platform_displacement = 0x802c8bc8; -apply_mario_platform_displacement = 0x802c8ec0; -clear_mario_platform = 0x802c8f28; -debug_print_obj_collision = 0x802c8f40; -detect_object_hitbox_overlap = 0x802c8fe4; -detect_object_hurtbox_overlap = 0x802c91ec; -clear_object_collision = 0x802c9388; -check_collision_in_list = 0x802c93f8; -check_player_object_collision = 0x802c94ac; -check_pushable_object_collision = 0x802c95b4; -check_destructive_object_collision = 0x802c9630; -detect_object_collisions = 0x802c9724; -unused_init_free_list = 0x802c97d0; -unused_try_allocate = 0x802c9840; -try_allocate_object = 0x802c98a4; -unused_deallocate = 0x802c9950; -init_free_object_list = 0x802c99b8; -clear_object_lists = 0x802c9a3c; -unload_object = 0x802c9b68; -allocate_object = 0x802c9c00; -create_object = 0x802c9f04; -mark_obj_for_deletion = 0x802ca028; -exec_anim_sound_state = 0x802ca040; -create_sound_spawner = 0x802ca144; -cur_obj_play_sound_1 = 0x802ca190; -cur_obj_play_sound_2 = 0x802ca1e0; -calc_dist_to_volume_range_1 = 0x802ca230; -calc_dist_to_volume_range_2 = 0x802ca2d4; -stub_debug_1 = 0x802ca370; -stub_debug_2 = 0x802ca380; -stub_debug_3 = 0x802ca390; -stub_debug_4 = 0x802ca3a0; -get_current_clock = 0x802ca3b0; -get_clock_difference = 0x802ca3e0; -set_print_state_info = 0x802ca418; -print_text_array_info = 0x802ca460; -set_text_array_x_y = 0x802ca51c; -print_debug_bottom_up = 0x802ca568; -print_debug_top_down_objectinfo = 0x802ca5b8; -print_debug_top_down_mapinfo = 0x802ca618; -print_debug_top_down_normal = 0x802ca680; -print_mapinfo = 0x802ca6d0; -print_checkinfo = 0x802ca8e8; -print_surfaceinfo = 0x802ca918; -print_stageinfo = 0x802ca94c; -print_string_array_info = 0x802ca990; -print_effectinfo = 0x802caa6c; -print_enemyinfo = 0x802caaa8; -update_debug_dpadmask = 0x802caae4; -debug_unknown_level_select_check = 0x802cabac; -reset_debug_objectinfo = 0x802cac20; -stub_debug_5 = 0x802cb0b0; -try_print_debug_mario_object_info = 0x802cb0c0; -try_print_debug_mario_level_info = 0x802cb1c0; -try_do_mario_debug_object_spawn = 0x802cb264; -debug_enemy_unknown = 0x802cb564; -set_and_reset_transition_fade_timer = 0x802cb5c0; -set_transition_color_fade_alpha = 0x802cb640; -vertex_transition_color = 0x802cb894; -dl_transition_color = 0x802cba18; -render_fade_transition_from_color = 0x802cbbc4; -render_fade_transition_into_color = 0x802cbc20; -calc_tex_transition_radius = 0x802cbc7c; -calc_tex_transition_time = 0x802cbd54; -convert_tex_transition_angle_to_pos = 0x802cbe64; -center_tex_transition_x = 0x802cbee0; -center_tex_transition_y = 0x802cbf64; -make_tex_transition_vertex = 0x802cbfe8; -load_tex_transition_vertex = 0x802cc180; -render_textured_transition = 0x802cc4d8; -render_screen_transition = 0x802ccbe8; -render_cannon_circle_base = 0x802ccdc8; -geo_cannon_circle_base = 0x802cd1e8; -rotate_rectangle = 0x802cd280; -atan2_deg = 0x802cd328; -scale_shadow_with_distance = 0x802cd388; -disable_shadow_with_distance = 0x802cd444; -dim_shadow_with_distance = 0x802cd48c; -get_water_level_below_shadow = 0x802cd614; -init_shadow = 0x802cd6c4; -get_texture_coords_9_vertices = 0x802cd938; -get_texture_coords_4_vertices = 0x802cd988; -make_shadow_vertex_at_xyz = 0x802cd9ec; -extrapolate_vertex_y_position = 0x802cdb20; -get_vertex_coords = 0x802cdb74; -calculate_vertex_xyz = 0x802cdc40; -floor_local_tilt = 0x802cde94; -make_shadow_vertex = 0x802cdf3c; -add_shadow_to_display_list = 0x802ce128; -linearly_interpolate_solidity_positive = 0x802ce2bc; -linearly_interpolate_solidity_negative = 0x802ce3ec; -correct_shadow_solidity_for_animations = 0x802ce524; -correct_lava_shadow_height = 0x802ce690; -create_shadow_player = 0x802ce79c; -create_shadow_circle_9_verts = 0x802ce9d0; -create_shadow_circle_4_verts = 0x802ceae8; -create_shadow_circle_assuming_flat_ground = 0x802cec04; -create_shadow_rectangle = 0x802cedc0; -get_shadow_height_solidity = 0x802cef6c; -create_shadow_square = 0x802cf080; -create_shadow_hardcoded_rectangle = 0x802cf1f0; -create_shadow_below_xyz = 0x802cf34c; -calculate_skybox_scaled_x = 0x802cf5b0; -calculate_skybox_scaled_y = 0x802cf69c; -make_skybox_rect = 0x802cf804; -draw_skybox_tile_grid = 0x802cfa2c; -create_skybox_ortho_matrix = 0x802cfc68; -init_skybox_display_list = 0x802cfd88; -create_skybox_facing_camera = 0x802cfef4; -geo_wdw_set_initial_water_level = 0x802d0080; -geo_movtex_pause_control = 0x802d01e0; -movtex_make_quad_vertex = 0x802d0254; -movtex_gen_from_quad = 0x802d0484; -movtex_gen_from_quad_array = 0x802d0a84; -movtex_gen_quads_id = 0x802d0bb0; -get_quad_collection_from_id = 0x802d0c84; -movtex_change_texture_format = 0x802d0f28; -geo_movtex_draw_water_regions = 0x802d104c; -update_moving_texture_offset = 0x802d1330; -movtex_write_vertex_first = 0x802d13cc; -movtex_write_vertex_index = 0x802d1574; -movtex_gen_list = 0x802d18b4; -geo_movtex_draw_nocolor = 0x802d1b70; -geo_movtex_draw_colored = 0x802d1cdc; -geo_movtex_draw_colored_no_update = 0x802d1e48; -geo_movtex_draw_colored_2_no_update = 0x802d1fa8; -geo_movtex_update_horizontal = 0x802d2108; -make_vertex = 0x802d2210; -round_float = 0x802d22c4; -geo_exec_inside_castle_light = 0x802d2360; -geo_exec_flying_carpet_timer_update = 0x802d2470; -geo_exec_flying_carpet_create = 0x802d2520; -geo_exec_cake_end_screen = 0x802d28cc; -stop_other_paintings = 0x802d29c0; -painting_mario_y = 0x802d2a74; -painting_mario_z = 0x802d2b08; -painting_ripple_y = 0x802d2b84; -painting_nearest_4th = 0x802d2c40; -painting_mario_x = 0x802d2d80; -painting_ripple_x = 0x802d2dfc; -painting_state = 0x802d2eb8; -wall_painting_proximity_idle = 0x802d2ffc; -wall_painting_proximity_rippling = 0x802d319c; -wall_painting_continuous_idle = 0x802d327c; -wall_painting_continuous_rippling = 0x802d341c; -floor_painting_proximity_idle = 0x802d34fc; -floor_painting_proximity_rippling = 0x802d36ac; -floor_painting_continuous_idle = 0x802d379c; -floor_painting_continuous_rippling = 0x802d393c; -painting_update_floors = 0x802d3a2c; -painting_update_ripple_state = 0x802d3bec; -calculate_ripple_at_point = 0x802d3cec; -ripple_if_movable = 0x802d3e6c; -painting_generate_mesh = 0x802d3ee4; -painting_calculate_triangle_normals = 0x802d404c; -normalize_component = 0x802d43f8; -painting_average_vertex_normals = 0x802d44bc; -render_painting = 0x802d47d0; -painting_model_view_transform = 0x802d4edc; -painting_ripple_image = 0x802d50dc; -painting_ripple_env_mapped = 0x802d5354; -display_painting_rippling = 0x802d556c; -display_painting_not_rippling = 0x802d568c; -reset_painting = 0x802d5778; -move_ddd_painting = 0x802d57a8; -set_painting_layer = 0x802d58e4; -display_painting = 0x802d593c; -wall_painting_update = 0x802d59a8; -floor_painting_update = 0x802d5aa0; -geo_painting_draw = 0x802d5b98; -geo_painting_update = 0x802d5d0c; -int_pow = 0x802d5e00; -format_integer = 0x802d5e54; -parse_width_field = 0x802d6144; -print_text_fmt_int = 0x802d62d8; -print_text = 0x802d6554; -print_text_centered = 0x802d66c0; -char_to_glyph_index = 0x802d6858; -add_glyph_texture = 0x802d69f8; -clip_to_bounds = 0x802d6acc; -render_textrect = 0x802d6b3c; -render_text_labels = 0x802d6c88; -create_dl_identity_matrix = 0x802d6f20; -create_dl_translation_matrix = 0x802d7070; -create_dl_rotation_matrix = 0x802d7174; -create_dl_scale_matrix = 0x802d7280; -create_dl_ortho_matrix = 0x802d7384; -render_generic_char = 0x802d75dc; -render_multi_text_string = 0x802d76c8; -print_generic_string = 0x802d77dc; -print_hud_lut_string = 0x802d7b84; -print_menu_generic_string = 0x802d7e88; -print_credits_string = 0x802d82d4; -handle_menu_scrolling = 0x802d862c; -get_str_x_pos_from_center = 0x802d8844; -get_string_width = 0x802d8934; -print_hud_my_score_coins = 0x802d89b8; -print_hud_my_score_stars = 0x802d8a80; -int_to_str = 0x802d8b34; -get_dialog_id = 0x802d8c6c; -create_dialog_box = 0x802d8c88; -create_dialog_box_with_var = 0x802d8cc4; -create_dialog_inverted_box = 0x802d8d08; -create_dialog_box_with_response = 0x802d8d48; -reset_dialog_render_state = 0x802d8d90; -render_dialog_box_type = 0x802d8e2c; -change_and_flash_dialog_text_color_lines = 0x802d9148; -handle_dialog_scroll_page_state = 0x802d9388; -render_star_count_dialog_text = 0x802d944c; -render_multi_text_string_lines = 0x802d9634; -ensure_nonnegative = 0x802d9800; -handle_dialog_text_and_pages = 0x802d982c; -render_dialog_triangle_choice = 0x802d9cb0; -render_dialog_string_color = 0x802d9dfc; -handle_special_dialog_text = 0x802d9f84; -render_dialog_entries = 0x802da1ac; -set_menu_mode = 0x802da810; -reset_cutscene_msg_fade = 0x802da844; -dl_rgba16_begin_cutscene_msg_fade = 0x802da85c; -dl_rgba16_stop_cutscene_msg_fade = 0x802da8e4; -ascii_to_credits_char = 0x802da964; -print_credits_str_ascii = 0x802daa34; -set_cutscene_message = 0x802daae4; -do_cutscene_handler = 0x802dab58; -print_peach_letter_message = 0x802dad54; -render_hud_cannon_reticle = 0x802db08c; -reset_red_coins_collected = 0x802db350; -change_dialog_camera_angle = 0x802db368; -shade_screen = 0x802db3b8; -print_animated_red_coin = 0x802db498; -render_pause_red_coins = 0x802db6e8; -render_pause_my_score_coins = 0x802db760; -render_pause_camera_options = 0x802dbb24; -render_pause_course_options = 0x802dbe68; -render_pause_castle_menu_box = 0x802dc15c; -highlight_last_course_complete_stars = 0x802dc418; -print_hud_pause_colorful_str = 0x802dc478; -render_pause_castle_course_stars = 0x802dc570; -render_pause_castle_main_strings = 0x802dc718; -render_pause_courses_and_castle = 0x802dca88; -print_hud_course_complete_string = 0x802dcd04; -print_hud_course_complete_coins = 0x802dcf30; -play_star_fanfare_and_flash_hud = 0x802dd194; -render_course_complete_lvl_info_and_hud_str = 0x802dd210; -render_save_confirmation = 0x802dd838; -render_course_complete_screen = 0x802ddae0; -render_menus_and_dialogs = 0x802ddca4; -envfx_init_snow = 0x802dddf0; -envfx_update_snowflake_count = 0x802ddf38; -envfx_cleanup_snow = 0x802de0bc; -orbit_from_positions = 0x802de114; -pos_from_orbit = 0x802de23c; -envfx_is_snowflake_alive = 0x802de360; -envfx_update_snow_normal = 0x802de458; -envfx_update_snow_blizzard = 0x802de888; -envfx_update_snow_water = 0x802ded38; -rotate_triangle_vertices = 0x802def2c; -append_snowflake_vertex_buffer = 0x802df334; -envfx_update_snow = 0x802df748; -envfx_update_particles = 0x802dfbc8; -particle_is_laterally_close = 0x802dfd50; -random_flower_offset = 0x802dfe00; -envfx_update_flower = 0x802dfe80; -envfx_set_lava_bubble_position = 0x802e0120; -envfx_update_lava = 0x802e048c; -envfx_rotate_around_whirlpool = 0x802e065c; -envfx_is_whirlpool_bubble_alive = 0x802e08a8; -envfx_update_whirlpool = 0x802e0934; -envfx_is_jestream_bubble_alive = 0x802e0e24; -envfx_update_jetstream = 0x802e0eb8; -envfx_init_bubble = 0x802e1238; -envfx_bubbles_update_switch = 0x802e1414; -append_bubble_vertex_buffer = 0x802e1618; -envfx_set_bubble_texture = 0x802e1a20; -envfx_update_bubble_particles = 0x802e1bb8; -envfx_set_max_bubble_particles = 0x802e1ed8; -envfx_update_bubbles = 0x802e1f48; -convert_rotation = 0x802e20a0; -spawn_macro_abs_yrot_2params = 0x802e2134; -spawn_macro_abs_yrot_param1 = 0x802e21dc; -spawn_macro_abs_special = 0x802e2284; -spawn_macro_objects = 0x802e2414; -spawn_macro_objects_hardcoded = 0x802e2690; -spawn_special_objects = 0x802e28ec; -render_hud_tex_lut = 0x802e2cf0; -render_hud_small_tex_lut = 0x802e2e58; -render_power_meter_health_segment = 0x802e30b4; -render_dl_power_meter = 0x802e3214; -animate_power_meter_emphasized = 0x802e33b8; -handle_power_meter_actions = 0x802e352c; -render_hud_power_meter = 0x802e3654; -render_hud_mario_lives = 0x802e3744; -render_hud_coins = 0x802e37a8; -render_hud_stars = 0x802e380c; -render_hud_keys = 0x802e38e4; -render_hud_timer = 0x802e395c; -set_hud_camera_status = 0x802e3b1c; -render_hud_camera_status = 0x802e3b3c; -render_hud = 0x802e3d2c; -set_yoshi_as_not_dead = 0x802e3e50; -geo_obj_transparency_something = 0x802e3e68; -absf_2 = 0x802e3f68; -turn_obj_away_from_surface = 0x802e3fac; -obj_find_wall = 0x802e405c; -turn_obj_away_from_steep_floor = 0x802e41a4; -obj_orient_graph = 0x802e42e0; -calc_obj_friction = 0x802e43e4; -calc_new_obj_vel_and_pos_y = 0x802e445c; -calc_new_obj_vel_and_pos_y_underwater = 0x802e4814; -obj_update_pos_vel_xz = 0x802e4cec; -obj_splash = 0x802e4d88; -object_step = 0x802e4e90; -object_step_without_floor_orient = 0x802e5114; -obj_move_xyz_using_fvel_and_yaw = 0x802e5160; -is_point_within_radius_of_mario = 0x802e5208; -is_point_close_to_object = 0x802e52b8; -set_object_visibility = 0x802e5360; -obj_return_home_if_safe = 0x802e53f4; -obj_return_and_displace_home = 0x802e54b0; -obj_check_if_facing_toward_angle = 0x802e55d0; -obj_find_wall_displacement = 0x802e569c; -obj_spawn_yellow_coins = 0x802e5760; -obj_flicker_and_disappear = 0x802e5824; -current_mario_room_check = 0x802e58b4; -trigger_obj_dialog_when_facing = 0x802e5948; -obj_check_floor_death = 0x802e5a80; -obj_lava_death = 0x802e5b18; -spawn_orange_number = 0x802e5c6c; -debug_sequence_tracker = 0x802e5d04; -coin_step = 0x802e5de8; -moving_coin_flicker = 0x802e5e6c; -coin_collected = 0x802e5ea4; -bhv_moving_yellow_coin_init = 0x802e5ee8; -bhv_moving_yellow_coin_loop = 0x802e5f64; -bhv_moving_blue_coin_init = 0x802e6098; -bhv_moving_blue_coin_loop = 0x802e6114; -bhv_blue_coin_sliding_jumping_init = 0x802e62a4; -blue_coin_sliding_away_from_mario = 0x802e631c; -blue_coin_sliding_slow_down = 0x802e63ec; -bhv_blue_coin_sliding_loop = 0x802e6474; -bhv_blue_coin_jumping_loop = 0x802e6628; -bhv_seaweed_init = 0x802e6790; -bhv_seaweed_bundle_init = 0x802e67dc; -bhv_bobomb_init = 0x802e6a2c; -bobomb_spawn_coin = 0x802e6a8c; -bobomb_act_explode = 0x802e6af8; -bobomb_check_interactions = 0x802e6bd4; -bobomb_act_patrol = 0x802e6cf0; -bobomb_act_chase_mario = 0x802e6dc8; -bobomb_act_launched = 0x802e6e84; -generic_bobomb_free_loop = 0x802e6ed8; -stationary_bobomb_free_loop = 0x802e7020; -bobomb_free_loop = 0x802e7134; -bobomb_held_loop = 0x802e7180; -bobomb_dropped_loop = 0x802e7220; -bobomb_thrown_loop = 0x802e7280; -curr_obj_random_blink = 0x802e7324; -bhv_bobomb_loop = 0x802e742c; -bhv_bobomb_fuse_smoke_init = 0x802e75a0; -bhv_bobomb_buddy_init = 0x802e76ac; -bobomb_buddy_act_idle = 0x802e770c; -bobomb_buddy_cannon_dialog = 0x802e7814; -bobomb_buddy_act_talk = 0x802e79dc; -bobomb_buddy_act_turn_to_talk = 0x802e7b00; -bobomb_buddy_actions = 0x802e7bb0; -bhv_bobomb_buddy_loop = 0x802e7c4c; -bhv_cannon_closed_init = 0x802e7c90; -cannon_door_act_opening = 0x802e7d4c; -bhv_cannon_closed_loop = 0x802e7e54; -bhv_whirlpool_init = 0x802e7f70; -whirlpool_set_hitbox = 0x802e7fb8; -whirpool_orient_graph = 0x802e7fec; -bhv_whirlpool_loop = 0x802e80dc; -bhv_jet_stream_loop = 0x802e82b0; -bhv_homing_amp_init = 0x802e8388; -bhv_homing_amp_loop = 0x802e89d4; -bhv_circling_amp_init = 0x802e8ae4; -bhv_circling_amp_loop = 0x802e8ecc; -bhv_butterfly_init = 0x802e8f68; -butterfly_step = 0x802e9018; -butterfly_calculate_angle = 0x802e9278; -butterfly_act_rest = 0x802e9470; -butterfly_act_follow_mario = 0x802e94e4; -butterfly_act_return_home = 0x802e9548; -bhv_butterfly_loop = 0x802e96c8; -bhv_hoot_init = 0x802e9764; -hoot_find_next_floor = 0x802e97fc; -hoot_floor_bounce = 0x802e98c0; -hoot_free_step = 0x802e9a4c; -hoot_player_set_yaw = 0x802e9cf4; -hoot_carry_step = 0x802e9d98; -hoot_surface_collision = 0x802e9f60; -hoot_act_ascent = 0x802ea144; -hoot_action_loop = 0x802ea258; -hoot_turn_to_home = 0x802ea3f0; -hoot_awake_loop = 0x802ea4ec; -bhv_hoot_loop = 0x802ea588; -bhv_beta_holdable_object_init = 0x802ea6a8; -bhv_beta_holdable_object_loop = 0x802ea7e0; -bhv_object_bubble_init = 0x802ea888; -bhv_object_bubble_loop = 0x802ea934; -bhv_object_water_wave_init = 0x802eaa10; -bhv_object_water_wave_loop = 0x802eaa50; -bhv_explosion_init = 0x802eaa8c; -bhv_explosion_loop = 0x802eaad0; -bhv_bobomb_bully_death_smoke_init = 0x802eabf0; -bhv_bobomb_explosion_bubble_init = 0x802eac3c; -bhv_bobomb_explosion_bubble_loop = 0x802ead3c; -bhv_respawner_loop = 0x802eaef8; -create_respawner = 0x802eaf84; -bhv_small_bully_init = 0x802eb05c; -bhv_big_bully_init = 0x802eb104; -bully_check_mario_collision = 0x802eb1c0; -bully_act_chase_mario = 0x802eb288; -bully_act_knockback = 0x802eb3f0; -bully_act_back_up = 0x802eb510; -bully_backup_check = 0x802eb5c4; -bully_play_stomping_sound = 0x802eb630; -bully_step = 0x802eb744; -bully_spawn_coin = 0x802eb7e0; -bully_act_level_death = 0x802eb8b0; -bhv_bully_loop = 0x802eb9d0; -big_bully_spawn_minion = 0x802ebb74; -bhv_big_bully_with_minions_init = 0x802ebc00; -big_bully_spawn_star = 0x802ebc88; -bhv_big_bully_with_minions_loop = 0x802ebce0; -water_ring_calc_mario_dist = 0x802ebf70; -water_ring_init = 0x802ec030; -bhv_jet_stream_water_ring_init = 0x802ec1b0; -water_ring_check_collection = 0x802ec200; -water_ring_set_scale = 0x802ec3d0; -water_ring_act_collected = 0x802ec4e0; -water_ring_act_not_collected = 0x802ec59c; -bhv_jet_stream_water_ring_loop = 0x802ec75c; -spawn_manta_ray_ring_manager = 0x802ec7cc; -water_ring_spawner_act_inactive = 0x802ec818; -bhv_jet_stream_ring_spawner_loop = 0x802ec908; -bhv_manta_ray_water_ring_init = 0x802ec9b8; -manta_water_ring_act_not_collected = 0x802ec9f0; -bhv_manta_ray_water_ring_loop = 0x802ecba4; -bhv_bowser_bomb_loop = 0x802ecc14; -bhv_bowser_bomb_explosion_loop = 0x802ecd0c; -bhv_bowser_bomb_smoke_loop = 0x802ecea0; -bhv_celebration_star_init = 0x802ecfac; -celeb_star_act_spin_around_mario = 0x802ed10c; -celeb_star_act_face_camera = 0x802ed28c; -bhv_celebration_star_loop = 0x802ed39c; -bhv_celebration_star_sparkle_loop = 0x802ed40c; -bhv_star_key_collection_puff_spawner_loop = 0x802ed45c; -bhv_lll_drawbridge_spawner_loop = 0x802ed498; -bhv_lll_drawbridge_loop = 0x802ed62c; -bhv_small_bomp_init = 0x802ed78c; -bhv_small_bomp_loop = 0x802ed7fc; -bhv_large_bomp_init = 0x802edacc; -bhv_large_bomp_loop = 0x802edb2c; -bhv_wf_sliding_platform_init = 0x802eddfc; -bhv_wf_sliding_platform_loop = 0x802edf28; -bhv_moneybag_init = 0x802ee124; -moneybag_check_mario_collision = 0x802ee1a0; -moneybag_jump = 0x802ee268; -moneybag_act_move_around = 0x802ee46c; -moneybag_act_return_home = 0x802ee598; -moneybag_act_disappear = 0x802ee728; -moneybag_act_death = 0x802ee778; -bhv_moneybag_loop = 0x802ee7e0; -bhv_moneybag_hidden_loop = 0x802ee8f4; -bhv_bowling_ball_init = 0x802ee9cc; -bowling_ball_set_hitbox = 0x802eea24; -bowling_ball_set_waypoints = 0x802eea7c; -bhv_bowling_ball_roll_loop = 0x802eeb64; -bhv_bowling_ball_initializeLoop = 0x802eecb8; -bhv_bowling_ball_loop = 0x802eedf0; -bhv_generic_bowling_ball_spawner_init = 0x802eeeb4; -bhv_generic_bowling_ball_spawner_loop = 0x802eef9c; -bhv_thi_bowling_ball_spawner_loop = 0x802ef0e8; -bhv_bob_pit_bowling_ball_init = 0x802ef21c; -bhv_bob_pit_bowling_ball_loop = 0x802ef274; -bhv_free_bowling_ball_init = 0x802ef34c; -bhv_free_bowling_ball_roll_loop = 0x802ef3f4; -bhv_free_bowling_ball_loop = 0x802ef524; -bhv_rr_cruiser_wing_init = 0x802ef63c; -bhv_rr_cruiser_wing_loop = 0x802ef66c; -bhv_spindel_init = 0x802ef820; -bhv_spindel_loop = 0x802ef858; -bhv_ssl_moving_pyramid_wall_init = 0x802efcd0; -bhv_ssl_moving_pyramid_wall_loop = 0x802efd8c; -bhv_pyramid_elevator_init = 0x802efe64; -bhv_pyramid_elevator_loop = 0x802efef4; -bhv_pyramid_elevator_trajectory_marker_ball_loop = 0x802f0104; -bhv_pyramid_top_init = 0x802f0168; -bhv_pyramid_top_spinning = 0x802f0288; -bhv_pyramid_top_explode = 0x802f04a0; -bhv_pyramid_top_loop = 0x802f05b4; -bhv_pyramid_top_fragment_init = 0x802f06a8; -bhv_pyramid_top_fragment_loop = 0x802f0714; -bhv_pyramid_pillar_touch_detector_loop = 0x802f0788; -bhv_waterfall_sound_loop = 0x802f07f4; -bhv_volcano_sound_loop = 0x802f0820; -bhv_castle_flag_init = 0x802f084c; -bhv_birds_sound_loop = 0x802f0898; -bhv_ambient_sounds_init = 0x802f0950; -bhv_sand_sound_loop = 0x802f09a4; -bhv_castle_cannon_grate_init = 0x802f09f0; -bhv_snowmans_bottom_init = 0x802f0a40; -set_rolling_sphere_hitbox = 0x802f0b7c; -adjust_rolling_face_pitch = 0x802f0bd4; -snowmans_bottom_act_1 = 0x802f0c94; -snowmans_bottom_act_2 = 0x802f0df0; -snowmans_bottom_act_3 = 0x802f0fa8; -bhv_snowmans_bottom_loop = 0x802f105c; -bhv_snowmans_head_init = 0x802f120c; -bhv_snowmans_head_loop = 0x802f1370; -bhv_snowmans_body_checkpoint_loop = 0x802f151c; -bhv_big_boulder_init = 0x802f15a8; -boulder_act_1 = 0x802f162c; -bhv_big_boulder_loop = 0x802f1714; -bhv_big_boulder_generator_loop = 0x802f17f0; -cap_set_hitbox = 0x802f1954; -cap_despawn = 0x802f19c8; -cap_check_quicksand = 0x802f1a10; -cap_sink_quicksand = 0x802f1bb8; -bhv_wing_cap_init = 0x802f1d64; -cap_scale_vertically = 0x802f1dc0; -wing_vanish_cap_act_0 = 0x802f1e5c; -bhv_wing_vanish_cap_loop = 0x802f1f3c; -bhv_metal_cap_init = 0x802f1fd0; -metal_cap_act_0 = 0x802f2030; -bhv_metal_cap_loop = 0x802f20ac; -bhv_normal_cap_init = 0x802f2140; -normal_cap_set_save_flags = 0x802f21e0; -normal_cap_act_0 = 0x802f2284; -bhv_normal_cap_loop = 0x802f23a8; -bhv_vanish_cap_init = 0x802f2498; -bhv_collect_star_init = 0x802f24f4; -bhv_collect_star_loop = 0x802f25b0; -bhv_star_spawn_init = 0x802f2614; -bhv_star_spawn_loop = 0x802f2768; -spawn_star = 0x802f2aa0; -spawn_default_star = 0x802f2b88; -spawn_red_coin_cutscene_star = 0x802f2bd4; -spawn_no_exit_star = 0x802f2c24; -bhv_hidden_red_coin_star_init = 0x802f2c84; -bhv_hidden_red_coin_star_loop = 0x802f2d8c; -bhv_red_coin_init = 0x802f2e6c; -bhv_red_coin_loop = 0x802f2f2c; -bhv_hidden_star_init = 0x802f3014; -bhv_hidden_star_loop = 0x802f30f0; -bhv_hidden_star_trigger_loop = 0x802f31bc; -bhv_bowser_course_red_coin_star_loop = 0x802f328c; -bhv_ttm_rolling_log_init = 0x802f336c; -rolling_log_roll_log = 0x802f341c; -bhv_rolling_log_loop = 0x802f36a4; -volcano_act_1 = 0x802f38b0; -volcano_act_3 = 0x802f39b4; -bhv_volcano_trap_loop = 0x802f3a30; -bhv_lll_rolling_log_init = 0x802f3b98; -bhv_1up_interact = 0x802f3c54; -bhv_1up_common_init = 0x802f3cc8; -bhv_1up_init = 0x802f3d30; -one_up_loop_in_air = 0x802f3dd0; -pole_1up_move_towards_mario = 0x802f3ea8; -one_up_move_away_from_mario = 0x802f401c; -bhv_1up_walking_loop = 0x802f40cc; -bhv_1up_running_away_loop = 0x802f4248; -sliding_1up_move = 0x802f43b8; -bhv_1up_sliding_loop = 0x802f44c0; -bhv_1up_loop = 0x802f45b8; -bhv_1up_jump_on_approach_loop = 0x802f45f0; -bhv_1up_hidden_loop = 0x802f4710; -bhv_1up_hidden_trigger_loop = 0x802f48f4; -bhv_1up_hidden_in_pole_loop = 0x802f496c; -bhv_1up_hidden_in_pole_trigger_loop = 0x802f4b00; -bhv_1up_hidden_in_pole_spawner_loop = 0x802f4b78; -controllable_platform_act_1 = 0x802f4c68; -controllable_platform_act_2 = 0x802f4ce0; -bhv_controllable_platform_sub_loop = 0x802f4d78; -bhv_controllable_platform_init = 0x802f4eb4; -controllable_platform_hit_wall = 0x802f5010; -controllable_platform_check_walls = 0x802f5068; -controllable_platform_shake_on_wall_hit = 0x802f52c0; -controllable_platform_tilt_from_mario = 0x802f547c; -bhv_controllable_platform_loop = 0x802f55a4; -bhv_breakable_box_small_init = 0x802f5cd4; -small_breakable_box_spawn_dust = 0x802f5d78; -small_breakable_box_act_move = 0x802f5e44; -breakable_box_small_released_loop = 0x802f5f48; -breakable_box_small_idle_loop = 0x802f6014; -breakable_box_small_get_dropped = 0x802f60d8; -breakable_box_small_get_thrown = 0x802f6150; -bhv_breakable_box_small_loop = 0x802f6228; -bhv_sliding_snow_mound_loop = 0x802f62e4; -bhv_snow_mound_spawn_loop = 0x802f6448; -floating_platform_find_home_y = 0x802f6588; -floating_platform_act_0 = 0x802f665c; -bhv_floating_platform_loop = 0x802f6984; -bhv_arrow_lift_loop = 0x802f6c0c; -bhv_orange_number_init = 0x802f6d20; -bhv_orange_number_loop = 0x802f6d58; -bhv_manta_ray_init = 0x802f6e40; -manta_ray_move = 0x802f6eb0; -manta_ray_act_spawn_ring = 0x802f7068; -bhv_manta_ray_loop = 0x802f7264; -bhv_falling_pillar_init = 0x802f7348; -bhv_falling_pillar_spawn_hitboxes = 0x802f7398; -bhv_falling_pillar_calculate_angle_in_front_of_mario = 0x802f7418; -bhv_falling_pillar_loop = 0x802f74dc; -bhv_falling_pillar_hitbox_loop = 0x802f7760; -bhv_jrb_floating_box_loop = 0x802f7924; -bhv_decorative_pendulum_init = 0x802f7978; -bhv_decorative_pendulum_loop = 0x802f79b0; -bhv_treasure_chest_top_loop = 0x802f7a58; -bhv_treasure_chest_bottom_init = 0x802f7c9c; -bhv_treasure_chest_bottom_loop = 0x802f7d04; -spawn_treasure_chest = 0x802f7f1c; -bhv_treasure_chest_ship_init = 0x802f7fa0; -bhv_treasure_chest_ship_loop = 0x802f8044; -bhv_treasure_chest_jrb_init = 0x802f8158; -bhv_treasure_chest_jrb_loop = 0x802f8208; -bhv_treasure_chest_init = 0x802f82f8; -bhv_treasure_chest_loop = 0x802f83a4; -bhv_mips_init = 0x802f8490; -bhv_mips_find_furthest_waypoint_to_mario = 0x802f85e0; -bhv_mips_act_wait_for_nearby_mario = 0x802f8760; -bhv_mips_act_follow_path = 0x802f8808; -bhv_mips_act_wait_for_animation_done = 0x802f893c; -bhv_mips_act_fall_down = 0x802f8988; -bhv_mips_act_idle = 0x802f8a34; -bhv_mips_free = 0x802f8ab4; -bhv_mips_held = 0x802f8b54; -bhv_mips_dropped = 0x802f8c74; -bhv_mips_thrown = 0x802f8cf8; -bhv_mips_loop = 0x802f8dac; -bhv_yoshi_init = 0x802f8e54; -yoshi_walk_loop = 0x802f8f08; -yoshi_idle_loop = 0x802f9054; -yoshi_talk_loop = 0x802f923c; -yoshi_walk_and_jump_off_roof_loop = 0x802f93a8; -yoshi_finish_jumping_and_despawn_loop = 0x802f9500; -yoshi_give_present_loop = 0x802f95ac; -bhv_yoshi_loop = 0x802f965c; -obj_is_rendering_enabled = 0x802f9730; -obj_get_pitch_from_vel = 0x802f9770; -obj_update_race_proposition_dialog = 0x802f97bc; -obj_set_dist_from_home = 0x802f9820; -obj_is_near_to_and_facing_mario = 0x802f9890; -obj_perform_position_op = 0x802f9904; -platform_on_track_update_pos_or_spawn_ball = 0x802f9a28; -cur_obj_spin_all_dimensions = 0x802f9e28; -obj_rotate_yaw_and_bounce_off_walls = 0x802fa158; -obj_get_pitch_to_home = 0x802fa1b0; -obj_compute_vel_from_move_pitch = 0x802fa1f8; -clamp_s16 = 0x802fa25c; -clamp_f32 = 0x802fa2bc; -cur_obj_init_anim_extend = 0x802fa32c; -cur_obj_init_anim_and_check_if_end = 0x802fa360; -cur_obj_init_anim_check_frame = 0x802fa39c; -cur_obj_set_anim_if_at_end = 0x802fa3dc; -cur_obj_play_sound_at_anim_range = 0x802fa428; -obj_turn_pitch_toward_mario = 0x802fa4c4; -approach_f32_ptr = 0x802fa544; -obj_forward_vel_approach = 0x802fa5d0; -obj_y_vel_approach = 0x802fa618; -obj_move_pitch_approach = 0x802fa660; -obj_face_pitch_approach = 0x802fa6d4; -obj_face_yaw_approach = 0x802fa748; -obj_face_roll_approach = 0x802fa7bc; -obj_smooth_turn = 0x802fa830; -obj_roll_to_match_yaw_turn = 0x802fa900; -random_linear_offset = 0x802fa964; -random_mod_offset = 0x802fa9d8; -obj_random_fixed_turn = 0x802faa64; -obj_grow_then_shrink = 0x802faac8; -oscillate_toward = 0x802fac18; -obj_update_blinking = 0x802fad34; -obj_resolve_object_collisions = 0x802fadd4; -obj_bounce_off_walls_edges_objects = 0x802fb01c; -obj_resolve_collisions_and_turn = 0x802fb0cc; -obj_die_if_health_non_positive = 0x802fb128; -obj_unused_die = 0x802fb254; -obj_set_knockback_action = 0x802fb288; -obj_set_squished_action = 0x802fb3a0; -obj_die_if_above_lava_and_health_non_positive = 0x802fb3dc; -obj_handle_attacks = 0x802fb518; -obj_act_knockback = 0x802fb6e8; -obj_act_squished = 0x802fb778; -obj_update_standard_actions = 0x802fb87c; -obj_check_attacks = 0x802fb938; -obj_move_for_one_second = 0x802fba40; -treat_far_home_as_mario = 0x802fbab4; -bhv_koopa_init = 0x802fbc4c; -shelled_koopa_attack_handler = 0x802fc414; -obj_begin_race = 0x802fcc00; -bhv_koopa_update = 0x802fd7f8; -bhv_koopa_race_endpoint_update = 0x802fd950; -bhv_pokey_body_part_update = 0x802fda28; -bhv_pokey_update = 0x802fe3b0; -bhv_swoop_update = 0x802fe8b4; -bhv_fly_guy_update = 0x802ff040; -bhv_goomba_triplet_spawner_update = 0x802ff214; -bhv_goomba_init = 0x802ff408; -huge_goomba_weakly_attacked = 0x802ff94c; -bhv_goomba_update = 0x802ff96c; -bhv_chain_chomp_chain_part_update = 0x802ffb38; -bhv_chain_chomp_update = 0x80300e40; -bhv_wooden_post_update = 0x80300ecc; -bhv_chain_chomp_gate_init = 0x80301148; -bhv_chain_chomp_gate_update = 0x80301180; -bhv_wiggler_body_part_update = 0x80301210; -wiggler_init_segments = 0x803014cc; -wiggler_update_segments = 0x803016e0; -wiggler_jumped_on_attack_handler = 0x803020e4; -bhv_wiggler_update = 0x80302154; -bhv_spiny_update = 0x80302910; -bhv_enemy_lakitu_update = 0x80303028; -bhv_cloud_update = 0x8030369c; -bhv_cloud_part_update = 0x80303744; -bhv_camera_lakitu_init = 0x80303984; -bhv_camera_lakitu_update = 0x80303f64; -bhv_monty_mole_hole_update = 0x803043f8; -monty_mole_spawn_dirt_particles = 0x80304474; -bhv_monty_mole_init = 0x803044c0; -bhv_monty_mole_update = 0x80304ba8; -bhv_monty_mole_rock_update = 0x80304fd4; -bhv_platform_on_track_init = 0x80305100; -bhv_platform_on_track_update = 0x80305a58; -bhv_track_ball_update = 0x80305bb0; -bhv_seesaw_platform_init = 0x80305c14; -bhv_seesaw_platform_update = 0x80305c90; -bhv_ferris_wheel_axle_init = 0x80305e2c; -bhv_ferris_wheel_platform_update = 0x80305f24; -bhv_water_bomb_spawner_update = 0x80306084; -water_bomb_spawn_explode_particles = 0x803062a8; -bhv_water_bomb_update = 0x803067e8; -bhv_water_bomb_shadow_update = 0x803068c0; -bhv_ttc_rotating_solid_init = 0x8030699c; -bhv_ttc_rotating_solid_update = 0x80306a38; -bhv_ttc_pendulum_init = 0x80306cc4; -bhv_ttc_pendulum_update = 0x80306d38; -bhv_ttc_treadmill_init = 0x80306f48; -bhv_ttc_treadmill_update = 0x80307010; -bhv_ttc_moving_bar_init = 0x803071b8; -bhv_ttc_moving_bar_update = 0x80307670; -bhv_ttc_cog_init = 0x80307760; -bhv_ttc_cog_update = 0x803077e0; -bhv_ttc_pit_block_init = 0x80307930; -bhv_ttc_pit_block_update = 0x803079c8; -bhv_ttc_elevator_init = 0x80307ae4; -bhv_ttc_elevator_update = 0x80307b58; -bhv_ttc_2d_rotator_init = 0x80307c88; -bhv_ttc_2d_rotator_update = 0x80307cf8; -bhv_ttc_spinner_update = 0x80307ea4; -mr_blizzard_spawn_white_particles = 0x80307fb8; -bhv_mr_blizzard_init = 0x8030803c; -bhv_mr_blizzard_update = 0x80308d6c; -bhv_mr_blizzard_snowball = 0x80309154; -bhv_sliding_plat_2_init = 0x803091e0; -bhv_sliding_plat_2_loop = 0x80309354; -bhv_rotating_octagonal_plat_init = 0x80309454; -bhv_rotating_octagonal_plat_loop = 0x803094d0; -bhv_animates_on_floor_switch_press_init = 0x803094f8; -bhv_animates_on_floor_switch_press_loop = 0x80309530; -bhv_activated_back_and_forth_platform_init = 0x803097a4; -bhv_activated_back_and_forth_platform_update = 0x803098c0; -bhv_recovery_heart_loop = 0x80309b64; -bhv_bubble_cannon_barrel_loop = 0x80309cec; -water_bomb_cannon_act_0 = 0x80309ed4; -water_bomb_cannon_act_1 = 0x80309f68; -water_bomb_cannon_act_2 = 0x8030a0e8; -bhv_water_bomb_cannon_loop = 0x8030a11c; -bhv_unagi_init = 0x8030a1c0; -unagi_act_0 = 0x8030a2a8; -unagi_act_1_4 = 0x8030a390; -unagi_act_2 = 0x8030a514; -unagi_act_3 = 0x8030a614; -bhv_unagi_loop = 0x8030a93c; -bhv_unagi_subobject_loop = 0x8030aabc; -dorrie_raise_head = 0x8030ad04; -dorrie_act_move = 0x8030ae9c; -dorrie_begin_head_raise = 0x8030b0b8; -dorrie_act_lower_head = 0x8030b0f0; -dorrie_act_raise_head = 0x8030b220; -bhv_dorrie_update = 0x8030b2f4; -bhv_haunted_chair_init = 0x8030b658; -haunted_chair_act_0 = 0x8030b6d8; -haunted_chair_act_1 = 0x8030ba68; -bhv_haunted_chair_loop = 0x8030bc90; -bhv_mad_piano_update = 0x8030bfd0; -flying_bookend_act_0 = 0x8030c06c; -flying_bookend_act_1 = 0x8030c0f0; -flying_bookend_act_2 = 0x8030c210; -flying_bookend_act_3 = 0x8030c2c8; -bhv_flying_bookend_loop = 0x8030c364; -bhv_bookend_spawn_loop = 0x8030c4b0; -bookshelf_manager_act_0 = 0x8030c564; -bookshelf_manager_act_1 = 0x8030c60c; -bookshelf_manager_act_2 = 0x8030c6a4; -bookshelf_manager_act_3 = 0x8030c828; -bookshelf_manager_act_4 = 0x8030c894; -bhv_haunted_bookshelf_manager_loop = 0x8030c8ec; -bhv_book_switch_loop = 0x8030c98c; -obj_spit_fire = 0x8030cd30; -bhv_fire_piranha_plant_init = 0x8030cddc; -bhv_fire_piranha_plant_update = 0x8030d2f0; -bhv_fire_spitter_update = 0x8030d598; -bhv_small_piranha_flame_loop = 0x8030d640; -bhv_fly_guy_flame_loop = 0x8030d8d4; -geo_snufit_move_mask = 0x8030d93c; -geo_snufit_scale_body = 0x8030d9ac; -snufit_act_idle = 0x8030da14; -snufit_act_shoot = 0x8030db38; -bhv_snufit_loop = 0x8030dc70; -bhv_snufit_balls_loop = 0x8030dfc4; -bhv_horizontal_grindel_init = 0x8030e14c; -bhv_horizontal_grindel_update = 0x8030e16c; -bhv_eyerok_boss_loop = 0x8030ea9c; -bhv_eyerok_hand_loop = 0x8030fff8; -bhv_klepto_init = 0x80310498; -obj_set_speed_to_zero = 0x8031126c; -bhv_klepto_update = 0x8031129c; -bhv_bird_update = 0x80311874; -bhv_racing_penguin_init = 0x803118e4; -bhv_racing_penguin_update = 0x80312070; -bhv_penguin_race_finish_line_update = 0x80312168; -bhv_penguin_race_shortcut_check_update = 0x80312200; -bhv_coffin_spawner_loop = 0x80312248; -coffin_act_idle = 0x80312370; -coffin_act_stand_up = 0x8031262c; -bhv_coffin_loop = 0x8031274c; -clam_act_0 = 0x80312804; -clam_act_1 = 0x80312900; -bhv_clam_loop = 0x80312a54; -bhv_skeeter_update = 0x80313110; -bhv_skeeter_wave_update = 0x803131e8; -bhv_swing_platform_init = 0x8031326c; -bhv_swing_platform_update = 0x80313294; -bhv_donut_platform_spawner_update = 0x80313354; -bhv_donut_platform_update = 0x80313530; -bhv_ddd_pole_init = 0x803136cc; -bhv_ddd_pole_update = 0x80313754; -bhv_red_coin_star_marker_init = 0x803137f4; -bhv_triplet_butterfly_update = 0x80313fc0; -bubba_act_0 = 0x80314098; -bubba_act_1 = 0x8031427c; -bhv_bubba_loop = 0x803145d4; -prepare_reverb_ring_buffer = 0x80314a30; -get_volume_ramping = 0x80314cc0; -synthesis_execute = 0x80314de4; -synthesis_do_one_audio_update = 0x80314f64; -synthesis_process_notes = 0x80315590; -load_wave_samples = 0x80316010; -final_resample = 0x803160dc; -process_envelope = 0x80316138; -process_envelope_inner = 0x8031619c; -note_apply_headset_pan_effects = 0x803166fc; -note_init_volume = 0x80316ac8; -note_set_vel_pan_reverb = 0x80316af4; -note_set_frequency = 0x80316da8; -note_enable = 0x80316db4; -note_disable = 0x80316e00; -reset_bank_and_seq_load_status = 0x80316e80; -discard_bank = 0x80316ec4; -discard_sequence = 0x80316fb4; -soundAlloc = 0x80317040; -sound_alloc_pool_init = 0x803170b4; -persistent_pool_clear = 0x803170d4; -temporary_pool_clear = 0x803170e8; -unused_803160F8 = 0x80317118; -sound_init_main_pools = 0x80317128; -session_pools_init = 0x80317184; -seq_and_bank_pool_init = 0x80317200; -persistent_pools_init = 0x8031727c; -temporary_pools_init = 0x80317338; -alloc_bank_or_seq = 0x803173fc; -get_bank_or_seq = 0x8031782c; -decrease_reverb_gain = 0x803178ec; -wait_for_audio_frames = 0x80317914; -audio_reset_session = 0x80317948; -audio_dma_copy_immediate = 0x80318040; -audio_dma_copy_async = 0x803180c4; -audio_dma_partial_copy_async = 0x80318130; -decrease_sample_dma_ttls = 0x803181ec; -dma_sample_data = 0x80318300; -init_sample_dma_buffers = 0x80318634; -patch_audio_bank = 0x803188f4; -bank_load_immediate = 0x80318b30; -bank_load_async = 0x80318c8c; -sequence_dma_immediate = 0x80318dc4; -sequence_dma_async = 0x80318e70; -get_missing_bank = 0x80318fac; -load_banks_immediate = 0x803190f4; -preload_sequence = 0x80319220; -load_sequence = 0x80319328; -load_sequence_internal = 0x80319388; -audio_init = 0x8031950c; -note_init = 0x80319920; -note_disable2 = 0x80319998; -process_notes = 0x803199b8; -seq_channel_layer_decay_release_internal = 0x80319db8; -seq_channel_layer_note_decay = 0x80319f64; -seq_channel_layer_note_release = 0x80319f84; -build_synthetic_wave = 0x80319fa4; -init_synthetic_wave = 0x8031a1d0; -init_note_list = 0x8031a254; -init_note_lists = 0x8031a264; -init_note_free_list = 0x8031a2b4; -note_pool_clear = 0x8031a368; -note_pool_fill = 0x8031a494; -audio_list_push_front = 0x8031a5d0; -audio_list_remove = 0x8031a610; -pop_node_with_value_less_equal = 0x8031a63c; -note_init_for_layer = 0x8031a6cc; -func_80319728 = 0x8031a794; -note_release_and_take_ownership = 0x8031a7c8; -alloc_note_from_disabled = 0x8031a820; -alloc_note_from_decaying = 0x8031a89c; -alloc_note_from_active = 0x8031a8f0; -alloc_note = 0x8031a94c; -reclaim_notes = 0x8031ac34; -note_init_all = 0x8031adac; -sequence_player_process_sound = 0x8031aee8; -get_portamento_freq_scale = 0x8031b0cc; -get_vibrato_pitch_change = 0x8031b1c0; -get_vibrato_freq_scale = 0x8031b248; -note_vibrato_update = 0x8031b440; -note_vibrato_init = 0x8031b4a0; -adsr_init = 0x8031b58c; -adsr_update = 0x8031b5ac; -sequence_channel_init = 0x8031b830; -seq_channel_set_layer = 0x8031b940; -seq_channel_layer_disable = 0x8031ba30; -seq_channel_layer_free = 0x8031ba6c; -sequence_channel_disable = 0x8031baf0; -allocate_sequence_channel = 0x8031bb5c; -sequence_player_init_channels = 0x8031bba4; -sequence_player_disable_channels = 0x8031bcd0; -sequence_channel_enable = 0x8031bda0; -sequence_player_disable = 0x8031be44; -audio_list_push_back = 0x8031bf14; -audio_list_pop_back = 0x8031bf54; -init_layer_freelist = 0x8031bf94; -m64_read_u8 = 0x8031c03c; -m64_read_s16 = 0x8031c050; -m64_read_compressed_u16 = 0x8031c080; -seq_channel_layer_process_script = 0x8031c0c4; -L8031C200 = 0x8031c200; -L8031C23C = 0x8031c23c; -L8031C298 = 0x8031c298; -L8031C2DC = 0x8031c2dc; -L8031C328 = 0x8031c328; -L8031C36C = 0x8031c36c; -L8031C3BC = 0x8031c3bc; -L8031C3E8 = 0x8031c3e8; -L8031C454 = 0x8031c454; -L8031C4A4 = 0x8031c4a4; -L8031C5C8 = 0x8031c5c8; -L8031C698 = 0x8031c698; -L8031C6A0 = 0x8031c6a0; -L8031CBE0 = 0x8031cbe0; -L8031CBEC = 0x8031cbec; -get_instrument = 0x8031ce54; -set_instrument = 0x8031cfd4; -sequence_channel_set_volume = 0x8031d068; -sequence_channel_process_script = 0x8031d08c; -L_U_8031D144 = 0x8031d144; -L_U_8031D1F8 = 0x8031d1f8; -L_U_8031D234 = 0x8031d234; -L_U_8031D26C = 0x8031d26c; -L_U_8031D2B4 = 0x8031d2b4; -L_U_8031D2C4 = 0x8031d2c4; -L_U_8031D31C = 0x8031d31c; -L_U_8031D344 = 0x8031d344; -L_U_8031D354 = 0x8031d354; -L_U_8031D370 = 0x8031d370; -L_U_8031D3A8 = 0x8031d3a8; -L_U_8031D3C4 = 0x8031d3c4; -L_U_8031D3D4 = 0x8031d3d4; -L_U_8031D3E4 = 0x8031d3e4; -L_U_8031D400 = 0x8031d400; -L_U_8031D424 = 0x8031d424; -L_U_8031D44C = 0x8031d44c; -L_U_8031D474 = 0x8031d474; -L_U_8031D498 = 0x8031d498; -L_U_8031D4BC = 0x8031d4bc; -L_U_8031D4D4 = 0x8031d4d4; -L_U_8031D4F0 = 0x8031d4f0; -L_U_8031D500 = 0x8031d500; -L_U_8031D51C = 0x8031d51c; -L_U_8031D538 = 0x8031d538; -L_U_8031D56C = 0x8031d56c; -L_U_8031D5A0 = 0x8031d5a0; -L_U_8031D5B4 = 0x8031d5b4; -L_U_8031D5D4 = 0x8031d5d4; -L_U_8031D5E4 = 0x8031d5e4; -L_U_8031D640 = 0x8031d640; -L_U_8031D678 = 0x8031d678; -L_U_8031D6C4 = 0x8031d6c4; -L_U_8031D6D4 = 0x8031d6d4; -L_U_8031D6F4 = 0x8031d6f4; -L_U_8031D718 = 0x8031d718; -L_U_8031D728 = 0x8031d728; -L_U_8031D73C = 0x8031d73c; -L_U_8031D7B8 = 0x8031d7b8; -L_U_8031D7E8 = 0x8031d7e8; -L_U_8031D7F8 = 0x8031d7f8; -L_U_8031D814 = 0x8031d814; -L_U_8031D830 = 0x8031d830; -L_U_8031D87C = 0x8031d87c; -L_U_8031D898 = 0x8031d898; -L_U_8031D8F8 = 0x8031d8f8; -L_U_8031D900 = 0x8031d900; -L_U_8031D930 = 0x8031d930; -L_U_8031D94C = 0x8031d94c; -L_U_8031D974 = 0x8031d974; -sequence_player_process_sequence = 0x8031d9ec; -process_sequences = 0x8031e240; -init_sequence_player = 0x8031e2e8; -init_sequence_players = 0x8031e374; -unused_8031E4F0 = 0x8031e4f0; -unused_8031E568 = 0x8031e568; -sequence_player_fade_out_internal = 0x8031e578; -func_8031D690 = 0x8031e5c0; -func_8031D6E4 = 0x8031e60c; -func_8031D7B0 = 0x8031e6a4; -func_8031D838 = 0x8031e710; -create_next_audio_frame_task = 0x8031e7b8; -play_sound = 0x8031eb00; -process_sound_request = 0x8031eb30; -process_all_sound_requests = 0x8031edec; -func_8031DFE8 = 0x8031ee70; -func_8031E0E4 = 0x8031ef6c; -func_8031E16C = 0x8031eff4; -get_sound_pan = 0x8031f810; -get_sound_dynamics = 0x8031f96c; -get_sound_freq_scale = 0x8031fb20; -get_sound_reverb = 0x8031fbe8; -audio_signal_game_loop_tick = 0x8031fd84; -update_game_sound = 0x8031fdac; -play_sequence = 0x80320544; -sequence_player_fade_out = 0x80320678; -fade_volume_scale = 0x803206bc; -fade_channel_volume_scale = 0x80320734; -func_8031F96C = 0x8032080c; -process_level_music_dynamics = 0x803208ec; -L8031FBAC = 0x80320a4c; -L8031FBEC = 0x80320a8c; -L8031FC2C = 0x80320acc; -L8031FC6C = 0x80320b0c; -L8031FCAC = 0x80320b4c; -L8031FCEC = 0x80320b8c; -L8031FD2C = 0x80320bcc; -L8031FD54 = 0x80320bf4; -unused_8031FED0 = 0x80320d70; -func_8031FFB4 = 0x80320e3c; -sequence_player_unlower = 0x80320ec4; -func_803200E4 = 0x80320f68; -set_sound_disabled = 0x803210d4; -sound_init = 0x8032112c; -get_currently_playing_sound = 0x80321398; -func_803205E8 = 0x80321474; -func_803206F8 = 0x80321584; -func_80320890 = 0x8032171c; -sound_banks_disable = 0x8032174c; -disable_all_sequence_players = 0x803217a8; -sound_banks_enable = 0x8032180c; -unused_803209D8 = 0x80321864; -func_80320A4C = 0x803218d8; -play_dialog_sound = 0x803218f4; -play_music = 0x803219ac; -stop_background_music = 0x80321bac; -fadeout_background_music = 0x80321ce4; -drop_queued_background_music = 0x80321d38; -get_current_background_music = 0x80321d5c; -func_80320ED8 = 0x80321d9c; -play_secondary_music = 0x80321e48; -func_80321080 = 0x80321f48; -func_803210D4 = 0x80321f9c; -play_course_clear = 0x80322078; -play_peachs_jingle = 0x803220b4; -play_puzzle_jingle = 0x803220f0; -play_star_fanfare = 0x8032212c; -play_power_star_jingle = 0x80322168; -play_race_fanfare = 0x803221b8; -play_toads_jingle = 0x803221f4; -sound_reset = 0x80322230; -audio_set_sound_mode = 0x8032231c; -unused_80321460 = 0x80322348; -unused_80321474 = 0x8032235c; -osSetTime = 0x803223b0; -osMapTLB = 0x803223e0; -osUnmapTLBAll = 0x803224a0; -sprintf = 0x803224f0; -proutSprintf = 0x8032255c; -osCreateMesgQueue = 0x803225a0; -osSetEventMesg = 0x803225d0; -osViSetEvent = 0x80322640; -osCreateThread = 0x803226b0; -osRecvMesg = 0x80322800; -_VirtualToPhysicalTask = 0x80322940; -osSpTaskLoad = 0x80322a5c; -osSpTaskStartGo = 0x80322bbc; -osSpTaskYield = 0x80322c00; -osSendMesg = 0x80322c20; -osSpTaskYielded = 0x80322d70; -osStartThread = 0x80322df0; -osWritebackDCacheAll = 0x80322f40; -osCreateViManager = 0x80322f70; -viMgrMain = 0x803230f4; -osViSetMode = 0x803232d0; -osViBlack = 0x80323340; -osViSetSpecialFeatures = 0x803233b0; -osCreatePiManager = 0x80323570; -osSetThreadPri = 0x803236f0; -osInitialize = 0x803237d0; -osViSwapBuffer = 0x80323a00; -sqrtf = 0x80323a50; -osContStartReadData = 0x80323a60; -osContGetReadData = 0x80323b24; -__osPackReadData = 0x80323bcc; -osContInit = 0x80323cc0; -__osContGetInitData = 0x80323ebc; -__osPackRequestData = 0x80323f8c; -osEepromProbe = 0x80324080; -__ull_rshift = 0x803240f0; -__ull_rem = 0x8032411c; -__ull_div = 0x80324158; -__ll_lshift = 0x80324194; -__ll_rem = 0x803241c0; -__ll_div = 0x803241fc; -__ll_mul = 0x80324258; -__ull_divremi = 0x80324288; -__ll_mod = 0x803242e8; -__ll_rshift = 0x80324384; -osInvalDCache = 0x803243b0; -osPiStartDma = 0x80324460; -bzero = 0x80324570; -osInvalICache = 0x80324610; -osEepromLongRead = 0x80324690; -osEepromLongWrite = 0x803247d0; -bcopy = 0x80324910; -guOrthoF = 0x80324c20; -guOrtho = 0x80324d74; -guPerspectiveF = 0x80324de0; -guPerspective = 0x80325010; -osGetTime = 0x80325070; -__d_to_ll = 0x80325100; -__f_to_ll = 0x8032511c; -__d_to_ull = 0x80325138; -__f_to_ull = 0x803251d8; -__ll_to_d = 0x80325274; -__ll_to_f = 0x8032528c; -__ull_to_d = 0x803252a4; -__ull_to_f = 0x803252d8; -cosf = 0x80325310; -sinf = 0x80325480; -guTranslateF = 0x80325640; -guTranslate = 0x80325688; -guRotateF = 0x803256e0; -guRotate = 0x80325874; -guScaleF = 0x803258d0; -guScale = 0x80325924; -osAiSetFrequency = 0x80325970; -alBnkfNew = 0x80325bd4; -alSeqFileNew = 0x80325cd8; -osWritebackDCache = 0x80325d20; -osAiGetLength = 0x80325da0; -osAiSetNextBuffer = 0x80325db0; -__osTimerServicesInit = 0x80325e60; -__osTimerInterrupt = 0x80325eec; -__osSetTimerIntr = 0x80326064; -__osInsertTimer = 0x803260d8; -_Printf = 0x80326260; -memcpy = 0x803273f0; -strlen = 0x8032741c; -strchr = 0x80327444; -__osDequeueThread = 0x80327490; -__osDisableInt = 0x803274d0; -__osRestoreInt = 0x803274f0; -__osViInit = 0x80327510; -__osExceptionPreamble = 0x80327640; -__osException = 0x80327650; -L80326964 = 0x803278e4; -L80326984 = 0x80327904; -L803269B8 = 0x80327938; -L80326AE8 = 0x80327a68; -L80326B44 = 0x80327ac4; -L80326B64 = 0x80327ae4; -L80326B9C = 0x80327b1c; -L80326BE8 = 0x80327b68; -send_mesg = 0x80327b98; -__osEnqueueAndYield = 0x80327c80; -__osEnqueueThread = 0x80327d10; -__osPopThread = 0x80327d58; -__osDispatchThread = 0x80327d68; -__osCleanupThread = 0x80327ea8; -osVirtualToPhysical = 0x80327eb0; -__osSpSetStatus = 0x80327f30; -__osSpSetPc = 0x80327f40; -__osSpRawStartDma = 0x80327f80; -__osSpDeviceBusy = 0x80328010; -__osSpGetStatus = 0x80328040; -osGetThreadPri = 0x80328050; -__osViGetCurrentContext = 0x80328070; -__osViSwapContext = 0x80328080; -osGetCount = 0x803283e0; -__osPiCreateAccessQueue = 0x803283f0; -__osPiGetAccess = 0x80328440; -__osPiRelAccess = 0x80328484; -osPiRawStartDma = 0x803284b0; -__osDevMgrMain = 0x80328590; -__osSetSR = 0x80328710; -__osGetSR = 0x80328720; -__osSetFpcCsr = 0x80328730; -__osSiRawReadIo = 0x80328740; -__osSiRawWriteIo = 0x80328790; -osMapTLBRdb = 0x803287e0; -osPiRawReadIo = 0x80328840; -__osSiCreateAccessQueue = 0x803288a0; -__osSiGetAccess = 0x803288f0; -__osSiRelAccess = 0x80328934; -__osSiRawStartDma = 0x80328960; -osSetTimer = 0x80328a10; -osEepromWrite = 0x80328af0; -__osPackEepWriteData = 0x80328ca0; -__osEepStatus = 0x80328dac; -osJamMesg = 0x80328fd0; -osPiGetCmdQueue = 0x80329120; -osEepromRead = 0x80329150; -__osPackEepReadData = 0x80329340; -guMtxF2L = 0x80329450; -guMtxIdentF = 0x80329550; -guMtxIdent = 0x803295d8; -guMtxL2F = 0x80329608; -guNormalize = 0x803296c0; -__osAiDeviceBusy = 0x80329750; -__osSetCompare = 0x80329780; -_Litob = 0x80329790; -_Ldtob = 0x80329a90; -u32_to_string = 0x8032a860; -string_to_u32 = 0x8032a890; -send_packet = 0x8032a8e8; -send = 0x8032a9a8; -process_command_memory = 0x8032aa80; -process_command_register = 0x8032aacc; -kdebugserver = 0x8032aaf8; -__osSyncPutChars = 0x8032ace0; -osSetIntMask = 0x8032ae10; -osDestroyThread = 0x8032ae70; -__osProbeTLB = 0x8032af70; -__osSiDeviceBusy = 0x8032b030; -lldiv = 0x8032b060; -ldiv = 0x8032b160; -__osGetCause = 0x8032b1f0; -__osAtomicDec = 0x8032b200; -rspF3DBootStart = 0x8032b260; -rspF3DBootEnd = 0x8032b330; -rspF3DStart = 0x8032b330; -rspF3DEnd = 0x8032c738; -rspAspMainStart = 0x8032c740; -rspAspMainEnd = 0x8032d560; -gVblankHandler1 = 0x8032d560; -gVblankHandler2 = 0x8032d564; -gActiveSPTask = 0x8032d568; -sCurrentAudioSPTask = 0x8032d56c; -sCurrentDisplaySPTask = 0x8032d570; -sNextAudioSPTask = 0x8032d574; -sNextDisplaySPTask = 0x8032d578; -sAudioEnabled = 0x8032d57c; -sNumVblanks = 0x8032d580; -gResetTimer = 0x8032d584; -D_8032C648 = 0x8032d588; -gDebugLevelSelect = 0x8032d58c; -D_8032C650 = 0x8032d590; -gShowProfiler = 0x8032d594; -gShowDebugText = 0x8032d598; -unused8032C690 = 0x8032d5d0; -gGlobalTimer = 0x8032d5d4; -frameBufferIndex = 0x8032d5dc; -D_8032C6A0 = 0x8032d5e0; -gPlayer1Controller = 0x8032d5e4; -gPlayer2Controller = 0x8032d5e8; -gPlayer3Controller = 0x8032d5ec; -gCurrDemoInput = 0x8032d5f0; -gDemoInputListID = 0x8032d5f4; -gRecordedDemoInput = 0x8032d5f8; -credits01 = 0x8032d6d0; -credits02 = 0x8032d6d8; -credits03 = 0x8032d6e4; -credits04 = 0x8032d6f0; -credits05 = 0x8032d700; -credits06 = 0x8032d710; -credits07 = 0x8032d71c; -credits08 = 0x8032d728; -credits09 = 0x8032d738; -credits10 = 0x8032d740; -credits11 = 0x8032d750; -credits12 = 0x8032d75c; -credits13 = 0x8032d764; -credits14 = 0x8032d774; -credits15 = 0x8032d77c; -credits16 = 0x8032d788; -credits17 = 0x8032d79c; -credits18 = 0x8032d7ac; -credits19 = 0x8032d7bc; -credits20 = 0x8032d7c4; -sCreditsSequence = 0x8032d7cc; -gMarioState = 0x8032d93c; -unused1 = 0x8032d940; -D_8032C9E0 = 0x8032d944; -sTerrainSounds = 0x8032daa0; -sSquishScaleOverTime = 0x8032dacc; -sCapFlickerFrames = 0x8032dae0; -gWaterSurfacePseudoFloor = 0x8032daf8; -sJumpLandAction = 0x8032dc50; -sFreefallLandAction = 0x8032dc68; -sSideFlipLandAction = 0x8032dc80; -sHoldJumpLandAction = 0x8032dc98; -sHoldFreefallLandAction = 0x8032dcb0; -sLongJumpLandAction = 0x8032dcc8; -sDoubleJumpLandAction = 0x8032dce0; -sTripleJumpLandAction = 0x8032dcf8; -sBackflipLandAction = 0x8032dd10; -sPunchingForwardVelocities = 0x8032dd40; -gLastCompletedCourseNum = 0x8032dd80; -gLastCompletedStarNum = 0x8032dd84; -sUnusedGotGlobalCoinHiScore = 0x8032dd88; -gGotFileCoinHiScore = 0x8032dd8c; -gCurrCourseStarFlags = 0x8032dd90; -gSpecialTripleJump = 0x8032dd94; -gLevelToCourseNumTable = 0x8032dd98; -gMarioSpawnInfo = 0x8032ddc0; -gLoadedGraphNodes = 0x8032ddc4; -gAreas = 0x8032ddc8; -gCurrentArea = 0x8032ddcc; -gCurrCreditsEntry = 0x8032ddd0; -D_8032CE74 = 0x8032ddd4; -D_8032CE78 = 0x8032ddd8; -gWarpTransDelay = 0x8032dddc; -gFBSetColor = 0x8032dde0; -gWarpTransFBSetColor = 0x8032dde4; -gWarpTransRed = 0x8032dde8; -gWarpTransGreen = 0x8032ddec; -gWarpTransBlue = 0x8032ddf0; -gCurrSaveFileNum = 0x8032ddf4; -gCurrLevelNum = 0x8032ddf8; -sWarpBhvSpawnTable = 0x8032ddfc; -sSpawnTypeFromWarpBhv = 0x8032de4c; -D_8032CF00 = 0x8032de60; -renderModeTable_1Cycle = 0x8032de70; -renderModeTable_2Cycle = 0x8032deb0; -gCurGraphNodeRoot = 0x8032def0; -gCurGraphNodeMasterList = 0x8032def4; -gCurGraphNodeCamFrustum = 0x8032def8; -gCurGraphNodeCamera = 0x8032defc; -gCurGraphNodeObject = 0x8032df00; -gCurGraphNodeHeldObject = 0x8032df04; -gAreaUpdateCounter = 0x8032df08; -gProfilerMode = 0x8032df10; -gCurrentFrameIndex1 = 0x8032df14; -gCurrentFrameIndex2 = 0x8032df18; -unused8032CFC0 = 0x8032df20; -gCutsceneFocus = 0x8032df24; -unused8032CFC8 = 0x8032df28; -unused8032CFCC = 0x8032df2c; -gSecondCameraFocus = 0x8032df30; -sYawSpeed = 0x8032df34; -gCurrLevelArea = 0x8032df38; -gPrevLevel = 0x8032df3c; -unused8032CFE0 = 0x8032df40; -unused8032CFE4 = 0x8032df44; -unused8032CFE8 = 0x8032df48; -gCameraZoomDist = 0x8032df4c; -sObjectCutscene = 0x8032df50; -gRecentCutscene = 0x8032df54; -sFramesSinceCutsceneEnded = 0x8032df58; -sCutsceneDialogResponse = 0x8032df5c; -sMarioCamState = 0x8032df60; -sLuigiCamState = 0x8032df64; -unused8032D008 = 0x8032df68; -sFixedModeBasePosition = 0x8032df6c; -sUnusedModeBasePosition_2 = 0x8032df78; -sUnusedModeBasePosition_3 = 0x8032df84; -sUnusedModeBasePosition_4 = 0x8032df90; -sUnusedModeBasePosition_5 = 0x8032df9c; -sModeTransitions = 0x8032dfa8; -unused8032D0A8 = 0x8032e008; -unused8032D0B0 = 0x8032e010; -sDanceCutsceneTable = 0x8032e018; -unusedDanceInfo1 = 0x8032e024; -unusedDanceType = 0x8032e038; -unusedDanceInfo2 = 0x8032e03c; -sBBHLibraryParTrackPath = 0x8032e050; -sCamSL = 0x8032e098; -sCamTHI = 0x8032e0e0; -sCamHMC = 0x8032e128; -sCamSSL = 0x8032e1d0; -sCamRR = 0x8032e248; -sCamBOB = 0x8032e2f0; -sCamCotMC = 0x8032e338; -sCamCCM = 0x8032e368; -sCamCastle = 0x8032e3b0; -sCamBBH = 0x8032e6f8; -sCameraTriggers = 0x8032ecb0; -sIntroStartToPipePosition = 0x8032ed50; -sIntroStartToPipeFocus = 0x8032ee08; -sIntroPipeToDialogPosition = 0x8032eec0; -sIntroPipeToDialogFocus = 0x8032ef30; -sEndingFlyToWindowPos = 0x8032efa0; -sEndingFlyToWindowFocus = 0x8032eff0; -sEndingPeachDescentCamPos = 0x8032f048; -sEndingMarioToPeachPos = 0x8032f0e8; -sEndingMarioToPeachFocus = 0x8032f130; -sEndingLookUpAtCastle = 0x8032f178; -sEndingLookAtSkyFocus = 0x8032f1b8; -gIntroLakituStartToPipeFocus = 0x8032f214; -gIntroLakituStartToPipeOffsetFromCamera = 0x8032f32c; -gEndWavingPos = 0x8032f444; -gEndWavingFocus = 0x8032f48c; -sCutsceneEnding = 0x8032f4d4; -sCutsceneGrandStar = 0x8032f534; -sCutsceneUnused = 0x8032f544; -sCutsceneDoorWarp = 0x8032f554; -sCutsceneEndWaving = 0x8032f564; -sCutsceneCredits = 0x8032f56c; -sCutsceneDoorPull = 0x8032f574; -sCutsceneDoorPush = 0x8032f59c; -sCutsceneDoorPullMode = 0x8032f5c4; -sCutsceneDoorPushMode = 0x8032f5dc; -sCutsceneEnterCannon = 0x8032f5f4; -sCutsceneStarSpawn = 0x8032f60c; -sCutsceneRedCoinStarSpawn = 0x8032f624; -sCutsceneEnterPainting = 0x8032f634; -sCutsceneDeathExit = 0x8032f63c; -sCutsceneExitPaintingSuccess = 0x8032f64c; -sCutsceneUnusedExit = 0x8032f65c; -sCutsceneIntroPeach = 0x8032f674; -sCutscenePrepareCannon = 0x8032f69c; -sCutsceneExitWaterfall = 0x8032f6ac; -sCutsceneFallToCastleGrounds = 0x8032f6bc; -sCutsceneEnterPyramidTop = 0x8032f6cc; -sCutscenePyramidTopExplode = 0x8032f6dc; -sCutsceneStandingDeath = 0x8032f6f4; -sCutsceneEnterPool = 0x8032f6fc; -sCutsceneDeathStomach = 0x8032f70c; -sCutsceneDeathOnBack = 0x8032f714; -sCutsceneQuicksandDeath = 0x8032f71c; -sCutsceneWaterDeath = 0x8032f724; -sCutsceneSuffocation = 0x8032f72c; -sCutsceneEnterBowserArena = 0x8032f734; -sCutsceneDanceDefaultRotate = 0x8032f74c; -sCutsceneDanceFlyAway = 0x8032f754; -sCutsceneDanceCloseup = 0x8032f75c; -sCutsceneKeyDance = 0x8032f764; -sCutsceneCapSwitchPress = 0x8032f76c; -sCutsceneSlidingDoorsOpen = 0x8032f774; -sCutsceneUnlockKeyDoor = 0x8032f784; -sCutsceneExitBowserSuccess = 0x8032f794; -sCutsceneExitBowserDeath = 0x8032f7a4; -sCutsceneExitSpecialSuccess = 0x8032f7b4; -sCutsceneNonPaintingDeath = 0x8032f7c4; -sCutsceneDialog = 0x8032f7d4; -sCutsceneReadMessage = 0x8032f7ec; -sDanceCutsceneIndexTable = 0x8032f804; -sZoomOutAreaMasks = 0x8032f870; -sBobCreditsSplinePositions = 0x8032f884; -sBobCreditsSplineFocus = 0x8032f8ac; -sWfCreditsSplinePositions = 0x8032f8d4; -sWfCreditsSplineFocus = 0x8032f8fc; -sJrbCreditsSplinePositions = 0x8032f924; -sJrbCreditsSplineFocus = 0x8032f94c; -sCcmSlideCreditsSplinePositions = 0x8032f974; -sCcmSlideCreditsSplineFocus = 0x8032f99c; -sBbhCreditsSplinePositions = 0x8032f9c4; -sBbhCreditsSplineFocus = 0x8032f9e4; -sHmcCreditsSplinePositions = 0x8032fa04; -sHmcCreditsSplineFocus = 0x8032fa2c; -sThiWigglerCreditsSplinePositions = 0x8032fa54; -sThiWigglerCreditsSplineFocus = 0x8032fa6c; -sVolcanoCreditsSplinePositions = 0x8032fa84; -sVolcanoCreditsSplineFocus = 0x8032fab4; -sSslCreditsSplinePositions = 0x8032fae4; -sSslCreditsSplineFocus = 0x8032fb14; -sDddCreditsSplinePositions = 0x8032fb44; -sDddCreditsSplineFocus = 0x8032fb7c; -sSlCreditsSplinePositions = 0x8032fbb4; -sSlCreditsSplineFocus = 0x8032fbd4; -sWdwCreditsSplinePositions = 0x8032fbf4; -sWdwCreditsSplineFocus = 0x8032fc14; -sTtmCreditsSplinePositions = 0x8032fc34; -sTtmCreditsSplineFocus = 0x8032fc64; -sThiHugeCreditsSplinePositions = 0x8032fc94; -sThiHugeCreditsSplineFocus = 0x8032fccc; -sTtcCreditsSplinePositions = 0x8032fd04; -sTtcCreditsSplineFocus = 0x8032fd24; -sRrCreditsSplinePositions = 0x8032fd44; -sRrCreditsSplineFocus = 0x8032fd64; -sSaCreditsSplinePositions = 0x8032fd84; -sSaCreditsSplineFocus = 0x8032fdac; -sCotmcCreditsSplinePositions = 0x8032fdd4; -sCotmcCreditsSplineFocus = 0x8032fdfc; -sDddSubCreditsSplinePositions = 0x8032fe24; -sDddSubCreditsSplineFocus = 0x8032fe4c; -sCcmOutsideCreditsSplinePositions = 0x8032fe74; -sCcmOutsideCreditsSplineFocus = 0x8032fe94; -sObjectListUpdateOrder = 0x8032fec0; -sParticleTypes = 0x8032fecc; -D_8032F0A0 = 0x80330000; -D_8032F0A4 = 0x80330004; -D_8032F0C0 = 0x80330020; -D_8032F0CC = 0x8033002c; -sMrIParticleActions = 0x8033006c; -sMrIActions = 0x80330074; -sMrIHitbox = 0x80330084; -D_8032F134 = 0x80330094; -unused8032F134 = 0x803300a8; -sCapSwitchActions = 0x803300ac; -sKingBobombActions = 0x803300bc; -sKingBobombSoundStates = 0x803300e0; -sOpenedCannonActions = 0x80330140; -unused0EA1FC = 0x8033015c; -sChuckyaActions = 0x80330198; -sWFRotatingPlatformData = 0x803301a8; -sKoopaShellUnderwaterHitbox = 0x803301c0; -D_8032F270 = 0x803301d0; -sSparkleSpawnStarHitbox = 0x803301e4; -sYellowCoinHitbox = 0x803301f4; -D_8032F2A4 = 0x80330204; -sCoinInsideBooActions = 0x80330224; -D_8032F2CC = 0x8033022c; -D_8032F2E4 = 0x80330244; -D_8032F300 = 0x80330260; -D_8032F328 = 0x80330288; -D_8032F330 = 0x80330290; -sGrindelThwompActions = 0x80330298; -sTumblingBridgeParams = 0x803302ac; -sTumblingBridgeActions = 0x803302dc; -D_8032F38C = 0x803302ec; -sElevatorActions = 0x80330318; -D_8032F3CC = 0x8033032c; -D_8032F3E0 = 0x80330340; -D_8032F3F4 = 0x80330354; -D_8032F3FC = 0x8033035c; -sUkikiCageActions = 0x80330370; -D_8032F420 = 0x80330380; -sSpindriftHitbox = 0x80330390; -sMetalBoxHitbox = 0x803303a0; -sBreakableBoxHitbox = 0x803303b0; -D_8032F460 = 0x803303c0; -sHeaveHoActions = 0x803303e8; -sJumpingBoxHitbox = 0x803303f8; -sJumpingBoxActions = 0x80330408; -sBowserKeyHitbox = 0x8033042c; -sBulletBillActions = 0x8033043c; -sBowserTailAnchorActions = 0x80330450; -D_8032F4FC = 0x8033045c; -D_8032F50C = 0x8033046c; -D_8032F510 = 0x80330470; -D_8032F514 = 0x80330474; -sBowserDefeatedDialogText = 0x80330478; -D_8032F520 = 0x80330480; -sBowserActions = 0x803304c8; -D_8032F5B8 = 0x80330518; -D_8032F690 = 0x803305f0; -D_8032F694 = 0x803305f4; -D_8032F698 = 0x803305f8; -sFallingBowserPlatformActions = 0x8033067c; -sGrowingBowserFlameHitbox = 0x80330688; -sBowserFlameHitbox = 0x80330698; -D_8032F748 = 0x803306a8; -D_8032F754 = 0x803306b4; -sUkikiSoundStates = 0x80330738; -sUkikiActions = 0x803307a0; -D_8032F860 = 0x803307c0; -D_8032F894 = 0x803307f4; -D_8032F8C8 = 0x80330828; -sRotatingCwFireBarsActions = 0x80330830; -sKoopaShellHitbox = 0x80330840; -D_8032F8F0 = 0x80330850; -D_8032F924 = 0x80330884; -D_8032F948 = 0x803308a8; -D_8032F96C = 0x803308cc; -sToxBoxActions = 0x803308d8; -TablePiranhaPlantActions = 0x80330900; -sBowserPuzzlePieceActions = 0x80330b1c; -sTuxiesMotherActions = 0x80330b38; -sSmallPenguinActions = 0x80330b44; -sFishActions = 0x80330b5c; -sFishGroupActions = 0x80330b68; -sBirdChirpChirpActions = 0x80330b74; -sCheepCheepActions = 0x80330b84; -sExclamationBoxHitbox = 0x80330b90; -sExclamationBoxContents = 0x80330ba0; -sExclamationBoxActions = 0x80330c20; -sSkullSlidingBoxHitbox = 0x80330c38; -gOpenableGrills = 0x80330c48; -sTweesterHitbox = 0x80330c58; -sTweesterActions = 0x80330c68; -sScuttlebugHitbox = 0x80330cd4; -sWhompActions = 0x80330ce4; -sWaterSplashDropletParams = 0x80330d0c; -gShallowWaterSplashDropletParams = 0x80330d30; -sWaterDropletFishParams = 0x80330d54; -gShallowWaterWaveDropletParams = 0x80330d78; -sStrongWindParticleHitbox = 0x80330d9c; -sSLWalkingPenguinErraticSteps = 0x80330dac; -D_8032FEC0 = 0x80330e20; -unused_8032FEC4 = 0x80330e24; -gMarioPlatform = 0x80330e34; -sDebugEffectStringInfo = 0x80330e40; -sDebugEnemyStringInfo = 0x80330e64; -sDebugInfoDPadMask = 0x80330e88; -sDebugInfoDPadUpdID = 0x80330e8c; -sDebugLvSelectCheckFlag = 0x80330e90; -sDebugPage = 0x80330e94; -sNoExtraDebug = 0x80330e98; -sDebugStringArrPrinted = 0x80330e9c; -sDebugSysCursor = 0x80330ea0; -sDebugInfoButtonSeqID = 0x80330ea4; -sDebugInfoButtonSeq = 0x80330ea8; -sTransitionColorFadeCount = 0x80330ec0; -sTransitionTextureFadeCount = 0x80330ec4; -sTextureTransitionID = 0x80330ec8; -rectangles = 0x80330ee0; -sSkyboxTextures = 0x80330f00; -sSkyboxColors = 0x80330f28; -gMovtexCounter = 0x80330f30; -gMovtexCounterPrev = 0x80330f34; -gMovtexVtxColor = 0x80330f38; -gPaintingMarioYEntry = 0x80330f3c; -gWdwWaterLevelSet = 0x80330f40; -gMovtexIdToTexture = 0x80330f44; -gMovtexNonColored = 0x80330f64; -gMovtexColored = 0x803311a4; -gMovtexColored2 = 0x8033127c; -sHmcPaintings = 0x80331300; -sInsideCastlePaintings = 0x80331308; -sTtmPaintings = 0x80331344; -sPaintingGroups = 0x8033134c; -gPaintingUpdateCounter = 0x80331358; -gLastPaintingUpdateCounter = 0x8033135c; -sTextLabelsCount = 0x80331360; -gDialogCharWidths = 0x80331370; -gDialogBoxState = 0x80331470; -gDialogBoxOpenTimer = 0x80331474; -gDialogBoxScale = 0x80331478; -gDialogScrollOffsetY = 0x8033147c; -gDialogBoxType = 0x80331480; -gDialogID = 0x80331484; -gLastDialogPageStrPos = 0x80331488; -gDialogTextPos = 0x8033148c; -gDialogLineNum = 0x80331490; -gLastDialogResponse = 0x80331494; -gMenuHoldKeyIndex = 0x80331498; -gMenuHoldKeyTimer = 0x8033149c; -gDialogResponse = 0x803314a0; -gHudSymCoin = 0x803314b0; -gHudSymX = 0x803314b4; -gMenuMode = 0x803314f8; -gEndCutsceneStrEn0 = 0x803314fc; -gEndCutsceneStrEn1 = 0x80331504; -gEndCutsceneStrEn2 = 0x80331538; -gEndCutsceneStrEn3 = 0x80331558; -gEndCutsceneStrEn4 = 0x8033156c; -gEndCutsceneStrEn5 = 0x80331598; -gEndCutsceneStrEn6 = 0x803315ac; -gEndCutsceneStrEn7 = 0x803315cc; -gEndCutsceneStrEn8 = 0x803315dc; -gEndCutsceneStringsEn = 0x803315e4; -gCutsceneMsgFade = 0x8033160c; -gCutsceneMsgIndex = 0x80331610; -gCutsceneMsgDuration = 0x80331614; -gCutsceneMsgTimer = 0x80331618; -gDialogCameraAngleIndex = 0x8033161c; -gDialogCourseActNum = 0x80331620; -gCourseCompleteCoinsEqual = 0x803316c8; -gCourseDoneMenuTimer = 0x803316cc; -gCourseCompleteCoins = 0x803316d0; -gHudFlash = 0x803316d4; -gEnvFxMode = 0x80331750; -D_80330644 = 0x80331754; -gSnowTempVtx = 0x80331758; -gSnowFlakeVertex1 = 0x80331788; -gSnowFlakeVertex2 = 0x80331790; -gSnowFlakeVertex3 = 0x80331798; -D_80330690 = 0x803317a0; -D_80330694 = 0x803317a4; -gBubbleTempVtx = 0x803317a8; -MacroObjectPresets = 0x803317e0; -sPowerMeterVisibleTimer = 0x803325fc; -sPrevCheckMarioRoom = 0x80332614; -sYoshiDead = 0x80332618; -sDebugSequenceTracker = 0x8033261c; -sDebugTimer = 0x80332620; -sBreakableBoxSmallHitbox = 0x803327a8; -sMrBlizzardHitbox = 0x80332b00; -sMrBlizzardSnowballHitbox = 0x80332b24; -D_80331A24 = 0x80332b34; -D_80331A44 = 0x80332b54; -D_80331A4C = 0x80332b5c; -D_80331A54 = 0x80332b64; -D_80331ACC = 0x80332bdc; -sRecoveryHeartHitbox = 0x80332bf0; -sUnagiHitbox = 0x80332c00; -sHauntedChairHitbox = 0x80332c10; -sFlyingBookendHitbox = 0x80332c30; -D_80331B30 = 0x80332c40; -sBookSwitchHitbox = 0x80332c4c; -sFirePiranhaPlantHitbox = 0x80332c5c; -D_80331B5C = 0x80332c6c; -sPiranhaPlantFireHitbox = 0x80332c74; -sSnufitHitbox = 0x80332c84; -sSnufitBulletHitbox = 0x80332c94; -sEyerokHitbox = 0x80332ca4; -D_80331BA4 = 0x80332cb4; -coffinRelativePos = 0x80332d10; -sClamShellHitbox = 0x80332d28; -sSkeeterHitbox = 0x80332d38; -D_80331C38 = 0x80332d48; -gAudioErrorFlags = 0x80332e50; -sGameLoopTicked = 0x80332e54; -sDialogSpeaker = 0x80332e58; -sDialogSpeakerVoice = 0x80332f04; -sNumProcessedSoundRequests = 0x80332f40; -sSoundRequestCount = 0x80332f44; -sDynBbh = 0x80332f48; -sDynDdd = 0x80332f54; -sDynJrb = 0x80332f6c; -sDynWdw = 0x80332f88; -sDynHmc = 0x80332f98; -sDynUnk38 = 0x80332fa8; -sDynNone = 0x80332fb8; -sCurrentMusicDynamic = 0x80332fbc; -sBackgroundMusicForDynamics = 0x80332fc0; -sLevelDynamics = 0x80332fc4; -sMusicDynamics = 0x80333060; -gAreaEchoLevel = 0x803330c0; -D_80332028 = 0x80333138; -sBackgroundMusicDefaultVolume = 0x80333188; -sPlayer0CurSeqId = 0x803331ac; -sMusicDynamicDelay = 0x803331b0; -D_803320A4 = 0x803331b4; -D_803320B0 = 0x803331c0; -D_803320BC = 0x803331cc; -sMaxChannelsForSoundBank = 0x803331d8; -sNumSoundsPerBank = 0x803331e4; -gDefaultSoundArgs = 0x803331f0; -sUnusedSoundArgs = 0x803331fc; -sSoundBankDisabled = 0x80333208; -D_80332108 = 0x80333218; -sHasStartedFadeOut = 0x8033321c; -D_80332110 = 0x80333220; -sUnused80332114 = 0x80333224; -sUnused80332118 = 0x80333228; -D_8033211C = 0x8033322c; -D_80332120 = 0x80333230; -D_80332124 = 0x80333234; -sBackgroundMusicQueueSize = 0x80333238; -sUnused8033323C = 0x8033323c; -gAudioSessionPresets = 0x803332a0; -gAudioCosineTable = 0x80333498; -gPitchBendFrequencyScale = 0x80333598; -gNoteFrequencies = 0x80333994; -gDefaultShortNoteVelocityTable = 0x80333b94; -gDefaultShortNoteDurationTable = 0x80333ba4; -gVibratoCurve = 0x80333bb4; -gDefaultEnvelope = 0x80333bc4; -sSineWave = 0x80333bd0; -sSquareWave = 0x80333c50; -sTriangleWave = 0x80333cd0; -sSawtoothWave = 0x80333d50; -gWaveSamples = 0x80333dd0; -gHeadsetPanQuantization = 0x80333de0; -gHeadsetPanVolume = 0x80333df4; -gStereoPanVolume = 0x80333ff4; -gDefaultPanVolume = 0x803341f4; -gVolRampingLhs136 = 0x803343f4; -gVolRampingRhs136 = 0x803345f4; -gVolRampingLhs144 = 0x803347f4; -gVolRampingRhs144 = 0x803349f4; -gVolRampingLhs128 = 0x80334bf4; -gVolRampingRhs128 = 0x80334df4; -gTatumsPerBeat = 0x80334ff4; -gUnusedCount80333EE8 = 0x80334ff8; -gAudioHeapSize = 0x80334ffc; -D_80333EF0 = 0x80335000; -gAudioLoadLock = 0x80335004; -sUnused8033EF8 = 0x80335008; -osViModeTable = 0x80335010; -piMgrArgs = 0x803358f0; -osClockRate = 0x80335910; -D_80334808 = 0x80335918; -_osContInitialized = 0x80335920; -D_80334820 = 0x80335930; -D_80334830 = 0x80335940; -_spaces = 0x80335950; -_zeroes = 0x80335974; -D_80334890 = 0x803359a0; -D_80334894 = 0x803359a4; -D_80334898 = 0x803359a8; -D_8033489C = 0x803359ac; -D_803348A0 = 0x803359b0; -D_803348A4 = 0x803359b4; -D_803348B0 = 0x803359c0; -D_80334910 = 0x80335a20; -D_80334914 = 0x80335a24; -D_80334918 = 0x80335a28; -D_8033491C = 0x80335a2c; -D_80334920 = 0x80335a30; -D_80334934 = 0x80335a44; -D_80334938 = 0x80335a48; -gOsPiAccessQueueCreated = 0x80335a50; -gOsSiAccessQueueCreated = 0x80335a60; -D_80334990 = 0x80335aa0; -D_803349E0 = 0x80335af0; -D_80334A30 = 0x80335b40; -D_80334A34 = 0x80335b44; -D_80334A38 = 0x80335b48; -D_80334A40 = 0x80335b50; -D_80334A44 = 0x80335b54; -jtbl_80337C90 = 0x80338e60; -jtbl_80337CB4 = 0x80338e84; -jtbl_80337CDC = 0x80338eac; -jtbl_80337D08 = 0x80338ec0; -jtbl_80337E04 = 0x80338fbc; -jtbl_80338418 = 0x8033978c; -length_str = 0x80339880; -flags_str = 0x80339884; -flags_arr = 0x8033988c; -D_80338610 = 0x80339980; -jtbl_80338630 = 0x803399a0; -NAN = 0x803399d0; -D_80338670 = 0x803399e0; -D_803386D0 = 0x80339a40; -rspF3DDataStart = 0x80339ac0; -rspF3DDataEnd = 0x8033a2c0; -rspAspMainDataStart = 0x8033a2c0; -rspAspMainDataEnd = 0x8033a580; -D_80339210 = 0x8033a580; -gIdleThread = 0x8033a730; -gMainThread = 0x8033a8e0; -gGameLoopThread = 0x8033aa90; -gSoundThread = 0x8033ac40; -gPIMesgQueue = 0x8033adf0; -gIntrMesgQueue = 0x8033ae08; -gSPTaskMesgQueue = 0x8033ae20; -gDmaMesgBuf = 0x8033ae38; -gPIMesgBuf = 0x8033ae40; -gSIEventMesgBuf = 0x8033aec0; -gIntrMesgBuf = 0x8033aec8; -gUnknownMesgBuf = 0x8033af08; -gDmaIoMesg = 0x8033af48; -D_80339BEC = 0x8033af5c; -gDmaMesgQueue = 0x8033af60; -gSIEventMesgQueue = 0x8033af78; -gControllers = 0x8033af90; -gControllerStatuses = 0x8033afe8; -gControllerPads = 0x8033aff8; -gGameVblankQueue = 0x8033b010; -D_80339CB8 = 0x8033b028; -D_80339CD0 = 0x8033b040; -D_80339CD4 = 0x8033b044; -gGameVblankHandler = 0x8033b048; -gPhysicalFrameBuffers = 0x8033b050; -gPhysicalZBuffer = 0x8033b05c; -D_80339CF0 = 0x8033b060; -D_80339CF4 = 0x8033b064; -gGfxSPTask = 0x8033b068; -gDisplayListHead = 0x8033b06c; -gGfxPoolEnd = 0x8033b070; -gGfxPool = 0x8033b074; -gControllerBits = 0x8033b078; -gEepromProbe = 0x8033b079; -D_80339D10 = 0x8033b080; -gDemo = 0x8033b090; -filler80339D30 = 0x8033b0a0; -gMarioStates = 0x8033b170; -sCurrPlayMode = 0x8033b238; -D_80339ECA = 0x8033b23a; -sTransitionTimer = 0x8033b23c; -sTransitionUpdate = 0x8033b240; -unused3 = 0x8033b244; -sWarpDest = 0x8033b248; -D_80339EE0 = 0x8033b250; -sDelayedWarpOp = 0x8033b252; -sDelayedWarpTimer = 0x8033b254; -sSourceWarpNodeId = 0x8033b256; -sDelayedWarpArg = 0x8033b258; -unused4 = 0x8033b25c; -sTimerRunning = 0x8033b25e; -gHudDisplay = 0x8033b260; -gShouldNotPlayCastleMusic = 0x8033b26e; -sDelayInvincTimer = 0x8033b270; -sInvulnerable = 0x8033b272; -unused80339F10 = 0x8033b280; -filler80339F1C = 0x8033b288; -sFloorAlignMatrix = 0x8033b2c0; -gMirrorMario = 0x8033b350; -gBodyStates = 0x8033b3b0; -sSegmentTable = 0x8033b400; -sPoolFreeSpace = 0x8033b480; -sPoolStart = 0x8033b484; -sPoolEnd = 0x8033b488; -sPoolListHeadL = 0x8033b48c; -sPoolListHeadR = 0x8033b490; -gEffectsMemoryPool = 0x8033b494; -gWarpCheckpoint = 0x8033b4a0; -gMainMenuDataModified = 0x8033b4a5; -gSaveFileModified = 0x8033b4a6; -gPlayerSpawnInfos = 0x8033b4b0; -D_8033A160 = 0x8033b4d0; -gAreaData = 0x8033b8d0; -gWarpTransition = 0x8033bab0; -gCurrCourseNum = 0x8033bac6; -gCurrActNum = 0x8033bac8; -gCurrAreaIndex = 0x8033baca; -gSavedCourseNum = 0x8033bacc; -gPauseScreenMode = 0x8033bace; -gSaveOptSelectIndex = 0x8033bad0; -gMatStackIndex = 0x8033bae0; -gMatStack = 0x8033bae8; -gMatStackFixed = 0x8033c2e8; -gGeoTempState = 0x8033c368; -gCurAnimType = 0x8033c378; -gCurAnimEnabled = 0x8033c379; -gCurrAnimFrame = 0x8033c37a; -gCurAnimTranslationMultiplier = 0x8033c37c; -gCurrAnimAttribute = 0x8033c380; -gCurAnimData = 0x8033c384; -gDisplayListHeap = 0x8033c388; -gProfilerFrameData = 0x8033c390; -gPlayerCameraState = 0x8033c520; -sOldPosition = 0x8033c568; -sOldFocus = 0x8033c578; -sPlayer2FocusOffset = 0x8033c588; -sCreditsPlayer2Pitch = 0x8033c594; -sCreditsPlayer2Yaw = 0x8033c596; -sFramesPaused = 0x8033c598; -sFOVState = 0x8033c5a0; -sModeTransition = 0x8033c5c0; -sMarioGeometry = 0x8033c5e8; -unusedFreeRoamWallYaw = 0x8033c61c; -sAvoidYawVel = 0x8033c61e; -sCameraYawAfterDoorCutscene = 0x8033c620; -unusedSplinePitch = 0x8033c622; -unusedSplineYaw = 0x8033c624; -sHandheldShakeSpline = 0x8033c628; -sHandheldShakeMag = 0x8033c668; -sHandheldShakeTimer = 0x8033c66c; -sHandheldShakeInc = 0x8033c670; -sHandheldShakePitch = 0x8033c674; -sHandheldShakeYaw = 0x8033c676; -sHandheldShakeRoll = 0x8033c678; -unused8033B30C = 0x8033c67c; -unused8033B310 = 0x8033c680; -sSelectionFlags = 0x8033c684; -unused8033B316 = 0x8033c686; -s2ndRotateFlags = 0x8033c688; -unused8033B31A = 0x8033c68a; -sCameraSoundFlags = 0x8033c68c; -sCButtonsPressed = 0x8033c68e; -sCutsceneDialogID = 0x8033c690; -gLakituState = 0x8033c698; -unused8033B3E8 = 0x8033c758; -sAreaYaw = 0x8033c75a; -sAreaYawChange = 0x8033c75c; -sLakituDist = 0x8033c75e; -sLakituPitch = 0x8033c760; -sZoomAmount = 0x8033c764; -sCSideButtonYaw = 0x8033c768; -sBehindMarioSoundTimer = 0x8033c76a; -sZeroZoomDist = 0x8033c76c; -sCUpCameraPitch = 0x8033c770; -sModeOffsetYaw = 0x8033c772; -sSpiralStairsYawOffset = 0x8033c774; -s8DirModeBaseYaw = 0x8033c776; -s8DirModeYawOffset = 0x8033c778; -sPanDistance = 0x8033c77c; -sCannonYOffset = 0x8033c780; -sModeInfo = 0x8033c788; -sCastleEntranceOffset = 0x8033c7d0; -sParTrackIndex = 0x8033c7dc; -sParTrackPath = 0x8033c7e0; -sParTrackTransOff = 0x8033c7e8; -sCameraStoreCUp = 0x8033c808; -sCameraStoreCutscene = 0x8033c828; -gCameraMovementFlags = 0x8033c848; -sStatusFlags = 0x8033c84a; -sCurCreditsSplinePos = 0x8033c850; -sCurCreditsSplineFocus = 0x8033c950; -sCutsceneSplineSegment = 0x8033ca50; -sCutsceneSplineSegmentProgress = 0x8033ca54; -unused8033B6E8 = 0x8033ca58; -sCutsceneShot = 0x8033ca5a; -gCutsceneTimer = 0x8033ca5c; -sCutsceneVars = 0x8033ca60; -gObjCutsceneDone = 0x8033cbc8; -gCutsceneObjSpawn = 0x8033cbcc; -gCamera = 0x8033cbd0; -gObjectListArray = 0x8033cbe0; -gDebugInfoFlags = 0x8033d260; -gNumFindFloorMisses = 0x8033d264; -unused_8033BEF8 = 0x8033d268; -gUnknownWallCount = 0x8033d26c; -gObjectCounter = 0x8033d270; -gNumCalls = 0x8033d274; -gDebugInfo = 0x8033d280; -gDebugInfoOverwrite = 0x8033d380; -gTimeStopState = 0x8033d480; -gObjectPool = 0x8033d488; -gMacroObjectDefaultParent = 0x80360e88; -gObjectLists = 0x803610e8; -gFreeObjectList = 0x803610f0; -gMarioObject = 0x80361158; -gLuigiObject = 0x8036115c; -gCurrentObject = 0x80361160; -gCurBhvCommand = 0x80361164; -gPrevFrameObjectCount = 0x80361168; -gSurfaceNodesAllocated = 0x8036116c; -gSurfacesAllocated = 0x80361170; -gNumStaticSurfaceNodes = 0x80361174; -gNumStaticSurfaces = 0x80361178; -gObjectMemoryPool = 0x8036117c; -gCheckingSurfaceCollisionsForCamera = 0x80361180; -gFindFloorIncludeSurfaceIntangible = 0x80361182; -gEnvironmentRegions = 0x80361184; -gEnvironmentLevels = 0x80361188; -gDoorAdjacentRooms = 0x803611d8; -gMarioCurrentRoom = 0x80361250; -D_8035FEE2 = 0x80361252; -D_8035FEE4 = 0x80361254; -gTHIWaterDrained = 0x80361256; -gTTCSpeedSetting = 0x80361258; -gMarioShotFromCannon = 0x8036125a; -gCCMEnteredSlide = 0x8036125c; -gNumRoomedObjectsInMarioRoom = 0x8036125e; -gNumRoomedObjectsNotInMarioRoom = 0x80361260; -gWDWWaterLevelChanging = 0x80361262; -gMarioOnMerryGoRound = 0x80361264; -D_8035FF10 = 0x80361280; -gDebugPrintState1 = 0x80361290; -gDebugPrintState2 = 0x803612a0; -sMarioOnFlyingCarpet = 0x803612b0; -sSurfaceTypeBelowShadow = 0x803612b2; -gShadowAboveWaterOrLava = 0x803612b4; -gMarioOnIceOrCarpet = 0x803612b5; -sSkyBoxInfo = 0x803612c0; -gMovetexLastTextureId = 0x803612e0; -gFlyingCarpetState = 0x803612f0; -gPaintingMarioFloorType = 0x80361300; -gPaintingMarioXPos = 0x80361304; -gPaintingMarioYPos = 0x80361308; -gPaintingMarioZPos = 0x8036130c; -gPaintingMesh = 0x80361310; -gPaintingTriNorms = 0x80361314; -gRipplingPainting = 0x80361318; -gDddPaintingStatus = 0x8036131c; -sTextLabels = 0x80361320; -gDialogColorFadeTimer = 0x803613f0; -gLastDialogLineNum = 0x803613f2; -gDialogVariable = 0x803613f4; -gDialogTextAlpha = 0x803613f8; -gCutsceneMsgXOffset = 0x803613fa; -gCutsceneMsgYOffset = 0x803613fc; -gRedCoinsCollected = 0x803613fe; -gEnvFxBuffer = 0x80361400; -gSnowCylinderLastPos = 0x80361408; -gSnowParticleCount = 0x80361414; -gSnowParticleMaxCount = 0x80361416; -gEnvFxBubbleConfig = 0x80361420; -sNumActiveFirePiranhaPlants = 0x80361460; -sNumKilledFirePiranhaPlants = 0x80361464; -sObjSavedPosX = 0x80361468; -sObjSavedPosY = 0x8036146c; -sObjSavedPosZ = 0x80361470; -sMontyMoleHoleList = 0x80361474; -sMontyMoleKillStreak = 0x80361478; -sMontyMoleLastKilledPosX = 0x8036147c; -sMontyMoleLastKilledPosY = 0x80361480; -sMontyMoleLastKilledPosZ = 0x80361484; -sMasterTreadmill = 0x80361488; -gCurrAiBuffer = 0x80361490; -sSoundRequests = 0x80361498; -D_80360928 = 0x80361c98; -sUsedChannelsForSoundBank = 0x80361f98; -sCurrentSound = 0x80361fa8; -gSoundBanks = 0x80361fb8; -D_80363808 = 0x80364b78; -D_80363812 = 0x80364b82; -sBackgroundMusicQueue = 0x80364b88; -D_80363830 = 0x80364ba0; -D_803638B0 = 0x80364c20; -piMgrThread = 0x80365e70; -piMgrStack = 0x80366020; -__osPiMesgQueue = 0x80367020; -piMgrMesgBuff = 0x80367038; -D_80365CD0 = 0x80367040; -_osContCmdBuf = 0x80367050; -_osContPifCtrl = 0x8036708c; -_osLastSentSiCmd = 0x80367090; -_osContNumControllers = 0x80367091; -D_80365D28 = 0x80367098; -_osContMesgQueue = 0x803670b8; -_osContMesgBuff = 0x803670d0; -D_80365D80 = 0x803670f0; -_osCurrentTime = 0x80367110; -D_80365DA8 = 0x80367118; -__osViIntrCount = 0x8036711c; -D_80365DB0 = 0x80367120; -osPiMesgBuff = 0x80367130; -gOsPiMessageQueue = 0x80367138; -osSiMesgBuff = 0x80367150; -gOsSiMessageQueue = 0x80367158; -D_80365E00 = 0x80367170; -D_80365E3C = 0x803671ac; -D_80365E40 = 0x803671b0; -gInterruptedThread = 0x803672b0; -vec3f_copy = 0x80378800; -vec3f_set = 0x80378840; -vec3f_add = 0x8037888c; -vec3f_sum = 0x803788e4; -vec3s_copy = 0x8037893c; -vec3s_set = 0x8037897c; -vec3s_add = 0x803789c8; -vec3s_sum = 0x80378a20; -vec3s_sub = 0x80378a78; -vec3s_to_vec3f = 0x80378ad0; -vec3f_to_vec3s = 0x80378b34; -find_vector_perpendicular_to_plane = 0x80378c50; -vec3f_cross = 0x80378d38; -vec3f_normalize = 0x80378dc0; -mtxf_copy = 0x80378e68; -mtxf_identity = 0x80378eb4; -mtxf_translate = 0x80378f24; -mtxf_lookat = 0x80378f84; -mtxf_rotate_zxy_and_translate = 0x80379440; -mtxf_rotate_xyz_and_translate = 0x803795f0; -mtxf_billboard = 0x80379798; -mtxf_align_terrain_normal = 0x80379918; -mtxf_align_terrain_triangle = 0x80379aa4; -mtxf_mul = 0x80379f60; -mtxf_scale_vec3f = 0x8037a29c; -mtxf_mul_vec3s = 0x8037a348; -mtxf_to_mtx = 0x8037a434; -mtxf_rotate_xy = 0x8037a4b8; -get_pos_from_transform_mtx = 0x8037a550; -vec3f_get_dist_and_angle = 0x8037a69c; -vec3f_set_dist_and_angle = 0x8037a788; -approach_s32 = 0x8037a860; -approach_f32 = 0x8037a8b4; -atan2s = 0x8037a9a8; -atan2f = 0x8037ab88; -spline_get_weights = 0x8037abec; -anim_spline_init = 0x8037afb8; -anim_spline_poll = 0x8037afe8; -init_scene_graph_node_links = 0x8037b220; -init_graph_node_root = 0x8037b24c; -init_graph_node_ortho_projection = 0x8037b30c; -init_graph_node_perspective = 0x8037b380; -init_graph_node_start = 0x8037b448; -init_graph_node_master_list = 0x8037b4ac; -init_graph_node_render_range = 0x8037b530; -init_graph_node_switch_case = 0x8037b5b4; -init_graph_node_camera = 0x8037b670; -init_graph_node_translation_rotation = 0x8037b744; -init_graph_node_translation = 0x8037b7f8; -init_graph_node_rotation = 0x8037b89c; -init_graph_node_scale = 0x8037b940; -init_graph_node_object = 0x8037b9e0; -init_graph_node_culling_radius = 0x8037bad4; -init_graph_node_animated_part = 0x8037bb48; -init_graph_node_billboard = 0x8037bbec; -init_graph_node_display_list = 0x8037bc90; -init_graph_node_shadow = 0x8037bd24; -init_graph_node_object_parent = 0x8037bdb4; -init_graph_node_generated = 0x8037be28; -init_graph_node_background = 0x8037becc; -init_graph_node_held_object = 0x8037bf84; -geo_add_child = 0x8037c044; -geo_remove_child = 0x8037c0bc; -geo_make_first_child = 0x8037c138; -geo_call_global_function_nodes_helper = 0x8037c1e4; -geo_call_global_function_nodes = 0x8037c360; -geo_reset_object_node = 0x8037c3d0; -geo_obj_init = 0x8037c448; -geo_obj_init_spawninfo = 0x8037c51c; -geo_obj_init_animation = 0x8037c658; -geo_obj_init_animation_accel = 0x8037c708; -retrieve_animation_index = 0x8037c7d8; -geo_update_animation_frame = 0x8037c844; -geo_retreive_animation_translation = 0x8037c9e8; -geo_find_root = 0x8037cb10; -read_vec3s_to_vec3f = 0x8037cb60; -read_vec3s = 0x8037cbc0; -read_vec3s_angle = 0x8037cbfc; -register_scene_graph_node = 0x8037cc74; -geo_layout_cmd_branch_and_link = 0x8037cd60; -geo_layout_cmd_end = 0x8037ce24; -geo_layout_cmd_branch = 0x8037cee8; -geo_layout_cmd_return = 0x8037cf70; -geo_layout_cmd_open_node = 0x8037cfc0; -geo_layout_cmd_close_node = 0x8037d018; -geo_layout_cmd_assign_as_view = 0x8037d050; -geo_layout_cmd_update_node_flags = 0x8037d0d0; -geo_layout_cmd_node_root = 0x8037d1d0; -geo_layout_cmd_node_ortho_projection = 0x8037d328; -geo_layout_cmd_node_perspective = 0x8037d3a4; -geo_layout_cmd_node_start = 0x8037d48c; -geo_layout_cmd_nop3 = 0x8037d4dc; -geo_layout_cmd_node_master_list = 0x8037d500; -geo_layout_cmd_node_level_of_detail = 0x8037d55c; -geo_layout_cmd_node_switch_case = 0x8037d5d4; -geo_layout_cmd_node_camera = 0x8037d640; -geo_layout_cmd_node_translation_rotation = 0x8037d6f0; -geo_layout_cmd_node_translation = 0x8037d8d4; -geo_layout_cmd_node_rotation = 0x8037d998; -geo_layout_cmd_node_scale = 0x8037da5c; -geo_layout_cmd_nop2 = 0x8037db50; -geo_layout_cmd_node_animated_part = 0x8037db74; -geo_layout_cmd_node_billboard = 0x8037dc10; -geo_layout_cmd_node_display_list = 0x8037dcd4; -geo_layout_cmd_node_shadow = 0x8037dd4c; -geo_layout_cmd_node_object_parent = 0x8037dddc; -geo_layout_cmd_node_generated = 0x8037de34; -geo_layout_cmd_node_background = 0x8037de94; -geo_layout_cmd_nop = 0x8037def8; -geo_layout_cmd_copy_view = 0x8037df1c; -geo_layout_cmd_node_held_obj = 0x8037dfd4; -geo_layout_cmd_node_culling_radius = 0x8037e058; -process_geo_layout = 0x8037e0b4; -level_script_execute = 0x803805c8; -f32_find_wall_collision = 0x80380de8; -find_wall_collisions = 0x80380e8c; -find_ceil = 0x80381264; -unused_obj_find_floor_height = 0x80381470; -find_floor_height_and_data = 0x803814b8; -find_floor_height = 0x80381794; -unused_find_dynamic_floor = 0x803817e0; -find_floor = 0x80381900; -find_water_level = 0x80381ba0; -find_poison_gas_level = 0x80381d3c; -debug_surface_list_info = 0x80381f08; -unused_resolve_floor_or_ceil_collisions = 0x80382294; -alloc_surface_pools = 0x80383340; -load_area_terrain = 0x803833b8; -clear_dynamic_surfaces = 0x803835a4; -transform_object_vertices = 0x80383614; -load_object_surfaces = 0x80383828; -load_object_collision_model = 0x803839cc; -random_u16 = 0x80383bb0; -random_float = 0x80383cb4; -random_sign = 0x80383d1c; -obj_update_gfx_pos_and_angle = 0x80383d68; -stub_behavior_script_2 = 0x80385bf0; -cur_obj_update = 0x80385c00; -identityMtx = 0x80385f90; -zeroMtx = 0x80385fb0; -gVec3fZero = 0x80385fd0; -gVec3sZero = 0x80385fdc; -gVec3fOne = 0x80385fe4; -gVec3sOne = 0x80385ff0; -gSineTable = 0x80386000; -gCosineTable = 0x80387000; -gArctanTable = 0x8038b000; -GeoLayoutJumpTable = 0x8038b810; -unused_8038B894 = 0x8038b894; -gSplineKeyframe = 0x8038bc90; -gSplineKeyframeFraction = 0x8038bc94; -gSplineState = 0x8038bc98; -gGraphNodePool = 0x8038bca0; -gCurRootGraphNode = 0x8038bca4; -D_8038BCA8 = 0x8038bca8; -gGeoViews = 0x8038bcac; -gGeoNumViews = 0x8038bcb0; -gGeoLayoutStack = 0x8038bcb8; -gCurGraphNodeList = 0x8038bcf8; -gCurGraphNodeIndex = 0x8038bd78; -gGeoLayoutStackIndex = 0x8038bd7a; -D_8038BD7C = 0x8038bd7c; -gGeoLayoutReturnIndex = 0x8038bd7e; -gGeoLayoutCommand = 0x8038bd80; -gObjParentGraphNode = 0x8038bd88; -sFloorGeo = 0x8038be30; -unused8038BE90 = 0x8038be90; -gStaticSurfacePartition = 0x8038be98; -gDynamicSurfacePartition = 0x8038d698; -sSurfaceNodePool = 0x8038ee98; -sSurfacePool = 0x8038ee9c; -sSurfacePoolSize = 0x8038eea0; -unused8038EEA8 = 0x8038eea8; -gFrameBuffer0 = 0x8038f800; -gFrameBuffer1 = 0x803b5000; -gFrameBuffer2 = 0x803da800; -run_press_start_demo_timer = 0x8016f000; -level_select_input_loop = 0x8016f128; -intro_default = 0x8016f3cc; -intro_game_over = 0x8016f4b0; -intro_play_its_a_me_mario = 0x8016f564; -lvl_intro_update = 0x8016f5b0; -geo_title_screen = 0x8016f670; -geo_fade_transition = 0x8016f984; -intro_backdrop_one_image = 0x8016fbb0; -geo_intro_backdrop = 0x8016fe70; -geo_game_over_tile = 0x8016fffc; -beh_yellow_background_menu_init = 0x80170280; -beh_yellow_background_menu_loop = 0x801702b8; -check_clicked_button = 0x801702e8; -bhv_menu_button_init = 0x80170aec; -bhv_menu_button_loop = 0x80170b1c; -exit_score_file_to_score_menu = 0x80170cb4; -render_score_menu_buttons = 0x80170d60; -check_score_menu_clicked_buttons = 0x80171168; -render_copy_menu_buttons = 0x8017137c; -copy_action_file_button = 0x80171784; -check_copy_menu_clicked_buttons = 0x80171a2c; -render_erase_menu_buttons = 0x80171c0c; -erase_action_file_button = 0x80172014; -check_erase_menu_clicked_buttons = 0x801721ac; -render_sound_mode_menu_buttons = 0x8017236c; -check_sound_mode_menu_clicked_buttons = 0x801724b8; -load_main_menu_save_file = 0x8017261c; -return_to_main_menu = 0x80172644; -load_score_menu_from_submenu = 0x80172818; -load_copy_menu_from_submenu = 0x801729e0; -load_erase_menu_from_submenu = 0x80172ba8; -bhv_menu_button_manager_init = 0x80172d70; -check_main_menu_clicked_buttons = 0x801731a8; -bhv_menu_button_manager_loop = 0x80173430; -handle_cursor_button_input = 0x80173780; -handle_controller_cursor_input = 0x80173900; -print_menu_cursor = 0x80173ae0; -print_hud_lut_string_fade = 0x80173c6c; -print_generic_string_fade = 0x80173d64; -update_text_fade_out = 0x80173e54; -print_save_file_star_count = 0x80173ee4; -print_main_menu_strings = 0x80173fd4; -score_menu_display_message = 0x80174324; -print_score_menu_strings = 0x801743ac; -copy_menu_display_message = 0x801746f8; -copy_menu_update_message = 0x80174804; -print_copy_menu_strings = 0x801749b0; -print_erase_menu_prompt = 0x80174ca8; -erase_menu_display_message = 0x80175238; -erase_menu_update_message = 0x80175404; -print_erase_menu_strings = 0x801755a8; -print_sound_mode_menu_strings = 0x801758a0; -print_score_file_castle_secret_stars = 0x80175b14; -print_score_file_course_coin_score = 0x80175b90; -print_score_file_star_score = 0x80175d2c; -print_save_file_scores = 0x80175dfc; -geo_file_select_strings_and_menu_cursor = 0x80176688; -lvl_init_menu_values_and_cursor_pos = 0x801766dc; -lvl_update_obj_and_load_file_selected = 0x801768a0; -bhv_act_selector_star_type_loop = 0x801768e0; -render_100_coin_star = 0x80176a74; -bhv_act_selector_init = 0x80176b20; -bhv_act_selector_loop = 0x80176df0; -print_course_number = 0x80176fc4; -print_act_selector_strings = 0x80177144; -geo_act_selector_strings = 0x80177518; -lvl_init_act_selector_values_and_stars = 0x80177560; -lvl_update_obj_and_load_act_button_actions = 0x80177610; -__main__ = 0x80177710; -empty_mem_block = 0x80177820; -into_free_memblock = 0x80177924; -make_mem_block = 0x801779dc; -gd_free_mem = 0x80177bb8; -gd_request_mem = 0x80177c58; -gd_add_mem_to_heap = 0x80177e7c; -init_mem_block_lists = 0x80177f0c; -print_list_stats = 0x80177f34; -mem_stats = 0x801780b0; -gd_reset_sfx = 0x801781e0; -gd_new_sfx_to_play = 0x80178200; -gd_sfx_played = 0x8017822c; -gd_play_sfx = 0x80178254; -setup_lights = 0x80178280; -Unknown801781DC = 0x8017831c; -draw_shape = 0x801785dc; -draw_shape_2d = 0x8017894c; -draw_light = 0x80178a40; -draw_material = 0x80178c5c; -create_mtl_gddl_if_empty = 0x80178d90; -check_face_bad_vtx = 0x80178dec; -gd_get_colour = 0x80178ed8; -Unknown80178ECC = 0x8017900c; -draw_face = 0x80179120; -draw_rect_fill = 0x80179368; -draw_rect_stroke = 0x801793cc; -Unknown801792F0 = 0x80179430; -draw_label = 0x80179490; -draw_net = 0x80179768; -draw_gadget = 0x801798ac; -draw_camera = 0x801799ac; -Unknown80179ACC = 0x80179c0c; -func_80179B64 = 0x80179ca4; -func_80179B9C = 0x80179cdc; -check_grabable_click = 0x80179e08; -drawscene = 0x8017a010; -nop_obj_draw = 0x8017a344; -draw_shape_faces = 0x8017a358; -draw_particle = 0x8017a44c; -draw_bone = 0x8017a690; -draw_joint = 0x8017a7e4; -draw_group = 0x8017a900; -draw_plane = 0x8017a958; -apply_obj_draw_fn = 0x8017a9e0; -register_light = 0x8017aa5c; -Proc8017A980 = 0x8017aaf0; -update_shaders = 0x8017aed8; -create_shape_mtl_gddls = 0x8017afc8; -unref_8017AEDC = 0x8017b01c; -create_shape_gddl = 0x8017b088; -create_gddl_for_shapes = 0x8017b168; -map_face_materials = 0x8017b1a4; -calc_vtx_normal = 0x8017b258; -find_thisface_verts = 0x8017b3dc; -map_vertices = 0x8017b538; -unpick_obj = 0x8017b608; -find_closest_pickable_obj = 0x8017b654; -set_view_update_camera = 0x8017b730; -update_view = 0x8017b764; -unref_8017BC94 = 0x8017bdd4; -func_8017BCB0 = 0x8017bdf0; -func_8017BD20 = 0x8017be60; -func_8017BE60 = 0x8017bfa0; -func_8017BED0 = 0x8017c010; -get_obj_name_str = 0x8017c034; -make_object = 0x8017c300; -make_zone = 0x8017c810; -func_8017C7A0 = 0x8017c8e0; -make_link_to_obj = 0x8017c940; -make_vtx_link = 0x8017ca00; -make_valptrs = 0x8017cac4; -reset_plane = 0x8017cb4c; -make_plane = 0x8017cf7c; -make_camera = 0x8017d010; -make_material = 0x8017d22c; -make_light = 0x8017d2d4; -make_view = 0x8017d3e8; -make_animator = 0x8017d67c; -make_weight = 0x8017d6f4; -make_group_of_type = 0x8017d76c; -sprint_obj_id = 0x8017d838; -make_group = 0x8017da04; -addto_group = 0x8017dc14; -addto_groupfirst = 0x8017dd00; -group_contains_obj = 0x8017ddfc; -show_details = 0x8017de80; -func_8017E1E8 = 0x8017e328; -func_8017E20C = 0x8017e34c; -gd_loadtexture = 0x8017e370; -func_8017E2B8 = 0x8017e3f8; -func_8017E2F0 = 0x8017e430; -apply_to_obj_types_in_group = 0x8017e520; -func_8017E584 = 0x8017e6c4; -func_8017E838 = 0x8017e978; -func_8017E9EC = 0x8017eb2c; -func_8017EA94 = 0x8017ebd4; -func_8017EB24 = 0x8017ec64; -func_8017ED00 = 0x8017ee40; -func_8017EDCC = 0x8017ef0c; -gd_plane_point_within = 0x8017ef9c; -func_8017F054 = 0x8017f194; -func_8017F210 = 0x8017f350; -func_8017F3CC = 0x8017f50c; -func_8017F404 = 0x8017f544; -func_8017F424 = 0x8017f564; -move_animator = 0x8017f704; -drag_picked_object = 0x80180764; -move_animators = 0x80180a64; -find_and_drag_picked_object = 0x80180ab4; -move_camera = 0x80180af0; -move_cameras_in_grp = 0x80181114; -func_8018100C = 0x8018114c; -move_lights_in_grp = 0x801814b8; -move_group_members = 0x801814f0; -proc_view_movement = 0x8018159c; -reset_nets_and_gadgets = 0x80181634; -null_obj_lists = 0x80181678; -func_801815E0 = 0x80181720; -func_80181760 = 0x801818a0; -move_skin = 0x8018197c; -func_80181894 = 0x801819d4; -func_801819D0 = 0x80181b10; -reset_weight = 0x80181c20; -func_80181B88 = 0x80181cc8; -func_80181C00 = 0x80181d40; -Unknown80181D14 = 0x80181e54; -func_80181EB0 = 0x80181ff0; -func_80182088 = 0x801821c8; -func_801823A0 = 0x801824e0; -make_particle = 0x80182630; -func_801825FC = 0x8018273c; -func_80182778 = 0x801828b8; -func_80182A08 = 0x80182b48; -move_particle = 0x80182dc4; -move_particles_in_grp = 0x801836b0; -Unknown801835C8 = 0x80183708; -Unknown80183870 = 0x801839b0; -Unknown80183884 = 0x801839c4; -Unknown80183898 = 0x801839d8; -Unknown801838B4 = 0x801839f4; -func_801838D0 = 0x80183a10; -push_dynobj_stash = 0x80183a50; -pop_dynobj_stash = 0x80183a80; -reset_dynlist = 0x80183ab0; -proc_dynlist = 0x80183b20; -d_copystr_to_idbuf = 0x8018435c; -d_catstr_to_idbuf = 0x80184400; -cpy_idbuf_to_backbuf = 0x801844a8; -cpy_backbuf_to_idbuf = 0x801844dc; -get_dynobj_info = 0x80184510; -reset_dynamic_objs = 0x80184630; -d_add_net_with_subgroup = 0x8018468c; -d_end_net_subgroup = 0x80184740; -d_attach_joint_to_net = 0x801847ac; -d_make_netfromshapeid = 0x80184828; -d_make_netfromshape_ptrptr = 0x801848a0; -add_to_dynobj_list = 0x801848e8; -print_int_dynid = 0x80184b84; -d_makeobj = 0x80184bf8; -d_attach = 0x80184efc; -d_attach_to = 0x80184fc4; -d_attachto_dynid = 0x8018536c; -copy_bytes = 0x80185410; -alloc_animdata = 0x8018545c; -chk_shapegen = 0x80185a18; -d_set_nodegroup = 0x801861b0; -d_set_matgroup = 0x80186350; -d_set_texture_st = 0x80186440; -d_use_texture = 0x801864dc; -d_set_skinshape = 0x80186588; -d_map_materials = 0x8018666c; -d_map_vertices = 0x801866f8; -d_set_planegroup = 0x80186784; -d_set_shapeptrptr = 0x801868a4; -d_set_shapeptr = 0x80186a60; -d_use_obj = 0x80186bfc; -set_cur_dynobj = 0x80186c84; -d_start_group = 0x80186cac; -d_end_group = 0x80186cdc; -d_addto_group = 0x80186de0; -dynid_is_int = 0x80186e5c; -d_set_init_pos = 0x80186e74; -d_set_velocity = 0x8018710c; -d_get_velocity = 0x80187244; -d_set_torque = 0x8018739c; -d_get_init_pos = 0x80187480; -d_get_init_rot = 0x80187608; -d_set_rel_pos = 0x80187794; -d_addto_rel_pos = 0x80187ab0; -d_get_rel_pos = 0x80187c80; -d_get_att_objgroup = 0x80187e78; -d_get_att_to_obj = 0x80187f54; -d_get_scale = 0x80188030; -d_set_att_offset = 0x801881b8; -d_set_att_to_offset = 0x8018837c; -d_get_att_offset = 0x801884d0; -d_get_att_flags = 0x80188624; -d_set_world_pos = 0x80188738; -d_set_normal = 0x801889a8; -d_get_world_pos_ptr = 0x80188ab0; -d_get_world_pos = 0x80188b7c; -d_make_vertex = 0x801891f4; -d_set_scale = 0x80189240; -d_set_rotation = 0x8018945c; -d_center_of_gravity = 0x80189584; -d_set_shape_offset = 0x80189660; -d_add_valptr = 0x8018973c; -d_add_valproc = 0x801898d8; -d_link_with_ptr = 0x80189990; -d_link_with = 0x80189cd8; -d_set_flags = 0x80189da8; -d_clear_flags = 0x80189fb4; -d_set_parm_f = 0x8018a12c; -d_set_parm_ptr = 0x8018a358; -d_set_obj_draw_flag = 0x8018a530; -d_set_type = 0x8018a590; -d_set_id = 0x8018a700; -d_set_colour_num = 0x8018a828; -d_set_material = 0x8018a9ec; -d_friction = 0x8018aa9c; -d_set_spring = 0x8018ab78; -d_set_ambient = 0x8018ac24; -d_set_diffuse = 0x8018ad00; -d_set_control_type = 0x8018ae30; -d_get_plane = 0x8018aedc; -d_get_matrix = 0x8018afb0; -d_set_matrix = 0x8018b0fc; -d_set_rot_mtx = 0x8018b210; -d_get_rot_mtx_ptr = 0x8018b2e8; -d_set_idn_mtx = 0x8018b3a4; -d_get_matrix_ptr = 0x8018b4d4; -d_get_idn_mtx_ptr = 0x8018b5e8; -d_calc_world_dist_btwn = 0x8018b6bc; -d_set_skin_weight = 0x8018b758; -get_objvalue = 0x8018b830; -Unknown8018B7A8 = 0x8018b8e8; -Proc8018B83C = 0x8018b97c; -cat_grp_name_to_buf = 0x8018b9d8; -Unknown8018B900 = 0x8018ba40; -make_label = 0x8018bb00; -make_gadget = 0x8018bbc0; -set_objvalue = 0x8018bc9c; -set_static_gdgt_value = 0x8018bd54; -func_8018BCB8 = 0x8018bdf8; -adjust_gadget = 0x8018be40; -reset_gadget = 0x8018c0f4; -reset_gadgets_in_grp = 0x8018c2b0; -new_memtracker = 0x8018c2f0; -get_memtracker = 0x8018c3a4; -start_memtracker = 0x8018c44c; -print_most_recent_memtracker = 0x8018c550; -stop_memtracker = 0x8018c598; -remove_all_memtrackers = 0x8018c704; -get_memtracker_by_id = 0x8018c790; -print_all_memtrackers = 0x8018c7b4; -print_all_timers = 0x8018c86c; -deactivate_timing = 0x8018c920; -activate_timing = 0x8018c938; -remove_all_timers = 0x8018c954; -new_timer = 0x8018ca88; -get_timer = 0x8018cb34; -get_timer_checked = 0x8018cbf4; -get_timernum = 0x8018cc54; -split_timer_ptr = 0x8018ccc0; -split_all_timers = 0x8018cd9c; -start_all_timers = 0x8018ce0c; -start_timer = 0x8018cea0; -restart_timer = 0x8018cf70; -split_timer = 0x8018d02c; -stop_timer = 0x8018d088; -get_scaled_timer_total = 0x8018d160; -get_timer_total = 0x8018d1a8; -fatal_print = 0x8018d1f8; -print_stack_trace = 0x8018d228; -fatal_printf = 0x8018d298; -add_to_stacktrace = 0x8018d560; -imout = 0x8018d5f0; -func_8018D560 = 0x8018d6a0; -gd_atoi = 0x8018d7e8; -gd_lazy_atof = 0x8018d948; -sprint_num_as_hex = 0x8018d988; -sprint_num = 0x8018d9e8; -int_sci_notation = 0x8018dae4; -sprint_val_withspecifiers = 0x8018db38; -gd_strcpy = 0x8018ddd8; -ascii_to_uppercase = 0x8018de1c; -gd_strdup = 0x8018de9c; -gd_strlen = 0x8018df18; -gd_strcat = 0x8018df6c; -gd_str_not_equal = 0x8018dff0; -gd_str_contains = 0x8018e098; -gd_feof = 0x8018e128; -gd_set_feof = 0x8018e14c; -gd_fopen = 0x8018e16c; -gd_fread = 0x8018e37c; -gd_fclose = 0x8018e4a8; -gd_get_file_size = 0x8018e4c4; -is_newline = 0x8018e4e0; -gd_fread_line = 0x8018e518; -Proc8018E520 = 0x8018e660; -func_8018EBE8 = 0x8018ed28; -func_8018EE5C = 0x8018ef9c; -set_joint_vecs = 0x8018f0b8; -make_joint = 0x8018f188; -make_joint_withshape = 0x8018f388; -func_8018F328 = 0x8018f468; -func_8018F4CC = 0x8018f60c; -func_8018F520 = 0x8018f660; -func_8018F89C = 0x8018f9dc; -func_8018FA68 = 0x8018fba8; -set_skin_weight = 0x8018fc08; -func_8018FB58 = 0x8018fc98; -add_joint2bone = 0x8018fde4; -make_bone = 0x8018fedc; -func_8018FF14 = 0x80190054; -func_8018FF28 = 0x80190068; -func_8018FF88 = 0x801900c8; -func_8018FFE8 = 0x80190128; -func_80190168 = 0x801902a8; -func_801903E8 = 0x80190528; -func_80190574 = 0x801906b4; -func_801909B4 = 0x80190af4; -func_80190A20 = 0x80190b60; -func_80190B54 = 0x80190c94; -func_80190E68 = 0x80190fa8; -func_80190F3C = 0x8019107c; -func_801911A8 = 0x801912e8; -func_80191220 = 0x80191360; -func_801913C0 = 0x80191500; -func_801913F0 = 0x80191530; -func_801914F8 = 0x80191638; -func_8019150C = 0x8019164c; -func_80191604 = 0x80191744; -func_80191824 = 0x80191964; -func_801918F4 = 0x80191a34; -func_80191A1C = 0x80191b5c; -func_80191BF8 = 0x80191d38; -func_80191D60 = 0x80191ea0; -func_80191E54 = 0x80191f94; -func_80191E88 = 0x80191fc8; -reset_joint_counts = 0x80192028; -func_80191F10 = 0x80192050; -reset_net = 0x80192204; -func_80192294 = 0x801923d4; -func_801922FC = 0x8019243c; -make_net = 0x801924f4; -func_80192528 = 0x80192668; -func_801926A4 = 0x801927e4; -func_80192AD0 = 0x80192c10; -move_bonesnet = 0x80192d9c; -func_80192CCC = 0x80192e0c; -convert_gd_verts_to_Vn = 0x801930d8; -convert_gd_verts_to_Vtx = 0x80193424; -convert_net_verts = 0x8019353c; -func_801934D0 = 0x80193610; -move_net = 0x801936dc; -move_nets = 0x80193804; -func_8019373C = 0x8019387c; -func_80193848 = 0x80193988; -gd_print_net = 0x801939fc; -reset_net_count = 0x80193c50; -gd_sqrt_f = 0x80193c70; -gd_mat4f_lookat = 0x80193ca8; -gd_scale_mat4f_by_vec3f = 0x8019429c; -gd_rot_mat_about_vec = 0x80194360; -gd_add_vec3f_to_mat4f_offset = 0x80194424; -gd_create_origin_lookat = 0x80194498; -gd_clamp_f32 = 0x80194868; -gd_clamp_vec3f = 0x801948b0; -gd_rot_2d_vec = 0x801949c0; -gd_rot_mat_about_row = 0x80194acc; -gd_absrot_mat4 = 0x80194b94; -gd_vec3f_magnitude = 0x80194cd8; -gd_normalize_vec3f = 0x80194d34; -gd_cross_vec3f = 0x80194e54; -gd_dot_vec3f = 0x80194ef8; -gd_invert_elements_mat4f = 0x80194f3c; -gd_inverse_mat4f = 0x80194fbc; -gd_adjunct_mat4f = 0x801950d0; -gd_mat4f_det = 0x801956b8; -gd_3x3_det = 0x80195984; -gd_2x2_det = 0x80195a4c; -gd_create_neg_vec_zero_first_mat_row = 0x80195a90; -gd_broken_quat_to_vec3f = 0x80195b20; -gd_quat_rotation = 0x80195c44; -gd_shift_mat_up = 0x80195db8; -gd_create_quat_rot_mat = 0x80195ed8; -gd_create_rot_matrix = 0x80196114; -gd_create_rot_mat_angular = 0x80196334; -gd_set_identity_mat4 = 0x801963c0; -gd_copy_mat4f = 0x801964a0; -gd_rotate_and_translate_vec3f = 0x80196570; -gd_mat4f_mult_vec3f = 0x80196680; -gd_mult_mat4f = 0x80196754; -gd_print_vec = 0x801970cc; -gd_print_plane = 0x801970e8; -gd_print_mtx = 0x80197104; -gd_print_quat = 0x801971a8; -gd_rot_mat_offset = 0x80197230; -func_80197280 = 0x801973c0; -calc_face_normal = 0x80197400; -gd_make_vertex = 0x8019764c; -make_face_with_colour = 0x80197764; -make_face_with_material = 0x80197810; -Unknown8019773C = 0x8019787c; -add_3_vtx_to_face = 0x80197904; -make_shape = 0x8019797c; -clear_buf_to_cr = 0x80197b14; -get_current_buf_char = 0x80197b44; -get_and_advance_buf = 0x80197b70; -load_next_line_into_buf = 0x80197bd4; -is_line_end = 0x80197c54; -is_white_space = 0x80197c8c; -scan_to_next_non_whitespace = 0x80197cc4; -is_next_buf_word = 0x80197db0; -getfloat = 0x80197e90; -getint = 0x80198028; -Unknown80198068 = 0x801981a8; -func_8019807C = 0x801981bc; -func_801980E8 = 0x80198228; -Unknown80198154 = 0x80198294; -Unknown80198184 = 0x801982c4; -scale_obj_position = 0x80198330; -translate_obj_position = 0x801983f8; -scale_verts_in_shape = 0x8019848c; -translate_verts_in_shape = 0x80198514; -Unknown80198444 = 0x80198584; -Unknown80198524 = 0x80198664; -Unknown801985E8 = 0x80198728; -get_3DG1_shape = 0x80198844; -get_OBJ_shape = 0x80198d40; -group_faces_in_mtl_grp = 0x801990d0; -find_or_add_new_mtl = 0x801991f4; -read_ARK_shape = 0x80199330; -get_shape_from_file = 0x801997a0; -make_grid_shape = 0x801998e8; -Unknown80199E44 = 0x80199f84; -Unknown80199E88 = 0x80199fc8; -make_netfromshape = 0x8019a024; -animate_mario_head_gameover = 0x8019a0e0; -animate_mario_head_normal = 0x8019a1a8; -load_mario_head = 0x8019a4b8; -load_shapes2 = 0x8019abf8; -Unknown8019AB98 = 0x8019acd8; -Unknown8019ADC4 = 0x8019af04; -Unknown8019AEC4 = 0x8019b004; -get_alloc_mem_amt = 0x8019b060; -gd_get_ostime = 0x8019b080; -get_time_scale = 0x8019b0b0; -dump_disp_list = 0x8019b0d0; -next_gfx = 0x8019b158; -next_light = 0x8019b1e4; -next_mtx = 0x8019b278; -next_vtx = 0x8019b304; -next_vp = 0x8019b390; -gd_sin_d = 0x8019b41c; -gd_cos_d = 0x8019b45c; -gd_sqrt_d = 0x8019b49c; -Unknown8019B3D4 = 0x8019b514; -gd_printf = 0x8019b53c; -gd_exit = 0x8019bb0c; -gd_free = 0x8019bb44; -gd_allocblock = 0x8019bb90; -gd_malloc = 0x8019bc88; -gd_malloc_perm = 0x8019bd58; -gd_malloc_temp = 0x8019bd90; -Unknown8019BC88 = 0x8019bdc8; -Unknown8019BCD4 = 0x8019be14; -func_8019BD0C = 0x8019be4c; -branch_cur_dl_to_num = 0x8019bf08; -Unknown8019BE40 = 0x8019bf80; -setup_stars = 0x8019bfb0; -setup_timers = 0x8019c240; -Unknown8019C270 = 0x8019c3b0; -Unknown8019C288 = 0x8019c3c8; -gd_add_to_heap = 0x8019c418; -gdm_init = 0x8019c450; -gdm_setup = 0x8019c4ec; -Unknown8019C448 = 0x8019c588; -print_gdm_stats = 0x8019c59c; -make_view_withgrp = 0x8019c5f0; -gdm_maketestdl = 0x8019c684; -set_time_scale = 0x8019c828; -Unknown8019C840 = 0x8019c840; -gd_vblank = 0x8019c874; -gd_copy_p1_contpad = 0x8019c930; -gd_sfx_to_play = 0x8019c9c8; -gdm_gettestdl = 0x8019c9f8; -gdm_getpos = 0x8019cd88; -bound_on_active_view = 0x8019ce3c; -fatal_no_dl_mem = 0x8019cf18; -alloc_displaylist = 0x8019cf44; -cpy_remaining_gddl = 0x8019d01c; -create_child_gdl = 0x8019d110; -new_gd_dl = 0x8019d168; -gd_rsp_init = 0x8019d3b8; -gd_rdp_init = 0x8019d42c; -gd_draw_rect = 0x8019d4a0; -gd_draw_border_rect = 0x8019d848; -gd_set_fill = 0x8019e438; -gd_set_zb_area = 0x8019e724; -gd_set_color_fb = 0x8019e780; -reset_cur_dl_indices = 0x8019e89c; -reset_dlnum_indices = 0x8019e93c; -stash_current_gddl = 0x8019e9b4; -pop_gddl_stash = 0x8019e9d4; -gd_startdisplist = 0x8019e9f4; -gd_enddlsplist = 0x8019eb44; -gd_enddlsplist_parent = 0x8019ebac; -Unknown8019EBCC = 0x8019ed0c; -new_gddl_from = 0x8019ed48; -Unknown8019EC88 = 0x8019edc8; -mat4_to_mtx = 0x8019ee34; -add_mat4_to_dl = 0x8019efac; -add_mat4_load_to_dl = 0x8019f054; -idn_mtx_load_gddl = 0x8019f100; -idn_mtx_push_gddl = 0x8019f16c; -pop_mtx_gddl = 0x8019f1d8; -translate_mtx_gddl = 0x8019f224; -translate_load_mtx_gddl = 0x8019f2dc; -func_8019F258 = 0x8019f398; -func_8019F2C4 = 0x8019f404; -func_8019F318 = 0x8019f458; -check_tri_display = 0x8019fb18; -make_vtx_if_new = 0x8019fba0; -func_8019FEF0 = 0x801a0030; -add_tri_to_dl = 0x801a0094; -func_801A0038 = 0x801a0178; -func_801A0070 = 0x801a01b0; -func_801A01EC = 0x801a032c; -func_801A025C = 0x801a039c; -func_801A02B8 = 0x801a03f8; -set_light_id = 0x801a0464; -set_light_num = 0x801a047c; -create_mtl_gddl = 0x801a0494; -branch_to_gddl = 0x801a0588; -func_801A0478 = 0x801a05b8; -func_801A086C = 0x801a09ac; -set_Vtx_norm_buf_1 = 0x801a1728; -set_Vtx_norm_buf_2 = 0x801a1804; -set_gd_mtx_parameters = 0x801a18f0; -func_801A180C = 0x801a194c; -func_801A1A00 = 0x801a1b40; -Unknown801A1B30 = 0x801a1c70; -Unknown801A1E70 = 0x801a1fb0; -gd_set_one_cycle = 0x801a2450; -Unknown801A2360 = 0x801a24a0; -gddl_is_loading_stub_dl = 0x801a24b4; -gddl_is_loading_shine_dl = 0x801a24c8; -start_view_dl = 0x801a2588; -parse_p1_controller = 0x801a2984; -Unknown801A324C = 0x801a338c; -Unknown801A32F4 = 0x801a3434; -func_801A3324 = 0x801a3464; -func_801A3370 = 0x801a34b0; -Unknown801A33F8 = 0x801a3538; -Unknown801A347C = 0x801a35bc; -border_active_view = 0x801a3620; -gd_shading = 0x801a36b4; -gd_getproperty = 0x801a371c; -gd_setproperty = 0x801a3788; -stub_801A3AE0 = 0x801a3c20; -gd_create_ortho_matrix = 0x801a3c30; -gd_create_perspective_matrix = 0x801a3dcc; -setup_view_buffers = 0x801a3f9c; -gd_init_controllers = 0x801a4468; -func_801A43DC = 0x801a451c; -func_801A43F0 = 0x801a4530; -func_801A4410 = 0x801a4550; -func_801A4424 = 0x801a4564; -func_801A4438 = 0x801a4578; -gd_gentexture = 0x801a45e0; -Unknown801A45E4 = 0x801a4724; -Unknown801A47B8 = 0x801a48f8; -stub_801A47DC = 0x801a4924; -Unknown801A47F4 = 0x801a4934; -func_801A4808 = 0x801a4948; -func_801A4848 = 0x801a4988; -func_801A48B4 = 0x801a49f4; -func_801A48C4 = 0x801a4a04; -func_801A48D8 = 0x801a4a18; -set_active_view = 0x801a4a30; -stub_801A4908 = 0x801a4a48; -func_801A4918 = 0x801a4a58; -Unknown801A4B04 = 0x801a4c44; -update_cursor = 0x801a4d4c; -Unknown801A4F58 = 0x801a5098; -Proc801A5110 = 0x801a5250; -update_view_and_dl = 0x801a52a8; -func_801A520C = 0x801a534c; -Unknown801A5344 = 0x801a5484; -gd_init = 0x801a5538; -Unknown801A5910 = 0x801a5a50; -func_801A5998 = 0x801a5ad8; -func_801A59AC = 0x801a5aec; -func_801A59C0 = 0x801a5b00; -init_pick_buf = 0x801a5b14; -store_in_pickbuf = 0x801a5b44; -get_cur_pickbuf_offset = 0x801a5b8c; -Unknown801A5A80 = 0x801a5bc0; -Unknown801A5A94 = 0x801a5bd4; -stub_801A5AA8 = 0x801a5be8; -Unknown801A5AB8 = 0x801a5bf8; -Unknown801A5AE0 = 0x801a5c20; -set_vtx_tc_buf = 0x801a5c98; -func_801A5BE8 = 0x801a5d28; -cvrt_val_to_kb = 0x801a5d64; -Unknown801A5C80 = 0x801a5dc0; -Unknown801A5D90 = 0x801a5ed0; -Unknown801A5FF8 = 0x801a6138; -gd_put_sprite = 0x801a6430; -gd_setup_cursor = 0x801a676c; -view_proc_print_timers = 0x801a6904; -make_timer_gadgets = 0x801a6954; -Unknown801A6E30 = 0x801a6f70; -Unknown801A6E44 = 0x801a6f84; -gd_block_dma = 0x801a6f98; -load_dynlist = 0x801a7074; -stub_801A71B8 = 0x801a72f8; -func_801A71CC = 0x801a730c; -stub_801A76E0 = 0x801a7820; -introBackgroundDlRows = 0x801a7c70; -introBackgroundOffsetX = 0x801a7c80; -introBackgroundOffsetY = 0x801a7cb0; -introBackgroundTextureType = 0x801a7ce0; -introBackgroundIndexTable = 0x801a7ce8; -introBackgroundTables = 0x801a7cf4; -gameOverBackgroundTable = 0x801a7cf8; -gameOverBackgroundFlipOrder = 0x801a7d04; -textStarX = 0x801a7ee8; -gGdMoveScene = 0x801a81e0; -D_801A8058 = 0x801a81e8; -gGdUseVtxNormal = 0x801a81ec; -gViewUpdateCamera = 0x801a8288; -sColourPalette = 0x801a8294; -sWhiteBlack = 0x801a82a8; -D_801A81C0 = 0x801a8350; -D_801A81C4 = 0x801a8354; -gMarioFaceGrp = 0x801a8470; -D_801A82E4 = 0x801a8474; -gShapeRedSpark = 0x801a847c; -gShapeSilverSpark = 0x801a8480; -gShapeRedStar = 0x801a8484; -gShapeSilverStar = 0x801a8488; -D_801A83A4 = 0x801a8534; -gGdFrameBuf = 0x801a8840; -sGdPerspTimer = 0x801b539c; -gGameOverFrameCounter = 0x801b99e0; -gGameOverTableIndex = 0x801b99e4; -gTitleZoomCounter = 0x801b99e8; -gTitleFadeCounter = 0x801b99ec; -gGdCtrl = 0x801b9ab0; -gGdCtrlPrev = 0x801b9ba8; -gUnref_801B9B30 = 0x801b9cc0; -gGdLightGroup = 0x801b9d48; -D_801B9DA0 = 0x801b9f30; -sCurrentMoveCamera = 0x801b9f48; -sCurrentMoveView = 0x801b9f4c; -gGdCounter = 0x801b9f50; -D_801B9DC8 = 0x801b9f58; -D_801B9E08 = 0x801b9f98; -sCurrentMoveGrp = 0x801b9fa4; -D_801B9E18 = 0x801b9fa8; -D_801B9E28 = 0x801b9fb8; -D_801B9E34 = 0x801b9fc4; -D_801B9E38 = 0x801b9fc8; -D_801B9E3C = 0x801b9fcc; -D_801B9E40 = 0x801b9fd0; -D_801B9E44 = 0x801b9fd4; -D_801B9E48 = 0x801b9fd8; -gGdCameraList = 0x801b9fdc; -D_801B9E50 = 0x801b9fe0; -gGdGroupList = 0x801b9fe4; -gGdObjCount = 0x801b9fe8; -gGdGroupCount = 0x801b9fec; -gGdPlaneCount = 0x801b9ff0; -gGdCameraCount = 0x801b9ff4; -sGdViewInfo = 0x801b9ff8; -D_801B9E80 = 0x801ba010; -gGdJointList = 0x801ba014; -gGdBoneList = 0x801ba018; -gGdObjectList = 0x801ba01c; -gGdViewsGroup = 0x801ba020; -sSkinNetCurWeight = 0x801ba030; -gGdStreamBuffer = 0x801ba320; -sTargetWeightID = 0x801baaf0; -gGdSkinNet = 0x801bac80; -gDecompressionHeap = 0x801c1000; -gAudioHeap = 0x801ce000; -gUnusedThread2Stack = 0x801ff200; -gIdleThreadStack = 0x80200600; -gThread3Stack = 0x80200e00; -gThread4Stack = 0x80202e00; -gThread5Stack = 0x80204e00; -gGfxSPTaskYieldBuffer = 0x80206e00; -gSaveBuffer = 0x80207700; -gGfxSPTaskStack = 0x80207900; -gGfxPools = 0x80207d00; -gAudioGlobalsStartMarker = 0x80220da0; -gSynthesisReverb = 0x80220db0; -sAudioSynthesisPad = 0x80220e80; -gVolume = 0x80220ea0; -gReverbDownsampleRate = 0x80220ea2; -sReverbDownsampleRateLog = 0x80220ea3; -gAudioSessionPool = 0x80220ea8; -gAudioInitPool = 0x80220eb8; -gNotesAndBuffersPool = 0x80220ec8; -sAudioHeapPad = 0x80220ed8; -gSeqAndBankPool = 0x80220ef8; -gPersistentCommonPool = 0x80220f08; -gTemporaryCommonPool = 0x80220f18; -gSeqLoadedPool = 0x80220f28; -gBankLoadedPool = 0x802210f8; -gUnusedLoadedPool = 0x802212c8; -sSessionPoolSplit = 0x80221498; -sSeqAndBankPoolSplit = 0x802214a8; -sPersistentCommonPoolSplit = 0x802214b0; -sTemporaryCommonPoolSplit = 0x802214c0; -gBankLoadStatus = 0x802214d0; -gSeqLoadStatus = 0x80221510; -gAudioUnusedBuffer = 0x80221610; -gNotes = 0x80222610; -gSequencePlayers = 0x80222618; -gSequenceChannels = 0x802229d8; -gSequenceLayers = 0x802241d8; -gSequenceChannelNone = 0x80225bd8; -gLayerFreeList = 0x80225c98; -gNoteFreeLists = 0x80225ca8; -gCurrAudioFrameDmaQueue = 0x80225ce8; -gCurrAudioFrameDmaMesgBufs = 0x80225d00; -gCurrAudioFrameDmaIoMesgBufs = 0x80225e00; -gAudioDmaMesgQueue = 0x80226300; -gAudioDmaMesg = 0x80226318; -gAudioDmaIoMesg = 0x80226320; -sSampleDmas = 0x80226338; -gSampleDmaNumListItems = 0x80226938; -sSampleDmaListSize1 = 0x8022693c; -sUnused80226B40 = 0x80226940; -sSampleDmaReuseQueue1 = 0x80226948; -sSampleDmaReuseQueue2 = 0x80226a48; -sSampleDmaReuseQueueTail1 = 0x80226b48; -sSampleDmaReuseQueueTail2 = 0x80226b49; -sSampleDmaReuseQueueHead1 = 0x80226b4a; -sSampleDmaReuseQueueHead2 = 0x80226b4b; -gSeqFileHeader = 0x80226b4c; -gAlCtlHeader = 0x80226b50; -gAlTbl = 0x80226b54; -gAlBankSets = 0x80226b58; -gSequenceCount = 0x80226b5c; -gCtlEntries = 0x80226b60; -gAiFrequency = 0x80226b64; -D_80226D68 = 0x80226b68; -gMaxAudioCmds = 0x80226b6c; -gMaxSimultaneousNotes = 0x80226b70; -gSamplesPerFrameTarget = 0x80226b74; -gMinAiBufferLength = 0x80226b78; -gTempoInternalToExternal = 0x80226b7c; -gAudioUpdatesPerFrame = 0x80226b7e; -gSoundMode = 0x80226b7f; -gAudioFrameCount = 0x80226b80; -gCurrAudioFrameDmaCount = 0x80226b84; -gAudioTaskIndex = 0x80226b88; -gCurrAiBufferIndex = 0x80226b8c; -gAudioCmdBuffers = 0x80226b90; -gAudioCmd = 0x80226b98; -gAudioTask = 0x80226b9c; -gAudioTasks = 0x80226ba0; -gAiBuffers = 0x80226c40; -gAiBufferLengths = 0x80226c4c; -gUnused80226E58 = 0x80226c58; -gUnused80226E98 = 0x80226c98; -gAudioRandom = 0x80226cb8; -gAudioGlobalsEndMarker = 0x80226cc0; -gGfxSPTaskOutputBuffer = 0x80227000; -epicStyle = 0x80227000; - -/* now being lazy */ - -bhvMenuButton = 0x80345678; -gGlobalSoundSource = 0x80345678; -dl_ia_text_begin = 0x80345678; -dl_ia_text_end = 0x80345678; -bhvActSelectorStarType = 0x80345678; -dl_menu_grabbing_hand = 0x80345678; -dl_menu_ia8_text_begin = 0x80345678; -dl_menu_ia8_text_end = 0x80345678; -dl_menu_idle_hand = 0x80345678; -dl_menu_rgba16_wood_course = 0x80345678; -dl_proj_mtx_fullscreen = 0x80345678; -dl_rgba16_text_begin = 0x80345678; -dl_rgba16_text_end = 0x80345678; -game_over_texture_table = 0x80345678; -gDemoInputsBuf = 0x80345678; -gWidescreen = 0x80345678; -intro_seg7_dl_0700B3A0 = 0x80345678; -intro_seg7_dl_0700C6A0 = 0x80345678; -intro_seg7_table_0700C790 = 0x80345678; -intro_seg7_table_0700C880 = 0x80345678; -mario_title_texture_table = 0x80345678; -seg2_act_name_table = 0x80345678; -seg2_course_name_table = 0x80345678; -title_screen_bg_dl_0A000100 = 0x80345678; -title_screen_bg_dl_0A000118 = 0x80345678; -title_screen_bg_dl_0A000130 = 0x80345678; -title_screen_bg_dl_0A000148 = 0x80345678; -title_screen_bg_dl_0A000160 = 0x80345678; -title_screen_bg_dl_0A000178 = 0x80345678; -title_screen_bg_dl_0A000190 = 0x80345678; - diff --git a/tools/libbfd-2.30.so b/tools/libbfd-2.30.so new file mode 100644 index 00000000..e7e56dd3 Binary files /dev/null and b/tools/libbfd-2.30.so differ diff --git a/tools/mips64-elf-ld b/tools/mips64-elf-ld index deaeebdf..d5f52b07 100755 Binary files a/tools/mips64-elf-ld and b/tools/mips64-elf-ld differ