From 1e6f234f62bb7e072bc41c12f3983d502934eb03 Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Wed, 5 Feb 2025 10:25:12 -0600 Subject: [PATCH] Label most of w01Dll --- config/GMPE01_00/rels/w01Dll/splits.txt | 4 +- config/GMPE01_00/rels/w01Dll/symbols.txt | 488 ++-- config/GMPP01_00/rels/w01Dll/splits.txt | 4 +- include/REL/w01Dll.h | 52 +- src/REL/w01Dll/main.c | 3258 +++++++++++----------- src/REL/w01Dll/mg_coin.c | 1302 +++++---- src/REL/w01Dll/mg_item.c | 1216 ++++---- 7 files changed, 3152 insertions(+), 3172 deletions(-) diff --git a/config/GMPE01_00/rels/w01Dll/splits.txt b/config/GMPE01_00/rels/w01Dll/splits.txt index 7baca9d9..8e0a4285 100644 --- a/config/GMPE01_00/rels/w01Dll/splits.txt +++ b/config/GMPE01_00/rels/w01Dll/splits.txt @@ -11,13 +11,13 @@ REL/board_executor.c: .rodata start:0x00000000 end:0x00000010 REL/w01Dll/main.c: - .text start:0x000000E0 end:0x00009D00 + .text start:0x000000E0 end:0x00009DD8 .rodata start:0x00000010 end:0x00000198 .data start:0x00000000 end:0x00000658 .bss start:0x00000000 end:0x00000708 REL/w01Dll/mg_coin.c: - .text start:0x00009D00 end:0x0000D740 + .text start:0x00009DD8 end:0x0000D740 .rodata start:0x00000198 end:0x000002C8 .data start:0x00000658 end:0x00000F08 .bss start:0x00000708 end:0x000007A0 diff --git a/config/GMPE01_00/rels/w01Dll/symbols.txt b/config/GMPE01_00/rels/w01Dll/symbols.txt index ad0e3d24..66542f00 100644 --- a/config/GMPE01_00/rels/w01Dll/symbols.txt +++ b/config/GMPE01_00/rels/w01Dll/symbols.txt @@ -3,137 +3,137 @@ _prolog = .text:0x00000030; // type:function size:0x64 scope:global _epilog = .text:0x00000094; // type:function size:0x4C scope:global BoardCreate = .text:0x000000E0; // type:function size:0x4BC BoardDestroy = .text:0x0000059C; // type:function size:0x194 -fn_1_730 = .text:0x00000730; // type:function size:0x44 scope:local -fn_1_774 = .text:0x00000774; // type:function size:0x4 scope:local -fn_1_778 = .text:0x00000778; // type:function size:0x9C scope:local -fn_1_814 = .text:0x00000814; // type:function size:0x1D4 scope:local -fn_1_9E8 = .text:0x000009E8; // type:function size:0x318 scope:local +LightSetHook = .text:0x00000730; // type:function size:0x44 scope:local +LightResetHook = .text:0x00000774; // type:function size:0x4 scope:local +LandEvent = .text:0x00000778; // type:function size:0x9C scope:local +WalkEvent = .text:0x00000814; // type:function size:0x1D4 scope:local +MapObjDispSet = .text:0x000009E8; // type:function size:0x318 scope:local fn_1_D00 = .text:0x00000D00; // type:function size:0x4 scope:local -fn_1_D04 = .text:0x00000D04; // type:function size:0x550 scope:local -fn_1_1254 = .text:0x00001254; // type:function size:0x38 scope:local -fn_1_128C = .text:0x0000128C; // type:function size:0x80 scope:local -fn_1_130C = .text:0x0000130C; // type:function size:0x270 scope:local -fn_1_157C = .text:0x0000157C; // type:function size:0xF4 scope:local -fn_1_1670 = .text:0x00001670; // type:function size:0x90 scope:local -fn_1_1700 = .text:0x00001700; // type:function size:0x290 scope:local -fn_1_1990 = .text:0x00001990; // type:function size:0x148 scope:local -fn_1_1AD8 = .text:0x00001AD8; // type:function size:0x64 scope:local -fn_1_1B3C = .text:0x00001B3C; // type:function size:0x3A8 scope:local -fn_1_1EE4 = .text:0x00001EE4; // type:function size:0x48 scope:local -fn_1_1F2C = .text:0x00001F2C; // type:function size:0x78 scope:local -fn_1_1FA4 = .text:0x00001FA4; // type:function size:0x580 scope:local -fn_1_2524 = .text:0x00002524; // type:function size:0x248 scope:local -fn_1_276C = .text:0x0000276C; // type:function size:0x7AC scope:local -fn_1_2F18 = .text:0x00002F18; // type:function size:0x438 scope:local -fn_1_3350 = .text:0x00003350; // type:function size:0x1C4 scope:local -fn_1_3514 = .text:0x00003514; // type:function size:0xA0 scope:local -fn_1_35B4 = .text:0x000035B4; // type:function size:0x70 scope:local -fn_1_3624 = .text:0x00003624; // type:function size:0xFD0 scope:local -fn_1_45F4 = .text:0x000045F4; // type:function size:0x180 scope:local -fn_1_4774 = .text:0x00004774; // type:function size:0xF0 scope:local -fn_1_4864 = .text:0x00004864; // type:function size:0x50 scope:local -fn_1_48B4 = .text:0x000048B4; // type:function size:0x560 scope:local -fn_1_4E14 = .text:0x00004E14; // type:function size:0x194 scope:local -fn_1_4FA8 = .text:0x00004FA8; // type:function size:0x30 scope:local -fn_1_4FD8 = .text:0x00004FD8; // type:function size:0xFC scope:local -fn_1_50D4 = .text:0x000050D4; // type:function size:0x2E4 scope:local -fn_1_53B8 = .text:0x000053B8; // type:function size:0x84 scope:local -fn_1_543C = .text:0x0000543C; // type:function size:0x258 scope:local -fn_1_5694 = .text:0x00005694; // type:function size:0x1D8 scope:local -fn_1_586C = .text:0x0000586C; // type:function size:0xC0 scope:local -fn_1_592C = .text:0x0000592C; // type:function size:0x200 scope:local -fn_1_5B2C = .text:0x00005B2C; // type:function size:0x14 scope:local -fn_1_5B40 = .text:0x00005B40; // type:function size:0x190 scope:local -fn_1_5CD0 = .text:0x00005CD0; // type:function size:0x38 scope:local -fn_1_5D08 = .text:0x00005D08; // type:function size:0x390 scope:local -fn_1_6098 = .text:0x00006098; // type:function size:0xFC scope:local -fn_1_6194 = .text:0x00006194; // type:function size:0x25C scope:local -fn_1_63F0 = .text:0x000063F0; // type:function size:0x624 scope:local -fn_1_6A14 = .text:0x00006A14; // type:function size:0x1AC scope:local -fn_1_6BC0 = .text:0x00006BC0; // type:function size:0x3F4 scope:local -fn_1_6FB4 = .text:0x00006FB4; // type:function size:0x574 scope:local -fn_1_7528 = .text:0x00007528; // type:function size:0x2C4 scope:local -fn_1_77EC = .text:0x000077EC; // type:function size:0xA8 scope:local -fn_1_7894 = .text:0x00007894; // type:function size:0x1D0 scope:local -fn_1_7A64 = .text:0x00007A64; // type:function size:0xAC8 scope:local -fn_1_852C = .text:0x0000852C; // type:function size:0x280 scope:local -fn_1_87AC = .text:0x000087AC; // type:function size:0x34 scope:local -fn_1_87E0 = .text:0x000087E0; // type:function size:0x1A8 scope:local -fn_1_8988 = .text:0x00008988; // type:function size:0xC8 scope:local -fn_1_8A50 = .text:0x00008A50; // type:function size:0x11C scope:local -fn_1_8B6C = .text:0x00008B6C; // type:function size:0x270 scope:local -fn_1_8DDC = .text:0x00008DDC; // type:function size:0x3B0 scope:local -fn_1_918C = .text:0x0000918C; // type:function size:0xF0 scope:local -fn_1_927C = .text:0x0000927C; // type:function size:0xB0 scope:local -fn_1_932C = .text:0x0000932C; // type:function size:0x17C scope:local -fn_1_94A8 = .text:0x000094A8; // type:function size:0x14C scope:local -fn_1_95F4 = .text:0x000095F4; // type:function size:0x200 scope:local -fn_1_97F4 = .text:0x000097F4; // type:function size:0xF8 scope:local -fn_1_98EC = .text:0x000098EC; // type:function size:0x34 scope:local -fn_1_9920 = .text:0x00009920; // type:function size:0x104 scope:local -fn_1_9A24 = .text:0x00009A24; // type:function size:0x198 scope:local -fn_1_9BBC = .text:0x00009BBC; // type:function size:0x144 scope:local -fn_1_9D00 = .text:0x00009D00; // type:function size:0xD8 -fn_1_9DD8 = .text:0x00009DD8; // type:function size:0x6E0 -fn_1_A4B8 = .text:0x0000A4B8; // type:function size:0x9C scope:local -fn_1_A554 = .text:0x0000A554; // type:function size:0xA8 scope:local -fn_1_A5FC = .text:0x0000A5FC; // type:function size:0xE4 scope:local -fn_1_A6E0 = .text:0x0000A6E0; // type:function size:0x938 scope:local -fn_1_B018 = .text:0x0000B018; // type:function size:0x70 scope:local -fn_1_B088 = .text:0x0000B088; // type:function size:0x144 scope:local -fn_1_B1CC = .text:0x0000B1CC; // type:function size:0x1EC scope:local -fn_1_B3B8 = .text:0x0000B3B8; // type:function size:0xC0 scope:local -fn_1_B478 = .text:0x0000B478; // type:function size:0x680 scope:local -fn_1_BAF8 = .text:0x0000BAF8; // type:function size:0x1E4 scope:local -fn_1_BCDC = .text:0x0000BCDC; // type:function size:0x224 scope:local -fn_1_BF00 = .text:0x0000BF00; // type:function size:0x68 scope:local -fn_1_BF68 = .text:0x0000BF68; // type:function size:0x98 scope:local -fn_1_C000 = .text:0x0000C000; // type:function size:0xFC scope:local -fn_1_C0FC = .text:0x0000C0FC; // type:function size:0x160 scope:local -fn_1_C25C = .text:0x0000C25C; // type:function size:0x5E8 scope:local -fn_1_C844 = .text:0x0000C844; // type:function size:0x50 scope:local -fn_1_C894 = .text:0x0000C894; // type:function size:0xB8 scope:local -fn_1_C94C = .text:0x0000C94C; // type:function size:0x4C scope:local -fn_1_C998 = .text:0x0000C998; // type:function size:0x1AC scope:local -fn_1_CB44 = .text:0x0000CB44; // type:function size:0x380 scope:local -fn_1_CEC4 = .text:0x0000CEC4; // type:function size:0x170 scope:local -fn_1_D034 = .text:0x0000D034; // type:function size:0x48 scope:local -fn_1_D07C = .text:0x0000D07C; // type:function size:0x98 scope:local -fn_1_D114 = .text:0x0000D114; // type:function size:0x62C scope:local -fn_1_D740 = .text:0x0000D740; // type:function size:0x644 -fn_1_DD84 = .text:0x0000DD84; // type:function size:0x110 -fn_1_DE94 = .text:0x0000DE94; // type:function size:0x26C -fn_1_E100 = .text:0x0000E100; // type:function size:0x54 scope:local -fn_1_E154 = .text:0x0000E154; // type:function size:0x164 scope:local -fn_1_E2B8 = .text:0x0000E2B8; // type:function size:0x194 scope:local -fn_1_E44C = .text:0x0000E44C; // type:function size:0x4C8 scope:local -fn_1_E914 = .text:0x0000E914; // type:function size:0x3C0 scope:local -fn_1_ECD4 = .text:0x0000ECD4; // type:function size:0x1CC scope:local -fn_1_EEA0 = .text:0x0000EEA0; // type:function size:0x38 scope:local -fn_1_EED8 = .text:0x0000EED8; // type:function size:0x1C4 scope:local -fn_1_F09C = .text:0x0000F09C; // type:function size:0x2AC scope:local -fn_1_F348 = .text:0x0000F348; // type:function size:0xB0 scope:local -fn_1_F3F8 = .text:0x0000F3F8; // type:function size:0x2F0 scope:local -fn_1_F6E8 = .text:0x0000F6E8; // type:function size:0x1A8 scope:local -fn_1_F890 = .text:0x0000F890; // type:function size:0x18C scope:local -fn_1_FA1C = .text:0x0000FA1C; // type:function size:0xA0 scope:local -fn_1_FABC = .text:0x0000FABC; // type:function size:0x9C scope:local -fn_1_FB58 = .text:0x0000FB58; // type:function size:0xE4 scope:local -fn_1_FC3C = .text:0x0000FC3C; // type:function size:0xB0 scope:local -fn_1_FCEC = .text:0x0000FCEC; // type:function size:0x50 scope:local -fn_1_FD3C = .text:0x0000FD3C; // type:function size:0x108 scope:local -fn_1_FE44 = .text:0x0000FE44; // type:function size:0x8C scope:local -fn_1_FED0 = .text:0x0000FED0; // type:function size:0x14C scope:local -fn_1_1001C = .text:0x0001001C; // type:function size:0x19C scope:local -fn_1_101B8 = .text:0x000101B8; // type:function size:0x4AC scope:local -fn_1_10664 = .text:0x00010664; // type:function size:0x1BC scope:local -fn_1_10820 = .text:0x00010820; // type:function size:0x2C8 scope:local -fn_1_10AE8 = .text:0x00010AE8; // type:function size:0xC8 scope:local -fn_1_10BB0 = .text:0x00010BB0; // type:function size:0x140 scope:local -fn_1_10CF0 = .text:0x00010CF0; // type:function size:0x1C8 scope:local -fn_1_10EB8 = .text:0x00010EB8; // type:function size:0x1AC scope:local -fn_1_11064 = .text:0x00011064; // type:function size:0x420 scope:local -fn_1_11484 = .text:0x00011484; // type:function size:0x56C scope:local +RoundItemMain = .text:0x00000D04; // type:function size:0x550 scope:local +RoundItemDestroy = .text:0x00001254; // type:function size:0x38 scope:local +RoundItemEvent = .text:0x0000128C; // type:function size:0x80 scope:local +SpaceAmidaEvent = .text:0x0000130C; // type:function size:0x270 scope:local +WalkMiniEvent = .text:0x0000157C; // type:function size:0xF4 scope:local +UpdateHostDisp = .text:0x00001670; // type:function size:0x90 scope:local +CoasterInit = .text:0x00001700; // type:function size:0x290 scope:local +CoasterPathUpdate = .text:0x00001990; // type:function size:0x148 scope:local +CoasterPosCalc = .text:0x00001AD8; // type:function size:0x64 scope:local +CoasterCameraUpdate = .text:0x00001B3C; // type:function size:0x3A8 scope:local +CoasterCameraObjKill = .text:0x00001EE4; // type:function size:0x48 scope:local +CoasterCameraObjMain = .text:0x00001F2C; // type:function size:0x78 scope:local +CoasterCameraObjUpdate = .text:0x00001FA4; // type:function size:0x580 scope:local +CoasterStickRotGet = .text:0x00002524; // type:function size:0x248 scope:local +CoasterRotUpdate = .text:0x0000276C; // type:function size:0x7AC scope:local +CoasterCoinCheck = .text:0x00002F18; // type:function size:0x438 scope:local +CoasterPathMotUpdate = .text:0x00003350; // type:function size:0x1C4 scope:local +CoasterMotCreate = .text:0x00003514; // type:function size:0xA0 scope:local +CoasterMotKill = .text:0x000035B4; // type:function size:0x70 scope:local +CoasterExec = .text:0x00003624; // type:function size:0xFD0 scope:local +CoasterExit = .text:0x000045F4; // type:function size:0x180 scope:local +CoasterWinCreate = .text:0x00004774; // type:function size:0xF0 scope:local +CoasterWinKill = .text:0x00004864; // type:function size:0x50 scope:local +CoasterHostExec = .text:0x000048B4; // type:function size:0x560 scope:local +CoasterMain = .text:0x00004E14; // type:function size:0x194 scope:local +CoasterDestroy = .text:0x00004FA8; // type:function size:0x30 scope:local +CoasterEvent = .text:0x00004FD8; // type:function size:0xFC scope:local +CoasterCoinCreate = .text:0x000050D4; // type:function size:0x2E4 scope:local +CoasterCoinKill = .text:0x000053B8; // type:function size:0x84 scope:local +CupInit = .text:0x0000543C; // type:function size:0x258 scope:local +CupMotOnSet = .text:0x00005694; // type:function size:0x1D8 scope:local +CupEvent = .text:0x0000586C; // type:function size:0xC0 scope:local +CupMain = .text:0x0000592C; // type:function size:0x200 scope:local +CupDestroy = .text:0x00005B2C; // type:function size:0x14 scope:local +CupExec = .text:0x00005B40; // type:function size:0x190 scope:local +CupObjCheck = .text:0x00005CD0; // type:function size:0x38 scope:local +CupObjCreate = .text:0x00005D08; // type:function size:0x390 scope:local +CupObjMain = .text:0x00006098; // type:function size:0xFC scope:local +CupObjInit = .text:0x00006194; // type:function size:0x25C scope:local +CupObjJumpWait = .text:0x000063F0; // type:function size:0x624 scope:local +CupObjHookReset = .text:0x00006A14; // type:function size:0x1AC scope:local +CupObjStop = .text:0x00006BC0; // type:function size:0x3F4 scope:local +CupObjRotate = .text:0x00006FB4; // type:function size:0x574 scope:local +CupLandEvent = .text:0x00007528; // type:function size:0x2C4 scope:local +CoasterLandEvent = .text:0x000077EC; // type:function size:0xA8 scope:local +CoasterLandMain = .text:0x00007894; // type:function size:0x1D0 scope:local +CoasterLandExec = .text:0x00007A64; // type:function size:0xAC8 scope:local +CoasterPlayerManCreate = .text:0x0000852C; // type:function size:0x280 scope:local +CoasterPlayerManKill = .text:0x000087AC; // type:function size:0x34 scope:local +CoasterPlayerManUpdate = .text:0x000087E0; // type:function size:0x1A8 scope:local +CoasterPlayerWait = .text:0x00008988; // type:function size:0xC8 scope:local +CoasterPlayerChaseBegin = .text:0x00008A50; // type:function size:0x11C scope:local +CoasterPlayerChasePathSet = .text:0x00008B6C; // type:function size:0x270 scope:local +CoasterPlayerChase = .text:0x00008DDC; // type:function size:0x3B0 scope:local +CoasterPlayerStop = .text:0x0000918C; // type:function size:0xF0 scope:local +CoasterPlayerEnd = .text:0x0000927C; // type:function size:0xB0 scope:local +CoasterPlayerEndSet = .text:0x0000932C; // type:function size:0x17C scope:local +CoasterPlayerLoopCheck = .text:0x000094A8; // type:function size:0x14C scope:local +CoasterPlayerTimeInit = .text:0x000095F4; // type:function size:0x200 scope:local +CoasterEffCreate = .text:0x000097F4; // type:function size:0xF8 scope:local +CoasterEffKill = .text:0x000098EC; // type:function size:0x34 scope:local +CoasterEffUpdate = .text:0x00009920; // type:function size:0x104 scope:local +CoasterEffAdd = .text:0x00009A24; // type:function size:0x198 scope:local +CoasterEffModelUpdate = .text:0x00009BBC; // type:function size:0x144 scope:local +CoasterHostComKeySet = .text:0x00009D00; // type:function size:0xD8 scope:local +SpaceAmidaExec = .text:0x00009DD8; // type:function size:0x6E0 +SpaceAmidaMainUpdate = .text:0x0000A4B8; // type:function size:0x9C scope:local +SpaceAmidaStop = .text:0x0000A554; // type:function size:0xA8 scope:local +SpaceAmidaKill = .text:0x0000A5FC; // type:function size:0xE4 scope:local +SpaceAmidaRocketObjUpdate = .text:0x0000A6E0; // type:function size:0x938 scope:local +SpaceAmidaMapLenGet = .text:0x0000B018; // type:function size:0x70 scope:local +SpaceAmidaComChoiceSet = .text:0x0000B088; // type:function size:0x144 scope:local +SpaceAmidaComInputGet = .text:0x0000B1CC; // type:function size:0x1EC scope:local +SpaceAmidaGameOpen = .text:0x0000B3B8; // type:function size:0xC0 scope:local +SpaceAmidaGameUpdate = .text:0x0000B478; // type:function size:0x680 scope:local +SpaceAmidaRocketJump = .text:0x0000BAF8; // type:function size:0x1E4 scope:local +SpaceAmidaRocketKemuriExec = .text:0x0000BCDC; // type:function size:0x224 scope:local +SpaceAmidaRocketWait = .text:0x0000BF00; // type:function size:0x68 scope:local +SpaceAmidaRocketUp = .text:0x0000BF68; // type:function size:0x98 scope:local +SpaceAmidaCoinWin = .text:0x0000C000; // type:function size:0xFC scope:local +SpaceAmidaJumpDown = .text:0x0000C0FC; // type:function size:0x160 scope:local +SpaceAmidaCoinRainMain = .text:0x0000C25C; // type:function size:0x5E8 scope:local +SpaceAmidaReturnWinMain = .text:0x0000C844; // type:function size:0x50 scope:local +SpaceAmidaGameStop = .text:0x0000C894; // type:function size:0xB8 scope:local +SpaceAmidaDirGet = .text:0x0000C94C; // type:function size:0x4C scope:local +SpaceAmidaAngleGet = .text:0x0000C998; // type:function size:0x1AC scope:local +SpaceAmidaPlayerRotAdd = .text:0x0000CB44; // type:function size:0x380 scope:local +SpaceAmidaEffCreate = .text:0x0000CEC4; // type:function size:0x170 scope:local +SpaceAmidaEffKill = .text:0x0000D034; // type:function size:0x48 scope:local +SpaceAmidaEffUpdate = .text:0x0000D07C; // type:function size:0x98 scope:local +SpaceAmidaEffParticleHook = .text:0x0000D114; // type:function size:0x62C scope:local +RoundItemInit = .text:0x0000D740; // type:function size:0x644 +RoundItemKill = .text:0x0000DD84; // type:function size:0x110 +RoundItemEventStart = .text:0x0000DE94; // type:function size:0x26C +RoundItemEnd = .text:0x0000E100; // type:function size:0x54 scope:local +RoundItemClose = .text:0x0000E154; // type:function size:0x164 scope:local +RoundItemMainUpdate = .text:0x0000E2B8; // type:function size:0x194 scope:local +RoundItemUmaStop = .text:0x0000E44C; // type:function size:0x4C8 scope:local +RoundItemPlayerJump = .text:0x0000E914; // type:function size:0x3C0 scope:local +RoundItemStartWait = .text:0x0000ECD4; // type:function size:0x1CC scope:local +RoundItemComInputGet = .text:0x0000EEA0; // type:function size:0x38 scope:local +RoundItemInputWait = .text:0x0000EED8; // type:function size:0x1C4 scope:local +RoundItemStop = .text:0x0000F09C; // type:function size:0x2AC scope:local +RoundItemLightFlicker = .text:0x0000F348; // type:function size:0xB0 scope:local +RoundItemUmaJumpWait = .text:0x0000F3F8; // type:function size:0x2F0 scope:local +RoundItemUmaJump = .text:0x0000F6E8; // type:function size:0x1A8 scope:local +RoundItemRotatePlayer = .text:0x0000F890; // type:function size:0x18C scope:local +RoundItemStreamWait = .text:0x0000FA1C; // type:function size:0xA0 scope:local +RoundItemWinWait = .text:0x0000FABC; // type:function size:0x9C scope:local +ItemGetWinExec = .text:0x0000FB58; // type:function size:0xE4 scope:local +ItemGetShrinkWait = .text:0x0000FC3C; // type:function size:0xB0 scope:local +ItemGetReturnWinExec = .text:0x0000FCEC; // type:function size:0x50 scope:local +RoundItemGameClose = .text:0x0000FD3C; // type:function size:0x108 scope:local +RoundItemGameEnd = .text:0x0000FE44; // type:function size:0x8C scope:local +RoundItemItemUpdate = .text:0x0000FED0; // type:function size:0x14C scope:local +RoundItemItemGet = .text:0x0001001C; // type:function size:0x19C scope:local +ItemGetCreate = .text:0x000101B8; // type:function size:0x4AC scope:local +ItemGetObjUpdate = .text:0x00010664; // type:function size:0x1BC scope:local +ItemGetPlayerMove = .text:0x00010820; // type:function size:0x2C8 scope:local +ItemGetShrink = .text:0x00010AE8; // type:function size:0xC8 scope:local +RoundItemUmaRotYGet = .text:0x00010BB0; // type:function size:0x140 scope:local +RoundItemUmaPlayerSet = .text:0x00010CF0; // type:function size:0x1C8 scope:local +RoundItemAngleGet = .text:0x00010EB8; // type:function size:0x1AC scope:local +ItemGetEff1Hook = .text:0x00011064; // type:function size:0x420 scope:local +ItemGetEff2Hook = .text:0x00011484; // type:function size:0x56C scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float @@ -334,136 +334,136 @@ lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data: lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float -lbl_1_data_0 = .data:0x00000000; // type:object size:0x528 scope:local -lbl_1_data_528 = .data:0x00000528; // type:object size:0x2 scope:local data:2byte -lbl_1_data_52A = .data:0x0000052A; // type:object size:0x2 scope:local data:2byte -lbl_1_data_52C = .data:0x0000052C; // type:object size:0x2 scope:local data:2byte -lbl_1_data_52E = .data:0x0000052E; // type:object size:0x2 scope:local data:2byte -lbl_1_data_530 = .data:0x00000530; // type:object size:0x2 scope:local data:2byte -lbl_1_data_534 = .data:0x00000534; // type:object size:0x8 scope:local -lbl_1_data_53C = .data:0x0000053C; // type:object size:0x8 scope:local +mapObjData = .data:0x00000000; // type:object size:0x528 scope:local +bgMdl = .data:0x00000528; // type:object size:0x2 scope:local data:2byte +fgMdl = .data:0x0000052A; // type:object size:0x2 scope:local data:2byte +starHostMdl = .data:0x0000052C; // type:object size:0x2 scope:local data:2byte +hostMdl = .data:0x0000052E; // type:object size:0x2 scope:local data:2byte +syuppouMdl = .data:0x00000530; // type:object size:0x2 scope:local data:2byte +starHostMotTbl = .data:0x00000534; // type:object size:0x8 scope:local +hostMotTbl = .data:0x0000053C; // type:object size:0x8 scope:local lbl_1_data_544 = .data:0x00000544; // type:object size:0x14 scope:local data:string lbl_1_data_558 = .data:0x00000558; // type:object size:0x14 scope:local data:string lbl_1_data_56C = .data:0x0000056C; // type:object size:0x13 scope:local data:string -lbl_1_data_580 = .data:0x00000580; // type:object size:0x2 scope:local data:2byte +coasterWinId = .data:0x00000580; // type:object size:0x2 scope:local data:2byte lbl_1_data_582 = .data:0x00000582; // type:object size:0x12 scope:local -lbl_1_data_594 = .data:0x00000594; // type:object size:0x40 scope:local -lbl_1_data_5D4 = .data:0x000005D4; // type:object size:0x4 scope:local data:4byte -lbl_1_data_5D8 = .data:0x000005D8; // type:object size:0x4 scope:local data:4byte -lbl_1_data_5DC = .data:0x000005DC; // type:object size:0x10 scope:local data:2byte +coasterMotTbl = .data:0x00000594; // type:object size:0x40 scope:local +cupMoveSeNo = .data:0x000005D4; // type:object size:0x4 scope:local data:4byte +decaStompSeNo = .data:0x000005D8; // type:object size:0x4 scope:local data:4byte +cupMapObj = .data:0x000005DC; // type:object size:0x10 scope:local data:2byte lbl_1_data_5EC = .data:0x000005EC; // type:object size:0x7 scope:local data:string lbl_1_data_5F3 = .data:0x000005F3; // type:object size:0x7 scope:local data:string lbl_1_data_5FA = .data:0x000005FA; // type:object size:0x7 scope:local data:string -lbl_1_data_604 = .data:0x00000604; // type:object size:0xC scope:local -lbl_1_data_610 = .data:0x00000610; // type:object size:0x10 scope:local +cupHookTbl = .data:0x00000604; // type:object size:0xC scope:local +cupArrowRot = .data:0x00000610; // type:object size:0x10 scope:local lbl_1_data_620 = .data:0x00000620; // type:object size:0x5 scope:local data:string lbl_1_data_625 = .data:0x00000625; // type:object size:0x5 scope:local data:string lbl_1_data_62A = .data:0x0000062A; // type:object size:0x5 scope:local data:string lbl_1_data_62F = .data:0x0000062F; // type:object size:0x4 scope:local data:string -lbl_1_data_633 = .data:0x00000633; // type:object size:0x1 scope:local data:byte -lbl_1_data_634 = .data:0x00000634; // type:object size:0x24 scope:local -lbl_1_data_658 = .data:0x00000658; // type:object size:0x24 scope:local -lbl_1_data_67C = .data:0x0000067C; // type:object size:0x12 scope:local data:2byte -lbl_1_data_690 = .data:0x00000690; // type:object size:0x2D0 scope:local -lbl_1_data_960 = .data:0x00000960; // type:object size:0x2D0 scope:local -lbl_1_data_C30 = .data:0x00000C30; // type:object size:0x2D0 scope:local +coasterChasePlayer = .data:0x00000633; // type:object size:0x1 scope:local data:byte +coasterChaseSe = .data:0x00000634; // type:object size:0x24 scope:local +effPosTbl = .data:0x00000658; // type:object size:0x24 scope:local +spaceAmidaCoinNumTbl = .data:0x0000067C; // type:object size:0x12 scope:local data:2byte +spaceAmidaMap1 = .data:0x00000690; // type:object size:0x2D0 scope:local +spaceAmidaMap2 = .data:0x00000960; // type:object size:0x2D0 scope:local +spaceAmidaMap3 = .data:0x00000C30; // type:object size:0x2D0 scope:local lbl_1_data_F00 = .data:0x00000F00; // type:object size:0x3 scope:local data:string -lbl_1_data_F08 = .data:0x00000F08; // type:object size:0x38 scope:local -lbl_1_data_F40 = .data:0x00000F40; // type:object size:0x20 scope:local -lbl_1_data_F60 = .data:0x00000F60; // type:object size:0x20 scope:local +itemMdlTbl = .data:0x00000F08; // type:object size:0x38 scope:local +itemGetMotTbl = .data:0x00000F40; // type:object size:0x20 scope:local +jumpMotTbl = .data:0x00000F60; // type:object size:0x20 scope:local lbl_1_data_F80 = .data:0x00000F80; // type:object size:0x7 scope:local data:string lbl_1_data_F87 = .data:0x00000F87; // type:object size:0x5 scope:local data:string lbl_1_data_F8C = .data:0x00000F8C; // type:object size:0x5 scope:local data:string lbl_1_data_F91 = .data:0x00000F91; // type:object size:0x5 scope:local data:string lbl_1_data_F96 = .data:0x00000F96; // type:object size:0x5 scope:local data:string -lbl_1_data_F9C = .data:0x00000F9C; // type:object size:0x10 scope:local data:4byte -lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_1C = .bss:0x0000001C; // type:object size:0x1 scope:local data:byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_26 = .bss:0x00000026; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x1 scope:local data:byte -lbl_1_bss_29 = .bss:0x00000029; // type:object size:0x1 scope:local data:byte +umaHookTbl = .data:0x00000F9C; // type:object size:0x10 scope:local data:4byte +boardWork = .bss:0x00000000; // type:object size:0x4 data:4byte +roundItemProc = .bss:0x00000004; // type:object size:0x4 scope:local data:4byte +coasterProc = .bss:0x00000008; // type:object size:0x4 scope:local data:4byte +coasterPlayerManObj = .bss:0x0000000C; // type:object size:0x4 scope:local data:4byte +coasterCameraObj = .bss:0x00000010; // type:object size:0x4 scope:local data:4byte +cupProc = .bss:0x00000014; // type:object size:0x4 scope:local data:4byte +cupObj = .bss:0x00000018; // type:object size:0x4 scope:local data:4byte +coasterPlayerChaseNum = .bss:0x0000001C; // type:object size:0x1 scope:local data:byte +coasterEffObj = .bss:0x00000020; // type:object size:0x4 scope:local data:4byte +cupSpaceEnd = .bss:0x00000024; // type:object size:0x2 scope:local data:2byte +cupSpaceStart = .bss:0x00000026; // type:object size:0x2 scope:local data:2byte +cupHookNo = .bss:0x00000028; // type:object size:0x1 scope:local data:byte +cupSide = .bss:0x00000029; // type:object size:0x1 scope:local data:byte lbl_1_bss_2C = .bss:0x0000002C; // type:object size:0x5A0 scope:local -lbl_1_bss_5CC = .bss:0x000005CC; // type:object size:0x4 scope:local data:2byte -lbl_1_bss_5D0 = .bss:0x000005D0; // type:object size:0x30 scope:local -lbl_1_bss_600 = .bss:0x00000600; // type:object size:0x18 scope:local -lbl_1_bss_618 = .bss:0x00000618; // type:object size:0xC scope:local data:4byte -lbl_1_bss_624 = .bss:0x00000624; // type:object size:0xC scope:local data:float -lbl_1_bss_630 = .bss:0x00000630; // type:object size:0xC scope:local data:4byte -lbl_1_bss_63C = .bss:0x0000063C; // type:object size:0x4 scope:local data:float -lbl_1_bss_640 = .bss:0x00000640; // type:object size:0x4 scope:local data:float -lbl_1_bss_644 = .bss:0x00000644; // type:object size:0x4 scope:local data:float -lbl_1_bss_648 = .bss:0x00000648; // type:object size:0xC scope:local data:4byte -lbl_1_bss_654 = .bss:0x00000654; // type:object size:0xC scope:local data:float -lbl_1_bss_660 = .bss:0x00000660; // type:object size:0xC scope:local data:float -lbl_1_bss_66C = .bss:0x0000066C; // type:object size:0x4 scope:local data:float -lbl_1_bss_670 = .bss:0x00000670; // type:object size:0x4 scope:local data:float -lbl_1_bss_674 = .bss:0x00000674; // type:object size:0x4 scope:local data:float -lbl_1_bss_678 = .bss:0x00000678; // type:object size:0x30 scope:local +coasterMotId = .bss:0x000005CC; // type:object size:0x4 scope:local data:2byte +coasterCoinMdlId = .bss:0x000005D0; // type:object size:0x30 scope:local +coasterCoinF = .bss:0x00000600; // type:object size:0x18 scope:local +coasterCameraTarget = .bss:0x00000618; // type:object size:0xC scope:local data:4byte +coasterCameraUp = .bss:0x00000624; // type:object size:0xC scope:local data:float +coasterCameraPos = .bss:0x00000630; // type:object size:0xC scope:local data:4byte +coasterBaseRotY = .bss:0x0000063C; // type:object size:0x4 scope:local data:float +coasterTime = .bss:0x00000640; // type:object size:0x4 scope:local data:float +coasterMaxTime = .bss:0x00000644; // type:object size:0x4 scope:local data:float +coasterPosOld = .bss:0x00000648; // type:object size:0xC scope:local data:4byte +coasterPos = .bss:0x00000654; // type:object size:0xC scope:local data:float +coasterRot = .bss:0x00000660; // type:object size:0xC scope:local data:float +coasterCamSpeed = .bss:0x0000066C; // type:object size:0x4 scope:local data:float +coasterSpeed = .bss:0x00000670; // type:object size:0x4 scope:local data:float +coasterAccel = .bss:0x00000674; // type:object size:0x4 scope:local data:float +coasterMtx = .bss:0x00000678; // type:object size:0x30 scope:local lbl_1_bss_6A8 = .bss:0x000006A8; // type:object size:0x4 scope:local data:float -lbl_1_bss_6AC = .bss:0x000006AC; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_6AE = .bss:0x000006AE; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_6B0 = .bss:0x000006B0; // type:object size:0x1 scope:local data:byte -lbl_1_bss_6B1 = .bss:0x000006B1; // type:object size:0x1 scope:local data:byte -lbl_1_bss_6B2 = .bss:0x000006B2; // type:object size:0x1 scope:local data:byte -lbl_1_bss_6B3 = .bss:0x000006B3; // type:object size:0x1 scope:local data:byte -lbl_1_bss_6B4 = .bss:0x000006B4; // type:object size:0x1 scope:local data:byte -lbl_1_bss_6B6 = .bss:0x000006B6; // type:object size:0xA scope:local data:2byte -lbl_1_bss_6C0 = .bss:0x000006C0; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_6C4 = .bss:0x000006C4; // type:object size:0x42 data:2byte -lbl_1_bss_708 = .bss:0x00000708; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_70C = .bss:0x0000070C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_710 = .bss:0x00000710; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_714 = .bss:0x00000714; // type:object size:0xC scope:local -lbl_1_bss_720 = .bss:0x00000720; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_724 = .bss:0x00000724; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_728 = .bss:0x00000728; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_72A = .bss:0x0000072A; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_72C = .bss:0x0000072C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_730 = .bss:0x00000730; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_734 = .bss:0x00000734; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_738 = .bss:0x00000738; // type:object size:0xC scope:local data:float -lbl_1_bss_744 = .bss:0x00000744; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_748 = .bss:0x00000748; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_74C = .bss:0x0000074C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_750 = .bss:0x00000750; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_754 = .bss:0x00000754; // type:object size:0x4 scope:local data:float -lbl_1_bss_758 = .bss:0x00000758; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_75C = .bss:0x0000075C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_760 = .bss:0x00000760; // type:object size:0x28 scope:local -lbl_1_bss_788 = .bss:0x00000788; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_78A = .bss:0x0000078A; // type:object size:0x6 scope:local data:2byte -lbl_1_bss_790 = .bss:0x00000790; // type:object size:0x6 scope:local data:2byte -lbl_1_bss_796 = .bss:0x00000796; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_79C = .bss:0x0000079C; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7A0 = .bss:0x000007A0; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7A4 = .bss:0x000007A4; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7A8 = .bss:0x000007A8; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7AA = .bss:0x000007AA; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7AC = .bss:0x000007AC; // type:object size:0x8 scope:local data:4byte -lbl_1_bss_7B4 = .bss:0x000007B4; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7B8 = .bss:0x000007B8; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7BC = .bss:0x000007BC; // type:object size:0x8 scope:local data:4byte -lbl_1_bss_7C4 = .bss:0x000007C4; // type:object size:0xC scope:local data:float -lbl_1_bss_7D0 = .bss:0x000007D0; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7D2 = .bss:0x000007D2; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7D4 = .bss:0x000007D4; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7D6 = .bss:0x000007D6; // type:object size:0x2 scope:local data:2byte -lbl_1_bss_7D8 = .bss:0x000007D8; // type:object size:0xC scope:local data:4byte -lbl_1_bss_7E4 = .bss:0x000007E4; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7E8 = .bss:0x000007E8; // type:object size:0x4 scope:local data:float -lbl_1_bss_7EC = .bss:0x000007EC; // type:object size:0x4 scope:local data:float -lbl_1_bss_7F0 = .bss:0x000007F0; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7F4 = .bss:0x000007F4; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7F8 = .bss:0x000007F8; // type:object size:0x4 scope:local data:4byte -lbl_1_bss_7FC = .bss:0x000007FC; // type:object size:0x10 scope:local data:4byte -lbl_1_bss_80C = .bss:0x0000080C; // type:object size:0xC scope:local data:float -lbl_1_bss_818 = .bss:0x00000818; // type:object size:0x4 scope:local data:4byte +coasterStartSpace = .bss:0x000006AC; // type:object size:0x2 scope:local data:2byte +coasterPathMdlId = .bss:0x000006AE; // type:object size:0x2 scope:local data:2byte +coasterType = .bss:0x000006B0; // type:object size:0x1 scope:local data:byte +coasterLandF = .bss:0x000006B1; // type:object size:0x1 scope:local data:byte +coasterDoneF = .bss:0x000006B2; // type:object size:0x1 scope:local data:byte +coasterLoopF = .bss:0x000006B3; // type:object size:0x1 scope:local data:byte +eventPlayer = .bss:0x000006B4; // type:object size:0x1 scope:local data:byte +roundItemTbl = .bss:0x000006B6; // type:object size:0xA scope:local data:2byte +mapObjMotTbl = .bss:0x000006C0; // type:object size:0x4 scope:local data:4byte +mapObjMdlId = .bss:0x000006C4; // type:object size:0x42 data:2byte +spaceAmidaSeqStopF = .bss:0x00000708; // type:object size:0x2 scope:local data:2byte +spaceAmidaEffAnim = .bss:0x0000070C; // type:object size:0x4 scope:local data:4byte +spaceAmidaEffObj = .bss:0x00000710; // type:object size:0x4 scope:local data:4byte +rocketObj = .bss:0x00000714; // type:object size:0xC scope:local +spaceAmidaGameObj = .bss:0x00000720; // type:object size:0x4 scope:local data:4byte +spaceAmidaSeNo = .bss:0x00000724; // type:object size:0x4 scope:local data:4byte +spaceAmidaCoinNum = .bss:0x00000728; // type:object size:0x2 scope:local data:2byte +spaceAmidaStopF = .bss:0x0000072A; // type:object size:0x2 scope:local data:2byte +rocketWarpF = .bss:0x0000072C; // type:object size:0x4 scope:local data:4byte +spaceAmidaPath = .bss:0x00000730; // type:object size:0x4 scope:local data:4byte +spaceAmidaMapNo = .bss:0x00000734; // type:object size:0x4 scope:local data:4byte +spaceAmidaPos = .bss:0x00000738; // type:object size:0xC scope:local data:float +timerSeqId = .bss:0x00000744; // type:object size:0x2 scope:local data:2byte +timerFrame = .bss:0x00000748; // type:object size:0x4 scope:local data:4byte +timerSec = .bss:0x0000074C; // type:object size:0x4 scope:local data:4byte +kemuriMdlId = .bss:0x00000750; // type:object size:0x2 scope:local data:2byte +spaceAmidaTime = .bss:0x00000754; // type:object size:0x4 scope:local data:float +spaceAmidaMainObj = .bss:0x00000758; // type:object size:0x4 scope:local data:4byte +coinWinProc = .bss:0x0000075C; // type:object size:0x4 scope:local data:4byte +coinMdlId = .bss:0x00000760; // type:object size:0x28 scope:local +spaceAmidaEffMdlId = .bss:0x00000788; // type:object size:0x2 scope:local data:2byte +rocketMdlId = .bss:0x0000078A; // type:object size:0x6 scope:local data:2byte +mapMdlId = .bss:0x00000790; // type:object size:0x6 scope:local data:2byte +spaceAmidaMdlId = .bss:0x00000796; // type:object size:0x2 scope:local data:2byte +spaceAmidaPlayerNo = .bss:0x00000798; // type:object size:0x4 scope:local data:4byte +spaceAmidaPadNo = .bss:0x0000079C; // type:object size:0x4 scope:local data:4byte +roundItemEffAnim = .bss:0x000007A0; // type:object size:0x4 scope:local data:4byte +roundItemStreamId = .bss:0x000007A4; // type:object size:0x4 scope:local data:4byte +umaStopTimer = .bss:0x000007A8; // type:object size:0x2 scope:local data:2byte +roundItemStopF = .bss:0x000007AA; // type:object size:0x2 scope:local data:2byte +itemGetSeNo = .bss:0x000007AC; // type:object size:0x4 scope:local data:4byte +umaStopF = .bss:0x000007B4; // type:object size:0x2 scope:local data:2byte +jumpMotId = .bss:0x000007B8; // type:object size:0x4 scope:local data:4byte +itemGetMotId = .bss:0x000007BC; // type:object size:0x8 scope:local data:4byte +playerPos = .bss:0x000007C4; // type:object size:0xC scope:local data:float +timerFrame = .bss:0x000007D0; // type:object size:0x2 scope:local data:2byte +timerSec = .bss:0x000007D2; // type:object size:0x2 scope:local data:2byte +timerSeqId = .bss:0x000007D4; // type:object size:0x2 scope:local data:2byte +seqStartId = .bss:0x000007D6; // type:object size:0x2 scope:local data:2byte +umaPos = .bss:0x000007D8; // type:object size:0xC scope:local data:4byte +roundItemPlayer = .bss:0x000007E4; // type:object size:0x4 scope:local data:4byte +borderSpeed = .bss:0x000007E8; // type:object size:0x4 scope:local data:float +umaSpeed = .bss:0x000007EC; // type:object size:0x4 scope:local data:float +itemGetObj = .bss:0x000007F0; // type:object size:0x4 scope:local data:4byte +roundItemMainObj = .bss:0x000007F4; // type:object size:0x4 scope:local data:4byte +roundItemUmaObj = .bss:0x000007F8; // type:object size:0x4 scope:local data:4byte +itemObj = .bss:0x000007FC; // type:object size:0x10 scope:local data:4byte +roundItemPos = .bss:0x0000080C; // type:object size:0xC scope:local data:float +itemAnim = .bss:0x00000818; // type:object size:0x4 scope:local data:4byte diff --git a/config/GMPP01_00/rels/w01Dll/splits.txt b/config/GMPP01_00/rels/w01Dll/splits.txt index 7baca9d9..8e0a4285 100644 --- a/config/GMPP01_00/rels/w01Dll/splits.txt +++ b/config/GMPP01_00/rels/w01Dll/splits.txt @@ -11,13 +11,13 @@ REL/board_executor.c: .rodata start:0x00000000 end:0x00000010 REL/w01Dll/main.c: - .text start:0x000000E0 end:0x00009D00 + .text start:0x000000E0 end:0x00009DD8 .rodata start:0x00000010 end:0x00000198 .data start:0x00000000 end:0x00000658 .bss start:0x00000000 end:0x00000708 REL/w01Dll/mg_coin.c: - .text start:0x00009D00 end:0x0000D740 + .text start:0x00009DD8 end:0x0000D740 .rodata start:0x00000198 end:0x000002C8 .data start:0x00000658 end:0x00000F08 .bss start:0x00000708 end:0x000007A0 diff --git a/include/REL/w01Dll.h b/include/REL/w01Dll.h index f3e1e5d6..c8c44f3b 100755 --- a/include/REL/w01Dll.h +++ b/include/REL/w01Dll.h @@ -4,24 +4,56 @@ #include "dolphin/types.h" enum { + MAPOBJ_COASTER, + MAPOBJ_COASTER_RAIL, + MAPOBJ_HOST1, + MAPOBJ_HOST2, + MAPOBJ_HOST3, + MAPOBJ_HOST4, + MAPOBJ_SPACEAMIDA, + MAPOBJ_SPACEAMIDA_MAP1, + MAPOBJ_SPACEAMIDA_MAP2, + MAPOBJ_SPACEAMIDA_MAP3, + MAPOBJ_SPACEAMIDA_ROCKET1, + MAPOBJ_SPACEAMIDA_ROCKET2, + MAPOBJ_SPACEAMIDA_ROCKET3, + MAPOBJ_SPACEAMIDA_LIGHTEFF, + MAPOBJ_SPACEAMIDA_LAMP1, + MAPOBJ_SPACEAMIDA_LAMP2, + MAPOBJ_ROUNDITEM, + MAPOBJ_ROUNDITEM_UMA, + MAPOBJ_ROUNDITEM_BORDER, + MAPOBJ_ROUNDITEM_ITEM, + MAPOBJ_ROUNDITEM_ITEM_LIGHT, + MAPOBJ_ROUNDITEM_ITEM_UP, + MAPOBJ_ROUNDITEM_ITEM_DENSYOKU, + MAPOBJ_CUPR_DISH, + MAPOBJ_CUPR1, + MAPOBJ_CUPR2, + MAPOBJ_CUPR3, + MAPOBJ_CUPR_ARROW, + MAPOBJ_CUPL_DISH, + MAPOBJ_CUPL1, + MAPOBJ_CUPL2, + MAPOBJ_CUPL3, + MAPOBJ_CUPL_ARROW, MAPOBJ_MAX = 33 }; typedef struct { /* 0x00 */ struct { - u8 unk00_field0 : 1; + u8 hostSide : 1; }; - /* 0x01 */ s8 unk01[2]; -} UnkBoardDataStruct; // Size unknown + /* 0x01 */ s8 cupDir[2]; +} W01BoardWork; -extern void fn_1_9D00(s32 arg0); -extern void fn_1_9DD8(void); +extern void SpaceAmidaExec(void); -extern void fn_1_D740(s16 *arg0); -extern void fn_1_DD84(void); -extern void fn_1_DE94(void); +extern void RoundItemInit(s16 *itemTbl); +extern void RoundItemKill(void); +extern void RoundItemEventStart(void); -extern s16 lbl_1_bss_6C4[MAPOBJ_MAX]; -extern UnkBoardDataStruct *lbl_1_bss_0; +extern s16 mapObjMdlId[MAPOBJ_MAX]; +extern W01BoardWork *boardWork; #endif diff --git a/src/REL/w01Dll/main.c b/src/REL/w01Dll/main.c index 6cf2beb7..f1d1e39f 100755 --- a/src/REL/w01Dll/main.c +++ b/src/REL/w01Dll/main.c @@ -33,136 +33,133 @@ typedef struct { struct { - u8 unk00_field0 : 1; + u8 killF : 1; }; -} Bss10Work; +} CoasterCameraWork; typedef struct { struct { - u8 unk00_field0 : 1; - u8 unk00_field1 : 3; - u8 unk00_field2 : 1; - u8 unk00_field3 : 1; + u8 killF : 1; + u8 mode : 3; + u8 stopF : 1; + u8 decaF : 1; }; - u8 unk01; - u8 unk02; - char unk03[1]; - s16 unk04; - char unk06[2]; - float unk08; -} Bss18Work; + u8 time; + u8 delay; + s16 dishMdlId; + float dishSpeed; +} CupObjWork; typedef struct { - /* 0x00 */ s8 unk00; - /* 0x01 */ s8 unk01; - /* 0x02 */ s16 unk02; - /* 0x04 */ s16 unk04; - /* 0x06 */ s16 unk06; - /* 0x08 */ float unk08; - /* 0x0C */ char unk0C[4]; - /* 0x10 */ float unk10; - /* 0x14 */ Vec unk14; - /* 0x20 */ Mtx unk20; -} BssCData; // Size 0x50 + s8 mode; + s8 playerNo; + s16 delay; + s16 pathMdlId; + s16 endSpace; + float speed; + float unk0C; + float time; + Vec pos; + Mtx matrix; +} CoasterPlayerWork; // Size 0x50 typedef struct { struct { - u8 unk00_field0 : 1; + u8 killF : 1; }; - s8 unk01; - char unk02[2]; - BssCData *unk04; -} BssCWork; + s8 playerNum; + CoasterPlayerWork *player; +} CoasterPlayerManWork; typedef struct { - /* 0x00 */ s16 unk00; - /* 0x02 */ s16 unk02; - /* 0x04 */ float unk04; - /* 0x08 */ Vec unk08; - /* 0x14 */ Vec unk14; -} Bss20Data; // Size 0x20 + /* 0x00 */ s16 time; + /* 0x02 */ s16 mdlId; + /* 0x04 */ float scale; + /* 0x08 */ Vec pos; + /* 0x14 */ Vec vel; +} CoasterEffData; // Size 0x20 typedef struct { struct { - u8 unk00_field0 : 1; + u8 killF : 1; }; - u8 unk01; - char unk02[2]; - Bss20Data *unk04; -} Bss20Work; + u8 delay; + CoasterEffData *data; +} CoasterEffWork; -static void fn_1_730(void); -static void fn_1_774(void); -static s32 fn_1_778(void); -static s32 fn_1_814(void); -static void fn_1_9E8(void); +static void LightSetHook(void); +static void LightResetHook(void); +static s32 LandEvent(void); +static s32 WalkEvent(void); +static void MapObjDispSet(void); static void fn_1_D00(void); -static void fn_1_D04(void); -static void fn_1_1254(void); -static void fn_1_128C(void); -static void fn_1_130C(void); -static s32 fn_1_157C(void); -static void fn_1_1670(void); -static void fn_1_1700(void); -static void fn_1_1990(void); -static void fn_1_1AD8(BoardCameraData *camera); -static void fn_1_1B3C(void); -static void fn_1_1EE4(void); -static void fn_1_1F2C(omObjData *arg0); -static void fn_1_1FA4(void); -static float fn_1_2524(void); -static void fn_1_276C(void); -static void fn_1_2F18(void); -static void fn_1_3350(void); -static void fn_1_3514(s32 arg0); -static void fn_1_35B4(s32 arg0); -static void fn_1_3624(void); -static void fn_1_45F4(void); -static void fn_1_4774(void); -static void fn_1_4864(void); -static s32 fn_1_48B4(void); -static void fn_1_4E14(void); -static void fn_1_4FA8(void); -static void fn_1_4FD8(void); -static void fn_1_50D4(void); -static void fn_1_53B8(void); -static void fn_1_543C(void); -static void fn_1_5694(s32 arg0); -static void fn_1_586C(s32 arg0, s32 arg1); -static void fn_1_592C(void); -static void fn_1_5B2C(void); -static void fn_1_5B40(void); -static BOOL fn_1_5CD0(void); -static void fn_1_5D08(void); -static void fn_1_6098(omObjData *arg0); -static void fn_1_6194(Bss18Work *arg0, omObjData *arg1); -static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1); -static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1); -static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1); -static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1); -static void fn_1_7528(s32 arg0, s32 arg1); -static void fn_1_77EC(s32 arg0, s32 arg1); -static void fn_1_7894(void); -static void fn_1_7A64(void); -static void fn_1_852C(void); -static void fn_1_87AC(void); -static void fn_1_87E0(omObjData *arg0); -static void fn_1_8988(BssCData *arg0, omObjData *arg1); -static void fn_1_8A50(BssCData *arg0, omObjData *arg1); -static void fn_1_8B6C(BssCData *arg0, omObjData *arg1); -static void fn_1_8DDC(BssCData *arg0, omObjData *arg1); -static void fn_1_918C(BssCData *arg0, omObjData *arg1); -static void fn_1_927C(BssCData *arg0, omObjData *arg1); -static void fn_1_932C(BssCData *arg0); -static s32 fn_1_94A8(BssCData *arg0); -static void fn_1_95F4(BssCData *arg0); -static void fn_1_97F4(void); -static void fn_1_98EC(void); -static void fn_1_9920(omObjData *arg0); -static void fn_1_9A24(Bss20Work *arg0); -static void fn_1_9BBC(Bss20Work *arg0); +static void RoundItemMain(void); +static void RoundItemDestroy(void); +static void RoundItemEvent(void); +static void SpaceAmidaEvent(void); +static s32 WalkMiniEvent(void); +static void UpdateHostDisp(void); +static void CoasterInit(void); +static void CoasterPathUpdate(void); +static void CoasterPosCalc(BoardCameraData *camera); +static void CoasterCameraUpdate(void); +static void CoasterCameraObjKill(void); +static void CoasterCameraObjMain(omObjData *obj); +static void CoasterCameraObjUpdate(void); +static float CoasterStickRotGet(void); +static void CoasterRotUpdate(void); +static void CoasterCoinCheck(void); +static void CoasterPathMotUpdate(void); +static void CoasterMotCreate(s32 playerNo); +static void CoasterMotKill(s32 playerNo); +static void CoasterExec(void); +static void CoasterExit(void); +static void CoasterWinCreate(void); +static void CoasterWinKill(void); +static s32 CoasterHostExec(void); +static void CoasterMain(void); +static void CoasterDestroy(void); +static void CoasterEvent(void); +static void CoasterCoinCreate(void); +static void CoasterCoinKill(void); +static void CupInit(void); +static void CupMotOnSet(s32 stopF); +static void CupEvent(s32 side, s32 spaceStart); +static void CupMain(void); +static void CupDestroy(void); +static void CupExec(void); +static BOOL CupObjCheck(void); +static void CupObjCreate(void); +static void CupObjMain(omObjData *obj); +static void CupObjInit(CupObjWork *work, omObjData *obj); +static void CupObjJumpWait(CupObjWork *work, omObjData *obj); +static void CupObjHookReset(CupObjWork *work, omObjData *obj); +static void CupObjStop(CupObjWork *work, omObjData *obj); +static void CupObjRotate(CupObjWork *work, omObjData *obj); +static void CupLandEvent(s32 playerNo, s32 spaceId); +static void CoasterLandEvent(s32 playerNo, s32 spaceId); +static void CoasterLandMain(void); +static void CoasterLandExec(void); +static void CoasterPlayerManCreate(void); +static void CoasterPlayerManKill(void); +static void CoasterPlayerManUpdate(omObjData *obj); +static void CoasterPlayerWait(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerChaseBegin(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerChasePathSet(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerChase(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerStop(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerEnd(CoasterPlayerWork *work, omObjData *obj); +static void CoasterPlayerEndSet(CoasterPlayerWork *work); +static s32 CoasterPlayerLoopCheck(CoasterPlayerWork *work); +static void CoasterPlayerTimeInit(CoasterPlayerWork *work); +static void CoasterEffCreate(void); +static void CoasterEffKill(void); +static void CoasterEffUpdate(omObjData *obj); +static void CoasterEffAdd(CoasterEffWork *work); +static void CoasterEffModelUpdate(CoasterEffWork *work); +extern void CoasterHostComKeySet(s32 playerNo); -static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] +static BoardMapObject mapObjData[MAPOBJ_MAX] = { { { 0.0f, 0.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 8) }, { { 0.0f, 700.0f, 300.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 9) }, { { -2025.0f, 100.0f, 1950.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_BGUEST, 0) }, @@ -197,116 +194,116 @@ static BoardMapObject lbl_1_data_0[MAPOBJ_MAX] { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 4) }, { { -1800.0f, 200.0f, -900.0f }, { 0.0f, 0.0f, 0.0f }, { 1.0f, 1.0f, 1.0f }, DATA_MAKE_NUM(DATADIR_W01, 5) } }; -s16 lbl_1_bss_6C4[MAPOBJ_MAX]; +s16 mapObjMdlId[MAPOBJ_MAX]; -static s32 *lbl_1_bss_6C0; -static s16 lbl_1_bss_6B6[5]; -static s8 lbl_1_bss_6B4; -static s8 lbl_1_bss_6B3; -static s8 lbl_1_bss_6B2; -static s8 lbl_1_bss_6B1; -static s8 lbl_1_bss_6B0; -static s16 lbl_1_bss_6AE; -static s16 lbl_1_bss_6AC; +static s32 *mapObjMotTbl; +static s16 roundItemTbl[5]; +static s8 eventPlayer; +static s8 coasterLoopF; +static s8 coasterDoneF; +static s8 coasterLandF; +static s8 coasterType; +static s16 coasterPathMdlId; +static s16 coasterStartSpace; static float lbl_1_bss_6A8; -static Mtx lbl_1_bss_678; -static float lbl_1_bss_674; -static float lbl_1_bss_670; -static float lbl_1_bss_66C; -static Vec lbl_1_bss_660; -static Vec lbl_1_bss_654; -static Vec lbl_1_bss_648; -static float lbl_1_bss_644; -static float lbl_1_bss_640; -static float lbl_1_bss_63C; -static Vec lbl_1_bss_630; -static Vec lbl_1_bss_624; -static Vec lbl_1_bss_618; -static s8 lbl_1_bss_600[24]; -static s16 lbl_1_bss_5D0[24]; -static s16 lbl_1_bss_5CC[2]; +static Mtx coasterMtx; +static float coasterAccel; +static float coasterSpeed; +static float coasterCamSpeed; +static Vec coasterRot; +static Vec coasterPos; +static Vec coasterPosOld; +static float coasterMaxTime; +static float coasterTime; +static float coasterBaseRotY; +static Vec coasterCameraPos; +static Vec coasterCameraUp; +static Vec coasterCameraTarget; +static s8 coasterCoinF[24]; +static s16 coasterCoinMdlId[24]; +static s16 coasterMotId[2]; static s8 lbl_1_bss_2C[1440]; static s8 lbl_1_bss_2A[2]; // padding -static s8 lbl_1_bss_29; -static s8 lbl_1_bss_28; -static s16 lbl_1_bss_26; -static s16 lbl_1_bss_24; -static omObjData *lbl_1_bss_20; -static s8 lbl_1_bss_1C; -static omObjData *lbl_1_bss_18; -static Process *lbl_1_bss_14; -static omObjData *lbl_1_bss_10; -static omObjData *lbl_1_bss_C; -static Process *lbl_1_bss_8; -static Process *lbl_1_bss_4; -UnkBoardDataStruct *lbl_1_bss_0; +static s8 cupSide; +static s8 cupHookNo; +static s16 cupSpaceStart; +static s16 cupSpaceEnd; +static omObjData *coasterEffObj; +static s8 coasterPlayerChaseNum; +static omObjData *cupObj; +static Process *cupProc; +static omObjData *coasterCameraObj; +static omObjData *coasterPlayerManObj; +static Process *coasterProc; +static Process *roundItemProc; +W01BoardWork *boardWork; -static s16 lbl_1_data_528 = -1; -static s16 lbl_1_data_52A = -1; -static s16 lbl_1_data_52C = -1; -static s16 lbl_1_data_52E = -1; -static s16 lbl_1_data_530 = -1; +static s16 bgMdl = -1; +static s16 fgMdl = -1; +static s16 starHostMdl = -1; +static s16 hostMdl = -1; +static s16 syuppouMdl = -1; -static s32 lbl_1_data_534[] = { DATA_MAKE_NUM(DATADIR_W01, 30), -1 }; +static s32 starHostMotTbl[] = { DATA_MAKE_NUM(DATADIR_W01, 30), -1 }; -static s32 lbl_1_data_53C[] = { DATA_MAKE_NUM(DATADIR_BGUEST, 1), -1 }; +static s32 hostMotTbl[] = { DATA_MAKE_NUM(DATADIR_BGUEST, 1), -1 }; void BoardCreate(void) { - BoardMapObject *temp_r30; - s32 sp8; + BoardMapObject *mapObj; + s32 boardNo; s32 i; - sp8 = GWBoardGet(); - lbl_1_bss_0 = (UnkBoardDataStruct *)GWSystem.board_data; + boardNo = GWBoardGet(); + boardWork = (W01BoardWork *)GWSystem.board_data; BoardSpaceInit(DATA_MAKE_NUM(DATADIR_W01, 0)); - lbl_1_data_528 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 1), NULL, 0); - fn_8006DDE8(lbl_1_data_528, -1.0f); - BoardModelPosSet(lbl_1_data_528, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_528, 0, 0x40000001); - lbl_1_data_52A = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 2), NULL, 0); - fn_8006DDE8(lbl_1_data_52A, -1.0f); - BoardModelPosSet(lbl_1_data_52A, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_52A, 0, 0x40000001); - lbl_1_data_52C = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 29), lbl_1_data_534, 0); - BoardModelPosSet(lbl_1_data_52C, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_52C, 1, 0x40000001); - lbl_1_data_52E = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 0), lbl_1_data_53C, 0); - BoardModelPosSet(lbl_1_data_52E, 0.0f, 0.0f, 0.0f); - BoardModelMotionStart(lbl_1_data_52E, 1, 0x40000001); - lbl_1_data_530 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 11), NULL, 0); - BoardModelMotionStart(lbl_1_data_530, 0, 0x40000001); - BoardLightHookSet(fn_1_730, fn_1_774); + bgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 1), NULL, 0); + fn_8006DDE8(bgMdl, -1.0f); + BoardModelPosSet(bgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(bgMdl, 0, HU3D_MOTATTR_LOOP); + fgMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 2), NULL, 0); + fn_8006DDE8(fgMdl, -1.0f); + BoardModelPosSet(fgMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(fgMdl, 0, HU3D_MOTATTR_LOOP); + starHostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 29), starHostMotTbl, 0); + BoardModelPosSet(starHostMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(starHostMdl, 1, HU3D_MOTATTR_LOOP); + hostMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BGUEST, 0), hostMotTbl, 0); + BoardModelPosSet(hostMdl, 0.0f, 0.0f, 0.0f); + BoardModelMotionStart(hostMdl, 1, HU3D_MOTATTR_LOOP); + syuppouMdl = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 11), NULL, 0); + BoardModelMotionStart(syuppouMdl, 0, HU3D_MOTATTR_LOOP); + BoardLightHookSet(LightSetHook, LightResetHook); for (i = 0; i < MAPOBJ_MAX; i++) { - temp_r30 = &lbl_1_data_0[i]; - if (temp_r30->data_num != -1) { - if (i == 2 || i == 3 || i == 4 || i == 5) { - lbl_1_bss_6C0 = lbl_1_data_53C; + mapObj = &mapObjData[i]; + if (mapObj->data_num != -1) { + if (i == MAPOBJ_HOST1 || i == MAPOBJ_HOST2 || i == MAPOBJ_HOST3 || i == MAPOBJ_HOST4) { + mapObjMotTbl = hostMotTbl; } else { - lbl_1_bss_6C0 = NULL; + mapObjMotTbl = NULL; } - lbl_1_bss_6C4[i] = BoardModelCreate(temp_r30->data_num, lbl_1_bss_6C0, 0); - BoardModelPosSetV(lbl_1_bss_6C4[i], &temp_r30->pos); - BoardModelRotSetV(lbl_1_bss_6C4[i], &temp_r30->rot); - BoardModelScaleSetV(lbl_1_bss_6C4[i], &temp_r30->scale); - BoardModelVisibilitySet(lbl_1_bss_6C4[i], 1); + mapObjMdlId[i] = BoardModelCreate(mapObj->data_num, mapObjMotTbl, 0); + BoardModelPosSetV(mapObjMdlId[i], &mapObj->pos); + BoardModelRotSetV(mapObjMdlId[i], &mapObj->rot); + BoardModelScaleSetV(mapObjMdlId[i], &mapObj->scale); + BoardModelVisibilitySet(mapObjMdlId[i], 1); } } - BoardModelMotionStart(lbl_1_bss_6C4[2], 1, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[3], 1, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[4], 1, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[5], 1, 0x40000001); - fn_1_543C(); - fn_1_9E8(); - fn_1_1700(); - BoardSpaceWalkEventFuncSet(fn_1_814); - BoardSpaceWalkMiniEventFuncSet(fn_1_157C); - BoardSpaceLandEventFuncSet(fn_1_778); - BoardStarHostSet(lbl_1_data_52C); - BoardBooHouseHostSet(lbl_1_data_52E); - BoardLotteryHostSet(lbl_1_data_52E); - BoardShopHostSet(lbl_1_data_52E); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_HOST1], 1, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_HOST2], 1, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_HOST3], 1, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_HOST4], 1, HU3D_MOTATTR_LOOP); + CupInit(); + MapObjDispSet(); + CoasterInit(); + BoardSpaceWalkEventFuncSet(WalkEvent); + BoardSpaceWalkMiniEventFuncSet(WalkMiniEvent); + BoardSpaceLandEventFuncSet(LandEvent); + BoardStarHostSet(starHostMdl); + BoardBooHouseHostSet(hostMdl); + BoardLotteryHostSet(hostMdl); + BoardShopHostSet(hostMdl); BoardJunctionMaskSet(0xC000); BoardJunctionMaskSet(0x3000); } @@ -315,217 +312,217 @@ void BoardDestroy(void) { s32 i; - fn_1_4864(); + CoasterWinKill(); fn_1_D00(); - for (i = 0; i < 33; i++) { - if (lbl_1_bss_6C4[i] != 0) { - BoardModelKill(lbl_1_bss_6C4[i]); - lbl_1_bss_6C4[i] = 0; + for (i = 0; i < MAPOBJ_MAX; i++) { + if (mapObjMdlId[i] != 0) { + BoardModelKill(mapObjMdlId[i]); + mapObjMdlId[i] = 0; } } - if (lbl_1_data_530 != -1) { - BoardModelKill(lbl_1_data_530); - lbl_1_data_530 = -1; + if (syuppouMdl != -1) { + BoardModelKill(syuppouMdl); + syuppouMdl = -1; } - if (lbl_1_data_52E != -1) { - BoardModelKill(lbl_1_data_52E); - lbl_1_data_52E = -1; + if (hostMdl != -1) { + BoardModelKill(hostMdl); + hostMdl = -1; } - if (lbl_1_data_52C != -1) { - BoardModelKill(lbl_1_data_52C); - lbl_1_data_52C = -1; + if (starHostMdl != -1) { + BoardModelKill(starHostMdl); + starHostMdl = -1; } - if (lbl_1_data_528 != -1) { - BoardModelKill(lbl_1_data_528); - lbl_1_data_528 = -1; + if (bgMdl != -1) { + BoardModelKill(bgMdl); + bgMdl = -1; } - if (lbl_1_data_52A != -1) { - BoardModelKill(lbl_1_data_52A); - lbl_1_data_52A = -1; + if (fgMdl != -1) { + BoardModelKill(fgMdl); + fgMdl = -1; } BoardSpaceDestroy(); } -static void fn_1_730(void) +static void LightSetHook(void) { - s16 var_r31; + s16 modelId; - var_r31 = BoardModelIDGet(lbl_1_data_528); - Hu3DModelLightInfoSet(var_r31, 1); + modelId = BoardModelIDGet(bgMdl); + Hu3DModelLightInfoSet(modelId, 1); } -static void fn_1_774(void) { } +static void LightResetHook(void) { } -static s32 fn_1_778(void) +static s32 LandEvent(void) { - s32 temp_r31; - s32 temp_r30; - u32 temp_r29; + s32 playerNo; + s32 spaceId; + u32 flag; - temp_r31 = GWSystem.player_curr; - temp_r30 = GWPlayer[temp_r31].space_curr; - temp_r29 = BoardSpaceFlagGet(0, temp_r30); - if (temp_r29 & 0x800) { - fn_1_77EC(temp_r31, temp_r30); + playerNo = GWSystem.player_curr; + spaceId = GWPlayer[playerNo].space_curr; + flag = BoardSpaceFlagGet(0, spaceId); + if (flag & 0x800) { + CoasterLandEvent(playerNo, spaceId); } - else if (temp_r29 & 0x400) { - fn_1_7528(temp_r31, temp_r30); + else if (flag & 0x400) { + CupLandEvent(playerNo, spaceId); } } -static s32 fn_1_814(void) +static s32 WalkEvent(void) { - s32 temp_r27; - s32 var_r30; - s32 var_r29; - s32 var_r26; - BoardSpace *temp_r31; - BoardSpace *temp_r28; + s32 playerNo; + s32 i; + s32 type; + s32 spaceLinkId; + BoardSpace *space; + BoardSpace *spaceLink; - temp_r27 = GWSystem.player_curr; - temp_r31 = BoardSpaceGet(0, GWPlayer[temp_r27].space_curr); - if (temp_r31->flag & 0x3000) { - if (BoardPlayerSizeGet(temp_r27) == 2 || GWPlayer[temp_r27].bowser_suit) { + playerNo = GWSystem.player_curr; + space = BoardSpaceGet(0, GWPlayer[playerNo].space_curr); + if (space->flag & 0x3000) { + if (BoardPlayerSizeGet(playerNo) == 2 || GWPlayer[playerNo].bowser_suit) { return 0; } - if (temp_r31->flag & 0x2000) { - if (lbl_1_bss_0->unk00_field0 != 0) { + if (space->flag & 0x2000) { + if (boardWork->hostSide != 0) { return 0; } } - else if (temp_r31->flag & 0x1000) { - if (lbl_1_bss_0->unk00_field0 != 1) { + else if (space->flag & 0x1000) { + if (boardWork->hostSide != 1) { return 0; } } - fn_1_4FD8(); + CoasterEvent(); return 1; } - var_r29 = -1; - for (var_r30 = 0; var_r30 < temp_r31->link_cnt; var_r30++) { - if (temp_r31->link[var_r30] != -1) { - temp_r28 = BoardSpaceGet(0, temp_r31->link[var_r30]); - if (temp_r28->flag & 0x8000) { - var_r29 = 0; - var_r26 = temp_r31->link[var_r30]; + type = -1; + for (i = 0; i < space->link_cnt; i++) { + if (space->link[i] != -1) { + spaceLink = BoardSpaceGet(0, space->link[i]); + if (spaceLink->flag & 0x8000) { + type = 0; + spaceLinkId = space->link[i]; break; } - else if (temp_r28->flag & 0x4000) { - var_r29 = 1; - var_r26 = temp_r31->link[var_r30]; + else if (spaceLink->flag & 0x4000) { + type = 1; + spaceLinkId = space->link[i]; break; } } } - if (var_r29 != -1) { - fn_1_586C(var_r29, var_r26); + if (type != -1) { + CupEvent(type, spaceLinkId); return 1; } return 0; } -static void fn_1_9E8(void) +static void MapObjDispSet(void) { - BoardModelVisibilitySet(lbl_1_bss_6C4[6], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[7], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[8], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[9], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[10], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[11], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[12], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[13], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[14], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[15], 1); - BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[6], 0.0f); - BoardModelMotionStart(lbl_1_bss_6C4[14], 0, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[15], 0, 0x40000001); - BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenr", lbl_1_bss_6C4[14]); - BoardModelHookSet(lbl_1_bss_6C4[6], "amida_ban_07-sirenl", lbl_1_bss_6C4[15]); - BoardModelVisibilitySet(lbl_1_bss_6C4[16], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[17], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[18], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[21], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[22], 1); - BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f); - BoardModelMotionStart(lbl_1_bss_6C4[18], 0, 0); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); - BoardModelExistDupe(lbl_1_bss_6C4[16], 0); - BoardModelMotionStart(lbl_1_bss_6C4[16], 0, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[17], 0, 0x40000001); - BoardModelMotionStart(lbl_1_bss_6C4[22], 0, 0x40000001); - BoardModelHookSet(lbl_1_bss_6C4[21], "m_goraund_01-flag1", lbl_1_bss_6C4[22]); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP1], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP2], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP3], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET1], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET2], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET3], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_LIGHTEFF], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP1], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP2], 1); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_SPACEAMIDA], 0, 0); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_SPACEAMIDA], 0.0f); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP1], 0, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP2], 0, HU3D_MOTATTR_LOOP); + BoardModelHookSet(mapObjMdlId[MAPOBJ_SPACEAMIDA], "amida_ban_07-sirenr", mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP1]); + BoardModelHookSet(mapObjMdlId[MAPOBJ_SPACEAMIDA], "amida_ban_07-sirenl", mapObjMdlId[MAPOBJ_SPACEAMIDA_LAMP2]); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_DENSYOKU], 1); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0, 0); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0.0f); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], 0, 0); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], 0.0f); + BoardModelExistDupe(mapObjMdlId[MAPOBJ_ROUNDITEM], 0); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM], 0, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], 0, HU3D_MOTATTR_LOOP); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_DENSYOKU], 0, HU3D_MOTATTR_LOOP); + BoardModelHookSet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], "m_goraund_01-flag1", mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_DENSYOKU]); } static void fn_1_D00(void) { } -static void fn_1_D04(void) +static void RoundItemMain(void) { - Vec sp3C; - Vec sp30; - Vec sp24; - Vec sp18; - Vec spC; - s8 sp8[4]; - s32 temp_r28; - s32 temp_r3; - s32 var_r26; - s32 var_r25; - s32 temp_r30; + Vec spacePos; + s8 comItem[4]; + s32 spaceStart; + s32 spaceEnd; + s32 comPlayF; + s32 choice; + s32 playerNo; s32 i; s32 j; - temp_r30 = GWSystem.player_curr; - var_r26 = 0; - if (BoardPlayerItemCount(temp_r30) == 3) { + playerNo = GWSystem.player_curr; + comPlayF = FALSE; + if (BoardPlayerItemCount(playerNo) == 3) { BoardWinCreate(0, MAKE_MESSID(10, 9), 0); BoardWinWait(); BoardWinKill(); HuPrcEnd(); } - lbl_1_bss_6B6[0] = 0; + roundItemTbl[0] = 0; i = 1; while (i < 4) { - lbl_1_bss_6B6[i] = frandmod(14); - if (lbl_1_bss_6B6[i] != 10 && lbl_1_bss_6B6[i] != 13) { + roundItemTbl[i] = frandmod(14); + if (roundItemTbl[i] != 10 && roundItemTbl[i] != 13) { for (j = 0; j < i; j++) { - if (lbl_1_bss_6B6[i] == lbl_1_bss_6B6[j]) { - lbl_1_bss_6B6[i] = -1; + if (roundItemTbl[i] == roundItemTbl[j]) { + roundItemTbl[i] = -1; } } - if (lbl_1_bss_6B6[i] != -1) { + if (roundItemTbl[i] != -1) { i++; } } } - fn_1_D740(lbl_1_bss_6B6); + RoundItemInit(roundItemTbl); for (i = 0; i < 4; i++) { - sp8[i] = lbl_1_bss_6B6[i]; + comItem[i] = roundItemTbl[i]; } - if (BoardComPreferItemGet(temp_r30, sp8, 4) != -1) { - var_r26 = 1; + if (BoardComPreferItemGet(playerNo, comItem, 4) != -1) { + comPlayF = TRUE; } HuAudFXPlay(0x40D); HuAudFXPlay(0x40E); - BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004); - BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0); - temp_r28 = GWPlayer[temp_r30].space_curr; - temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r28, 0x02000000); - BoardSpacePosGet(0, temp_r3, &sp3C); - sp30.x = 150.0f; - sp30.y = 0.0f; - sp30.z = 0.0f; - sp24.x = -45.0f; - sp24.y = 0.0f; - sp24.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_6C4[4], &sp24, &sp30, 1880.0f, -1.0f, 21); + BoardModelAttrReset(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], HU3D_MOTATTR_REV); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0, 0); + spaceStart = GWPlayer[playerNo].space_curr; + spaceEnd = BoardSpaceLinkFlagSearch(0, spaceStart, 0x02000000); + BoardSpacePosGet(0, spaceEnd, &spacePos); + { + Vec cameraOfs; + Vec cameraRot; + cameraOfs.x = 150.0f; + cameraOfs.y = 0.0f; + cameraOfs.z = 0.0f; + cameraRot.x = -45.0f; + cameraRot.y = 0.0f; + cameraRot.z = 0.0f; + BoardCameraMotionStartEx(mapObjMdlId[MAPOBJ_HOST3], &cameraRot, &cameraOfs, 1880.0f, -1.0f, 21); + } BoardCameraMotionWait(); BoardWinCreateChoice(2, MAKE_MESSID(10, 0), 0, 0); - if (GWPlayer[temp_r30].com) { - if (var_r26 != 0) { + if (GWPlayer[playerNo].com) { + if (comPlayF != 0) { BoardComKeySetLeft(); } else { @@ -534,369 +531,376 @@ static void fn_1_D04(void) } BoardWinWait(); BoardWinKill(); - var_r25 = BoardWinChoiceGet(); - if (var_r25 != 0) { + choice = BoardWinChoiceGet(); + if (choice != 0) { BoardWinCreate(2, MAKE_MESSID(10, 4), 0); BoardWinWait(); BoardWinKill(); BoardMGExit(); HuAudFXPlay(0x40F); - BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); - while (!BoardModelMotionEndCheck(lbl_1_bss_6C4[21])) { + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0, HU3D_MOTATTR_REV); + while (!BoardModelMotionEndCheck(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP])) { HuPrcVSleep(); } - BoardModelMotionSpeedSet(lbl_1_bss_6C4[21], 0.0f); - BoardModelAttrReset(lbl_1_bss_6C4[21], 0x40000004); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0.0f); + BoardModelAttrReset(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], HU3D_MOTATTR_REV); while (BoardMGDoneFlagGet() != 1) { HuPrcVSleep(); } BoardMGDoneFlagSet(0); - fn_1_DD84(); + RoundItemKill(); HuPrcEnd(); } - BoardPlayerMoveBetween(temp_r30, temp_r28, temp_r3); - while (GWPlayer[temp_r30].moving) { + BoardPlayerMoveBetween(playerNo, spaceStart, spaceEnd); + while (GWPlayer[playerNo].moving) { HuPrcVSleep(); } - BoardPlayerMotionStart(temp_r30, 1, 0x40000001); - sp18.x = 0.0f; - sp18.y = 0.0f; - sp18.z = 0.0f; - spC.x = -45.0f; - spC.y = 0.0f; - spC.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_6C4[21], &spC, &sp18, 1200.0f, -1.0f, 21); + BoardPlayerMotionStart(playerNo, 1, HU3D_MOTATTR_LOOP); + { + Vec cameraOfs; + Vec cameraRot; + cameraOfs.x = 0.0f; + cameraOfs.y = 0.0f; + cameraOfs.z = 0.0f; + cameraRot.x = -45.0f; + cameraRot.y = 0.0f; + cameraRot.z = 0.0f; + BoardCameraMotionStartEx(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], &cameraRot, &cameraOfs, 1200.0f, -1.0f, 21); + } BoardCameraMotionWait(); - fn_1_DE94(); + RoundItemEventStart(); while (BoardEventFlagGet() != 0) { HuPrcVSleep(); } BoardCameraMotionWait(); BoardAudSeqPause(0, 0, 1000); - while (GWPlayer[temp_r30].moving) { + while (GWPlayer[playerNo].moving) { HuPrcVSleep(); } - BoardPlayerMotionStart(temp_r30, 1, 0x40000001); + BoardPlayerMotionStart(playerNo, 1, HU3D_MOTATTR_LOOP); HuPrcEnd(); } -static void fn_1_1254(void) +static void RoundItemDestroy(void) { BoardWinKill(); CharModelDataClose(-1); - lbl_1_bss_4 = NULL; + roundItemProc = NULL; } -static void fn_1_128C(void) +static void RoundItemEvent(void) { - lbl_1_bss_4 = HuPrcChildCreate(fn_1_D04, 0x2003, 0x2000, 0, boardMainProc); - HuPrcDestructorSet2(lbl_1_bss_4, fn_1_1254); - while (lbl_1_bss_4) { + roundItemProc = HuPrcChildCreate(RoundItemMain, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(roundItemProc, RoundItemDestroy); + while (roundItemProc) { HuPrcVSleep(); } } -static void fn_1_130C(void) +static void SpaceAmidaEvent(void) { - Vec sp20; - Vec sp14; - Vec sp8; - s32 temp_r31; - s32 var_r28; - s32 temp_r30; - s32 temp_r3; + Vec spacePos; + s32 playerNo; + s32 choice; + s32 spaceStart; + s32 spaceEnd; - temp_r31 = GWSystem.player_curr; + playerNo = GWSystem.player_curr; BoardWinCreateChoice(2, MAKE_MESSID(11, 0), 0, 0); - if (GWPlayer[temp_r31].com) { + if (GWPlayer[playerNo].com) { BoardComKeySetLeft(); } BoardWinWait(); BoardWinKill(); - var_r28 = BoardWinChoiceGet(); - if (var_r28 != 0) { + choice = BoardWinChoiceGet(); + if (choice != 0) { BoardWinCreate(2, MAKE_MESSID(11, 4), 0); BoardWinWait(); BoardWinKill(); BoardMGExit(); return; } - BoardModelMotionStart(lbl_1_bss_6C4[6], 0, 0); - sp14.x = 0.0f; - sp14.y = 0.0f; - sp14.z = 0.0f; - sp8.x = 0.0f; - sp8.y = 170.0f; - sp8.z = 0.0f; - BoardCameraMotionStartEx(lbl_1_bss_6C4[6], &sp14, &sp8, 1200.0f, 25.0f, 21); - temp_r30 = GWPlayer[temp_r31].space_curr; - temp_r3 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000); - BoardSpacePosGet(0, temp_r3, &sp20); - BoardPlayerMoveBetween(temp_r31, temp_r30, temp_r3); - BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_SPACEAMIDA], 0, 0); + { + Vec cameraOfs; + Vec cameraRot; + cameraOfs.x = 0.0f; + cameraOfs.y = 0.0f; + cameraOfs.z = 0.0f; + cameraRot.x = 0.0f; + cameraRot.y = 170.0f; + cameraRot.z = 0.0f; + BoardCameraMotionStartEx(mapObjMdlId[MAPOBJ_SPACEAMIDA], &cameraOfs, &cameraRot, 1200.0f, 25.0f, 21); + } + + spaceStart = GWPlayer[playerNo].space_curr; + spaceEnd = BoardSpaceLinkFlagSearch(0, spaceStart, 0x02000000); + BoardSpacePosGet(0, spaceEnd, &spacePos); + BoardPlayerMoveBetween(playerNo, spaceStart, spaceEnd); + BoardPlayerMotionStart(playerNo, 1, HU3D_MOTATTR_LOOP); BoardAudSeqPause(0, 1, 1000); - fn_1_9DD8(); - while (GWPlayer[temp_r31].moving) { + SpaceAmidaExec(); + while (GWPlayer[playerNo].moving) { HuPrcVSleep(); } while (BoardEventFlagGet() != 0) { HuPrcVSleep(); } BoardAudSeqPause(0, 0, 1000); - while (GWPlayer[temp_r31].moving) { + while (GWPlayer[playerNo].moving) { HuPrcVSleep(); } - BoardPlayerMotionStart(temp_r31, 1, 0x40000001); + BoardPlayerMotionStart(playerNo, 1, HU3D_MOTATTR_LOOP); } -static s32 fn_1_157C(void) +static s32 WalkMiniEvent(void) { - s32 temp_r31; - s16 temp_curr; + s32 flag; + s16 spaceId; - temp_curr = GWPlayer[GWSystem.player_curr].space_curr; - temp_r31 = BoardSpaceFlagGet(0, temp_curr) & 0x600000; + spaceId = GWPlayer[GWSystem.player_curr].space_curr; + flag = BoardSpaceFlagGet(0, spaceId) & 0x600000; BoardRollDispSet(0); - if (temp_r31 == 0x200000) { - fn_1_130C(); + if (flag == 0x200000) { + SpaceAmidaEvent(); } - else if (temp_r31 == 0x400000) { - fn_1_128C(); + else if (flag == 0x400000) { + RoundItemEvent(); } BoardRollDispSet(1); } -static void fn_1_1670(void) +static void UpdateHostDisp(void) { - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardModelVisibilitySet(lbl_1_bss_6C4[2], 1); - BoardModelVisibilitySet(lbl_1_bss_6C4[3], 0); + if (boardWork->hostSide == 0) { + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_HOST1], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_HOST2], 0); } else { - BoardModelVisibilitySet(lbl_1_bss_6C4[2], 0); - BoardModelVisibilitySet(lbl_1_bss_6C4[3], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_HOST1], 0); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_HOST2], 1); } } -static void fn_1_1700(void) +static void CoasterInit(void) { - Vec sp8; - Mtx sp14; + Vec pos; + Mtx matrix; - lbl_1_bss_6B1 = 0; - lbl_1_bss_6AE = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); - lbl_1_bss_644 = BoardModelMotionMaxTimeGet(lbl_1_bss_6AE); - BoardModelVisibilitySet(lbl_1_bss_6AE, 0); + coasterLandF = 0; + coasterPathMdlId = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); + coasterMaxTime = BoardModelMotionMaxTimeGet(coasterPathMdlId); + BoardModelVisibilitySet(coasterPathMdlId, 0); memset(lbl_1_bss_2C, 0, sizeof(lbl_1_bss_2C)); if (BoardSpaceRead(1, DATA_MAKE_NUM(DATADIR_W01, 6)) == 0) { - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardSpaceFlagPosGet(1, 0x2000, &sp8); - BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); - lbl_1_bss_63C = -90.0f; + if (boardWork->hostSide == 0) { + BoardSpaceFlagPosGet(1, 0x2000, &pos); + BoardModelMotionTimeSet(coasterPathMdlId, coasterMaxTime); + coasterBaseRotY = -90.0f; } else { - BoardSpaceFlagPosGet(1, 0x1000, &sp8); - BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); - lbl_1_bss_63C = 90.0f; + BoardSpaceFlagPosGet(1, 0x1000, &pos); + BoardModelMotionTimeSet(coasterPathMdlId, 0.0f); + coasterBaseRotY = 90.0f; } - lbl_1_bss_654 = sp8; - BoardModelPosSetV(lbl_1_bss_6C4[0], &sp8); - BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, lbl_1_bss_63C, 0.0f); - BoardModelExistDupe(lbl_1_bss_6C4[0], 1); - BoardModelExistDupe(lbl_1_bss_6C4[1], 1); - fn_8006DDE8(lbl_1_bss_6C4[1], 500.0f); - MTXIdentity(sp14); - BoardModelMtxSet(lbl_1_bss_6C4[0], &sp14); - fn_1_1670(); + coasterPos = pos; + BoardModelPosSetV(mapObjMdlId[MAPOBJ_COASTER], &pos); + BoardModelRotSet(mapObjMdlId[MAPOBJ_COASTER], 0.0f, coasterBaseRotY, 0.0f); + BoardModelExistDupe(mapObjMdlId[MAPOBJ_COASTER], 1); + BoardModelExistDupe(mapObjMdlId[MAPOBJ_COASTER_RAIL], 1); + fn_8006DDE8(mapObjMdlId[MAPOBJ_COASTER_RAIL], 500.0f); + MTXIdentity(matrix); + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &matrix); + UpdateHostDisp(); } } -static void fn_1_1990(void) +static void CoasterPathUpdate(void) { - Vec sp10; - float var_f31; - s32 var_r29; - s32 var_r30; - s16 sp8[3]; - BoardSpace *temp_r31; - BoardSpace *temp_r3; + Vec diff; + float time; + s32 spaceId; + s32 spaceIdLink; + s16 linkTbl[3]; + BoardSpace *space; + BoardSpace *spaceLink; - var_r29 = lbl_1_bss_6AC; - var_f31 = 0.0f; + spaceId = coasterStartSpace; + time = 0.0f; while (TRUE) { - temp_r31 = BoardSpaceGet(1, var_r29); - if (lbl_1_bss_0->unk00_field0 == 0) { - var_r30 = temp_r31->link[0]; + space = BoardSpaceGet(1, spaceId); + if (boardWork->hostSide == 0) { + spaceIdLink = space->link[0]; } else { - BoardSpaceLinkTargetListGet(1, var_r29, sp8); - var_r30 = sp8[0]; + BoardSpaceLinkTargetListGet(1, spaceId, linkTbl); + spaceIdLink = linkTbl[0]; } - if (var_r30 == 0) { + if (spaceIdLink == 0) { break; } - temp_r3 = BoardSpaceGet(1, var_r30); - if (!temp_r3) { - temp_r3 = temp_r31; + spaceLink = BoardSpaceGet(1, spaceIdLink); + if (!spaceLink) { + spaceLink = space; break; } - VECSubtract(&temp_r3->pos, &temp_r31->pos, &sp10); - var_f31 += VECMag(&sp10); - if (var_f31 >= lbl_1_bss_640) { + VECSubtract(&spaceLink->pos, &space->pos, &diff); + time += VECMag(&diff); + if (time >= coasterTime) { break; } - var_r29 = var_r30; + spaceId = spaceIdLink; } - if (temp_r31->flag & 8) { - lbl_1_bss_6B3 = 1; + if (space->flag & 8) { + coasterLoopF = 1; } else { - lbl_1_bss_6B3 = 0; + coasterLoopF = 0; } } -static void fn_1_1AD8(BoardCameraData *camera) +static void CoasterPosCalc(BoardCameraData *camera) { - camera->pos = lbl_1_bss_630; - camera->up = lbl_1_bss_624; - camera->target = lbl_1_bss_618; + camera->pos = coasterCameraPos; + camera->up = coasterCameraUp; + camera->target = coasterCameraTarget; } -static void fn_1_1B3C(void) +static void CoasterCameraUpdate(void) { - Vec sp3C; - Vec sp30; - Vec sp24; - Vec sp18; - Vec spC; - Mtx sp48; + Vec modelPos; + Vec diff; + Vec target; + Vec up; + Vec pos; + Mtx matrix; - VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp30); - if (lbl_1_bss_6B3 != 0) { - BoardModelPosGet(lbl_1_bss_6C4[1], &sp3C); - VECSubtract(&sp3C, &lbl_1_bss_654, &sp18); - VECNormalize(&sp18, &sp18); - sp24 = lbl_1_bss_648; - spC = lbl_1_bss_654; - BoardMTXCalcLookAt(sp48, &spC, &sp18, &sp24); - MTXTranspose(sp48, lbl_1_bss_678); - MTXRotRad(sp48, 'z', MTXDegToRad(lbl_1_bss_660.z)); - MTXConcat(lbl_1_bss_678, sp48, lbl_1_bss_678); + VECSubtract(&coasterPos, &coasterPosOld, &diff); + if (coasterLoopF != 0) { + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER_RAIL], &modelPos); + VECSubtract(&modelPos, &coasterPos, &up); + VECNormalize(&up, &up); + target = coasterPosOld; + pos = coasterPos; + BoardMTXCalcLookAt(matrix, &pos, &up, &target); + MTXTranspose(matrix, coasterMtx); + MTXRotRad(matrix, 'z', MTXDegToRad(coasterRot.z)); + MTXConcat(coasterMtx, matrix, coasterMtx); } else { - if (sp30.z != 0.0f || sp30.x != 0.0f) { - lbl_1_bss_660.y = atan2d(sp30.x, sp30.z); - lbl_1_bss_660.x = -atan2d(sp30.y, VECMagXZ(&sp30)); + if (diff.z != 0.0f || diff.x != 0.0f) { + coasterRot.y = atan2d(diff.x, diff.z); + coasterRot.x = -atan2d(diff.y, VECMagXZ(&diff)); } else { - lbl_1_bss_660.x = lbl_1_bss_660.y = 0.0f; + coasterRot.x = coasterRot.y = 0.0f; } - MTXRotRad(lbl_1_bss_678, 'z', MTXDegToRad(lbl_1_bss_660.z)); - MTXRotRad(sp48, 'x', MTXDegToRad(lbl_1_bss_660.x)); - MTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678); - MTXRotRad(sp48, 'y', MTXDegToRad(lbl_1_bss_660.y)); - MTXConcat(sp48, lbl_1_bss_678, lbl_1_bss_678); + MTXRotRad(coasterMtx, 'z', MTXDegToRad(coasterRot.z)); + MTXRotRad(matrix, 'x', MTXDegToRad(coasterRot.x)); + MTXConcat(matrix, coasterMtx, coasterMtx); + MTXRotRad(matrix, 'y', MTXDegToRad(coasterRot.y)); + MTXConcat(matrix, coasterMtx, coasterMtx); } } -static void fn_1_1EE4(void) +static void CoasterCameraObjKill(void) { - Bss10Work *temp_r31; + CoasterCameraWork *work; - if (lbl_1_bss_10) { - temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work); - temp_r31->unk00_field0 = 1; + if (coasterCameraObj) { + work = OM_GET_WORK_PTR(coasterCameraObj, CoasterCameraWork); + work->killF = TRUE; } } -static void fn_1_1F2C(omObjData *arg0) +static void CoasterCameraObjMain(omObjData *obj) { - Bss10Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss10Work); + CoasterCameraWork *work = OM_GET_WORK_PTR(obj, CoasterCameraWork); - if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { - omDelObjEx(HuPrcCurrentGet(), arg0); - lbl_1_bss_10 = NULL; + if (work->killF != 0 || BoardIsKill()) { + omDelObjEx(HuPrcCurrentGet(), obj); + coasterCameraObj = NULL; return; } - fn_1_1FA4(); + CoasterCameraObjUpdate(); } -static void fn_1_1FA4(void) +static void CoasterCameraObjUpdate(void) { - Vec sp18; - Vec spC; - float temp_f28; - float temp_f29; - float var_f27; + Vec modelPos; + Vec pos; + float angleY; + float angleX; + float radius; - spC.x = lbl_1_bss_648.x; - spC.y = lbl_1_bss_648.y + 200.0f; - spC.z = lbl_1_bss_648.z; - VECSubtract(&spC, &lbl_1_bss_618, &spC); - VECScale(&spC, &spC, 0.08f); - VECAdd(&spC, &lbl_1_bss_618, &lbl_1_bss_618); - VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &spC); - if (spC.x != 0.0f || spC.z != 0.0f) { - temp_f29 = atan2f(spC.y, VECMagXZ(&spC)); - temp_f28 = atan2f(-spC.x, -spC.z); + pos.x = coasterPosOld.x; + pos.y = coasterPosOld.y + 200.0f; + pos.z = coasterPosOld.z; + VECSubtract(&pos, &coasterCameraTarget, &pos); + VECScale(&pos, &pos, 0.08f); + VECAdd(&pos, &coasterCameraTarget, &coasterCameraTarget); + VECSubtract(&coasterPos, &coasterPosOld, &pos); + if (pos.x != 0.0f || pos.z != 0.0f) { + angleX = atan2f(pos.y, VECMagXZ(&pos)); + angleY = atan2f(-pos.x, -pos.z); } else { - temp_f29 = temp_f28 = 0.0f; + angleX = angleY = 0.0f; return; } - temp_f29 += -0.27925268f; - if (lbl_1_bss_6B3 != 0) { - if (lbl_1_bss_66C < 0.08f) { - lbl_1_bss_66C -= 0.00033333333f; + angleX += -0.27925268f; + if (coasterLoopF != 0) { + if (coasterCamSpeed < 0.08f) { + coasterCamSpeed -= 0.00033333333f; } - BoardModelPosGet(lbl_1_bss_6C4[1], &sp18); - if (lbl_1_bss_0->unk00_field0 == 0) { - var_f27 = -2500.0f; + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER_RAIL], &modelPos); + if (boardWork->hostSide == 0) { + radius = -2500.0f; } else { - var_f27 = 2500.0f; + radius = 2500.0f; } - sp18.x = sp18.x + var_f27 * sin(1.4137166738510132); // TODO: should be sind(81) - sp18.y = sp18.y + -150.0f; - sp18.z = sp18.z + var_f27 * cos(1.4137166738510132); // TODO: should be cosd(81) - VECSubtract(&sp18, &lbl_1_bss_630, &spC); - VECScale(&spC, &spC, lbl_1_bss_66C); - VECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630); + modelPos.x = modelPos.x + radius * sin(1.4137166738510132); // TODO: should be sind(81) + modelPos.y = modelPos.y + -150.0f; + modelPos.z = modelPos.z + radius * cos(1.4137166738510132); // TODO: should be cosd(81) + VECSubtract(&modelPos, &coasterCameraPos, &pos); + VECScale(&pos, &pos, coasterCamSpeed); + VECAdd(&pos, &coasterCameraPos, &coasterCameraPos); } else { - if (lbl_1_bss_66C < 0.08f) { - lbl_1_bss_66C += 0.00066666666f; + if (coasterCamSpeed < 0.08f) { + coasterCamSpeed += 0.00066666666f; } - spC.x = 400.0 * (sin(temp_f28) * cos(temp_f29)); - spC.y = 400.0 * -sin(temp_f29); - spC.z = 400.0 * (cos(temp_f28) * cos(temp_f29)); - VECAdd(&lbl_1_bss_618, &spC, &spC); - VECSubtract(&spC, &lbl_1_bss_630, &spC); - VECScale(&spC, &spC, lbl_1_bss_66C); - VECAdd(&spC, &lbl_1_bss_630, &lbl_1_bss_630); + pos.x = 400.0 * (sin(angleY) * cos(angleX)); + pos.y = 400.0 * -sin(angleX); + pos.z = 400.0 * (cos(angleY) * cos(angleX)); + VECAdd(&coasterCameraTarget, &pos, &pos); + VECSubtract(&pos, &coasterCameraPos, &pos); + VECScale(&pos, &pos, coasterCamSpeed); + VECAdd(&pos, &coasterCameraPos, &coasterCameraPos); } } -static float fn_1_2524(void) +static float CoasterStickRotGet(void) { - Vec sp24; - Vec sp18; - Vec spC; - float var_f30; - s16 sp8; - s32 var_r29; + Vec basePos; + Vec modelPos; + Vec diff; + float stickRot; + s16 stkX; + s32 padNo; s32 i; - sp24 = lbl_1_bss_654; - if (GWPlayer[lbl_1_bss_6B4].com) { - if (lbl_1_bss_6B3 != 0) { + basePos = coasterPos; + if (GWPlayer[eventPlayer].com) { + if (coasterLoopF != 0) { return 0.0f; } for (i = 0; i < 24; i++) { - if (lbl_1_bss_600[i] == 0) { - BoardModelPosGet(lbl_1_bss_5D0[i], &sp18); - VECSubtract(&sp18, &sp24, &spC); - if (!(VECMag(&spC) > 400.0f)) { + if (coasterCoinF[i] == 0) { + BoardModelPosGet(coasterCoinMdlId[i], &modelPos); + VECSubtract(&modelPos, &basePos, &diff); + if (!(VECMag(&diff) > 400.0f)) { break; } } @@ -904,109 +908,104 @@ static float fn_1_2524(void) if (i == 24) { return 0.0f; } - VECSubtract(&sp18, &sp24, &spC); - var_f30 = atan2d(spC.x, spC.z); - if (var_f30 > 0.0f) { - var_f30 = 45.0f; + VECSubtract(&modelPos, &basePos, &diff); + stickRot = atan2d(diff.x, diff.z); + if (stickRot > 0.0f) { + stickRot = 45.0f; } else { - var_f30 = -45.0f; + stickRot = -45.0f; } } else { - var_r29 = GWPlayer[lbl_1_bss_6B4].port; - sp8 = HuPadStkX[var_r29]; - OSs16tof32(&sp8, &var_f30); - var_f30 = var_f30 * 0.625f; + padNo = GWPlayer[eventPlayer].port; + stkX = HuPadStkX[padNo]; + OSs16tof32(&stkX, &stickRot); + stickRot = stickRot * 0.625f; } - return var_f30; + return stickRot; } -static void fn_1_276C(void) +static void CoasterRotUpdate(void) { - Vec sp58; - Vec sp40; - Vec sp34; - Vec sp28; - Vec sp1C; - float temp_f26; - float var_f27; + float motTime; + float stickRot; Mtx sp70; - fn_1_1B3C(); - if (lbl_1_bss_6B1 != 0) { - lbl_1_bss_660.z = 0.0f; + CoasterCameraUpdate(); + if (coasterLandF != 0) { + coasterRot.z = 0.0f; return; } - var_f27 = fn_1_2524(); - BoardDAngleCalcRange(&lbl_1_bss_660.z, var_f27, 5.0f); - temp_f26 = 6.0f + 6.0f * (lbl_1_bss_660.z / 45.0f) - 1.0f; - if (lbl_1_bss_660.z > 22.5f) { - BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0); - BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26); + stickRot = CoasterStickRotGet(); + BoardDAngleCalcRange(&coasterRot.z, stickRot, 5.0f); + motTime = 6.0f + 6.0f * (coasterRot.z / 45.0f) - 1.0f; + if (coasterRot.z > 22.5f) { + BoardPlayerMotionStart(eventPlayer, coasterMotId[1], 0); + BoardPlayerMotionTimeSet(eventPlayer, motTime); } - else if (lbl_1_bss_660.z < -22.5f) { - BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[1], 0); - BoardPlayerMotionTimeSet(lbl_1_bss_6B4, temp_f26); + else if (coasterRot.z < -22.5f) { + BoardPlayerMotionStart(eventPlayer, coasterMotId[1], 0); + BoardPlayerMotionTimeSet(eventPlayer, motTime); } else { - BoardPlayerMotionShiftSet(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0.0f, 10.0f, HU3D_MOTATTR_LOOP); + BoardPlayerMotionShiftSet(eventPlayer, coasterMotId[0], 0.0f, 10.0f, HU3D_MOTATTR_LOOP); } - fn_1_2F18(); + CoasterCoinCheck(); } -static void fn_1_2F18(void) +static void CoasterCoinCheck(void) { - Vec sp3C; - Vec sp30; - Vec sp24; - Vec sp18; - Vec spC; - float var_f29; - Mtx spD8; - Mtx spA8; - Mtx sp78; - Mtx sp48; + Vec coinPos; + Vec ofs; + Vec angle; + Vec diff; + Vec mdlCoasterPos; + float rotZ; + Mtx matrix; + Mtx mtxRotX; + Mtx mtxRotY; + Mtx mtxRotZ; s32 i; - if (lbl_1_bss_6B3 == 0) { - var_f29 = lbl_1_bss_660.z; - if (var_f29 > 180.0f) { - var_f29 -= 360.0f; + if (coasterLoopF == 0) { + rotZ = coasterRot.z; + if (rotZ > 180.0f) { + rotZ -= 360.0f; } - BoardModelPosGet(lbl_1_bss_6C4[0], &spC); - VECSubtract(&lbl_1_bss_654, &lbl_1_bss_648, &sp18); - if (sp18.z != 0.0f || sp18.x != 0.0f) { - sp24.y = atan2d(sp18.x, sp18.z); - sp24.x = -atan2d(sp18.y, VECMagXZ(&sp18)); + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER], &mdlCoasterPos); + VECSubtract(&coasterPos, &coasterPosOld, &diff); + if (diff.z != 0.0f || diff.x != 0.0f) { + angle.y = atan2d(diff.x, diff.z); + angle.x = -atan2d(diff.y, VECMagXZ(&diff)); } else { - sp24.x = sp24.y = 0.0f; + angle.x = angle.y = 0.0f; } - MTXTrans(spD8, 0.0f, 180.0f, 0.0f); - MTXRotRad(spA8, 'x', MTXDegToRad(sp24.x)); - MTXRotRad(sp78, 'y', MTXDegToRad(sp24.y)); - MTXRotRad(sp48, 'z', MTXDegToRad(var_f29)); - MTXConcat(spA8, sp48, sp48); - MTXConcat(sp78, sp48, sp48); - MTXConcat(sp48, spD8, spD8); - sp30.x = spD8[0][3]; - sp30.y = spD8[1][3]; - sp30.z = spD8[2][3]; - VECAdd(&sp30, &spC, &sp30); - if (var_f29 < 27.000002f && var_f29 > -27.000002f) { + MTXTrans(matrix, 0.0f, 180.0f, 0.0f); + MTXRotRad(mtxRotX, 'x', MTXDegToRad(angle.x)); + MTXRotRad(mtxRotY, 'y', MTXDegToRad(angle.y)); + MTXRotRad(mtxRotZ, 'z', MTXDegToRad(rotZ)); + MTXConcat(mtxRotX, mtxRotZ, mtxRotZ); + MTXConcat(mtxRotY, mtxRotZ, mtxRotZ); + MTXConcat(mtxRotZ, matrix, matrix); + ofs.x = matrix[0][3]; + ofs.y = matrix[1][3]; + ofs.z = matrix[2][3]; + VECAdd(&ofs, &mdlCoasterPos, &ofs); + if (rotZ < 27.000002f && rotZ > -27.000002f) { return; } for (i = 0; i < 24; i++) { - if (lbl_1_bss_600[i] == 0) { - BoardModelPosGet(lbl_1_bss_5D0[i], &sp3C); - if (BoardVecMaxDistXZCheck(&sp3C, &sp30, 180.0f)) { + if (coasterCoinF[i] == 0) { + BoardModelPosGet(coasterCoinMdlId[i], &coinPos); + if (BoardVecMaxDistXZCheck(&coinPos, &ofs, 180.0f)) { CharModelLayerSetAll(2); - CharModelCoinEffectCreate(1, &sp3C); - BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0); - BoardPlayerCoinsAdd(lbl_1_bss_6B4, 1); + CharModelCoinEffectCreate(1, &coinPos); + BoardModelVisibilitySet(coasterCoinMdlId[i], 0); + BoardPlayerCoinsAdd(eventPlayer, 1); HuAudFXPlay(7); - lbl_1_bss_600[i] = 1; + coasterCoinF[i] = 1; break; } } @@ -1014,239 +1013,236 @@ static void fn_1_2F18(void) } } -static s16 lbl_1_data_580 = -1; +static s16 coasterWinId = -1; -static void fn_1_3350(void) +static void CoasterPathMotUpdate(void) { - Vec sp8; - s16 temp_r3; - ModelData *temp_r30; - HsfObject *temp_r31; + Vec diff; + s16 modelId; + ModelData *modelP; + HsfObject *obj; - lbl_1_bss_674 += 0.002f; - if (lbl_1_bss_670 > 0.18f) { - lbl_1_bss_670 = 0.18f; + coasterAccel += 0.002f; + if (coasterSpeed > 0.18f) { + coasterSpeed = 0.18f; } - else if (lbl_1_bss_670 < 0.18f) { - lbl_1_bss_670 += lbl_1_bss_674; + else if (coasterSpeed < 0.18f) { + coasterSpeed += coasterAccel; } - temp_r3 = BoardModelIDGet(lbl_1_bss_6AE); - temp_r30 = &Hu3DData[temp_r3]; - Hu3DMotionExec(temp_r3, temp_r30->unk_08, temp_r30->unk_64, 0); - temp_r31 = Hu3DModelObjPtrGet(temp_r3, "looppath-cube1"); - lbl_1_bss_648 = lbl_1_bss_654; - lbl_1_bss_654.x = temp_r31->data.curr.pos.x; - lbl_1_bss_654.y = temp_r31->data.curr.pos.y; - lbl_1_bss_654.z = temp_r31->data.curr.pos.z; - VECSubtract(&lbl_1_bss_648, &lbl_1_bss_654, &sp8); - lbl_1_bss_640 += VECMag(&sp8); + modelId = BoardModelIDGet(coasterPathMdlId); + modelP = &Hu3DData[modelId]; + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + obj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + coasterPosOld = coasterPos; + coasterPos.x = obj->data.curr.pos.x; + coasterPos.y = obj->data.curr.pos.y; + coasterPos.z = obj->data.curr.pos.z; + VECSubtract(&coasterPosOld, &coasterPos, &diff); + coasterTime += VECMag(&diff); } -static s32 lbl_1_data_594[8][2] +static s32 coasterMotTbl[8][2] = { { DATA_MAKE_NUM(DATADIR_W01, 34), DATA_MAKE_NUM(DATADIR_W01, 42) }, { DATA_MAKE_NUM(DATADIR_W01, 35), DATA_MAKE_NUM(DATADIR_W01, 43) }, { DATA_MAKE_NUM(DATADIR_W01, 36), DATA_MAKE_NUM(DATADIR_W01, 44) }, { DATA_MAKE_NUM(DATADIR_W01, 37), DATA_MAKE_NUM(DATADIR_W01, 45) }, { DATA_MAKE_NUM(DATADIR_W01, 38), DATA_MAKE_NUM(DATADIR_W01, 46) }, { DATA_MAKE_NUM(DATADIR_W01, 39), DATA_MAKE_NUM(DATADIR_W01, 47) }, { DATA_MAKE_NUM(DATADIR_W01, 40), DATA_MAKE_NUM(DATADIR_W01, 48) }, { DATA_MAKE_NUM(DATADIR_W01, 41), DATA_MAKE_NUM(DATADIR_W01, 49) } }; -static void fn_1_3514(s32 arg0) +static void CoasterMotCreate(s32 playerNo) { - s32 temp_r30; + s32 charNo; s32 i; - temp_r30 = GWPlayer[arg0].character; + charNo = GWPlayer[playerNo].character; for (i = 0; i < 2; i++) { - lbl_1_bss_5CC[i] = BoardPlayerMotionCreate(arg0, lbl_1_data_594[temp_r30][i]); + coasterMotId[i] = BoardPlayerMotionCreate(playerNo, coasterMotTbl[charNo][i]); } } -static void fn_1_35B4(s32 arg0) +static void CoasterMotKill(s32 playerNo) { s32 i; for (i = 0; i < 2; i++) { - BoardPlayerMotionKill(arg0, lbl_1_bss_5CC[i]); - lbl_1_bss_5CC[i] = -1; + BoardPlayerMotionKill(playerNo, coasterMotId[i]); + coasterMotId[i] = -1; } } -static void fn_1_3624(void) +static void CoasterExec(void) { - Mtx sp48; - Vec sp3C; - Vec sp30; - Vec sp24; - Vec sp18; - float temp_f28; - float var_f30; - float var_f29; - s32 temp_r19; - Bss10Work *temp_r18; - s16 sp10; - s16 var_r25; + Mtx playerMtx; + Vec spacePos; + Vec cameraRot; + float coasterRotSpeed; + float coasterRotDir; + float coasterMotSpeed; + s32 seNo; + CoasterCameraWork *camWork; + s16 endSpace; s16 i; - lbl_1_bss_674 = lbl_1_bss_670 = 0.0f; - lbl_1_bss_640 = 0.0f; - lbl_1_bss_660.x = 0.0f; - lbl_1_bss_660.y = 0.0f; - lbl_1_bss_660.z = 0.0f; + coasterAccel = coasterSpeed = 0.0f; + coasterTime = 0.0f; + coasterRot.x = 0.0f; + coasterRot.y = 0.0f; + coasterRot.z = 0.0f; lbl_1_bss_6A8 = 0.0f; - lbl_1_bss_6B3 = 0; - lbl_1_bss_624.x = 0.0f; - lbl_1_bss_624.z = 0.0f; - lbl_1_bss_624.y = 1.0f; - lbl_1_bss_66C = 0.08f; - fn_1_3514(lbl_1_bss_6B4); - BoardPlayerMotionStart(lbl_1_bss_6B4, lbl_1_bss_5CC[0], 0x40000001); + coasterLoopF = 0; + coasterCameraUp.x = 0.0f; + coasterCameraUp.z = 0.0f; + coasterCameraUp.y = 1.0f; + coasterCamSpeed = 0.08f; + CoasterMotCreate(eventPlayer); + BoardPlayerMotionStart(eventPlayer, coasterMotId[0], HU3D_MOTATTR_LOOP); BoardSpaceAttrSet(0, 1); - fn_1_97F4(); - BoardModelMotionStart(lbl_1_bss_6AE, 0, 0); - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); - lbl_1_bss_63C = -90.0f; - lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp3C); - var_r25 = BoardSpaceFlagSearch(0, 0x1000); - var_f30 = -1.0f; + CoasterEffCreate(); + BoardModelMotionStart(coasterPathMdlId, 0, 0); + if (boardWork->hostSide == 0) { + BoardModelMotionTimeSet(coasterPathMdlId, coasterMaxTime); + coasterBaseRotY = -90.0f; + coasterStartSpace = BoardSpaceFlagPosGet(1, 0x2000, &spacePos); + endSpace = BoardSpaceFlagSearch(0, 0x1000); + coasterRotDir = -1.0f; } else { - BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); - lbl_1_bss_63C = 90.0f; - lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp3C); - var_r25 = BoardSpaceFlagSearch(0, 0x2000); - var_f30 = 1.0f; + BoardModelMotionTimeSet(coasterPathMdlId, 0.0f); + coasterBaseRotY = 90.0f; + coasterStartSpace = BoardSpaceFlagPosGet(1, 0x1000, &spacePos); + endSpace = BoardSpaceFlagSearch(0, 0x2000); + coasterRotDir = 1.0f; } - lbl_1_bss_654 = sp3C; - lbl_1_bss_648 = lbl_1_bss_654; - BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670); - BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654); - BoardCameraPosCalcFuncSet(fn_1_1AD8); - lbl_1_bss_10 = omAddObjEx(boardObjMan, 0x7E02, 0, 0, -1, fn_1_1F2C); - temp_r18 = OM_GET_WORK_PTR(lbl_1_bss_10, Bss10Work); - temp_r18->unk00_field0 = 0; - sp30.x = -40.0f; - sp30.z = 0.0f; - sp30.y = -lbl_1_bss_63C; - BoardCameraMotionStartEx(lbl_1_bss_6C4[0], &sp30, NULL, 150.0f, -1.0f, 2); + coasterPos = spacePos; + coasterPosOld = coasterPos; + BoardModelMotionSpeedSet(coasterPathMdlId, coasterSpeed); + BoardPlayerPosSetV(eventPlayer, &coasterPos); + BoardCameraPosCalcFuncSet(CoasterPosCalc); + coasterCameraObj = omAddObjEx(boardObjMan, 0x7E02, 0, 0, -1, CoasterCameraObjMain); + camWork = OM_GET_WORK_PTR(coasterCameraObj, CoasterCameraWork); + camWork->killF = FALSE; + cameraRot.x = -40.0f; + cameraRot.z = 0.0f; + cameraRot.y = -coasterBaseRotY; + BoardCameraMotionStartEx(mapObjMdlId[MAPOBJ_COASTER], &cameraRot, NULL, 150.0f, -1.0f, 2); BoardCameraMotionWait(); - BoardModelPosGet(lbl_1_bss_6C4[0], &lbl_1_bss_618); - lbl_1_bss_630.x = lbl_1_bss_618.x + 1000.0 * (sind(sp30.y) * cosd(sp30.x)); - lbl_1_bss_630.y = lbl_1_bss_618.y + 1000.0 * -sind(sp30.x); - lbl_1_bss_630.z = lbl_1_bss_618.z + 1000.0 * (cosd(sp30.y) * cosd(sp30.x)); - MTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678); - BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f); - BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, 0.0f, 0.0f); - BoardPlayerExistCheck(lbl_1_bss_6B4, 0); + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER], &coasterCameraTarget); + coasterCameraPos.x = coasterCameraTarget.x + 1000.0 * (sind(cameraRot.y) * cosd(cameraRot.x)); + coasterCameraPos.y = coasterCameraTarget.y + 1000.0 * -sind(cameraRot.x); + coasterCameraPos.z = coasterCameraTarget.z + 1000.0 * (cosd(cameraRot.y) * cosd(cameraRot.x)); + MTXRotRad(coasterMtx, 'y', MTXDegToRad(coasterBaseRotY)); + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + BoardPlayerMtxSet(eventPlayer, &coasterMtx); + BoardModelRotSet(mapObjMdlId[MAPOBJ_COASTER], 0.0f, 0.0f, 0.0f); + BoardPlayerRotSet(eventPlayer, 0.0f, 0.0f, 0.0f); + BoardPlayerExistCheck(eventPlayer, 0); BoardMusStart(1, 0x10, 0x7F, 0); - fn_1_50D4(); - BoardStatusShowSetForce(lbl_1_bss_6B4); - BoardStatusShowSet(lbl_1_bss_6B4, 1); - while (!BoardStatusStopCheck(lbl_1_bss_6B4)) { + CoasterCoinCreate(); + BoardStatusShowSetForce(eventPlayer); + BoardStatusShowSet(eventPlayer, 1); + while (!BoardStatusStopCheck(eventPlayer)) { HuPrcVSleep(); } - temp_r19 = HuAudFXPlay(0x40C); - fn_1_4774(); + seNo = HuAudFXPlay(0x40C); + CoasterWinCreate(); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); - lbl_1_bss_6B0 = 1; + coasterType = 1; HuAudFXPlay(0x413); while (TRUE) { - fn_1_1990(); - fn_1_3350(); - fn_1_276C(); - BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654); - BoardPlayerPosSetV(lbl_1_bss_6B4, &lbl_1_bss_654); - if (BoardPlayerSizeGet(lbl_1_bss_6B4) != 1) { - MTXTrans(sp48, 0.0f, 30.0f, 0.0f); + CoasterPathUpdate(); + CoasterPathMotUpdate(); + CoasterRotUpdate(); + BoardModelPosSetV(mapObjMdlId[MAPOBJ_COASTER], &coasterPos); + BoardPlayerPosSetV(eventPlayer, &coasterPos); + if (BoardPlayerSizeGet(eventPlayer) != 1) { + MTXTrans(playerMtx, 0.0f, 30.0f, 0.0f); } else { - MTXTrans(sp48, 0.0f, 400.0f, 250.0f); + MTXTrans(playerMtx, 0.0f, 400.0f, 250.0f); } - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - MTXConcat(lbl_1_bss_678, sp48, sp48); - BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48); - if (lbl_1_bss_0->unk00_field0 == 0) { - var_f29 = -lbl_1_bss_670; + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + MTXConcat(coasterMtx, playerMtx, playerMtx); + BoardPlayerMtxSet(eventPlayer, &playerMtx); + if (boardWork->hostSide == 0) { + coasterMotSpeed = -coasterSpeed; } else { - var_f29 = lbl_1_bss_670; + coasterMotSpeed = coasterSpeed; } - BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f29); - if (lbl_1_bss_0->unk00_field0 == 0) { - if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 0.0f) { + BoardModelMotionSpeedSet(coasterPathMdlId, coasterMotSpeed); + if (boardWork->hostSide == 0) { + if (BoardModelMotionTimeGet(coasterPathMdlId) <= 0.0f) { break; } } else { - if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644) { + if (BoardModelMotionTimeGet(coasterPathMdlId) >= coasterMaxTime) { break; } } HuPrcVSleep(); } - MTXIdentity(lbl_1_bss_678); - fn_1_4864(); - HuAudFXStop(temp_r19); - fn_1_1EE4(); - fn_1_98EC(); - if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 1) { - MTXTrans(sp48, 0.0f, 400.0f, 250.0f); + MTXIdentity(coasterMtx); + CoasterWinKill(); + HuAudFXStop(seNo); + CoasterCameraObjKill(); + CoasterEffKill(); + if (BoardPlayerSizeGet(eventPlayer) == 1) { + MTXTrans(playerMtx, 0.0f, 400.0f, 250.0f); } else { - MTXTrans(sp48, 0.0f, 30.0f, 0.0f); + MTXTrans(playerMtx, 0.0f, 30.0f, 0.0f); } - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - BoardPlayerMtxSet(lbl_1_bss_6B4, &sp48); - lbl_1_bss_660.x = lbl_1_bss_660.z = 0.0f; + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + BoardPlayerMtxSet(eventPlayer, &playerMtx); + coasterRot.x = coasterRot.z = 0.0f; BoardAudSeqFadeOut(1, 1000); WipeColorSet(0, 0, 0); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); HuAudFXPlay(0x401); - temp_f28 = (-lbl_1_bss_63C - lbl_1_bss_660.y) / 30.0f; + coasterRotSpeed = (-coasterBaseRotY - coasterRot.y) / 30.0f; for (i = 0; i < 30; i++) { - BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); - BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660); - lbl_1_bss_660.y += temp_f28 * var_f30; + BoardModelRotSetV(mapObjMdlId[MAPOBJ_COASTER], &coasterRot); + BoardPlayerRotSetV(eventPlayer, &coasterRot); + coasterRot.y += coasterRotSpeed * coasterRotDir; HuPrcVSleep(); } - lbl_1_bss_660.y = -lbl_1_bss_63C; - BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); - BoardPlayerRotSetV(lbl_1_bss_6B4, &lbl_1_bss_660); - BoardStatusShowSet(lbl_1_bss_6B4, 0); + coasterRot.y = -coasterBaseRotY; + BoardModelRotSetV(mapObjMdlId[MAPOBJ_COASTER], &coasterRot); + BoardPlayerRotSetV(eventPlayer, &coasterRot); + BoardStatusShowSet(eventPlayer, 0); BoardSpaceAttrReset(0, 1); - fn_1_53B8(); + CoasterCoinKill(); BoardCameraMoveSet(0); - BoardCameraTargetPlayerSet(lbl_1_bss_6B4); + BoardCameraTargetPlayerSet(eventPlayer); BoardCameraViewSet(1); BoardCameraMotionWait(); do { HuPrcVSleep(); } while (WipeStatGet() != 0); - BoardPlayerIdleSet(lbl_1_bss_6B4); - BoardPlayerMtxSet(lbl_1_bss_6B4, &lbl_1_bss_678); + BoardPlayerIdleSet(eventPlayer); + BoardPlayerMtxSet(eventPlayer, &coasterMtx); BoardCameraPosCalcFuncSet(NULL); - BoardPlayerExistCheck(lbl_1_bss_6B4, 1); - BoardSpacePosGet(0, var_r25, &sp3C); - GWPlayer[lbl_1_bss_6B4].space_curr = var_r25; - BoardPlayerPosSetV(lbl_1_bss_6B4, &sp3C); - fn_1_35B4(lbl_1_bss_6B4); - lbl_1_bss_6B2 = 1; + BoardPlayerExistCheck(eventPlayer, 1); + BoardSpacePosGet(0, endSpace, &spacePos); + GWPlayer[eventPlayer].space_curr = endSpace; + BoardPlayerPosSetV(eventPlayer, &spacePos); + CoasterMotKill(eventPlayer); + coasterDoneF = 1; } -static void fn_1_45F4(void) +static void CoasterExit(void) { - if (lbl_1_bss_6B2 != 0) { - if (lbl_1_bss_0->unk00_field0 == 0) { - lbl_1_bss_0->unk00_field0 = 1; + if (coasterDoneF != 0) { + if (boardWork->hostSide == 0) { + boardWork->hostSide = 1; } else { - lbl_1_bss_0->unk00_field0 = 0; + boardWork->hostSide = 0; } - lbl_1_bss_6B2 = 0; - fn_1_1670(); + coasterDoneF = 0; + UpdateHostDisp(); } - fn_1_87AC(); - while (lbl_1_bss_C) { + CoasterPlayerManKill(); + while (coasterPlayerManObj) { HuPrcVSleep(); } BoardAudSeqPause(0, 0, 1000); @@ -1259,50 +1255,50 @@ static void fn_1_45F4(void) BoardStatusShowSetAll(1); } -static void fn_1_4774(void) +static void CoasterWinCreate(void) { - float sp8[2]; - float var_f31; - float var_f30; + float winSize[2]; + float winX; + float winY; - HuWinMesMaxSizeGet(1, sp8, MAKE_MESSID(13, 5)); - var_f31 = -10000.0f; - var_f30 = 352.0f; - lbl_1_data_580 = HuWinCreate(var_f31, var_f30, sp8[0], sp8[1], 0); - HuWinBGTPLvlSet(lbl_1_data_580, 0.0f); - HuWinMesSpeedSet(lbl_1_data_580, 0); - HuWinMesSet(lbl_1_data_580, MAKE_MESSID(13, 5)); + HuWinMesMaxSizeGet(1, winSize, MAKE_MESSID(13, 5)); + winX = -10000.0f; + winY = 352.0f; + coasterWinId = HuWinCreate(winX, winY, winSize[0], winSize[1], 0); + HuWinBGTPLvlSet(coasterWinId, 0.0f); + HuWinMesSpeedSet(coasterWinId, 0); + HuWinMesSet(coasterWinId, MAKE_MESSID(13, 5)); } -static void fn_1_4864(void) +static void CoasterWinKill(void) { - if (lbl_1_data_580 != -1) { - HuWinKill(lbl_1_data_580); - lbl_1_data_580 = -1; + if (coasterWinId != -1) { + HuWinKill(coasterWinId); + coasterWinId = -1; } } -static s32 fn_1_48B4(void) +static s32 CoasterHostExec(void) { - Vec sp20; - Vec sp14; - Vec sp8; - float var_f31; - u32 var_r31; + Vec startPos; + Vec endPos; + Vec dir; + float angle; + u32 mess; s32 i; - s32 temp_r28; - s32 temp_r30; + s32 spaceEnd; + s32 spaceStart; - var_r31 = 0; - lbl_1_bss_6B0 = 0; - lbl_1_bss_6B1 = 0; - lbl_1_bss_6B2 = 0; - lbl_1_bss_6B4 = GWSystem.player_curr; - temp_r30 = GWPlayer[lbl_1_bss_6B4].space_curr; - BoardPlayerMotionShiftSet(lbl_1_bss_6B4, 1, 0.0f, 14.0f, HU3D_MOTATTR_LOOP); + mess = 0; + coasterType = 0; + coasterLandF = 0; + coasterDoneF = 0; + eventPlayer = GWSystem.player_curr; + spaceStart = GWPlayer[eventPlayer].space_curr; + BoardPlayerMotionShiftSet(eventPlayer, 1, 0.0f, 14.0f, HU3D_MOTATTR_LOOP); BoardWinCreateChoice(0, MAKE_MESSID(13, 0), -1, 0); - if (GWPlayer[lbl_1_bss_6B4].com) { - fn_1_9D00(lbl_1_bss_6B4); + if (GWPlayer[eventPlayer].com) { + CoasterHostComKeySet(eventPlayer); } BoardWinWait(); if (BoardWinChoiceGet() != 0) { @@ -1310,23 +1306,23 @@ static s32 fn_1_48B4(void) } BoardWinCreate(2, 0xD0006, 0); BoardWinWait(); - temp_r28 = BoardSpaceLinkFlagSearch(0, temp_r30, 0x02000000); - BoardSpacePosGet(0, temp_r30, &sp20); - BoardSpacePosGet(0, temp_r28, &sp14); - VECSubtract(&sp14, &sp20, &sp8); - VECNormalize(&sp8, &sp8); - var_f31 = atan2d(-sp8.x, -sp8.z); - BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); - BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r30, temp_r28); - while (GWPlayer[lbl_1_bss_6B4].moving) { + spaceEnd = BoardSpaceLinkFlagSearch(0, spaceStart, 0x02000000); + BoardSpacePosGet(0, spaceStart, &startPos); + BoardSpacePosGet(0, spaceEnd, &endPos); + VECSubtract(&endPos, &startPos, &dir); + VECNormalize(&dir, &dir); + angle = atan2d(-dir.x, -dir.z); + BoardPlayerRotSet(eventPlayer, 0.0f, angle, 0.0f); + BoardPlayerMoveBetween(eventPlayer, spaceStart, spaceEnd); + while (GWPlayer[eventPlayer].moving) { HuPrcVSleep(); } - BoardPlayerIdleSet(lbl_1_bss_6B4); + BoardPlayerIdleSet(eventPlayer); while (TRUE) { BoardWinCreateChoice(1, MAKE_MESSID(13, 1), 0, 0); BoardWinAttrSet(0x10); - if (GWPlayer[lbl_1_bss_6B4].com) { - if (BoardPlayerCoinsGet(lbl_1_bss_6B4) >= 5) { + if (GWPlayer[eventPlayer].com) { + if (BoardPlayerCoinsGet(eventPlayer) >= 5) { BoardComKeySetUp(); } else { @@ -1335,19 +1331,19 @@ static s32 fn_1_48B4(void) } BoardWinWait(); if (BoardWinChoiceGet() == 1) { - var_r31 = MAKE_MESSID(13, 3); + mess = MAKE_MESSID(13, 3); break; } if (BoardWinChoiceGet() == 2) { - BoardViewMapExec(lbl_1_bss_6B4); + BoardViewMapExec(eventPlayer); continue; } - if (BoardPlayerCoinsGet(lbl_1_bss_6B4) < 5) { - var_r31 = MAKE_MESSID(13, 4); + if (BoardPlayerCoinsGet(eventPlayer) < 5) { + mess = MAKE_MESSID(13, 4); break; } for (i = 0; i < 5; i++) { - BoardPlayerCoinsAdd(lbl_1_bss_6B4, -1); + BoardPlayerCoinsAdd(eventPlayer, -1); HuAudFXPlay(0xE); HuPrcSleep(6); } @@ -1363,1122 +1359,1118 @@ static s32 fn_1_48B4(void) while (WipeStatGet() != 0) { HuPrcVSleep(); } - fn_1_852C(); - return 1; + CoasterPlayerManCreate(); + return TRUE; } - if (var_r31 != 0) { - BoardWinCreate(1, var_r31, 0); + if (mess != 0) { + BoardWinCreate(1, mess, 0); BoardWinWait(); BoardWinKill(); } - BoardCameraTargetPlayerSet(lbl_1_bss_6B4); - VECSubtract(&sp20, &sp14, &sp8); - VECNormalize(&sp8, &sp8); - var_f31 = atan2d(-sp8.x, -sp8.z); - BoardPlayerRotSet(lbl_1_bss_6B4, 0.0f, var_f31, 0.0f); - BoardPlayerMoveBetween(lbl_1_bss_6B4, temp_r28, temp_r30); - while (GWPlayer[lbl_1_bss_6B4].moving) { + BoardCameraTargetPlayerSet(eventPlayer); + VECSubtract(&startPos, &endPos, &dir); + VECNormalize(&dir, &dir); + angle = atan2d(-dir.x, -dir.z); + BoardPlayerRotSet(eventPlayer, 0.0f, angle, 0.0f); + BoardPlayerMoveBetween(eventPlayer, spaceEnd, spaceStart); + while (GWPlayer[eventPlayer].moving) { HuPrcVSleep(); } - return 0; + return FALSE; } -static void fn_1_4E14(void) +static void CoasterMain(void) { - if (fn_1_48B4() != 0) { - fn_1_3624(); - fn_1_45F4(); + if (CoasterHostExec() != 0) { + CoasterExec(); + CoasterExit(); } HuPrcEnd(); } -static void fn_1_4FA8(void) +static void CoasterDestroy(void) { BoardWinKill(); - lbl_1_bss_8 = NULL; + coasterProc = NULL; } -static void fn_1_4FD8(void) +static void CoasterEvent(void) { - lbl_1_bss_6B4 = GWSystem.player_curr; + eventPlayer = GWSystem.player_curr; BoardRollDispSet(0); - if (BoardPlayerSizeGet(lbl_1_bss_6B4) == 2 || GWPlayer[lbl_1_bss_6B4].bowser_suit) { + if (BoardPlayerSizeGet(eventPlayer) == 2 || GWPlayer[eventPlayer].bowser_suit) { return; } - lbl_1_bss_8 = HuPrcChildCreate(fn_1_4E14, 0x2003, 0x2000, 0, boardMainProc); - HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8); - while (lbl_1_bss_8) { + coasterProc = HuPrcChildCreate(CoasterMain, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(coasterProc, CoasterDestroy); + while (coasterProc) { HuPrcVSleep(); } BoardRollDispSet(1); } -static void fn_1_50D4(void) +static void CoasterCoinCreate(void) { - Vec sp20; - Vec sp14; - Vec sp8; - float temp_f30; - float var_f31; - BoardSpace *temp_r31; - s32 var_r27; - s32 var_r26; - s32 var_r29; - s32 var_r28; + Vec pos; + Vec posSpace; + Vec dir; + float radius; + float angle; + BoardSpace *space; + s32 side; + s32 newSide; + s32 coinNum; + s32 spaceId; s32 i; for (i = 0; i < 24; i++) { - lbl_1_bss_5D0[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 9), NULL, 0); - BoardModelVisibilitySet(lbl_1_bss_5D0[i], 0); - BoardModelMotionStart(lbl_1_bss_5D0[i], 0, 0x40000001); - lbl_1_bss_600[i] = 0; + coasterCoinMdlId[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 9), NULL, 0); + BoardModelVisibilitySet(coasterCoinMdlId[i], 0); + BoardModelMotionStart(coasterCoinMdlId[i], 0, HU3D_MOTATTR_LOOP); + coasterCoinF[i] = 0; } - temp_f30 = 180.0f; - var_r28 = BoardSpaceFlagPosGet(1, 0x2000, &sp20); - var_r27 = BoardRand() & 1; - var_r29 = i = 0; + radius = 180.0f; + spaceId = BoardSpaceFlagPosGet(1, 0x2000, &pos); + side = BoardRand() & 1; + coinNum = i = 0; while (i < 24) { - temp_r31 = BoardSpaceGet(1, var_r28); - var_r28 = temp_r31->link[0]; - if (var_r28 == -1 || temp_r31->link_cnt == 0) { + space = BoardSpaceGet(1, spaceId); + spaceId = space->link[0]; + if (spaceId == -1 || space->link_cnt == 0) { break; } - if (!(temp_r31->flag & 0x80)) { - sp14 = temp_r31->pos; + if (!(space->flag & 0x80)) { + posSpace = space->pos; } else { - if (var_r29 >= 3) { + if (coinNum >= 3) { if (BoardRandFloat() < 0.5f) { - var_r26 = 1; + newSide = 1; } else { - var_r26 = 0; + newSide = 0; } - var_r27 = var_r26; - var_r29 = 0; + side = newSide; + coinNum = 0; } - VECSubtract(&sp14, &temp_r31->pos, &sp8); - VECNormalize(&sp8, &sp8); - var_f31 = atan2d(sp8.z, sp8.x); - if (var_r27 != 0) { - var_f31 += 180.0f; + VECSubtract(&posSpace, &space->pos, &dir); + VECNormalize(&dir, &dir); + angle = atan2d(dir.z, dir.x); + if (side != 0) { + angle += 180.0f; } - sp20.x = temp_r31->pos.x + temp_f30 * sind(var_f31); - sp20.y = temp_r31->pos.y + 80.0f; - sp20.z = temp_r31->pos.z + temp_f30 * cosd(var_f31); - BoardModelPosSetV(lbl_1_bss_5D0[i], &sp20); - BoardModelVisibilitySet(lbl_1_bss_5D0[i], 1); - sp14 = temp_r31->pos; + pos.x = space->pos.x + radius * sind(angle); + pos.y = space->pos.y + 80.0f; + pos.z = space->pos.z + radius * cosd(angle); + BoardModelPosSetV(coasterCoinMdlId[i], &pos); + BoardModelVisibilitySet(coasterCoinMdlId[i], 1); + posSpace = space->pos; i++; - var_r29++; + coinNum++; } } } -static void fn_1_53B8(void) +static void CoasterCoinKill(void) { s32 i; for (i = 0; i < 24; i++) { - if (lbl_1_bss_5D0[i] != -1) { - BoardModelKill(lbl_1_bss_5D0[i]); - lbl_1_bss_5D0[i] = -1; + if (coasterCoinMdlId[i] != -1) { + BoardModelKill(coasterCoinMdlId[i]); + coasterCoinMdlId[i] = -1; } } } -static s32 lbl_1_data_5D4 = -1; -static s32 lbl_1_data_5D8 = -1; +static s32 cupMoveSeNo = -1; +static s32 decaStompSeNo = -1; -static s16 lbl_1_data_5DC[2][4] = { { 24, 25, 26, 27 }, { 29, 30, 31, 32 } }; +static s16 cupMapObj[2][4] = { + { MAPOBJ_CUPR1, MAPOBJ_CUPR2, MAPOBJ_CUPR3, MAPOBJ_CUPR_ARROW }, + { MAPOBJ_CUPL1, MAPOBJ_CUPL2, MAPOBJ_CUPL3, MAPOBJ_CUPL_ARROW } +}; -static char *lbl_1_data_604[] = { "chara1", "chara2", "chara3" }; +static char *cupHookTbl[] = { "chara1", "chara2", "chara3" }; -static float lbl_1_data_610[2][2] = { { 90.0f, 0.0f }, { 0.0f, 270.0f } }; +static float cupArrowRot[2][2] = { { 90.0f, 0.0f }, { 0.0f, 270.0f } }; -static void fn_1_543C(void) +static void CupInit(void) { - float var_f31; - s16 temp_r28; - s16 temp_r29; + float rotY; + s16 mdlIdDish; + s16 mdlId; s32 i; s32 j; - char *sp10[] = { "cup1", "cup2", "cup3", "ya1" }; - s32 sp8[] = { 23, 28 }; + char *hookName[] = { "cup1", "cup2", "cup3", "ya1" }; + s32 dishMapObj[] = { MAPOBJ_CUPR_DISH, MAPOBJ_CUPL_DISH }; for (i = 0; i < 2; i++) { - temp_r28 = lbl_1_bss_6C4[sp8[i]]; - BoardModelMotionStart(temp_r28, 0, 0x40000001); - BoardModelExistDupe(temp_r28, 0); + mdlIdDish = mapObjMdlId[dishMapObj[i]]; + BoardModelMotionStart(mdlIdDish, 0, HU3D_MOTATTR_LOOP); + BoardModelExistDupe(mdlIdDish, 0); for (j = 0; j < 4; j++) { - temp_r29 = lbl_1_bss_6C4[lbl_1_data_5DC[i][j]]; - BoardModelExistDupe(temp_r29, 1); - BoardModelHookSet(temp_r28, sp10[j], temp_r29); - BoardModelMotionStart(temp_r29, 0, 0x40000001); - BoardModelRotSet(temp_r29, 0.0f, 360.0f * BoardRandFloat(), 0.0f); + mdlId = mapObjMdlId[cupMapObj[i][j]]; + BoardModelExistDupe(mdlId, 1); + BoardModelHookSet(mdlIdDish, hookName[j], mdlId); + BoardModelMotionStart(mdlId, 0, HU3D_MOTATTR_LOOP); + BoardModelRotSet(mdlId, 0.0f, 360.0f * BoardRandFloat(), 0.0f); } } - if (lbl_1_bss_0->unk01[0] != 0) { - var_f31 = 0.0f; + if (boardWork->cupDir[0] != 0) { + rotY = 0.0f; } else { - var_f31 = 90.0f; + rotY = 90.0f; } - BoardModelRotSet(lbl_1_bss_6C4[27], 0.0f, var_f31, 0.0f); - if (lbl_1_bss_0->unk01[1] != 0) { - var_f31 = -90.0f; + BoardModelRotSet(mapObjMdlId[MAPOBJ_CUPR_ARROW], 0.0f, rotY, 0.0f); + if (boardWork->cupDir[1] != 0) { + rotY = -90.0f; } else { - var_f31 = 0.0f; + rotY = 0.0f; } - BoardModelRotSet(lbl_1_bss_6C4[32], 0.0f, var_f31, 0.0f); + BoardModelRotSet(mapObjMdlId[MAPOBJ_CUPL_ARROW], 0.0f, rotY, 0.0f); } -static void fn_1_5694(s32 arg0) +static void CupMotOnSet(s32 stopF) { - s16 temp_r29; - s16 temp_r30; + s16 dishMdlId; + s16 cupMdlId; s16 i; - s32 spC[] = { 23, 28 }; + s32 dishMapObj[] = { MAPOBJ_CUPR_DISH, MAPOBJ_CUPL_DISH }; - temp_r29 = lbl_1_bss_6C4[spC[lbl_1_bss_29]]; - if (arg0 != 0) { - BoardModelMotionSpeedSet(temp_r29, 1.0f); - BoardModelAttrReset(temp_r29, 0x40000002); + dishMdlId = mapObjMdlId[dishMapObj[cupSide]]; + if (stopF != 0) { + BoardModelMotionSpeedSet(dishMdlId, 1.0f); + BoardModelAttrReset(dishMdlId, HU3D_MOTATTR_PAUSE); for (i = 0; i < 3; i++) { - temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; - BoardModelMotionSpeedSet(temp_r30, 1.0f); - BoardModelAttrReset(temp_r30, 0x40000002); + cupMdlId = mapObjMdlId[cupMapObj[cupSide][i]]; + BoardModelMotionSpeedSet(cupMdlId, 1.0f); + BoardModelAttrReset(cupMdlId, HU3D_MOTATTR_PAUSE); } } else { - BoardModelMotionSpeedSet(temp_r29, 0.0f); - BoardModelAttrSet(temp_r29, 0x40000002); + BoardModelMotionSpeedSet(dishMdlId, 0.0f); + BoardModelAttrSet(dishMdlId, HU3D_MOTATTR_PAUSE); for (i = 0; i < 3; i++) { - temp_r30 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; - BoardModelMotionSpeedSet(temp_r30, 0.0f); - BoardModelAttrSet(temp_r30, 0x40000002); + cupMdlId = mapObjMdlId[cupMapObj[cupSide][i]]; + BoardModelMotionSpeedSet(cupMdlId, 0.0f); + BoardModelAttrSet(cupMdlId, HU3D_MOTATTR_PAUSE); } } } -static void fn_1_586C(s32 arg0, s32 arg1) +static void CupEvent(s32 side, s32 spaceStart) { - lbl_1_bss_29 = arg0; - lbl_1_bss_26 = arg1; + cupSide = side; + cupSpaceStart = spaceStart; BoardRollDispSet(0); - lbl_1_bss_14 = HuPrcChildCreate(fn_1_592C, 0x2003, 0x2000, 0, boardMainProc); - HuPrcDestructorSet2(lbl_1_bss_14, fn_1_5B2C); - while (lbl_1_bss_14) { + cupProc = HuPrcChildCreate(CupMain, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(cupProc, CupDestroy); + while (cupProc) { HuPrcVSleep(); } BoardRollDispSet(1); } -static void fn_1_592C(void) +static void CupMain(void) { - s16 temp_r30; - s16 var_r28; + s16 dishMdlId; - lbl_1_data_5D4 = -1; - lbl_1_data_5D8 = -1; + cupMoveSeNo = -1; + decaStompSeNo = -1; BoardPlayerIdleSet(GWSystem.player_curr); - if (lbl_1_bss_29 == 0) { - var_r28 = lbl_1_bss_6C4[23]; + if (cupSide == 0) { + dishMdlId = mapObjMdlId[MAPOBJ_CUPR_DISH]; } else { - var_r28 = lbl_1_bss_6C4[28]; + dishMdlId = mapObjMdlId[MAPOBJ_CUPL_DISH]; } - BoardCameraTargetModelSet(var_r28); + BoardCameraTargetModelSet(dishMdlId); BoardCameraOffsetSet(0.0f, 0.0f, 0.0f); - fn_1_5D08(); - while (!fn_1_5CD0()) { + CupObjCreate(); + while (!CupObjCheck()) { HuPrcVSleep(); } - fn_1_5B40(); - fn_1_5694(1); + CupExec(); + CupMotOnSet(1); BoardCameraTargetPlayerSet(GWSystem.player_curr); BoardCameraViewSet(1); BoardCameraMotionWait(); HuPrcEnd(); } -static void fn_1_5B2C(void) +static void CupDestroy(void) { - lbl_1_bss_14 = NULL; + cupProc = NULL; } -static void fn_1_5B40(void) +static void CupExec(void) { - s16 spC[] = { 27, 32 }; - s16 temp_r30; - s32 temp_r31; - float sp8; - float temp_f31; + s16 cupArrowMapObj[] = { MAPOBJ_CUPR_ARROW, MAPOBJ_CUPL_ARROW }; + s16 cupArrowMdlId; + s32 cupDir; + float rotY; + float rotYNew; - temp_r31 = lbl_1_bss_0->unk01[lbl_1_bss_29]; - lbl_1_bss_0->unk01[lbl_1_bss_29] ^= 1; - temp_r30 = lbl_1_bss_6C4[spC[lbl_1_bss_29]]; - sp8 = lbl_1_data_610[lbl_1_bss_29][temp_r31]; - temp_f31 = lbl_1_data_610[lbl_1_bss_29][temp_r31 ^ 1]; + cupDir = boardWork->cupDir[cupSide]; + boardWork->cupDir[cupSide] ^= 1; + cupArrowMdlId = mapObjMdlId[cupArrowMapObj[cupSide]]; + rotY = cupArrowRot[cupSide][cupDir]; + rotYNew = cupArrowRot[cupSide][cupDir ^ 1]; HuAudFXPlay(0x403); while (TRUE) { HuPrcVSleep(); - if (BoardDAngleCalcRange(&sp8, temp_f31, 3.0f) != 0) { + if (BoardDAngleCalcRange(&rotY, rotYNew, 3.0f) != 0) { break; } - BoardModelRotSet(temp_r30, 0.0f, sp8, 0.0f); + BoardModelRotSet(cupArrowMdlId, 0.0f, rotY, 0.0f); } } -static BOOL fn_1_5CD0(void) +static BOOL CupObjCheck(void) { - return lbl_1_bss_18 ? FALSE : TRUE; + return cupObj ? FALSE : TRUE; } -static void fn_1_5D08(void) +static void CupObjCreate(void) { - Bss18Work *temp_r31; - float var_f30; - float var_f31; - s16 var_r28; - s16 var_r25; + CupObjWork *work; + float time; + float speed; + s16 dishMdlId; + s16 cupMdlId; s32 i; - if (lbl_1_bss_29 == 0) { - var_r28 = lbl_1_bss_6C4[23]; + if (cupSide == 0) { + dishMdlId = mapObjMdlId[MAPOBJ_CUPR_DISH]; } else { - var_r28 = lbl_1_bss_6C4[28]; + dishMdlId = mapObjMdlId[MAPOBJ_CUPL_DISH]; } while (TRUE) { - var_f30 = BoardModelMotionTimeGet(var_r28); - if (var_f30 >= 209.0f && var_f30 <= 211.0f) { + time = BoardModelMotionTimeGet(dishMdlId); + if (time >= 209.0f && time <= 211.0f) { break; } - if (var_f30 >= 129.0f && var_f30 <= 131.0f) { + if (time >= 129.0f && time <= 131.0f) { break; } - if (var_f30 >= 49.0f && var_f30 <= 51.0f) { + if (time >= 49.0f && time <= 51.0f) { break; } HuPrcVSleep(); } - var_f31 = 1.0f; - while (var_f31 > 0.01f) { - var_f31 *= 0.9f; - if (var_f31 <= 0.01f) { - var_f31 = 0.0f; + speed = 1.0f; + while (speed > 0.01f) { + speed *= 0.9f; + if (speed <= 0.01f) { + speed = 0.0f; } - BoardModelMotionSpeedSet(var_r28, var_f31); + BoardModelMotionSpeedSet(dishMdlId, speed); for (i = 0; i < 3; i++) { - var_r25 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; - BoardModelMotionSpeedSet(var_r25, var_f31); + cupMdlId = mapObjMdlId[cupMapObj[cupSide][i]]; + BoardModelMotionSpeedSet(cupMdlId, speed); } HuPrcVSleep(); } - fn_1_5694(0); - lbl_1_bss_18 = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_6098); - temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_18, Bss18Work); - temp_r31->unk00_field0 = 0; - temp_r31->unk01 = 0; - temp_r31->unk02 = 0; - temp_r31->unk00_field2 = 0; - temp_r31->unk04 = var_r28; + CupMotOnSet(0); + cupObj = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, CupObjMain); + work = OM_GET_WORK_PTR(cupObj, CupObjWork); + work->killF = 0; + work->time = 0; + work->delay = 0; + work->stopF = 0; + work->dishMdlId = dishMdlId; if (BoardPlayerSizeGet(GWSystem.player_curr) == 2) { - temp_r31->unk00_field3 = 1; + work->decaF = TRUE; } else { - temp_r31->unk00_field3 = 0; + work->decaF = FALSE; } } -static void fn_1_6098(omObjData *arg0) +static void CupObjMain(omObjData *obj) { - Bss18Work *temp_r31 = OM_GET_WORK_PTR(arg0, Bss18Work); - s32 temp_r0; + CupObjWork *work = OM_GET_WORK_PTR(obj, CupObjWork); - if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { - lbl_1_bss_18 = NULL; - omDelObjEx(HuPrcCurrentGet(), arg0); + if (work->killF != 0 || BoardIsKill()) { + cupObj = NULL; + omDelObjEx(HuPrcCurrentGet(), obj); return; } - if (temp_r31->unk02 != 0) { - temp_r31->unk02--; + if (work->delay != 0) { + work->delay--; return; } - switch (temp_r31->unk00_field1) { + switch (work->mode) { case 0: - fn_1_6194(temp_r31, arg0); + CupObjInit(work, obj); break; case 2: - fn_1_63F0(temp_r31, arg0); + CupObjJumpWait(work, obj); break; case 3: - fn_1_6BC0(temp_r31, arg0); + CupObjStop(work, obj); break; case 1: - fn_1_6FB4(temp_r31, arg0); + CupObjRotate(work, obj); break; } } -static void fn_1_6194(Bss18Work *arg0, omObjData *arg1) +static void CupObjInit(CupObjWork *work, omObjData *obj) { - Mtx sp38; - Vec sp2C; - Vec sp20; - Vec sp14; - Vec sp8; + Mtx objMtx; + Vec objPosPrev; + Vec playerPos; + Vec objRot; + Vec objPos; float temp_f31; float var_f30; s32 var_r28; s32 i; - BoardPlayerPosGet(GWSystem.player_curr, &sp20); + BoardPlayerPosGet(GWSystem.player_curr, &playerPos); var_f30 = 1000000.0f; for (i = 0; i < 3; i++) { - Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[i], &sp8); - temp_f31 = VECSquareDistance(&sp8, &sp20); + Hu3DModelObjPosGet(BoardModelIDGet(work->dishMdlId), cupHookTbl[i], &objPos); + temp_f31 = VECSquareDistance(&objPos, &playerPos); if (temp_f31 < var_f30) { var_f30 = temp_f31; - lbl_1_bss_28 = i; - sp2C = sp8; + cupHookNo = i; + objPosPrev = objPos; } } - Hu3DModelObjMtxGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], sp38); - Hu3DMtxRotGet(&sp38, &sp14); - sp14.y = 180.0f; - VECSubtract(&sp2C, &sp20, &sp8); - arg1->trans.x = sp8.x / 25.0f; - arg1->trans.z = sp8.z / 25.0f; + Hu3DModelObjMtxGet(BoardModelIDGet(work->dishMdlId), cupHookTbl[cupHookNo], objMtx); + Hu3DMtxRotGet(&objMtx, &objRot); + objRot.y = 180.0f; + VECSubtract(&objPosPrev, &playerPos, &objPos); + obj->trans.x = objPos.x / 25.0f; + obj->trans.z = objPos.z / 25.0f; var_r28 = BoardPlayerRotYGet(GWSystem.player_curr); - arg1->trans.y = BoardDAngleCalc(sp14.y - var_r28) / 25.0f; - arg1->scale.x = sp2C.x; - arg1->scale.y = sp2C.y; - arg1->scale.z = sp2C.z; + obj->trans.y = BoardDAngleCalc(objRot.y - var_r28) / 25.0f; + obj->scale.x = objPosPrev.x; + obj->scale.y = objPosPrev.y; + obj->scale.z = objPosPrev.z; BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, HU3D_MOTATTR_NONE); - arg0->unk00_field1 = 2; - arg0->unk01 = 0; + work->mode = 2; + work->time = 0; } -static void fn_1_63F0(Bss18Work *arg0, omObjData *arg1) +static void CupObjJumpWait(CupObjWork *work, omObjData *obj) { - Vec sp10; - float temp_f29; - float var_f27; - float var_f28; + Vec pos; + float time; + float rotY; + float scaleY; s16 var_r24; - if (arg0->unk01 >= 55) { + if (work->time >= 55) { BoardPlayerRotSet(GWSystem.player_curr, 0.0f, 0.0f, 0.0f); BoardPlayerIdleSet(GWSystem.player_curr); if (GWPlayer[GWSystem.player_curr].bowser_suit) { - BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardBowserSuitModelGet()); + BoardModelHookSet(work->dishMdlId, cupHookTbl[cupHookNo], BoardBowserSuitModelGet()); } else { - BoardModelHookSet(arg0->unk04, lbl_1_data_604[lbl_1_bss_28], BoardPlayerModelGet(GWSystem.player_curr)); + BoardModelHookSet(work->dishMdlId, cupHookTbl[cupHookNo], BoardPlayerModelGet(GWSystem.player_curr)); } - var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; - if (arg0->unk00_field3 != 0) { + var_r24 = mapObjMdlId[cupMapObj[cupSide][cupHookNo]]; + if (work->decaF != 0) { BoardModelScaleSet(var_r24, 1.0f, 0.1f, 1.0f); } - fn_1_5694(1); - lbl_1_data_5D4 = HuAudFXPlay(0x410); - arg0->unk01 = 0; - arg0->unk00_field1 = 1; + CupMotOnSet(1); + cupMoveSeNo = HuAudFXPlay(0x410); + work->time = 0; + work->mode = 1; return; } - if (arg0->unk01 == 25) { - BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z); + if (work->time == 25) { + BoardPlayerPosSet(GWSystem.player_curr, obj->scale.x, obj->scale.y, obj->scale.z); BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, HU3D_MOTATTR_NONE); } - if (arg0->unk01 < 25) { - OSu8tof32(&arg0->unk01, &temp_f29); - BoardPlayerPosGet(GWSystem.player_curr, &sp10); - sp10.x += arg1->trans.x; - sp10.z += arg1->trans.z; - sp10.y += 15.0f + -0.08166667f * temp_f29 * temp_f29; - if (sp10.y <= arg1->scale.y) { - sp10.y = arg1->scale.y; + if (work->time < 25) { + OSu8tof32(&work->time, &time); + BoardPlayerPosGet(GWSystem.player_curr, &pos); + pos.x += obj->trans.x; + pos.z += obj->trans.z; + pos.y += 15.0f + -0.08166667f * time * time; + if (pos.y <= obj->scale.y) { + pos.y = obj->scale.y; } - var_f27 = arg1->trans.y + BoardPlayerRotYGet(GWSystem.player_curr); - BoardPlayerRotYSet(GWSystem.player_curr, var_f27); - BoardPlayerPosSetV(GWSystem.player_curr, &sp10); - if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) { - if (lbl_1_data_5D8 == -1) { - lbl_1_data_5D8 = HuAudFXPlay(0x411); + rotY = obj->trans.y + BoardPlayerRotYGet(GWSystem.player_curr); + BoardPlayerRotYSet(GWSystem.player_curr, rotY); + BoardPlayerPosSetV(GWSystem.player_curr, &pos); + if (work->time > 12 && work->decaF != 0) { + if (decaStompSeNo == -1) { + decaStompSeNo = HuAudFXPlay(0x411); } - OSu8tof32(&arg0->unk01, &temp_f29); - temp_f29 -= 12.0f; - temp_f29 = 90.0f * (temp_f29 / 12.5f); - var_f28 = cosd(temp_f29); - if (var_f28 < 0.1f) { - var_f28 = 0.1f; + OSu8tof32(&work->time, &time); + time -= 12.0f; + time = 90.0f * (time / 12.5f); + scaleY = cosd(time); + if (scaleY < 0.1f) { + scaleY = 0.1f; } - var_r24 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; - BoardModelScaleSet(var_r24, 1.0f, var_f28, 1.0f); + var_r24 = mapObjMdlId[cupMapObj[cupSide][cupHookNo]]; + BoardModelScaleSet(var_r24, 1.0f, scaleY, 1.0f); } } - arg0->unk01++; + work->time++; } -static void fn_1_6A14(Bss18Work *arg0, omObjData *arg1) +static void CupObjHookReset(CupObjWork *work, omObjData *obj) { - Vec sp20; - Vec sp14; - Vec sp8; + Vec endPos; + Vec startPos; + Vec diff; - BoardModelHookObjReset(arg0->unk04, lbl_1_data_604[lbl_1_bss_28]); - Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp14); - BoardPlayerPosSetV(GWSystem.player_curr, &sp14); - BoardSpacePosGet(0, lbl_1_bss_24, &sp20); - VECSubtract(&sp20, &sp14, &sp8); - arg1->trans.x = sp8.x / 25.0f; - arg1->trans.z = sp8.z / 25.0f; - arg1->scale.x = sp20.x; - arg1->scale.y = sp20.y; - arg1->scale.z = sp20.z; + BoardModelHookObjReset(work->dishMdlId, cupHookTbl[cupHookNo]); + Hu3DModelObjPosGet(BoardModelIDGet(work->dishMdlId), cupHookTbl[cupHookNo], &startPos); + BoardPlayerPosSetV(GWSystem.player_curr, &startPos); + BoardSpacePosGet(0, cupSpaceEnd, &endPos); + VECSubtract(&endPos, &startPos, &diff); + obj->trans.x = diff.x / 25.0f; + obj->trans.z = diff.z / 25.0f; + obj->scale.x = endPos.x; + obj->scale.y = endPos.y; + obj->scale.z = endPos.z; BoardPlayerMotionShiftSet(GWSystem.player_curr, 4, 15.0f, 5.0f, HU3D_MOTATTR_NONE); - BoardPlayerRotYSet(GWSystem.player_curr, atan2d(sp8.x, sp8.z)); - arg0->unk00_field1 = 3; - arg0->unk01 = 0; + BoardPlayerRotYSet(GWSystem.player_curr, atan2d(diff.x, diff.z)); + work->mode = 3; + work->time = 0; } -static void fn_1_6BC0(Bss18Work *arg0, omObjData *arg1) +static void CupObjStop(CupObjWork *work, omObjData *obj) { - Vec sp14; - Vec sp8; - float var_f28; - float temp_f29; - s16 var_r27; + Vec pos; + Vec spacePos; + float angle; + float time; + s16 mdlId; - if (arg0->unk01 >= 55) { - BoardSpacePosGet(0, lbl_1_bss_24, &sp8); - GWPlayer[GWSystem.player_curr].space_curr = lbl_1_bss_24; - BoardPlayerPosSetV(GWSystem.player_curr, &sp8); + if (work->time >= 55) { + BoardSpacePosGet(0, cupSpaceEnd, &spacePos); + GWPlayer[GWSystem.player_curr].space_curr = cupSpaceEnd; + BoardPlayerPosSetV(GWSystem.player_curr, &spacePos); BoardPlayerIdleSet(GWSystem.player_curr); - var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; - if (arg0->unk00_field3 != 0) { - BoardModelScaleSet(var_r27, 1.0f, 1.0f, 1.0f); + mdlId = mapObjMdlId[cupMapObj[cupSide][cupHookNo]]; + if (work->decaF != 0) { + BoardModelScaleSet(mdlId, 1.0f, 1.0f, 1.0f); } - arg0->unk00_field0 = 1; + work->killF = 1; } - if (arg0->unk01 == 25) { - BoardPlayerPosSet(GWSystem.player_curr, arg1->scale.x, arg1->scale.y, arg1->scale.z); + if (work->time == 25) { + BoardPlayerPosSet(GWSystem.player_curr, obj->scale.x, obj->scale.y, obj->scale.z); BoardPlayerMotionShiftSet(GWSystem.player_curr, 5, 0.0f, 8.0f, HU3D_MOTATTR_NONE); } - if (arg0->unk01 < 25) { - OSu8tof32(&arg0->unk01, &temp_f29); - BoardPlayerPosGet(GWSystem.player_curr, &sp14); - sp14.x += arg1->trans.x; - sp14.z += arg1->trans.z; - sp14.y += 15.0f + -0.08166667f * temp_f29 * temp_f29; - if (sp14.y <= arg1->scale.y) { - sp14.y = arg1->scale.y; + if (work->time < 25) { + OSu8tof32(&work->time, &time); + BoardPlayerPosGet(GWSystem.player_curr, &pos); + pos.x += obj->trans.x; + pos.z += obj->trans.z; + pos.y += 15.0f + -0.08166667f * time * time; + if (pos.y <= obj->scale.y) { + pos.y = obj->scale.y; } - BoardPlayerPosSetV(GWSystem.player_curr, &sp14); - if (arg0->unk01 > 12 && arg0->unk00_field3 != 0) { - OSu8tof32(&arg0->unk01, &temp_f29); - temp_f29 -= 12.0f; - temp_f29 = 90.0f * (temp_f29 / 12.5f); - var_f28 = sind(temp_f29); - if (var_f28 < 0.1f) { - var_f28 = 0.1f; + BoardPlayerPosSetV(GWSystem.player_curr, &pos); + if (work->time > 12 && work->decaF != 0) { + OSu8tof32(&work->time, &time); + time -= 12.0f; + time = 90.0f * (time / 12.5f); + angle = sind(time); + if (angle < 0.1f) { + angle = 0.1f; } - var_r27 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][lbl_1_bss_28]]; - BoardModelScaleSet(var_r27, 1.0f, var_f28, 1.0f); + mdlId = mapObjMdlId[cupMapObj[cupSide][cupHookNo]]; + BoardModelScaleSet(mdlId, 1.0f, angle, 1.0f); } } - arg0->unk01++; + work->time++; } -static void fn_1_6FB4(Bss18Work *arg0, omObjData *arg1) +static void CupObjRotate(CupObjWork *work, omObjData *obj) { - Vec sp40; - Vec sp34; - Vec sp28; - Vec sp1C; - Vec sp10; - float var_f31; - BoardSpace *temp_r29; - s16 var_r22; - u32 temp_r3; - s32 var_r24; + Vec spacePos; + Vec objPos; + + float dist; + BoardSpace *space; + s16 mdlId; + u32 flag; + s32 cupDir; s32 i; - if (arg0->unk00_field2 != 0) { - arg0->unk08 *= 0.9f; - if (arg0->unk08 <= 0.01f) { - arg0->unk08 = 0.0f; - fn_1_5694(0); - if (lbl_1_data_5D4 != -1) { - HuAudFXStop(lbl_1_data_5D4); - lbl_1_data_5D4 = -1; + if (work->stopF != 0) { + work->dishSpeed *= 0.9f; + if (work->dishSpeed <= 0.01f) { + work->dishSpeed = 0.0f; + CupMotOnSet(0); + if (cupMoveSeNo != -1) { + HuAudFXStop(cupMoveSeNo); + cupMoveSeNo = -1; } - fn_1_6A14(arg0, arg1); + CupObjHookReset(work, obj); } - BoardModelMotionSpeedSet(arg0->unk04, arg0->unk08); + BoardModelMotionSpeedSet(work->dishMdlId, work->dishSpeed); for (i = 0; i < 3; i++) { - var_r22 = lbl_1_bss_6C4[lbl_1_data_5DC[lbl_1_bss_29][i]]; - BoardModelMotionSpeedSet(var_r22, arg0->unk08); + mdlId = mapObjMdlId[cupMapObj[cupSide][i]]; + BoardModelMotionSpeedSet(mdlId, work->dishSpeed); } return; } - if (lbl_1_bss_29 == 0) { - var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29] ^ 1; + if (cupSide == 0) { + cupDir = boardWork->cupDir[cupSide] ^ 1; } else { - var_r24 = lbl_1_bss_0->unk01[lbl_1_bss_29]; + cupDir = boardWork->cupDir[cupSide]; } - temp_r29 = BoardSpaceGet(0, lbl_1_bss_26); - lbl_1_bss_24 = -1; - for (i = 0; i < temp_r29->link_cnt; i++) { - if (temp_r29->link[i] != -1) { - temp_r3 = BoardSpaceFlagGet(0, temp_r29->link[i]); - if ((temp_r3 & 0x200) && var_r24 == 0) { - lbl_1_bss_24 = temp_r29->link[i]; + space = BoardSpaceGet(0, cupSpaceStart); + cupSpaceEnd = -1; + for (i = 0; i < space->link_cnt; i++) { + if (space->link[i] != -1) { + flag = BoardSpaceFlagGet(0, space->link[i]); + if ((flag & 0x200) && cupDir == 0) { + cupSpaceEnd = space->link[i]; } - if ((temp_r3 & 0x100) && var_r24 != 0) { - lbl_1_bss_24 = temp_r29->link[i]; + if ((flag & 0x100) && cupDir != 0) { + cupSpaceEnd = space->link[i]; } } } - BoardSpacePosGet(0, lbl_1_bss_24, &sp40); - Hu3DModelObjPosGet(BoardModelIDGet(arg0->unk04), lbl_1_data_604[lbl_1_bss_28], &sp34); - var_f31 = BoardVecDistXZCalc(&sp40, &sp34); - if (var_f31 <= 300.0f) { - arg0->unk00_field2 = 1; - arg0->unk08 = 1.0f; + BoardSpacePosGet(0, cupSpaceEnd, &spacePos); + Hu3DModelObjPosGet(BoardModelIDGet(work->dishMdlId), cupHookTbl[cupHookNo], &objPos); + dist = BoardVecDistXZCalc(&spacePos, &objPos); + if (dist <= 300.0f) { + work->stopF = TRUE; + work->dishSpeed = 1.0f; } } -static void fn_1_7528(s32 arg0, s32 arg1) +static void CupLandEvent(s32 playerNo, s32 spaceId) { - Vec sp30; - Vec sp24; - Vec sp18; - float temp_f31; - float temp_f30; - s16 sp14[] = { 23, 28 }; + Vec spacePos; + Vec cupRPos; + Vec cupLPos; + float cupRDist; + float cupLDist; + s16 sp14[] = { MAPOBJ_CUPR_DISH, MAPOBJ_CUPL_DISH }; BoardPlayerIdleSet(GWSystem.player_curr); - BoardSpacePosGet(0, arg1, &sp30); - BoardModelPosGet(lbl_1_bss_6C4[23], &sp24); - BoardModelPosGet(lbl_1_bss_6C4[28], &sp18); - temp_f31 = VECDistance(&sp24, &sp30); - temp_f30 = VECDistance(&sp18, &sp30); - if (temp_f31 < temp_f30) { - lbl_1_bss_29 = 0; + BoardSpacePosGet(0, spaceId, &spacePos); + BoardModelPosGet(mapObjMdlId[MAPOBJ_CUPR_DISH], &cupRPos); + BoardModelPosGet(mapObjMdlId[MAPOBJ_CUPL_DISH], &cupLPos); + cupRDist = VECDistance(&cupRPos, &spacePos); + cupLDist = VECDistance(&cupLPos, &spacePos); + if (cupRDist < cupLDist) { + cupSide = 0; } else { - lbl_1_bss_29 = 1; + cupSide = 1; } - BoardCameraTargetModelSet(lbl_1_bss_6C4[sp14[lbl_1_bss_29]]); + BoardCameraTargetModelSet(mapObjMdlId[sp14[cupSide]]); BoardCameraMotionWait(); HuPrcSleep(42); - fn_1_5B40(); + CupExec(); BoardCameraTargetPlayerSet(GWSystem.player_curr); BoardCameraMotionWait(); HuPrcSleep(12); } -static void fn_1_77EC(s32 arg0, s32 arg1) +static void CoasterLandEvent(s32 playerNo, s32 spaceId) { - lbl_1_bss_6B4 = arg0; - lbl_1_bss_6B0 = 0; - lbl_1_bss_8 = HuPrcChildCreate(fn_1_7894, 0x2003, 0x2000, 0, boardMainProc); - HuPrcDestructorSet2(lbl_1_bss_8, fn_1_4FA8); - while (lbl_1_bss_8) { + eventPlayer = playerNo; + coasterType = 0; + coasterProc = HuPrcChildCreate(CoasterLandMain, 0x2003, 0x2000, 0, boardMainProc); + HuPrcDestructorSet2(coasterProc, CoasterDestroy); + while (coasterProc) { HuPrcVSleep(); } } -static void fn_1_7894(void) +static void CoasterLandMain(void) { - lbl_1_bss_6B1 = 1; + coasterLandF = 1; WipeColorSet(0, 0, 0); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 21); while (WipeStatGet() != 0) { HuPrcVSleep(); } - fn_1_7A64(); - fn_1_45F4(); + CoasterLandExec(); + CoasterExit(); HuPrcEnd(); } -static void fn_1_7A64(void) +static void CoasterLandExec(void) { - Vec sp34; - Vec sp28; - Vec sp1C; - Vec sp10; - float var_f30; - s16 var_r20; - s32 temp_r19; - s32 var_r28; + Vec spacePos; + float motSpeed; + s16 spaceId; + s32 seNo; + s32 endF; - var_r28 = 0; - lbl_1_bss_674 = lbl_1_bss_670 = 0.18f; - lbl_1_bss_640 = 0.0f; - lbl_1_bss_660.x = 0.0f; - lbl_1_bss_660.y = 0.0f; - lbl_1_bss_660.z = 0.0f; + endF = 0; + coasterAccel = coasterSpeed = 0.18f; + coasterTime = 0.0f; + coasterRot.x = 0.0f; + coasterRot.y = 0.0f; + coasterRot.z = 0.0f; lbl_1_bss_6A8 = 0.0f; - lbl_1_bss_6B3 = 0; - lbl_1_bss_624.x = 0.0f; - lbl_1_bss_624.z = 0.0f; - lbl_1_bss_624.y = 1.0f; - lbl_1_bss_66C = 0.04f; + coasterLoopF = 0; + coasterCameraUp.x = 0.0f; + coasterCameraUp.z = 0.0f; + coasterCameraUp.y = 1.0f; + coasterCamSpeed = 0.04f; BoardSpaceAttrSet(0, 1); - fn_1_97F4(); - BoardModelMotionStart(lbl_1_bss_6AE, 0, 0); - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardModelMotionTimeSet(lbl_1_bss_6AE, lbl_1_bss_644); - lbl_1_bss_63C = -90.0f; - lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x2000, &sp34); - var_r20 = BoardSpaceFlagSearch(1, 0x1000); + CoasterEffCreate(); + BoardModelMotionStart(coasterPathMdlId, 0, 0); + if (boardWork->hostSide == 0) { + BoardModelMotionTimeSet(coasterPathMdlId, coasterMaxTime); + coasterBaseRotY = -90.0f; + coasterStartSpace = BoardSpaceFlagPosGet(1, 0x2000, &spacePos); + spaceId = BoardSpaceFlagSearch(1, 0x1000); } else { - BoardModelMotionTimeSet(lbl_1_bss_6AE, 0.0f); - lbl_1_bss_63C = 90.0f; - lbl_1_bss_6AC = BoardSpaceFlagPosGet(1, 0x1000, &sp34); - var_r20 = BoardSpaceFlagSearch(1, 0x2000); + BoardModelMotionTimeSet(coasterPathMdlId, 0.0f); + coasterBaseRotY = 90.0f; + coasterStartSpace = BoardSpaceFlagPosGet(1, 0x1000, &spacePos); + spaceId = BoardSpaceFlagSearch(1, 0x2000); } - lbl_1_bss_654 = sp34; - BoardCameraMotionStartEx(lbl_1_bss_6C4[0], NULL, NULL, 2400.0f, -1.0f, 2); - MTXRotRad(lbl_1_bss_678, 'y', MTXDegToRad(lbl_1_bss_63C)); - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - BoardModelRotSet(lbl_1_bss_6C4[0], 0.0f, 0.0f, 0.0f); - fn_1_3350(); - lbl_1_bss_648 = lbl_1_bss_654; - lbl_1_bss_618 = lbl_1_bss_654; - lbl_1_bss_630 = lbl_1_bss_654; - fn_1_852C(); - BoardModelMotionSpeedSet(lbl_1_bss_6AE, lbl_1_bss_670); + coasterPos = spacePos; + BoardCameraMotionStartEx(mapObjMdlId[MAPOBJ_COASTER], NULL, NULL, 2400.0f, -1.0f, 2); + MTXRotRad(coasterMtx, 'y', MTXDegToRad(coasterBaseRotY)); + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + BoardModelRotSet(mapObjMdlId[MAPOBJ_COASTER], 0.0f, 0.0f, 0.0f); + CoasterPathMotUpdate(); + coasterPosOld = coasterPos; + coasterCameraTarget = coasterPos; + coasterCameraPos = coasterPos; + CoasterPlayerManCreate(); + BoardModelMotionSpeedSet(coasterPathMdlId, coasterSpeed); BoardCameraMotionWait(); WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, -1); - lbl_1_bss_6B0 = 1; - temp_r19 = HuAudFXPlay(0x412); + coasterType = 1; + seNo = HuAudFXPlay(0x412); while (TRUE) { - fn_1_1990(); - fn_1_3350(); - fn_1_276C(); - BoardModelPosSetV(lbl_1_bss_6C4[0], &lbl_1_bss_654); - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - if (lbl_1_bss_0->unk00_field0 == 0) { - var_f30 = -lbl_1_bss_670; + CoasterPathUpdate(); + CoasterPathMotUpdate(); + CoasterRotUpdate(); + BoardModelPosSetV(mapObjMdlId[MAPOBJ_COASTER], &coasterPos); + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + if (boardWork->hostSide == 0) { + motSpeed = -coasterSpeed; } else { - var_f30 = lbl_1_bss_670; + motSpeed = coasterSpeed; } - BoardModelMotionSpeedSet(lbl_1_bss_6AE, var_f30); - if (lbl_1_bss_0->unk00_field0 == 0) { - if (BoardModelMotionTimeGet(lbl_1_bss_6AE) <= 20.0f && var_r28 == 0) { + BoardModelMotionSpeedSet(coasterPathMdlId, motSpeed); + if (boardWork->hostSide == 0) { + if (BoardModelMotionTimeGet(coasterPathMdlId) <= 20.0f && endF == 0) { WipeColorSet(0, 0, 0); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); - var_r28 = 1; + endF = 1; } } else { - if (BoardModelMotionTimeGet(lbl_1_bss_6AE) >= lbl_1_bss_644 - 20.0f && var_r28 == 0) { + if (BoardModelMotionTimeGet(coasterPathMdlId) >= coasterMaxTime - 20.0f && endF == 0) { WipeColorSet(0, 0, 0); WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, -1); - var_r28 = 1; + endF = 1; } } - if (var_r28 != 0 && WipeStatGet() == 0) { + if (endF != 0 && WipeStatGet() == 0) { break; } HuPrcVSleep(); } - HuAudFXStop(temp_r19); - fn_1_98EC(); - fn_1_87AC(); - while (lbl_1_bss_C) { + HuAudFXStop(seNo); + CoasterEffKill(); + CoasterPlayerManKill(); + while (coasterPlayerManObj) { HuPrcVSleep(); } - MTXIdentity(lbl_1_bss_678); - BoardModelMtxSet(lbl_1_bss_6C4[0], &lbl_1_bss_678); - lbl_1_bss_660.x = 0.0f; - lbl_1_bss_660.z = 0.0f; - lbl_1_bss_660.y = -lbl_1_bss_63C; - BoardModelRotSetV(lbl_1_bss_6C4[0], &lbl_1_bss_660); - BoardSpacePosGet(1, var_r20, &sp34); - BoardModelPosSetV(lbl_1_bss_6C4[0], &sp34); + MTXIdentity(coasterMtx); + BoardModelMtxSet(mapObjMdlId[MAPOBJ_COASTER], &coasterMtx); + coasterRot.x = 0.0f; + coasterRot.z = 0.0f; + coasterRot.y = -coasterBaseRotY; + BoardModelRotSetV(mapObjMdlId[MAPOBJ_COASTER], &coasterRot); + BoardSpacePosGet(1, spaceId, &spacePos); + BoardModelPosSetV(mapObjMdlId[MAPOBJ_COASTER], &spacePos); BoardSpaceAttrReset(0, 1); BoardCameraMoveSet(0); - BoardCameraTargetPlayerSet(lbl_1_bss_6B4); + BoardCameraTargetPlayerSet(eventPlayer); BoardCameraViewSet(1); BoardCameraMotionWait(); - lbl_1_bss_6B2 = 1; + coasterDoneF = 1; } -static s8 lbl_1_data_633 = -1; +static s8 coasterChasePlayer = -1; -static void fn_1_852C(void) +static void CoasterPlayerManCreate(void) { - BssCWork *temp_r30; - BssCData *temp_r31; - Vec spC; - float temp_f31; - s16 sp8; - s16 var_r28; + CoasterPlayerManWork *work; + CoasterPlayerWork *workPlayer; + Vec playerPos; + float motTime; + s16 charNo; + s16 spaceId; s16 i; - u32 var_r27; + u32 spaceFlag; - lbl_1_bss_C = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, fn_1_87E0); - temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork); - temp_r30->unk00_field0 = 0; - temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(BssCData), MEMORY_DEFAULT_NUM); - memset(temp_r30->unk04, 0, 4 * sizeof(BssCData)); - lbl_1_data_633 = -1; - lbl_1_bss_1C = 0; - for (temp_r30->unk01 = i = 0; i < 4; i++) { - temp_r31 = &temp_r30->unk04[temp_r30->unk01]; - var_r28 = GWPlayer[i].space_curr; - sp8 = GWPlayer[i].character; - var_r27 = BoardSpaceFlagGet(0, var_r28); - if (!(var_r27 & 1)) { - temp_r31->unk00 = -1; + coasterPlayerManObj = omAddObjEx(boardObjMan, 0x103, 0, 0, -1, CoasterPlayerManUpdate); + work = OM_GET_WORK_PTR(coasterPlayerManObj, CoasterPlayerManWork); + work->killF = 0; + work->player = HuMemDirectMallocNum(HEAP_SYSTEM, 4 * sizeof(CoasterPlayerWork), MEMORY_DEFAULT_NUM); + memset(work->player, 0, 4 * sizeof(CoasterPlayerWork)); + coasterChasePlayer = -1; + coasterPlayerChaseNum = 0; + for (work->playerNum = i = 0; i < 4; i++) { + workPlayer = &work->player[work->playerNum]; + spaceId = GWPlayer[i].space_curr; + charNo = GWPlayer[i].character; + spaceFlag = BoardSpaceFlagGet(0, spaceId); + if (!(spaceFlag & 1)) { + workPlayer->mode = -1; continue; } - temp_r31->unk00 = 0; - temp_r31->unk01 = i; - temp_r31->unk02 = 0; - BoardPlayerPosGet(temp_r31->unk01, &spC); - temp_r31->unk04 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); - temp_f31 = BoardModelMotionMaxTimeGet(temp_r31->unk04); - BoardModelVisibilitySet(temp_r31->unk04, 0); - fn_1_95F4(temp_r31); - BoardModelMotionStart(temp_r31->unk04, 0, 0); - BoardModelMotionSpeedSet(temp_r31->unk04, 0.0f); - if (lbl_1_bss_0->unk00_field0 == 0) { - temp_r31->unk08 = -0.18f; - BoardModelMotionTimeSet(temp_r31->unk04, temp_f31); + workPlayer->mode = 0; + workPlayer->playerNo = i; + workPlayer->delay = 0; + BoardPlayerPosGet(workPlayer->playerNo, &playerPos); + workPlayer->pathMdlId = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 10), NULL, 0); + motTime = BoardModelMotionMaxTimeGet(workPlayer->pathMdlId); + BoardModelVisibilitySet(workPlayer->pathMdlId, 0); + CoasterPlayerTimeInit(workPlayer); + BoardModelMotionStart(workPlayer->pathMdlId, 0, 0); + BoardModelMotionSpeedSet(workPlayer->pathMdlId, 0.0f); + if (boardWork->hostSide == 0) { + workPlayer->speed = -0.18f; + BoardModelMotionTimeSet(workPlayer->pathMdlId, motTime); } else { - temp_r31->unk08 = 0.18f; - BoardModelMotionTimeSet(temp_r31->unk04, 0.0f); + workPlayer->speed = 0.18f; + BoardModelMotionTimeSet(workPlayer->pathMdlId, 0.0f); } - fn_1_932C(temp_r31); - temp_r30->unk01++; + CoasterPlayerEndSet(workPlayer); + work->playerNum++; } BoardCameraMoveSet(1); - BoardCameraTargetModelSet(lbl_1_bss_6C4[0]); + BoardCameraTargetModelSet(mapObjMdlId[MAPOBJ_COASTER]); } -static void fn_1_87AC(void) +static void CoasterPlayerManKill(void) { - if (lbl_1_bss_C) { - OM_GET_WORK_PTR(lbl_1_bss_C, BssCWork)->unk00_field0 = 1; + if (coasterPlayerManObj) { + OM_GET_WORK_PTR(coasterPlayerManObj, CoasterPlayerManWork)->killF = 1; } } -static void fn_1_87E0(omObjData *arg0) +static void CoasterPlayerManUpdate(omObjData *obj) { - BssCWork *temp_r30 = OM_GET_WORK_PTR(arg0, BssCWork); - BssCData *temp_r31; + CoasterPlayerManWork *work = OM_GET_WORK_PTR(obj, CoasterPlayerManWork); + CoasterPlayerWork *workPlayer; s32 i; - if (temp_r30->unk00_field0 != 0 || BoardIsKill()) { - for (i = 0; i < temp_r30->unk01; i++) { - temp_r31 = &temp_r30->unk04[i]; + if (work->killF != 0 || BoardIsKill()) { + for (i = 0; i < work->playerNum; i++) { + workPlayer = &work->player[i]; } - HuMemDirectFree(temp_r30->unk04); - lbl_1_bss_C = NULL; - omDelObjEx(HuPrcCurrentGet(), arg0); + HuMemDirectFree(work->player); + coasterPlayerManObj = NULL; + omDelObjEx(HuPrcCurrentGet(), obj); return; } - if (lbl_1_bss_6B0 == 0) { + if (coasterType == 0) { return; } - for (i = 0; i < temp_r30->unk01; i++) { - temp_r31 = &temp_r30->unk04[i]; - if (temp_r31->unk02 != 0) { - temp_r31->unk02--; + for (i = 0; i < work->playerNum; i++) { + workPlayer = &work->player[i]; + if (workPlayer->delay != 0) { + workPlayer->delay--; } else { - switch (temp_r31->unk00) { + switch (workPlayer->mode) { case 0: - fn_1_8988(temp_r31, arg0); + CoasterPlayerWait(workPlayer, obj); break; case 1: - fn_1_8A50(temp_r31, arg0); + CoasterPlayerChaseBegin(workPlayer, obj); break; case 2: - fn_1_8B6C(temp_r31, arg0); + CoasterPlayerChasePathSet(workPlayer, obj); break; case 3: - fn_1_8DDC(temp_r31, arg0); + CoasterPlayerChase(workPlayer, obj); break; case 4: - fn_1_918C(temp_r31, arg0); + CoasterPlayerStop(workPlayer, obj); break; case 5: - fn_1_927C(temp_r31, arg0); + CoasterPlayerEnd(workPlayer, obj); break; } } } } -static void fn_1_8988(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerWait(CoasterPlayerWork *work, omObjData *obj) { - Vec sp20; - Vec sp14; - Vec sp8; + Vec mdlCoasterPos; + Vec playerPos; + Vec dir; - if (arg0->unk10 - lbl_1_bss_640 > 900.0f) { + if (work->time - coasterTime > 900.0f) { return; } - BoardModelPosGet(*lbl_1_bss_6C4, &sp20); - BoardPlayerPosGet(arg0->unk01, &sp14); - VECSubtract(&sp20, &sp14, &sp8); - BoardPlayerRotYSet(arg0->unk01, atan2d(sp8.x, sp8.z)); - arg0->unk00 = 1; + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER], &mdlCoasterPos); + BoardPlayerPosGet(work->playerNo, &playerPos); + VECSubtract(&mdlCoasterPos, &playerPos, &dir); + BoardPlayerRotYSet(work->playerNo, atan2d(dir.x, dir.z)); + work->mode = 1; } -static s32 lbl_1_data_634[8] = { 0x00000123, 0x00000163, 0x000001A3, 0x000001E3, 0x00000223, 0x00000263, 0x000002A3, 0x000002E3 }; +static s32 coasterChaseSe[8] = { 0x00000123, 0x00000163, 0x000001A3, 0x000001E3, 0x00000223, 0x00000263, 0x000002A3, 0x000002E3 }; -static void fn_1_8A50(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerChaseBegin(CoasterPlayerWork *work, omObjData *obj) { - if (lbl_1_data_633 == -1) { - BoardCameraTargetPlayerSet(arg0->unk01); - lbl_1_data_633 = arg0->unk01; + if (coasterChasePlayer == -1) { + BoardCameraTargetPlayerSet(work->playerNo); + coasterChasePlayer = work->playerNo; } - HuAudFXPlay(lbl_1_data_634[GWPlayer[arg0->unk01].character]); - BoardPlayerMotionStart(arg0->unk01, 9, 0); - BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f); - arg0->unk02 = lbl_1_bss_1C * 3 + 9; - arg0->unk00 = 2; - lbl_1_bss_1C++; - omVibrate(arg0->unk01, 12, 4, 2); + HuAudFXPlay(coasterChaseSe[GWPlayer[work->playerNo].character]); + BoardPlayerMotionStart(work->playerNo, 9, 0); + BoardPlayerMotionSpeedSet(work->playerNo, 2.0f); + work->delay = coasterPlayerChaseNum * 3 + 9; + work->mode = 2; + coasterPlayerChaseNum++; + omVibrate(work->playerNo, 12, 4, 2); } -static void fn_1_8B6C(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerChasePathSet(CoasterPlayerWork *work, omObjData *obj) { - ModelData *temp_r29; - HsfObject *var_r30; - Vec sp20; - Vec sp14; - Vec sp8; - float temp_f30; - float var_f31; - s16 var_r28; + ModelData *modelP; + HsfObject *modelObj; + Vec mdlCoasterPos; + Vec dir; + Vec objPos; + float motTime; + float time; + s16 modelId; - BoardPlayerPosGet(arg0->unk01, &arg0->unk14); - BoardModelPosGet(lbl_1_bss_6C4[0], &sp20); - VECSubtract(&sp20, &arg0->unk14, &sp14); - BoardPlayerRotYSet(arg0->unk01, -atan2d(sp14.x, sp14.z)); - BoardPlayerMotionStart(arg0->unk01, 3, 0x40000001); - BoardPlayerMotionSpeedSet(arg0->unk01, 2.0f); - temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6AE); - var_r28 = BoardModelIDGet(lbl_1_bss_6AE); - temp_r29 = &Hu3DData[var_r28]; - Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); - var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); - sp8.x = var_r30->data.curr.pos.x; - sp8.y = var_r30->data.curr.pos.y; - sp8.z = var_r30->data.curr.pos.z; - var_f31 = lbl_1_bss_640; + BoardPlayerPosGet(work->playerNo, &work->pos); + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER], &mdlCoasterPos); + VECSubtract(&mdlCoasterPos, &work->pos, &dir); + BoardPlayerRotYSet(work->playerNo, -atan2d(dir.x, dir.z)); + BoardPlayerMotionStart(work->playerNo, 3, HU3D_MOTATTR_LOOP); + BoardPlayerMotionSpeedSet(work->playerNo, 2.0f); + motTime = BoardModelMotionTimeGet(coasterPathMdlId); + modelId = BoardModelIDGet(coasterPathMdlId); + modelP = &Hu3DData[modelId]; + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + modelObj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + objPos.x = modelObj->data.curr.pos.x; + objPos.y = modelObj->data.curr.pos.y; + objPos.z = modelObj->data.curr.pos.z; + time = coasterTime; while (TRUE) { - Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); - var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); - sp14.x = sp8.x - var_r30->data.curr.pos.x; - sp14.y = sp8.y - var_r30->data.curr.pos.y; - sp14.z = sp8.z - var_r30->data.curr.pos.z; - var_f31 += VECMag(&sp14); - if (var_f31 >= arg0->unk10) { + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + modelObj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + dir.x = objPos.x - modelObj->data.curr.pos.x; + dir.y = objPos.y - modelObj->data.curr.pos.y; + dir.z = objPos.z - modelObj->data.curr.pos.z; + time += VECMag(&dir); + if (time >= work->time) { break; } - sp8.x = var_r30->data.curr.pos.x; - sp8.y = var_r30->data.curr.pos.y; - sp8.z = var_r30->data.curr.pos.z; - temp_r29->unk_64 += arg0->unk08; + objPos.x = modelObj->data.curr.pos.x; + objPos.y = modelObj->data.curr.pos.y; + objPos.z = modelObj->data.curr.pos.z; + modelP->unk_64 += work->speed; } - BoardModelMotionStart(arg0->unk04, 0, 0); - BoardModelMotionTimeSet(arg0->unk04, temp_r29->unk_64); - BoardModelMotionSpeedSet(arg0->unk04, temp_r29->unk_68); - arg0->unk00 = 3; - BoardModelMotionTimeSet(lbl_1_bss_6AE, temp_f30); + BoardModelMotionStart(work->pathMdlId, 0, 0); + BoardModelMotionTimeSet(work->pathMdlId, modelP->unk_64); + BoardModelMotionSpeedSet(work->pathMdlId, modelP->unk_68); + work->mode = 3; + BoardModelMotionTimeSet(coasterPathMdlId, motTime); } -static void fn_1_8DDC(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerChase(CoasterPlayerWork *work, omObjData *obj) { - ModelData *temp_r29; - HsfObject *var_r30; - Vec *var_r27; - Vec *var_r26; - Vec sp48; - Vec sp3C; - Vec sp30; - Vec sp24; - Vec sp18; - Vec spC; - Mtx sp54; - s16 var_r28; + ModelData *modelP; + HsfObject *modelObj; + Vec *pos; + Vec *target; + Vec up; + Vec rot; + Vec objPos; + Vec diff; + Vec railPos; + Vec spacePos; + Mtx matrix; + s16 modelId; - var_r28 = BoardModelIDGet(arg0->unk04); - temp_r29 = &Hu3DData[var_r28]; - Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); - var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); - sp30.x = var_r30->data.curr.pos.x; - sp30.y = var_r30->data.curr.pos.y; - sp30.z = var_r30->data.curr.pos.z; - VECSubtract(&sp30, &arg0->unk14, &sp24); - if (fn_1_94A8(arg0) != 0) { - BoardModelPosGet(lbl_1_bss_6C4[1], &sp18); - VECSubtract(&sp18, &sp30, &sp48); - VECNormalize(&sp48, &sp48); - var_r27 = &arg0->unk14; - var_r26 = &sp30; - BoardMTXCalcLookAt(sp54, var_r26, &sp48, var_r27); - MTXTranspose(sp54, arg0->unk20); + modelId = BoardModelIDGet(work->pathMdlId); + modelP = &Hu3DData[modelId]; + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + modelObj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + objPos.x = modelObj->data.curr.pos.x; + objPos.y = modelObj->data.curr.pos.y; + objPos.z = modelObj->data.curr.pos.z; + VECSubtract(&objPos, &work->pos, &diff); + if (CoasterPlayerLoopCheck(work) != 0) { + BoardModelPosGet(mapObjMdlId[MAPOBJ_COASTER_RAIL], &railPos); + VECSubtract(&railPos, &objPos, &up); + VECNormalize(&up, &up); + pos = &work->pos; + target = &objPos; + BoardMTXCalcLookAt(matrix, target, &up, pos); + MTXTranspose(matrix, work->matrix); } else { - if (sp24.z != 0.0f || sp24.x != 0.0f) { - sp3C.y = atan2d(sp24.x, sp24.z); - sp3C.x = -atan2d(sp24.y, VECMagXZ(&sp24)); + if (diff.z != 0.0f || diff.x != 0.0f) { + rot.y = atan2d(diff.x, diff.z); + rot.x = -atan2d(diff.y, VECMagXZ(&diff)); } else { - sp3C.x = sp3C.y = 0.0f; + rot.x = rot.y = 0.0f; } - MTXRotRad(sp54, 'x', MTXDegToRad(sp3C.x)); - MTXRotRad(arg0->unk20, 'y', MTXDegToRad(sp3C.y)); - MTXConcat(arg0->unk20, sp54, arg0->unk20); + MTXRotRad(matrix, 'x', MTXDegToRad(rot.x)); + MTXRotRad(work->matrix, 'y', MTXDegToRad(rot.y)); + MTXConcat(work->matrix, matrix, work->matrix); } - BoardPlayerPosSetV(arg0->unk01, &sp30); - BoardPlayerRotSet(arg0->unk01, 0.0f, 0.0f, 0.0f); - BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); - arg0->unk14 = sp30; - BoardSpacePosGet(0, arg0->unk06, &spC); - if (BoardVecMaxDistXZCheck(&spC, &sp30, 200.0f)) { - arg0->unk00 = 4; + BoardPlayerPosSetV(work->playerNo, &objPos); + BoardPlayerRotSet(work->playerNo, 0.0f, 0.0f, 0.0f); + BoardPlayerMtxSet(work->playerNo, &work->matrix); + work->pos = objPos; + BoardSpacePosGet(0, work->endSpace, &spacePos); + if (BoardVecMaxDistXZCheck(&spacePos, &objPos, 200.0f)) { + work->mode = 4; } } -static void fn_1_918C(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerStop(CoasterPlayerWork *work, omObjData *obj) { - Vec sp20; - Vec sp14; - Vec sp8; - s32 var_r30; + Vec spacePos; + Vec playerPos; + Vec dir; + s32 spaceEnd; - MTXIdentity(arg0->unk20); - var_r30 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40); - BoardSpacePosGet(0, var_r30, &sp20); - BoardPlayerPosGet(arg0->unk01, &sp14); - BoardPlayerMtxSet(arg0->unk01, &arg0->unk20); - VECSubtract(&sp20, &sp14, &sp8); - BoardPlayerRotYSet(arg0->unk01, atan2d(-sp8.z, -sp8.x)); - BoardPlayerPosLerpStart(arg0->unk01, &sp14, &sp20, 20); - arg0->unk00 = 5; + MTXIdentity(work->matrix); + spaceEnd = BoardSpaceLinkFlagSearch(0, work->endSpace, 0x40); + BoardSpacePosGet(0, spaceEnd, &spacePos); + BoardPlayerPosGet(work->playerNo, &playerPos); + BoardPlayerMtxSet(work->playerNo, &work->matrix); + VECSubtract(&spacePos, &playerPos, &dir); + BoardPlayerRotYSet(work->playerNo, atan2d(-dir.z, -dir.x)); + BoardPlayerPosLerpStart(work->playerNo, &playerPos, &spacePos, 20); + work->mode = 5; } -static void fn_1_927C(BssCData *arg0, omObjData *arg1) +static void CoasterPlayerEnd(CoasterPlayerWork *work, omObjData *obj) { - s32 temp_r3; + s32 spaceEnd; - if (!GWPlayer[arg0->unk01].moving) { - BoardPlayerIdleSet(arg0->unk01); - temp_r3 = BoardSpaceLinkFlagSearch(0, arg0->unk06, 0x40); - GWPlayer[arg0->unk01].space_curr = temp_r3; - arg0->unk00 = -1; - BoardPlayerMoveAwayStartCurr(temp_r3, 0); + if (!GWPlayer[work->playerNo].moving) { + BoardPlayerIdleSet(work->playerNo); + spaceEnd = BoardSpaceLinkFlagSearch(0, work->endSpace, 0x40); + GWPlayer[work->playerNo].space_curr = spaceEnd; + work->mode = -1; + BoardPlayerMoveAwayStartCurr(spaceEnd, 0); } } -static void fn_1_932C(BssCData *arg0) +static void CoasterPlayerEndSet(CoasterPlayerWork *work) { - BoardSpace *temp_r30; - BoardSpace *var_r26; - Vec sp20[2]; - Vec sp14; - float spC[2]; - s16 sp8[2]; - s32 var_r29; - s32 var_r28; + BoardSpace *space; + BoardSpace *linkSpace; + Vec spacePos[2]; + Vec beginPos; + float spaceDist[2]; + s16 spaceId[2]; + s32 j; + s32 no; s32 i; - for (var_r28 = i = 0; i < BoardSpaceCountGet(0); i++) { - temp_r30 = BoardSpaceGet(0, i + 1); - for (var_r29 = 0; var_r29 < temp_r30->link_cnt; var_r29++) { - var_r26 = BoardSpaceGet(0, temp_r30->link[var_r29]); - if (var_r26->flag & 0x40) { - sp8[var_r28] = i + 1; - BoardSpacePosGet(0, temp_r30->link[var_r29], &sp20[var_r28]); - var_r28++; + for (no = i = 0; i < BoardSpaceCountGet(0); i++) { + space = BoardSpaceGet(0, i + 1); + for (j = 0; j < space->link_cnt; j++) { + linkSpace = BoardSpaceGet(0, space->link[j]); + if (linkSpace->flag & 0x40) { + spaceId[no] = i + 1; + BoardSpacePosGet(0, space->link[j], &spacePos[no]); + no++; } } - if (var_r28 >= 2) { + if (no >= 2) { break; } } - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardSpaceFlagPosGet(0, 0x1000, &sp14); + if (boardWork->hostSide == 0) { + BoardSpaceFlagPosGet(0, 0x1000, &beginPos); } else { - BoardSpaceFlagPosGet(0, 0x2000, &sp14); + BoardSpaceFlagPosGet(0, 0x2000, &beginPos); } for (i = 0; i < 2; i++) { - spC[i] = VECSquareDistance(&sp14, &sp20[i]); + spaceDist[i] = VECSquareDistance(&beginPos, &spacePos[i]); } - if (spC[0] < spC[1]) { - arg0->unk06 = sp8[0]; + if (spaceDist[0] < spaceDist[1]) { + work->endSpace = spaceId[0]; } else { - arg0->unk06 = sp8[1]; + work->endSpace = spaceId[1]; } } -static s32 fn_1_94A8(BssCData *arg0) +static s32 CoasterPlayerLoopCheck(CoasterPlayerWork *arg0) { - Vec sp14; - s16 spC[4]; + Vec playerPos; + s16 linkTbl[4]; float sp8; - s32 var_r30; - s32 var_r29; - s32 var_r26; - BoardSpace *var_r31; - BoardSpace *var_r27; - BoardSpace *var_r28; + s32 spaceId; + s32 spaceIdLink; + s32 spaceIdPrev; + BoardSpace *space; + BoardSpace *spaceLink; + BoardSpace *spacePrev; - BoardPlayerPosGet(arg0->unk01, &sp14); - var_r28 = NULL; - var_r26 = -1; - var_r30 = lbl_1_bss_6AC; + BoardPlayerPosGet(arg0->playerNo, &playerPos); + spacePrev = NULL; + spaceIdPrev = -1; + spaceId = coasterStartSpace; sp8 = 0.0f; while (TRUE) { - var_r31 = BoardSpaceGet(1, var_r30); - if (lbl_1_bss_0->unk00_field0 == 0) { - var_r29 = var_r31->link[0]; + space = BoardSpaceGet(1, spaceId); + if (boardWork->hostSide == 0) { + spaceIdLink = space->link[0]; } else { - BoardSpaceLinkTargetListGet(1, var_r30, spC); - var_r29 = spC[0]; + BoardSpaceLinkTargetListGet(1, spaceId, linkTbl); + spaceIdLink = linkTbl[0]; } - var_r27 = BoardSpaceGet(1, var_r29); - if (!var_r27) { - var_r27 = var_r31; + spaceLink = BoardSpaceGet(1, spaceIdLink); + if (!spaceLink) { + spaceLink = space; break; } - if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 200.0f)) { - if (BoardVecMaxDistXZCheck(&var_r31->pos, &sp14, 100.0f)) { + if (BoardVecMaxDistXZCheck(&space->pos, &playerPos, 200.0f)) { + if (BoardVecMaxDistXZCheck(&space->pos, &playerPos, 100.0f)) { break; } - if (var_r28) { - var_r31 = var_r28; + if (spacePrev) { + space = spacePrev; break; } else { - var_r28 = var_r31; + spacePrev = space; } } - var_r26 = var_r30; - var_r30 = var_r29; + spaceIdPrev = spaceId; + spaceId = spaceIdLink; } - if (var_r31->flag & 8) { + if (space->flag & 8) { return 1; } else { @@ -2486,166 +2478,198 @@ static s32 fn_1_94A8(BssCData *arg0) } } -static void fn_1_95F4(BssCData *arg0) +static void CoasterPlayerTimeInit(CoasterPlayerWork *work) { - HsfObject *var_r30; - ModelData *temp_r29; - Vec sp2C; - Vec sp20; - Vec sp14; - Vec sp8; - float temp_f30; - float var_f31; - s16 var_r28; + HsfObject *modelObj; + ModelData *modelP; + Vec pos; + Vec prevPos; + Vec playerPos; + Vec diff; + float maxTime; + float time; + s16 modelId; - temp_f30 = BoardModelMotionMaxTimeGet(arg0->unk04); - if (lbl_1_bss_0->unk00_field0 == 0) { - BoardModelMotionTimeSet(arg0->unk04, temp_f30); - BoardModelMotionSpeedSet(arg0->unk04, -0.18f); + maxTime = BoardModelMotionMaxTimeGet(work->pathMdlId); + if (boardWork->hostSide == 0) { + BoardModelMotionTimeSet(work->pathMdlId, maxTime); + BoardModelMotionSpeedSet(work->pathMdlId, -0.18f); } else { - BoardModelMotionTimeSet(arg0->unk04, 0.0f); - BoardModelMotionSpeedSet(arg0->unk04, 0.18f); + BoardModelMotionTimeSet(work->pathMdlId, 0.0f); + BoardModelMotionSpeedSet(work->pathMdlId, 0.18f); } - BoardPlayerPosGet(arg0->unk01, &sp14); - var_r28 = BoardModelIDGet(arg0->unk04); - temp_r29 = &Hu3DData[var_r28]; - Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); - var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); - sp20.x = var_r30->data.curr.pos.x; - sp20.y = var_r30->data.curr.pos.y; - sp20.z = var_r30->data.curr.pos.z; - var_f31 = 0.0f; + BoardPlayerPosGet(work->playerNo, &playerPos); + modelId = BoardModelIDGet(work->pathMdlId); + modelP = &Hu3DData[modelId]; + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + modelObj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + prevPos.x = modelObj->data.curr.pos.x; + prevPos.y = modelObj->data.curr.pos.y; + prevPos.z = modelObj->data.curr.pos.z; + time = 0.0f; while (TRUE) { - Hu3DMotionExec(var_r28, temp_r29->unk_08, temp_r29->unk_64, 0); - var_r30 = Hu3DModelObjPtrGet(var_r28, "looppath-cube1"); - sp2C.x = var_r30->data.curr.pos.x; - sp2C.y = var_r30->data.curr.pos.y; - sp2C.z = var_r30->data.curr.pos.z; - VECSubtract(&sp2C, &sp20, &sp8); - var_f31 += VECMag(&sp8); - if (BoardVecMinDistCheck(&sp14, &sp2C, 150.0f)) { + Hu3DMotionExec(modelId, modelP->unk_08, modelP->unk_64, 0); + modelObj = Hu3DModelObjPtrGet(modelId, "looppath-cube1"); + pos.x = modelObj->data.curr.pos.x; + pos.y = modelObj->data.curr.pos.y; + pos.z = modelObj->data.curr.pos.z; + VECSubtract(&pos, &prevPos, &diff); + time += VECMag(&diff); + if (BoardVecMinDistCheck(&playerPos, &pos, 150.0f)) { break; } - sp20 = sp2C; - temp_r29->unk_64 += temp_r29->unk_68; + prevPos = pos; + modelP->unk_64 += modelP->unk_68; } - arg0->unk10 = var_f31; + work->time = time; } -static void fn_1_97F4(void) +static void CoasterEffCreate(void) { - Bss20Work *temp_r30; - Bss20Data *var_r31; + CoasterEffWork *work; + CoasterEffData *data; s32 i; - if (lbl_1_bss_20) { + if (coasterEffObj) { return; } - lbl_1_bss_20 = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_9920); - temp_r30 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work); - temp_r30->unk00_field0 = 0; - temp_r30->unk04 = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(Bss20Data), MEMORY_DEFAULT_NUM); - var_r31 = temp_r30->unk04; - for (i = 0; i < 20; var_r31++, i++) { - var_r31->unk00 = -1; - var_r31->unk02 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 7), NULL, 0); - BoardModelVisibilitySet(var_r31->unk02, 0); + coasterEffObj = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, CoasterEffUpdate); + work = OM_GET_WORK_PTR(coasterEffObj, CoasterEffWork); + work->killF = 0; + work->data = HuMemDirectMallocNum(HEAP_SYSTEM, 20 * sizeof(CoasterEffData), MEMORY_DEFAULT_NUM); + data = work->data; + for (i = 0; i < 20; data++, i++) { + data->time = -1; + data->mdlId = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 7), NULL, 0); + BoardModelVisibilitySet(data->mdlId, 0); } } -static void fn_1_98EC(void) +static void CoasterEffKill(void) { - if (lbl_1_bss_20) { - OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work)->unk00_field0 = 1; + if (coasterEffObj) { + OM_GET_WORK_PTR(coasterEffObj, CoasterEffWork)->killF = TRUE; } } -static void fn_1_9920(omObjData *arg0) +static void CoasterEffUpdate(omObjData *obj) { - Bss20Work *temp_r31; + CoasterEffWork *work; s32 i; - temp_r31 = OM_GET_WORK_PTR(lbl_1_bss_20, Bss20Work); - if (temp_r31->unk00_field0 != 0 || BoardIsKill()) { + work = OM_GET_WORK_PTR(coasterEffObj, CoasterEffWork); + if (work->killF != 0 || BoardIsKill()) { for (i = 0; i < 20; i++) { - BoardModelKill(temp_r31->unk04[i].unk02); + BoardModelKill(work->data[i].mdlId); } - HuMemDirectFree(temp_r31->unk04); - lbl_1_bss_20 = 0; - omDelObjEx(HuPrcCurrentGet(), arg0); + HuMemDirectFree(work->data); + coasterEffObj = 0; + omDelObjEx(HuPrcCurrentGet(), obj); return; } - if (lbl_1_bss_640 < 10.0f) { + if (coasterTime < 10.0f) { return; } - if (temp_r31->unk01 != 0) { - temp_r31->unk01--; + if (work->delay != 0) { + work->delay--; } else { - temp_r31->unk01 = 2; - fn_1_9A24(temp_r31); + work->delay = 2; + CoasterEffAdd(work); } - fn_1_9BBC(temp_r31); + CoasterEffModelUpdate(work); } -static void fn_1_9A24(Bss20Work *arg0) +static void CoasterEffAdd(CoasterEffWork *work) { - Bss20Data *temp_r31; - Mtx sp8; + CoasterEffData *data; + Mtx matrix; s32 i; s32 j; - if (lbl_1_bss_6B1 != 0) { - MTXTrans(sp8, 0.0f, 50.0f, -100.0f); + if (coasterLandF != 0) { + MTXTrans(matrix, 0.0f, 50.0f, -100.0f); } else { - MTXTrans(sp8, 0.0f, 70.0f, -100.0f); + MTXTrans(matrix, 0.0f, 70.0f, -100.0f); } - MTXConcat(lbl_1_bss_678, sp8, sp8); + MTXConcat(coasterMtx, matrix, matrix); for (i = 0; i < 4; i++) { for (j = 0; j < 20; j++) { - temp_r31 = &arg0->unk04[j]; - if (temp_r31->unk00 == -1) { - temp_r31->unk00 = 10; - Hu3DMtxTransGet(sp8, &temp_r31->unk08); - VECAdd(&lbl_1_bss_654, &temp_r31->unk08, &temp_r31->unk08); - temp_r31->unk14.x = 0.0f; - temp_r31->unk14.y = 0.0f; - temp_r31->unk14.z = 0.001f; - temp_r31->unk04 = 1.0f; - BoardModelVisibilitySet(temp_r31->unk02, 1); - BoardModelLayerSet(temp_r31->unk02, 2); - BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08); + data = &work->data[j]; + if (data->time == -1) { + data->time = 10; + Hu3DMtxTransGet(matrix, &data->pos); + VECAdd(&coasterPos, &data->pos, &data->pos); + data->vel.x = 0.0f; + data->vel.y = 0.0f; + data->vel.z = 0.001f; + data->scale = 1.0f; + BoardModelVisibilitySet(data->mdlId, 1); + BoardModelLayerSet(data->mdlId, 2); + BoardModelPosSetV(data->mdlId, &data->pos); break; } } } } -static void fn_1_9BBC(Bss20Work *arg0) +static void CoasterEffModelUpdate(CoasterEffWork *work) { - Bss20Data *temp_r31; + CoasterEffData *data; s32 i; for (i = 0; i < 20; i++) { - temp_r31 = &arg0->unk04[i]; - if (temp_r31->unk00 == -1) { + data = &work->data[i]; + if (data->time == -1) { continue; } - temp_r31->unk00--; - if (temp_r31->unk00 == 0) { - temp_r31->unk00 = -1; - BoardModelVisibilitySet(temp_r31->unk02, 0); + data->time--; + if (data->time == 0) { + data->time = -1; + BoardModelVisibilitySet(data->mdlId, 0); } else { - if (temp_r31->unk00 <= 3) { - temp_r31->unk04 = sind(30.0f * temp_r31->unk00); + if (data->time <= 3) { + data->scale = sind(30.0f * data->time); } - VECAdd(&temp_r31->unk08, &temp_r31->unk14, &temp_r31->unk08); - BoardModelMtxSet(temp_r31->unk02, &lbl_1_bss_678); - BoardModelPosSetV(temp_r31->unk02, &temp_r31->unk08); - BoardModelScaleSet(temp_r31->unk02, temp_r31->unk04, temp_r31->unk04, temp_r31->unk04); + VECAdd(&data->pos, &data->vel, &data->pos); + BoardModelMtxSet(data->mdlId, &coasterMtx); + BoardModelPosSetV(data->mdlId, &data->pos); + BoardModelScaleSet(data->mdlId, data->scale, data->scale, data->scale); } } } + +static void CoasterHostComKeySet(s32 playerNo) +{ + s32 starPos; + s32 yesF; + + starPos = GWSystem.star_pos; + yesF = 0; + if (boardWork->hostSide != 0) { + if (starPos == 0 || starPos == 1 || starPos == 7) { + yesF = 0; + } + else { + yesF = 1; + } + } + else if (starPos == 0 || starPos == 1 || starPos == 7) { + yesF = 1; + } + else { + yesF = 0; + } + if (BoardPlayerCoinsGet(playerNo) < 5) { + yesF = 0; + } + if (yesF != 0) { + BoardComKeySetLeft(); + } + else { + BoardComKeySetRight(); + } +} \ No newline at end of file diff --git a/src/REL/w01Dll/mg_coin.c b/src/REL/w01Dll/mg_coin.c index c24ee595..f07a4b3b 100755 --- a/src/REL/w01Dll/mg_coin.c +++ b/src/REL/w01Dll/mg_coin.c @@ -25,102 +25,98 @@ #include "ext_math.h" typedef struct { - /* 0x00 */ Vec unk00; - /* 0x0C */ float unk0C; -} Data690InnerStruct; // Size 0x10 + /* 0x00 */ Vec pos; + /* 0x0C */ float len; +} SpaceAmidaPathPoint; // Size 0x10 -typedef Data690InnerStruct Data690Block[15]; +typedef SpaceAmidaPathPoint SpaceAmidaMap[15]; typedef struct { /* 0x00 */ s16 unk00; /* 0x02 */ s16 unk02; - /* 0x04 */ Vec unk04; - /* 0x10 */ Vec unk10; - /* 0x1C */ u16 unk1C; - /* 0x1E */ char unk1E[2]; - /* 0x20 */ float unk20; - /* 0x24 */ u16 unk24; - /* 0x26 */ s16 unk26; - /* 0x28 */ s16 unk28; - /* 0x2A */ char unk2A[2]; -} Bss720Data; // Size 0x2C + /* 0x04 */ Vec rocketPos; + /* 0x10 */ Vec jumpDir; + /* 0x1C */ u16 waitTime; + /* 0x20 */ float jumpTime; + /* 0x24 */ u16 comDelay; + /* 0x26 */ s16 comChoice; + /* 0x28 */ s16 comInputTimer; +} SpaceAmidaGameWork; // Size 0x2C typedef struct { /* 0x00 */ char unk00[4]; - /* 0x04 */ Data690Block *unk04; - /* 0x08 */ u16 unk08; - /* 0x0A */ char unk0A[2]; - /* 0x0C */ float unk0C; - /* 0x10 */ float unk10; - /* 0x14 */ float unk14; - /* 0x18 */ float unk18; - /* 0x1C */ float unk1C; - /* 0x20 */ Vec unk20; - /* 0x2C */ Vec unk2C; - /* 0x38 */ float unk38; + /* 0x04 */ SpaceAmidaMap *map; + /* 0x08 */ u16 mapCursor; + /* 0x0C */ float len; + /* 0x10 */ float speed; + /* 0x14 */ float maxSpeed; + /* 0x18 */ float rocketXOfs; + /* 0x1C */ float kemuriSize; + /* 0x20 */ Vec kemuriScale; + /* 0x2C */ Vec kemuriScaleVel; + /* 0x38 */ float kemuriTPLvl; /* 0x3C */ float unk3C; - /* 0x40 */ s16 unk40; - /* 0x42 */ char unk42[2]; -} Bss714Data; // Size 0x44 + /* 0x40 */ s16 targetNo; +} RocketWork; // Size 0x44 -static void fn_1_A4B8(omObjData *arg0); -static void fn_1_A554(void); -static void fn_1_A5FC(void); -static void fn_1_A6E0(omObjData *arg0); -static float fn_1_B018(Data690Block *arg0); -static void fn_1_B088(omObjData *arg0); -static void fn_1_B1CC(omObjData *arg0, u16 *arg1, u16 *arg2); -static void fn_1_B3B8(omObjData *arg0); -static void fn_1_B478(omObjData *arg0); -static void fn_1_BAF8(omObjData *arg0); -static void fn_1_BCDC(omObjData *arg0); -static void fn_1_BF00(omObjData *arg0); -static void fn_1_BF68(omObjData *arg0); -static void fn_1_C000(void); -static void fn_1_C0FC(omObjData *arg0); -static void fn_1_C25C(void); -static void fn_1_C844(void); -static void fn_1_C894(omObjData *arg0); -static void fn_1_C94C(Vec *arg0, Vec *arg1, Vec *arg2); -static float fn_1_C998(Vec *arg0); -static u32 fn_1_CB44(Vec *arg0, float arg1); -static void fn_1_CEC4(void); -static void fn_1_D034(void); -static void fn_1_D07C(omObjData *arg0); -static void fn_1_D114(ModelData *model, ParticleData *particle, Mtx matrix); +static void SpaceAmidaMainUpdate(omObjData *obj); +static void SpaceAmidaStop(void); +static void SpaceAmidaKill(void); +static void SpaceAmidaRocketObjUpdate(omObjData *obj); +static float SpaceAmidaMapLenGet(SpaceAmidaMap *obj); +static void SpaceAmidaComChoiceSet(omObjData *obj); +static void SpaceAmidaComInputGet(omObjData *obj, u16 *stkBtn, u16 *btn); +static void SpaceAmidaGameOpen(omObjData *obj); +static void SpaceAmidaGameUpdate(omObjData *obj); +static void SpaceAmidaRocketJump(omObjData *obj); +static void SpaceAmidaRocketKemuriExec(omObjData *obj); +static void SpaceAmidaRocketWait(omObjData *obj); +static void SpaceAmidaRocketUp(omObjData *obj); +static void SpaceAmidaCoinWin(void); +static void SpaceAmidaJumpDown(omObjData *obj); +static void SpaceAmidaCoinRainMain(void); +static void SpaceAmidaReturnWinMain(void); +static void SpaceAmidaGameStop(omObjData *obj); +static void SpaceAmidaDirGet(Vec *a, Vec *b, Vec *result); +static float SpaceAmidaAngleGet(Vec *dir); +static u32 SpaceAmidaPlayerRotAdd(Vec *rocketPos, float delta); +static void SpaceAmidaEffCreate(void); +static void SpaceAmidaEffKill(void); +static void SpaceAmidaEffUpdate(omObjData *arg0); +static void SpaceAmidaEffParticleHook(ModelData *model, ParticleData *particle, Mtx matrix); -static s32 lbl_1_bss_79C; -static s32 lbl_1_bss_798; -static s16 lbl_1_bss_796; -static s16 lbl_1_bss_790[3]; -static s16 lbl_1_bss_78A[3]; -static s16 lbl_1_bss_788; -static s16 lbl_1_bss_760[20]; -static Process *lbl_1_bss_75C; -static omObjData *lbl_1_bss_758; -static float lbl_1_bss_754; -static s16 lbl_1_bss_750; -static s32 lbl_1_bss_74C; -static s32 lbl_1_bss_748; -static s16 lbl_1_bss_744; -static Vec lbl_1_bss_738; -static s32 lbl_1_bss_734; -static s32 lbl_1_bss_730; -static s32 lbl_1_bss_72C; -static u16 lbl_1_bss_72A; -static u16 lbl_1_bss_728; -static s32 lbl_1_bss_724; -static omObjData *lbl_1_bss_720; -static omObjData *lbl_1_bss_714[3]; -static omObjData *lbl_1_bss_710; -static AnimData *lbl_1_bss_70C; -static s16 lbl_1_bss_708; +static s32 spaceAmidaPadNo; +static s32 spaceAmidaPlayerNo; +static s16 spaceAmidaMdlId; +static s16 mapMdlId[3]; +static s16 rocketMdlId[3]; +static s16 spaceAmidaEffMdlId; +static s16 coinMdlId[20]; +static Process *coinWinProc; +static omObjData *spaceAmidaMainObj; +static float spaceAmidaTime; +static s16 kemuriMdlId; +static s32 timerSec; +static s32 timerFrame; +static s16 timerSeqId; +static Vec spaceAmidaPos; +static s32 spaceAmidaMapNo; +static s32 spaceAmidaPath; +static s32 rocketWarpF; +static u16 spaceAmidaStopF; +static u16 spaceAmidaCoinNum; +static s32 spaceAmidaSeNo; +static omObjData *spaceAmidaGameObj; +static omObjData *rocketObj[3]; +static omObjData *spaceAmidaEffObj; +static AnimData *spaceAmidaEffAnim; +static s16 spaceAmidaSeqStopF; -static Vec lbl_1_data_658[3] = { { -50.0f, 238.0f, 0.0f }, { 0.0f, 275.5f, 0.0f }, { 50.0f, 238.0f, 0.0f } }; +static Vec effPosTbl[3] = { { -50.0f, 238.0f, 0.0f }, { 0.0f, 275.5f, 0.0f }, { 50.0f, 238.0f, 0.0f } }; -static u16 lbl_1_data_67C[3][3] = { { 10, 5, 20 }, { 10, 5, 20 }, { 5, 20, 10 } }; +static u16 spaceAmidaCoinNumTbl[3][3] = { { 10, 5, 20 }, { 10, 5, 20 }, { 5, 20, 10 } }; -static Data690Block lbl_1_data_690[3] +static SpaceAmidaMap spaceAmidaMap1[3] = { { { { -50.0f, -12.0f, 0.0f }, 75.0f }, { { -50.0f, 63.0f, 0.0f }, 50.0f }, { { 0.0f, 63.0f, 0.0f }, 25.0f }, { { 0.0f, 88.0f, 0.0f }, 50.0f }, { { 50.0f, 88.0f, 0.0f }, 87.5f }, { { 50.0f, 175.5f, 0.0f }, 0.0f } }, { { { 0.0f, -12.0f, 0.0f }, 75.0f }, { { 0.0f, 63.0f, 0.0f }, 50.0f }, { { -50.0f, 63.0f, 0.0f }, 50.0f }, @@ -130,7 +126,7 @@ static Data690Block lbl_1_data_690[3] { { 0.0f, 113.0f, 0.0f }, 50.0f }, { { -50.0f, 113.0f, 0.0f }, 50.0f }, { { -50.0f, 163.0f, 0.0f }, 50.0f }, { { 0.0f, 163.0f, 0.0f }, 50.0f }, { { 0.0f, 213.0f, 0.0f }, 0.0f } } }; -static Data690Block lbl_1_data_960[3] +static SpaceAmidaMap spaceAmidaMap2[3] = { { { { -50.0f, -12.0f, 0.0f }, 125.0f }, { { -50.0f, 113.0f, 0.0f }, 50.0f }, { { 0.0f, 113.0f, 0.0f }, 25.0f }, { { 0.0f, 138.0f, 0.0f }, 50.0f }, { { 50.0f, 138.0f, 0.0f }, 37.5f }, { { 50.0f, 175.5f, 0.0f }, 0.0f } }, { { { 0.0f, -12.0f, 0.0f }, 75.0f }, { { 0.0f, 63.0f, 0.0f }, 50.0f }, { { 50.0f, 63.0f, 0.0f }, 75.0f }, @@ -140,7 +136,7 @@ static Data690Block lbl_1_data_960[3] { { 0.0f, 113.0f, 0.0f }, 50.0f }, { { -50.0f, 113.0f, 0.0f }, 50.0f }, { { -50.0f, 163.0f, 0.0f }, 50.0f }, { { 0.0f, 163.0f, 0.0f }, 50.0f }, { { 0.0f, 213.0f, 0.0f }, 0.0f } } }; -static Data690Block lbl_1_data_C30[3] +static SpaceAmidaMap spaceAmidaMap3[3] = { { { { -50.0f, -12.0f, 0.0f }, 100.0f }, { { -50.0f, 88.0f, 0.0f }, 50.0f }, { { 0.0f, 88.0f, 0.0f }, 50.0f }, { { 0.0f, 138.0f, 0.0f }, 50.0f }, { { -50.0f, 138.0f, 0.0f }, 37.5f }, { { -50.0f, 175.5f, 0.0f }, 0.0f } }, { { { 0.0f, -12.0f, 0.0f }, 75.0f }, { { 0.0f, 63.0f, 0.0f }, 50.0f }, { { 50.0f, 63.0f, 0.0f }, 100.0f }, @@ -149,911 +145,867 @@ static Data690Block lbl_1_data_C30[3] { { -50.0f, 88.0f, 0.0f }, 50.0f }, { { -50.0f, 138.0f, 0.0f }, 50.0f }, { { 0.0f, 138.0f, 0.0f }, 25.0f }, { { 0.0f, 163.0f, 0.0f }, 50.0f }, { { 50.0f, 163.0f, 0.0f }, 12.5f }, { { 50.0f, 175.5f, 0.0f }, 0.0f } } }; -void fn_1_9D00(s32 arg0) +void SpaceAmidaExec(void) { - s32 temp_r31; - s32 var_r30; - - temp_r31 = GWSystem.star_pos; - var_r30 = 0; - if (lbl_1_bss_0->unk00_field0 != 0) { - if (temp_r31 == 0 || temp_r31 == 1 || temp_r31 == 7) { - var_r30 = 0; - } - else { - var_r30 = 1; - } - } - else if (temp_r31 == 0 || temp_r31 == 1 || temp_r31 == 7) { - var_r30 = 1; - } - else { - var_r30 = 0; - } - if (BoardPlayerCoinsGet(arg0) < 5) { - var_r30 = 0; - } - if (var_r30 != 0) { - BoardComKeySetLeft(); - } - else { - BoardComKeySetRight(); - } -} - -void fn_1_9DD8(void) -{ - Vec sp2C[3]; - Vec sp20; - Vec sp14; - Vec sp8; - Bss720Data *temp_r30; - Bss714Data *temp_r29; + Vec rocketMdlOfs[3]; + Vec pos; + Vec rocketPos; + Vec scale; + SpaceAmidaGameWork *gameObjWork; + RocketWork *rocketWork; s32 i; - lbl_1_bss_79C = GWPlayer[GWSystem.player_curr].port; - lbl_1_bss_796 = lbl_1_bss_6C4[6]; - lbl_1_bss_790[0] = lbl_1_bss_6C4[7]; - lbl_1_bss_790[1] = lbl_1_bss_6C4[8]; - lbl_1_bss_790[2] = lbl_1_bss_6C4[9]; - lbl_1_bss_78A[0] = lbl_1_bss_6C4[10]; - lbl_1_bss_78A[1] = lbl_1_bss_6C4[11]; - lbl_1_bss_78A[2] = lbl_1_bss_6C4[12]; - BoardModelVisibilitySet(lbl_1_bss_790[0], 0); - BoardModelVisibilitySet(lbl_1_bss_790[1], 0); - BoardModelVisibilitySet(lbl_1_bss_790[2], 0); - lbl_1_bss_734 = rand8() % 3; - BoardModelVisibilitySet(lbl_1_bss_790[lbl_1_bss_734], 1); - BoardModelMotionStart(lbl_1_bss_790[lbl_1_bss_734], 0, 0x40000001); - BoardModelPosGet(lbl_1_bss_796, &sp20); - sp8.x = sp8.y = sp8.z = 1.0f; + spaceAmidaPadNo = GWPlayer[GWSystem.player_curr].port; + spaceAmidaMdlId = mapObjMdlId[MAPOBJ_SPACEAMIDA]; + mapMdlId[0] = mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP1]; + mapMdlId[1] = mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP2]; + mapMdlId[2] = mapObjMdlId[MAPOBJ_SPACEAMIDA_MAP3]; + rocketMdlId[0] = mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET1]; + rocketMdlId[1] = mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET2]; + rocketMdlId[2] = mapObjMdlId[MAPOBJ_SPACEAMIDA_ROCKET3]; + BoardModelVisibilitySet(mapMdlId[0], 0); + BoardModelVisibilitySet(mapMdlId[1], 0); + BoardModelVisibilitySet(mapMdlId[2], 0); + spaceAmidaMapNo = rand8() % 3; + BoardModelVisibilitySet(mapMdlId[spaceAmidaMapNo], 1); + BoardModelMotionStart(mapMdlId[spaceAmidaMapNo], 0, HU3D_MOTATTR_LOOP); + BoardModelPosGet(spaceAmidaMdlId, &pos); + scale.x = scale.y = scale.z = 1.0f; for (i = 0; i < 3; i++) { - sp2C[i] = lbl_1_data_690[i][0].unk00; - sp2C[i].y -= -12.0f; - BoardModelPosSet(lbl_1_bss_78A[i], sp20.x + sp2C[i].x, sp20.y + sp2C[i].y, sp20.z + 30.0f); - BoardModelVisibilitySet(lbl_1_bss_78A[i], 1); - BoardModelScaleSetV(lbl_1_bss_78A[i], &sp8); + rocketMdlOfs[i] = spaceAmidaMap1[i][0].pos; + rocketMdlOfs[i].y -= -12.0f; + BoardModelPosSet(rocketMdlId[i], pos.x + rocketMdlOfs[i].x, pos.y + rocketMdlOfs[i].y, pos.z + 30.0f); + BoardModelVisibilitySet(rocketMdlId[i], 1); + BoardModelScaleSetV(rocketMdlId[i], &scale); } - lbl_1_bss_798 = GWSystem.player_curr; - BoardModelPosGet(lbl_1_bss_796, &lbl_1_bss_738); - lbl_1_bss_730 = 1; - BoardModelPosGet(lbl_1_bss_78A[lbl_1_bss_730], &sp14); - BoardPlayerPosGet(lbl_1_bss_798, &sp20); - lbl_1_bss_758 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_A4B8); - lbl_1_bss_720 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_B3B8); - lbl_1_bss_720->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss720Data), MEMORY_DEFAULT_NUM); - temp_r30 = lbl_1_bss_720->data; - temp_r30->unk02 = 0; - temp_r30->unk04 = sp14; - temp_r30->unk28 = 0; - fn_1_CB44(&sp14, 0.0f); - fn_1_B088(lbl_1_bss_720); - lbl_1_bss_750 = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 19)); - Hu3DModelAttrSet(lbl_1_bss_750, HU3D_ATTR_DISPOFF); + spaceAmidaPlayerNo = GWSystem.player_curr; + BoardModelPosGet(spaceAmidaMdlId, &spaceAmidaPos); + spaceAmidaPath = 1; + BoardModelPosGet(rocketMdlId[spaceAmidaPath], &rocketPos); + BoardPlayerPosGet(spaceAmidaPlayerNo, &pos); + spaceAmidaMainObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, SpaceAmidaMainUpdate); + spaceAmidaGameObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, SpaceAmidaGameOpen); + spaceAmidaGameObj->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(SpaceAmidaGameWork), MEMORY_DEFAULT_NUM); + gameObjWork = spaceAmidaGameObj->data; + gameObjWork->unk02 = 0; + gameObjWork->rocketPos = rocketPos; + gameObjWork->comInputTimer = 0; + SpaceAmidaPlayerRotAdd(&rocketPos, 0.0f); + SpaceAmidaComChoiceSet(spaceAmidaGameObj); + kemuriMdlId = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 19)); + Hu3DModelAttrSet(kemuriMdlId, HU3D_ATTR_DISPOFF); for (i = 0; i < 3; i++) { - lbl_1_bss_714[i] = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_A6E0); - lbl_1_bss_714[i]->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss714Data), MEMORY_DEFAULT_NUM); - lbl_1_bss_714[i]->work[0] = lbl_1_bss_78A[i]; - lbl_1_bss_714[i]->work[1] = 0; - lbl_1_bss_714[i]->work[3] = 0; - temp_r29 = lbl_1_bss_714[i]->data; - if (i == lbl_1_bss_730) { - lbl_1_bss_714[i]->work[2] = 1; + rocketObj[i] = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, SpaceAmidaRocketObjUpdate); + rocketObj[i]->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(RocketWork), MEMORY_DEFAULT_NUM); + rocketObj[i]->work[0] = rocketMdlId[i]; + rocketObj[i]->work[1] = 0; + rocketObj[i]->work[3] = 0; + rocketWork = rocketObj[i]->data; + if (i == spaceAmidaPath) { + rocketObj[i]->work[2] = 1; } else { - lbl_1_bss_714[i]->work[2] = 0; + rocketObj[i]->work[2] = 0; } - temp_r29->unk18 = 1.0f; - temp_r29->unk1C = 0.0f; + rocketWork->rocketXOfs = 1.0f; + rocketWork->kemuriSize = 0.0f; } - lbl_1_bss_72C = 0; - lbl_1_bss_74C = 5; - lbl_1_bss_748 = REFRESH_RATE; - lbl_1_bss_72A = 0; - fn_1_CEC4(); - lbl_1_bss_788 = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 17), NULL, 0); - BoardModelMotionUpdateSet(lbl_1_bss_788, 1); - BoardModelVisibilitySet(lbl_1_bss_788, 0); + rocketWarpF = 0; + timerSec = 5; + timerFrame = REFRESH_RATE; + spaceAmidaStopF = 0; + SpaceAmidaEffCreate(); + spaceAmidaEffMdlId = BoardModelCreate(DATA_MAKE_NUM(DATADIR_W01, 17), NULL, 0); + BoardModelMotionUpdateSet(spaceAmidaEffMdlId, 1); + BoardModelVisibilitySet(spaceAmidaEffMdlId, 0); for (i = 0; i < 20; i++) { - lbl_1_bss_760[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1); - BoardModelVisibilitySet(lbl_1_bss_760[i], 0); + coinMdlId[i] = BoardModelCreate(DATA_MAKE_NUM(DATADIR_BOARD, 10), NULL, 1); + BoardModelVisibilitySet(coinMdlId[i], 0); } } -static void fn_1_A4B8(omObjData *arg0) +static void SpaceAmidaMainUpdate(omObjData *obj) { - if (lbl_1_bss_72A == 0) { + if (spaceAmidaStopF == 0) { return; } if (BoardMGDoneFlagGet() == 1) { - if (lbl_1_bss_754 <= 0.0f) { - fn_1_A5FC(); - omDelObjEx(HuPrcCurrentGet(), arg0); + if (spaceAmidaTime <= 0.0f) { + SpaceAmidaKill(); + omDelObjEx(HuPrcCurrentGet(), obj); } } - lbl_1_bss_754 -= 1.0f; + spaceAmidaTime -= 1.0f; } -static void fn_1_A554(void) +static void SpaceAmidaStop(void) { - float temp_f1; + float time; - lbl_1_bss_72A = 1; + spaceAmidaStopF = 1; BoardMGExit(); - temp_f1 = BoardModelMotionTimeGet(lbl_1_bss_796); - lbl_1_bss_754 = temp_f1; - BoardModelMotionStart(lbl_1_bss_796, 0, 0); - BoardModelMotionTimeSet(lbl_1_bss_796, temp_f1); - BoardModelMotionSpeedSet(lbl_1_bss_796, -1.0f); + time = BoardModelMotionTimeGet(spaceAmidaMdlId); + spaceAmidaTime = time; + BoardModelMotionStart(spaceAmidaMdlId, 0, 0); + BoardModelMotionTimeSet(spaceAmidaMdlId, time); + BoardModelMotionSpeedSet(spaceAmidaMdlId, -1.0f); } -static void fn_1_A5FC(void) +static void SpaceAmidaKill(void) { s32 i; for (i = 0; i < 3; i++) { - BoardModelVisibilitySet(lbl_1_bss_790[i], 0); - BoardModelVisibilitySet(lbl_1_bss_78A[i], 0); - omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_714[i]); + BoardModelVisibilitySet(mapMdlId[i], 0); + BoardModelVisibilitySet(rocketMdlId[i], 0); + omDelObjEx(HuPrcCurrentGet(), rocketObj[i]); } for (i = 0; i < 20; i++) { - BoardModelKill(lbl_1_bss_760[i]); + BoardModelKill(coinMdlId[i]); } - fn_1_D034(); - BoardModelKill(lbl_1_bss_788); + SpaceAmidaEffKill(); + BoardModelKill(spaceAmidaEffMdlId); BoardMGDoneFlagSet(0); - Hu3DModelKill(lbl_1_bss_750); + Hu3DModelKill(kemuriMdlId); } -static void fn_1_A6E0(omObjData *arg0) +static void SpaceAmidaRocketObjUpdate(omObjData *obj) { - Bss714Data *temp_r31; - Vec sp2C; - Vec sp20; - Vec sp14; - Vec sp8; - float var_f31; + RocketWork *work; + Vec scale; + Vec pos; + Vec rocketPos; + Vec dir; + float len; - temp_r31 = arg0->data; - BoardModelScaleGet(arg0->work[0], &sp2C); - switch (arg0->work[2]) { + work = obj->data; + BoardModelScaleGet(obj->work[0], &scale); + switch (obj->work[2]) { case 1: - if ((sp2C.x += 0.08f) >= 1.5f) { - sp2C.x = 1.5f; - sp2C.y = 1.5f; - if (arg0->work[3] == 1) { - arg0->work[2] = 0; + if ((scale.x += 0.08f) >= 1.5f) { + scale.x = 1.5f; + scale.y = 1.5f; + if (obj->work[3] == 1) { + obj->work[2] = 0; } else { - arg0->work[2] = 2; + obj->work[2] = 2; } } else { - sp2C.y += 0.08f; + scale.y += 0.08f; } - BoardModelScaleSetV(arg0->work[0], &sp2C); + BoardModelScaleSetV(obj->work[0], &scale); break; case 2: - if ((sp2C.x -= 0.08f) <= 1.0f) { - sp2C.x = 1.0f; - sp2C.y = 1.0f; - if (arg0->work[1] == 1) { - arg0->work[2] = 0; - arg0->work[1] = 0; + if ((scale.x -= 0.08f) <= 1.0f) { + scale.x = 1.0f; + scale.y = 1.0f; + if (obj->work[1] == 1) { + obj->work[2] = 0; + obj->work[1] = 0; } else { - arg0->work[2] = 1; + obj->work[2] = 1; } } else { - sp2C.y -= 0.08f; + scale.y -= 0.08f; } - BoardModelScaleSetV(arg0->work[0], &sp2C); + BoardModelScaleSetV(obj->work[0], &scale); break; case 3: - switch (lbl_1_bss_734) { + switch (spaceAmidaMapNo) { case 0: - temp_r31->unk04 = &lbl_1_data_690[lbl_1_bss_730]; + work->map = &spaceAmidaMap1[spaceAmidaPath]; break; case 1: - temp_r31->unk04 = &lbl_1_data_960[lbl_1_bss_730]; + work->map = &spaceAmidaMap2[spaceAmidaPath]; break; case 2: - temp_r31->unk04 = &lbl_1_data_C30[lbl_1_bss_730]; + work->map = &spaceAmidaMap3[spaceAmidaPath]; break; } - BoardModelPosGet(arg0->work[0], &sp14); - sp14.x = lbl_1_bss_738.x + ((*temp_r31->unk04)[0].unk00.x + temp_r31->unk18); - temp_r31->unk18 = -temp_r31->unk18; - BoardModelPosSetV(arg0->work[0], &sp14); - sp14.y += 5.0f; - BoardPlayerPosSetV(lbl_1_bss_798, &sp14); - temp_r31->unk1C += 0.022222223f; - temp_r31->unk38 -= 0.011111111f; - if (temp_r31->unk38 < 0.0f) { - temp_r31->unk38 = 0.0f; + BoardModelPosGet(obj->work[0], &rocketPos); + rocketPos.x = spaceAmidaPos.x + ((*work->map)[0].pos.x + work->rocketXOfs); + work->rocketXOfs = -work->rocketXOfs; + BoardModelPosSetV(obj->work[0], &rocketPos); + rocketPos.y += 5.0f; + BoardPlayerPosSetV(spaceAmidaPlayerNo, &rocketPos); + work->kemuriSize += 0.022222223f; + work->kemuriTPLvl -= 0.011111111f; + if (work->kemuriTPLvl < 0.0f) { + work->kemuriTPLvl = 0.0f; } - Hu3DModelTPLvlSet(lbl_1_bss_750, temp_r31->unk38); - if (temp_r31->unk1C > 1.0f) { - temp_r31->unk1C = 1.0f; + Hu3DModelTPLvlSet(kemuriMdlId, work->kemuriTPLvl); + if (work->kemuriSize > 1.0f) { + work->kemuriSize = 1.0f; } - VECAdd(&temp_r31->unk20, &temp_r31->unk2C, &temp_r31->unk20); - if (temp_r31->unk20.y >= 4.0f) { - temp_r31->unk20.y = 4.0f; - temp_r31->unk2C.y = -0.1f; + VECAdd(&work->kemuriScale, &work->kemuriScaleVel, &work->kemuriScale); + if (work->kemuriScale.y >= 4.0f) { + work->kemuriScale.y = 4.0f; + work->kemuriScaleVel.y = -0.1f; } - if (temp_r31->unk20.y < 1.0f) { - temp_r31->unk20.y = 1.0f; + if (work->kemuriScale.y < 1.0f) { + work->kemuriScale.y = 1.0f; } - Hu3DModelScaleSet(lbl_1_bss_750, temp_r31->unk20.x, temp_r31->unk20.y, temp_r31->unk20.z); + Hu3DModelScaleSet(kemuriMdlId, work->kemuriScale.x, work->kemuriScale.y, work->kemuriScale.z); break; case 4: - Hu3DModelAttrSet(lbl_1_bss_750, HU3D_ATTR_DISPOFF); - arg0->work[2] = 5; - temp_r31->unk08 = 0; - temp_r31->unk0C = 12.0f; - temp_r31->unk14 = (fn_1_B018(temp_r31->unk04) - temp_r31->unk0C) / 90.0f; - temp_r31->unk10 = temp_r31->unk14 / 20.0f; + Hu3DModelAttrSet(kemuriMdlId, HU3D_ATTR_DISPOFF); + obj->work[2] = 5; + work->mapCursor = 0; + work->len = 12.0f; + work->maxSpeed = (SpaceAmidaMapLenGet(work->map) - work->len) / 90.0f; + work->speed = work->maxSpeed / 20.0f; HuAudFXPlay(0x406); HuAudFXPlay(0x407); - HuAudFXStop(lbl_1_bss_724); + HuAudFXStop(spaceAmidaSeNo); break; case 5: - var_f31 = temp_r31->unk0C + temp_r31->unk10; - temp_r31->unk0C = var_f31; - temp_r31->unk10 *= 1.04f; - if (temp_r31->unk10 > temp_r31->unk14) { - temp_r31->unk10 = temp_r31->unk14; + len = work->len + work->speed; + work->len = len; + work->speed *= 1.04f; + if (work->speed > work->maxSpeed) { + work->speed = work->maxSpeed; } - BoardModelPosGet(arg0->work[0], &sp20); - while (var_f31 >= (*temp_r31->unk04)[temp_r31->unk08].unk0C) { - var_f31 -= (*temp_r31->unk04)[temp_r31->unk08].unk0C; - temp_r31->unk08++; - if ((*temp_r31->unk04)[temp_r31->unk08].unk0C == 0.0f) { - omVibrate(lbl_1_bss_798, 12, 6, 6); - var_f31 = 0.0f; - lbl_1_bss_72C = 1; - lbl_1_bss_724 = HuAudFXPlay(0x332); - lbl_1_bss_708 = 0; - arg0->work[2] = 6; - if (sp20.x - lbl_1_bss_738.x < -25.0f) { - temp_r31->unk40 = 0; - lbl_1_bss_728 = 5; + BoardModelPosGet(obj->work[0], &pos); + while (len >= (*work->map)[work->mapCursor].len) { + len -= (*work->map)[work->mapCursor].len; + work->mapCursor++; + if ((*work->map)[work->mapCursor].len == 0.0f) { + omVibrate(spaceAmidaPlayerNo, 12, 6, 6); + len = 0.0f; + rocketWarpF = 1; + spaceAmidaSeNo = HuAudFXPlay(0x332); + spaceAmidaSeqStopF = 0; + obj->work[2] = 6; + if (pos.x - spaceAmidaPos.x < -25.0f) { + work->targetNo = 0; + spaceAmidaCoinNum = 5; } - else if (sp20.x - lbl_1_bss_738.x > 25.0f) { - temp_r31->unk40 = 2; - lbl_1_bss_728 = 10; + else if (pos.x - spaceAmidaPos.x > 25.0f) { + work->targetNo = 2; + spaceAmidaCoinNum = 10; } else { - temp_r31->unk40 = 1; - lbl_1_bss_728 = 20; + work->targetNo = 1; + spaceAmidaCoinNum = 20; } break; } } - temp_r31->unk0C = var_f31; - sp14.x = sp14.y = sp14.z = 0.0f; - if (lbl_1_bss_72C == 0) { - fn_1_C94C(&(*temp_r31->unk04)[temp_r31->unk08].unk00, &(*temp_r31->unk04)[temp_r31->unk08 + 1].unk00, &sp8); - sp20.x = lbl_1_bss_738.x + (sp8.x * var_f31 + (*temp_r31->unk04)[temp_r31->unk08].unk00.x); - sp20.y = lbl_1_bss_738.y + (sp8.y * var_f31 + (*temp_r31->unk04)[temp_r31->unk08].unk00.y); + work->len = len; + rocketPos.x = rocketPos.y = rocketPos.z = 0.0f; + if (rocketWarpF == 0) { + SpaceAmidaDirGet(&(*work->map)[work->mapCursor].pos, &(*work->map)[work->mapCursor + 1].pos, &dir); + pos.x = spaceAmidaPos.x + (dir.x * len + (*work->map)[work->mapCursor].pos.x); + pos.y = spaceAmidaPos.y + (dir.y * len + (*work->map)[work->mapCursor].pos.y); } else { - sp20.x = lbl_1_bss_738.x + (*temp_r31->unk04)[temp_r31->unk08].unk00.x; - sp20.y = lbl_1_bss_738.y + (*temp_r31->unk04)[temp_r31->unk08].unk00.y; + pos.x = spaceAmidaPos.x + (*work->map)[work->mapCursor].pos.x; + pos.y = spaceAmidaPos.y + (*work->map)[work->mapCursor].pos.y; } - BoardModelPosSetV(arg0->work[0], &sp20); - sp20.y += 5.0f; - BoardPlayerPosSetV(lbl_1_bss_798, &sp20); - BoardModelRotSetV(arg0->work[0], &sp14); - BoardPlayerRotSetV(lbl_1_bss_798, &sp14); + BoardModelPosSetV(obj->work[0], &pos); + pos.y += 5.0f; + BoardPlayerPosSetV(spaceAmidaPlayerNo, &pos); + BoardModelRotSetV(obj->work[0], &rocketPos); + BoardPlayerRotSetV(spaceAmidaPlayerNo, &rocketPos); break; case 6: - if (lbl_1_bss_708 == 0 && (HuAudFXStatusGet(lbl_1_bss_724) == 1 || HuAudFXStatusGet(lbl_1_bss_724) == 0)) { + if (spaceAmidaSeqStopF == 0 && (HuAudFXStatusGet(spaceAmidaSeNo) == 1 || HuAudFXStatusGet(spaceAmidaSeNo) == 0)) { BoardAudSeqPause(0, 0, 1000); - lbl_1_bss_708 = 1; + spaceAmidaSeqStopF = 1; } - BoardModelVisibilitySet(lbl_1_bss_788, 1); - sp20.x = lbl_1_bss_738.x + lbl_1_data_658[temp_r31->unk40].x; - sp20.y = lbl_1_bss_738.y + lbl_1_data_658[temp_r31->unk40].y; - sp20.z = lbl_1_bss_738.z + lbl_1_data_658[temp_r31->unk40].z; - BoardModelPosSetV(lbl_1_bss_788, &sp20); - temp_r31->unk1C -= 0.05f; - if (temp_r31->unk1C <= 0.0f) { - temp_r31->unk1C = 0.0f; + BoardModelVisibilitySet(spaceAmidaEffMdlId, 1); + pos.x = spaceAmidaPos.x + effPosTbl[work->targetNo].x; + pos.y = spaceAmidaPos.y + effPosTbl[work->targetNo].y; + pos.z = spaceAmidaPos.z + effPosTbl[work->targetNo].z; + BoardModelPosSetV(spaceAmidaEffMdlId, &pos); + work->kemuriSize -= 0.05f; + if (work->kemuriSize <= 0.0f) { + work->kemuriSize = 0.0f; } break; } } -static float fn_1_B018(Data690Block *arg0) +static float SpaceAmidaMapLenGet(SpaceAmidaMap *arg0) { - float var_f31; + float len; s32 i; - var_f31 = 0.0f; + len = 0.0f; i = 0; while (TRUE) { - if ((*arg0)[i].unk0C == 0.0f) { + if ((*arg0)[i].len == 0.0f) { break; } - var_f31 += (*arg0)[i].unk0C; + len += (*arg0)[i].len; i++; } - return var_f31; + return len; } -static void fn_1_B088(omObjData *arg0) +static void SpaceAmidaComChoiceSet(omObjData *obj) { - Bss720Data *temp_r31; - u16 sp8[] = { 20, 60, 120, 190 }; + SpaceAmidaGameWork *work; + u16 chance[] = { 20, 60, 120, 190 }; s32 i; - temp_r31 = arg0->data; - if (rand8() < sp8[GWPlayerCfg[lbl_1_bss_798].diff]) { + work = obj->data; + if (rand8() < chance[GWPlayerCfg[spaceAmidaPlayerNo].diff]) { for (i = 0; i < 3; i++) { - if (lbl_1_data_67C[lbl_1_bss_734][i] == 20) { - temp_r31->unk26 = i; + if (spaceAmidaCoinNumTbl[spaceAmidaMapNo][i] == 20) { + work->comChoice = i; } } } else { - temp_r31->unk26 = rand8() % 3; + work->comChoice = rand8() % 3; } - temp_r31->unk24 = rand8() % 20 + 20; + work->comDelay = rand8() % 20 + 20; } -static void fn_1_B1CC(omObjData *arg0, u16 *arg1, u16 *arg2) +static void SpaceAmidaComInputGet(omObjData *obj, u16 *stkBtn, u16 *btn) { - Bss720Data *temp_r31; + SpaceAmidaGameWork *work; - temp_r31 = arg0->data; - *arg1 = *arg2 = 0; - if (temp_r31->unk24 != 0) { - temp_r31->unk24--; + work = obj->data; + *stkBtn = *btn = 0; + if (work->comDelay != 0) { + work->comDelay--; return; } - if (temp_r31->unk28 >= 4 || (rand8() & 1)) { - if (temp_r31->unk26 == lbl_1_bss_730) { - *arg2 |= 0x100; + if (work->comInputTimer >= 4 || (rand8() & 1)) { + if (work->comChoice == spaceAmidaPath) { + *btn |= PAD_BUTTON_A; } - else if (temp_r31->unk26 < lbl_1_bss_730) { - *arg1 |= 1; + else if (work->comChoice < spaceAmidaPath) { + *stkBtn |= PAD_BUTTON_LEFT; } else { - *arg1 |= 2; + *stkBtn |= PAD_BUTTON_RIGHT; } - temp_r31->unk24 = rand8() % 10 + 10; + work->comDelay = rand8() % 10 + 10; } else { - temp_r31->unk28++; - temp_r31->unk24 = rand8() % 10 + 20; - if (lbl_1_bss_730 == 0) { - *arg1 |= 2; + work->comInputTimer++; + work->comDelay = rand8() % 10 + 20; + if (spaceAmidaPath == 0) { + *stkBtn |= PAD_BUTTON_RIGHT; } - else if (lbl_1_bss_730 == 2) { - *arg1 |= 1; + else if (spaceAmidaPath == 2) { + *stkBtn |= PAD_BUTTON_LEFT; } else if (rand8() & 1) { - *arg1 |= 1; + *stkBtn |= PAD_BUTTON_LEFT; } else { - *arg1 |= 2; + *stkBtn |= PAD_BUTTON_RIGHT; } } } -static void fn_1_B3B8(omObjData *arg0) +static void SpaceAmidaGameOpen(omObjData *obj) { - float temp_f31; - - temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_796); - if (BoardModelMotionTimeGet(lbl_1_bss_796) >= temp_f31) { - lbl_1_bss_744 = MGSeqCreate(1, lbl_1_bss_74C, 0x120, 0x40); - lbl_1_bss_720->func = fn_1_B478; + if (BoardModelMotionTimeGet(spaceAmidaMdlId) >= BoardModelMotionMaxTimeGet(spaceAmidaMdlId)) { + timerSeqId = MGSeqCreate(1, timerSec, 0x120, 0x40); + spaceAmidaGameObj->func = SpaceAmidaGameUpdate; BoardMusStart(1, 0xF, 0x7F, 0); - lbl_1_bss_724 = HuAudFXPlay(0x408); + spaceAmidaSeNo = HuAudFXPlay(0x408); } } -static void fn_1_B478(omObjData *arg0) +static void SpaceAmidaGameUpdate(omObjData *obj) { - Bss720Data *temp_r31; - Vec sp18; - Vec spC; - float var_f28; - u16 var_r27; - u16 var_r29; + SpaceAmidaGameWork *work; + Vec rocketPos; + Vec playerPos; + float jumpDist; + u16 btn; + u16 stkBtn; - temp_r31 = arg0->data; - if ((--lbl_1_bss_748) == 0) { - if ((--lbl_1_bss_74C) >= 0) { - MGSeqParamSet(lbl_1_bss_744, 1, lbl_1_bss_74C); + work = obj->data; + if ((--timerFrame) == 0) { + if ((--timerSec) >= 0) { + MGSeqParamSet(timerSeqId, 1, timerSec); } - lbl_1_bss_748 = REFRESH_RATE; + timerFrame = REFRESH_RATE; } - if (GWPlayerCfg[lbl_1_bss_798].iscom == 1) { - fn_1_B1CC(arg0, &var_r29, &var_r27); + if (GWPlayerCfg[spaceAmidaPlayerNo].iscom == 1) { + SpaceAmidaComInputGet(obj, &stkBtn, &btn); } else { - var_r29 = HuPadDStkRep[lbl_1_bss_79C]; - var_r27 = HuPadBtnDown[lbl_1_bss_79C]; + stkBtn = HuPadDStkRep[spaceAmidaPadNo]; + btn = HuPadBtnDown[spaceAmidaPadNo]; } - if ((var_r29 & 1) && lbl_1_bss_730 != 0) { - lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 2; - lbl_1_bss_730--; - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 1; + if ((stkBtn & PAD_BUTTON_LEFT) && spaceAmidaPath != 0) { + rocketObj[spaceAmidaPath]->work[1] = 1; + rocketObj[spaceAmidaPath]->work[2] = 2; + spaceAmidaPath--; + rocketObj[spaceAmidaPath]->work[2] = 1; } - if ((var_r29 & 2) && lbl_1_bss_730 != 2) { - lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 2; - lbl_1_bss_730++; - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 1; + if ((stkBtn & PAD_BUTTON_RIGHT) && spaceAmidaPath != 2) { + rocketObj[spaceAmidaPath]->work[1] = 1; + rocketObj[spaceAmidaPath]->work[2] = 2; + spaceAmidaPath++; + rocketObj[spaceAmidaPath]->work[2] = 1; } - BoardModelPosGet(lbl_1_bss_78A[lbl_1_bss_730], &sp18); - BoardPlayerPosGet(lbl_1_bss_798, &spC); - fn_1_CB44(&sp18, 0.0f); - temp_r31->unk04 = sp18; - if (lbl_1_bss_74C < 0 || (var_r27 & 0x100)) { - MGSeqParamSet(lbl_1_bss_744, 2, -1); - lbl_1_bss_714[lbl_1_bss_730]->work[1] = 1; - BoardPlayerPosGet(lbl_1_bss_798, &spC); - var_f28 = VECDistanceXZ(&temp_r31->unk04, &spC); - fn_1_C94C(&spC, &temp_r31->unk04, &temp_r31->unk10); - temp_r31->unk10.y = 0.0f; - temp_r31->unk10.x *= var_f28 / 30.0f; - temp_r31->unk10.z *= var_f28 / 30.0f; - temp_r31->unk00 = 0; - temp_r31->unk20 = 0.0f; - arg0->func = fn_1_BAF8; + BoardModelPosGet(rocketMdlId[spaceAmidaPath], &rocketPos); + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + SpaceAmidaPlayerRotAdd(&rocketPos, 0.0f); + work->rocketPos = rocketPos; + if (timerSec < 0 || (btn & PAD_BUTTON_A)) { + MGSeqParamSet(timerSeqId, 2, -1); + rocketObj[spaceAmidaPath]->work[1] = 1; + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + jumpDist = VECDistanceXZ(&work->rocketPos, &playerPos); + SpaceAmidaDirGet(&playerPos, &work->rocketPos, &work->jumpDir); + work->jumpDir.y = 0.0f; + work->jumpDir.x *= jumpDist / 30.0f; + work->jumpDir.z *= jumpDist / 30.0f; + work->unk00 = 0; + work->jumpTime = 0.0f; + obj->func = SpaceAmidaRocketJump; } } -static void fn_1_BAF8(omObjData *arg0) +static void SpaceAmidaRocketJump(omObjData *obj) { - Bss720Data *temp_r31; - Vec sp14; - Vec sp8; + SpaceAmidaGameWork *work; + Vec playerPos; + Vec rocketPos; - temp_r31 = arg0->data; - if (lbl_1_bss_714[lbl_1_bss_730]->work[2] != 0) { + work = obj->data; + if (rocketObj[spaceAmidaPath]->work[2] != 0) { return; } - BoardPlayerMotionStart(lbl_1_bss_798, 4, 0); - BoardPlayerPosGet(lbl_1_bss_798, &sp14); - sp14.x += temp_r31->unk10.x; - sp14.z += temp_r31->unk10.z; - sp14.y = lbl_1_bss_738.y + 80.0 * sind(6.0f * temp_r31->unk20); - BoardModelPosGet(lbl_1_bss_714[lbl_1_bss_730]->work[0], &sp8); - if ((temp_r31->unk20 += 1.0f) == 30.0f) { - sp14.y = sp8.y + 5.0f; - BoardPlayerPosSetV(lbl_1_bss_798, &sp14); - BoardPlayerMotionShiftSet(lbl_1_bss_798, 2, 0.0f, 10.0f, HU3D_MOTATTR_NONE); - arg0->func = fn_1_BCDC; + BoardPlayerMotionStart(spaceAmidaPlayerNo, 4, 0); + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + playerPos.x += work->jumpDir.x; + playerPos.z += work->jumpDir.z; + playerPos.y = spaceAmidaPos.y + 80.0 * sind(6.0f * work->jumpTime); + BoardModelPosGet(rocketObj[spaceAmidaPath]->work[0], &rocketPos); + if ((++work->jumpTime) == 30.0f) { + playerPos.y = rocketPos.y + 5.0f; + BoardPlayerPosSetV(spaceAmidaPlayerNo, &playerPos); + BoardPlayerMotionShiftSet(spaceAmidaPlayerNo, 2, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + obj->func = SpaceAmidaRocketKemuriExec; } - BoardPlayerPosSetV(lbl_1_bss_798, &sp14); + BoardPlayerPosSetV(spaceAmidaPlayerNo, &playerPos); } -static void fn_1_BCDC(omObjData *arg0) +static void SpaceAmidaRocketKemuriExec(omObjData *obj) { - Bss720Data *temp_r29; - Bss714Data *temp_r31; - Vec sp14; - Vec sp8; + SpaceAmidaGameWork *work; + RocketWork *rocketWork; + Vec playerPos; + Vec kemuriPos; - temp_r29 = arg0->data; - BoardPlayerPosGet(lbl_1_bss_798, &sp14); - sp8 = sp14; - sp8.z += 100.0f; - if (fn_1_CB44(&sp8, 10.0f) == 1) { - BoardPlayerMotionShiftSet(lbl_1_bss_798, 1, 0.0f, 10.0f, HU3D_MOTATTR_NONE); - temp_r29->unk1C = 90; - lbl_1_bss_710->work[0] = 1; - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 3; - temp_r31 = lbl_1_bss_714[lbl_1_bss_730]->data; - Hu3DModelAttrReset(lbl_1_bss_750, HU3D_ATTR_DISPOFF); - Hu3DModelPosSet(lbl_1_bss_750, sp14.x, sp14.y, sp14.z); - temp_r31->unk20.x = 1.4f; - temp_r31->unk20.y = 1.4f; - temp_r31->unk20.z = 1.4f; - temp_r31->unk2C.x = 0.055999998f; - temp_r31->unk2C.y = 0.08088889f; - temp_r31->unk2C.z = 0.055999998f; - temp_r31->unk38 = 1.0f; - temp_r31->unk3C = 0.0f; - Hu3DModelScaleSet(lbl_1_bss_750, 1.4f, 1.4f, 1.4f); - arg0->func = fn_1_BF00; + work = obj->data; + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + kemuriPos = playerPos; + kemuriPos.z += 100.0f; + if (SpaceAmidaPlayerRotAdd(&kemuriPos, 10.0f) == 1) { + BoardPlayerMotionShiftSet(spaceAmidaPlayerNo, 1, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + work->waitTime = 90; + spaceAmidaEffObj->work[0] = 1; + rocketObj[spaceAmidaPath]->work[2] = 3; + rocketWork = rocketObj[spaceAmidaPath]->data; + Hu3DModelAttrReset(kemuriMdlId, HU3D_ATTR_DISPOFF); + Hu3DModelPosSet(kemuriMdlId, playerPos.x, playerPos.y, playerPos.z); + rocketWork->kemuriScale.x = 1.4f; + rocketWork->kemuriScale.y = 1.4f; + rocketWork->kemuriScale.z = 1.4f; + rocketWork->kemuriScaleVel.x = 0.055999998f; + rocketWork->kemuriScaleVel.y = 0.08088889f; + rocketWork->kemuriScaleVel.z = 0.055999998f; + rocketWork->kemuriTPLvl = 1.0f; + rocketWork->unk3C = 0.0f; + Hu3DModelScaleSet(kemuriMdlId, 1.4f, 1.4f, 1.4f); + obj->func = SpaceAmidaRocketWait; } } -static void fn_1_BF00(omObjData *arg0) +static void SpaceAmidaRocketWait(omObjData *obj) { - Bss720Data *temp_r31; + SpaceAmidaGameWork *work; - temp_r31 = arg0->data; - if (temp_r31->unk1C == 0) { - lbl_1_bss_714[lbl_1_bss_730]->work[2] = 4; - arg0->func = fn_1_BF68; + work = obj->data; + if (work->waitTime == 0) { + rocketObj[spaceAmidaPath]->work[2] = 4; + obj->func = SpaceAmidaRocketUp; } else { - temp_r31->unk1C--; + work->waitTime--; } } -static void fn_1_BF68(omObjData *arg0) +static void SpaceAmidaRocketUp(omObjData *obj) { - Bss720Data *sp8; + SpaceAmidaGameWork *work; - sp8 = arg0->data; - if (lbl_1_bss_714[lbl_1_bss_730]->work[2] == 6) { - lbl_1_bss_75C = HuPrcCreate(fn_1_C000, 0x2004, 0x1000, 0); - lbl_1_bss_75C->user_data = arg0; - arg0->func = NULL; + work = obj->data; + if (rocketObj[spaceAmidaPath]->work[2] == 6) { + coinWinProc = HuPrcCreate(SpaceAmidaCoinWin, 0x2004, 0x1000, 0); + coinWinProc->user_data = obj; + obj->func = NULL; } } -static void fn_1_C000(void) +static void SpaceAmidaCoinWin(void) { - char sp8[16]; // array size may range between 1 and 16 (inclusive) - omObjData *temp_r30; - Bss720Data *temp_r31; + char mess[16]; // array size may range between 1 and 16 (inclusive) + omObjData *obj; + SpaceAmidaGameWork *work; BoardAudSeqFadeOut(1, 100); - sprintf(&sp8, "%d", lbl_1_bss_728); + sprintf(&mess, "%d", spaceAmidaCoinNum); BoardWinCreate(2, MAKE_MESSID(11, 6), 0); - BoardWinInsertMesSet(MAKE_MESSID_PTR(sp8), 0); + BoardWinInsertMesSet(MAKE_MESSID_PTR(mess), 0); BoardWinWait(); BoardWinKill(); - temp_r30 = HuPrcCurrentGet()->user_data; - temp_r31 = temp_r30->data; - temp_r31->unk10.x = 0.0f; - temp_r31->unk10.y = 10.0f; - temp_r31->unk10.z = 3.0f; - temp_r31->unk20 = 0.0f; - BoardPlayerMotionShiftSet(lbl_1_bss_798, 4, 0.0f, 10.0f, HU3D_MOTATTR_NONE); - temp_r30->func = fn_1_C0FC; + obj = HuPrcCurrentGet()->user_data; + work = obj->data; + work->jumpDir.x = 0.0f; + work->jumpDir.y = 10.0f; + work->jumpDir.z = 3.0f; + work->jumpTime = 0.0f; + BoardPlayerMotionShiftSet(spaceAmidaPlayerNo, 4, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + obj->func = SpaceAmidaJumpDown; HuPrcKill(NULL); while (TRUE) { HuPrcVSleep(); } } -static void fn_1_C0FC(omObjData *arg0) +static void SpaceAmidaJumpDown(omObjData *obj) { - Bss720Data *temp_r31; - Vec sp8; + SpaceAmidaGameWork *work; + Vec pos; - temp_r31 = arg0->data; - BoardPlayerPosGet(lbl_1_bss_798, &sp8); - sp8.x += temp_r31->unk10.x; - sp8.y += temp_r31->unk10.y - 0.029166667f * temp_r31->unk20 * temp_r31->unk20; - sp8.z += temp_r31->unk10.z; - temp_r31->unk20 += 1.0f; - if (sp8.y <= lbl_1_bss_738.y) { - BoardPlayerMotionShiftSet(lbl_1_bss_798, 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); - sp8.y = lbl_1_bss_738.y; - lbl_1_bss_75C = HuPrcCreate(fn_1_C25C, 0x2004, 0x1000, 0); - lbl_1_bss_75C->user_data = arg0; - arg0->func = NULL; + work = obj->data; + BoardPlayerPosGet(spaceAmidaPlayerNo, &pos); + pos.x += work->jumpDir.x; + pos.y += work->jumpDir.y - 0.029166667f * work->jumpTime * work->jumpTime; + pos.z += work->jumpDir.z; + work->jumpTime += 1.0f; + if (pos.y <= spaceAmidaPos.y) { + BoardPlayerMotionShiftSet(spaceAmidaPlayerNo, 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); + pos.y = spaceAmidaPos.y; + coinWinProc = HuPrcCreate(SpaceAmidaCoinRainMain, 0x2004, 0x1000, 0); + coinWinProc->user_data = obj; + obj->func = NULL; } - BoardPlayerPosSetV(lbl_1_bss_798, &sp8); + BoardPlayerPosSetV(spaceAmidaPlayerNo, &pos); } -static void fn_1_C25C(void) +static void SpaceAmidaCoinRainMain(void) { - Vec sp11C[20]; - Vec sp2C[20]; - Vec sp20; - Vec sp14; - Vec sp8; - float var_f31; - s16 var_r30; + Vec coinPos[20]; + Vec coinRot[20]; + Vec playerPos; + Vec scale; + Vec coinEffPos; + float velY; + s16 coinNum; s16 i; - var_r30 = 0; - BoardPlayerPosGet(lbl_1_bss_798, &sp20); - sp14.x = sp14.y = sp14.z = 1.0f; - for (i = 0; i < lbl_1_bss_728; i++) { - BoardModelVisibilitySet(lbl_1_bss_760[i], 1); - sp11C[i] = sp20; - sp11C[i].y += 600.0f + i * 120; - sp11C[i].x += -25.0f + 50.0f * frand8() * 0.003921569f; - sp11C[i].z += -25.0f + 50.0f * frand8() * 0.003921569f; - sp2C[i].x = sp2C[i].z = 0.0f; - sp2C[i].y = 360.0f * frand8() * 0.003921569f; - BoardModelPosSetV(lbl_1_bss_760[i], &sp11C[i]); - BoardModelScaleSetV(lbl_1_bss_760[i], &sp14); - BoardModelRotSetV(lbl_1_bss_760[i], &sp2C[i]); + coinNum = 0; + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + scale.x = scale.y = scale.z = 1.0f; + for (i = 0; i < spaceAmidaCoinNum; i++) { + BoardModelVisibilitySet(coinMdlId[i], 1); + coinPos[i] = playerPos; + coinPos[i].y += 600.0f + i * 120; + coinPos[i].x += -25.0f + 50.0f * frand8() * 0.003921569f; + coinPos[i].z += -25.0f + 50.0f * frand8() * 0.003921569f; + coinRot[i].x = coinRot[i].z = 0.0f; + coinRot[i].y = 360.0f * frand8() * 0.003921569f; + BoardModelPosSetV(coinMdlId[i], &coinPos[i]); + BoardModelScaleSetV(coinMdlId[i], &scale); + BoardModelRotSetV(coinMdlId[i], &coinRot[i]); } - var_f31 = -1.0f; + velY = -1.0f; while (TRUE) { - for (i = 0; i < lbl_1_bss_728; i++) { - if (i >= var_r30) { - sp11C[i].y += var_f31; - BoardModelPosSetV(lbl_1_bss_760[i], &sp11C[i]); - sp2C[i].y += 45.0f; - if (sp2C[i].y >= 360.0f) { - sp2C[i].y -= 360.0f; + for (i = 0; i < spaceAmidaCoinNum; i++) { + if (i >= coinNum) { + coinPos[i].y += velY; + BoardModelPosSetV(coinMdlId[i], &coinPos[i]); + coinRot[i].y += 45.0f; + if (coinRot[i].y >= 360.0f) { + coinRot[i].y -= 360.0f; } - BoardModelRotSetV(lbl_1_bss_760[i], &sp2C[i]); - if (sp11C[i].y <= sp20.y + 80.0f) { - sp8 = sp11C[i]; - CharModelCoinEffectCreate(1, &sp8); - BoardModelVisibilitySet(lbl_1_bss_760[i], 0); - var_r30++; - BoardPlayerCoinsAdd(lbl_1_bss_798, 1); + BoardModelRotSetV(coinMdlId[i], &coinRot[i]); + if (coinPos[i].y <= playerPos.y + 80.0f) { + Vec pos = coinPos[i]; + CharModelCoinEffectCreate(1, &pos); + BoardModelVisibilitySet(coinMdlId[i], 0); + coinNum++; + BoardPlayerCoinsAdd(spaceAmidaPlayerNo, 1); HuAudFXPlay(7); - omVibrate(lbl_1_bss_798, 0xC, 6, 6); + omVibrate(spaceAmidaPlayerNo, 0xC, 6, 6); } } } - var_f31 *= 1.05f; - if (var_f31 < -20.0f) { - var_f31 = -20.0f; + velY *= 1.05f; + if (velY < -20.0f) { + velY = -20.0f; } - if (var_r30 == lbl_1_bss_728) { - BoardPlayerMotionShiftSet(lbl_1_bss_798, 7, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + if (coinNum == spaceAmidaCoinNum) { + BoardPlayerMotionShiftSet(spaceAmidaPlayerNo, 7, 0.0f, 10.0f, HU3D_MOTATTR_NONE); break; } HuPrcVSleep(); } - while (!BoardPlayerMotionEndCheck(lbl_1_bss_798)) { + while (!BoardPlayerMotionEndCheck(spaceAmidaPlayerNo)) { HuPrcVSleep(); } - lbl_1_bss_75C = HuPrcCreate(fn_1_C844, 0x2004, 0x1000, 0); - lbl_1_bss_75C->user_data = HuPrcCurrentGet()->user_data; + coinWinProc = HuPrcCreate(SpaceAmidaReturnWinMain, 0x2004, 0x1000, 0); + coinWinProc->user_data = HuPrcCurrentGet()->user_data; HuPrcKill(NULL); while (TRUE) { HuPrcVSleep(); } } -static void fn_1_C844(void) +static void SpaceAmidaReturnWinMain(void) { - omObjData *var_r31; + omObjData *obj; BoardWinCreate(2, MAKE_MESSID(11, 7), 0); BoardWinWait(); BoardWinKill(); - var_r31 = HuPrcCurrentGet()->user_data; - var_r31->func = fn_1_C894; + obj = HuPrcCurrentGet()->user_data; + obj->func = SpaceAmidaGameStop; HuPrcKill(NULL); while (TRUE) { HuPrcVSleep(); } } -static void fn_1_C894(omObjData *arg0) +static void SpaceAmidaGameStop(omObjData *obj) { - float temp_f31; - - lbl_1_bss_72A = 1; - BoardMGExit(); - temp_f31 = BoardModelMotionTimeGet(lbl_1_bss_796); - lbl_1_bss_754 = temp_f31; - BoardModelMotionStart(lbl_1_bss_796, 0, 0); - BoardModelMotionTimeSet(lbl_1_bss_796, temp_f31); - BoardModelMotionSpeedSet(lbl_1_bss_796, -1.0f); - omDelObjEx(HuPrcCurrentGet(), arg0); + SpaceAmidaStop(); + omDelObjEx(HuPrcCurrentGet(), obj); } -static void fn_1_C94C(Vec *arg0, Vec *arg1, Vec *arg2) +static void SpaceAmidaDirGet(Vec *b, Vec *a, Vec *result) { - VECSubtract(arg1, arg0, arg2); - VECNormalize(arg2, arg2); + VECSubtract(a, b, result); + VECNormalize(result, result); } -static float fn_1_C998(Vec *arg0) +static float SpaceAmidaAngleGet(Vec *dir) { - float temp_f31; + float angle; - if (arg0->x || arg0->z) { - if (arg0->x == 0.0f) { - if (arg0->z > 0.0f) { + if (dir->x || dir->z) { + if (dir->x == 0.0f) { + if (dir->z > 0.0f) { return 0.0f; } else { return 180.0f; } } - if (arg0->z == 0.0f) { - if (arg0->x > 0.0f) { + if (dir->z == 0.0f) { + if (dir->x > 0.0f) { return 90.0f; } else { return 270.0f; } } - temp_f31 = atan2d(arg0->z, arg0->x); - if (arg0->z < 0.0f) { - temp_f31 = 90.0f - temp_f31; + angle = atan2d(dir->z, dir->x); + if (dir->z < 0.0f) { + angle = 90.0f - angle; } else { - temp_f31 = 90.0f - temp_f31; - if (temp_f31 < 0.0f) { - temp_f31 += 360.0f; + angle = 90.0f - angle; + if (angle < 0.0f) { + angle += 360.0f; } } - return temp_f31; + return angle; } return -1.0f; } -static u32 fn_1_CB44(Vec *arg0, float arg1) +static u32 SpaceAmidaPlayerRotAdd(Vec *rocketPos, float delta) { - Vec sp24; - Vec sp18; - Vec spC; - float var_f28; - float var_f30; - float var_f31; + Vec dir; + Vec playerPos; + Vec playerRot; + float rocketAngle; + float angleDelta; + float rotY; - BoardPlayerPosGet(lbl_1_bss_798, &sp18); - VECSubtract(arg0, &sp18, &sp24); - VECNormalize(&sp24, &sp24); - var_f28 = fn_1_C998(&sp24); - BoardPlayerRotGet(lbl_1_bss_798, &spC); - var_f31 = spC.y; - var_f30 = var_f28 - var_f31; - if (arg1 == 0.0f) { - var_f31 = var_f28; + BoardPlayerPosGet(spaceAmidaPlayerNo, &playerPos); + SpaceAmidaDirGet(&playerPos, rocketPos, &dir); + rocketAngle = SpaceAmidaAngleGet(&dir); + BoardPlayerRotGet(spaceAmidaPlayerNo, &playerRot); + rotY = playerRot.y; + angleDelta = rocketAngle - rotY; + if (delta == 0.0f) { + rotY = rocketAngle; } - else if (fabs(var_f30) > arg1) { - if (var_f30 < 0.0f) { - var_f30 += 360.0f; + else if (fabs(angleDelta) > delta) { + if (angleDelta < 0.0f) { + angleDelta += 360.0f; } - if (var_f30 < 180.0f) { - if (var_f30 > arg1) { - var_f31 += arg1; + if (angleDelta < 180.0f) { + if (angleDelta > delta) { + rotY += delta; } else { - var_f31 += var_f30; + rotY += angleDelta; } } - else if (360.0f - var_f30 > arg1) { - var_f31 -= arg1; + else if (360.0f - angleDelta > delta) { + rotY -= delta; } else { - var_f31 -= 360.0f - var_f30; + rotY -= 360.0f - angleDelta; } } else { - var_f31 = var_f28; + rotY = rocketAngle; } - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; + if (rotY >= 360.0f) { + rotY -= 360.0f; } - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + if (rotY < 0.0f) { + rotY += 360.0f; } - BoardPlayerRotYSet(lbl_1_bss_798, var_f31); - if (var_f31 == var_f28) { - return 1; + BoardPlayerRotYSet(spaceAmidaPlayerNo, rotY); + if (rotY == rocketAngle) { + return TRUE; } else { - return 0; + return FALSE; } } -static void fn_1_CEC4(void) +static void SpaceAmidaEffCreate(void) { - lbl_1_bss_70C = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_W01, 20)); - lbl_1_bss_710 = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, fn_1_D07C); - lbl_1_bss_710->data = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); - lbl_1_bss_710->model[0] = Hu3DParticleCreate(lbl_1_bss_70C, 0x320); - Hu3DParticleColSet(lbl_1_bss_710->model[0], 0xFF, 0, 0); - Hu3DParticleScaleSet(lbl_1_bss_710->model[0], 5.0f); - Hu3DParticleHookSet(lbl_1_bss_710->model[0], fn_1_D114); - Hu3DParticleBlendModeSet(lbl_1_bss_710->model[0], 1); - Hu3DModelAttrSet(lbl_1_bss_710->model[0], HU3D_ATTR_DISPOFF); - lbl_1_bss_710->work[0] = 0; + spaceAmidaEffAnim = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_W01, 20)); + spaceAmidaEffObj = omAddObjEx(boardObjMan, 0x101, 1, 0, -1, SpaceAmidaEffUpdate); + spaceAmidaEffObj->data = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); + spaceAmidaEffObj->model[0] = Hu3DParticleCreate(spaceAmidaEffAnim, 0x320); + Hu3DParticleColSet(spaceAmidaEffObj->model[0], 255, 0, 0); + Hu3DParticleScaleSet(spaceAmidaEffObj->model[0], 5.0f); + Hu3DParticleHookSet(spaceAmidaEffObj->model[0], SpaceAmidaEffParticleHook); + Hu3DParticleBlendModeSet(spaceAmidaEffObj->model[0], 1); + Hu3DModelAttrSet(spaceAmidaEffObj->model[0], HU3D_ATTR_DISPOFF); + spaceAmidaEffObj->work[0] = 0; } -static void fn_1_D034(void) +static void SpaceAmidaEffKill(void) { - Hu3DModelKill(lbl_1_bss_710->model[0]); - omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_710); + Hu3DModelKill(spaceAmidaEffObj->model[0]); + omDelObjEx(HuPrcCurrentGet(), spaceAmidaEffObj); } -static void fn_1_D07C(omObjData *arg0) +static void SpaceAmidaEffUpdate(omObjData *obj) { - void *sp8; + void *work; - sp8 = arg0->data; - switch (arg0->work[0]) { + work = obj->data; + switch (obj->work[0]) { case 0: break; case 1: - arg0->work[0] = 2; - Hu3DModelAttrReset(arg0->model[0], HU3D_ATTR_DISPOFF); - Hu3DModelScaleSet(arg0->model[0], 10.0f, 10.0f, 10.0f); + obj->work[0] = 2; + Hu3DModelAttrReset(obj->model[0], HU3D_ATTR_DISPOFF); + Hu3DModelScaleSet(obj->model[0], 10.0f, 10.0f, 10.0f); break; case 2: break; } } -static void fn_1_D114(ModelData *model, ParticleData *particle, Mtx matrix) +static void SpaceAmidaEffParticleHook(ModelData *model, ParticleData *particle, Mtx matrix) { - Bss714Data *temp_r28; - HsfanimStruct01 *var_r31; - Vec sp8; - float temp_f31; + RocketWork *work; + HsfanimStruct01 *particleDataP; + Vec pos; + float size; s32 i; s32 j; - s32 temp_r26; + s32 relSize; - BoardModelPosGet(lbl_1_bss_714[lbl_1_bss_730]->work[0], &sp8); - temp_r28 = lbl_1_bss_714[lbl_1_bss_730]->data; + BoardModelPosGet(rocketObj[spaceAmidaPath]->work[0], &pos); + work = rocketObj[spaceAmidaPath]->data; if (particle->unk_34 == 0) { - var_r31 = particle->unk_48; - for (i = 0; i < particle->unk_30; i++, var_r31++) { - var_r31->unk2C = 0.0f; + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + particleDataP->unk2C = 0.0f; } particle->unk_1C = (void *)1; } - if (temp_r28->unk1C > 0.0f) { - for (i = 0; i < 80.0f * temp_r28->unk1C; i++) { - var_r31 = particle->unk_48; - for (j = 0; j < particle->unk_30; j++, var_r31++) { - if (var_r31->unk2C == 0.0f) { + if (work->kemuriSize > 0.0f) { + for (i = 0; i < 80.0f * work->kemuriSize; i++) { + particleDataP = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, particleDataP++) { + if (particleDataP->unk2C == 0.0f) { break; } } if (j != particle->unk_30) { - temp_r26 = frand16(); - temp_f31 = (-15.0f + 30.0f * (temp_r26 / 65536.0f)) * temp_r28->unk1C; - var_r31->unk08.x = sp8.x + temp_f31; - var_r31->unk08.y = sp8.y; - var_r31->unk08.z = sp8.z; - var_r31->unk14.x = 255.0f; - var_r31->unk14.y = 155.0f; - var_r31->unk14.z = 55.0f; - var_r31->unk40.a = 0xFF; - var_r31->unk20 = 0.0f; - var_r31->unk24 = temp_r28->unk1C * (-3.0 + (2.0 * (fabs(temp_f31) / 15.0))); - var_r31->unk28 = 0.0f; - var_r31->unk2C = 7.3f; + relSize = frand16(); + size = (-15.0f + 30.0f * (relSize / 65536.0f)) * work->kemuriSize; + particleDataP->unk08.x = pos.x + size; + particleDataP->unk08.y = pos.y; + particleDataP->unk08.z = pos.z; + particleDataP->unk14.x = 255.0f; + particleDataP->unk14.y = 155.0f; + particleDataP->unk14.z = 55.0f; + particleDataP->unk40.a = 0xFF; + particleDataP->unk20 = 0.0f; + particleDataP->unk24 = work->kemuriSize * (-3.0 + (2.0 * (fabs(size) / 15.0))); + particleDataP->unk28 = 0.0f; + particleDataP->unk2C = 7.3f; } } } - var_r31 = particle->unk_48; - for (i = 0; i < particle->unk_30; i++, var_r31++) { - if (var_r31->unk2C == 0.0f) { + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + if (particleDataP->unk2C == 0.0f) { continue; } - var_r31->unk34.x = var_r31->unk08.x; - var_r31->unk34.y = var_r31->unk08.y; - var_r31->unk34.z = var_r31->unk08.z; - var_r31->unk08.x += var_r31->unk20; - var_r31->unk08.y += var_r31->unk24; - var_r31->unk08.z += var_r31->unk28; - if (var_r31->unk08.y <= lbl_1_bss_738.y) { - var_r31->unk08.y = lbl_1_bss_738.y; - var_r31->unk24 = -var_r31->unk24 - 0.3f; - if (var_r31->unk24 < 0.0f) { - var_r31->unk24 = 0.0f; + particleDataP->unk34.x = particleDataP->unk08.x; + particleDataP->unk34.y = particleDataP->unk08.y; + particleDataP->unk34.z = particleDataP->unk08.z; + particleDataP->unk08.x += particleDataP->unk20; + particleDataP->unk08.y += particleDataP->unk24; + particleDataP->unk08.z += particleDataP->unk28; + if (particleDataP->unk08.y <= spaceAmidaPos.y) { + particleDataP->unk08.y = spaceAmidaPos.y; + particleDataP->unk24 = -particleDataP->unk24 - 0.3f; + if (particleDataP->unk24 < 0.0f) { + particleDataP->unk24 = 0.0f; } - temp_r26 = 80.0f * (2.0f * ((sp8.x - var_r31->unk08.x) / 15.0f) - rand8() / 255.0f); - var_r31->unk20 = 8.0 * sind(temp_r26); - var_r31->unk28 = 8.0 * cosd(temp_r26); + relSize = 80.0f * (2.0f * ((pos.x - particleDataP->unk08.x) / 15.0f) - rand8() / 255.0f); + particleDataP->unk20 = 8.0 * sind(relSize); + particleDataP->unk28 = 8.0 * cosd(relSize); } - var_r31->unk24 -= 0.35f; - if ((var_r31->unk14.x -= 25.5f) < 0.0f) { - var_r31->unk14.x = 0.0f; + particleDataP->unk24 -= 0.35f; + if ((particleDataP->unk14.x -= 25.5f) < 0.0f) { + particleDataP->unk14.x = 0.0f; } - if ((var_r31->unk14.y -= 36.42857f) < 0.0f) { - var_r31->unk14.y = 0.0f; + if ((particleDataP->unk14.y -= 36.42857f) < 0.0f) { + particleDataP->unk14.y = 0.0f; } - if ((var_r31->unk14.z -= 63.75f) < 0.0f) { - var_r31->unk14.z = 0.0f; + if ((particleDataP->unk14.z -= 63.75f) < 0.0f) { + particleDataP->unk14.z = 0.0f; } - var_r31->unk40.r = var_r31->unk14.x; - var_r31->unk40.g = var_r31->unk14.y; - var_r31->unk40.b = var_r31->unk14.z; - if (var_r31->unk40.r == 0 && var_r31->unk40.g == 0 && var_r31->unk40.b == 0) { - var_r31->unk2C = 0.0f; + particleDataP->unk40.r = particleDataP->unk14.x; + particleDataP->unk40.g = particleDataP->unk14.y; + particleDataP->unk40.b = particleDataP->unk14.z; + if (particleDataP->unk40.r == 0 && particleDataP->unk40.g == 0 && particleDataP->unk40.b == 0) { + particleDataP->unk2C = 0.0f; } } } diff --git a/src/REL/w01Dll/mg_item.c b/src/REL/w01Dll/mg_item.c index 6830c410..6a61927a 100755 --- a/src/REL/w01Dll/mg_item.c +++ b/src/REL/w01Dll/mg_item.c @@ -25,63 +25,63 @@ #include "dolphin.h" #include "ext_math.h" -static void fn_1_E100(void); -static void fn_1_E154(void); -static void fn_1_E2B8(omObjData *arg0); -static void fn_1_E44C(omObjData *arg0); -static void fn_1_E914(omObjData *arg0); -static void fn_1_ECD4(omObjData *arg0); -static void fn_1_EEA0(omObjData *arg0, u16 *arg1); -static void fn_1_EED8(omObjData *arg0); -static void fn_1_F09C(omObjData *arg0); -static void fn_1_F348(omObjData *arg0); -static void fn_1_F3F8(omObjData *arg0); -static void fn_1_F6E8(omObjData *arg0); -static void fn_1_F890(omObjData *arg0); -static void fn_1_FA1C(omObjData *arg0); -static void fn_1_FABC(omObjData *arg0); -static void fn_1_FB58(void); -static void fn_1_FC3C(omObjData *arg0); -static void fn_1_FCEC(void); -static void fn_1_FD3C(omObjData *arg0); -static void fn_1_FE44(omObjData *arg0); -static void fn_1_FED0(omObjData *arg0); -static s16 fn_1_1001C(u32 arg0); -static void fn_1_101B8(s16 arg0); -static void fn_1_10664(omObjData *arg0); -static void fn_1_10820(omObjData *arg0); -static void fn_1_10AE8(omObjData *arg0); -static float fn_1_10BB0(u32 arg0); -static void fn_1_10CF0(u32 arg0); -static float fn_1_10EB8(Vec *arg0); -static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix); -static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix); +static void RoundItemEnd(void); +static void RoundItemClose(void); +static void RoundItemMainUpdate(omObjData *obj); +static void RoundItemUmaStop(omObjData *obj); +static void RoundItemPlayerJump(omObjData *obj); +static void RoundItemStartWait(omObjData *obj); +static void RoundItemComInputGet(omObjData *obj, u16 *btn); +static void RoundItemInputWait(omObjData *obj); +static void RoundItemStop(omObjData *obj); +static void RoundItemLightFlicker(omObjData *obj); +static void RoundItemUmaJumpWait(omObjData *obj); +static void RoundItemUmaJump(omObjData *obj); +static void RoundItemRotatePlayer(omObjData *obj); +static void RoundItemStreamWait(omObjData *obj); +static void RoundItemWinWait(omObjData *obj); +static void ItemGetWinExec(void); +static void ItemGetShrinkWait(omObjData *obj); +static void ItemGetReturnWinExec(void); +static void RoundItemGameClose(omObjData *obj); +static void RoundItemGameEnd(omObjData *obj); +static void RoundItemItemUpdate(omObjData *obj); +static s16 RoundItemItemGet(u32 umaNo); +static void ItemGetCreate(s16 itemNo); +static void ItemGetObjUpdate(omObjData *obj); +static void ItemGetPlayerMove(omObjData *obj); +static void ItemGetShrink(omObjData *obj); +static float RoundItemUmaRotYGet(u32 umaNo); +static void RoundItemUmaPlayerSet(u32 umaNo); +static float RoundItemAngleGet(Vec *arg0); +static void ItemGetEff1Hook(ModelData *model, ParticleData *particle, Mtx matrix); +static void ItemGetEff2Hook(ModelData *model, ParticleData *particle, Mtx matrix); -static void *lbl_1_bss_818; -static Vec lbl_1_bss_80C; -static omObjData *lbl_1_bss_7FC[4]; -static omObjData *lbl_1_bss_7F8; -static omObjData *lbl_1_bss_7F4; -static omObjData *lbl_1_bss_7F0; -static float lbl_1_bss_7EC; -static float lbl_1_bss_7E8; -static s32 lbl_1_bss_7E4; -static Vec lbl_1_bss_7D8; -static s16 lbl_1_bss_7D6; -static s16 lbl_1_bss_7D4; -static s16 lbl_1_bss_7D2; -static s16 lbl_1_bss_7D0; -static Vec lbl_1_bss_7C4; +static void *itemAnim; +static Vec roundItemPos; +static omObjData *itemObj[4]; +static omObjData *roundItemUmaObj; +static omObjData *roundItemMainObj; +static omObjData *itemGetObj; +static float umaSpeed; +static float borderSpeed; +static s32 roundItemPlayer; +static Vec umaPos; +static s16 seqStartId; +static s16 timerSeqId; +static s16 timerSec; +static s16 timerFrame; +static Vec roundItemPlayerPos; static s32 lbl_1_bss_7C0_pad; -static s32 lbl_1_bss_7BC; -static s32 lbl_1_bss_7B8; -static s16 lbl_1_bss_7B4; +static s32 itemGetMotId; +static s32 jumpMotId; +static s16 umaStopF; static s32 lbl_1_bss_7B0_pad; -static s32 lbl_1_bss_7AC; -static s16 lbl_1_bss_7AA; -static s16 lbl_1_bss_7A8; -static s32 lbl_1_bss_7A4; -static AnimData *lbl_1_bss_7A0; +static s32 itemGetSeNo; +static s16 roundItemStopF; +static s16 umaStopTimer; +static s32 roundItemStreamId; +static AnimData *roundItemEffAnim; #if VERSION_JP #define MDL_ID_SHIFT 0 @@ -89,7 +89,7 @@ static AnimData *lbl_1_bss_7A0; #define MDL_ID_SHIFT 1 #endif -static s32 lbl_1_data_F08[] = { +static s32 itemMdlTbl[] = { DATA_MAKE_NUM(DATADIR_BOARD, 108 + MDL_ID_SHIFT), DATA_MAKE_NUM(DATADIR_BOARD, 109 + MDL_ID_SHIFT), DATA_MAKE_NUM(DATADIR_BOARD, 110 + MDL_ID_SHIFT), @@ -106,884 +106,856 @@ static s32 lbl_1_data_F08[] = { DATA_MAKE_NUM(DATADIR_BOARD, 122 + MDL_ID_SHIFT), }; -static s32 lbl_1_data_F40[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23), DATA_MAKE_NUM(DATADIR_PEACHMOT, 23), +static s32 itemGetMotTbl[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 23), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 23), DATA_MAKE_NUM(DATADIR_PEACHMOT, 23), DATA_MAKE_NUM(DATADIR_YOSHIMOT, 23), DATA_MAKE_NUM(DATADIR_WARIOMOT, 23), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 23), DATA_MAKE_NUM(DATADIR_DAISYMOT, 23), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 23) }; -static s32 lbl_1_data_F60[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 64), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 64), DATA_MAKE_NUM(DATADIR_PEACHMOT, 64), +static s32 jumpMotTbl[8] = { DATA_MAKE_NUM(DATADIR_MARIOMOT, 64), DATA_MAKE_NUM(DATADIR_LUIGIMOT, 64), DATA_MAKE_NUM(DATADIR_PEACHMOT, 64), DATA_MAKE_NUM(DATADIR_YOSHIMOT, 64), DATA_MAKE_NUM(DATADIR_WARIOMOT, 64), DATA_MAKE_NUM(DATADIR_DONKEYMOT, 64), DATA_MAKE_NUM(DATADIR_DAISYMOT, 64), DATA_MAKE_NUM(DATADIR_WALUIGIMOT, 64) }; -void fn_1_D740(s16 *arg0) +void RoundItemInit(s16 *itemTbl) { - s16 sp10[14]; - s16 sp8[4]; - float temp_f30; - float temp_f29; - float var_f31; - s32 var_r28; - s32 var_r30; + s16 itemOrderTbl[14]; + s16 itemMdlId[4]; + float borderTime; + float borderMaxTime; + float itemAngle; + s32 itemOrderNum; + s32 itemNum; s32 i; s32 j; - lbl_1_bss_818 = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_W01, 28), MEMORY_DEFAULT_NUM, HEAP_DATA); - BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C); - sp8[0] = BoardModelIDGet(lbl_1_bss_6C4[19]); - BoardModelVisibilitySet(lbl_1_bss_6C4[19], 1); + itemAnim = HuDataSelHeapReadNum(DATA_MAKE_NUM(DATADIR_W01, 28), MEMORY_DEFAULT_NUM, HEAP_DATA); + BoardModelPosGet(mapObjMdlId[MAPOBJ_ROUNDITEM], &roundItemPos); + itemMdlId[0] = BoardModelIDGet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM]); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM], 1); for (i = 1; i < 4; i++) { - sp8[i] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 24)); + itemMdlId[i] = Hu3DModelCreateFile(DATA_MAKE_NUM(DATADIR_W01, 24)); } - var_r30 = 0; + itemNum = 0; for (i = 0; i < 4; i++) { - lbl_1_bss_7FC[i] = omAddObjEx(boardObjMan, 0x165, 2, 0, -1, NULL); - if (arg0[i] != -1) { - lbl_1_bss_7FC[var_r30++]->work[1] = arg0[i]; + itemObj[i] = omAddObjEx(boardObjMan, 0x165, 2, 0, -1, NULL); + if (itemTbl[i] != -1) { + itemObj[itemNum++]->work[1] = itemTbl[i]; } } - while (var_r30 != 4) { - var_r28 = 0; + while (itemNum != 4) { + itemOrderNum = 0; for (i = 0; i < 14; i++) { - for (j = 0; j < var_r30; j++) { - if (i == lbl_1_bss_7FC[j]->work[1]) { + for (j = 0; j < itemNum; j++) { + if (i == itemObj[j]->work[1]) { break; } } - if (j == var_r30) { - sp10[var_r28++] = i; + if (j == itemNum) { + itemOrderTbl[itemOrderNum++] = i; } } - lbl_1_bss_7FC[var_r30++]->work[1] = sp10[rand8() % var_r28]; + itemObj[itemNum++]->work[1] = itemOrderTbl[rand8() % itemOrderNum]; } - temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); - temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); + borderTime = BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); + borderMaxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); for (i = 0; i < 4; i++) { - lbl_1_bss_7FC[i]->model[0] = sp8[i]; - lbl_1_bss_7FC[i]->model[1] = Hu3DModelCreateFile(lbl_1_data_F08[lbl_1_bss_7FC[i]->work[1]]); - if (lbl_1_bss_7FC[i]->work[1] == 5) { - Hu3DData[lbl_1_bss_7FC[i]->model[1]].unk_F0[1][3] = -50.0f; + itemObj[i]->model[0] = itemMdlId[i]; + itemObj[i]->model[1] = Hu3DModelCreateFile(itemMdlTbl[itemObj[i]->work[1]]); + if (itemObj[i]->work[1] == 5) { + Hu3DData[itemObj[i]->model[1]].unk_F0[1][3] = -50.0f; } - if (lbl_1_bss_7FC[i]->work[1] == 11) { - Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_MOTATTR_LOOP); + if (itemObj[i]->work[1] == 11) { + Hu3DModelAttrSet(itemObj[i]->model[1], HU3D_MOTATTR_LOOP); } - if (lbl_1_bss_7FC[i]->work[1] == 4) { - Hu3DMotionSpeedSet(lbl_1_bss_7FC[i]->model[1], 0.0f); + if (itemObj[i]->work[1] == 4) { + Hu3DMotionSpeedSet(itemObj[i]->model[1], 0.0f); } - Hu3DModelAttrReset(sp8[i], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_ATTR_DISPOFF); - Hu3DModelAttrSet(lbl_1_bss_7FC[i]->model[1], HU3D_MOTATTR_PAUSE); - omSetTra(lbl_1_bss_7FC[i], lbl_1_bss_80C.x, lbl_1_bss_80C.y + 66.0f, lbl_1_bss_80C.z); - var_f31 = 90.0f - 90.0f * i + 360.0f * (temp_f30 / temp_f29); - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; + Hu3DModelAttrReset(itemMdlId[i], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(itemObj[i]->model[1], HU3D_ATTR_DISPOFF); + Hu3DModelAttrSet(itemObj[i]->model[1], HU3D_MOTATTR_PAUSE); + omSetTra(itemObj[i], roundItemPos.x, roundItemPos.y + 66.0f, roundItemPos.z); + itemAngle = 90.0f - 90.0f * i + 360.0f * (borderTime / borderMaxTime); + if (itemAngle >= 360.0f) { + itemAngle -= 360.0f; } - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + if (itemAngle < 0.0f) { + itemAngle += 360.0f; } - omSetRot(lbl_1_bss_7FC[i], 0.0f, var_f31, 0.0f); - lbl_1_bss_7FC[i]->work[0] = Hu3DAnimCreate(lbl_1_bss_818, lbl_1_bss_7FC[i]->model[0], "item01"); - Hu3DAnimAttrSet(lbl_1_bss_7FC[i]->work[0], 1); - lbl_1_bss_7FC[i]->work[2] = i; + omSetRot(itemObj[i], 0.0f, itemAngle, 0.0f); + itemObj[i]->work[0] = Hu3DAnimCreate(itemAnim, itemObj[i]->model[0], "item01"); + Hu3DAnimAttrSet(itemObj[i]->work[0], 1); + itemObj[i]->work[2] = i; } for (i = 0; i < 4; i++) { - Hu3DAnmNoSet(lbl_1_bss_7FC[i]->work[0], lbl_1_bss_7FC[i]->work[1]); + Hu3DAnmNoSet(itemObj[i]->work[0], itemObj[i]->work[1]); } } -void fn_1_DD84(void) +void RoundItemKill(void) { s32 i; for (i = 0; i < 4; i++) { if (i != 0) { - Hu3DModelKill(lbl_1_bss_7FC[i]->model[0]); + Hu3DModelKill(itemObj[i]->model[0]); } else { - BoardModelVisibilitySet(lbl_1_bss_6C4[19], 0); - Hu3DAnimKill(lbl_1_bss_7FC[i]->work[0]); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM], 0); + Hu3DAnimKill(itemObj[i]->work[0]); } - Hu3DModelKill(lbl_1_bss_7FC[i]->model[1]); - omDelObjEx(boardObjMan, lbl_1_bss_7FC[i]); + Hu3DModelKill(itemObj[i]->model[1]); + omDelObjEx(boardObjMan, itemObj[i]); } - if (lbl_1_bss_7A0) { - HuSprAnimKill(lbl_1_bss_7A0); - lbl_1_bss_7A0 = NULL; + if (roundItemEffAnim) { + HuSprAnimKill(roundItemEffAnim); + roundItemEffAnim = NULL; } } -void fn_1_DE94(void) +void RoundItemEventStart(void) { s32 i; - BoardModelPosGet(lbl_1_bss_6C4[16], &lbl_1_bss_80C); + BoardModelPosGet(mapObjMdlId[MAPOBJ_ROUNDITEM], &roundItemPos); for (i = 0; i < 4; i++) { - lbl_1_bss_7FC[i]->func = fn_1_FED0; + itemObj[i]->func = RoundItemItemUpdate; } - lbl_1_bss_7F4 = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, fn_1_E2B8); - lbl_1_bss_7F8 = omAddObjEx(boardObjMan, 0x133, 0, 0, -1, fn_1_E44C); - lbl_1_bss_7F8->work[3] = rand8() % 200 + 10; - lbl_1_bss_7E4 = GWSystem.player_curr; - BoardPlayerPosGet(lbl_1_bss_7E4, &lbl_1_bss_7C4); - lbl_1_bss_7EC = 1.0f; - lbl_1_bss_7E8 = 1.0f; - lbl_1_bss_7AA = 0; - lbl_1_bss_7BC = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F40[GWPlayer[lbl_1_bss_7E4].character]); - lbl_1_bss_7B8 = BoardPlayerMotionCreate(lbl_1_bss_7E4, lbl_1_data_F60[GWPlayer[lbl_1_bss_7E4].character]); - lbl_1_bss_7A0 = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); - HuSprAnimLock(lbl_1_bss_7A0); - lbl_1_bss_7B4 = 0; + roundItemMainObj = omAddObjEx(boardObjMan, 0x101, 0, 0, -1, RoundItemMainUpdate); + roundItemUmaObj = omAddObjEx(boardObjMan, 0x133, 0, 0, -1, RoundItemUmaStop); + roundItemUmaObj->work[3] = rand8() % 200 + 10; + roundItemPlayer = GWSystem.player_curr; + BoardPlayerPosGet(roundItemPlayer, &roundItemPlayerPos); + umaSpeed = 1.0f; + borderSpeed = 1.0f; + roundItemStopF = 0; + itemGetMotId = BoardPlayerMotionCreate(roundItemPlayer, itemGetMotTbl[GWPlayer[roundItemPlayer].character]); + jumpMotId = BoardPlayerMotionCreate(roundItemPlayer, jumpMotTbl[GWPlayer[roundItemPlayer].character]); + roundItemEffAnim = HuSprAnimReadFile(DATA_MAKE_NUM(DATADIR_EFFECT, 0)); + HuSprAnimLock(roundItemEffAnim); + umaStopF = 0; } -static void fn_1_E100(void) +static void RoundItemEnd(void) { - lbl_1_bss_7AA = 1; + roundItemStopF = 1; BoardMGExit(); HuAudFXPlay(0x40F); - BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); + BoardModelMotionStart(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP], 0, HU3D_MOTATTR_REV); } -static void fn_1_E154(void) +static void RoundItemClose(void) { - fn_1_DD84(); - BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7BC); - BoardPlayerMotionKill(lbl_1_bss_7E4, lbl_1_bss_7B8); - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + RoundItemKill(); + BoardPlayerMotionKill(roundItemPlayer, itemGetMotId); + BoardPlayerMotionKill(roundItemPlayer, jumpMotId); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 0); BoardMGDoneFlagSet(0); } -static void fn_1_E2B8(omObjData *arg0) +static void RoundItemMainUpdate(omObjData *obj) { - if (lbl_1_bss_7AA == 1 && BoardMGDoneFlagGet() == 1) { - fn_1_E154(); - omDelObjEx(HuPrcCurrentGet(), arg0); + if (roundItemStopF == 1 && BoardMGDoneFlagGet() == 1) { + RoundItemClose(); + omDelObjEx(HuPrcCurrentGet(), obj); } } -static char *lbl_1_data_F9C[] = { "uma1", "uma2", "uma3", "uma4" }; +static char *umaHookTbl[] = { "uma1", "uma2", "uma3", "uma4" }; -static void fn_1_E44C(omObjData *arg0) +static void RoundItemUmaStop(omObjData *obj) { - Vec sp18; - Vec spC; - float temp_f27; - float var_f29; - float temp_f28; - float var_f26; - float var_f24; + Vec playerPos; + Vec objPos; + float umaDist; + float motTime; + float motMaxTime; + float umaMinDist; s32 i; - temp_f28 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); - var_f29 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); - if (var_f29 >= temp_f28) { - var_f29 -= temp_f28; + motMaxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + motTime = BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + if (motTime >= motMaxTime) { + motTime -= motMaxTime; } - var_f24 = fmod(var_f29, temp_f28 / 4); - if (var_f24 >= temp_f28 / 4 - 30.0f && lbl_1_bss_7B4 == 0) { - lbl_1_bss_7B4 = 1; - lbl_1_bss_7A8 = 90; + if (fmodf(motTime, motMaxTime / 4) >= motMaxTime / 4 - 30.0f && umaStopF == 0) { + umaStopF = 1; + umaStopTimer = 90; } - if (lbl_1_bss_7B4 != 0) { - lbl_1_bss_7EC *= 0.97f; - lbl_1_bss_7A8--; + if (umaStopF != 0) { + umaSpeed *= 0.97f; + umaStopTimer--; } - if (lbl_1_bss_7EC != 1.0f && lbl_1_bss_7A8 == 0) { - lbl_1_bss_7EC = 0.0f; + if (umaSpeed != 1.0f && umaStopTimer == 0) { + umaSpeed = 0.0f; BoardAudSeqPause(0, 1, 1000); - BoardPlayerPosGet(lbl_1_bss_7E4, &sp18); - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[0], &spC); - var_f26 = VECSquareDistance(&sp18, &spC); - arg0->work[2] = 0; + BoardPlayerPosGet(roundItemPlayer, &playerPos); + Hu3DModelObjPosGet(BoardModelIDGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]), umaHookTbl[0], &objPos); + umaMinDist = VECSquareDistance(&playerPos, &objPos); + obj->work[2] = 0; for (i = 1; i < 4; i++) { - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[i], &spC); - temp_f27 = VECSquareDistance(&sp18, &spC); - if (temp_f27 < var_f26) { - var_f26 = temp_f27; - arg0->work[2] = i; + Hu3DModelObjPosGet(BoardModelIDGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]), umaHookTbl[i], &objPos); + umaDist = VECSquareDistance(&playerPos, &objPos); + if (umaDist < umaMinDist) { + umaMinDist = umaDist; + obj->work[2] = i; } } - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0->work[2]], &lbl_1_bss_7D8); - VECSubtract(&lbl_1_bss_7D8, &sp18, &spC); - VECNormalize(&spC, &spC); - arg0->trans.x = spC.x; - arg0->trans.y = spC.y; - arg0->trans.z = spC.z; - arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7D8, &sp18); - arg0->rot.y = 10.0f; - arg0->rot.z = sp18.y; - arg0->scale.x = 0.0f; - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE); - arg0->func = fn_1_E914; + Hu3DModelObjPosGet(BoardModelIDGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]), umaHookTbl[obj->work[2]], &umaPos); + VECSubtract(&umaPos, &playerPos, &objPos); + VECNormalize(&objPos, &objPos); + obj->trans.x = objPos.x; + obj->trans.y = objPos.y; + obj->trans.z = objPos.z; + obj->rot.x = VECDistanceXZ(&umaPos, &playerPos); + obj->rot.y = 10.0f; + obj->rot.z = playerPos.y; + obj->scale.x = 0.0f; + BoardPlayerMotionShiftSet(roundItemPlayer, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE); + obj->func = RoundItemPlayerJump; } - BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], umaSpeed); } -static void fn_1_E914(omObjData *arg0) +static void RoundItemPlayerJump(omObjData *obj) { - Vec spC; + Vec pos; s32 i; - BoardPlayerPosGet(lbl_1_bss_7E4, &spC); - spC.x += arg0->trans.x * arg0->rot.x / 32.760002f; - spC.z += arg0->trans.z * arg0->rot.x / 32.760002f; - spC.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x; - arg0->scale.x += 1.0f; - if (VECDistanceXZ(&lbl_1_bss_7D8, &spC) < 2.0f) { - spC = lbl_1_bss_7D8; - BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10BB0(arg0->work[2]), 0.0f); - lbl_1_bss_7EC = 0.05f; - lbl_1_bss_7E8 = 0.05f; - BoardModelAttrReset(lbl_1_bss_6C4[18], 0x40000002); - BoardModelAttrSet(lbl_1_bss_6C4[18], 0x40000001); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); + BoardPlayerPosGet(roundItemPlayer, &pos); + pos.x += obj->trans.x * obj->rot.x / 32.760002f; + pos.z += obj->trans.z * obj->rot.x / 32.760002f; + pos.y += obj->rot.y - 0.016666668f * obj->scale.x * obj->scale.x; + obj->scale.x += 1.0f; + if (VECDistanceXZ(&umaPos, &pos) < 2.0f) { + pos = umaPos; + BoardPlayerRotSet(roundItemPlayer, 0.0f, RoundItemUmaRotYGet(obj->work[2]), 0.0f); + umaSpeed = 0.05f; + borderSpeed = 0.05f; + BoardModelAttrReset(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], HU3D_MOTATTR_PAUSE); + BoardModelAttrSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], HU3D_MOTATTR_LOOP); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], 0.0f); for (i = 0; i < 4; i++) { - lbl_1_bss_7FC[i]->func = fn_1_FED0; + itemObj[i]->func = RoundItemItemUpdate; } - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7B8, 0.0f, 5.0f, HU3D_MOTATTR_LOOP); - lbl_1_bss_7D6 = MGSeqStartCreate(); + BoardPlayerMotionShiftSet(roundItemPlayer, jumpMotId, 0.0f, 5.0f, HU3D_MOTATTR_LOOP); + seqStartId = MGSeqStartCreate(); BoardMusStart(1, 0xE, 0x7F, 0); - arg0->func = fn_1_ECD4; + obj->func = RoundItemStartWait; } - BoardPlayerPosSetV(lbl_1_bss_7E4, &spC); + BoardPlayerPosSetV(roundItemPlayer, &pos); } -static void fn_1_ECD4(omObjData *arg0) +static void RoundItemStartWait(omObjData *obj) { - lbl_1_bss_7EC *= 1.05f; - lbl_1_bss_7E8 *= 1.05f; - if (lbl_1_bss_7EC > 2.0f) { - lbl_1_bss_7EC = 2.0f; + umaSpeed *= 1.05f; + borderSpeed *= 1.05f; + if (umaSpeed > 2.0f) { + umaSpeed = 2.0f; } - if (lbl_1_bss_7E8 > 4.0f) { - lbl_1_bss_7E8 = 4.0f; + if (borderSpeed > 4.0f) { + borderSpeed = 4.0f; } - if (MGSeqStatGet(lbl_1_bss_7D6) == 0) { - lbl_1_bss_7EC = 2.0f; - lbl_1_bss_7E8 = 4.0f; - arg0->func = fn_1_EED8; - lbl_1_bss_7D2 = 5; - lbl_1_bss_7D0 = REFRESH_RATE; - lbl_1_bss_7D4 = MGSeqTimerCreateXY(lbl_1_bss_7D2, 288, 64); + if (MGSeqStatGet(seqStartId) == 0) { + umaSpeed = 2.0f; + borderSpeed = 4.0f; + obj->func = RoundItemInputWait; + timerSec = 5; + timerFrame = REFRESH_RATE; + timerSeqId = MGSeqTimerCreateXY(timerSec, 288, 64); } - BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], lbl_1_bss_7EC); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8); - fn_1_10CF0(arg0->work[2]); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], umaSpeed); + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], borderSpeed); + RoundItemUmaPlayerSet(obj->work[2]); } -static void fn_1_EEA0(omObjData *arg0, u16 *arg1) +static void RoundItemComInputGet(omObjData *obj, u16 *btn) { - *arg1 = 0; - if (arg0->work[3] != 0) { - arg0->work[3]--; + *btn = 0; + if (obj->work[3] != 0) { + obj->work[3]--; } else { - *arg1 |= 0x100; + *btn |= PAD_BUTTON_A; } } -static void fn_1_EED8(omObjData *arg0) +static void RoundItemInputWait(omObjData *obj) { - s16 temp_r29; - u16 var_r30; + s16 padNo; + u16 btn; - fn_1_10CF0(arg0->work[2]); - temp_r29 = GWPlayer[lbl_1_bss_7E4].port; - if ((--lbl_1_bss_7D0) == 0) { - if ((--lbl_1_bss_7D2) >= 0) { - MGSeqParamSet(lbl_1_bss_7D4, 1, lbl_1_bss_7D2); + RoundItemUmaPlayerSet(obj->work[2]); + padNo = GWPlayer[roundItemPlayer].port; + if ((--timerFrame) == 0) { + if ((--timerSec) >= 0) { + MGSeqParamSet(timerSeqId, 1, timerSec); } - lbl_1_bss_7D0 = REFRESH_RATE; + timerFrame = REFRESH_RATE; } - if (GWPlayerCfg[lbl_1_bss_7E4].iscom == 1) { - fn_1_EEA0(arg0, &var_r30); + if (GWPlayerCfg[roundItemPlayer].iscom == 1) { + RoundItemComInputGet(obj, &btn); } else { - var_r30 = HuPadBtnDown[temp_r29]; + btn = HuPadBtnDown[padNo]; } - if (lbl_1_bss_7D2 < 0 || (var_r30 & 0x100)) { - BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 0.0f); - MGSeqParamSet(lbl_1_bss_7D4, 2, -1); - arg0->scale.y = 0.0f; - arg0->func = fn_1_F09C; + if (timerSec < 0 || (btn & PAD_BUTTON_A)) { + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], 0.0f); + MGSeqParamSet(timerSeqId, 2, -1); + obj->scale.y = 0.0f; + obj->func = RoundItemStop; } } -static void fn_1_F09C(omObjData *arg0) +static void RoundItemStop(omObjData *obj) { - float temp_f31; - float var_f30; + float maxTime; + float time; - temp_f31 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); - arg0->scale.y += lbl_1_bss_7E8; - if (arg0->scale.y >= temp_f31 - 150.0f) { - lbl_1_bss_7E8 *= 0.9745f; - if (lbl_1_bss_7E8 < 0.08f) { - lbl_1_bss_7E8 = 0.08f; + maxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); + obj->scale.y += borderSpeed; + if (obj->scale.y >= maxTime - 150.0f) { + borderSpeed *= 0.9745f; + if (borderSpeed < 0.08f) { + borderSpeed = 0.08f; } } - BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], lbl_1_bss_7E8); - if (arg0->scale.y >= temp_f31) { - BoardModelMotionSpeedSet(lbl_1_bss_6C4[18], 0.0f); - var_f30 = arg0->scale.y - temp_f31 + BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); - if (var_f30 > temp_f31) { - var_f30 -= temp_f31; + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], borderSpeed); + if (obj->scale.y >= maxTime) { + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], 0.0f); + time = obj->scale.y - maxTime + BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); + if (time > maxTime) { + time -= maxTime; } - BoardModelMotionTimeSet(lbl_1_bss_6C4[18], var_f30); - arg0->work[0] = fn_1_1001C(arg0->work[2]); - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1); - BoardModelPosSet(lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->trans.x, lbl_1_bss_7FC[arg0->work[0]]->trans.y + 1.0f, - lbl_1_bss_7FC[arg0->work[0]]->trans.z); + BoardModelMotionTimeSet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER], time); + obj->work[0] = RoundItemItemGet(obj->work[2]); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 1); + BoardModelPosSet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], itemObj[obj->work[0]]->trans.x, itemObj[obj->work[0]]->trans.y + 1.0f, + itemObj[obj->work[0]]->trans.z); BoardModelRotSet( - lbl_1_bss_6C4[20], lbl_1_bss_7FC[arg0->work[0]]->rot.x, lbl_1_bss_7FC[arg0->work[0]]->rot.y + 1.0f, lbl_1_bss_7FC[arg0->work[0]]->rot.z); - arg0->work[1] = 60; + mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], itemObj[obj->work[0]]->rot.x, itemObj[obj->work[0]]->rot.y + 1.0f, itemObj[obj->work[0]]->rot.z); + obj->work[1] = 60; BoardAudSeqFadeOut(1, 100); - arg0->func = fn_1_F348; + obj->func = RoundItemLightFlicker; HuAudFXPlay(0x40A); } } -static void fn_1_F348(omObjData *arg0) +static void RoundItemLightFlicker(omObjData *obj) { - if ((arg0->work[1] / 4) & 1) { - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); + if ((obj->work[1] / 4) & 1) { + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 0); } else { - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 1); + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 1); } - if ((arg0->work[1] -= 1) == 0) { - BoardModelVisibilitySet(lbl_1_bss_6C4[20], 0); - fn_1_101B8(arg0->work[0]); + if ((--obj->work[1]) == 0) { + BoardModelVisibilitySet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_LIGHT], 0); + ItemGetCreate(obj->work[0]); HuAudFXPlay(0x310); - arg0->func = fn_1_F3F8; + obj->func = RoundItemUmaJumpWait; } } -static void fn_1_F3F8(omObjData *arg0) +static void RoundItemUmaJumpWait(omObjData *obj) { - Vec sp18; - Vec spC; + Vec playerPos; + Vec dir; - if (lbl_1_bss_7F0->work[0] != 1) { + if (itemGetObj->work[0] != 1) { return; } - BoardPlayerPosGet(lbl_1_bss_7E4, &sp18); - VECSubtract(&lbl_1_bss_7C4, &sp18, &spC); - VECNormalize(&spC, &spC); - arg0->trans.x = spC.x; - arg0->trans.y = spC.y; - arg0->trans.z = spC.z; - arg0->rot.x = VECDistanceXZ(&lbl_1_bss_7C4, &sp18); - arg0->scale.y = 20.0f + 40.0f * (arg0->rot.x / 445.0f); - arg0->rot.y = 0.016666668f * (arg0->scale.y / 2) * (arg0->scale.y / 2); - arg0->rot.z = sp18.y; - arg0->scale.x = 0.0f; - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE); - VECSubtract(&lbl_1_bss_7C4, &sp18, &spC); - VECNormalize(&spC, &spC); - BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, fn_1_10EB8(&spC), 0.0f); - arg0->func = fn_1_F6E8; + BoardPlayerPosGet(roundItemPlayer, &playerPos); + VECSubtract(&roundItemPlayerPos, &playerPos, &dir); + VECNormalize(&dir, &dir); + obj->trans.x = dir.x; + obj->trans.y = dir.y; + obj->trans.z = dir.z; + obj->rot.x = VECDistanceXZ(&roundItemPlayerPos, &playerPos); + obj->scale.y = 20.0f + 40.0f * (obj->rot.x / 445.0f); + obj->rot.y = 0.016666668f * (obj->scale.y / 2) * (obj->scale.y / 2); + obj->rot.z = playerPos.y; + obj->scale.x = 0.0f; + BoardPlayerMotionShiftSet(roundItemPlayer, 4, 0.0f, 5.0f, HU3D_MOTATTR_NONE); + VECSubtract(&roundItemPlayerPos, &playerPos, &dir); + VECNormalize(&dir, &dir); + BoardPlayerRotSet(roundItemPlayer, 0.0f, RoundItemAngleGet(&dir), 0.0f); + obj->func = RoundItemUmaJump; } -static void fn_1_F6E8(omObjData *arg0) +static void RoundItemUmaJump(omObjData *obj) { - Vec sp8; + Vec pos; - BoardPlayerPosGet(lbl_1_bss_7E4, &sp8); - sp8.x += arg0->trans.x * arg0->rot.x / arg0->scale.y; - sp8.z += arg0->trans.z * arg0->rot.x / arg0->scale.y; - sp8.y += arg0->rot.y - 0.016666668f * arg0->scale.x * arg0->scale.x; - arg0->scale.x += 1.0f; - if (sp8.y < lbl_1_bss_80C.y || arg0->scale.x >= arg0->scale.y) { - sp8.y = lbl_1_bss_80C.y; - BoardCameraMotionStart(BoardPlayerModelGet(lbl_1_bss_7E4), NULL, 700.0f, -1.0f); - BoardPlayerMotionStart(lbl_1_bss_7E4, 2, 0x40000001); - arg0->func = fn_1_F890; + BoardPlayerPosGet(roundItemPlayer, &pos); + pos.x += obj->trans.x * obj->rot.x / obj->scale.y; + pos.z += obj->trans.z * obj->rot.x / obj->scale.y; + pos.y += obj->rot.y - 0.016666668f * obj->scale.x * obj->scale.x; + obj->scale.x += 1.0f; + if (pos.y < roundItemPos.y || obj->scale.x >= obj->scale.y) { + pos.y = roundItemPos.y; + BoardCameraMotionStart(BoardPlayerModelGet(roundItemPlayer), NULL, 700.0f, -1.0f); + BoardPlayerMotionStart(roundItemPlayer, 2, HU3D_MOTATTR_LOOP); + obj->func = RoundItemRotatePlayer; } - BoardPlayerPosSetV(lbl_1_bss_7E4, &sp8); + BoardPlayerPosSetV(roundItemPlayer, &pos); } -static void fn_1_F890(omObjData *arg0) +static void RoundItemRotatePlayer(omObjData *obj) { - Vec sp8; + Vec rot; - BoardPlayerRotGet(lbl_1_bss_7E4, &sp8); - if (sp8.y == 0.0f) { - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); - lbl_1_bss_7F0->work[0] = 0; - lbl_1_bss_7F0->func = fn_1_10820; - arg0->func = fn_1_FA1C; + BoardPlayerRotGet(roundItemPlayer, &rot); + if (rot.y == 0.0f) { + BoardPlayerMotionShiftSet(roundItemPlayer, 1, 0.0f, 10.0f, HU3D_MOTATTR_LOOP); + itemGetObj->work[0] = 0; + itemGetObj->func = ItemGetPlayerMove; + obj->func = RoundItemStreamWait; } - else if (sp8.y > 180.0f) { - if (360.0f - sp8.y < 3.0f) { - sp8.y = 0.0f; + else if (rot.y > 180.0f) { + if (360.0f - rot.y < 3.0f) { + rot.y = 0.0f; } else { - sp8.y += 3.0f; + rot.y += 3.0f; } } else { - if (sp8.y < 3.0f) { - sp8.y = 0.0f; + if (rot.y < 3.0f) { + rot.y = 0.0f; } else { - sp8.y -= 3.0f; + rot.y -= 3.0f; } } - BoardPlayerRotSetV(lbl_1_bss_7E4, &sp8); + BoardPlayerRotSetV(roundItemPlayer, &rot); } -static void fn_1_FA1C(omObjData *arg0) +static void RoundItemStreamWait(omObjData *obj) { - if (lbl_1_bss_7F0->work[0] == 1) { - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, lbl_1_bss_7BC, 0.0f, 10.0f, HU3D_MOTATTR_NONE); - arg0->work[0] = 30; - lbl_1_bss_7A4 = HuAudSStreamPlay(2); - arg0->func = fn_1_FABC; + if (itemGetObj->work[0] == 1) { + BoardPlayerMotionShiftSet(roundItemPlayer, itemGetMotId, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + obj->work[0] = 30; + roundItemStreamId = HuAudSStreamPlay(2); + obj->func = RoundItemWinWait; } } -static void fn_1_FABC(omObjData *arg0) +static void RoundItemWinWait(omObjData *obj) { - Process *var_r30; + Process *proc; - if (arg0->work[0] == 0) { - if (HuAudSStreamStatGet(lbl_1_bss_7A4) == 0) { - var_r30 = HuPrcCreate(fn_1_FB58, 0x2004, 0x1000, 0); - var_r30->user_data = arg0; + if (obj->work[0] == 0) { + if (HuAudSStreamStatGet(roundItemStreamId) == 0) { + proc = HuPrcCreate(ItemGetWinExec, 0x2004, 0x1000, 0); + proc->user_data = obj; BoardAudSeqPause(0, 0, 1000); - arg0->func = NULL; + obj->func = NULL; } } else { - arg0->work[0]--; + obj->work[0]--; } } -static void fn_1_FB58(void) +static void ItemGetWinExec(void) { - omObjData *temp_r31; + omObjData *obj; BoardWinCreate(2, MAKE_MESSID(10, 6), 0); - BoardWinInsertMesSet(MAKE_MESSID(8, lbl_1_bss_7F0->work[1]), 0); + BoardWinInsertMesSet(MAKE_MESSID(8, itemGetObj->work[1]), 0); BoardWinWait(); BoardWinKill(); - temp_r31 = HuPrcCurrentGet()->user_data; - BoardPlayerMotionShiftSet(lbl_1_bss_7E4, 1, 0.0f, 10.0f, HU3D_MOTATTR_NONE); - lbl_1_bss_7F0->work[0] = 0; + obj = HuPrcCurrentGet()->user_data; + BoardPlayerMotionShiftSet(roundItemPlayer, 1, 0.0f, 10.0f, HU3D_MOTATTR_NONE); + itemGetObj->work[0] = 0; HuAudFXPlay(0x30D); - HuAudFXFadeOut(lbl_1_bss_7AC, 1000); - lbl_1_bss_7F0->func = fn_1_10AE8; - temp_r31->func = fn_1_FC3C; + HuAudFXFadeOut(itemGetSeNo, 1000); + itemGetObj->func = ItemGetShrink; + obj->func = ItemGetShrinkWait; HuPrcKill(NULL); while (TRUE) { HuPrcVSleep(); } } -static void fn_1_FC3C(omObjData *arg0) +static void ItemGetShrinkWait(omObjData *obj) { - Process *var_r31; + Process *proc; - if (lbl_1_bss_7F0->work[0] == 1) { - BoardPlayerItemAdd(lbl_1_bss_7E4, lbl_1_bss_7F0->work[1]); - omVibrate(lbl_1_bss_7E4, 12, 6, 6); - var_r31 = HuPrcCreate(fn_1_FCEC, 0x2004, 0x1000, 0); - var_r31->user_data = arg0; - arg0->func = NULL; + if (itemGetObj->work[0] == 1) { + BoardPlayerItemAdd(roundItemPlayer, itemGetObj->work[1]); + omVibrate(roundItemPlayer, 12, 6, 6); + proc = HuPrcCreate(ItemGetReturnWinExec, 0x2004, 0x1000, 0); + proc->user_data = obj; + obj->func = NULL; } } -static void fn_1_FCEC(void) +static void ItemGetReturnWinExec(void) { - omObjData *var_r31; + omObjData *obj; BoardWinCreate(2, MAKE_MESSID(10, 7), 0); BoardWinWait(); BoardWinKill(); - var_r31 = HuPrcCurrentGet()->user_data; - var_r31->func = fn_1_FD3C; + obj = HuPrcCurrentGet()->user_data; + obj->func = RoundItemGameClose; HuPrcKill(NULL); while (TRUE) { HuPrcVSleep(); } } -static void fn_1_FD3C(omObjData *arg0) +static void RoundItemGameClose(omObjData *obj) { BoardStatusShowSetAll(1); - BoardCameraTargetModelSet(lbl_1_bss_6C4[21]); + BoardCameraTargetModelSet(mapObjMdlId[MAPOBJ_ROUNDITEM_ITEM_UP]); BoardCameraOffsetSet(0.0f, 0.0f, 0.0f); BoardCameraXRotZoomSet(1200.0f, -45.0f); - BoardModelMotionSpeedSet(lbl_1_bss_6C4[17], 1.0f); - Hu3DModelKill(lbl_1_bss_7F0->model[0]); - Hu3DModelKill(lbl_1_bss_7F0->model[1]); - Hu3DModelKill(lbl_1_bss_7F0->model[2]); - omDelObjEx(HuPrcCurrentGet(), lbl_1_bss_7F0); - arg0->func = fn_1_FE44; + BoardModelMotionSpeedSet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA], 1.0f); + Hu3DModelKill(itemGetObj->model[0]); + Hu3DModelKill(itemGetObj->model[1]); + Hu3DModelKill(itemGetObj->model[2]); + omDelObjEx(HuPrcCurrentGet(), itemGetObj); + obj->func = RoundItemGameEnd; } -static void fn_1_FE44(omObjData *arg0) +static void RoundItemGameEnd(omObjData *obj) { - if (BoardStatusStopCheck(lbl_1_bss_7E4) && BoardCameraMotionIsDone()) { - lbl_1_bss_7AA = 1; - BoardMGExit(); - HuAudFXPlay(0x40F); - BoardModelMotionStart(lbl_1_bss_6C4[21], 0, 0x40000004); - arg0->func = NULL; + if (BoardStatusStopCheck(roundItemPlayer) && BoardCameraMotionIsDone()) { + RoundItemEnd(); + obj->func = NULL; } } -static void fn_1_FED0(omObjData *arg0) +static void RoundItemItemUpdate(omObjData *obj) { - float temp_f30; - float var_f31; - float var_f29; + float time; + float rotY; + float maxTime; - temp_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[18]); - var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); - var_f31 = 90.0f - 90.0f * arg0->work[2] + 360.0f * (temp_f30 / var_f29); - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; + time = BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); + maxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]); + rotY = 90.0f - 90.0f * obj->work[2] + 360.0f * (time / maxTime); + if (rotY >= 360.0f) { + rotY -= 360.0f; } - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + if (rotY < 0.0f) { + rotY += 360.0f; } - omSetRot(arg0, 0.0f, var_f31, 0.0f); + omSetRot(obj, 0.0f, rotY, 0.0f); } -static s16 fn_1_1001C(u32 arg0) +static s16 RoundItemItemGet(u32 umaNo) { - float var_f29; - float var_f28; - float temp_f27; - float temp_f26; - float var_f31; - float var_f30; + float umaMaxTime; + float umaAngle; + float borderAngle; + float angle; + float umaTime; - temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); - temp_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26); - var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); - var_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); - var_f30 = var_f30 - (var_f29 / 4) * arg0; - if (var_f30 < 0.0f) { - var_f30 += var_f29; + borderAngle = 360.0f - 360.0f * (BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]) / BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER])); + umaTime = BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + umaMaxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + umaTime = umaTime - (umaMaxTime / 4) * umaNo; + if (umaTime < 0.0f) { + umaTime += umaMaxTime; } - var_f28 = 360.0f * (var_f30 / var_f29); - var_f31 = var_f28 - temp_f27; - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + umaAngle = 360.0f * (umaTime / umaMaxTime); + angle = umaAngle - borderAngle; + if (angle < 0.0f) { + angle += 360.0f; } - var_f31 /= 90.0f; - return var_f31; + angle /= 90.0f; + return angle; } -static void fn_1_101B8(s16 arg0) +static void ItemGetCreate(s16 itemNo) { - omObjData *var_r31; - float *var_r30; - float var_f27; - float temp_f26; - float temp_f30; - float temp_f29; - float temp_f28; - float var_f31; + omObjData *obj; + float *data; + float borderAngle; + float posX; + float posY; + float posZ; + float angle; - var_r31 = lbl_1_bss_7F0 = omAddObjEx(boardObjMan, 0x165, 3, 0, -1, fn_1_10664); - var_r31->model[0] = lbl_1_bss_7FC[arg0]->model[1]; - Hu3DModelAttrReset(var_r31->model[0], HU3D_ATTR_DISPOFF); - lbl_1_bss_7F0->work[1] = lbl_1_bss_7FC[arg0]->work[1]; - lbl_1_bss_7F0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3 * sizeof(float), MEMORY_DEFAULT_NUM); - var_r30 = lbl_1_bss_7F0->data; - omSetRot(var_r31, 0.0f, 0.0f, 0.0f); - omSetSca(var_r31, 0.0f, 0.0f, 0.0f); - temp_f26 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[18]); - var_f27 = 360.0f - 360.0f * (BoardModelMotionTimeGet(lbl_1_bss_6C4[18]) / temp_f26); - var_f31 = 45.0f + var_f27 + 90.0f * arg0; - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; + obj = itemGetObj = omAddObjEx(boardObjMan, 0x165, 3, 0, -1, ItemGetObjUpdate); + obj->model[0] = itemObj[itemNo]->model[1]; + Hu3DModelAttrReset(obj->model[0], HU3D_ATTR_DISPOFF); + itemGetObj->work[1] = itemObj[itemNo]->work[1]; + itemGetObj->data = HuMemDirectMallocNum(HEAP_SYSTEM, 3 * sizeof(float), MEMORY_DEFAULT_NUM); + data = itemGetObj->data; + omSetRot(obj, 0.0f, 0.0f, 0.0f); + omSetSca(obj, 0.0f, 0.0f, 0.0f); + borderAngle = 360.0f - 360.0f * (BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER]) / BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_BORDER])); + angle = 45.0f + borderAngle + 90.0f * itemNo; + if (angle >= 360.0f) { + angle -= 360.0f; } - temp_f30 = lbl_1_bss_80C.x - 100.0 * cosd(var_f31); - temp_f28 = lbl_1_bss_80C.z - 100.0 * sind(var_f31); - temp_f29 = lbl_1_bss_80C.y + 66.0f + 1.0f; - omSetTra(var_r31, temp_f30, temp_f29, temp_f28); - var_r31->work[0] = 0; - var_r30[0] = 0.1f; - var_r30[2] = 20.0f; - var_r30[1] = 0.0f; - var_r31->model[1] = Hu3DParticleCreate(lbl_1_bss_7A0, 200); - var_r31->model[2] = Hu3DParticleCreate(lbl_1_bss_7A0, 100); - Hu3DParticleHookSet(var_r31->model[1], fn_1_11064); - Hu3DParticleHookSet(var_r31->model[2], fn_1_11484); - Hu3DParticleColSet(var_r31->model[1], 0xFF, 0xFF, 0); - Hu3DParticleColSet(var_r31->model[2], 0xFF, 0xFF, 0); - Hu3DModelPosSet(var_r31->model[1], 0.0f, 0.0f, 0.0f); - Hu3DModelPosSet(var_r31->model[2], temp_f30, temp_f29, temp_f28); - Hu3DParticleBlendModeSet(var_r31->model[1], 1); - Hu3DParticleBlendModeSet(var_r31->model[2], 1); - Hu3DModelLayerSet(var_r31->model[1], 3); - Hu3DModelLayerSet(var_r31->model[2], 3); - lbl_1_bss_7AC = HuAudFXPlay(0x35F); + posX = roundItemPos.x - 100.0 * cosd(angle); + posZ = roundItemPos.z - 100.0 * sind(angle); + posY = roundItemPos.y + 66.0f + 1.0f; + omSetTra(obj, posX, posY, posZ); + obj->work[0] = 0; + data[0] = 0.1f; + data[2] = 20.0f; + data[1] = 0.0f; + obj->model[1] = Hu3DParticleCreate(roundItemEffAnim, 200); + obj->model[2] = Hu3DParticleCreate(roundItemEffAnim, 100); + Hu3DParticleHookSet(obj->model[1], ItemGetEff1Hook); + Hu3DParticleHookSet(obj->model[2], ItemGetEff2Hook); + Hu3DParticleColSet(obj->model[1], 0xFF, 0xFF, 0); + Hu3DParticleColSet(obj->model[2], 0xFF, 0xFF, 0); + Hu3DModelPosSet(obj->model[1], 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(obj->model[2], posX, posY, posZ); + Hu3DParticleBlendModeSet(obj->model[1], 1); + Hu3DParticleBlendModeSet(obj->model[2], 1); + Hu3DModelLayerSet(obj->model[1], 3); + Hu3DModelLayerSet(obj->model[2], 3); + itemGetSeNo = HuAudFXPlay(0x35F); } -static void fn_1_10664(omObjData *arg0) +static void ItemGetObjUpdate(omObjData *obj) { - float *temp_r31; - float var_f31; + float *data; + float scale; - temp_r31 = arg0->data; - var_f31 = temp_r31[0]; - if (arg0->work[0] == 0) { - if (var_f31 > 1.0f) { - var_f31 = 1.0f; + data = obj->data; + scale = data[0]; + if (obj->work[0] == 0) { + if (scale > 1.0f) { + scale = 1.0f; } else { - temp_r31[0] += 0.025f; + data[0] += 0.025f; } - arg0->trans.y += temp_r31[2]; - temp_r31[2] -= 1.0f; - if (temp_r31[2] < 0.0f && arg0->trans.y < lbl_1_bss_80C.y + 66.0f + 1.0f + 90.0f) { - arg0->work[0] = 1; + obj->trans.y += data[2]; + data[2] -= 1.0f; + if (data[2] < 0.0f && obj->trans.y < roundItemPos.y + 66.0f + 1.0f + 90.0f) { + obj->work[0] = 1; } - omSetSca(arg0, var_f31, var_f31, var_f31); + omSetSca(obj, scale, scale, scale); } else { - arg0->trans.y += sind(temp_r31[1]); - temp_r31[1] += 4.0f; - if (temp_r31[1] >= 360.0f) { - temp_r31[1] -= 360.0f; + obj->trans.y += sind(data[1]); + data[1] += 4.0f; + if (data[1] >= 360.0f) { + data[1] -= 360.0f; } } } -static void fn_1_10820(omObjData *arg0) +static void ItemGetPlayerMove(omObjData *obj) { - Vec sp24; - Vec sp18; - Vec spC; + Vec playerPos; + Vec objPos; + Vec dir; float var_f28; - float *temp_r30; + float *data; - temp_r30 = arg0->data; - if (arg0->work[0] == 0) { - BoardPlayerPosGet(lbl_1_bss_7E4, &sp24); - sp18.x = arg0->trans.x; - sp18.y = 0.0f; - sp18.z = arg0->trans.z; - sp24.y = 0.0f; - VECSubtract(&sp24, &sp18, &spC); - VECNormalize(&spC, &spC); - var_f28 = VECDistanceXZ(&sp24, &sp18); + data = obj->data; + if (obj->work[0] == 0) { + BoardPlayerPosGet(roundItemPlayer, &playerPos); + objPos.x = obj->trans.x; + objPos.y = 0.0f; + objPos.z = obj->trans.z; + playerPos.y = 0.0f; + VECSubtract(&playerPos, &objPos, &dir); + VECNormalize(&dir, &dir); + var_f28 = VECDistanceXZ(&playerPos, &objPos); if (var_f28 < 8.0f) { - arg0->trans.x = sp24.x; - arg0->trans.z = sp24.z; - arg0->work[0] = 1; + obj->trans.x = playerPos.x; + obj->trans.z = playerPos.z; + obj->work[0] = 1; } else { - arg0->trans.x += 8.0f * spC.x; - arg0->trans.z += 8.0f * spC.z; + obj->trans.x += 8.0f * dir.x; + obj->trans.z += 8.0f * dir.z; } } - arg0->trans.y += sind(temp_r30[1]); - temp_r30[1] += 4.0f; - if (temp_r30[1] >= 360.0f) { - temp_r30[1] -= 360.0f; + obj->trans.y += sind(data[1]); + data[1] += 4.0f; + if (data[1] >= 360.0f) { + data[1] -= 360.0f; } } -static void fn_1_10AE8(omObjData *arg0) +static void ItemGetShrink(omObjData *obj) { - float *temp_r31; + float *data; - temp_r31 = arg0->data; - if (arg0->work[0] == 0) { - temp_r31[0] -= 0.016666668f; - if (temp_r31[0] <= 0.0f) { - temp_r31[0] = 0.0f; - arg0->work[0] = 1; - HuAudFXStop(lbl_1_bss_7AC); + data = obj->data; + if (obj->work[0] == 0) { + data[0] -= 0.016666668f; + if (data[0] <= 0.0f) { + data[0] = 0.0f; + obj->work[0] = 1; + HuAudFXStop(itemGetSeNo); } - arg0->trans.y -= 2.1666667f; + obj->trans.y -= 2.1666667f; } - omSetSca(arg0, temp_r31[0], temp_r31[0], temp_r31[0]); + omSetSca(obj, data[0], data[0], data[0]); } -static float fn_1_10BB0(u32 arg0) +static float RoundItemUmaRotYGet(u32 umaNo) { - float var_f30; - float temp_f29; - float var_f31; + float time; + float maxTime; + float rotY; - var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); - temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); - var_f30 = var_f30 - (temp_f29 / 4) * arg0; - if (var_f30 < 0.0f) { - var_f30 += temp_f29; + time = BoardModelMotionTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + maxTime = BoardModelMotionMaxTimeGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]); + time = time - (maxTime / 4) * umaNo; + if (time < 0.0f) { + time += maxTime; } - var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29); - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; + rotY = 180.0f + -360.0f * (time / maxTime); + if (rotY >= 360.0f) { + rotY -= 360.0f; } - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + if (rotY < 0.0f) { + rotY += 360.0f; } - return var_f31; + return rotY; } -static void fn_1_10CF0(u32 arg0) +static void RoundItemUmaPlayerSet(u32 umaNo) { - float var_f30; - float temp_f29; - float var_f31; - float var_f28; - - Hu3DModelObjPosGet(BoardModelIDGet(lbl_1_bss_6C4[17]), lbl_1_data_F9C[arg0], &lbl_1_bss_7D8); - BoardPlayerPosSetV(lbl_1_bss_7E4, &lbl_1_bss_7D8); - var_f30 = BoardModelMotionTimeGet(lbl_1_bss_6C4[17]); - temp_f29 = BoardModelMotionMaxTimeGet(lbl_1_bss_6C4[17]); - var_f30 = var_f30 - (temp_f29 / 4) * arg0; - if (var_f30 < 0.0f) { - var_f30 += temp_f29; - } - var_f31 = 180.0f + -360.0f * (var_f30 / temp_f29); - if (var_f31 >= 360.0f) { - var_f31 -= 360.0f; - } - if (var_f31 < 0.0f) { - var_f31 += 360.0f; - } - var_f28 = var_f31; - BoardPlayerRotSet(lbl_1_bss_7E4, 0.0f, var_f28, 0.0f); + Hu3DModelObjPosGet(BoardModelIDGet(mapObjMdlId[MAPOBJ_ROUNDITEM_UMA]), umaHookTbl[umaNo], &umaPos); + BoardPlayerPosSetV(roundItemPlayer, &umaPos); + BoardPlayerRotSet(roundItemPlayer, 0.0f, RoundItemUmaRotYGet(umaNo), 0.0f); } -static float fn_1_10EB8(Vec *arg0) +static float RoundItemAngleGet(Vec *dir) { - float var_f31; + float angle; - if (arg0->x || arg0->z) { - if (arg0->x == 0.0f) { - if (arg0->z > 0.0f) { + if (dir->x || dir->z) { + if (dir->x == 0.0f) { + if (dir->z > 0.0f) { return 0.0f; } else { return 180.0f; } } - if (arg0->z == 0.0f) { - if (arg0->x > 0.0f) { + if (dir->z == 0.0f) { + if (dir->x > 0.0f) { return 90.0f; } else { return 270.0f; } } - var_f31 = atan2d(arg0->z, arg0->x); - if (arg0->z < 0.0f) { - var_f31 = 90.0f - var_f31; + angle = atan2d(dir->z, dir->x); + if (dir->z < 0.0f) { + angle = 90.0f - angle; } else { - var_f31 = 90.0f - var_f31; - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + angle = 90.0f - angle; + if (angle < 0.0f) { + angle += 360.0f; } } - return var_f31; + return angle; } return -1.0f; } -static void fn_1_11064(ModelData *model, ParticleData *particle, Mtx matrix) +static void ItemGetEff1Hook(ModelData *model, ParticleData *particle, Mtx matrix) { - HsfanimStruct01 *var_r31; - float temp_f30; - float temp_f29; - float temp_f31; - s32 var_r28; + HsfanimStruct01 *particleDataP; + float angle; + float radius; + float radiusBase; + s32 j; s32 i; if (particle->unk_34 == 0) { - var_r31 = particle->unk_48; - for (i = 0; i < particle->unk_30; i++, var_r31++) { - var_r31->unk40.a = 0; - var_r31->unk2C = 0.0f; + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + particleDataP->unk40.a = 0; + particleDataP->unk2C = 0.0f; } particle->unk_00 = 0; } - temp_f31 = lbl_1_bss_7F0->scale.x; + radiusBase = itemGetObj->scale.x; for (i = 0; i < 30; i++) { - var_r31 = particle->unk_48; - for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { - if (var_r31->unk2C == 0.0f) { + particleDataP = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, particleDataP++) { + if (particleDataP->unk2C == 0.0f) { break; } } - if (var_r28 != particle->unk_30) { - temp_f30 = 0.003921569f * frand8() * 360.0f; - temp_f29 = 0.003921569f * frand8() * 70.0f * temp_f31; - var_r31->unk34.x = lbl_1_bss_7F0->trans.x + temp_f29 * sind(temp_f30); - var_r31->unk34.z = lbl_1_bss_7F0->trans.z + temp_f29 * cosd(temp_f30); - var_r31->unk34.y = lbl_1_bss_7F0->trans.y + temp_f31 * (-30.0f + 0.003921569f * frand8() * 60.0f); - var_r31->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; - var_r31->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; - var_r31->unk40.a = 0xB4; - var_r31->unk2C = 15.0f * temp_f31; + if (j != particle->unk_30) { + angle = 0.003921569f * frand8() * 360.0f; + radius = 0.003921569f * frand8() * 70.0f * radiusBase; + particleDataP->unk34.x = itemGetObj->trans.x + radius * sind(angle); + particleDataP->unk34.z = itemGetObj->trans.z + radius * cosd(angle); + particleDataP->unk34.y = itemGetObj->trans.y + radiusBase * (-30.0f + 0.003921569f * frand8() * 60.0f); + particleDataP->unk08.x = 0.5f + 0.003921569f * frand8() * 3.0f; + particleDataP->unk08.y = 0.3f + 0.003921569f * frand8() * 2.0f; + particleDataP->unk40.a = 0xB4; + particleDataP->unk2C = 15.0f * radiusBase; } } - var_r31 = particle->unk_48; - for (i = 0; i < particle->unk_30; i++, var_r31++) { - if (var_r31->unk2C != 0.0f) { - var_r31->unk34.y -= var_r31->unk08.x; - var_r31->unk2C -= var_r31->unk08.y; - if (var_r31->unk2C <= 0.0f) { - var_r31->unk2C = 0.0f; + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + if (particleDataP->unk2C != 0.0f) { + particleDataP->unk34.y -= particleDataP->unk08.x; + particleDataP->unk2C -= particleDataP->unk08.y; + if (particleDataP->unk2C <= 0.0f) { + particleDataP->unk2C = 0.0f; } } } } -static void fn_1_11484(ModelData *model, ParticleData *particle, Mtx matrix) +static void ItemGetEff2Hook(ModelData *model, ParticleData *particle, Mtx matrix) { - HsfanimStruct01 *var_r31; - float temp_f29; - float temp_f30; - float temp_f31; - s32 var_r28; - s32 var_r29; + HsfanimStruct01 *particleDataP; + float angle2; + float angle; + float radius; + s32 j; + s32 i; if (particle->unk_34 == 0) { - var_r31 = particle->unk_48; - for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { - var_r31->unk40.a = 0; - var_r31->unk2C = 0.0f; + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + particleDataP->unk40.a = 0; + particleDataP->unk2C = 0.0f; } particle->unk_00 = 0; } if (particle->unk_00 == 0) { - var_r31 = particle->unk_48; - for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { - temp_f30 = 0.003921569f * frand8() * 360.0f; - temp_f31 = 0.003921569f * frand8() * 50.0f; - var_r31->unk08.x = temp_f31 * cosd(temp_f30); - var_r31->unk08.y = 2.0f + 0.003921569f * frand8() * 4.0f; - var_r31->unk08.z = temp_f31 * sind(temp_f30); - temp_f29 = 60.0f + 20.0f * frand8() * 0.003921569f; - temp_f31 = 4.0f + 5.0f * frand8() * 0.003921569f; - var_r31->unk14.x = temp_f31 * sind(temp_f30) * cosd(temp_f29); - var_r31->unk14.y = temp_f31 * sind(temp_f29); - var_r31->unk14.z = temp_f31 * cosd(temp_f30) * cosd(temp_f29); - var_r31->unk20 = 1.0f; - var_r31->unk40.a = 0xB4; - var_r31->unk2C = 9.0f + 0.003921569f * frand8() * 4.0f; + particleDataP = particle->unk_48; + for (j = 0; j < particle->unk_30; j++, particleDataP++) { + angle = 0.003921569f * frand8() * 360.0f; + radius = 0.003921569f * frand8() * 50.0f; + particleDataP->unk08.x = radius * cosd(angle); + particleDataP->unk08.y = 2.0f + 0.003921569f * frand8() * 4.0f; + particleDataP->unk08.z = radius * sind(angle); + angle2 = 60.0f + 20.0f * frand8() * 0.003921569f; + radius = 4.0f + 5.0f * frand8() * 0.003921569f; + particleDataP->unk14.x = radius * sind(angle) * cosd(angle2); + particleDataP->unk14.y = radius * sind(angle2); + particleDataP->unk14.z = radius * cosd(angle) * cosd(angle2); + particleDataP->unk20 = 1.0f; + particleDataP->unk40.a = 0xB4; + particleDataP->unk2C = 9.0f + 0.003921569f * frand8() * 4.0f; } particle->unk_00 = 1; } - var_r31 = particle->unk_48; - for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { - if (var_r31->unk2C != 0.0f) { - var_r31->unk34.x = var_r31->unk08.x + var_r31->unk14.x * var_r31->unk20; - var_r31->unk34.z = var_r31->unk08.z + var_r31->unk14.z * var_r31->unk20; - var_r31->unk34.y = var_r31->unk08.y + var_r31->unk14.y * var_r31->unk20 - 0.2f * var_r31->unk20 * var_r31->unk20; - var_r31->unk2C -= 0.25f; - var_r31->unk20 += 1.0f; - if (var_r31->unk2C <= 0.0f) { - var_r31->unk2C = 0.0f; + particleDataP = particle->unk_48; + for (i = 0; i < particle->unk_30; i++, particleDataP++) { + if (particleDataP->unk2C != 0.0f) { + particleDataP->unk34.x = particleDataP->unk08.x + particleDataP->unk14.x * particleDataP->unk20; + particleDataP->unk34.z = particleDataP->unk08.z + particleDataP->unk14.z * particleDataP->unk20; + particleDataP->unk34.y = particleDataP->unk08.y + particleDataP->unk14.y * particleDataP->unk20 - 0.2f * particleDataP->unk20 * particleDataP->unk20; + particleDataP->unk2C -= 0.25f; + particleDataP->unk20 += 1.0f; + if (particleDataP->unk2C <= 0.0f) { + particleDataP->unk2C = 0.0f; } } }