diff --git a/include/global.h b/include/global.h index a37350c..c993374 100644 --- a/include/global.h +++ b/include/global.h @@ -139,14 +139,14 @@ typedef struct unk_D_86002F58_004_000 { /* 0x01A */ s16 unk_01A; /* 0x01C */ u8 unk_01C; /* 0x01D */ u8 unk_01D; - /* 0x01E */ Vec3s unk_01E; - /* 0x024 */ Vec3f unk_024; - /* 0x030 */ Vec3f unk_030; + /* 0x01E */ Vec3s unk_01E; // total Rotation + /* 0x024 */ Vec3f unk_024; // global Position + /* 0x030 */ Vec3f unk_030; // scale /* 0x03C */ Color_RGBA8_u32 unk_03C; /* 0x040 */ unk_D_86002F58_004_000_040 unk_040; /* 0x054 */ unk_D_86002F58_004_000_054 unk_054; /* 0x060 */ MtxF unk_060; - /* 0x0A0 */ Color_RGBA8_u32 unk_0A0; + /* 0x0A0 */ Color_RGBA8_u32 unk_0A0; // vertex color ? /* 0x0A4 */ char unk0A4[2]; /* 0x0A6 */ u8 unk_0A6; /* 0x0A7 */ u8 unk_0A7; @@ -245,10 +245,10 @@ typedef struct unk_D_86002F34_00C_0CC { typedef struct unk_D_86002F34_00C { /* 0x00 */ GraphNode unk_00; - /* 0x18 */ unk_D_86002F34_00C_018 unk_18; - /* 0x24 */ unk_D_86002F34_00C_024 unk_24; + /* 0x18 */ unk_D_86002F34_00C_018 unk_18; // viewPort + /* 0x24 */ unk_D_86002F34_00C_024 unk_24; // projection /* 0x40 */ unk_D_86002F34_00C_040 unk_40; - /* 0x60 */ unk_D_86002F34_00C_060 unk_60; + /* 0x60 */ unk_D_86002F34_00C_060 unk_60; // camera /* 0xCC */ unk_D_86002F34_00C_0CC unk_CC; /* 0xEC */ char unkEC[0x4]; } unk_D_86002F34_00C; // size = 0xF0 @@ -434,7 +434,7 @@ typedef struct unk_D_86002F34_018 { /* 0x02 */ s16 width; /* 0x04 */ s16 height; /* 0x06 */ s16 num_texels; - /* 0x08 */ u8* texture; + /* 0x08 */ u32* texture; } unk_D_86002F34_018; // size = 0xC typedef struct unk_D_86002F34_01C { diff --git a/linker_scripts/us/symbol_addrs.txt b/linker_scripts/us/symbol_addrs.txt index 8550aa1..d4d0cfd 100644 --- a/linker_scripts/us/symbol_addrs.txt +++ b/linker_scripts/us/symbol_addrs.txt @@ -72,17 +72,17 @@ gEepromMesgQueue = 0x800A7400; gEepromMesgBuf = 0x800A73FC; .L8120A860 = 0x8120A860; D_8780FA30 = 0x8780FA30; // size:0x8 -D_87906044 = 0x87906044; +miniShowHUB = 0x87906044; D_87906048 = 0x87906048; -D_87906060 = 0x87906060; -D_87906064 = 0x87906064; -D_87906068 = 0x87906068; +miniCameraXRot = 0x87906060; +miniCameraDistance = 0x87906064; +miniCameraNear = 0x87906068; D_87906070 = 0x87906070; D_87906094 = 0x87906094; D_87906098 = 0x87906098; D_879060A4 = 0x879060A4; D_879060C4 = 0x879060C4; -D_879060C8 = 0x879060C8; +miniHudTransparency = 0x879060C8; gShowCPUProfiler = 0x80068BC0; gShowMEMProfiler = 0x80068BC4; gDisplayListHead = 0x800A7420; @@ -308,7 +308,7 @@ gGeoLayoutStackIndex = 0x800ABDFA; // size:0x2 gGeoLayoutReturnIndex = 0x800ABDFE; // size:0x2 gCurGraphNodeList = 0x800ABD78; // size:0x80 gCurGraphNodeIndex = 0x800ABDF8; // size:0x2 -D_8790606C = 0x8790606C; // size:0x6 +miniCameraCoords = 0x8790606C; // size:0x6 D_87906088 = 0x87906088; // size:0xC D_8790609C = 0x8790609C; // size:0x6 D_879060AC = 0x879060AC; // size:0x6 @@ -352,12 +352,12 @@ D_8690B5D0 = 0x8690B5D0; // size:0x24 D_86A06228 = 0x86A06228; // size:0xC D_86A06238 = 0x86A06238; // size:0xC D_86A06248 = 0x86A06248; // size:0xC -D_86C0E480 = 0x86C0E480; // size:0x1854 -D_86C0FCD8 = 0x86C0FCD8; // size:0x1854 -D_86C11530 = 0x86C11530; // size:0xAD0 -D_879060BC = 0x879060BC; // size:0x2 -D_86E04D60 = 0x86E04D60; // size:0xAD0 -D_86E05830 = 0x86E05830; // size:0x3610 +minigameDigletActors = 0x86C0E480; // size:0x1854 +minigameDiglettHoleActors = 0x86C0FCD8; // size:0x1854 +minigameEkansActors = 0x86C11530; // size:0xAD0 +miniControllerPtr = 0x879060BC; // size:0x2 +metadodPlayers = 0x86E04D60; // size:0xAD0 +metapodMinigameFallingRocks = 0x86E05830; // size:0x3610 D_4006A60 = 0x4006A60; D_40022E0 = 0x40022E0; D_4002368 = 0x4002368; diff --git a/linker_scripts/us/symbol_addrs_code.txt b/linker_scripts/us/symbol_addrs_code.txt index a1a6fa2..27211fd 100644 --- a/linker_scripts/us/symbol_addrs_code.txt +++ b/linker_scripts/us/symbol_addrs_code.txt @@ -2091,33 +2091,33 @@ func_87804320 = 0x87804320; // type:func func_87804AD0 = 0x87804AD0; // type:func func_87804FD4 = 0x87804FD4; // type:func func_87900020 = 0x87900020; // type:func -func_8790002C = 0x8790002C; // type:func -func_87900070 = 0x87900070; // type:func +MinigameGetVec3Distance_2d = 0x8790002C; // type:func +MinigameGetVec3Distance_3d = 0x87900070; // type:func func_879000C4 = 0x879000C4; // type:func -func_879001A4 = 0x879001A4; // type:func -func_879002B8 = 0x879002B8; // type:func -func_879002FC = 0x879002FC; // type:func -func_87900344 = 0x87900344; // type:func -func_87900384 = 0x87900384; // type:func +metapodRockCollisionCheck = 0x879001A4; // type:func +miniChangeActorAnim = 0x879002B8; // type:func +miniChangeActorAnim_alt1 = 0x879002FC; // type:func +miniChangeActorAnim_alt2 = 0x87900344; // type:func +miniPokeIsIdleCheck = 0x87900384; // type:func func_879003A0 = 0x879003A0; // type:func func_879004F8 = 0x879004F8; // type:func func_87900528 = 0x87900528; // type:func -func_87900558 = 0x87900558; // type:func +hideMiniGameHUD = 0x87900558; // type:func func_87900564 = 0x87900564; // type:func -func_87900594 = 0x87900594; // type:func +minigameActorLocalOriginToZero = 0x87900594; // type:func func_879005AC = 0x879005AC; // type:func -func_879005C4 = 0x879005C4; // type:func -func_8790060C = 0x8790060C; // type:func -func_87900770 = 0x87900770; // type:func +miniEkansUpdatePos = 0x879005C4; // type:func +miniActorAllToZero = 0x8790060C; // type:func +miniActorUpdateTransform = 0x87900770; // type:func func_87900808 = 0x87900808; // type:func func_87900854 = 0x87900854; // type:func func_87900920 = 0x87900920; // type:func func_879009B4 = 0x879009B4; // type:func func_87900A50 = 0x87900A50; // type:func -func_87900B64 = 0x87900B64; // type:func -func_87900C5C = 0x87900C5C; // type:func -func_87900F44 = 0x87900F44; // type:func -func_879010A4 = 0x879010A4; // type:func +miniUpdateCamera = 0x87900B64; // type:func +minigameDebuggModeControl = 0x87900C5C; // type:func +showDebuggCameraInfo = 0x87900F44; // type:func +showDebuggJoystickInfo = 0x879010A4; // type:func func_87901200 = 0x87901200; // type:func func_87901620 = 0x87901620; // type:func func_8790168C = 0x8790168C; // type:func @@ -2715,7 +2715,7 @@ func_86B0B810 = 0x86B0B810; // type:func func_86B0B8DC = 0x86B0B8DC; // type:func func_86B0BA18 = 0x86B0BA18; // type:func func_86C00020 = 0x86C00020; // type:func -func_86C00090 = 0x86C00090; // type:func +miniDiglettGoldCheck = 0x86C00090; // type:func func_86C00110 = 0x86C00110; // type:func func_86C00368 = 0x86C00368; // type:func func_86C003AC = 0x86C003AC; // type:func @@ -2723,7 +2723,7 @@ func_86C00424 = 0x86C00424; // type:func func_86C005D0 = 0x86C005D0; // type:func func_86C0063C = 0x86C0063C; // type:func func_86C00668 = 0x86C00668; // type:func -func_86C00770 = 0x86C00770; // type:func +miniEkansHumanControls = 0x86C00770; // type:func func_86C00AA4 = 0x86C00AA4; // type:func func_86C00B0C = 0x86C00B0C; // type:func func_86C00BB4 = 0x86C00BB4; // type:func @@ -2731,143 +2731,143 @@ func_86C00C40 = 0x86C00C40; // type:func func_86C00D50 = 0x86C00D50; // type:func func_86C00EF8 = 0x86C00EF8; // type:func func_86C00F70 = 0x86C00F70; // type:func -func_86C01100 = 0x86C01100; // type:func +miniEkansCompGetForce = 0x86C01100; // type:func func_86C01408 = 0x86C01408; // type:func func_86C014A0 = 0x86C014A0; // type:func -func_86C01538 = 0x86C01538; // type:func +miniEkansCompControls = 0x86C01538; // type:func func_86C016C8 = 0x86C016C8; // type:func func_86C01748 = 0x86C01748; // type:func -func_86C01750 = 0x86C01750; // type:func -func_86C018B8 = 0x86C018B8; // type:func +ekansFixDirToDiglett = 0x86C01750; // type:func +checkCollitionWithDigletts = 0x86C018B8; // type:func func_86C01AF8 = 0x86C01AF8; // type:func func_86C01D2C = 0x86C01D2C; // type:func -func_86C01FAC = 0x86C01FAC; // type:func +miniGetCloser2Diglett = 0x86C01FAC; // type:func func_86C021FC = 0x86C021FC; // type:func -func_86C022D8 = 0x86C022D8; // type:func -func_86C02324 = 0x86C02324; // type:func -func_86C02514 = 0x86C02514; // type:func +miniEkansAnycontrols = 0x86C022D8; // type:func +miniEkansMinigameStateMachine = 0x86C02324; // type:func +miniEkansPlayersUpdate = 0x86C02514; // type:func func_86C02610 = 0x86C02610; // type:func -func_86C026F0 = 0x86C026F0; // type:func +initDiglettHole = 0x86C026F0; // type:func func_86C0276C = 0x86C0276C; // type:func func_86C027BC = 0x86C027BC; // type:func func_86C02804 = 0x86C02804; // type:func -func_86C028C0 = 0x86C028C0; // type:func +miniEkansChooseRandDiglett = 0x86C028C0; // type:func func_86C02A1C = 0x86C02A1C; // type:func -func_86C02B78 = 0x86C02B78; // type:func -func_86C02C28 = 0x86C02C28; // type:func +miniEkansRecolorDiglet = 0x86C02B78; // type:func +miniDiglettStateMachine = 0x86C02C28; // type:func func_86C03008 = 0x86C03008; // type:func -func_86C03080 = 0x86C03080; // type:func +ekansMinigameInitObjects = 0x86C03080; // type:func func_86C030EC = 0x86C030EC; // type:func func_86C03128 = 0x86C03128; // type:func func_86C031E4 = 0x86C031E4; // type:func func_86C03258 = 0x86C03258; // type:func -func_86C03344 = 0x86C03344; // type:func -func_86C03500 = 0x86C03500; // type:func +miniEkansMinigameStateMachine = 0x86C03344; // type:func +miniEkansInitCam = 0x86C03500; // type:func func_86C035E0 = 0x86C035E0; // type:func func_86C03608 = 0x86C03608; // type:func func_86C03AB8 = 0x86C03AB8; // type:func -func_86C03BE8 = 0x86C03BE8; // type:func -func_86C03C64 = 0x86C03C64; // type:func +miniEkansDrawCountdown = 0x86C03BE8; // type:func +miniEkansDrawHub = 0x86C03C64; // type:func func_86C03E4C = 0x86C03E4C; // type:func func_86C03E8C = 0x86C03E8C; // type:func func_86C03ED4 = 0x86C03ED4; // type:func func_86C040B4 = 0x86C040B4; // type:func -func_86C04170 = 0x86C04170; // type:func -func_86C041E8 = 0x86C041E8; // type:func -func_86C043C4 = 0x86C043C4; // type:func +initEkansMinigameAssets = 0x86C04170; // type:func +miniEkansTutoScreenControls = 0x86C041E8; // type:func +ekansMinigameUpdate = 0x86C043C4; // type:func func_86C044B4 = 0x86C044B4; // type:func -func_86C046B0 = 0x86C046B0; // type:func +ekansMinigameLoad = 0x86C046B0; // type:func func_86D00020 = 0x86D00020; // type:func -func_86D000A8 = 0x86D000A8; // type:func -func_86D000D0 = 0x86D000D0; // type:func +miniUnkUpdateCamera = 0x86D000A8; // type:func +miniUnkDrawHUB = 0x86D000D0; // type:func func_86D00134 = 0x86D00134; // type:func -func_86D0015C = 0x86D0015C; // type:func +miniUnkControls = 0x86D0015C; // type:func func_86D0032C = 0x86D0032C; // type:func func_86D0037C = 0x86D0037C; // type:func func_86D003EC = 0x86D003EC; // type:func func_86E00020 = 0x86E00020; // type:func func_86E001A0 = 0x86E001A0; // type:func -func_86E001E4 = 0x86E001E4; // type:func -func_86E002E4 = 0x86E002E4; // type:func +miniInitMetapodPlayer = 0x86E001E4; // type:func +miniInitMetapodPlayers = 0x86E002E4; // type:func func_86E0034C = 0x86E0034C; // type:func -func_86E0036C = 0x86E0036C; // type:func +miniMetapodHumanControls = 0x86E0036C; // type:func func_86E004FC = 0x86E004FC; // type:func func_86E00518 = 0x86E00518; // type:func func_86E0063C = 0x86E0063C; // type:func func_86E0073C = 0x86E0073C; // type:func func_86E007BC = 0x86E007BC; // type:func func_86E007CC = 0x86E007CC; // type:func -func_86E00924 = 0x86E00924; // type:func -func_86E00AF4 = 0x86E00AF4; // type:func -func_86E00BDC = 0x86E00BDC; // type:func +miniMetapodCompControls = 0x86E00924; // type:func +miniUpdateMetapods = 0x86E00AF4; // type:func +metapodRockCollisionCheck_void = 0x86E00BDC; // type:func func_86E00C34 = 0x86E00C34; // type:func -func_86E00CAC = 0x86E00CAC; // type:func -func_86E00D78 = 0x86E00D78; // type:func -func_86E00ED0 = 0x86E00ED0; // type:func +miniRockChecks = 0x86E00CAC; // type:func +miniMatapodChecks = 0x86E00D78; // type:func +miniMatapodMinigameChecks = 0x86E00ED0; // type:func func_86E00F60 = 0x86E00F60; // type:func func_86E00FD8 = 0x86E00FD8; // type:func -func_86E0103C = 0x86E0103C; // type:func -func_86E010E8 = 0x86E010E8; // type:func +miniInitRock = 0x86E0103C; // type:func +miniInitRocks = 0x86E010E8; // type:func func_86E01188 = 0x86E01188; // type:func func_86E01310 = 0x86E01310; // type:func func_86E01414 = 0x86E01414; // type:func -func_86E01428 = 0x86E01428; // type:func -func_86E016EC = 0x86E016EC; // type:func -func_86E0172C = 0x86E0172C; // type:func -func_86E017C0 = 0x86E017C0; // type:func +miniRockStateMachine = 0x86E01428; // type:func +miniRockUpdatePosition = 0x86E016EC; // type:func +miniUpdateRockTransform = 0x86E0172C; // type:func +miniUpdateRocks = 0x86E017C0; // type:func func_86E0182C = 0x86E0182C; // type:func -func_86E01898 = 0x86E01898; // type:func +miniUpdateRocksPositions = 0x86E01898; // type:func func_86E01904 = 0x86E01904; // type:func -func_86E01990 = 0x86E01990; // type:func -func_86E019B8 = 0x86E019B8; // type:func +miniMetapodCameraControls = 0x86E01990; // type:func +initMetapodMinigameAssets = 0x86E019B8; // type:func func_86E019F4 = 0x86E019F4; // type:func func_86E01B08 = 0x86E01B08; // type:func func_86E01E34 = 0x86E01E34; // type:func func_86E01EB0 = 0x86E01EB0; // type:func func_86E01EE8 = 0x86E01EE8; // type:func func_86E01F50 = 0x86E01F50; // type:func -func_86E01F8C = 0x86E01F8C; // type:func +miniMetapodMinigameStateMachine = 0x86E01F8C; // type:func func_86E02150 = 0x86E02150; // type:func -func_86E02170 = 0x86E02170; // type:func -func_86E021D8 = 0x86E021D8; // type:func +miniDrawMetapodHealth = 0x86E02170; // type:func +miniDrawMetapodHeads = 0x86E021D8; // type:func func_86E02308 = 0x86E02308; // type:func func_86E026D0 = 0x86E026D0; // type:func func_86E027D4 = 0x86E027D4; // type:func -func_86E027FC = 0x86E027FC; // type:func +miniMetapodDrawPlayerHUBs = 0x86E027FC; // type:func func_86E02880 = 0x86E02880; // type:func -func_86E02924 = 0x86E02924; // type:func +metapodMinigameInit = 0x86E02924; // type:func func_86E0296C = 0x86E0296C; // type:func -func_86E02974 = 0x86E02974; // type:func +miniMetapodTutoScreenControls = 0x86E02974; // type:func func_86E02A28 = 0x86E02A28; // type:func func_86E02A64 = 0x86E02A64; // type:func func_86E02BB0 = 0x86E02BB0; // type:func func_86E02C5C = 0x86E02C5C; // type:func -func_86E02E40 = 0x86E02E40; // type:func +metapodMinigameLoad = 0x86E02E40; // type:func func_86F00020 = 0x86F00020; // type:func func_86F00188 = 0x86F00188; // type:func -func_86F001CC = 0x86F001CC; // type:func -func_86F002F4 = 0x86F002F4; // type:func -func_86F0035C = 0x86F0035C; // type:func -func_86F00370 = 0x86F00370; // type:func -func_86F003FC = 0x86F003FC; // type:func -func_86F00450 = 0x86F00450; // type:func -func_86F0048C = 0x86F0048C; // type:func -func_86F0050C = 0x86F0050C; // type:func -func_86F00778 = 0x86F00778; // type:func +initSandshrew = 0x86F001CC; // type:func +initSandshrews = 0x86F002F4; // type:func +miniSandshewReangle = 0x86F0035C; // type:func +miniSandshewReangleAll = 0x86F00370; // type:func +miniSandshewChangeAnim = 0x86F003FC; // type:func +sandshrewDecreaseVel = 0x86F00450; // type:func +sandshrewChangeState = 0x86F0048C; // type:func +sandshrewHumanControls = 0x86F0050C; // type:func +sandshrewCompControls = 0x86F00778; // type:func func_86F00920 = 0x86F00920; // type:func func_86F00D04 = 0x86F00D04; // type:func -func_86F00E34 = 0x86F00E34; // type:func -func_86F00F00 = 0x86F00F00; // type:func +initSandshrewHole = 0x86F00E34; // type:func +initSandshrewHoles = 0x86F00F00; // type:func func_86F00F68 = 0x86F00F68; // type:func func_86F01014 = 0x86F01014; // type:func -func_86F010B4 = 0x86F010B4; // type:func -func_86F01180 = 0x86F01180; // type:func +initSandshrewWaterGeiser = 0x86F010B4; // type:func +initSandshrewGeisers = 0x86F01180; // type:func func_86F011E8 = 0x86F011E8; // type:func func_86F012B8 = 0x86F012B8; // type:func func_86F0132C = 0x86F0132C; // type:func func_86F013B8 = 0x86F013B8; // type:func func_86F01488 = 0x86F01488; // type:func -func_86F014B8 = 0x86F014B8; // type:func +sandshrewMinigameInitObjects = 0x86F014B8; // type:func func_86F014F8 = 0x86F014F8; // type:func func_86F0164C = 0x86F0164C; // type:func func_86F016D8 = 0x86F016D8; // type:func @@ -2875,15 +2875,15 @@ func_86F0174C = 0x86F0174C; // type:func func_86F018E4 = 0x86F018E4; // type:func func_86F01904 = 0x86F01904; // type:func func_86F01C40 = 0x86F01C40; // type:func -func_86F01D78 = 0x86F01D78; // type:func +fixSandshrewMinigameHUD = 0x86F01D78; // type:func func_86F01EB4 = 0x86F01EB4; // type:func func_86F01EF4 = 0x86F01EF4; // type:func func_86F01F58 = 0x86F01F58; // type:func -func_86F02004 = 0x86F02004; // type:func +sandshrewMinigameInit = 0x86F02004; // type:func func_86F0204C = 0x86F0204C; // type:func func_86F02230 = 0x86F02230; // type:func func_86F02320 = 0x86F02320; // type:func -func_86F02520 = 0x86F02520; // type:func +sandshrewMinigameLoad = 0x86F02520; // type:func func_88000020 = 0x88000020; // type:func func_8800008C = 0x8800008C; // type:func func_880001A8 = 0x880001A8; // type:func diff --git a/src/fragments/18/fragment18.c b/src/fragments/18/fragment18.c index 3cdd29f..245d844 100644 --- a/src/fragments/18/fragment18.c +++ b/src/fragments/18/fragment18.c @@ -21,49 +21,49 @@ #include "src/stage_loader.h" #include "src/geo_layout.h" -extern u8 D_03034E40[]; -extern u8 D_03035A80[]; -extern u8 D_030366C0[]; -extern u8 D_03037300[]; -extern u8 D_030397C0[]; -extern u8 D_0303A400[]; -extern u8 D_0303B040[]; -extern u8 D_0303D500[]; -extern u8 D_03040580[]; -extern u8 D_03040980[]; -extern u8 D_03040D80[]; -extern u8 D_03041FC0[]; -extern u8 D_03043520[]; -extern u8 D_03043C40[]; -extern u8 D_030426E0[]; -extern u8 D_03042E00[]; +extern u32 D_03034E40[]; +extern u32 D_03035A80[]; +extern u32 D_030366C0[]; +extern u32 D_03037300[]; +extern u32 D_030397C0[]; +extern u32 D_0303A400[]; +extern u32 D_0303B040[]; +extern u32 D_0303D500[]; +extern u32 D_03040580[]; +extern u32 D_03040980[]; +extern u32 D_03040D80[]; +extern u32 D_03041FC0[]; +extern u32 D_03043520[]; +extern u32 D_03043C40[]; +extern u32 D_030426E0[]; +extern u32 D_03042E00[]; -typedef struct unk_D_86C12008 { - /* 0x00 */ s16 unk_00; - /* 0x02 */ s16 unk_02; - /* 0x04 */ s16 unk_04; - /* 0x06 */ s16 unk_06; - /* 0x08 */ s16 unk_08; - /* 0x0A */ s16 unk_0A; - /* 0x0C */ s16 unk_0C; -} unk_D_86C12008; // size = 0xE +typedef struct ActiveDiglettInfo { + /* 0x00 */ s16 diglettId; + /* 0x02 */ s16 state; + /* 0x04 */ s16 timer; + /* 0x06 */ s16 unk_06; // 0 + /* 0x08 */ s16 gotHoop; + /* 0x0A */ s16 unk_0A; // 0 + /* 0x0C */ s16 collidingActorId; +} ActiveDiglettInfo; // size = 0xE -typedef struct unk_D_86C0E1CC { - /* 0x00 */ Vec3f unk_00; +typedef struct ActorOriginPosition { + /* 0x00 */ Vec3f pos; /* 0x0C */ char unk0C[0x6]; /* 0x12 */ s16 unk_12; /* 0x12 */ s16 unk_14; -} unk_D_86C0E1CC; // size = 0x18 +} ActorOriginPosition; // size = 0x18 -static unk_func_8790002C D_86C0E480[9]; -static unk_func_8790002C D_86C0FCD8[9]; -static unk_func_8790002C D_86C11530[4]; +static MiniActor miniDigletts[9]; +static MiniActor miniDiglettHoles[9]; +static MiniActor miniEkanses[4]; static unk_D_800AC870* D_86C12000; -static unk_D_86C12008 D_86C12008[3]; +static ActiveDiglettInfo activeDigletts[3]; static s32 D_86C12034; static s16 D_86C12038; static s16 D_86C12040[9][4]; -static s16 D_86C12088; +static s16 ekansMinigameCountdownStarted; static u32 D_86C04840[] = { 0x07070707, 0x07070707, 0x07070707, 0x07070707, 0x07070708, 0x08080808, 0x08080808, 0x08080808, 0x08080808, @@ -85,7 +85,7 @@ static u32 D_86C049D0[] = { 0x00010000, 0x00000000, 0x00050050, D_86C049D0, D_86C04840, }; -static u32 D_86C049F8[] = { +static u32 redDiglettTileTexture[] = { 0xD5EDD62D, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5EB, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5ED, 0xD5EDD5EB, 0xD5ABD5AB, 0xD5ABD5AB, 0xD5ABD5A9, 0xD5A9D5A9, 0xD5A9D5A9, 0xD5A9D5A9, 0xD5A9D5A9, 0xD5A9D5A9, 0xD5A9D5A9, 0xD5A9D5A9, @@ -202,7 +202,7 @@ static u32 D_86C049F8[] = { 0xD5EBD5EB, 0xD5EBD5EB, 0xD5EBD5EB, 0xD5EBD5EB, 0xD5EBD5EB, 0xD5EBD5EB, 0xD5EBD5EB, }; -static u32 D_86C059F8[] = { +static u32 yellowDiglettTileTexture[] = { 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66B, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66D, 0xD66DD66B, 0xD66BD66B, 0xD66BD66B, 0xD66BD669, 0xD629D669, 0xD669D669, 0xD669D669, 0xD669D669, 0xD669D669, 0xD669D669, 0xD669D669, @@ -319,7 +319,7 @@ static u32 D_86C059F8[] = { 0xD66BD66B, 0xD66BD66B, 0xD66BD66B, 0xD66BD66B, 0xD66BD66B, 0xD66BD66B, 0xD66BD66B, }; -static u32 D_86C069F8[] = { +static u32 blueDiglettTileTexture[] = { 0xCE37CE37, 0xC637C637, 0xC637C637, 0xC637C637, 0xC637C637, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC637C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xBDF7C5F7, 0xC5F7BDF7, 0xBDB7BDB7, 0xBDB7BDB7, 0xBDB7BDB7, 0xBDB7BDB7, 0xBDB7BDB7, @@ -436,7 +436,7 @@ static u32 D_86C069F8[] = { 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, 0xC5F7C5F7, }; -static u32 D_86C079F8[] = { +static u32 floorTexture1[] = { 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE182E1, 0x82A1CD9F, 0xCD9F82A1, 0x82E18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x82E182A1, 0xC55FFFDF, 0xFFDFC55F, 0x82A182E1, 0x8AE18AE1, @@ -496,7 +496,7 @@ static u32 D_86C079F8[] = { 0xCD9F82A1, 0x82E18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, 0x8AE18AE1, }; -static u32 D_86C081F8[] = { +static u32 floorTexture2[] = { 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, @@ -613,7 +613,7 @@ static u32 D_86C081F8[] = { 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, 0xFF7070FF, }; -static u32 D_86C091F8[] = { +static u32 sceneDecorationTextureBlue[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFBCAD, 0xAC2993E5, 0x83617B1D, 0x72DB6A9B, 0x6ADB72DB, 0x7B1D8B61, 0x9BE5AC69, 0xBCADC4EF, 0xC4F1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xC4EFBCAD, 0xA4298B61, 0x6A995A57, 0x5A576257, 0x6A996ADB, 0x6A9B6A99, 0x62595A57, 0x5A576A99, @@ -673,7 +673,7 @@ static u32 D_86C091F8[] = { 0x62996A99, 0x72DB831F, 0x93A5AC29, 0xB4ADC4AF, 0xC4EFCCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, }; -static u32 D_86C099F8[] = { +static u32 sceneDecorationTextureGreen[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFBCAD, 0xAC2993E5, 0x83617B1D, 0x72DB6A9B, 0x6ADB72DB, 0x7B1D8B61, 0x9BE5AC69, 0xBCADC4EF, 0xC4F1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xC4EFBCAD, 0xA4298B61, 0x6A995A57, 0x5A576257, 0x6A996ADB, 0x6A9B6A99, 0x62595A57, 0x5A576A99, @@ -733,7 +733,7 @@ static u32 D_86C099F8[] = { 0x62996A99, 0x72DB831F, 0x93A5AC29, 0xB4ADC4AF, 0xC4EFCCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, }; -static u32 D_86C0A1F8[] = { +static u32 sceneDecorationTextureRed[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFBCAD, 0xAC2993E5, 0x83617B1D, 0x72DB6A9B, 0x6ADB72DB, 0x7B1D8B61, 0x9BE5AC69, 0xBCADC4EF, 0xC4F1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xC4EFBCAD, 0xA4298B61, 0x6A995A57, 0x5A576257, 0x6A996ADB, 0x6A9B6A99, 0x62595A57, 0x5A576A99, @@ -793,7 +793,7 @@ static u32 D_86C0A1F8[] = { 0x62996A99, 0x72DB831F, 0x93A5AC29, 0xB4ADC4AF, 0xC4EFCCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, }; -static u32 D_86C0A9F8[] = { +static u32 sceneDecorationTextureYellow[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFBCAD, 0xAC2993E5, 0x83617B1D, 0x72DB6A9B, 0x6ADB72DB, 0x7B1D8B61, 0x9BE5AC69, 0xBCADC4EF, 0xC4F1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xC4EFBCAD, 0xA4298B61, 0x6A995A57, 0x5A576257, 0x6A996ADB, 0x6A9B6A99, 0x62595A57, 0x5A576A99, @@ -853,6 +853,7 @@ static u32 D_86C0A9F8[] = { 0x62996A99, 0x72DB831F, 0x93A5AC29, 0xB4ADC4AF, 0xC4EFCCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, }; +// unused or unshown decoration texture? static u32 D_86C0B1F8[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFBCAD, 0xAC2993E5, 0x83617B1D, 0x72DB6A9B, 0x6ADB72DB, 0x7B1D8B61, 0x9BE5AC69, 0xBCADC4EF, 0xC4F1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, @@ -912,14 +913,15 @@ static u32 D_86C0B1F8[] = { 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1C4F1, 0xC4EFB4AD, 0xAC2993A5, 0x831F72DB, 0x6A996299, 0x62996A99, 0x72DB831F, 0x93A5AC29, 0xB4ADC4AF, 0xC4EFCCF1, 0xCCF1CCF1, 0xCCF1CCF1, 0xCCF1CCF1, }; -static unk_D_86002F34_018 D_86C0B9F8[] = { + +static unk_D_86002F34_018 sceneTextures[] = { { 0x00, unk_D_86002F34_018_GFX_TYPE_2, 32, 64, 2048, - D_86C049F8, + redDiglettTileTexture, }, { 0x00, @@ -927,7 +929,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 64, 2048, - D_86C059F8, + yellowDiglettTileTexture, }, { 0x00, @@ -935,15 +937,11 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 64, 2048, - D_86C069F8, + blueDiglettTileTexture, }, { - 0x00, - unk_D_86002F34_018_GFX_TYPE_2, - 32, - 32, - 1024, - D_86C079F8, + 0x00, unk_D_86002F34_018_GFX_TYPE_2, 32, 32, 1024, + floorTexture1, // }, { 0x00, @@ -951,7 +949,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 32, 1024, - D_86C081F8, + floorTexture2, }, { 0x00, @@ -959,7 +957,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 32, 1024, - D_86C091F8, + sceneDecorationTextureBlue, }, { 0x00, @@ -967,7 +965,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 32, 1024, - D_86C099F8, + sceneDecorationTextureGreen, }, { 0x00, @@ -975,7 +973,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 32, 1024, - D_86C0A1F8, + sceneDecorationTextureRed, }, { 0x00, @@ -983,7 +981,7 @@ static unk_D_86002F34_018 D_86C0B9F8[] = { 32, 32, 1024, - D_86C0A9F8, + sceneDecorationTextureYellow, }, { 0x00, @@ -1006,7 +1004,6 @@ static Gfx D_86C0BA70[] = { gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C), gsSPEndDisplayList(), }; - static Gfx D_86C0BAA8[] = { gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_32b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), @@ -1019,7 +1016,6 @@ static Gfx D_86C0BAA8[] = { gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x04FC, 0x007C), gsSPEndDisplayList(), }; - static Gfx D_86C0BAE8[] = { gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), @@ -1032,7 +1028,6 @@ static Gfx D_86C0BAE8[] = { gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x0DFC, 0x027C), gsSPEndDisplayList(), }; - static Gfx D_86C0BB28[] = { gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_MIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), @@ -1046,7 +1041,8 @@ static Gfx D_86C0BB28[] = { gsSPEndDisplayList(), }; -static Vtx D_86C0BB68[] = { +// red quads +static Vtx sceneGeometry_1[] = { VTX(880, 0, 880, 10240, 10239, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, 880, 8191, 10239, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, 1320, 8191, 12287, 0x00, 0x78, 0x00, 0xFF), VTX(880, 0, 1320, 10240, 12287, 0x00, 0x78, 0x00, 0xFF), VTX(-880, 0, -880, 2048, 2047, 0x00, 0x78, 0x00, 0xFF), VTX(-1320, 0, -880, 0, 2047, 0x00, 0x78, 0x00, 0xFF), @@ -1065,7 +1061,8 @@ static Vtx D_86C0BB68[] = { VTX(0, 0, 0, 6144, 6143, 0x00, 0x78, 0x00, 0xFF), VTX(-440, 0, 440, 4096, 8191, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0BD68[] = { +// red quads +static Vtx sceneGeometry_2[] = { VTX(0, 0, 0, 6144, 6143, 0x00, 0x78, 0x00, 0xFF), VTX(-440, 0, 440, 4096, 8191, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, 440, 6144, 8191, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, 440, 8191, 8191, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, 880, 6144, 10239, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, 880, 8191, 10239, 0x00, 0x78, 0x00, 0xFF), @@ -1075,7 +1072,8 @@ static Vtx D_86C0BD68[] = { VTX(880, 0, 0, 10240, 6143, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0BE38[] = { +// yellow quads +static Vtx sceneGeometry_3[] = { VTX(-440, 0, -880, 4096, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(-880, 0, -880, 2048, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(-880, 0, -440, 2048, 4096, 0x00, 0x78, 0x00, 0xFF), VTX(-440, 0, -440, 4096, 4096, 0x00, 0x78, 0x00, 0xFF), VTX(880, 0, 440, 10240, 8191, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, 440, 8191, 8191, 0x00, 0x78, 0x00, 0xFF), @@ -1094,7 +1092,8 @@ static Vtx D_86C0BE38[] = { VTX(-880, 0, 440, 2048, 8191, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0C028[] = { +// yellow quads +static Vtx sceneGeometry_4[] = { VTX(440, 0, -1320, 8191, 0, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, -1320, 6144, 0, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, -880, 6144, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, -880, 8191, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(880, 0, -880, 10240, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, -440, 8191, 4096, 0x00, 0x78, 0x00, 0xFF), @@ -1103,7 +1102,8 @@ static Vtx D_86C0C028[] = { VTX(-440, 0, 880, 4096, 10240, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0C0D8[] = { +// blue quads +static Vtx sceneGeometry_5[] = { VTX(-880, 0, -440, 2048, 4096, 0x00, 0x78, 0x00, 0xFF), VTX(-1320, 0, -440, 0, 4096, 0x00, 0x78, 0x00, 0xFF), VTX(-1320, 0, 0, 0, 6144, 0x00, 0x78, 0x00, 0xFF), VTX(-880, 0, 0, 2048, 6144, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, 440, 6144, 8191, 0x00, 0x78, 0x00, 0xFF), VTX(-440, 0, 440, 4096, 8191, 0x00, 0x78, 0x00, 0xFF), @@ -1122,7 +1122,8 @@ static Vtx D_86C0C0D8[] = { VTX(-880, 0, 1320, 2048, 12288, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0C2C8[] = { +// blue quads +static Vtx sceneGeometry_6[] = { VTX(880, 0, -1320, 10240, 0, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, -1320, 8191, 0, 0x00, 0x78, 0x00, 0xFF), VTX(440, 0, -880, 8191, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(880, 0, -880, 10240, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(0, 0, -880, 6144, 2048, 0x00, 0x78, 0x00, 0xFF), VTX(-440, 0, -880, 4096, 2048, 0x00, 0x78, 0x00, 0xFF), @@ -1131,7 +1132,8 @@ static Vtx D_86C0C2C8[] = { VTX(1320, 0, -880, 12288, 2048, 0x00, 0x78, 0x00, 0xFF), }; -static Vtx D_86C0C378[] = { +// second floor +static Vtx sceneGeometry_7[] = { VTX(584, 50, -1431, 14262, 5137, 0xF1, 0x61, 0x44, 0xFF), VTX(673, 750, -1822, 14262, 358, 0xE9, 0x3B, 0x65, 0xFF), VTX(-673, 750, -1822, 16457, 358, 0x17, 0x3B, 0x65, 0xFF), @@ -1150,7 +1152,8 @@ static Vtx D_86C0C378[] = { VTX(1636, 50, -924, 12068, 5137, 0xD5, 0x61, 0x36, 0xFF), }; -static Vtx D_86C0C478[] = { +// yellow stairs +static Vtx sceneGeometry_8[] = { VTX(-2624, 50, 1128, 2560, -71, 0x45, 0x60, 0x0F, 0xFF), VTX(-2375, 0, 1128, 2560, 1066, 0x17, 0x75, 0x05, 0xFF), VTX(-2140, 0, 97, 2194, 1066, 0x15, 0x75, 0x0A, 0xFF), VTX(-2364, 50, -11, 2194, -71, 0x3E, 0x61, 0x1E, 0xFF), VTX(2364, 50, -11, 5485, -71, 0xC2, 0x61, 0x1E, 0xFF), VTX(2140, 0, 97, 5485, 1066, 0xEB, 0x75, 0x0A, 0xFF), @@ -1162,7 +1165,8 @@ static Vtx D_86C0C478[] = { VTX(-1636, 50, -924, 1828, -71, 0x2B, 0x61, 0x36, 0xFF), VTX(-1481, 0, -729, 1828, 1066, 0x0E, 0x75, 0x12, 0xFF), }; -static Vtx D_86C0C598[] = { +// red decoration +static Vtx sceneGeometry_9[] = { VTX(27, 262, -1502, 693, 149, 0x29, 0x6E, 0x12, 0xFF), VTX(53, 240, -1542, 874, 149, 0x53, 0x4B, 0xD5, 0xFF), VTX(0, 259, -1553, 512, 0, 0x00, 0x67, 0xC4, 0xFF), VTX(38, 226, -1459, 768, 511, 0x3C, 0x33, 0x59, 0xFF), VTX(75, 194, -1515, 1024, 511, 0x78, 0x00, 0x00, 0xFF), VTX(27, 171, -1449, 693, 874, 0x29, 0xD9, 0x69, 0xFF), @@ -1172,7 +1176,8 @@ static Vtx D_86C0C598[] = { VTX(-75, 194, -1515, 0, 511, 0x88, 0x00, 0x00, 0xFF), VTX(-53, 148, -1488, 149, 874, 0xAD, 0xB5, 0x2B, 0xFF), }; -static Vtx D_86C0C678[] = { +// green decoration +static Vtx sceneGeometry_10[] = { VTX(588, 262, -1502, 693, 149, 0x29, 0x6E, 0x12, 0xFF), VTX(615, 240, -1542, 874, 149, 0x53, 0x4B, 0xD5, 0xFF), VTX(562, 259, -1553, 512, 0, 0x00, 0x67, 0xC4, 0xFF), VTX(599, 226, -1459, 768, 511, 0x3C, 0x33, 0x59, 0xFF), VTX(637, 194, -1515, 1024, 511, 0x78, 0x00, 0x00, 0xFF), VTX(588, 171, -1449, 693, 874, 0x29, 0xD9, 0x69, 0xFF), @@ -1182,7 +1187,8 @@ static Vtx D_86C0C678[] = { VTX(486, 194, -1515, 0, 511, 0x88, 0x00, 0x00, 0xFF), VTX(508, 148, -1488, 149, 874, 0xAD, 0xB5, 0x2B, 0xFF), }; -static Vtx D_86C0C758[] = { +// yellow decoration +static Vtx sceneGeometry_11[] = { VTX(-535, 262, -1502, 693, 149, 0x29, 0x6E, 0x12, 0xFF), VTX(-508, 240, -1542, 874, 149, 0x53, 0x4B, 0xD5, 0xFF), VTX(-562, 259, -1553, 512, 0, 0x00, 0x67, 0xC4, 0xFF), VTX(-524, 226, -1459, 768, 511, 0x3C, 0x33, 0x59, 0xFF), VTX(-486, 194, -1515, 1024, 511, 0x78, 0x00, 0x00, 0xFF), VTX(-535, 171, -1449, 693, 874, 0x29, 0xD9, 0x69, 0xFF), @@ -1192,7 +1198,8 @@ static Vtx D_86C0C758[] = { VTX(-637, 194, -1515, 0, 511, 0x88, 0x00, 0x00, 0xFF), VTX(-615, 148, -1488, 149, 874, 0xAD, 0xB5, 0x2B, 0xFF), }; -static Vtx D_86C0C838[] = { +// blue right decoration +static Vtx sceneGeometry_12[] = { VTX(1093, 262, -1268, 693, 149, 0x20, 0x6E, 0x20, 0xFF), VTX(1132, 240, -1297, 874, 149, 0x5C, 0x4B, 0xF4, 0xFF), VTX(1086, 259, -1325, 512, 0, 0x14, 0x67, 0xC8, 0xFF), VTX(1089, 226, -1224, 768, 511, 0x19, 0x33, 0x69, 0xFF), VTX(1143, 194, -1264, 1024, 511, 0x70, 0x00, 0x29, 0xFF), VTX(1075, 171, -1219, 693, 874, 0x02, 0xD9, 0x71, 0xFF), @@ -1202,7 +1209,8 @@ static Vtx D_86C0C838[] = { VTX(1003, 194, -1316, 0, 511, 0x90, 0x00, 0xD7, 0xFF), VTX(1014, 148, -1283, 149, 874, 0xA4, 0xB5, 0x0C, 0xFF), }; -static Vtx D_86C0C918[] = { +// blue left decoration +static Vtx sceneGeometry_13[] = { VTX(-1044, 262, -1287, 693, 149, 0x2D, 0x6E, 0x03, 0xFF), VTX(-1032, 240, -1333, 874, 149, 0x3F, 0x4B, 0xBB, 0xFF), VTX(-1086, 259, -1325, 512, 0, 0xEC, 0x67, 0xC8, 0xFF), @@ -1220,95 +1228,60 @@ static Vtx D_86C0C918[] = { }; static Gfx D_86C0C9F8[] = { - gsSPVertex(D_86C0C918, 14, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), - gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), - gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), - gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), - gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), - gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), - gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), - gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), - gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_13, 14, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), + gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), + gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), + gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), + gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CA58[] = { - gsSPVertex(D_86C0C838, 14, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), - gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), - gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), - gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), - gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), - gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), - gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), - gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), - gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_12, 14, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), + gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), + gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), + gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), + gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CAB8[] = { - gsSPVertex(D_86C0C758, 14, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), - gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), - gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), - gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), - gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), - gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), - gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), - gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), - gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_11, 14, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), + gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), + gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), + gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), + gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CB18[] = { - gsSPVertex(D_86C0C678, 14, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), - gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), - gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), - gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), - gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), - gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), - gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), - gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), - gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_10, 14, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), + gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), + gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), + gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), + gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CB78[] = { - gsSPVertex(D_86C0C598, 14, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), - gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), - gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), - gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), - gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), - gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), - gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), - gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), - gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_9, 14, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 3, 4, 1, 0), gsSP2Triangles(3, 1, 0, 0, 5, 6, 4, 0), + gsSP2Triangles(5, 4, 3, 0, 6, 5, 7, 0), gsSP2Triangles(8, 0, 2, 0, 9, 3, 0, 0), + gsSP2Triangles(9, 0, 8, 0, 10, 5, 3, 0), gsSP2Triangles(10, 3, 9, 0, 5, 10, 7, 0), + gsSP2Triangles(11, 8, 2, 0, 12, 9, 8, 0), gsSP2Triangles(12, 8, 11, 0, 13, 10, 9, 0), + gsSP2Triangles(13, 9, 12, 0, 10, 13, 7, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CBD8[] = { - gsSPVertex(D_86C0C378, 16, 0), - gsSPSetGeometryMode(G_CULL_BACK), - gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), - gsSP2Triangles(3, 2, 4, 0, 3, 4, 5, 0), - gsSP2Triangles(5, 4, 6, 0, 5, 6, 7, 0), - gsSP2Triangles(7, 6, 8, 0, 7, 8, 9, 0), - gsSP2Triangles(10, 11, 12, 0, 10, 12, 13, 0), - gsSP2Triangles(13, 12, 14, 0, 13, 14, 15, 0), - gsSP2Triangles(15, 14, 1, 0, 15, 1, 0, 0), - gsSPEndDisplayList(), + gsSPVertex(sceneGeometry_7, 16, 0), gsSPSetGeometryMode(G_CULL_BACK), + gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(3, 2, 4, 0, 3, 4, 5, 0), + gsSP2Triangles(5, 4, 6, 0, 5, 6, 7, 0), gsSP2Triangles(7, 6, 8, 0, 7, 8, 9, 0), + gsSP2Triangles(10, 11, 12, 0, 10, 12, 13, 0), gsSP2Triangles(13, 12, 14, 0, 13, 14, 15, 0), + gsSP2Triangles(15, 14, 1, 0, 15, 1, 0, 0), gsSPEndDisplayList(), }; static Gfx D_86C0CC28[] = { - gsSPVertex(D_86C0C478, 18, 0), + gsSPVertex(sceneGeometry_8, 18, 0), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0), @@ -1320,7 +1293,7 @@ static Gfx D_86C0CC28[] = { }; static Gfx D_86C0CC70[] = { - gsSPVertex(D_86C0BB68, 32, 0), + gsSPVertex(sceneGeometry_1, 32, 0), gsSPSetGeometryMode(G_CULL_BACK), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), @@ -1331,7 +1304,7 @@ static Gfx D_86C0CC70[] = { gsSP2Triangles(23, 7, 24, 0, 23, 24, 25, 0), gsSP2Triangles(26, 27, 28, 0, 26, 28, 29, 0), gsSP1Triangle(30, 25, 31, 0), - gsSPVertex(D_86C0BD68, 13, 0), + gsSPVertex(sceneGeometry_2, 13, 0), gsSP2Triangles(0, 1, 2, 0, 3, 2, 4, 0), gsSP2Triangles(3, 4, 5, 0, 6, 7, 8, 0), gsSP2Triangles(6, 8, 9, 0, 10, 9, 11, 0), @@ -1340,7 +1313,7 @@ static Gfx D_86C0CC70[] = { }; static Gfx D_86C0CCF8[] = { - gsSPVertex(D_86C0BE38, 32, 0), + gsSPVertex(sceneGeometry_3, 32, 0), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), gsSP2Triangles(8, 9, 10, 0, 8, 10, 1, 0), @@ -1350,7 +1323,7 @@ static Gfx D_86C0CCF8[] = { gsSP2Triangles(22, 23, 24, 0, 22, 24, 7, 0), gsSP2Triangles(25, 13, 26, 0, 25, 26, 5, 0), gsSP2Triangles(27, 28, 29, 0, 27, 29, 30, 0), - gsSPVertex(D_86C0C028, 11, 0), + gsSPVertex(sceneGeometry_4, 11, 0), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 3, 5, 0, 4, 5, 6, 0), gsSP2Triangles(7, 8, 9, 0, 7, 9, 10, 0), @@ -1358,7 +1331,7 @@ static Gfx D_86C0CCF8[] = { }; static Gfx D_86C0CD70[] = { - gsSPVertex(D_86C0C0D8, 32, 0), + gsSPVertex(sceneGeometry_5, 32, 0), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), gsSP2Triangles(8, 3, 9, 0, 8, 9, 5, 0), @@ -1368,7 +1341,7 @@ static Gfx D_86C0CD70[] = { gsSP2Triangles(21, 22, 23, 0, 21, 23, 14, 0), gsSP2Triangles(24, 25, 26, 0, 24, 26, 16, 0), gsSP2Triangles(27, 28, 29, 0, 27, 29, 30, 0), - gsSPVertex(D_86C0C2C8, 11, 0), + gsSPVertex(sceneGeometry_6, 11, 0), gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0), gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0), gsSP2Triangles(8, 9, 10, 0, 8, 10, 3, 0), @@ -1395,11 +1368,11 @@ static u32 D_86C0CDE8[] = { }; static u32 D_86C0D008[] = { - 0x1700000A, 0x000000E9, D_86C0B9F8, 0x00000000, D_86C0BB68, 0x05000000, 0x1C000000, 0x000023D7, - 0x000023D7, 0x000023D7, 0x05000000, 0x03000000, D_86C0CDE8, 0x06000000, 0x06000000, 0x01000000, + 0x1700000A, 0x000000E9, sceneTextures, 0x00000000, sceneGeometry_1, 0x05000000, 0x1C000000, 0x000023D7, + 0x000023D7, 0x000023D7, 0x05000000, 0x03000000, D_86C0CDE8, 0x06000000, 0x06000000, 0x01000000, }; -static u32 D_86C0D048[] = { +static u32 ekansShadowTexture[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000101, 0x01010101, 0x01010101, 0x01010000, 0x00000000, @@ -1516,16 +1489,16 @@ static u32 D_86C0D048[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -static unk_func_8790002C* D_86C0E048 = &D_86C0E480[0]; -static unk_func_8790002C* D_86C0E04C = &D_86C0FCD8[0]; -static unk_func_8790002C* D_86C0E050 = &D_86C11530[0]; +static MiniActor* miniDiglettPtr = &miniDigletts[0]; +static MiniActor* miniDiglettHolePtr = &miniDiglettHoles[0]; +static MiniActor* miniEkansPtr = &miniEkanses[0]; -static s16 D_86C0E054[] = { +UNUSED static s16 D_86C0E054[] = { 0x0000, 0x0001, 0x0002, 0x0000, 0x0003, 0x0006, 0x0000, 0x0004, 0x0008, 0x0001, 0x0004, 0x0007, 0x0002, 0x0004, 0x0006, 0x0002, 0x0005, 0x0008, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, }; -static s16 D_86C0E084[4][4] = { +static s16 miniEkansDifficulties[4][4] = { { 0x0000, 0x0000, @@ -1563,14 +1536,14 @@ static u32 D_86C0E0D0[] = { 0x06000000, 0x06000000, 0x06000000, 0x03000000, D_87806398, 0x06000000, 0x01000000, }; -static unk_D_86C0E1CC D_86C0E16C[] = { +static ActorOriginPosition skansActorInfo[] = { { { -45.0f, 0.0f, 50.0f }, { 0, 0, 0, 0, 0, 0 }, 0, 0x8C }, { { -15.0f, 0.0f, 50.0f }, { 0, 0, 0, 0, 0, 0 }, 0, 0x8C }, { { 15.0f, 0.0f, 50.0f }, { 0, 0, 0, 0, 0, 0 }, 0, 0x8C }, { { 45.0f, 0.0f, 50.0f }, { 0, 0, 0, 0, 0, 0 }, 0, 0x8C }, }; -static unk_D_86C0E1CC D_86C0E1CC[] = { +static ActorOriginPosition diglettActorInfo[] = { { { -75.0f, 0.0f, -75.0f }, { 0, 0, 0, 0, 0, 0 }, 0xA, 0x23 }, { { 0.0f, 0.0f, -75.0f }, { 0, 0, 0, 0, 0, 0 }, 0xA, 0x23 }, { { 75.0f, 0.0f, -75.0f }, { 0, 0, 0, 0, 0, 0 }, 0xA, 0x23 }, @@ -1593,14 +1566,18 @@ static unk_func_87801684 D_86C0E33C[] = { { D_03042E00, 0xE }, { D_03043520, 4 }, { D_03043C40, 8 }, { D_03043520, 4 }, { D_03042E00, 0xE }, { D_03041FC0, 4 }, { D_030426E0, 8 }, { D_03041FC0, 4 }, { NULL, 0 }, }; -static s16 D_86C0E384[] = { 0x32, 0x6E, 0xAA, 0xE6 }; -static Color_RGB8 D_86C0E38C[] = { - { 0, 0, 0xB4 }, { 0, 0x82, 0 }, { 0xA0, 0, 0 }, { 0x8C, 0x8C, 0 }, { 0xFF, 0xFF, 0xFF }, { 0xFA, 0, 0 }, - { 0, 0x28, 0xFF }, { 0xFF, 0xFF, 0xE2 }, { 0, 0, 0 }, { 0x11, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, +static s16 playerGUIScoreXPositions[] = { 0x32, 0x6E, 0xAA, 0xE6 }; +static Color_RGB8 playerColors[] = { + { 0, 0, 0xB4 }, // player 1 skans shadow color + { 0, 0x82, 0 }, // player 2 skans shadow color + { 0xA0, 0, 0 }, // player 3 skans shadow color + { 0x8C, 0x8C, 0 }, // player 4 skans shadow color + { 0xFF, 0xFF, 0xFF }, { 0xFA, 0, 0 }, { 0, 0x28, 0xFF }, { 0xFF, 0xFF, 0xE2 }, + { 0, 0, 0 }, { 0x11, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, }; -s32 func_86C00020(unk_func_8790002C* arg0) { - f32 tmp = arg0->unk_274; +s32 func_86C00020(MiniActor* ekans) { + f32 tmp = ekans->launchForce; s32 var_v1 = 0; if (tmp > 58.0f) { @@ -1614,27 +1591,27 @@ s32 func_86C00020(unk_func_8790002C* arg0) { return var_v1; } -void func_86C00090(s16 arg0, s32* arg1, s32* arg2) { - s16 temp_v0 = D_86C12008[arg0].unk_00; +void miniDiglettGoldCheck(s16 nDiglett, s32* isGold, s32* arg2) { + s16 ActiveDiglettId = activeDigletts[nDiglett].diglettId; - if (D_86C0E480[temp_v0].unk_29C != 0) { - *arg1 = 1; + if (miniDigletts[ActiveDiglettId].diglettIsGold) { + *isGold = 1; } else { - *arg1 = 0; + *isGold = 0; } - *arg2 = D_86C0E0AC[temp_v0]; + *arg2 = D_86C0E0AC[ActiveDiglettId]; } void func_86C00110(s16 arg0, s16 arg1) { s32 var_s0; - s32 sp30; + s32 isGold; s32 sp2C; UNUSED s32 pad[2]; var_s0 = 0; sp2C = 0; - sp30 = 0; + isGold = 0; switch (arg0) { case 1: @@ -1647,37 +1624,37 @@ void func_86C00110(s16 arg0, s16 arg1) { case 3: var_s0 = 0xA0003; - sp30 = arg1; - sp2C = func_86C00020(&D_86C11530[arg1]); + isGold = arg1; + sp2C = func_86C00020(&miniEkanses[arg1]); break; case 4: var_s0 = 0xA0007; - sp30 = arg1; + isGold = arg1; break; case 5: - func_86C00090(arg1, &sp30, &sp2C); + miniDiglettGoldCheck(arg1, &isGold, &sp2C); var_s0 = 0xA0011; break; case 6: - func_86C00090(arg1, &sp30, &sp2C); + miniDiglettGoldCheck(arg1, &isGold, &sp2C); var_s0 = 0xA0012; break; case 7: - func_86C00090(arg1, &sp30, &sp2C); + miniDiglettGoldCheck(arg1, &isGold, &sp2C); var_s0 = 0xA0008; break; case 8: - func_86C00090(arg1, &sp30, &sp2C); + miniDiglettGoldCheck(arg1, &isGold, &sp2C); var_s0 = 0xA000B; break; case 9: - func_86C00090(arg1, &sp30, &sp2C); + miniDiglettGoldCheck(arg1, &isGold, &sp2C); var_s0 = 0xA000A; break; @@ -1730,7 +1707,7 @@ void func_86C00110(s16 arg0, s16 arg1) { if (var_s0 != 0) { D_87903DBC++; - func_8004D9B0(var_s0, sp30, sp2C); + func_8004D9B0(var_s0, isGold, sp2C); } } @@ -1740,80 +1717,80 @@ void func_86C00368(s16 arg0, s16 arg1) { } } -void func_86C003AC(unk_func_8790002C* arg0) { - s16 idx = arg0 - D_86C11530; +void func_86C003AC(MiniActor* arg0) { + s16 idx = arg0 - miniEkanses; - arg0->unk_1A8.x = arg0->unk_1D8.x = D_86C0E16C[idx].unk_00.x; - arg0->unk_1A8.y = arg0->unk_1D8.y = D_86C0E16C[idx].unk_00.y; - arg0->unk_1A8.z = arg0->unk_1D8.z = D_86C0E16C[idx].unk_00.z; + arg0->position_1.x = arg0->unk_1D8.x = skansActorInfo[idx].pos.x; + arg0->position_1.y = arg0->unk_1D8.y = skansActorInfo[idx].pos.y; + arg0->position_1.z = arg0->unk_1D8.z = skansActorInfo[idx].pos.z; - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.y = -30.0f; - arg0->unk_1C0.z = 0.0f; + arg0->position_2.x = 0.0f; + arg0->position_2.y = -30.0f; + arg0->position_2.z = 0.0f; } -void func_86C00424(unk_func_8790002C* arg0, s16 arg1) { +void initEkans(MiniActor* ekans, s16 player) { s32 i; - func_8790060C(arg0); - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + miniActorAllToZero(ekans); + ekans->scale.x = 1.0f; + ekans->scale.y = 1.0f; + ekans->scale.z = 1.0f; - arg0->unk_1A8.x = arg0->unk_1D8.x = D_86C0E16C[arg1].unk_00.x; - arg0->unk_1A8.y = arg0->unk_1D8.y = D_86C0E16C[arg1].unk_00.y; - arg0->unk_1A8.z = arg0->unk_1D8.z = D_86C0E16C[arg1].unk_00.z; + ekans->position_1.x = ekans->unk_1D8.x = skansActorInfo[player].pos.x; + ekans->position_1.y = ekans->unk_1D8.y = skansActorInfo[player].pos.y; + ekans->position_1.z = ekans->unk_1D8.z = skansActorInfo[player].pos.z; - arg0->unk_1C0.y = 10.0f; - arg0->unk_288 = 50.0f; - arg0->unk_28C = 140.0f; + ekans->position_2.y = 10.0f; + ekans->cubeRadio = 50.0f; + ekans->halfHeight = 140.0f; - arg0->unk_21C = -0x8000; - arg0->unk_25C = 0x64; - arg0->unk_258 = arg0->unk_25C; + ekans->yRot_1 = -0x8000; + ekans->miniMaxHealth = 0x64; + ekans->miniHealth = ekans->miniMaxHealth; - func_8001BD04(&arg0->unk_000, 0); + func_8001BD04(&ekans->unk_000, 0); - arg0->unk_000.unk_000.unk_01 |= 1; - arg0->unk_000.unk_000.unk_02 |= 0x20; + ekans->unk_000.unk_000.unk_01 |= 1; + ekans->unk_000.unk_000.unk_02 |= 0x20; - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, 0x10000); - func_80017464(&arg0->unk_000, arg0->unk_26E); + func_800173DC(&ekans->unk_000, 0, ekans->unk_000.unk_040.unk_04, 0x10000); + func_80017464(&ekans->unk_000, ekans->unk_26E); - arg0->unk_000.unk_000.unk_02 &= ~0x40; - arg0->unk_2AC = D_879060C4[arg1]; - arg0->unk_266 = -1; + ekans->unk_000.unk_000.unk_02 &= ~0x40; + ekans->isComp = D_879060C4[player]; + ekans->collidingActorId = -1; - if (D_86C12088 == 0) { - arg0->unk_2AE = D_86C0E084[D_87906046][arg1]; + if (ekansMinigameCountdownStarted == false) { + ekans->unk_2AE = miniEkansDifficulties[miniDifficulty][player]; } else { - arg0->unk_2AE = D_86C0E0A4[arg1]; + ekans->unk_2AE = D_86C0E0A4[player]; } // clang-format off - for (i = 0; i < 9; i++) { D_86C12040[i][arg1] = 0; } + for (i = 0; i < 9; i++){ D_86C12040[i][player] = 0; } // clang-format on } -void func_86C005D0(void) { +void initAllEkans(void) { s32 i; - D_86C0E050 = D_86C11530; + miniEkansPtr = miniEkanses; for (i = 0; i < 4; i++) { - func_86C00424(D_86C0E050, i); - D_86C0E050++; + initEkans(miniEkansPtr, i); + miniEkansPtr++; } } -f32 func_86C0063C(unk_func_8790002C* arg0) { - return (arg0->unk_284 <= arg0->unk_280) ? arg0->unk_280 : arg0->unk_284; +f32 func_86C0063C(MiniActor* ekans) { + return (ekans->stickMagnitude2 <= ekans->stickMagnitude1) ? ekans->stickMagnitude1 : ekans->stickMagnitude2; } -s16 func_86C00668(unk_func_8790002C* arg0, s16 arg1) { +s16 func_86C00668(MiniActor* arg0, s16 arg1) { s32 var_v1 = arg1 ^ 0; - switch (arg0 - D_86C11530) { + switch (arg0 - miniEkanses) { case 0: if (var_v1 < -0x1E00) { var_v1 = -0x1E00; @@ -1857,129 +1834,129 @@ s16 func_86C00668(unk_func_8790002C* arg0, s16 arg1) { return var_v1; } -void func_86C00770(unk_func_8790002C* arg0) { - f32 sp34; +void miniEkansHumanControls(MiniActor* ekans) { + f32 stickMagnitude; f32 temp_fa0; f32 temp_fv1; - s32 sp1C; + s32 direction; s16 var_v1; - s16 sp24; + s16 stickY; f32 var_ft4; s32 var_v0; - sp1C = 0; - sp34 = D_879060BC->stickMag; - sp24 = D_879060BC->stickY; + direction = 0; + stickMagnitude = miniControllerPtr->stickMag; + stickY = miniControllerPtr->stickY; - if (arg0->unk_23E == 0) { - if (D_879060BC->buttonDown & 0x200) { - sp1C = 1; - } else if (D_879060BC->buttonDown & 0x100) { - sp1C = -1; - } else if (D_879060BC->buttonDown & 2) { - sp1C = 1; - } else if (D_879060BC->buttonDown & 1) { - sp1C = -1; + if (ekans->mainState == 0) { + if (BTN_IS_DOWN(miniControllerPtr, BTN_DLEFT)) { + direction = 1; + } else if (BTN_IS_DOWN(miniControllerPtr, BTN_DRIGHT)) { + direction = -1; + } else if (BTN_IS_DOWN(miniControllerPtr, BTN_CLEFT)) { + direction = 1; + } else if (BTN_IS_DOWN(miniControllerPtr, BTN_CRIGHT)) { + direction = -1; } - if (sp1C != 0) { - arg0->unk_2A0++; - if (arg0->unk_2A0 >= 0xB) { - arg0->unk_2A0 = 0xA; + if (direction != 0) { + ekans->leftRightCount++; + if (ekans->leftRightCount >= 0xB) { + ekans->leftRightCount = 0xA; } } else { - arg0->unk_2A0 = 0; + ekans->leftRightCount = 0; } - if (arg0->unk_2A0 < 3) { + if (ekans->leftRightCount < 3) { var_v1 = 0; - } else if (arg0->unk_2A0 < 6) { - var_v1 = arg0->unk_2A0 * 0x28; + } else if (ekans->leftRightCount < 6) { + var_v1 = ekans->leftRightCount * 0x28; } else { var_v1 = 0x1E0; } - arg0->unk_228 += sp1C * (var_v1 + 0x180); - arg0->unk_228 = func_86C00668(arg0, arg0->unk_228); + ekans->yRot_2 += direction * (var_v1 + 0x180); + ekans->yRot_2 = func_86C00668(ekans, ekans->yRot_2); } - if (sp24 >= 0) { - sp34 = 0.0f; + if (stickY >= 0) { + stickMagnitude = 0.0f; } - if (arg0->unk_23E == 0) { + if (ekans->mainState == 0) { var_v0 = 0; var_ft4 = 0.0f; - temp_fv1 = arg0->unk_280 - sp34; - temp_fa0 = arg0->unk_284 - arg0->unk_280; + temp_fv1 = ekans->stickMagnitude1 - stickMagnitude; + temp_fa0 = ekans->stickMagnitude2 - ekans->stickMagnitude1; if (temp_fa0 <= temp_fv1) { - if ((arg0->unk_280 <= 12.0f) && (temp_fv1 >= 5.0f) && (sp34 == 0.0f)) { + if ((ekans->stickMagnitude1 <= 12.0f) && (temp_fv1 >= 5.0f) && (stickMagnitude == 0.0f)) { var_v0 = 1; - var_ft4 = arg0->unk_280; + var_ft4 = ekans->stickMagnitude1; } - if (arg0->unk_280 <= 30.0f) { + if (ekans->stickMagnitude1 <= 30.0f) { if (temp_fv1 >= 10.0f) { - sp1C = 1; + direction = 1; var_v0 = 1; - var_ft4 = func_86C0063C(arg0); + var_ft4 = func_86C0063C(ekans); } - } else if (arg0->unk_280 < 50.0f) { + } else if (ekans->stickMagnitude1 < 50.0f) { if (temp_fv1 >= 15.0f) { - sp1C = 1; + direction = 1; var_v0 = 1; - var_ft4 = func_86C0063C(arg0); + var_ft4 = func_86C0063C(ekans); } } else if (temp_fv1 >= 20.0f) { - sp1C = 1; + direction = 1; var_v0 = 1; - var_ft4 = func_86C0063C(arg0); + var_ft4 = func_86C0063C(ekans); } } else if (temp_fa0 >= 25.0f) { var_v0 = 1; - var_ft4 = arg0->unk_284; + var_ft4 = ekans->stickMagnitude2; } if (var_v0 != 0) { - sp34 = 0.0f; + stickMagnitude = 0.0f; if (var_ft4 < 24.0f) { var_ft4 = 24.0f; } - arg0->unk_274 = var_ft4; - arg0->unk_22E = 0; - arg0->unk_280 = 0.0f; - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.z = 0.0f; - arg0->unk_23E = 1; + ekans->launchForce = var_ft4; + ekans->ySpinSpeed = 0; + ekans->stickMagnitude1 = 0.0f; + ekans->position_2.x = 0.0f; + ekans->position_2.z = 0.0f; + ekans->mainState = 1; } - arg0->unk_284 = arg0->unk_280; - arg0->unk_280 = sp34; + ekans->stickMagnitude2 = ekans->stickMagnitude1; + ekans->stickMagnitude1 = stickMagnitude; } } void func_86C00AA4(void) { - unk_func_8790002C* ptr = D_86C11530; + MiniActor* ekans = miniEkanses; s32 i; for (i = 0; i < 4; i++) { - if (ptr->unk_2AC != 0) { - ptr->unk_242 = 1; + if (ekans->isComp != false) { + ekans->compState = 1; } - ptr++; + ekans++; } } -s32 func_86C00B0C(unk_func_8790002C* arg0) { +s32 func_86C00B0C(MiniActor* compEkans) { s32 ret = 0; - s32 idx = arg0->unk_266; + s32 idx = compEkans->collidingActorId; s32 i; - if ((D_86C0E480[D_86C12008[idx].unk_00].unk_29C == 0) && (arg0->unk_2AE == 1)) { + if ((miniDigletts[activeDigletts[idx].diglettId].diglettIsGold == 0) && (compEkans->unk_2AE == 1)) { for (i = 0; i < 3; i++) { - if ((D_86C12008[i].unk_02 == 6) && (D_86C0E480[D_86C12008[i].unk_00].unk_29C != 0)) { + if ((activeDigletts[i].state == 6) && (miniDigletts[activeDigletts[i].diglettId].diglettIsGold != 0)) { ret = 1; break; } @@ -1995,7 +1972,7 @@ s16 func_86C00BB4(void) { s16 var_t0 = -1; for (i = 0; i < 3; i++) { - if (D_86C12008[var_v1].unk_02 == 6) { + if (activeDigletts[var_v1].state == 6) { var_t0 = var_v1; break; } @@ -2009,14 +1986,14 @@ s16 func_86C00BB4(void) { return var_t0; } -s16 func_86C00C40(unk_func_8790002C* arg0) { +s16 func_86C00C40(MiniActor* arg0) { s32 i; s32 var_a0; s16 sp1E = -1; s32 sp18 = 0; - if (arg0->unk_266 >= 0) { - var_a0 = arg0->unk_266; + if (arg0->collidingActorId >= 0) { + var_a0 = arg0->collidingActorId; } else { sp18 = 0; sp1E = -1; @@ -2024,7 +2001,7 @@ s16 func_86C00C40(unk_func_8790002C* arg0) { } for (i = 0; i < 3; i++) { - if ((D_86C12008[i].unk_02 == 6) && (D_86C0E480[D_86C12008[i].unk_00].unk_29C != 0)) { + if ((activeDigletts[i].state == 6) && (miniDigletts[activeDigletts[i].diglettId].diglettIsGold != 0)) { sp1E = i; sp18 = 1; break; @@ -2033,7 +2010,7 @@ s16 func_86C00C40(unk_func_8790002C* arg0) { if (sp18 == 0) { for (i = 0; i < 3; i++) { - if (D_86C12008[var_a0].unk_02 == 6) { + if (activeDigletts[var_a0].state == 6) { sp1E = var_a0; break; } @@ -2047,18 +2024,18 @@ s16 func_86C00C40(unk_func_8790002C* arg0) { return sp1E; } -s16 func_86C00D50(unk_func_8790002C* arg0) { +s16 func_86C00D50(MiniActor* arg0) { s32 i; s32 j; s32 sp1C; s16 var_a0; s32 var_v1; - unk_func_8790002C* var_v0 = D_86C11530; + MiniActor* var_v0 = miniEkanses; sp1C = 1; for (var_v1 = 0; var_v1 < 4; var_v1++, var_v0++) { - if ((var_v0 != arg0) && (var_v0->unk_2AC != 0)) { + if ((var_v0 != arg0) && (var_v0->isComp != 0)) { sp1C = 0; break; } @@ -2067,12 +2044,12 @@ s16 func_86C00D50(unk_func_8790002C* arg0) { var_a0 = func_878001E8(0x64) % 3; for (i = 0; i < 3; i++) { - if (D_86C12008[var_a0].unk_02 == 6) { + if (activeDigletts[var_a0].state == 6) { if (sp1C == 0) { - var_v0 = D_86C11530; + var_v0 = miniEkanses; var_v1 = 1; for (j = 0; j < 4; j++, var_v0++) { - if ((var_v0 != arg0) && (var_v0->unk_2AC != 0) && (var_a0 == var_v0->unk_266)) { + if ((var_v0 != arg0) && (var_v0->isComp != 0) && (var_a0 == var_v0->collidingActorId)) { var_v1 = 0; } } @@ -2098,33 +2075,33 @@ s16 func_86C00D50(unk_func_8790002C* arg0) { return var_a0; } -s32 func_86C00EF8(unk_func_8790002C* arg0) { - switch (arg0->unk_2AE) { +s32 func_86C00EF8(MiniActor* compEkans) { + switch (compEkans->unk_2AE) { case 0: - arg0->unk_266 = func_86C00BB4(); + compEkans->collidingActorId = func_86C00BB4(); break; case 1: - arg0->unk_266 = func_86C00C40(arg0); + compEkans->collidingActorId = func_86C00C40(compEkans); break; case 2: - arg0->unk_266 = func_86C00D50(arg0); + compEkans->collidingActorId = func_86C00D50(compEkans); break; } - return arg0->unk_266; + return compEkans->collidingActorId; } -void func_86C00F70(unk_func_8790002C* arg0) { +void func_86C00F70(MiniActor* compEkans) { Vec3f sp3C; - unk_func_8790002C* temp_v0; + MiniActor* tempDiglett; s16 sp36; s16 sp34; s16 sp32; s16 idx; - switch (D_87906046) { + switch (miniDifficulty) { case 0: sp36 = 0x1000; sp34 = 0x80; @@ -2147,68 +2124,68 @@ void func_86C00F70(unk_func_8790002C* arg0) { break; } - idx = D_86C12008[arg0->unk_266].unk_00; - temp_v0 = &D_86C0E480[idx]; + idx = activeDigletts[compEkans->collidingActorId].diglettId; + tempDiglett = &miniDigletts[idx]; - sp3C.x = temp_v0->unk_190.x - arg0->unk_190.x; - sp3C.z = temp_v0->unk_190.z - arg0->unk_190.z; + sp3C.x = tempDiglett->totalPos.x - compEkans->totalPos.x; + sp3C.z = tempDiglett->totalPos.z - compEkans->totalPos.z; - arg0->unk_222 = func_86C00668(arg0, func_81400BBC(sp3C) + func_81400B00(sp36) + 0x8000); - arg0->unk_22E = func_878001E8(sp32) + sp34; + compEkans->unk_222 = func_86C00668(compEkans, func_81400BBC(sp3C) + func_81400B00(sp36) + 0x8000); + compEkans->ySpinSpeed = func_878001E8(sp32) + sp34; } -void func_86C01100(unk_func_8790002C* arg0) { - s16 temp_v1 = D_86C12008[arg0->unk_266].unk_00; - f32 var_fv0; +void miniEkansCompGetForce(MiniActor* compEkans) { + s16 diglettId = activeDigletts[compEkans->collidingActorId].diglettId; + f32 force; - switch (D_87906046) { + switch (miniDifficulty) { case 0: - if (temp_v1 < 3) { - var_fv0 = func_878001E8(0x28) + 0x14; - } else if (temp_v1 < 6) { - var_fv0 = func_878001E8(0x23) + 0x14; + if (diglettId < 3) { + force = func_878001E8(0x28) + 0x14; + } else if (diglettId < 6) { + force = func_878001E8(0x23) + 0x14; } else { - var_fv0 = func_878001E8(0x19) + 0x28; + force = func_878001E8(0x19) + 0x28; } break; case 1: - if (temp_v1 < 3) { - var_fv0 = func_878001E8(0x1E) + 0x14; - } else if (temp_v1 < 6) { - var_fv0 = func_878001E8(0x1E) + 0x1E; + if (diglettId < 3) { + force = func_878001E8(0x1E) + 0x14; + } else if (diglettId < 6) { + force = func_878001E8(0x1E) + 0x1E; } else { - var_fv0 = func_878001E8(0xF) + 0x32; + force = func_878001E8(0xF) + 0x32; } break; case 2: - if (temp_v1 < 3) { - var_fv0 = func_878001E8(0xF) + 0x18; - } else if (temp_v1 < 6) { - var_fv0 = func_878001E8(0xF) + 0x28; + if (diglettId < 3) { + force = func_878001E8(0xF) + 0x18; + } else if (diglettId < 6) { + force = func_878001E8(0xF) + 0x28; } else { - var_fv0 = func_878001E8(0xA) + 0x36; + force = func_878001E8(0xA) + 0x36; } break; case 3: - if (temp_v1 < 3) { - var_fv0 = func_878001E8(0xA) + 0x1C; - } else if (temp_v1 < 6) { - var_fv0 = func_878001E8(0xA) + 0x2A; + if (diglettId < 3) { + force = func_878001E8(0xA) + 0x1C; + } else if (diglettId < 6) { + force = func_878001E8(0xA) + 0x2A; } else { - var_fv0 = func_878001E8(6) + 0x3A; + force = func_878001E8(6) + 0x3A; } break; } - arg0->unk_280 = var_fv0; + compEkans->stickMagnitude1 = force; } s16 func_86C01408(void) { s16 sp1E; - switch (D_87906046) { + switch (miniDifficulty) { case 0: sp1E = func_81400A78(0x14) + 0x12; break; @@ -2232,7 +2209,7 @@ s16 func_86C01408(void) { s16 func_86C014A0(void) { s16 sp1E; - switch (D_87906046) { + switch (miniDifficulty) { case 0: sp1E = func_81400A78(0x14) + 0xC; break; @@ -2253,132 +2230,133 @@ s16 func_86C014A0(void) { return sp1E; } -void func_86C01538(unk_func_8790002C* arg0) { - switch (arg0->unk_242) { +void miniEkansCompControls(MiniActor* compEkans) { + switch (compEkans->compState) { case 1: - if (func_86C00EF8(arg0) >= 0) { - func_86C00F70(arg0); - arg0->unk_242++; + if (func_86C00EF8(compEkans) >= 0) { + func_86C00F70(compEkans); + compEkans->compState++; } break; - case 2: - if (func_86C00B0C(arg0) != 0) { - arg0->unk_242 = 1; - } else if (func_81400550(&arg0->unk_228, arg0->unk_222, arg0->unk_22E) != 0) { - arg0->unk_29E = func_86C01408(); - arg0->unk_242++; + case 2: // comp L R + if (func_86C00B0C(compEkans) != 0) { + compEkans->compState = 1; + } else if (func_81400550(&compEkans->yRot_2, compEkans->unk_222, compEkans->ySpinSpeed) != 0) { + compEkans->unk_29E = func_86C01408(); + compEkans->compState++; } break; - case 3: - if (func_86C00B0C(arg0) != 0) { - arg0->unk_242 = 1; + case 3: // comp holding back + if (func_86C00B0C(compEkans) != 0) { + compEkans->compState = 1; } else { - arg0->unk_29E--; - if (arg0->unk_29E <= 0) { - func_86C01100(arg0); - arg0->unk_242++; + compEkans->unk_29E--; + if (compEkans->unk_29E <= 0) { + miniEkansCompGetForce(compEkans); + compEkans->compState++; } } break; - case 4: - if (func_81400760(&arg0->unk_274, arg0->unk_280, 8.0f) != 0) { - arg0->unk_1C0.z = arg0->unk_1C0.x = 0.0f; - arg0->unk_280 = 0; - arg0->unk_23E = 1; - arg0->unk_242++; + case 4: // comp launch (only y speed) + if (func_81400760(&compEkans->launchForce, compEkans->stickMagnitude1, 8.0f) != 0) { + compEkans->position_2.z = compEkans->position_2.x = 0.0f; + compEkans->stickMagnitude1 = 0; + compEkans->mainState = 1; + compEkans->compState++; } break; - case 5: - if (arg0->unk_23E == 0) { - arg0->unk_29E = func_86C014A0(); - arg0->unk_242++; + case 5: // comp launch force + if (compEkans->mainState == 0) { + compEkans->unk_29E = func_86C014A0(); + compEkans->compState++; } break; - case 6: - arg0->unk_29E--; - if (arg0->unk_29E <= 0) { - arg0->unk_242 = 1; + case 6: // repeat + compEkans->unk_29E--; + if (compEkans->unk_29E <= 0) { + compEkans->compState = 1; } break; } } -void func_86C016C8(unk_func_8790002C* arg0) { - arg0->unk_210 = 1.0f; - arg0->unk_1F8 = (SINS(arg0->unk_214.y) * (26.0f + arg0->unk_274)) / 10.0f; - arg0->unk_1FC = (arg0->unk_274 + 70.0f) * 0.125f; - arg0->unk_200 = (COSS(arg0->unk_214.y) * (26.0f + arg0->unk_274)) / 10.0f; +void func_86C016C8(MiniActor* ekans) { + ekans->antiAcceleration = 1.0f; + ekans->xSpeed = (SINS(ekans->totalRot.y) * (26.0f + ekans->launchForce)) / 10.0f; + ekans->ySpeed = (ekans->launchForce + 70.0f) * 0.125f; + ekans->zSpeed = (COSS(ekans->totalRot.y) * (26.0f + ekans->launchForce)) / 10.0f; } void func_86C01748(void) { } -void func_86C01750(unk_func_8790002C* arg0, s32 arg1, s32 arg2, f32 arg3, f32 arg4, f32 arg5) { - if (arg3 > 0.0f) { - if (arg4 >= 0.0f) { - arg0->unk_1F8 *= 0.25f; +void ekansFixDirToDiglett(MiniActor* ekans, UNUSED s32 nPlayer, s32 nActiveDiglett, f32 zDist, f32 xDist, f32 yDist) { + if (zDist > 0.0f) { + if (xDist >= 0.0f) { + ekans->xSpeed *= 0.25f; } else { - arg0->unk_1F8 = -arg0->unk_1F8 * 0.25f; + ekans->xSpeed = -ekans->xSpeed * 0.25f; } - arg0->unk_200 = -arg0->unk_200 * 0.25f; + ekans->zSpeed = -ekans->zSpeed * 0.25f; } else { - if (arg4 >= 0.0f) { - arg0->unk_1F8 *= 0.25f; + if (xDist >= 0.0f) { + ekans->xSpeed *= 0.25f; } else { - arg0->unk_1F8 = -arg0->unk_1F8 * 0.25f; + ekans->xSpeed = -ekans->xSpeed * 0.25f; } - arg0->unk_200 *= 0.25f; + ekans->zSpeed *= 0.25f; } - if (arg5 > 0) { - arg0->unk_1FC = -arg0->unk_1FC * 0.75f; + if (yDist > 0) { + ekans->ySpeed = -ekans->ySpeed * 0.75f; } else { - arg0->unk_1FC = -arg0->unk_1FC * 0.75f; + ekans->ySpeed = -ekans->ySpeed * 0.75f; } - arg0->unk_1C0.y += arg0->unk_1FC; - func_86C00368(5, arg2); + ekans->position_2.y += ekans->ySpeed; - arg0->unk_298 = 0xC; - arg0->unk_000.unk_000.unk_02 &= ~0x20; - arg0->unk_22E = 0x1000; + func_86C00368(5, nActiveDiglett); + + ekans->unk_298 = 0xC; + ekans->unk_000.unk_000.unk_02 &= ~0x20; + ekans->ySpinSpeed = 0x1000; } -void func_86C018B8(unk_func_8790002C* arg0, s32 arg1) { +void checkCollitionWithDigletts(MiniActor* ekans, s32 nPlayer) { s32 i; - f32 temp_fa0; - f32 temp_fa1; - f32 temp_fv0; - f32 temp_fv1; + f32 xDist; + f32 yDist; + f32 zDist; + f32 distance2d; UNUSED s32 pad; - Vec3f sp84; - Vec3f sp78; + Vec3f tempDiglettHitboxPos; + Vec3f tempEkansHitboxPos; - arg0->unk_25E = 0; - func_80015390(&arg0->unk_000, 0xA, &sp78); - if ((arg0->unk_262 != 0) && (arg0->unk_260 < 2)) { + ekans->ekansAbbleToHoop = false; + func_80015390(&ekans->unk_000, 0xA, &tempEkansHitboxPos); + if ((ekans->ekansIsMidAir) && (ekans->midAirState < 2)) { for (i = 0; i < 3; i++) { - if ((D_86C12008[i].unk_06 != 0) && (D_86C12008[i].unk_08 == 0)) { - func_80015390(&D_86C0E480[D_86C12008[i].unk_00].unk_000, 0xA, &sp84); - temp_fv0 = func_81400EF0(sp78, sp84); + if ((activeDigletts[i].unk_06 != 0) && (activeDigletts[i].gotHoop == false)) { + func_80015390(&miniDigletts[activeDigletts[i].diglettId].unk_000, 0xA, &tempDiglettHitboxPos); + distance2d = func_81400EF0(tempEkansHitboxPos, tempDiglettHitboxPos); - temp_fa0 = sp78.x - sp84.x; - temp_fv1 = sp78.y - sp84.y; - temp_fa1 = sp78.z - sp84.z; + xDist = tempEkansHitboxPos.x - tempDiglettHitboxPos.x; + yDist = tempEkansHitboxPos.y - tempDiglettHitboxPos.y; + zDist = tempEkansHitboxPos.z - tempDiglettHitboxPos.z; - if ((temp_fv0 < 35.0f) && (temp_fv1 > -35.0f) && (temp_fv1 < 20.0f)) { - if ((temp_fv0 < 25.0f) && (temp_fv1 > -20.0f) && (temp_fv1 < 20.0f)) { - arg0->unk_25E = 1; - arg0->unk_268 = arg0->unk_266; - arg0->unk_266 = i; - } else if (arg0->unk_260 == 0) { - arg0->unk_260 = 1; - func_86C01750(arg0, arg1, i, temp_fa1, temp_fa0, temp_fv1); + if ((distance2d < 35.0f) && (yDist > -35.0f) && (yDist < 20.0f)) { + if ((distance2d < 25.0f) && (yDist > -20.0f) && (yDist < 20.0f)) { + ekans->ekansAbbleToHoop = true; + ekans->collidingActorId_alt = ekans->collidingActorId; + ekans->collidingActorId = i; + } else if (ekans->midAirState == 0) { + ekans->midAirState = 1; + ekansFixDirToDiglett(ekans, nPlayer, i, zDist, xDist, yDist); } } } @@ -2393,254 +2371,254 @@ void func_86C01AF8(void) { Vec3f sp70; s32 i; s32 j; - unk_func_8790002C* temp_s1; - unk_func_8790002C* var_s6 = D_86C11530; + MiniActor* diglett; + MiniActor* ekans = miniEkanses; - for (i = 0; i < 4; i++, var_s6++) { - if (var_s6->unk_25E != 0) { - s32 idx = var_s6->unk_266; + for (i = 0; i < 4; i++, ekans++) { + if (ekans->ekansAbbleToHoop) { + s32 idx = ekans->collidingActorId; for (j = i + 1; j < 4; j++) { - if ((D_86C11530[j].unk_25E != 0) && (idx == D_86C11530[j].unk_266)) { - temp_s1 = &D_86C0E480[D_86C12008[idx].unk_00]; + if ((miniEkanses[j].ekansAbbleToHoop) && (idx == miniEkanses[j].collidingActorId)) { + diglett = &miniDigletts[activeDigletts[idx].diglettId]; - func_80015390(&var_s6->unk_000, 0xA, &sp7C); - func_80015390(&D_86C11530[j].unk_000, 0xA, &sp70); - func_80015390(&temp_s1->unk_000, 0xA, &sp88); + func_80015390(&ekans->unk_000, 0xA, &sp7C); + func_80015390(&miniEkanses[j].unk_000, 0xA, &sp70); + func_80015390(&diglett->unk_000, 0xA, &sp88); if (func_81400E8C(sp7C, sp88) > func_81400E8C(sp70, sp88)) { - var_s6->unk_25E = 0; + ekans->ekansAbbleToHoop = false; break; } else { - D_86C11530[j].unk_25E = 0; + miniEkanses[j].ekansAbbleToHoop = false; } } } - if (var_s6->unk_25E != 0) { - var_s6->unk_25E = 0; - var_s6->unk_260 = 2; + if (ekans->ekansAbbleToHoop) { + ekans->ekansAbbleToHoop = false; + ekans->midAirState = 2; } } } } -void func_86C01D2C(unk_func_8790002C* arg0, s32 arg1) { - Vec3f sp3C; - Vec3f sp30; - f32 temp_fa0; - f32 temp_fv1; +void func_86C01D2C(MiniActor* ekans, s32 nPlayer) { + Vec3f diglettColl; + Vec3f ekansColl; + f32 xDist; + f32 zDist; s32 idx; - unk_func_8790002C* sp20; - unk_D_86C12008* sp18; + MiniActor* diglett; + ActiveDiglettInfo* activeDiglett; - if (arg0->unk_260 != 2) { + if (ekans->midAirState != 2) { return; } - func_80015390(&arg0->unk_000, 0xA, &sp30); + func_80015390(&ekans->unk_000, 0xA, &ekansColl); - idx = arg0->unk_266; - sp18 = &D_86C12008[idx]; - sp20 = &D_86C0E480[sp18->unk_00]; + idx = ekans->collidingActorId; + activeDiglett = &activeDigletts[idx]; + diglett = &miniDigletts[activeDiglett->diglettId]; - func_80015390(&sp20->unk_000, 0xA, &sp3C); + func_80015390(&diglett->unk_000, 0xA, &diglettColl); - temp_fa0 = sp30.x - sp3C.x; - temp_fv1 = sp30.z - sp3C.z; + xDist = ekansColl.x - diglettColl.x; + zDist = ekansColl.z - diglettColl.z; - arg0->unk_1F8 = 0.0f; - arg0->unk_200 = 0.0f; + ekans->xSpeed = 0.0f; + ekans->zSpeed = 0.0f; - arg0->unk_1A8.x = arg0->unk_190.x; - arg0->unk_1A8.z = arg0->unk_190.z; + ekans->position_1.x = ekans->totalPos.x; + ekans->position_1.z = ekans->totalPos.z; - arg0->unk_1B4.x = sp3C.x; - arg0->unk_1B4.z = sp3C.z; + ekans->closestDiglettPos.x = diglettColl.x; + ekans->closestDiglettPos.z = diglettColl.z; - arg0->unk_1C0.x = arg0->unk_1C0.z = 0.0f; + ekans->position_2.x = ekans->position_2.z = 0.0f; - arg0->unk_22E = 0x2000; - arg0->unk_000.unk_000.unk_02 &= 0xFFDF; + ekans->ySpinSpeed = 0x2000; + ekans->unk_000.unk_000.unk_02 &= 0xFFDF; - if ((temp_fv1 > 15.0f) || (temp_fv1 < -15.0f)) { - arg0->unk_1D4 = 4.0f; - } else if ((temp_fv1 > 5.0f) || (temp_fv1 < -5.0f)) { - arg0->unk_1D4 = 2.0f; + if ((zDist > 15.0f) || (zDist < -15.0f)) { + ekans->dist2DiglettLevelZ = 4.0f; + } else if ((zDist > 5.0f) || (zDist < -5.0f)) { + ekans->dist2DiglettLevelZ = 2.0f; } else { - arg0->unk_1D4 = 1.0f; + ekans->dist2DiglettLevelZ = 1.0f; } - if ((temp_fa0 > 15.0f) || (temp_fa0 < -15.0f)) { - arg0->unk_1CC = 4.0f; - } else if ((temp_fa0 > 5.0f) || (temp_fa0 < -5.0f)) { - arg0->unk_1CC = 2.0f; + if ((xDist > 15.0f) || (xDist < -15.0f)) { + ekans->dist2DiglettLevelX = 4.0f; + } else if ((xDist > 5.0f) || (xDist < -5.0f)) { + ekans->dist2DiglettLevelX = 2.0f; } else { - arg0->unk_1CC = 1.0f; + ekans->dist2DiglettLevelX = 1.0f; } - arg0->unk_260 = 3; - if (sp20->unk_29C != 0) { - arg0->unk_29A = 2; + ekans->midAirState = 3; + if (diglett->diglettIsGold) { + ekans->ekansDiglettHitScore = 2; } else { - arg0->unk_29A = 1; + ekans->ekansDiglettHitScore = 1; } - sp18->unk_08 = 1; - sp18->unk_0C = arg1; - D_86C12040[sp18->unk_00][arg1] = 1; + activeDiglett->gotHoop = true; + activeDiglett->collidingActorId = nPlayer; + D_86C12040[activeDiglett->diglettId][nPlayer] = 1; - arg0->unk_296 = 1; - if (arg0->unk_260 == 0) { - arg0->unk_298 = 1; + ekans->unk_296 = 1; + if (ekans->midAirState == 0) { + ekans->unk_298 = 1; } } -void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1) { - if (arg0->unk_260 == 3) { - func_81400760(&arg0->unk_1A8.x, arg0->unk_1B4.x, arg0->unk_1CC); - func_81400760(&arg0->unk_1A8.z, arg0->unk_1B4.z, arg0->unk_1D4); +void miniGetCloser2Diglett(MiniActor* ekans, s32 nPlayer) { + if (ekans->midAirState == 3) { + func_81400760(&ekans->position_1.x, ekans->closestDiglettPos.x, ekans->dist2DiglettLevelX); + func_81400760(&ekans->position_1.z, ekans->closestDiglettPos.z, ekans->dist2DiglettLevelZ); } - if (arg0->unk_298 != 0) { - arg0->unk_298--; - } else if (arg0->unk_296 != 0) { - func_86C00368(8, arg0->unk_266); - arg0->unk_296 = 0; + if (ekans->unk_298 != 0) { + ekans->unk_298--; + } else if (ekans->unk_296 != 0) { + func_86C00368(8, ekans->collidingActorId); + ekans->unk_296 = 0; } - if (arg0->unk_260 < 5) { - if (arg0->unk_1C0.y <= -50.0f) { - arg0->unk_1C0.y = -50.0f; - arg0->unk_1F8 = 0.0f; - arg0->unk_200 = 0.0f; - if (arg0->unk_260 == 3) { - arg0->unk_29E = 0x1E; - arg0->unk_260 = 5; - arg0->unk_1FC *= -0.25f; + if (ekans->midAirState < 5) { + if (ekans->position_2.y <= -50.0f) { + ekans->position_2.y = -50.0f; + ekans->xSpeed = 0.0f; + ekans->zSpeed = 0.0f; + if (ekans->midAirState == 3) { + ekans->unk_29E = 0x1E; + ekans->midAirState = 5; + ekans->ySpeed *= -0.25f; } else { - arg0->unk_29E = 0xF; - arg0->unk_22E = 0x1000; - arg0->unk_260 = 6; - arg0->unk_1FC *= -0.5f; - func_86C00368(4, arg1); + ekans->unk_29E = 0xF; + ekans->ySpinSpeed = 0x1000; + ekans->midAirState = 6; + ekans->ySpeed *= -0.5f; + func_86C00368(4, nPlayer); } - arg0->unk_000.unk_000.unk_02 &= ~0x20; - arg0->unk_2A2 += arg0->unk_29A; - arg0->unk_29A = 0; + ekans->unk_000.unk_000.unk_02 &= ~0x20; + ekans->ekansScore += ekans->ekansDiglettHitScore; + ekans->ekansDiglettHitScore = 0; } } else { - if ((arg0->unk_1C0.y <= -50.0f) && (arg0->unk_260 >= 5)) { - arg0->unk_1C0.y = -50.0f; - arg0->unk_210 = 0.0f; - arg0->unk_1FC = 0.0f; - func_81400550(&arg0->unk_22E, 0, 0x100); + if ((ekans->position_2.y <= -50.0f) && (ekans->midAirState >= 5)) { + ekans->position_2.y = -50.0f; + ekans->antiAcceleration = 0.0f; + ekans->ySpeed = 0.0f; + func_81400550(&ekans->ySpinSpeed, 0, 0x100); } - if (arg0->unk_29E < 6) { - s16 tmp = arg0->unk_000.unk_01D - 0x40; + if (ekans->unk_29E < 6) { + s16 tmp = ekans->unk_000.unk_01D - 0x40; if (tmp < 0) { tmp = 0; } - arg0->unk_000.unk_01D = tmp; + ekans->unk_000.unk_01D = tmp; } - arg0->unk_29E--; - if (arg0->unk_29E <= 0) { - if ((arg0->unk_260 == 5) && (arg0->unk_2AC != 0)) { - if (arg0->unk_268 == arg0->unk_266) { - arg0->unk_266 = -1; + ekans->unk_29E--; + if (ekans->unk_29E <= 0) { + if ((ekans->midAirState == 5) && (ekans->isComp)) { + if (ekans->collidingActorId_alt == ekans->collidingActorId) { + ekans->collidingActorId = -1; } else { - arg0->unk_266 = arg0->unk_268; + ekans->collidingActorId = ekans->collidingActorId_alt; } } - arg0->unk_000.unk_000.unk_01 &= ~1; - arg0->unk_000.unk_01D = 0xFF; - arg0->unk_234 = 0; - arg0->unk_22E = 0; - arg0->unk_260 = 0; - arg0->unk_262 = 0; - arg0->unk_23E++; + ekans->unk_000.unk_000.unk_01 &= ~1; + ekans->unk_000.unk_01D = 0xFF; + ekans->yRot_3 = 0; + ekans->ySpinSpeed = 0; + ekans->midAirState = 0; + ekans->ekansIsMidAir = 0; + ekans->mainState++; } } - arg0->unk_234 += arg0->unk_22E; + ekans->yRot_3 += ekans->ySpinSpeed; } -void func_86C021FC(unk_func_8790002C* arg0) { - if (arg0->unk_280 > 5.0f) { - func_81400760(&arg0->unk_1C0.x, (-SINS(arg0->unk_214.y) * arg0->unk_280) / 3.0f, 4.0f); - func_81400760(&arg0->unk_1C0.z, (-COSS(arg0->unk_214.y) * arg0->unk_280) / 3.0f, 4.0f); +void func_86C021FC(MiniActor* ekans) { + if (ekans->stickMagnitude1 > 5.0f) { + func_81400760(&ekans->position_2.x, (-SINS(ekans->totalRot.y) * ekans->stickMagnitude1) / 3.0f, 4.0f); + func_81400760(&ekans->position_2.z, (-COSS(ekans->totalRot.y) * ekans->stickMagnitude1) / 3.0f, 4.0f); } else { - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.z = 0.0f; + ekans->position_2.x = 0.0f; + ekans->position_2.z = 0.0f; } } -void func_86C022D8(unk_func_8790002C* arg0) { - if (D_87903DA4 != 0) { - if (arg0->unk_2AC == 0) { - func_86C00770(arg0); +void miniEkansAnycontrols(MiniActor* ekans) { + if (minigameInputLock != 0) { + if (ekans->isComp == false) { + miniEkansHumanControls(ekans); } else { - func_86C01538(arg0); + miniEkansCompControls(ekans); } } } -void func_86C02324(unk_func_8790002C* arg0, s32 arg1) { - switch (arg0->unk_23E) { - case 0x0: - func_86C021FC(arg0); +void miniEkansPlayerStateMachine(MiniActor* ekans, s32 nPlayer) { + switch (ekans->mainState) { + case 0x0: // pull back + func_86C021FC(ekans); break; - case 0x1: - func_86C016C8(arg0); - func_879002B8(arg0, 1, -1, 0); - arg0->unk_262 = 1; - arg0->unk_260 = 0; - func_86C00368(3, arg1); - arg0->unk_23E++; + case 0x1: // launch + func_86C016C8(ekans); + miniChangeActorAnim(ekans, 1, -1, 0); + ekans->ekansIsMidAir = 1; + ekans->midAirState = 0; + func_86C00368(3, nPlayer); + ekans->mainState++; break; - case 0x2: - func_86C01D2C(arg0, arg1); - func_86C01FAC(arg0, arg1); + case 0x2: // on freefall + func_86C01D2C(ekans, nPlayer); + miniGetCloser2Diglett(ekans, nPlayer); break; - case 0x3: - func_879002B8(arg0, 0, -1, 1); - func_86C003AC(arg0); - arg0->unk_23E++; + case 0x3: // on ekans return + miniChangeActorAnim(ekans, 0, -1, 1); + func_86C003AC(ekans); + ekans->mainState++; break; case 0x4: - arg0->unk_000.unk_000.unk_01 |= 1; - arg0->unk_000.unk_000.unk_02 |= 0x20; - arg0->unk_298 = 0; - arg0->unk_296 = 0; - arg0->unk_280 = 0.0f; - arg0->unk_23E++; + ekans->unk_000.unk_000.unk_01 |= 1; + ekans->unk_000.unk_000.unk_02 |= 0x20; + ekans->unk_298 = 0; + ekans->unk_296 = 0; + ekans->stickMagnitude1 = 0.0f; + ekans->mainState++; break; - case 0x5: - if (func_81400760(&arg0->unk_1C0.y, 10.0f, 4.0f) != 0) { - arg0->unk_23E = 0; + case 0x5: // reapearing animation + if (func_81400760(&ekans->position_2.y, 10.0f, 4.0f) != 0) { + ekans->mainState = 0; } break; - case 0x64: - func_81400760(&arg0->unk_1C0.x, 0.0f, 4.0f); - func_81400760(&arg0->unk_1C0.z, 0.0f, 4.0f); - if (func_81400550(&arg0->unk_228, -0x8000, 0x400) != 0) { - arg0->unk_23E++; - func_8001BD04(&arg0->unk_000, 2); + case 0x64: // start win animation + func_81400760(&ekans->position_2.x, 0.0f, 4.0f); + func_81400760(&ekans->position_2.z, 0.0f, 4.0f); + if (func_81400550(&ekans->yRot_2, -0x8000, 0x400) != 0) { + ekans->mainState++; + func_8001BD04(&ekans->unk_000, 2); } break; - case 0x65: - if (func_80017514(&arg0->unk_000) != 0) { - func_80017464(&arg0->unk_000, 0xA); + case 0x65: // win animation + if (func_80017514(&ekans->unk_000) != 0) { + func_80017464(&ekans->unk_000, 0xA); } break; } @@ -2649,84 +2627,84 @@ void func_86C02324(unk_func_8790002C* arg0, s32 arg1) { void func_86C0250C(void) { } -void func_86C02514(void) { +void miniEkansPlayersUpdate(void) { s32 i; - D_879060BC = gPlayer1Controller; - D_86C0E050 = D_86C11530; + miniControllerPtr = gPlayer1Controller; + miniEkansPtr = miniEkanses; for (i = 0; i < 4; i++) { - func_86C022D8(D_86C0E050); + miniEkansAnycontrols(miniEkansPtr); - if (D_86C0E050->unk_262 != 0) { - func_879005C4(D_86C0E050); - func_86C018B8(D_86C0E050, i); + if (miniEkansPtr->ekansIsMidAir) { + miniEkansUpdatePos(miniEkansPtr); + checkCollitionWithDigletts(miniEkansPtr, i); } - D_86C0E050++; - D_879060BC++; + miniEkansPtr++; + miniControllerPtr++; } func_86C01AF8(); - D_86C0E050 = D_86C11530; + miniEkansPtr = miniEkanses; for (i = 0; i < 4; i++) { - func_86C02324(D_86C0E050, i); - func_879003A0(D_86C0E050); - func_87900770(D_86C0E050); - func_87900808(D_86C0E050); + miniEkansPlayerStateMachine(miniEkansPtr, i); + func_879003A0(miniEkansPtr); + miniActorUpdateTransform(miniEkansPtr); + func_87900808(miniEkansPtr); // update the model? - D_86C0E050++; + miniEkansPtr++; } } -void func_86C02610(unk_func_8790002C* arg0, s32 arg1) { - func_8790060C(arg0); +void initDiglett(MiniActor* diglett, s32 nDiglett) { + miniActorAllToZero(diglett); - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + diglett->scale.x = 1.0f; + diglett->scale.y = 1.0f; + diglett->scale.z = 1.0f; - arg0->unk_1A8.x = D_86C0E1CC[arg1].unk_00.x; - arg0->unk_1A8.y = D_86C0E1CC[arg1].unk_00.y; - arg0->unk_1A8.z = D_86C0E1CC[arg1].unk_00.z; + diglett->position_1.x = diglettActorInfo[nDiglett].pos.x; + diglett->position_1.y = diglettActorInfo[nDiglett].pos.y; + diglett->position_1.z = diglettActorInfo[nDiglett].pos.z; - arg0->unk_288 = D_86C0E1CC[arg1].unk_12; - arg0->unk_28C = D_86C0E1CC[arg1].unk_14; + diglett->cubeRadio = diglettActorInfo[nDiglett].unk_12; + diglett->halfHeight = diglettActorInfo[nDiglett].unk_14; - arg0->unk_258 = arg0->unk_25C = 0x64; - arg0->unk_1E4 = arg0->unk_28C * 0.5f; + diglett->miniHealth = diglett->miniMaxHealth = 0x64; + diglett->middleHeight = diglett->halfHeight / 2.0f; - func_8001BD04(&arg0->unk_000, 1); - func_879004F8(&arg0->unk_000); + func_8001BD04(&diglett->unk_000, 1); + func_879004F8(&diglett->unk_000); - arg0->unk_000.unk_01C = 0; - arg0->unk_000.unk_000.unk_02 &= ~0x40; + diglett->unk_000.unk_01C = 0; + diglett->unk_000.unk_000.unk_02 &= ~0x40; } -void func_86C026F0(unk_func_8790002C* arg0, s32 arg1) { - func_8790060C(arg0); +void initDiglettHole(MiniActor* hole, s32 arg1) { + miniActorAllToZero(hole); - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + hole->scale.x = 1.0f; + hole->scale.y = 1.0f; + hole->scale.z = 1.0f; - arg0->unk_1A8.x = D_86C0E1CC[arg1].unk_00.x; - arg0->unk_1A8.y = D_86C0E1CC[arg1].unk_00.y; - arg0->unk_1A8.z = D_86C0E1CC[arg1].unk_00.z; + hole->position_1.x = diglettActorInfo[arg1].pos.x; + hole->position_1.y = diglettActorInfo[arg1].pos.y; + hole->position_1.z = diglettActorInfo[arg1].pos.z; - arg0->unk_000.unk_000.unk_02 &= ~0x40; + hole->unk_000.unk_000.unk_02 &= ~0x40; } void func_86C0276C(void) { s32 i; for (i = 0; i < 3; i++) { - D_86C12008[i].unk_02 = 0; - D_86C12008[i].unk_00 = -1; - D_86C12008[i].unk_06 = 0; - D_86C12008[i].unk_08 = 0; - D_86C12008[i].unk_0A = 0; + activeDigletts[i].state = 0; + activeDigletts[i].diglettId = -1; + activeDigletts[i].unk_06 = 0; + activeDigletts[i].gotHoop = false; + activeDigletts[i].unk_0A = 0; } } @@ -2745,34 +2723,34 @@ void func_86C027BC(void) { func_86C0276C(); for (i = 0; i < 3; i++) { - D_86C12008[i].unk_02 = 3; - D_86C12008[i].unk_00 = -1; + activeDigletts[i].state = 3; + activeDigletts[i].diglettId = -1; } } -void func_86C02804(void) { +void initDigletts(void) { s32 i; - D_86C0E048 = D_86C0E480; - D_86C0E04C = D_86C0FCD8; + miniDiglettPtr = miniDigletts; + miniDiglettHolePtr = miniDiglettHoles; for (i = 0; i < 9; i++) { - func_86C02610(D_86C0E048, i); - func_87900770(D_86C0E048); - func_86C026F0(D_86C0E04C, i); - func_87900770(D_86C0E04C); - func_87900808(D_86C0E04C); - D_86C0E048 = &D_86C0E048[1]; - D_86C0E04C = &D_86C0E04C[1]; + initDiglett(miniDiglettPtr, i); + miniActorUpdateTransform(miniDiglettPtr); + initDiglettHole(miniDiglettHolePtr, i); + miniActorUpdateTransform(miniDiglettHolePtr); + func_87900808(miniDiglettHolePtr); + miniDiglettPtr = &miniDiglettPtr[1]; + miniDiglettHolePtr = &miniDiglettHolePtr[1]; } func_86C0276C(); } -s16 func_86C028C0(s16 arg0) { +s16 miniEkansChooseRandDiglett(UNUSED s16 activeDiglett) { s32 i; s16 sp44[3]; - s16 var_a1; + s16 rand; s16 var_s0; s16 var_s3; @@ -2782,22 +2760,22 @@ s16 func_86C028C0(s16 arg0) { var_s0 = 0; for (i = 0; i < 3; i++) { - if (D_86C12008[i].unk_00 != -1) { - sp44[var_s0] = D_86C12008[i].unk_00; + if (activeDigletts[i].diglettId != -1) { + sp44[var_s0] = activeDigletts[i].diglettId; var_s0++; } } if (var_s0 == 0) { - var_a1 = func_878001E8(0x64) % 9; + rand = func_878001E8(0x64) % 9; } else { var_s3 = 0; while (true) { var_s0 = 0; - var_a1 = func_878001E8(0x64) % 9; + rand = func_878001E8(0x64) % 9; while (true) { s16 tmp = var_s0 + 1; - if (var_a1 == sp44[var_s0]) { + if (rand == sp44[var_s0]) { break; } var_s0++; @@ -2813,162 +2791,163 @@ s16 func_86C028C0(s16 arg0) { } } - return var_a1; + return rand; } -void func_86C02A1C(unk_func_8790002C* arg0) { +void func_86C02A1C(MiniActor* diglett) { s32 temp_v0; s32 sp18 = 0; if (D_86C12038 != 0) { D_86C12038 = 0; sp18 = 1; - } else if (D_86C12088 == 0) { - if ((D_879060C2 < 0xA) && (D_86C12034 == 0)) { + } else if (ekansMinigameCountdownStarted == false) { + if ((miniEkansCountdown < 0xA) && (D_86C12034 == 0)) { sp18 = 1; } else { sp18 = 0; temp_v0 = func_878001E8(0x64); - if ((D_879060C2 < 0xA) && (temp_v0 < 0x14)) { + if ((miniEkansCountdown < 0xA) && (temp_v0 < 0x14)) { sp18 = 1; - } else if ((D_879060C2 < 0x14) && (temp_v0 < 0xF)) { + } else if ((miniEkansCountdown < 0x14) && (temp_v0 < 0xF)) { sp18 = 1; - } else if ((D_879060C2 < 0x1E) && (temp_v0 < 0xA)) { + } else if ((miniEkansCountdown < 0x1E) && (temp_v0 < 0xA)) { sp18 = 1; - } else if ((D_879060C2 < 0x28) && (temp_v0 < 5)) { + } else if ((miniEkansCountdown < 0x28) && (temp_v0 < 5)) { sp18 = 1; } } } else { temp_v0 = func_878001E8(0x64); - if ((D_879060C2 < 0x2D) && (temp_v0 < 5)) { + if ((miniEkansCountdown < 0x2D) && (temp_v0 < 5)) { sp18 = 1; } } if (sp18 != 0) { D_86C12034 += 1; - arg0->unk_29C = 1; - arg0->unk_000.unk_01C = 1; + diglett->diglettIsGold = true; + diglett->unk_000.unk_01C = 1; } } -void func_86C02B78(unk_func_8790002C* arg0, s32 arg1) { - u8 var_s0 = 0; - u8 var_a2 = 0; - u8 var_a3 = 0; +void miniEkansRecolorDiglet(MiniActor* diglett, s32 nActiveDiglett) { + u8 r = 0; + u8 g = 0; + u8 b = 0; - switch (D_86C12008[arg1].unk_0C) { + switch (activeDigletts[nActiveDiglett].collidingActorId) { case 0: - var_s0 = 0x14; - var_a2 = 0x3C; - var_a3 = 0xFF; + r = 0x14; + g = 0x3C; + b = 0xFF; break; case 1: - var_a2 = 0x96; - var_a3 = 0x3C; + g = 0x96; + b = 0x3C; break; case 2: - var_s0 = 0xC8; - var_a2 = 0x1E; - var_a3 = 0x14; + r = 0xC8; + g = 0x1E; + b = 0x14; break; case 3: - var_s0 = 0xDC; - var_a2 = 0xAA; + r = 0xDC; + g = 0xAA; break; } - func_8001BE34(&arg0->unk_000, var_s0, var_a2, var_a3, 0x80); + func_8001BE34(&diglett->unk_000, r, g, b, 0x80); } -void func_86C02C28(void) { +void miniDiglettStateMachine(void) { s32 i; for (i = 0; i < 3; i++) { - switch (D_86C12008[i].unk_02) { + switch (activeDigletts[i].state) { case 1: - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - func_879002B8(D_86C0E048, 1, -1, 0); - D_86C12008[i].unk_02 = 2; + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + miniChangeActorAnim(miniDiglettPtr, 1, -1, 0); + activeDigletts[i].state = 2; func_86C00368(6, i); break; case 2: - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - if (func_87900384(D_86C0E048) != 0) { - D_86C12008[i].unk_00 = -1; - D_86C12008[i].unk_02 = 0; + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + if (miniPokeIsIdleCheck(miniDiglettPtr)) { + activeDigletts[i].diglettId = -1; + activeDigletts[i].state = 0; } break; - case 3: - D_86C12008[i].unk_02 = 4; - D_86C12008[i].unk_04 = func_878001E8(0x14); + case 3: // get random time delay + activeDigletts[i].state = 4; + activeDigletts[i].timer = func_878001E8(0x14); break; - case 4: - D_86C12008[i].unk_04--; - if (D_86C12008[i].unk_04 < 0) { - D_86C12008[i].unk_02 = 5; - D_86C12008[i].unk_04 = 0xD; - D_86C12008[i].unk_00 = func_86C028C0(i); - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - D_86C0E048->unk_000.unk_000.unk_01 |= 1; + case 4: // pre-spawn + activeDigletts[i].timer--; // spawn delay + if (activeDigletts[i].timer < 0) { + activeDigletts[i].state = 5; + activeDigletts[i].timer = 0xD; + activeDigletts[i].diglettId = miniEkansChooseRandDiglett(i); + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + miniDiglettPtr->unk_000.unk_000.unk_01 |= 1; func_86C00368(7, i); - func_86C02A1C(D_86C0E048); - func_87900344(D_86C0E048, 1, -1, 1); + func_86C02A1C(miniDiglettPtr); + miniChangeActorAnim_alt2(miniDiglettPtr, 1, -1, 1); } break; - case 5: - D_86C12008[i].unk_04--; - if (D_86C12008[i].unk_04 < 0) { - D_86C12008[i].unk_06 = 1; - D_86C12008[i].unk_02 = 6; + case 5: // coming out of the ground anim + activeDigletts[i].timer--; // interactable delay + if (activeDigletts[i].timer < 0) { + activeDigletts[i].unk_06 = 1; + activeDigletts[i].state = 6; } break; - case 6: - if (D_86C12008[i].unk_08 != 0) { - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - func_879002B8(D_86C0E048, 2, -1, 0); - func_86C02B78(D_86C0E048, i); - D_86C12008[i].unk_02 = 7; - D_86C12008[i].unk_06 = 0; - D_86C12008[i].unk_08 = 0; + case 6: // getting hoop'd + if (activeDigletts[i].gotHoop) { + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + miniChangeActorAnim(miniDiglettPtr, 2, -1, 0); + miniEkansRecolorDiglet(miniDiglettPtr, i); + activeDigletts[i].state = 7; + activeDigletts[i].unk_06 = 0; + activeDigletts[i].gotHoop = false; } break; - case 7: - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - if (func_87900384(D_86C0E048) != 0) { - func_8001BE34(&D_86C0E048->unk_000, 0xFF, 0xFF, 0xFF, 0); - func_879002B8(D_86C0E048, 1, -1, 0); - D_86C12008[i].unk_02 = 8; + case 7: // reset active diglet + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + if (miniPokeIsIdleCheck(miniDiglettPtr)) { + // recolor diglett to white + func_8001BE34(&miniDiglettPtr->unk_000, 0xFF, 0xFF, 0xFF, 0); + miniChangeActorAnim(miniDiglettPtr, 1, -1, 0); + activeDigletts[i].state = 8; func_86C00368(9, i); } break; case 8: - D_86C0E048 = &D_86C0E480[D_86C12008[i].unk_00]; - if (func_87900384(D_86C0E048) != 0) { - D_86C0E048->unk_000.unk_000.unk_01 &= ~1; - D_86C12008[i].unk_04 = 1; - D_86C12008[i].unk_02 = 9; - D_86C0E048->unk_29C = 0; - D_86C0E048->unk_000.unk_01C = 0; + miniDiglettPtr = &miniDigletts[activeDigletts[i].diglettId]; + if (miniPokeIsIdleCheck(miniDiglettPtr)) { + miniDiglettPtr->unk_000.unk_000.unk_01 &= ~1; + activeDigletts[i].timer = 1; + activeDigletts[i].state = 9; + miniDiglettPtr->diglettIsGold = false; + miniDiglettPtr->unk_000.unk_01C = 0; } break; - case 9: - D_86C12008[i].unk_04--; - if (D_86C12008[i].unk_04 == 0) { - D_86C12008[i].unk_00 = -1; - D_86C12008[i].unk_02 = 3; + case 9: // dissapering to the ground anim + activeDigletts[i].timer--; // re-starting delay + if (activeDigletts[i].timer == 0) { + activeDigletts[i].diglettId = -1; + activeDigletts[i].state = 3; } break; } @@ -2978,36 +2957,37 @@ void func_86C02C28(void) { void func_86C03008(void) { s32 i; - func_86C02C28(); - D_86C0E048 = D_86C0E480; + miniDiglettStateMachine(); + miniDiglettPtr = miniDigletts; for (i = 0; i < 9; i++) { - func_87900770(D_86C0E048); - func_87900808(D_86C0E048); - func_879003A0(D_86C0E048); - D_86C0E048++; + miniActorUpdateTransform(miniDiglettPtr); + func_87900808(miniDiglettPtr); + func_879003A0(miniDiglettPtr); + miniDiglettPtr++; } } -void func_86C03080(void) { - func_87900854(); - func_86C005D0(); - func_86C02804(); - func_86C03500(); +// init game objects +void ekansMinigameInitObjects(void) { + func_87900854(); // minigame variables + initAllEkans(); + initDigletts(); + miniEkansInitCam(); - D_879060C2 = 0x3C; - D_879060C0 = D_879060C2 * 0x1E; + miniEkansCountdown = 0x3C; + D_879060C0 = miniEkansCountdown * 0x1E; D_86C12038 = 0; D_86C12034 = 0; } s32 func_86C030EC(void) { - unk_func_8790002C* var_v0 = D_86C11530; + MiniActor* ekans = miniEkanses; s32 ret = 1; s32 i; - for (i = 0; i < 4; i++, var_v0++) { - if (var_v0->unk_23E != 0) { + for (i = 0; i < 4; i++, ekans++) { + if (ekans->mainState != 0) { ret = 0; break; } @@ -3018,22 +2998,22 @@ s32 func_86C030EC(void) { void func_86C03128(void) { s32 i; s32 var_s2; - unk_func_8790002C* var_s0; + MiniActor* ekans; var_s2 = -1; - for (i = 0, var_s0 = D_86C11530; i < 4; i++, var_s0++) { - if (var_s2 < var_s0->unk_2A2) { - var_s2 = var_s0->unk_2A2; + for (i = 0, ekans = miniEkanses; i < 4; i++, ekans++) { + if (var_s2 < ekans->ekansScore) { + var_s2 = ekans->ekansScore; } } if (var_s2 != 0) { - var_s0 = D_86C11530; - for (i = 0; i < 4; i++, var_s0++) { - if (var_s2 == var_s0->unk_2A2) { + ekans = miniEkanses; + for (i = 0; i < 4; i++, ekans++) { + if (var_s2 == ekans->ekansScore) { func_87802F00(i); - var_s0->unk_2A8 = 1; - var_s0->unk_23E = 0x64; + ekans->isWinner = 1; + ekans->mainState = 0x64; } } } @@ -3062,18 +3042,18 @@ s32 func_86C03258(void) { D_879060C0--; if (D_879060C0 == 0) { - D_879060C2 = 0; + miniEkansCountdown = 0; func_86C00368(0xB, 0); sp1C = 1; } else { - D_879060C2 = (D_879060C0 / 30) + 1; + miniEkansCountdown = (D_879060C0 / 30) + 1; if ((D_879060C0 % 30) == 0) { - if (D_879060C2 == 0xB) { + if (miniEkansCountdown == 0xB) { sp1C = 0; func_86C00368(0xC, 0); } - if (D_879060C2 < 7) { + if (miniEkansCountdown < 7) { sp1C = 0; func_86C00368(0xA, 0); } @@ -3082,55 +3062,55 @@ s32 func_86C03258(void) { return sp1C; } -void func_86C03344(void) { - switch (D_87903DA0) { - case 1: - D_87906040 = 0xF; - D_87903DA0++; +void miniEkansMinigameStateMachine(void) { + switch (minigameState) { + case 1: // after pressing start + miniInputLockTimer = 0xF; + minigameState++; break; - case 2: - D_87906040 -= 1; - if (D_87906040 < 0) { + case 2: // waits for some frames before starting the main countdown + miniInputLockTimer -= 1; + if (miniInputLockTimer < 0) { func_8780295C(1); - D_87903DA0++; + minigameState++; } break; - case 3: + case 3: // main game loop if (func_86C031E4() != 0) { func_86C027BC(); func_86C00AA4(); - D_87903DA4 = 1; - D_87903DA0++; + minigameInputLock = 1; + minigameState++; } break; - case 4: + case 4: // main countdown ends, adds a little wait if (func_86C03258() != 0) { - D_87903DC4 = 4; - D_87906040 = 0x32; - D_87903DA4 = 0; - D_87903DA0++; + miniTutoScreenState = 4; + miniInputLockTimer = 0x32; + minigameInputLock = 0; + minigameState++; } break; - case 5: - D_87906040--; - if (D_87906040 < 0) { - D_87906040 = 0; + case 5: // state 5: after the wait, ends the minigame + miniInputLockTimer--; + if (miniInputLockTimer < 0) { + miniInputLockTimer = 0; } - if ((func_86C030EC() != 0) && (D_87906040 == 0)) { + if ((func_86C030EC() != 0) && (miniInputLockTimer == 0)) { func_86C03128(); func_87802EB8(1); func_87903294(); - D_87903DA0++; + minigameState++; } break; case 6: if (D_8780FC96 != 0) { - D_87903DA0++; + minigameState++; D_87903DAC = 1; } break; @@ -3142,21 +3122,21 @@ void func_86C03344(void) { void func_86C034F8(void) { } -void func_86C03500(void) { +void miniEkansInitCam(void) { D_87906054 = D_87906050->unk_00.unk_0C; - D_87906060 = 0x1800; - D_87906062 = 0; - D_87906064 = 0xF0; - D_87906066 = 0x1E; - D_87906068 = 0x32; - D_8790606A = 0x7D0; + miniCameraXRot = 0x1800; + miniCameraYRot = 0; + miniCameraDistance = 0xF0; + miniCameraFov = 0x1E; + miniCameraNear = 0x32; + miniCameraFar = 0x7D0; - D_8790606C.x = 0; - D_8790606C.y = 0x56; - D_8790606C.z = 0; + miniCameraCoords.x = 0; + miniCameraCoords.y = 0x56; + miniCameraCoords.z = 0; - func_87900B64(); + miniUpdateCamera(); D_879060CA = 0; @@ -3170,8 +3150,8 @@ void func_86C03500(void) { } void func_86C035E0(void) { - func_87900C5C(); - func_87900B64(); + minigameDebuggModeControl(); + miniUpdateCamera(); } void func_86C03608(void) { @@ -3247,41 +3227,41 @@ void func_86C03AB8(void) { break; } - if (D_87903DC4 == -2) { + if (miniTutoScreenState == -2) { func_8001F3F4(); func_8001F444(); } } -void func_86C03BE8(void) { - func_8001F324(0xFF, 0xC8, 0x32, 0xFF); - func_8001EBE0(8, 0); - func_8001F1E8(0x80, 0x14, func_8002D7C0(NULL, 0, D_87806330, 0x5D)); - func_8001F1E8(0xAA, 0x14, "%d", D_879060C2); +void miniEkansDrawCountdown(void) { + func_8001F324(0xFF, 0xC8, 0x32, 0xFF); // set color + func_8001EBE0(8, 0); // set style + func_8001F1E8(0x80, 0x14, func_8002D7C0(NULL, 0, D_87806330, 0x5D)); // TIME text + func_8001F1E8(0xAA, 0x14, "%d", miniEkansCountdown); } -void func_86C03C64(void) { - unk_func_8790002C* var_s4 = D_86C11530; +void miniEkansDrawHub(void) { + MiniActor* ekans = miniEkanses; s32 i; func_8001F3F4(); - if (D_86C12088 == 0) { - func_86C03BE8(); + if (ekansMinigameCountdownStarted == false) { + miniEkansDrawCountdown(); } func_8001F444(); gSPDisplayList(gDisplayListHead++, D_8006F518); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, D_879060C8); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, miniHudTransparency); - if (D_86C12088 != 0) { + if (ekansMinigameCountdownStarted) { func_878021B4(0x1E, 0x17); } - for (i = 0; i < 4; i++, var_s4++) { - s16 tmp = D_86C0E384[i]; + for (i = 0; i < 4; i++, ekans++) { + s16 tmp = playerGUIScoreXPositions[i]; - if (D_86C12088 == 0) { - if (var_s4->unk_2AC != 0) { + if (ekansMinigameCountdownStarted == false) { + if (ekans->isComp != 0) { func_87801644(-1 - i, tmp, 0xCC, 0.75f); } else { func_87801644(i, tmp, 0xCC, 0.75f); @@ -3289,7 +3269,7 @@ void func_86C03C64(void) { } else { func_87801644(i, tmp, 0xCC, 0.75f); } - func_8001F1E8(tmp + 0x14, 0xCC, " %d", D_86C11530[i].unk_2A2); + func_8001F1E8(tmp + 0x14, 0xCC, " %d", miniEkanses[i].ekansScore); } gSPDisplayList(gDisplayListHead++, D_8006F630); @@ -3299,23 +3279,23 @@ void func_86C03E4C(void) { func_87903260(); func_86C03AB8(); - if (D_87906044 != 0) { - func_86C03C64(); + if (miniShowHUB) { + miniEkansDrawHub(); } } void func_86C03E8C(s32 arg0) { if (D_8780FC98 == 0) { - func_86C03E4C(); + func_86C03E4C(); // HUB } - if (D_86C12088 == 0) { + if (ekansMinigameCountdownStarted == false) { func_87804FD4(); } } void func_86C03ED4(void) { - unk_func_8790002C* var_s0 = D_86C11530; + MiniActor* ekans = miniEkanses; s32 i; Vec3f sp7C; Vec3s sp74; @@ -3326,14 +3306,14 @@ void func_86C03ED4(void) { sp74.y = 0; sp74.z = 0; - func_8140419C(D_86C0D048, 0x40, 0x40); + func_8140419C(ekansShadowTexture, 0x40, 0x40); - for (i = 0; i < 4; i++, var_s0++) { - if (var_s0->unk_23E == 2) { + for (i = 0; i < 4; i++, ekans++) { + if (ekans->mainState == 2) { gSPDisplayList(gDisplayListHead++, D_8140DD58); - func_81405B70(D_86C0E38C[i].r, D_86C0E38C[i].g, D_86C0E38C[i].b, (var_s0->unk_000.unk_01D / 2) & 0xFF); - func_80015390(&var_s0->unk_000, 0xA, &sp7C); + func_81405B70(playerColors[i].r, playerColors[i].g, playerColors[i].b, (ekans->unk_000.unk_01D / 2) & 0xFF); + func_80015390(&ekans->unk_000, 0xA, &sp7C); sp7C.y = 5.0f; @@ -3356,71 +3336,71 @@ void func_86C040B4(s32 arg0) { func_87901C98(); func_86C03ED4(); - if (D_87903DB0 == 0) { + if (miniDebugMode == false) { func_86C03E8C(arg0); } - if (D_87903DB0 != 0) { - func_87900F44(); - func_879010A4(); + if (miniDebugMode) { + showDebuggCameraInfo(); + showDebuggJoystickInfo(); } - if (D_86C12088 != 0) { + if (ekansMinigameCountdownStarted) { func_8780005C(); } func_80007778(); } -void func_86C04170(void) { - func_86C03080(); - func_87900558(); - func_87901620(); +void initEkansMinigameAssets(void) { + ekansMinigameInitObjects(); // init game objects + hideMiniGameHUD(); + func_87901620(); // memory something func_800077B4(0xA); func_80006C6C(0x10); - if (D_86C12088 != 0) { - D_87903DC4 = 1; - D_87906044 = 1; - D_87903DA0 = 1; + if (ekansMinigameCountdownStarted) { + miniTutoScreenState = 1; + miniShowHUB = 1; + minigameState = 1; } else { - D_87903DC4 = 3; + miniTutoScreenState = 3; } } -void func_86C041E8(void) { +void miniEkansTutoScreenControls(void) { s32 var_s1 = 1; while (var_s1 != 0) { - func_87900528(); + func_87900528(); // input - if ((D_87903DB0 == 0) && (func_80007604() == 0)) { - if (D_86C12088 != 0) { - if ((gPlayer1Controller->buttonPressed != 0) || (D_879060C2 == 0x28)) { - func_87802EB8(2); + if ((miniDebugMode == false) && (func_80007604() == 0)) { + if (ekansMinigameCountdownStarted) { + if ((gPlayer1Controller->buttonPressed != 0) || (miniEkansCountdown == 0x28)) { + func_87802EB8(2); // D_8780FC92 = 1 } - } else if (D_87906044 == 0) { - if (gPlayer1Controller->buttonPressed & 0x1000) { - D_87903DC4 = 1; - D_87903DA0 = 1; - D_87906044 = 1; + } else if (miniShowHUB == false) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { + miniTutoScreenState = 1; + minigameState = 1; + miniShowHUB = true; func_86C00368(0x10, 0); - } else if ((D_8780FA2A == 0) && (gPlayer1Controller->buttonPressed & 0x4000)) { + } else if ((D_8780FA2A == 0) && (BTN_IS_PRESSED(gPlayer1Controller, BTN_B))) { func_86C00368(0x11, 0); - func_87802EB8(2); + func_87802EB8(2); // D_8780FC92 = 1 } } } if (D_8780FC94 == 0) { func_8140C5D0(); - func_86C03344(); - func_86C02514(); + miniEkansMinigameStateMachine(); + miniEkansPlayersUpdate(); func_86C03008(); func_86C035E0(); } - if ((D_87903DB0 == 0) && ((D_87903DAC != 0) || (D_8780FC92 != 0))) { + if ((miniDebugMode == false) && ((D_87903DAC != 0) || (D_8780FC92 != 0))) { var_s1 = 0; } @@ -3428,23 +3408,23 @@ void func_86C041E8(void) { } } -void func_86C043C4(void) { +void ekansMinigameUpdate(void) { s32 i; func_80006CB4(0x1E); - if (D_86C12088 != 0) { + if (ekansMinigameCountdownStarted) { func_86C00368(0x13, 0x1E); } else { func_86C00368(0x12, 0x1E); } for (i = 0; i < 30; i++) { - func_87900528(); + func_87900528(); // input if (D_8780FC94 == 0) { func_8140C5D0(); - func_86C03344(); - func_86C02514(); + miniEkansMinigameStateMachine(); + miniEkansPlayersUpdate(); func_86C03008(); func_86C035E0(); } @@ -3466,55 +3446,55 @@ void func_86C044B4(void) { func_8001BB20(); for (i = 0; i < 4; i++) { - func_8001BB58(&D_86C11530[i].unk_000); + func_8001BB58(&miniEkanses[i].unk_000); } for (i = 0; i < 9; i++) { - func_8001BB58(&D_86C0E480[i].unk_000); + func_8001BB58(&miniDigletts[i].unk_000); } for (i = 0; i < 9; i++) { - func_8001BB58(&D_86C0FCD8[i].unk_000); + func_8001BB58(&miniDiglettHoles[i].unk_000); } func_8001987C(); temp_s1 = func_80019D18(0x9F); for (i = 0; i < 4; i++) { - D_86C11530[i].unk_23C = 0x9F; - D_86C11530[i].unk_168 = temp_s1; - func_8001BC34(&D_86C11530[i].unk_000, 0, D_86C11530[i].unk_23C, temp_s1->unk_08->unk_00[0]); - func_8001BD04(&D_86C11530[i].unk_000, 0); + miniEkanses[i].unk_23C = 0x9F; + miniEkanses[i].unk_168 = temp_s1; + func_8001BC34(&miniEkanses[i].unk_000, 0, miniEkanses[i].unk_23C, temp_s1->unk_08->unk_00[0]); + func_8001BD04(&miniEkanses[i].unk_000, 0); } temp_s1 = func_80019D18(0xA4); for (i = 0; i < 9; i++) { - D_86C0E480[i].unk_23C = 0xA4; - D_86C0E480[i].unk_168 = temp_s1; - func_8001BC34(&D_86C0E480[i].unk_000, 0, D_86C0E480[i].unk_23C, temp_s1->unk_08->unk_00[0]); - D_86C0E480[i].unk_000.unk_000.unk_01 &= ~1; + miniDigletts[i].unk_23C = 0xA4; + miniDigletts[i].unk_168 = temp_s1; + func_8001BC34(&miniDigletts[i].unk_000, 0, miniDigletts[i].unk_23C, temp_s1->unk_08->unk_00[0]); + miniDigletts[i].unk_000.unk_000.unk_01 &= ~1; } temp_s1 = func_80019D18(0xA3); for (i = 0; i < 9; i++) { - D_86C0FCD8[i].unk_23C = 0xA3; - D_86C0FCD8[i].unk_168 = temp_s1; - func_8001BC34(&D_86C0FCD8[i].unk_000, 0, D_86C0FCD8[i].unk_23C, temp_s1->unk_08->unk_00[0]); + miniDiglettHoles[i].unk_23C = 0xA3; + miniDiglettHoles[i].unk_168 = temp_s1; + func_8001BC34(&miniDiglettHoles[i].unk_000, 0, miniDiglettHoles[i].unk_23C, temp_s1->unk_08->unk_00[0]); } } -s32 func_86C046B0(s32 arg0, UNUSED s32 arg1) { +s32 ekansMinigameLoad(s32 arg0, UNUSED s32 arg1) { unk_func_80007444* sp24; if (arg0 == 1) { - D_86C12088 = 1; + ekansMinigameCountdownStarted = true; func_878010C8(0xD); func_86C00368(0x10, 0); } else { - D_86C12088 = 0; + ekansMinigameCountdownStarted = false; } - D_87906046 = D_8780FA38; + miniDifficulty = D_8780FA38; // difficulty ? main_pool_push_state('MINI'); @@ -3526,14 +3506,14 @@ s32 func_86C046B0(s32 arg0, UNUSED s32 arg1) { FRAGMENT_LOAD(fragment31); func_80004454((((u32)D_8D000000 & 0x0FF00000) >> 0x14) - 0x10, _5C7A70_ROM_START, pokedex_area_model_ROM_START); - func_86C044B4(); + func_86C044B4(); // memory func_80007678(sp24); - func_86C04170(); - func_86C041E8(); - func_86C043C4(); + initEkansMinigameAssets(); + miniEkansTutoScreenControls(); + ekansMinigameUpdate(); func_800076C0(); - func_8001E9CC(); - func_80005EAC(); + func_8001E9CC(); // main_pool_try_free(D_800AC870); + func_80005EAC(); // main_pool_try_free(D_800A7428.unk4); main_pool_try_free(D_800A7428.unk0); main_pool_pop_state('MINI'); diff --git a/src/fragments/18/fragment18.h b/src/fragments/18/fragment18.h index bf21195..d4bc8bb 100644 --- a/src/fragments/18/fragment18.h +++ b/src/fragments/18/fragment18.h @@ -4,73 +4,73 @@ #include "global.h" #include "src/fragments/3/fragment3.h" -s32 func_86C00020(unk_func_8790002C* arg0); -void func_86C00090(s16 arg0, s32* arg1, s32* arg2); +s32 func_86C00020(MiniActor* arg0); +void miniDiglettGoldCheck(s16 arg0, s32* arg1, s32* arg2); void func_86C00110(s16 arg0, s16 arg1); void func_86C00368(s16 arg0, s16 arg1); -void func_86C003AC(unk_func_8790002C* arg0); -void func_86C00424(unk_func_8790002C* arg0, s16 arg1); -void func_86C005D0(void); -f32 func_86C0063C(unk_func_8790002C* arg0); -s16 func_86C00668(unk_func_8790002C* arg0, s16 arg1); -void func_86C00770(unk_func_8790002C* arg0); +void func_86C003AC(MiniActor* arg0); +void initEkans(MiniActor* ekans, s16 player); +void initAllEkans(void); +f32 func_86C0063C(MiniActor* arg0); +s16 func_86C00668(MiniActor* arg0, s16 arg1); +void miniEkansHumanControls(MiniActor* ekans); void func_86C00AA4(void); -s32 func_86C00B0C(unk_func_8790002C* arg0); +s32 func_86C00B0C(MiniActor* arg0); s16 func_86C00BB4(void); -s16 func_86C00C40(unk_func_8790002C* arg0); -s16 func_86C00D50(unk_func_8790002C* arg0); -s32 func_86C00EF8(unk_func_8790002C* arg0); -void func_86C00F70(unk_func_8790002C* arg0); -void func_86C01100(unk_func_8790002C* arg0); +s16 func_86C00C40(MiniActor* arg0); +s16 func_86C00D50(MiniActor* arg0); +s32 func_86C00EF8(MiniActor* arg0); +void func_86C00F70(MiniActor* compEkans); +void miniEkansCompGetForce(MiniActor* compEkans); s16 func_86C01408(void); s16 func_86C014A0(void); -void func_86C01538(unk_func_8790002C* arg0); -void func_86C016C8(unk_func_8790002C* arg0); +void miniEkansCompControls(MiniActor* compEkans); +void func_86C016C8(MiniActor* ekans); void func_86C01748(void); -void func_86C01750(unk_func_8790002C* arg0, s32 arg1, s32 arg2, f32 arg3, f32 arg4, f32 arg5); -void func_86C018B8(unk_func_8790002C* arg0, s32 arg1); +void ekansFixDirToDiglett(MiniActor* arg0, s32 arg1, s32 arg2, f32 arg3, f32 arg4, f32 arg5); +void checkCollitionWithDigletts(MiniActor* ekans, s32 nPlayer); void func_86C01AF8(void); -void func_86C01D2C(unk_func_8790002C* arg0, s32 arg1); -void func_86C01FAC(unk_func_8790002C* arg0, s32 arg1); -void func_86C021FC(unk_func_8790002C* arg0); -void func_86C022D8(unk_func_8790002C* arg0); -void func_86C02324(unk_func_8790002C* arg0, s32 arg1); +void func_86C01D2C(MiniActor* ekans, s32 nPlayer); +void miniGetCloser2Diglett(MiniActor* ekans, s32 nPlayer); +void func_86C021FC(MiniActor* ekans); +void miniEkansAnycontrols(MiniActor* ekans); +void miniEkansPlayerStateMachine(MiniActor* ekans, s32 nPlayer); void func_86C0250C(void); -void func_86C02514(void); -void func_86C02610(unk_func_8790002C* arg0, s32 arg1); -void func_86C026F0(unk_func_8790002C* arg0, s32 arg1); +void miniEkansPlayersUpdate(void); +void initDiglett(MiniActor* diglett, s32 nDiglett); +void initDiglettHole(MiniActor* hole, s32 arg1); void func_86C0276C(void); void func_86C027A4(void); void func_86C027AC(void); void func_86C027B4(void); void func_86C027BC(void); -void func_86C02804(void); -s16 func_86C028C0(s16 arg0); -void func_86C02A1C(unk_func_8790002C* arg0); -void func_86C02B78(unk_func_8790002C* arg0, s32 arg1); -void func_86C02C28(void); +void initDigletts(void); +s16 miniEkansChooseRandDiglett(s16 arg0); +void func_86C02A1C(MiniActor* diglett); +void miniEkansRecolorDiglet(MiniActor* diglett, s32 nActiveDiglett); +void miniDiglettStateMachine(void); void func_86C03008(void); -void func_86C03080(void); +void ekansMinigameInitObjects(void); s32 func_86C030EC(void); void func_86C03128(void); s32 func_86C031E4(void); s32 func_86C03258(void); -void func_86C03344(void); +void miniEkansMinigameStateMachine(void); void func_86C034F8(void); -void func_86C03500(void); +void miniEkansInitCam(void); void func_86C035E0(void); void func_86C03608(void); void func_86C03AB8(void); -void func_86C03BE8(void); -void func_86C03C64(void); +void miniEkansDrawCountdown(void); +void miniEkansDrawHub(void); void func_86C03E4C(void); void func_86C03E8C(s32 arg0); void func_86C03ED4(void); void func_86C040B4(s32 arg0); -void func_86C04170(void); -void func_86C041E8(void); -void func_86C043C4(void); +void initEkansMinigameAssets(void); +void miniEkansTutoScreenControls(void); +void ekansMinigameUpdate(void); void func_86C044B4(void); -s32 func_86C046B0(s32 arg0, UNUSED s32 arg1); +s32 ekansMinigameLoad(s32 arg0, UNUSED s32 arg1); #endif // _FRAGMENT18_H_ diff --git a/src/fragments/19/fragment19.c b/src/fragments/19/fragment19.c index 1261ba7..55a86bc 100644 --- a/src/fragments/19/fragment19.c +++ b/src/fragments/19/fragment19.c @@ -21,33 +21,33 @@ static u32 D_86D00530[] = { void func_86D00020(void) { D_87906054 = D_87906050->unk_00.unk_0C; - D_87906060 = 0xA00; - D_87906062 = 0; - D_87906064 = 0x17C; - D_87906066 = 0x1E; - D_87906068 = 0x32; - D_8790606A = 0x1900; + miniCameraXRot = 0xA00; + miniCameraYRot = 0; + miniCameraDistance = 0x17C; + miniCameraFov = 0x1E; + miniCameraNear = 0x32; + miniCameraFar = 0x1900; - D_8790606C.x = 0; - D_8790606C.y = 0x1E; - D_8790606C.z = 0; + miniCameraCoords.x = 0; + miniCameraCoords.y = 0x1E; + miniCameraCoords.z = 0; - func_87900B64(); + miniUpdateCamera(); } -void func_86D000A8(void) { - func_87900C5C(); - func_87900B64(); +void miniUnkUpdateCamera(void) { + minigameDebuggModeControl(); + miniUpdateCamera(); } -void func_86D000D0(UNUSED s32 arg0) { +void miniUnkDrawHUB(UNUSED s32 arg0) { func_800079C4(); func_8000699C(&gDisplayListHead, 1); func_80015348(); func_80015094(&D_87906050->unk_00); - if (D_87903DB0 != 0) { - func_87900F44(); + if (miniDebugMode != 0) { + showDebuggCameraInfo(); } func_80007778(); @@ -55,10 +55,10 @@ void func_86D000D0(UNUSED s32 arg0) { void func_86D00134(void) { func_80006C6C(0x10); - D_87903DC4 = 3; + miniTutoScreenState = 3; } -void func_86D0015C(void) { +void miniUnkControls(void) { s32 var_s1 = 1; while (var_s1 != 0) { @@ -77,21 +77,21 @@ void func_86D0015C(void) { } if (BTN_IS_PRESSED(gPlayer1Controller, BTN_Z)) { - D_87903DB0 = (D_87903DB0 + 1) & 1; + miniDebugMode = (miniDebugMode + 1) & 1; } - if ((D_87903DB0 == 0) && BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { - D_87903DA0 = 1; + if ((miniDebugMode == 0) && BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { + minigameState = 1; } func_8790370C(); - func_86D000A8(); + miniUnkUpdateCamera(); - if ((D_87903DB0 == 0) && BTN_IS_PRESSED(gPlayer1Controller, BTN_CDOWN)) { + if ((miniDebugMode == 0) && BTN_IS_PRESSED(gPlayer1Controller, BTN_CDOWN)) { var_s1 = 0; } - func_86D000D0(1); + miniUnkDrawHUB(1); } } @@ -101,8 +101,8 @@ void func_86D0032C(void) { func_80006CB4(0x1E); for (i = 0; i < 30; i++) { - func_87900528(); - func_86D000D0(2); + func_87900528(); // inputs + miniUnkDrawHUB(2); } } @@ -134,7 +134,7 @@ s32 func_86D003EC(s32 arg0, s32 arg1) { func_86D0037C(); func_80007678(sp24); func_86D00134(); - func_86D0015C(); + miniUnkControls(); func_86D0032C(); func_800076C0(); func_8001E9CC(); diff --git a/src/fragments/19/fragment19.h b/src/fragments/19/fragment19.h index 42c386b..cf559e9 100644 --- a/src/fragments/19/fragment19.h +++ b/src/fragments/19/fragment19.h @@ -4,10 +4,10 @@ #include "global.h" void func_86D00020(void); -void func_86D000A8(void); -void func_86D000D0(UNUSED s32 arg0); +void miniUnkUpdateCamera(void); +void miniUnkDrawHUB(UNUSED s32 arg0); void func_86D00134(void); -void func_86D0015C(void); +void miniUnkControls(void); void func_86D0032C(void); void func_86D0037C(void); s32 func_86D003EC(s32 arg0, s32 arg1); diff --git a/src/fragments/2/fragment2.c b/src/fragments/2/fragment2.c index 7c7f239..cea7cef 100644 --- a/src/fragments/2/fragment2.c +++ b/src/fragments/2/fragment2.c @@ -339,8 +339,8 @@ u32* D_8780FA70; #pragma GLOBAL_ASM("asm/us/nonmatchings/fragments/2/fragment2/func_87801400.s") #endif -void func_87801644(s32 arg0, s16 arg1, s16 arg2, f32 arg3) { - func_87801400(arg0, arg1, arg2, arg3, arg3); +void func_87801644(s32 arg0, s16 arg1, s16 arg2, f32 _scale) { + func_87801400(arg0, arg1, arg2, _scale, _scale); } void func_87801684(s16 arg0, s16 arg1, unk_func_87801684* arg2) { diff --git a/src/fragments/20/fragment20.c b/src/fragments/20/fragment20.c index a2a207b..53f0992 100644 --- a/src/fragments/20/fragment20.c +++ b/src/fragments/20/fragment20.c @@ -29,16 +29,16 @@ extern u8 D_03040580[]; extern u8 D_03040D80[]; extern u8 D_03040980[]; -typedef struct unk_D_86E04BFC { +typedef struct MiniRockInfo { /* 0x00 */ Vec3f unk_00; /* 0x0C */ Vec3s unk_0C; /* 0x12 */ s16 unk_12; /* 0x14 */ s16 unk_14; /* 0x16 */ s16 unk_16; -} unk_D_86E04BFC; // size = 0x18 +} MiniRockInfo; // size = 0x18 -static unk_func_8790002C D_86E04D60[4]; -static unk_func_8790002C D_86E05830[20]; +static MiniActor miniMetapods[4]; +static MiniActor miniMetapodRocks[20]; static s16 D_86E08E40; static unk_D_800AC870* D_86E08E44; @@ -455,8 +455,8 @@ static u32 D_86E04AE0[] = { static s16 D_86E04B20 = 0; static s16 D_86E04B24 = 1; static s16 D_86E04B28 = 0; -static unk_func_8790002C* D_86E04B2C = D_86E04D60; -static unk_func_8790002C* D_86E04B30 = D_86E05830; +static MiniActor* miniMetapodPtr = miniMetapods; +static MiniActor* miniRockPtr = miniMetapodRocks; static u32 D_86E04B34[] = { 0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0xFFE20032, 0x00000000, 0x00000000, 0x05000000, 0x0D000000, 0x05000000, 0x14000000, 0x002B0012, 0xFFFFFF32, 0x16FFFFFF, 0x0F000003, @@ -464,13 +464,13 @@ static u32 D_86E04B34[] = { 0x00000000, D_86E04AE0, 0x06000000, 0x06000000, 0x05000000, 0x0A000000, &D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x03000000, D_87806398, 0x06000000, 0x01000000, }; -static Vec3f D_86E04BCC[] = { +static Vec3f miniMetapodInfo[] = { { -54.0f, 0.0f, 0.0f }, { -18.0f, 0.0f, 0.0f }, { 18.0f, 0.0f, 0.0f }, { 54.0f, 0.0f, 0.0f }, }; -static unk_D_86E04BFC D_86E04BFC[] = { +static MiniRockInfo miniRockInfos[] = { { { -54.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, { { -18.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, { { 18.0f, 0.0f, -300.0f }, { 0, 0, 0 }, 20, 40, 0 }, @@ -568,99 +568,99 @@ void func_86E001A0(s16 arg0, s16 arg1) { } } -void func_86E001E4(unk_func_8790002C* arg0, s32 arg1) { - func_8790060C(arg0); +void miniInitMetapodPlayer(MiniActor* metapod, s32 arg1) { + miniActorAllToZero(metapod); - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + metapod->scale.x = 1.0f; + metapod->scale.y = 1.0f; + metapod->scale.z = 1.0f; - arg0->unk_1A8.x = D_86E04BCC[arg1].x; - arg0->unk_1A8.y = D_86E04BCC[arg1].y; - arg0->unk_1A8.z = D_86E04BCC[arg1].z; + metapod->position_1.x = miniMetapodInfo[arg1].x; + metapod->position_1.y = miniMetapodInfo[arg1].y; + metapod->position_1.z = miniMetapodInfo[arg1].z; - if (arg0->unk_23C == 0x9E) { - arg0->unk_1A8.z -= 10.0f; + if (metapod->unk_23C == 0x9E) { // if poke is metapod (not weedle) move it slightly + metapod->position_1.z -= 10.0f; } - arg0->unk_21A = 0; - arg0->unk_21C = 0; - arg0->unk_21E = 0; - arg0->unk_25C = 0x190; - arg0->unk_258 = arg0->unk_25C; - arg0->unk_2A6 = 5; - arg0->unk_1E4 = arg0->unk_28C * 0.5f; + metapod->xRot_1 = 0; + metapod->yRot_1 = 0; + metapod->zRot_1 = 0; + metapod->miniMaxHealth = 0x190; + metapod->miniHealth = metapod->miniMaxHealth; + metapod->unk_2A6 = 5; + metapod->middleHeight = metapod->halfHeight * 0.5f; - func_8001BD04(&arg0->unk_000, 0); - func_80017788(&arg0->unk_000); - arg0->unk_000.unk_01C = 0; - func_87900770(arg0); - arg0->unk_2AC = D_879060C4[arg1]; + func_8001BD04(&metapod->unk_000, 0); + func_80017788(&metapod->unk_000); + metapod->unk_000.unk_01C = 0; + miniActorUpdateTransform(metapod); + metapod->isComp = D_879060C4[arg1]; } -void func_86E002E4(void) { +void miniInitMetapodPlayers(void) { s32 i; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - func_86E001E4(D_86E04B2C, i); - D_86E04B2C++; + miniInitMetapodPlayer(miniMetapodPtr, i); + miniMetapodPtr++; } } -void func_86E0034C(unk_func_8790002C* arg0) { - arg0->unk_25A++; - arg0->unk_272 = 4; - arg0->unk_000.unk_01C = 1; +void func_86E0034C(MiniActor* metapod) { + metapod->damageTimer++; + metapod->unk_272 = 4; + metapod->unk_000.unk_01C = 1; } -void func_86E0036C(unk_func_8790002C* arg0) { - if (arg0->unk_29A != 0) { - arg0->unk_29A--; +void miniMetapodHumanControls(MiniActor* metapod) { + if (metapod->metapodInputLockTimer != 0) { + metapod->metapodInputLockTimer--; } - if ((D_879060BC->buttonDown & 0x8000) && (arg0->unk_23E == 0) && (arg0->unk_240 == 0) && (arg0->unk_2AA == 0) && - (arg0->unk_29A == 0)) { - arg0->unk_23E = 1; + if ((BTN_IS_DOWN(miniControllerPtr, BTN_A)) && (metapod->mainState == 0) && (metapod->isSquashed == 0) && + (metapod->unk_2AA == 0) && (metapod->metapodInputLockTimer == 0)) { + metapod->mainState = 1; } - switch (arg0->unk_23E) { - case 1: - func_86E0034C(arg0); - func_879002B8(arg0, 1, -1, 1); - func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_879029F0, &D_87903E40, 4); - arg0->unk_23E++; + switch (metapod->mainState) { + case 1: // start harden + func_86E0034C(metapod); + miniChangeActorAnim(metapod, 1, -1, 1); + func_81407D48(1.0f, metapod->totalPos, metapod->totalRot, func_879029F0, &D_87903E40, 4); + metapod->mainState++; break; - case 2: - if (func_80017484(&arg0->unk_000, 5) != 0) { - arg0->unk_000.unk_000.unk_02 &= ~0x20; + case 2: // harden + if (func_80017484(&metapod->unk_000, 5) != 0) { + metapod->unk_000.unk_000.unk_02 &= ~0x20; } - if (!(D_879060BC->buttonDown & 0x8000) || (arg0->unk_2AA != 0)) { - arg0->unk_23E = 0; - arg0->unk_000.unk_000.unk_02 |= 0x20; - } else if ((D_879060BC->buttonDown & 0x8000) != 0) { - func_86E0034C(arg0); + if (!(BTN_IS_DOWN(miniControllerPtr, BTN_A)) || (metapod->unk_2AA != 0)) { + metapod->mainState = 0; + metapod->unk_000.unk_000.unk_02 |= 0x20; + } else if (BTN_IS_DOWN(miniControllerPtr, BTN_A)) { + func_86E0034C(metapod); } break; } } -void func_86E004FC(unk_func_8790002C* arg0) { - if (arg0->unk_2AC != 0) { - arg0->unk_244 = 0; - arg0->unk_242 = 0; +void func_86E004FC(MiniActor* metapod) { + if (metapod->isComp) { + metapod->unk_244 = 0; + metapod->compState = 0; } } -s32 func_86E00518(unk_func_8790002C* arg0, s32 arg1) { +s32 func_86E00518(UNUSED MiniActor* metapod, s32 arg1) { s32 sp1C; s32 sp18; s32 var_v1; s32 temp_v0; - switch (D_87906046) { + switch (miniDifficulty) { case 0: if (arg1 < 0xA) { sp1C = 0x32; @@ -712,13 +712,13 @@ s32 func_86E00518(unk_func_8790002C* arg0, s32 arg1) { return var_v1; } -void func_86E0063C(unk_func_8790002C* arg0, s32 arg1) { +void func_86E0063C(MiniActor* metapod, s32 arg1) { s32 sp2C; s32 sp28; u32 sp24; u32 temp_s1 = func_878001E8(arg1); - switch (D_87906046) { + switch (miniDifficulty) { case 0: sp2C = func_878001E8(0xA) + 2; sp28 = arg1 - temp_s1; @@ -748,12 +748,12 @@ void func_86E0063C(unk_func_8790002C* arg0, s32 arg1) { break; } - arg0->unk_244 = temp_s1; - arg0->unk_29E = sp2C; - arg0->unk_2B2 = sp24; + metapod->unk_244 = temp_s1; + metapod->unk_29E = sp2C; + metapod->unk_2B2 = sp24; } -void func_86E0073C(unk_func_8790002C* arg0, s32 arg1) { +void func_86E0073C(MiniActor* arg0, s32 arg1) { u32 sp2C; UNUSED s32 pad[3]; u32 sp1C; @@ -778,19 +778,19 @@ void func_86E0073C(unk_func_8790002C* arg0, s32 arg1) { arg0->unk_2B2 = var_a2; } -void func_86E007BC(unk_func_8790002C* arg0, s32 arg1) { - arg0->unk_244 = arg1; - arg0->unk_29E = 0; - arg0->unk_2B2 = 0; +void func_86E007BC(MiniActor* metapod, s32 arg1) { + metapod->unk_244 = arg1; + metapod->unk_29E = 0; + metapod->unk_2B2 = 0; } -void func_86E007CC(unk_func_8790002C* arg0, s32 arg1) { +void func_86E007CC(MiniActor* metapod, s32 player) { s32 i; s32 sp20; s32 var_t0 = 0; - if (arg0->unk_240 == 0) { - switch (D_87906046) { + if (metapod->isSquashed == 0) { + switch (miniDifficulty) { case 0: sp20 = 0x1E; break; @@ -807,15 +807,15 @@ void func_86E007CC(unk_func_8790002C* arg0, s32 arg1) { sp20 = 0xC; } - D_86E04B30 = D_86E05830; + miniRockPtr = miniMetapodRocks; for (i = 0; i < 20; i++) { - if ((D_86E04B30->unk_270 != 0) && (arg1 == D_86E04B30->unk_266)) { - if (D_86E04B30->unk_29E < sp20) { + if ((miniRockPtr->unk_270 != 0) && (player == miniRockPtr->collidingActorId)) { + if (miniRockPtr->unk_29E < sp20) { var_t0 = 1; - sp20 = D_86E04B30->unk_29E; + sp20 = miniRockPtr->unk_29E; } } - D_86E04B30++; + miniRockPtr++; } sp20--; @@ -823,254 +823,256 @@ void func_86E007CC(unk_func_8790002C* arg0, s32 arg1) { if (sp20 < 0) { sp20 = 0; } - arg0->unk_242 = 1; + metapod->compState = 1; - switch (func_86E00518(arg0, sp20)) { + switch (func_86E00518(metapod, sp20)) { case 0: - func_86E0063C(arg0, sp20); + func_86E0063C(metapod, sp20); break; case 1: - func_86E0073C(arg0, sp20); + func_86E0073C(metapod, sp20); break; case 2: - func_86E007BC(arg0, sp20); + func_86E007BC(metapod, sp20); break; } } } } -void func_86E00924(unk_func_8790002C* arg0, s32 arg1) { - if (arg0->unk_242 == 0) { - func_86E007CC(arg0, arg1); +void miniMetapodCompControls(MiniActor* compMetapod, s32 nPlayer) { + if (compMetapod->compState == 0) { + func_86E007CC(compMetapod, nPlayer); } - switch (arg0->unk_242) { + switch (compMetapod->compState) { case 0x1: - arg0->unk_244--; - if (arg0->unk_244 < 0) { - if ((arg0->unk_2AA == 0) && (arg0->unk_240 == 0)) { - if (arg0->unk_29E > 0) { - func_879002B8(arg0, 1, -1, 1); - arg0->unk_23E = 1; - arg0->unk_272 = 4; - arg0->unk_242++; - func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_879029F0, &D_87903E40, 4); + compMetapod->unk_244--; + if (compMetapod->unk_244 < 0) { + if ((compMetapod->unk_2AA == 0) && (compMetapod->isSquashed == false)) { + if (compMetapod->unk_29E > 0) { + miniChangeActorAnim(compMetapod, 1, -1, 1); + compMetapod->mainState = 1; + compMetapod->unk_272 = 4; + compMetapod->compState++; + func_81407D48(1.0f, compMetapod->totalPos, compMetapod->totalRot, func_879029F0, &D_87903E40, + 4); } else { - arg0->unk_242 = 0x64; + compMetapod->compState = 0x64; } } else { - arg0->unk_242 = 0; + compMetapod->compState = 0; } } break; case 0x2: - arg0->unk_29E--; - if (arg0->unk_29E < 0) { - arg0->unk_000.unk_000.unk_02 |= 0x20; - arg0->unk_242 = 0x64; + compMetapod->unk_29E--; + if (compMetapod->unk_29E < 0) { + compMetapod->unk_000.unk_000.unk_02 |= 0x20; + compMetapod->compState = 0x64; return; } - arg0->unk_25A++; - arg0->unk_272 = 4; - arg0->unk_000.unk_01C = 1; - if (func_80017484(&arg0->unk_000, 5) != 0) { - arg0->unk_000.unk_000.unk_02 &= ~0x20; + compMetapod->damageTimer++; + compMetapod->unk_272 = 4; + compMetapod->unk_000.unk_01C = 1; + if (func_80017484(&compMetapod->unk_000, 5) != 0) { + compMetapod->unk_000.unk_000.unk_02 &= ~0x20; } break; case 0x64: - arg0->unk_2B2--; - if (arg0->unk_2B2 <= 0) { - arg0->unk_23E = 0; - arg0->unk_242 = 0; + compMetapod->unk_2B2--; + if (compMetapod->unk_2B2 <= 0) { + compMetapod->mainState = 0; + compMetapod->compState = 0; } break; } } -void func_86E00AF4(void) { +void miniUpdateMetapods(void) { s32 i; - D_879060BC = gPlayer1Controller; - D_86E04B2C = D_86E04D60; + miniControllerPtr = gPlayer1Controller; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - D_86E04B2C->unk_000.unk_01C = 0; - D_86E04B2C->unk_272 = 0; + miniMetapodPtr->unk_000.unk_01C = 0; + miniMetapodPtr->unk_272 = 0; - if (D_87903DA4 != 0) { - if (D_86E04B2C->unk_2AC == 0) { - func_86E0036C(D_86E04B2C); + if (minigameInputLock != 0) { + if (miniMetapodPtr->isComp == false) { + miniMetapodHumanControls(miniMetapodPtr); } else { - func_86E00924(D_86E04B2C, i); + miniMetapodCompControls(miniMetapodPtr, i); } } - func_87900770(D_86E04B2C); - func_87900808(D_86E04B2C); + miniActorUpdateTransform(miniMetapodPtr); + func_87900808(miniMetapodPtr); - D_86E04B2C++; - D_879060BC++; + miniMetapodPtr++; + miniControllerPtr++; } } -s32 func_86E00BDC(void) { - return func_879001A4(D_86E04B30, &D_86E04D60[D_86E04B30->unk_266]); +s32 metapodRockCollisionCheck_void(void) { + return metapodRockCollisionCheck(miniRockPtr, &miniMetapods[miniRockPtr->collidingActorId]); } -s32 func_86E00C34(s32 arg0) { +s32 func_86E00C34(s32 nPlayer) { s32 sp1C = 0; - if (func_86E00BDC() != 0) { - D_86E04B2C->unk_260 = 1; - if (D_86E04B2C->unk_272 != 0) { - func_86E001A0(7, arg0); + if (metapodRockCollisionCheck_void() != 0) { + miniMetapodPtr->midAirState = 1; + if (miniMetapodPtr->unk_272 != 0) { // if hardened ? colliding ? + func_86E001A0(7, nPlayer); sp1C = 1; } else { - D_86E04B2C->unk_240 = 1; - func_86E004FC(D_86E04B2C); + miniMetapodPtr->isSquashed = 1; // rock squashing + func_86E004FC(miniMetapodPtr); sp1C = 2; } } return sp1C; } -void func_86E00CAC(unk_func_8790002C* arg0, s32 arg1) { +void miniRockChecks(UNUSED MiniActor* metapod, s32 nPlayer) { s32 i; - s32 temp_v0; + s32 colliding; - D_86E04B30 = D_86E05830; + miniRockPtr = miniMetapodRocks; for (i = 0; i < 20; i++) { - if ((D_86E04B30->unk_270 != 0) && (arg1 == D_86E04B30->unk_266) && (D_86E04B30->unk_260 == 0)) { - temp_v0 = func_86E00C34(arg1); - if (temp_v0 != 0) { - D_86E04B30->unk_260 = 1; - if (temp_v0 == 1) { - D_86E04B30->unk_272 = 1; + if ((miniRockPtr->unk_270 != 0) && (nPlayer == miniRockPtr->collidingActorId) && + (miniRockPtr->midAirState == 0)) { + colliding = func_86E00C34(nPlayer); + if (colliding) { + miniRockPtr->midAirState = 1; + if (colliding == 1) { + miniRockPtr->unk_272 = 1; } else { - D_86E04B30->unk_272 = 0; + miniRockPtr->unk_272 = 0; } break; } } - D_86E04B30++; + miniRockPtr++; } } -void func_86E00D78(unk_func_8790002C* arg0, s32 arg1) { - if ((D_86E04B2C->unk_25A > 0) && (arg0->unk_2A8 == 0)) { - if (D_86E04B2C->unk_25A >= 0x28) { - D_86E04B2C->unk_258 -= D_86E04B2C->unk_25A; - D_86E04B2C->unk_25A = 0; +void miniMatapodChecks(MiniActor* metapod, s32 nPlayer) { + if ((miniMetapodPtr->damageTimer > 0) && (metapod->isWinner == 0)) { + if (miniMetapodPtr->damageTimer >= 0x28) { + miniMetapodPtr->miniHealth -= miniMetapodPtr->damageTimer; + miniMetapodPtr->damageTimer = 0; } else { - D_86E04B2C->unk_25A--; - D_86E04B2C->unk_258--; + miniMetapodPtr->damageTimer--; + miniMetapodPtr->miniHealth--; } - if (D_86E04B2C->unk_258 < 0) { - D_86E04B2C->unk_258 = 0; + if (miniMetapodPtr->miniHealth < 0) { + miniMetapodPtr->miniHealth = 0; } } - if (D_86E04B2C->unk_258 == 0) { - if (D_86E04B2C->unk_2A4 == 0) { - func_86E001A0(9, arg1); - func_879002B8(D_86E04B2C, 3, 1, 0); - D_86E04B2C->unk_2A4 = 1; - D_86E04B2C->unk_2AA = 1; + if (miniMetapodPtr->miniHealth == 0) { + if (miniMetapodPtr->unk_2A4 == 0) { + func_86E001A0(9, nPlayer); + miniChangeActorAnim(miniMetapodPtr, 3, 1, 0); // dead animation + miniMetapodPtr->unk_2A4 = 1; + miniMetapodPtr->unk_2AA = 1; } } else { - switch (D_86E04B2C->unk_240) { + switch (miniMetapodPtr->isSquashed) { case 1: - D_86E04B2C->unk_25A += 0x1E; - func_879002B8(D_86E04B2C, 2, 0, 1); - func_86E001A0(8, arg1); - D_86E04B2C->unk_240++; + miniMetapodPtr->damageTimer += 0x1E; + miniChangeActorAnim(miniMetapodPtr, 2, 0, 1); + func_86E001A0(8, nPlayer); + miniMetapodPtr->isSquashed++; break; case 2: - if (D_86E04B2C->unk_248 == 0) { - D_86E04B2C->unk_240 = 0; + if (miniMetapodPtr->unk_248 == 0) { + miniMetapodPtr->isSquashed = 0; } break; } } } -void func_86E00ED0(void) { +void miniMatapodMinigameChecks(void) { s32 i; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - if (D_87903DA4 != 0) { - func_86E00CAC(D_86E04B2C, i); - func_86E00D78(D_86E04B2C, i); + if (minigameInputLock != 0) { + miniRockChecks(miniMetapodPtr, i); + miniMatapodChecks(miniMetapodPtr, i); } - D_86E04B2C++; + miniMetapodPtr++; } } void func_86E00F60(void) { - func_879003A0(D_86E04B2C); + func_879003A0(miniMetapodPtr); - D_86E04B2C->unk_000.unk_024.x = D_86E04B2C->unk_190.x; - D_86E04B2C->unk_000.unk_024.y = D_86E04B2C->unk_190.y; - D_86E04B2C->unk_000.unk_024.z = D_86E04B2C->unk_190.z; + miniMetapodPtr->unk_000.unk_024.x = miniMetapodPtr->totalPos.x; + miniMetapodPtr->unk_000.unk_024.y = miniMetapodPtr->totalPos.y; + miniMetapodPtr->unk_000.unk_024.z = miniMetapodPtr->totalPos.z; - D_86E04B2C->unk_000.unk_01E.x = D_86E04B2C->unk_214.x; - D_86E04B2C->unk_000.unk_01E.y = D_86E04B2C->unk_214.y; - D_86E04B2C->unk_000.unk_01E.z = D_86E04B2C->unk_214.z; + miniMetapodPtr->unk_000.unk_01E.x = miniMetapodPtr->totalRot.x; + miniMetapodPtr->unk_000.unk_01E.y = miniMetapodPtr->totalRot.y; + miniMetapodPtr->unk_000.unk_01E.z = miniMetapodPtr->totalRot.z; } void func_86E00FD8(void) { s32 i; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { func_86E00F60(); - D_86E04B2C++; + miniMetapodPtr++; } } -void func_86E0103C(unk_func_8790002C* arg0, s32 arg1) { - func_8790060C(arg0); - arg0->unk_266 = arg1; +void miniInitRock(MiniActor* rock, s32 arg1) { + miniActorAllToZero(rock); + rock->collidingActorId = arg1; - arg0->unk_1A8.x = D_86E04BFC[arg1].unk_00.x; - arg0->unk_1A8.y = D_86E04BFC[arg1].unk_00.y; - arg0->unk_1A8.z = D_86E04BFC[arg1].unk_00.z; + rock->position_1.x = miniRockInfos[arg1].unk_00.x; + rock->position_1.y = miniRockInfos[arg1].unk_00.y; + rock->position_1.z = miniRockInfos[arg1].unk_00.z; - arg0->unk_270 = 0; - arg0->unk_288 = D_86E04BFC[arg1].unk_12; - arg0->unk_28C = D_86E04BFC[arg1].unk_14; + rock->unk_270 = 0; + rock->cubeRadio = miniRockInfos[arg1].unk_12; + rock->halfHeight = miniRockInfos[arg1].unk_14; - arg0->unk_16C.x = 0.5f; - arg0->unk_16C.y = 0.5f; - arg0->unk_16C.z = 0.5f; + rock->scale.x = 0.5f; + rock->scale.y = 0.5f; + rock->scale.z = 0.5f; - arg0->unk_000.unk_000.unk_01 &= ~1; + rock->unk_000.unk_000.unk_01 &= ~1; - func_87900770(arg0); + miniActorUpdateTransform(rock); } -void func_86E010E8(void) { +void miniInitRocks(void) { s32 i; s32 j; - D_86E04B30 = D_86E05830; + miniRockPtr = miniMetapodRocks; for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { - func_86E0103C(D_86E04B30, i); - D_86E04B30++; + miniInitRock(miniRockPtr, i); + miniRockPtr++; } } @@ -1084,9 +1086,9 @@ void func_86E01188(void) { s32 var_s1; s32 sp40; s32 var_s5; - unk_func_8790002C* ptr; + MiniActor* metapod; - switch (D_87906046) { + switch (miniDifficulty) { default: var_s5 = sp40; break; @@ -1108,234 +1110,233 @@ void func_86E01188(void) { break; } - ptr = D_86E04D60; - for (i = 0; i < 4; i++, ptr++) { - if (ptr->unk_2AA == 0) { + metapod = miniMetapods; + for (i = 0; i < 4; i++, metapod++) { + if (metapod->unk_2AA == 0) { var_s1 = 0; - D_86E04B30 = &D_86E05830[i * 5]; + miniRockPtr = &miniMetapodRocks[i * 5]; for (j = 0; j < D_86E04B24; j++) { - func_86E0103C(D_86E04B30, i); + miniInitRock(miniRockPtr, i); - D_86E04B30->unk_23E = 1; - D_86E04B30->unk_29E = var_s1; + miniRockPtr->mainState = 1; + miniRockPtr->unk_29E = var_s1; var_s1 += var_s5; - D_86E04B30++; + miniRockPtr++; } } } } -void func_86E01310(unk_func_8790002C* arg0) { +void func_86E01310(MiniActor* rock) { s16 temp_v1 = (D_86E04B20 * 4) + 0x28; - s16 temp_a1 = arg0->unk_266; + s16 temp_a1 = rock->collidingActorId; - arg0->unk_29E = temp_v1 - 1; - arg0->unk_1A8.y += D_86E04BFC[temp_a1].unk_00.y + D_86E04D60[temp_a1].unk_28C; + rock->unk_29E = temp_v1 - 1; + rock->position_1.y += miniRockInfos[temp_a1].unk_00.y + miniMetapods[temp_a1].halfHeight; - arg0->unk_210 = 0.7f; - arg0->unk_1F8 = 0.0f; - arg0->unk_1FC = temp_v1 * arg0->unk_210 * 0.5f; + rock->antiAcceleration = 0.7f; + rock->xSpeed = 0.0f; + rock->ySpeed = temp_v1 * rock->antiAcceleration * 0.5f; - arg0->unk_200 = - ((D_86E04D60[temp_a1].unk_1A8.z + (D_86E04D60[temp_a1].unk_288 * 0.5f)) - arg0->unk_1A8.z) / temp_v1; - arg0->unk_270 = 1; + rock->zSpeed = + ((miniMetapods[temp_a1].position_1.z + (miniMetapods[temp_a1].cubeRadio * 0.5f)) - rock->position_1.z) / + temp_v1; + rock->unk_270 = 1; - arg0->unk_000.unk_000.unk_01 |= 1; - func_8001BD04(&arg0->unk_000, 0); + rock->unk_000.unk_000.unk_01 |= 1; + func_8001BD04(&rock->unk_000, 0); } -void func_86E01414(unk_func_8790002C* arg0) { - arg0->unk_23E = 0; - arg0->unk_000.unk_000.unk_01 &= ~1; +void func_86E01414(MiniActor* rock) { + rock->mainState = 0; + rock->unk_000.unk_000.unk_01 &= ~1; } -void func_86E01428(unk_func_8790002C* arg0) { +void miniRockStateMachine(MiniActor* rock) { UNUSED s32 pad[3]; - s16 temp_a1 = arg0->unk_266; + s16 temp_a1 = rock->collidingActorId; Vec3f sp3C; - if ((D_87903DA8 != 0) || (D_86E04D60[temp_a1].unk_258 == 0)) { - switch (arg0->unk_23E) { + if ((D_87903DA8 != 0) || (miniMetapods[temp_a1].miniHealth == 0)) { + switch (rock->mainState) { case 1: - arg0->unk_23E = 0; + rock->mainState = 0; break; case 2: - arg0->unk_270 = 0; - arg0->unk_23E = 0x64; + rock->unk_270 = 0; + rock->mainState = 0x64; break; } } - switch (arg0->unk_23E) { + switch (rock->mainState) { case 0x1: - arg0->unk_29E--; - if (arg0->unk_29E <= 0) { + rock->unk_29E--; + if (rock->unk_29E <= 0) { func_86E001A0(5, temp_a1); - func_86E01310(arg0); - arg0->unk_23E++; + func_86E01310(rock); + rock->mainState++; } break; case 0x2: - arg0->unk_29E--; - if (arg0->unk_29E < 0) { - arg0->unk_29E = 0; + rock->unk_29E--; + if (rock->unk_29E < 0) { + rock->unk_29E = 0; } - if (arg0->unk_260 != 0) { - arg0->unk_270 = 0; - if (arg0->unk_272 != 0) { - arg0->unk_1FC = 5.0f; - arg0->unk_200 = 1.5f; - func_86E01414(arg0); - func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_87901F04, &D_87903E28, 4); + if (rock->midAirState != 0) { + rock->unk_270 = 0; + if (rock->unk_272 != 0) { + rock->ySpeed = 5.0f; + rock->zSpeed = 1.5f; + func_86E01414(rock); + func_81407D48(1.0f, rock->totalPos, rock->totalRot, func_87901F04, &D_87903E28, 4); } else { - arg0->unk_23E++; + rock->mainState++; } } break; case 0x3: - arg0->unk_1FC = 7.0f; - arg0->unk_200 = 3.0f; + rock->ySpeed = 7.0f; + rock->zSpeed = 3.0f; - sp3C.x = arg0->unk_190.x; + sp3C.x = rock->totalPos.x; sp3C.y = 0.0f; - sp3C.z = arg0->unk_190.z; + sp3C.z = rock->totalPos.z; - func_81407D48(1.0f, sp3C, arg0->unk_214, func_87902068, &D_87903E10, 4); - arg0->unk_23E++; + func_81407D48(1.0f, sp3C, rock->totalRot, func_87902068, &D_87903E10, 4); + rock->mainState++; break; case 0x4: - if (arg0->unk_190.y < -10.0f) { - func_86E01414(arg0); + if (rock->totalPos.y < -10.0f) { + func_86E01414(rock); } break; case 0x64: - if (func_814004D8(&arg0->unk_000.unk_01D, 0, 0x40) != 0) { - func_86E01414(arg0); + if (func_814004D8(&rock->unk_000.unk_01D, 0, 0x40) != 0) { + func_86E01414(rock); } break; } } -void func_86E016EC(unk_func_8790002C* arg0) { - f32 temp_fv0; - f32 temp_fv0_2; - f32 temp_fv0_3; +void miniRockUpdatePosition(MiniActor* rock) { + UNUSED f32 temp_fv0; + UNUSED f32 temp_fv0_2; + UNUSED f32 temp_fv0_3; - arg0->unk_190.x = arg0->unk_19C.x = arg0->unk_1A8.x + arg0->unk_1C0.x; - arg0->unk_190.y = arg0->unk_19C.y = arg0->unk_1A8.y + arg0->unk_1C0.y; - arg0->unk_190.z = arg0->unk_19C.z = arg0->unk_1A8.z + arg0->unk_1C0.z; + rock->totalPos.x = rock->totalPos_alt.x = rock->position_1.x + rock->position_2.x; + rock->totalPos.y = rock->totalPos_alt.y = rock->position_1.y + rock->position_2.y; + rock->totalPos.z = rock->totalPos_alt.z = rock->position_1.z + rock->position_2.z; } -void func_86E0172C(unk_func_8790002C* arg0) { - if (arg0->unk_23E != 0) { - arg0->unk_1F8 += arg0->unk_204; - arg0->unk_1FC += arg0->unk_208 - arg0->unk_210; - arg0->unk_200 += arg0->unk_20C; - arg0->unk_1C0.x += arg0->unk_1F8; - arg0->unk_1C0.y += arg0->unk_1FC; - arg0->unk_1C0.z += arg0->unk_200; +void miniUpdateRockTransform(MiniActor* rock) { + if (rock->mainState != 0) { + rock->xSpeed += rock->xAccel; + rock->ySpeed += rock->yAccel - rock->antiAcceleration; + rock->zSpeed += rock->zAccel; + rock->position_2.x += rock->xSpeed; + rock->position_2.y += rock->ySpeed; + rock->position_2.z += rock->zSpeed; } - func_86E016EC(arg0); + miniRockUpdatePosition(rock); } -void func_86E017C0(void) { +void miniUpdateRocks(void) { s32 i; - D_86E04B30 = D_86E05830; + miniRockPtr = miniMetapodRocks; for (i = 0; i < 20; i++) { - func_86E01428(D_86E04B30); - func_86E0172C(D_86E04B30); - D_86E04B30++; + miniRockStateMachine(miniRockPtr); + miniUpdateRockTransform(miniRockPtr); + miniRockPtr++; } } -void func_86E0182C(unk_func_8790002C* arg0) { +// update model transform ? +void func_86E0182C(MiniActor* arg0) { func_879003A0(arg0); - arg0->unk_000.unk_030.x = arg0->unk_16C.x; - arg0->unk_000.unk_030.y = arg0->unk_16C.y; - arg0->unk_000.unk_030.z = arg0->unk_16C.z; + arg0->unk_000.unk_030.x = arg0->scale.x; + arg0->unk_000.unk_030.y = arg0->scale.y; + arg0->unk_000.unk_030.z = arg0->scale.z; - arg0->unk_000.unk_024.x = arg0->unk_190.x; - arg0->unk_000.unk_024.y = arg0->unk_190.y; - arg0->unk_000.unk_024.z = arg0->unk_190.z; + arg0->unk_000.unk_024.x = arg0->totalPos.x; + arg0->unk_000.unk_024.y = arg0->totalPos.y; + arg0->unk_000.unk_024.z = arg0->totalPos.z; - arg0->unk_000.unk_01E.x = arg0->unk_214.x; - arg0->unk_000.unk_01E.y = arg0->unk_214.y; - arg0->unk_000.unk_01E.z = arg0->unk_214.z; + arg0->unk_000.unk_01E.x = arg0->totalRot.x; + arg0->unk_000.unk_01E.y = arg0->totalRot.y; + arg0->unk_000.unk_01E.z = arg0->totalRot.z; } -void func_86E01898(void) { - s32 var_s1; - - D_86E04B30 = D_86E05830; - var_s1 = 0; - do { - func_86E016EC(D_86E04B30); - func_86E0182C(D_86E04B30); - var_s1 += 1; - D_86E04B30 = &D_86E04B30[1]; - } while (var_s1 != 0x14); +void miniUpdateRocksPositions(void) { + s32 i; + miniRockPtr = miniMetapodRocks; + for (i = 0; i < 20; ++i) { + miniRockUpdatePosition(miniRockPtr); + func_86E0182C(miniRockPtr); + miniRockPtr = &miniRockPtr[1]; + } } void func_86E01904(void) { D_87906054 = D_87906050->unk_00.unk_0C; - D_87906060 = -0x200; - D_87906062 = 0; - D_87906064 = 0xBE; - D_87906066 = 0x23; - D_87906068 = 0x32; - D_8790606A = 0x1900; + miniCameraXRot = -0x200; + miniCameraYRot = 0; + miniCameraDistance = 0xBE; + miniCameraFov = 0x23; + miniCameraNear = 0x32; + miniCameraFar = 0x1900; - D_8790606C.x = 0; - D_8790606C.y = 0x2A; - D_8790606C.z = 0; + miniCameraCoords.x = 0; + miniCameraCoords.y = 0x2A; + miniCameraCoords.z = 0; - func_87900B64(); + miniUpdateCamera(); } -void func_86E01990(void) { - func_87900C5C(); - func_87900B64(); +void miniMetapodCameraControls(void) { + minigameDebuggModeControl(); + miniUpdateCamera(); } -void func_86E019B8(void) { - func_87900854(); - func_86E010E8(); - func_86E002E4(); - func_86E01904(); - D_87903DA4 = 0; +void initMetapodMinigameAssets(void) { + func_87900854(); // minigame variables + miniInitRocks(); + miniInitMetapodPlayers(); + func_86E01904(); // camera + minigameInputLock = 0; } void func_86E019F4(void) { s32 i; s32 var_a2; - D_86E04B30 = D_86E05830; + miniRockPtr = miniMetapodRocks; switch (D_86E04B28) { case 1: func_86E01188(); - D_86E04B28 += 1; + D_86E04B28++; break; case 2: var_a2 = 1; for (i = 0; i < 20; i++) { - if (D_86E04B30->unk_23E != 0) { + if (miniRockPtr->mainState != 0) { var_a2 = 0; break; } - D_86E04B30++; + miniRockPtr++; } if (var_a2 != 0) { @@ -1366,33 +1367,33 @@ s32 func_86E01B08(void) { s32 var_t3 = 0; s32 var_v0_5; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - if (D_86E04B2C->unk_2A6 < var_a3) { - var_a3 = D_86E04B2C->unk_2A6; + if (miniMetapodPtr->unk_2A6 < var_a3) { + var_a3 = miniMetapodPtr->unk_2A6; } - if (D_86E04B2C->unk_2A4 == 1) { + if (miniMetapodPtr->unk_2A4 == 1) { var_t1++; } - if (D_86E04B2C->unk_2A4 == 2) { + if (miniMetapodPtr->unk_2A4 == 2) { var_t2++; } - D_86E04B2C++; + miniMetapodPtr++; } if (var_t1 != 0) { var_a3 -= var_t1; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - if (D_86E04B2C->unk_2A4 == 1) { - D_86E04B2C->unk_2A4 = 2; - D_86E04B2C->unk_2A6 = var_a3; + if (miniMetapodPtr->unk_2A4 == 1) { + miniMetapodPtr->unk_2A4 = 2; + miniMetapodPtr->unk_2A6 = var_a3; } - D_86E04B2C++; + miniMetapodPtr++; } } @@ -1406,40 +1407,40 @@ s32 func_86E01B08(void) { var_v0_5 = 3; } - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; switch (var_v0_5) { case 1: for (i = 0; i < 4; i++) { - if (D_86E04B2C->unk_2A6 == 5) { - D_86E04B2C->unk_2A8 = 1; - D_86E04B2C->unk_2AA = 1; - D_86E04B2C->unk_2A6 = 1; + if (miniMetapodPtr->unk_2A6 == 5) { + miniMetapodPtr->isWinner = 1; + miniMetapodPtr->unk_2AA = 1; + miniMetapodPtr->unk_2A6 = 1; var_t3 = 1; func_87802F00(i); break; } - D_86E04B2C++; + miniMetapodPtr++; } break; case 2: var_t3 = 1; for (i = 0; i < 4; i++) { - D_86E04B2C->unk_2AA = 1; - D_86E04B2C->unk_2A6 = 0; - D_86E04B2C++; + miniMetapodPtr->unk_2AA = 1; + miniMetapodPtr->unk_2A6 = 0; + miniMetapodPtr++; } break; case 3: for (i = 0; i < 4; i++) { - if (D_86E04B2C->unk_2A6 == 1) { - D_86E04B2C->unk_2AA = 1; - D_86E04B2C->unk_2A6 = 5; + if (miniMetapodPtr->unk_2A6 == 1) { + miniMetapodPtr->unk_2AA = 1; + miniMetapodPtr->unk_2A6 = 5; var_t3 = 1; } - D_86E04B2C++; + miniMetapodPtr++; } break; } @@ -1453,11 +1454,11 @@ s32 func_86E01B08(void) { s32 func_86E01E34(void) { s32 i; s32 var_s3 = 0; - unk_func_8790002C* var_s0; + MiniActor* var_s0; - for (i = 0, var_s0 = D_86E04D60; i < 4; i++, var_s0++) { - if (var_s0->unk_2A8 != 0) { - func_879002B8(var_s0, 4, -1, 0); + for (i = 0, var_s0 = miniMetapods; i < 4; i++, var_s0++) { + if (var_s0->isWinner != 0) { + miniChangeActorAnim(var_s0, 4, -1, 0); var_s3 = 1; } } @@ -1468,11 +1469,11 @@ s32 func_86E01E34(void) { void func_86E01EB0(void) { s32 i; - D_86E04B2C = D_86E04D60; + miniMetapodPtr = miniMetapods; for (i = 0; i < 4; i++) { - if (D_86E04B2C) {} + if (miniMetapodPtr) {} - D_86E04B2C++; + miniMetapodPtr++; } } @@ -1497,10 +1498,10 @@ s32 func_86E01EE8(void) { s32 func_86E01F50(void) { s32 i; s32 ret = 1; - unk_func_8790002C* var_v0 = D_86E05830; + MiniActor* var_v0 = miniMetapodRocks; for (i = 0; i < 20; i++, var_v0++) { - if (var_v0->unk_23E != 0) { + if (var_v0->mainState != 0) { ret = 0; break; } @@ -1508,27 +1509,27 @@ s32 func_86E01F50(void) { return ret; } -void func_86E01F8C(void) { - switch (D_87903DA0) { +void miniMetapodMinigameStateMachine(void) { + switch (minigameState) { case 1: - D_87906040 = 0xF; - D_87903DA0++; + miniInputLockTimer = 0xF; + minigameState++; break; case 2: - D_87906040--; - if (D_87906040 < 0) { + miniInputLockTimer--; + if (miniInputLockTimer < 0) { func_8780295C(1); - D_87903DA0++; + minigameState++; } break; case 3: if (func_86E01EE8() != 0) { D_86E04B28 = 1; - D_87903DA4 = 1; - D_87903DC4 = 0; - D_87903DA0++; + minigameInputLock = 1; + miniTutoScreenState = 0; + minigameState++; } break; @@ -1536,7 +1537,7 @@ void func_86E01F8C(void) { if (1) {} if (func_86E01B08() != 0) { - D_87903DA0++; + minigameState++; } else { func_86E019F4(); } @@ -1544,23 +1545,23 @@ void func_86E01F8C(void) { case 5: if (func_86E01F50() != 0) { - D_87906040 = 0xA; - D_87903DA0++; + miniInputLockTimer = 0xA; + minigameState++; } break; case 6: - D_87906040--; - if (D_87906040 < 0) { + miniInputLockTimer--; + if (miniInputLockTimer < 0) { func_86E01E34(); func_87802EB8(1); - D_87903DA0++; + minigameState++; } break; case 7: if (D_8780FC96 != 0) { - D_87903DA0++; + minigameState++; D_87903DAC = 1; } break; @@ -1574,26 +1575,26 @@ void func_86E02150(void) { func_87901C20(); } -void func_86E02170(void) { +void miniDrawMetapodHealth(void) { s32 i; for (i = 0; i < 4; i++) { - func_8780024C(0x1A + i * 0x4A, 0xD0, 0x32, D_86E04D60[i].unk_258, D_86E04D60[i].unk_25C); + func_8780024C(0x1A + i * 0x4A, 0xD0, 0x32, miniMetapods[i].miniHealth, miniMetapods[i].miniMaxHealth); } } -void func_86E021D8(void) { +void miniDrawMetapodHeads(void) { s32 i; s32 tmp; gSPDisplayList(gDisplayListHead++, D_8006F518); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, D_879060C8); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, miniHudTransparency); for (i = 0, tmp = 0x26; i < 4; tmp += 0x4A, i++) { if (D_879060C4[i] == 0) { - func_87801644(i, tmp, 0xD6, 0.7f); + func_87801644(i, tmp, 0xD6, 0.7f); // draw player icon } else { - func_87801644(-1 - i, tmp, 0xD6, 0.7f); + func_87801644(-1 - i, tmp, 0xD6, 0.7f); // draw player icon } } @@ -1660,7 +1661,7 @@ void func_86E026D0(void) { break; } - if (D_87903DC4 == -2) { + if (miniTutoScreenState == -2) { func_8001EBE0(0x10, -2); func_8001EBE0(4, -2); } @@ -1671,18 +1672,18 @@ void func_86E027D4(void) { func_86E026D0(); } -void func_86E027FC(s32 arg0) { - u8 sp1C[] = { 0, 0, 30 }; - u8 sp18[] = { 0, 0, 250 }; +void miniMetapodDrawPlayerHUBs(UNUSED s32 arg0) { + UNUSED u8 sp1C[] = { 0, 0, 30 }; + UNUSED u8 sp18[] = { 0, 0, 250 }; func_8001F3F4(); func_8001EBE0(4, -2); func_86E027D4(); func_8001F444(); - if (D_87906044 != 0) { - func_86E02170(); - func_86E021D8(); + if (miniShowHUB != 0) { + miniDrawMetapodHealth(); + miniDrawMetapodHeads(); } } @@ -1697,37 +1698,37 @@ void func_86E02880(s32 arg0) { func_80015094(&D_87906050->unk_00); func_87901C98(); - if (D_87903DB0 == 0) { + if (miniDebugMode == false) { if (D_8780FC98 == 0) { - func_86E027FC(arg0); + miniMetapodDrawPlayerHUBs(arg0); } func_87804FD4(); } else { - func_87900F44(); + showDebuggCameraInfo(); } func_80007778(); } -void func_86E02924(void) { - func_86E019B8(); +void metapodMinigameInit(void) { + initMetapodMinigameAssets(); func_800077B4(0xA); func_80006C6C(0x10); - D_87903DC4 = 3; - D_87906046 = D_8780FA38; + miniTutoScreenState = 3; + miniDifficulty = D_8780FA38; } void func_86E0296C(void) { } -void func_86E02974(void) { - if ((D_87903DB0 == 0) && (D_87906044 == 0) && (func_80007604() == 0)) { - if (gPlayer1Controller->buttonPressed & 0x1000) { - D_87903DC4 = 1; - D_87903DA0 = 1; - D_87906044 = 1; +void miniMetapodTutoScreenControls(void) { + if ((miniDebugMode == false) && (miniShowHUB == false) && (func_80007604() == 0)) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { + miniTutoScreenState = 1; + minigameState = 1; + miniShowHUB = 1; func_86E001A0(0xB, 0); - } else if ((D_8780FA2A == 0) && (gPlayer1Controller->buttonPressed & 0x4000)) { + } else if ((D_8780FA2A == 0) && (BTN_IS_PRESSED(gPlayer1Controller, BTN_B))) { func_86E001A0(0xD, 0); func_87802EB8(2); } @@ -1735,10 +1736,10 @@ void func_86E02974(void) { } void func_86E02A28(void) { - unk_func_8790002C* ptr = D_86E04D60; + MiniActor* metapod = miniMetapods; - if ((gPlayer1Controller->buttonPressed & 0x8000) && (ptr->unk_23E == 0)) { - ptr->unk_29A = 4; + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_A) && (metapod->mainState == 0)) { + metapod->metapodInputLockTimer = 4; } } @@ -1748,30 +1749,30 @@ void func_86E02A64(void) { D_87903DBC = 0; func_87901620(); - func_87900558(); + hideMiniGameHUD(); while (var_s1 != 0) { func_87900528(); - if (D_87903DA0 == 0) { + if (minigameState == 0) { D_87906042 += 1; if (D_87906042 < 0) { D_87906042 = 0; } } - func_86E02974(); + miniMetapodTutoScreenControls(); if (D_8780FC94 == 0) { func_8140C5D0(); - func_86E01F8C(); - func_86E00AF4(); - func_86E017C0(); - func_86E00ED0(); - func_86E01898(); - func_86E00FD8(); + miniMetapodMinigameStateMachine(); + miniUpdateMetapods(); + miniUpdateRocks(); + miniMatapodMinigameChecks(); + miniUpdateRocksPositions(); + func_86E00FD8(); // update metapod models? func_86E02150(); - func_86E01990(); + miniMetapodCameraControls(); } else { func_86E02A28(); } @@ -1795,8 +1796,8 @@ void func_86E02BB0(void) { } for (i = 0; i < 30; i++) { - func_87900528(); - func_86E02880(2); + func_87900528(); // input reading + func_86E02880(2); // display text ? } while (func_800484E0() != 0) {} @@ -1805,7 +1806,7 @@ void func_86E02BB0(void) { } void func_86E02C5C(void) { - static s16 D_86E04CB4[6][4] = { + static s16 playerVariations[6][4] = { { 0x9B, 0xA, 0x23, 0 }, { 0x9E, 0xA, 0x1E, 0 }, { 0, 0x13, 0, 0x28 }, { -1, -0x19, 0, 0 }, { 0, 0x3C, 0, 0x20 }, { 0, 6, -1, -0x14 }, }; @@ -1813,7 +1814,7 @@ void func_86E02C5C(void) { s32 i; MemoryBlock* temp_v0; unk_D_86002F30* temp_s1_2; - s32 var_v1; + s32 randN; temp_v0 = func_80002D10(main_pool_get_available(), 0); D_87906050 = process_geo_layout(temp_v0, D_86E04B34); @@ -1821,45 +1822,45 @@ void func_86E02C5C(void) { func_8001BB20(); for (i = 0; i < 4; i++) { - func_8001BB58(&D_86E04D60[i].unk_000); + func_8001BB58(&miniMetapods[i].unk_000); } for (i = 0; i < 20; i++) { - func_8001BB58(&D_86E05830[i].unk_000); + func_8001BB58(&miniMetapodRocks[i].unk_000); } func_8001987C(); for (i = 0; i < 4; i++) { - var_v1 = D_8780FA68[i] - 1; + randN = D_8780FA68[i] - 1; if (D_8780FA68[i] == 0) { - var_v1 = func_878001E8(2); + randN = func_878001E8(2); } - D_86E04D60[i].unk_23C = D_86E04CB4[var_v1][0]; - D_86E04D60[i].unk_168 = func_80019D18(D_86E04D60[i].unk_23C); - D_86E04D60[i].unk_288 = D_86E04CB4[var_v1][1]; - D_86E04D60[i].unk_28C = D_86E04CB4[var_v1][2]; + miniMetapods[i].unk_23C = playerVariations[randN][0]; + miniMetapods[i].unk_168 = func_80019D18(miniMetapods[i].unk_23C); + miniMetapods[i].cubeRadio = playerVariations[randN][1]; + miniMetapods[i].halfHeight = playerVariations[randN][2]; - func_8001BC34(&D_86E04D60[i].unk_000, 0, D_86E04D60[i].unk_23C, D_86E04D60[i].unk_168->unk_08->unk_00[0]); - func_8001BD04(&D_86E04D60[i].unk_000, 0); + func_8001BC34(&miniMetapods[i].unk_000, 0, miniMetapods[i].unk_23C, miniMetapods[i].unk_168->unk_08->unk_00[0]); + func_8001BD04(&miniMetapods[i].unk_000, 0); - if (D_86E04D60) {} + if (miniMetapods) {} } temp_s1_2 = func_80019D18(0x9C); for (i = 0; i < 20; i++) { - D_86E05830[i].unk_23C = 0x9C; - D_86E05830[i].unk_168 = temp_s1_2; + miniMetapodRocks[i].unk_23C = 0x9C; + miniMetapodRocks[i].unk_168 = temp_s1_2; - func_8001BC34(&D_86E05830[i].unk_000, 0, D_86E05830[i].unk_23C, temp_s1_2->unk_08->unk_00[0]); - func_8001BD04(&D_86E05830[i].unk_000, 0); + func_8001BC34(&miniMetapodRocks[i].unk_000, 0, miniMetapodRocks[i].unk_23C, temp_s1_2->unk_08->unk_00[0]); + func_8001BD04(&miniMetapodRocks[i].unk_000, 0); - D_86E05830[i].unk_000.unk_000.unk_01 &= ~1; + miniMetapodRocks[i].unk_000.unk_000.unk_01 &= ~1; } } -s32 func_86E02E40(s32 arg0, s32 arg1) { +s32 metapodMinigameLoad(s32 arg0, s32 arg1) { unk_func_80007444* sp24; if (arg0 == 1) { @@ -1880,12 +1881,12 @@ s32 func_86E02E40(s32 arg0, s32 arg1) { func_86E02C5C(); func_80007678(sp24); - func_86E02924(); - func_86E02A64(); + metapodMinigameInit(); + func_86E02A64(); // tutorial screen ? func_86E02BB0(); func_800076C0(); - func_8001E9CC(); - func_80005EAC(); + func_8001E9CC(); // main_pool_try_free(D_800AC870); + func_80005EAC(); // main_pool_try_free(D_800A7428.unk4); main_pool_try_free(D_800A7428.unk0); main_pool_pop_state('MINI'); diff --git a/src/fragments/20/fragment20.h b/src/fragments/20/fragment20.h index 089b7fd..344f353 100644 --- a/src/fragments/20/fragment20.h +++ b/src/fragments/20/fragment20.h @@ -6,61 +6,61 @@ void func_86E00020(s16 arg0, s16 arg1); void func_86E001A0(s16 arg0, s16 arg1); -void func_86E001E4(unk_func_8790002C* arg0, s32 arg1); -void func_86E002E4(void); -void func_86E0034C(unk_func_8790002C* arg0); -void func_86E0036C(unk_func_8790002C* arg0); -void func_86E004FC(unk_func_8790002C* arg0); -s32 func_86E00518(unk_func_8790002C* arg0, s32 arg1); -void func_86E0063C(unk_func_8790002C* arg0, s32 arg1); -void func_86E0073C(unk_func_8790002C* arg0, s32 arg1); -void func_86E007BC(unk_func_8790002C* arg0, s32 arg1); -void func_86E007CC(unk_func_8790002C* arg0, s32 arg1); -void func_86E00924(unk_func_8790002C* arg0, s32 arg1); -void func_86E00AF4(void); -s32 func_86E00BDC(void); +void miniInitMetapodPlayer(MiniActor* metapod, s32 arg1); +void miniInitMetapodPlayers(void); +void func_86E0034C(MiniActor* metapod); +void miniMetapodHumanControls(MiniActor* metapod); +void func_86E004FC(MiniActor* metapod); +s32 func_86E00518(MiniActor* arg0, s32 arg1); +void func_86E0063C(MiniActor* metapod, s32 arg1); +void func_86E0073C(MiniActor* arg0, s32 arg1); +void func_86E007BC(MiniActor* metapod, s32 arg1); +void func_86E007CC(MiniActor* metapod, s32 player); +void miniMetapodCompControls(MiniActor* compMetapod, s32 nPlayer); +void miniUpdateMetapods(void); +s32 metapodRockCollisionCheck_void(void); s32 func_86E00C34(s32 arg0); -void func_86E00CAC(unk_func_8790002C* arg0, s32 arg1); -void func_86E00D78(unk_func_8790002C* arg0, s32 arg1); -void func_86E00ED0(void); +void miniRockChecks(MiniActor* arg0, s32 nPlayer); +void miniMatapodChecks(MiniActor* metapod, s32 nPlayer); +void miniMatapodMinigameChecks(void); void func_86E00F60(void); void func_86E00FD8(void); -void func_86E0103C(unk_func_8790002C* arg0, s32 arg1); -void func_86E010E8(void); +void miniInitRock(MiniActor* rock, s32 arg1); +void miniInitRocks(void); void func_86E01188(void); -void func_86E01310(unk_func_8790002C* arg0); -void func_86E01414(unk_func_8790002C* arg0); -void func_86E01428(unk_func_8790002C* arg0); -void func_86E016EC(unk_func_8790002C* arg0); -void func_86E0172C(unk_func_8790002C* arg0); -void func_86E017C0(void); -void func_86E0182C(unk_func_8790002C* arg0); -void func_86E01898(void); +void func_86E01310(MiniActor* rock); +void func_86E01414(MiniActor* rock); +void miniRockStateMachine(MiniActor* rock); +void miniRockUpdatePosition(MiniActor* rock); +void miniUpdateRockTransform(MiniActor* rock); +void miniUpdateRocks(void); +void func_86E0182C(MiniActor* arg0); +void miniUpdateRocksPositions(void); void func_86E01904(void); -void func_86E01990(void); -void func_86E019B8(void); +void miniMetapodCameraControls(void); +void initMetapodMinigameAssets(void); void func_86E019F4(void); s32 func_86E01B08(void); s32 func_86E01E34(void); void func_86E01EB0(void); s32 func_86E01EE8(void); s32 func_86E01F50(void); -void func_86E01F8C(void); +void miniMetapodMinigameStateMachine(void); void func_86E02150(void); -void func_86E02170(void); -void func_86E021D8(void); +void miniDrawMetapodHealth(void); +void miniDrawMetapodHeads(void); void func_86E02308(void); void func_86E026D0(void); void func_86E027D4(void); -void func_86E027FC(s32 arg0); +void miniMetapodDrawPlayerHUBs(s32 arg0); void func_86E02880(s32 arg0); -void func_86E02924(void); +void metapodMinigameInit(void); void func_86E0296C(void); -void func_86E02974(void); +void miniMetapodTutoScreenControls(void); void func_86E02A28(void); void func_86E02A64(void); void func_86E02BB0(void); void func_86E02C5C(void); -s32 func_86E02E40(s32 arg0, s32 arg1); +s32 metapodMinigameLoad(s32 arg0, s32 arg1); #endif // _FRAGMENT20_H_ diff --git a/src/fragments/21/fragment21.c b/src/fragments/21/fragment21.c index 73dc282..7c38ebd 100644 --- a/src/fragments/21/fragment21.c +++ b/src/fragments/21/fragment21.c @@ -21,19 +21,19 @@ #include "src/memory.h" #include "src/stage_loader.h" -extern u8 D_03040580[]; -extern u8 D_03040D80[]; -extern u8 D_03040980[]; -extern u8 D_030451A0[]; -extern u8 D_03046AA0[]; -extern u8 D_03045E20[]; -extern u8 D_03049020[]; -extern u8 D_030483A0[]; -extern u8 D_03047720[]; +extern u32 D_03040580[]; +extern u32 D_03040D80[]; +extern u32 D_03040980[]; +extern u32 D_030451A0[]; +extern u32 D_03046AA0[]; +extern u32 D_03045E20[]; +extern u32 D_03049020[]; +extern u32 D_030483A0[]; +extern u32 D_03047720[]; -static unk_func_8790002C D_86F0B1F0[4]; -static unk_func_8790002C D_86F0BCC0[4]; -static unk_func_8790002C D_86F0C790[4]; +static MiniActor miniSandshrews[4]; +static MiniActor miniSandshrewHoles[4]; +static MiniActor miniSandshrewGeisers[4]; static s16 D_86F0D260; static unk_D_800AC870* D_86F0D264; @@ -796,6 +796,7 @@ static u32 D_86F07E90[1024] = { 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5, 0x73C573C5 }; + static unk_D_86002F34_018 D_86F08E90[9] = { { 0x00, @@ -870,6 +871,7 @@ static unk_D_86002F34_018 D_86F08E90[9] = { D_86F07E90, }, }; + static Gfx D_86F08F00[] = { gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, 5, G_TX_NOLOD), @@ -988,6 +990,7 @@ static Gfx D_86F09130[] = { gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, 0x03FC, 0x01FC), gsSPEndDisplayList(), }; + static Vtx D_86F09170[] = { VTX(-1900, 0, -450, 243, 2183, 0x40, 0x64, 0x0C, 0xFF), VTX(1900, 0, -450, 8174, 3040, 0xAE, 0x55, 0x10, 0xFF), VTX(1400, 0, -1900, 5844, 3696, 0xC9, 0x64, 0x22, 0xFF), VTX(2000, 0, 1500, 10113, 2028, 0x00, 0x78, 0x00, 0xFF), @@ -1217,6 +1220,7 @@ static Vtx D_86F0A610[] = { VTX(98, 58, -482, 1024, 1342, 0x99, 0x00, 0x3C, 0xFF), VTX(53, 171, -561, 512, -86, 0x99, 0x00, 0x3B, 0xFF), VTX(18, 86, -620, 124, 982, 0x99, 0x00, 0x3C, 0xFF), VTX(87, 86, -501, 899, 982, 0x99, 0x00, 0x3C, 0xFF), }; + static Gfx D_86F0A730[] = { gsSPVertex(D_86F098D0, 32, 0), gsSPSetGeometryMode(G_CULL_BACK), @@ -1449,15 +1453,14 @@ static u32 D_86F0ACE0[] = { 0x2301FFFF, D_86F08F00, 0x0008FFFF, 0xFFFFFFFF, 0x22010000, D_86F0A9C8, 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x04000000, }; - static u32 D_86F0AFB8[] = { 0x17000009, 0x0000015C, D_86F08E90, NULL, D_86F09170, 0x05000000, 0x1C000000, 0x000023D7, 0x000023D7, 0x000023D7, 0x05000000, 0x03000000, D_86F0ACE0, 0x06000000, 0x06000000, 0x01000000, }; -static unk_func_8790002C* D_86F0AFF8 = D_86F0B1F0; -static unk_func_8790002C* D_86F0AFFC = D_86F0BCC0; -static unk_func_8790002C* D_86F0B000 = D_86F0C790; +static MiniActor* miniSandshrewPtr = miniSandshrews; +static MiniActor* miniSandshrewHolePtr = miniSandshrewHoles; +static MiniActor* miniSandshrewGeiserPtr = miniSandshrewGeisers; static u32 D_86F0B004[] = { 0x0C00FFFF, 0x05000000, 0x0B00001E, 0x00000000, 0x014000F0, 0x0000000F, 0x00000000, 0x00000000, @@ -1466,7 +1469,7 @@ static u32 D_86F0B004[] = { 0x00000000, D_86F0AFB8, 0x06000000, 0x06000000, 0x0F000003, 0x05000000, 0x0A000000, &D_800AC840, 0x06000000, 0x06000000, 0x06000000, 0x03000000, D_87806398, 0x06000000, 0x01000000, }; -static Vec3f D_86F0B0A0[4] = { +static Vec3f sandshrewPositions[4] = { { -50.0f, 0.0f, @@ -1488,12 +1491,15 @@ static Vec3f D_86F0B0A0[4] = { 50.0f, }, }; + +// unuced static s16 D_86F0B0D0[] = { 0x6000, 0x2000, 0xE000, 0xA000, }; + static unk_func_87801684 D_86F0B0D8[5] = { { D_03040580, 0x12 }, { D_03040980, 2 }, { D_03040D80, 8 }, { D_03040980, 2 }, { NULL, 0 }, }; @@ -1503,8 +1509,9 @@ static unk_func_87801684 D_86F0B100[5] = { static unk_func_87801684 D_86F0B128[6] = { { D_03047720, 2 }, { D_030483A0, 2 }, { D_03049020, 2 }, { D_030483A0, 2 }, { D_03047720, 6 }, { NULL, 0 }, }; -static s16 D_86F0B158[] = { 0x1E, 0x32, 0xF0, 0x104 }; -static s16 D_86F0B160[] = { 0xA8, 0x50, 0x50, 0xA8 }; + +static s16 playerIconsScreenXPos[] = { 0x1E, 0x32, 0xF0, 0x104 }; +static s16 playerIconsScreenYPos[] = { 0xA8, 0x50, 0x50, 0xA8 }; void func_86F00020(s16 arg0, s16 arg1) { UNUSED s32 pad; @@ -1583,283 +1590,285 @@ void func_86F00188(s16 arg0, s16 arg1) { } } -void func_86F001CC(unk_func_8790002C* arg0, s32 arg1) { - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; +void initSandshrew(MiniActor* sandshrew, s32 player) { + sandshrew->scale.x = 1.0f; + sandshrew->scale.y = 1.0f; + sandshrew->scale.z = 1.0f; - arg0->unk_1A8.x = D_86F0B0A0[arg1].x; - arg0->unk_1A8.y = D_86F0B0A0[arg1].y; - arg0->unk_1A8.z = D_86F0B0A0[arg1].z; + sandshrew->position_1.x = sandshrewPositions[player].x; + sandshrew->position_1.y = sandshrewPositions[player].y; + sandshrew->position_1.z = sandshrewPositions[player].z; - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.y = 0.0f; - arg0->unk_1C0.z = 0.0f; + sandshrew->position_2.x = 0.0f; + sandshrew->position_2.y = 0.0f; + sandshrew->position_2.z = 0.0f; - if (1) {} + if (true) {} - arg0->unk_220 = arg0->unk_226 = arg0->unk_22C = 0; - arg0->unk_222 = arg0->unk_228 = arg0->unk_22E = 0; - arg0->unk_224 = arg0->unk_22A = arg0->unk_230 = 0; + sandshrew->unk_220 = sandshrew->xRot_2 = sandshrew->unk_22C = 0; + sandshrew->unk_222 = sandshrew->yRot_2 = sandshrew->ySpinSpeed = 0; + sandshrew->unk_224 = sandshrew->zRot_2 = sandshrew->unk_230 = 0; - arg0->unk_272 = 0; - arg0->unk_2A8 = 0; - arg0->unk_2A4 = 0; + sandshrew->unk_272 = 0; + sandshrew->isWinner = 0; + sandshrew->unk_2A4 = 0; - arg0->unk_274 = 0.0f; - arg0->unk_27C = 0.0f; + sandshrew->diggingSpeed = 0.0f; + sandshrew->diggingAccel2 = 0.0f; - arg0->unk_214.x = arg0->unk_21A = 0; - arg0->unk_214.y = arg0->unk_21C = 0; - arg0->unk_214.z = arg0->unk_21E = 0; + sandshrew->totalRot.x = sandshrew->xRot_1 = 0; + sandshrew->totalRot.y = sandshrew->yRot_1 = 0; + sandshrew->totalRot.z = sandshrew->zRot_1 = 0; - arg0->unk_258 = arg0->unk_25C = 0x64; - arg0->unk_238 = arg0->unk_23A = 0; + sandshrew->miniHealth = sandshrew->miniMaxHealth = 0x64; + sandshrew->unk_238 = sandshrew->unk_23A = 0; - func_8001BD04(&arg0->unk_000, 0); + func_8001BD04(&sandshrew->unk_000, 0); - arg0->unk_290 = 0; - arg0->unk_23E = 0; - arg0->unk_240 = 0; + sandshrew->unk_290 = 0; + sandshrew->mainState = 0; + sandshrew->isSquashed = 0; - arg0->unk_2AC = D_879060C4[arg1]; + sandshrew->isComp = D_879060C4[player]; } -void func_86F002F4(void) { +void initSandshrews(void) { s32 i; - D_86F0AFF8 = D_86F0B1F0; + miniSandshrewPtr = miniSandshrews; for (i = 0; i < 4; i++) { - func_86F001CC(D_86F0AFF8, i); - D_86F0AFF8++; + initSandshrew(miniSandshrewPtr, i); + miniSandshrewPtr++; } } -void func_86F0035C(unk_func_8790002C* arg0) { - arg0->unk_222 = D_879060BC->angle; +void miniSandshewReangle(MiniActor* sandshrew) { + sandshrew->unk_222 = miniControllerPtr->angle; } -void func_86F00370(void) { +void miniSandshewReangleAll(void) { s32 i; - D_879060BC = gPlayer1Controller; - D_86F0AFF8 = D_86F0B1F0; + miniControllerPtr = gPlayer1Controller; + miniSandshrewPtr = miniSandshrews; for (i = 0; i < 4; i++) { - func_86F0035C(D_86F0AFF8); + miniSandshewReangle(miniSandshrewPtr); - D_86F0AFF8++; - D_879060BC++; + miniSandshrewPtr++; + miniControllerPtr++; } } -void func_86F003FC(unk_func_8790002C* arg0, s32 arg1) { - func_8001BD04(&arg0->unk_000, arg1); - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, 0x10000); - func_80017464(&arg0->unk_000, 0); - func_80017454(&arg0->unk_000, 0x10000); +void miniSandshewChangeAnim(MiniActor* actor, s32 animID) { + func_8001BD04(&actor->unk_000, animID); + func_800173DC(&actor->unk_000, 0, actor->unk_000.unk_040.unk_04, 0x10000); + func_80017464(&actor->unk_000, 0); + func_80017454(&actor->unk_000, 0x10000); } -void func_86F00450(unk_func_8790002C* arg0, f32 arg1) { - arg0->unk_280 -= arg1; - if (arg0->unk_280 < 1.0f) { - arg0->unk_280 = 1.0f; +void sandshrewDecreaseVel(MiniActor* sandshrew, f32 arg1) { + sandshrew->diggingAccel1 -= arg1; + if (sandshrew->diggingAccel1 < 1.0f) { + sandshrew->diggingAccel1 = 1.0f; } - arg0->unk_27C = arg0->unk_280; + sandshrew->diggingAccel2 = sandshrew->diggingAccel1; } -void func_86F0048C(unk_func_8790002C* arg0, s32 arg1) { - if (arg1 == -1) { - arg0->unk_29A = 0; - arg0->unk_2B0 = 0; - arg0->unk_2A0 = 0; - arg0->unk_280 = 0.0f; - arg0->unk_27C = 0.0f; - } else if (arg1 == 1) { - arg0->unk_2A0 = 0x14; - arg0->unk_2B0 = 3; - arg0->unk_23E = 1; - arg0->unk_280 = 10.0f; - arg0->unk_27C = 10.0f; - } else { - arg0->unk_2A0 = 0x14; - arg0->unk_2B0 = 3; - arg0->unk_27C = arg0->unk_280; - arg0->unk_280 = 10.0f; +void sandshrewChangeState(MiniActor* sandshrew, s32 arg1) { + if (arg1 == -1) { // stop digging + sandshrew->sandshrewLastDir = 0; + sandshrew->sandshrewFailChances = 0; + sandshrew->leftRightTimer = 0; + sandshrew->diggingAccel1 = 0.0f; + sandshrew->diggingAccel2 = 0.0f; + } else if (arg1 == 1) { // start digging + sandshrew->leftRightTimer = 0x14; + sandshrew->sandshrewFailChances = 3; + sandshrew->mainState = 1; + sandshrew->diggingAccel1 = 10.0f; + sandshrew->diggingAccel2 = 10.0f; + } else { // dig + sandshrew->leftRightTimer = 0x14; + sandshrew->sandshrewFailChances = 3; + sandshrew->diggingAccel2 = sandshrew->diggingAccel1; + sandshrew->diggingAccel1 = 10.0f; } } -void func_86F0050C(unk_func_8790002C* arg0) { - s32 var_v0; +void sandshrewHumanControls(MiniActor* sandshrew) { + s32 dir; - var_v0 = 0; - if (D_879060BC->buttonPressed & 0x20 && (D_879060BC->buttonPressed & 0x10)) { - var_v0 = 3; - } else if (arg0->unk_29A == 1) { - if (D_879060BC->buttonPressed & 0x20) { - var_v0 = 1; - } else if (D_879060BC->buttonPressed & 0x10) { - var_v0 = 2; + dir = 0; + if (BTN_IS_PRESSED(miniControllerPtr, BTN_L) && BTN_IS_PRESSED(miniControllerPtr, BTN_R)) { + dir = 3; + } else if (sandshrew->sandshrewLastDir == 1) { + if (BTN_IS_PRESSED(miniControllerPtr, BTN_L)) { + dir = 1; + } else if (BTN_IS_PRESSED(miniControllerPtr, BTN_R)) { + dir = 2; } - } else if (D_879060BC->buttonPressed & 0x10) { - var_v0 = 2; - } else if (D_879060BC->buttonPressed & 0x20) { - var_v0 = 1; + } else if (BTN_IS_PRESSED(miniControllerPtr, BTN_R)) { + dir = 2; + } else if (BTN_IS_PRESSED(miniControllerPtr, BTN_L)) { + dir = 1; } - if (arg0->unk_23E == 0) { - if ((arg0->unk_29A == 0) && ((var_v0 == 1) || (var_v0 == 2))) { - func_86F0048C(arg0, 1); - arg0->unk_29A = var_v0; + if (sandshrew->mainState == 0) { // on iddle animation + if ((sandshrew->sandshrewLastDir == 0) && ((dir == 1) || (dir == 2))) { + sandshrewChangeState(sandshrew, 1); + sandshrew->sandshrewLastDir = dir; } - } else if (var_v0 == 3) { - arg0->unk_2B0--; - if (arg0->unk_2B0 < 0) { - func_86F0048C(arg0, -1); + } else if (dir == 3) { // on both L&R + sandshrew->sandshrewFailChances--; + if (sandshrew->sandshrewFailChances < 0) { + sandshrewChangeState(sandshrew, -1); } else { - func_86F00450(arg0, 1.0f); + sandshrewDecreaseVel(sandshrew, 1.0f); } - } else if (var_v0 == 2) { - if (arg0->unk_29A == 1) { - func_86F0048C(arg0, 2); - arg0->unk_29A = 2; - } else if (arg0->unk_29A == 2) { - arg0->unk_2B0--; - if (arg0->unk_2B0 < 0) { - func_86F0048C(arg0, -1); + } else if (dir == 2) { // on R + if (sandshrew->sandshrewLastDir == 1) { + sandshrewChangeState(sandshrew, 2); + sandshrew->sandshrewLastDir = 2; + } else if (sandshrew->sandshrewLastDir == 2) { + sandshrew->sandshrewFailChances--; + if (sandshrew->sandshrewFailChances < 0) { + sandshrewChangeState(sandshrew, -1); } else { - func_86F00450(arg0, 1.0f); + sandshrewDecreaseVel(sandshrew, 1.0f); } } - } else if (var_v0 == 1) { - if (arg0->unk_29A == 2) { - func_86F0048C(arg0, 2); - arg0->unk_29A = 1; - } else if (arg0->unk_29A == 1) { - arg0->unk_2B0--; - if (arg0->unk_2B0 < 0) { - func_86F0048C(arg0, -1); + } else if (dir == 1) { // on L + if (sandshrew->sandshrewLastDir == 2) { + sandshrewChangeState(sandshrew, 2); + sandshrew->sandshrewLastDir = 1; + } else if (sandshrew->sandshrewLastDir == 1) { + sandshrew->sandshrewFailChances--; + if (sandshrew->sandshrewFailChances < 0) { + sandshrewChangeState(sandshrew, -1); } else { - func_86F00450(arg0, 1.0f); + sandshrewDecreaseVel(sandshrew, 1.0f); } } - } else if (arg0->unk_2A0 == 0) { - func_86F0048C(arg0, -1); - } else { - func_86F00450(arg0, 1.0f); + } else if (sandshrew->leftRightTimer == 0) { // ??? + sandshrewChangeState(sandshrew, -1); + } else { // ??? + sandshrewDecreaseVel(sandshrew, 1.0f); } - arg0->unk_2A0--; - if (arg0->unk_2A0 < 0) { - arg0->unk_2A0 = 0; + sandshrew->leftRightTimer--; + if (sandshrew->leftRightTimer < 0) { + sandshrew->leftRightTimer = 0; } - arg0->unk_274 += arg0->unk_27C; + sandshrew->diggingSpeed += sandshrew->diggingAccel2; } -void func_86F00778(unk_func_8790002C* arg0) { - switch (D_87906046) { +void sandshrewCompControls(MiniActor* arg0) { + switch (miniDifficulty) { case 0: - arg0->unk_27C = (func_81400A78(0xA) * 0.1f) + 3.0f; + arg0->diggingAccel2 = (func_81400A78(0xA) * 0.1f) + 3.0f; break; case 1: - arg0->unk_27C = (func_81400A78(0x14) * 0.15f) + 5.0f; + arg0->diggingAccel2 = (func_81400A78(0x14) * 0.15f) + 5.0f; break; case 2: - arg0->unk_27C = (func_81400A78(0x14) * 0.17f) + 6.0f; + arg0->diggingAccel2 = (func_81400A78(0x14) * 0.17f) + 6.0f; break; case 3: - arg0->unk_27C = (func_81400A78(0x12) * 0.2f) + 6.4f; + arg0->diggingAccel2 = (func_81400A78(0x12) * 0.2f) + 6.4f; break; } - arg0->unk_274 += arg0->unk_27C; - if ((arg0->unk_23E == 0) && (arg0->unk_27C != 0.0f)) { - arg0->unk_23E = 1; + arg0->diggingSpeed += arg0->diggingAccel2; + if ((arg0->mainState == 0) && (arg0->diggingAccel2 != 0.0f)) { + arg0->mainState = 1; } } -void func_86F00920(unk_func_8790002C* arg0) { +void func_86F00920(MiniActor* sandshrew) { UNUSED s32 pad; Vec3f sp48; - f32 temp_fv0; + f32 holeDeepeness; - switch (arg0->unk_23E) { - case 0x1: - func_86F003FC(arg0, 1); - arg0->unk_23E++; + switch (sandshrew->mainState) { + case 0x1: // start digging animation 1 + miniSandshewChangeAnim(sandshrew, 1); + sandshrew->mainState++; break; - case 0x2: - if (func_800174E4(&arg0->unk_000) != 0) { - func_86F003FC(arg0, 2); - func_80017454(&arg0->unk_000, 0); - arg0->unk_22E = 0; - arg0->unk_23E++; + case 0x2: // start digging animation 2 + if (func_800174E4(&sandshrew->unk_000) != 0) { + miniSandshewChangeAnim(sandshrew, 2); + func_80017454(&sandshrew->unk_000, 0); + sandshrew->ySpinSpeed = 0; + sandshrew->mainState++; } break; - case 0x3: - if (arg0->unk_27C != 0) { + case 0x3: // diggin + if (sandshrew->diggingAccel2 != 0) { if (D_8140E6CC == 0) { - func_81407F24(&arg0->unk_000, func_87902608, &D_87903E28, 1, 1); - func_81407F24(&arg0->unk_000, func_87902608, &D_87903E28, 1, 2); + func_81407F24(&sandshrew->unk_000, func_87902608, &D_87903E28, 1, 1); // perticles + func_81407F24(&sandshrew->unk_000, func_87902608, &D_87903E28, 1, 2); // particles } if (D_8140E6CC == 0) { - if (arg0->unk_190.y > -10.0f) { - func_81407D48(1.0f, arg0->unk_190, arg0->unk_214, func_87902224, &D_87903E10, 1); + if (sandshrew->totalPos.y > -10.0f) { + func_81407D48(1.0f, sandshrew->totalPos, sandshrew->totalRot, func_87902224, &D_87903E10, + 1); // particles } else { - sp48.x = arg0->unk_190.x; + sp48.x = sandshrew->totalPos.x; sp48.y = -5.0f; - sp48.z = arg0->unk_190.z; - func_81407D48(1.0f, sp48, arg0->unk_214, func_879023EC, &D_87903E10, 1); + sp48.z = sandshrew->totalPos.z; + func_81407D48(1.0f, sp48, sandshrew->totalRot, func_879023EC, &D_87903E10, + 1); // particles } } - func_80017454(&arg0->unk_000, ((s32)arg0->unk_27C << 0xE) + 0xC000); + func_80017454(&sandshrew->unk_000, ((s32)sandshrew->diggingAccel2 << 0xE) + 0xC000); - temp_fv0 = arg0->unk_274 / 5000.0f; - if (temp_fv0 > 0.2f) { - arg0->unk_1C0.y -= temp_fv0; + holeDeepeness = sandshrew->diggingSpeed / 5000.0f; + if (holeDeepeness > 0.2f) { + sandshrew->position_2.y -= holeDeepeness; } - func_86F00188(3, arg0 - D_86F0B1F0); - if (func_800174E4(&arg0->unk_000) != 0) { - func_80017464(&arg0->unk_000, 0); + func_86F00188(3, sandshrew - miniSandshrews); + if (func_800174E4(&sandshrew->unk_000) != 0) { + func_80017464(&sandshrew->unk_000, 0); } } else { - arg0->unk_274 = 0.0f; - func_8001BD04(&arg0->unk_000, 3); - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, 0x10000); - func_80017464(&arg0->unk_000, 0); - func_80017454(&arg0->unk_000, 0x10000); - func_86F00188(4, arg0 - D_86F0B1F0); - arg0->unk_23E++; + sandshrew->diggingSpeed = 0.0f; + func_8001BD04(&sandshrew->unk_000, 3); + func_800173DC(&sandshrew->unk_000, 0, sandshrew->unk_000.unk_040.unk_04, 0x10000); + func_80017464(&sandshrew->unk_000, 0); + func_80017454(&sandshrew->unk_000, 0x10000); + func_86F00188(4, sandshrew - miniSandshrews); + sandshrew->mainState++; } break; - case 0x4: - if (func_800174E4(&arg0->unk_000) != 0) { - func_8001BD04(&arg0->unk_000, 0); - arg0->unk_23E = 0; + case 0x4: // on stop diggin + if (func_800174E4(&sandshrew->unk_000) != 0) { + func_8001BD04(&sandshrew->unk_000, 0); + sandshrew->mainState = 0; } break; - case 0x64: - func_8001BD04(&arg0->unk_000, 4); - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, 0x10000); - func_80017464(&arg0->unk_000, 0); - func_80017454(&arg0->unk_000, 0x10000); - arg0->unk_23E++; - arg0->unk_1C0.y += 15.0f; + case 0x64: // win start animation + func_8001BD04(&sandshrew->unk_000, 4); + func_800173DC(&sandshrew->unk_000, 0, sandshrew->unk_000.unk_040.unk_04, 0x10000); + func_80017464(&sandshrew->unk_000, 0); + func_80017454(&sandshrew->unk_000, 0x10000); + sandshrew->mainState++; + sandshrew->position_2.y += 15.0f; break; - case 0x65: - func_87900594(arg0); - func_80015390(&D_86F0B000->unk_000, 0xA, &arg0->unk_1C0); + case 0x65: // win animation loop + minigameActorLocalOriginToZero(sandshrew); + func_80015390(&miniSandshrewGeiserPtr->unk_000, 0xA, &sandshrew->position_2); break; } } @@ -1867,200 +1876,199 @@ void func_86F00920(unk_func_8790002C* arg0) { void func_86F00D04(void) { s32 i; - D_879060BC = gPlayer1Controller; + miniControllerPtr = gPlayer1Controller; - D_86F0AFF8 = D_86F0B1F0; - D_86F0AFFC = D_86F0BCC0; - D_86F0B000 = D_86F0C790; + miniSandshrewPtr = miniSandshrews; + miniSandshrewHolePtr = miniSandshrewHoles; + miniSandshrewGeiserPtr = miniSandshrewGeisers; for (i = 0; i < 4; i++) { - if (D_87903DA4 != 0) { - if (D_86F0AFF8->unk_2AC == 0) { - func_86F0050C(D_86F0AFF8); + if (minigameInputLock) { + if (miniSandshrewPtr->isComp == 0) { + sandshrewHumanControls(miniSandshrewPtr); } else { - func_86F00778(D_86F0AFF8); + sandshrewCompControls(miniSandshrewPtr); } } - func_86F00920(D_86F0AFF8); - func_87900770(D_86F0AFF8); - func_87900808(D_86F0AFF8); + func_86F00920(miniSandshrewPtr); + miniActorUpdateTransform(miniSandshrewPtr); + func_87900808(miniSandshrewPtr); - D_86F0AFF8++; - D_86F0AFFC++; - D_86F0B000++; + miniSandshrewPtr++; + miniSandshrewHolePtr++; + miniSandshrewGeiserPtr++; - D_879060BC++; + miniControllerPtr++; } } -void func_86F00E34(unk_func_8790002C* a0, s32 arg1) { - unk_func_8790002C* arg0 = a0; +void initSandshrewHole(MiniActor* a0, s32 arg1) { + MiniActor* sandshrewHole = a0; - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + sandshrewHole->scale.x = 1.0f; + sandshrewHole->scale.y = 1.0f; + sandshrewHole->scale.z = 1.0f; - arg0->unk_1A8.x = D_86F0B0A0[arg1].x; - arg0->unk_1A8.y = D_86F0B0A0[arg1].y; - arg0->unk_1A8.z = D_86F0B0A0[arg1].z; + sandshrewHole->position_1.x = sandshrewPositions[arg1].x; + sandshrewHole->position_1.y = sandshrewPositions[arg1].y; + sandshrewHole->position_1.z = sandshrewPositions[arg1].z; - arg0->unk_214.x = arg0->unk_21A = arg0->unk_220 = arg0->unk_226 = arg0->unk_22C = 0; - arg0->unk_214.y = arg0->unk_21C = arg0->unk_222 = arg0->unk_228 = arg0->unk_22E = 0; - arg0->unk_214.z = arg0->unk_21E = arg0->unk_224 = arg0->unk_22A = arg0->unk_230 = 0; + sandshrewHole->totalRot.x = sandshrewHole->xRot_1 = sandshrewHole->unk_220 = sandshrewHole->xRot_2 = + sandshrewHole->unk_22C = 0; + sandshrewHole->totalRot.y = sandshrewHole->yRot_1 = sandshrewHole->unk_222 = sandshrewHole->yRot_2 = + sandshrewHole->ySpinSpeed = 0; + sandshrewHole->totalRot.z = sandshrewHole->zRot_1 = sandshrewHole->unk_224 = sandshrewHole->zRot_2 = + sandshrewHole->unk_230 = 0; - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.y = 0.0f; - arg0->unk_1C0.z = 0.0f; + sandshrewHole->position_2.x = 0.0f; + sandshrewHole->position_2.y = 0.0f; + sandshrewHole->position_2.z = 0.0f; - arg0->unk_258 = arg0->unk_25C = 0x64; + sandshrewHole->miniHealth = sandshrewHole->miniMaxHealth = 0x64; - arg0->unk_272 = 0; - arg0->unk_2A4 = 0; - arg0->unk_23E = 0; - arg0->unk_24A = 0; + sandshrewHole->unk_272 = 0; + sandshrewHole->unk_2A4 = 0; + sandshrewHole->mainState = 0; + sandshrewHole->unk_24A = 0; - arg0->unk_000.unk_000.unk_01 &= ~1; + sandshrewHole->unk_000.unk_000.unk_01 &= ~1; } -void func_86F00F00(void) { +void initSandshrewHoles(void) { s32 i; - D_86F0AFFC = D_86F0BCC0; + miniSandshrewHolePtr = miniSandshrewHoles; for (i = 0; i < 4; i++) { - func_86F00E34(D_86F0AFFC, i); - D_86F0AFFC++; + initSandshrewHole(miniSandshrewHolePtr, i); + miniSandshrewHolePtr++; } } -void func_86F00F68(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { +void func_86F00F68(MiniActor* sandshrewHole, MiniActor* sandshrewPlayer) { s32 var_a1; - if ((arg1->unk_274 > 300.0f) && (arg0->unk_23E == 0)) { - func_86F003FC(arg0, 0); - arg0->unk_000.unk_000.unk_01 |= 1; - arg0->unk_23E = 1; + if ((sandshrewPlayer->diggingSpeed > 300.0f) && (sandshrewHole->mainState == 0)) { + miniSandshewChangeAnim(sandshrewHole, 0); + sandshrewHole->unk_000.unk_000.unk_01 |= 1; + sandshrewHole->mainState = 1; } - if (arg0->unk_23E != 0) { - if (arg1->unk_274 > 400.0f) { + if (sandshrewHole->mainState != 0) { + if (sandshrewPlayer->diggingSpeed > 400.0f) { var_a1 = 0x5000; } else { var_a1 = 0; } - func_80017454(&arg0->unk_000, var_a1); + func_80017454(&sandshrewHole->unk_000, var_a1); } } void func_86F01014(void) { s32 i; - D_86F0AFFC = D_86F0BCC0; - D_86F0AFF8 = D_86F0B1F0; + miniSandshrewHolePtr = miniSandshrewHoles; + miniSandshrewPtr = miniSandshrews; for (i = 0; i < 4; i++) { - func_86F00F68(D_86F0AFFC, D_86F0AFF8); - func_87900770(D_86F0AFFC); - func_87900808(D_86F0AFFC); + func_86F00F68(miniSandshrewHolePtr, miniSandshrewPtr); + miniActorUpdateTransform(miniSandshrewHolePtr); + func_87900808(miniSandshrewHolePtr); - D_86F0AFFC++; - D_86F0AFF8++; + miniSandshrewHolePtr++; + miniSandshrewPtr++; } } -void func_86F010B4(unk_func_8790002C* a0, s32 arg1) { - unk_func_8790002C* arg0 = a0; +void initSandshrewWaterGeiser(MiniActor* arg0, s32 arg1) { + MiniActor* geiser = arg0; - arg0->unk_16C.x = 1.0f; - arg0->unk_16C.y = 1.0f; - arg0->unk_16C.z = 1.0f; + geiser->scale.x = 1.0f; + geiser->scale.y = 1.0f; + geiser->scale.z = 1.0f; - arg0->unk_1A8.x = D_86F0B0A0[arg1].x; - arg0->unk_1A8.y = D_86F0B0A0[arg1].y; - arg0->unk_1A8.z = D_86F0B0A0[arg1].z; + geiser->position_1.x = sandshrewPositions[arg1].x; + geiser->position_1.y = sandshrewPositions[arg1].y; + geiser->position_1.z = sandshrewPositions[arg1].z; - arg0->unk_22C = 0; - arg0->unk_22E = 0; - arg0->unk_230 = 0; + geiser->totalRot.x = geiser->xRot_1 = geiser->unk_220 = geiser->xRot_2 = geiser->unk_22C = 0; + geiser->totalRot.y = geiser->yRot_1 = geiser->unk_222 = geiser->yRot_2 = geiser->ySpinSpeed = 0; + geiser->totalRot.z = geiser->zRot_1 = geiser->unk_224 = geiser->zRot_2 = geiser->unk_230 = 0; - arg0->unk_214.x = arg0->unk_21A = arg0->unk_220 = arg0->unk_226 = arg0->unk_22C; - arg0->unk_214.y = arg0->unk_21C = arg0->unk_222 = arg0->unk_228 = arg0->unk_22E; - arg0->unk_214.z = arg0->unk_21E = arg0->unk_224 = arg0->unk_22A = arg0->unk_230; + geiser->position_2.x = 0.0f; + geiser->position_2.y = 0.0f; + geiser->position_2.z = 0.0f; - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.y = 0.0f; - arg0->unk_1C0.z = 0.0f; + geiser->miniHealth = geiser->miniMaxHealth = 0x64; - arg0->unk_258 = arg0->unk_25C = 0x64; + geiser->unk_272 = 0; + geiser->unk_2A4 = 0; + geiser->mainState = 0; + geiser->unk_24A = 0; - arg0->unk_272 = 0; - arg0->unk_2A4 = 0; - arg0->unk_23E = 0; - arg0->unk_24A = 0; - - arg0->unk_000.unk_000.unk_01 &= ~1; + geiser->unk_000.unk_000.unk_01 &= ~1; } -void func_86F01180(void) { +void initSandshrewGeisers(void) { s32 i; - D_86F0B000 = D_86F0C790; + miniSandshrewGeiserPtr = miniSandshrewGeisers; for (i = 0; i < 4; i++) { - func_86F010B4(D_86F0B000, i); - D_86F0B000++; + initSandshrewWaterGeiser(miniSandshrewGeiserPtr, i); + miniSandshrewGeiserPtr++; } } -void func_86F011E8(unk_func_8790002C* arg0) { - switch (arg0->unk_23E) { +void func_86F011E8(MiniActor* geiser) { + switch (geiser->mainState) { case 1: - func_86F003FC(arg0, 0); - arg0->unk_000.unk_000.unk_01 |= 1; - arg0->unk_23E++; + miniSandshewChangeAnim(geiser, 0); + geiser->unk_000.unk_000.unk_01 |= 1; + geiser->mainState++; break; case 2: - if (func_80017514(&D_86F0B000->unk_000) != 0) { - func_86F003FC(arg0, 1); - arg0->unk_23E++; + if (func_80017514(&miniSandshrewGeiserPtr->unk_000) != 0) { + miniSandshewChangeAnim(geiser, 1); + geiser->mainState++; } break; } - if ((arg0->unk_23E >= 2) && (D_8140E6CC == 0)) { - func_81407F24(&arg0->unk_000, func_87902C9C, &D_87903E58, 4, 0xA); + if ((geiser->mainState >= 2) && (D_8140E6CC == 0)) { + func_81407F24(&geiser->unk_000, func_87902C9C, &D_87903E58, 4, 0xA); } } void func_86F012B8(void) { s32 i; - D_86F0B000 = D_86F0C790; + miniSandshrewGeiserPtr = miniSandshrewGeisers; for (i = 0; i < 4; i++) { - func_86F011E8(D_86F0B000); - func_87900770(D_86F0B000); - func_87900808(D_86F0B000); + func_86F011E8(miniSandshrewGeiserPtr); + miniActorUpdateTransform(miniSandshrewGeiserPtr); + func_87900808(miniSandshrewGeiserPtr); - D_86F0B000++; + miniSandshrewGeiserPtr++; } } void func_86F0132C(void) { D_87906054 = D_87906050->unk_00.unk_0C; - D_87906060 = 0x1600; - D_87906062 = 0; - D_87906064 = 0x10E; - D_87906066 = 0x23; - D_87906068 = 0x32; - D_8790606A = 0x1900; + miniCameraXRot = 0x1600; + miniCameraYRot = 0; + miniCameraDistance = 0x10E; + miniCameraFov = 0x23; + miniCameraNear = 0x32; + miniCameraFar = 0x1900; - D_8790606C.x = 0; - D_8790606C.y = -2; - D_8790606C.z = 0; + miniCameraCoords.x = 0; + miniCameraCoords.y = -2; + miniCameraCoords.z = 0; - func_87900B64(); + miniUpdateCamera(); } void func_86F013B8(void) { @@ -2074,7 +2082,7 @@ void func_86F013B8(void) { func_81400760(&D_8790607C, 250.0f, 1.0f); func_81400760(&D_87906088.y, 34.0f, 1.8f); func_81400550(&D_87906076, 0x600, 0xCC); - func_81400550(&D_879060C8, 0, 0x30); + func_81400550(&miniHudTransparency, 0, 0x30); break; } @@ -2085,16 +2093,16 @@ void func_86F013B8(void) { void func_86F01488(void) { func_86F013B8(); - func_87900C5C(); - func_87900B64(); + minigameDebuggModeControl(); + miniUpdateCamera(); } -void func_86F014B8(void) { - func_87900854(); - func_86F002F4(); - func_86F00F00(); - func_86F01180(); - func_86F0132C(); +void sandshrewMinigameInitObjects(void) { + func_87900854(); // init minigame variables + initSandshrews(); + initSandshrewHoles(); + initSandshrewGeisers(); + func_86F0132C(); // fix the camera } s32 func_86F014F8(void) { @@ -2107,28 +2115,28 @@ s32 func_86F014F8(void) { var_s7 = 0; var_s4 = -1; - D_86F0AFF8 = D_86F0B1F0; + miniSandshrewPtr = miniSandshrews; for (i = 0; i < 4; i++) { - if (D_86F0AFF8->unk_190.y < var_fs0) { - var_fs0 = D_86F0AFF8->unk_190.y; + if (miniSandshrewPtr->totalPos.y < var_fs0) { + var_fs0 = miniSandshrewPtr->totalPos.y; } - D_86F0AFF8++; + miniSandshrewPtr++; } - D_86F0AFF8 = D_86F0B1F0; - D_86F0B000 = D_86F0C790; + miniSandshrewPtr = miniSandshrews; + miniSandshrewGeiserPtr = miniSandshrewGeisers; for (i = 0; i < 4; i++) { - if (D_86F0AFF8->unk_190.y <= var_fs0) { - D_86F0AFF8->unk_2A8 = 1; + if (miniSandshrewPtr->totalPos.y <= var_fs0) { + miniSandshrewPtr->isWinner = 1; var_s7 = 1; var_s4 += 1; - D_86F0AFF8->unk_23E = 0x64; - D_86F0B000->unk_23E = 1; + miniSandshrewPtr->mainState = 0x64; + miniSandshrewGeiserPtr->mainState = 1; func_86F00188(5, i); func_87802F00(i); } - D_86F0AFF8++; - D_86F0B000++; + miniSandshrewPtr++; + miniSandshrewGeiserPtr++; } D_87903DD4 = var_s4; @@ -2138,10 +2146,10 @@ s32 func_86F014F8(void) { void func_86F0164C(void) { s32 i; - D_86F0AFF8 = D_86F0B1F0; + miniSandshrewPtr = miniSandshrews; for (i = 0; i < 4; i++) { - D_86F0AFF8->unk_274 = D_86F0AFF8->unk_27C = 0.0f; - D_86F0AFF8++; + miniSandshrewPtr->diggingSpeed = miniSandshrewPtr->diggingAccel2 = 0.0f; + miniSandshrewPtr++; } } @@ -2164,52 +2172,52 @@ s32 func_86F016D8(void) { } void func_86F0174C(void) { - switch (D_87903DA0) { - case 1: - D_87906040 = 0xF; - D_87903DA0++; + switch (minigameState) { + case 1: // after pressing start + miniInputLockTimer = 0xF; + minigameState++; break; - case 2: - D_87906040--; - if (D_87906040 < 0) { + case 2: // waits for some frames before starting the main countdown + miniInputLockTimer--; + if (miniInputLockTimer < 0) { func_8780295C(1); - D_87903DA0++; + minigameState++; } break; - case 3: + case 3: // if (func_86F016D8() != 0) { - D_87903DA4 = 1; - D_87903DC4 = 0; - func_86F00370(); - D_87903DA0++; + minigameInputLock = true; + miniTutoScreenState = 0; + miniSandshewReangleAll(); // (???) + minigameState++; } break; case 4: if (func_86F014F8() != 0) { func_86F0164C(); - D_87903DA4 = 0; + minigameInputLock = false; D_87906072 = 1; - D_87903DA0++; - D_87906040 = 0x28; + minigameState++; + miniInputLockTimer = 0x28; } break; case 5: - D_87906040--; - if (D_87906040 == 0) { + miniInputLockTimer--; + if (miniInputLockTimer == 0) { func_87802EB8(1); func_87903294(); func_86F00188(0xC, 0xB4); - D_87903DA0++; + minigameState++; } break; case 6: if (D_8780FC96 != 0) { - D_87903DA0++; + minigameState++; D_87903DAC = 1; } break; @@ -2279,29 +2287,29 @@ void func_86F01C40(void) { break; } - if (D_87903DC4 == -2) { + if (miniTutoScreenState == -2) { func_8001EBE0(0x10, -2); if (D_87903DD0 == 0x18) { - func_879033FC(D_86F0B1F0); + func_879033FC(miniSandshrews); } func_8001EBE0(4, -2); } } -void func_86F01D78(void) { +void fixSandshrewMinigameHUD(void) { s32 i; gSPDisplayList(gDisplayListHead++, D_8006F518); - gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, D_879060C8); + gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, miniHudTransparency); for (i = 0; i < 4; i++) { - s16 tmp1 = D_86F0B158[i]; - s16 tmp2 = D_86F0B160[i]; + s16 xPos = playerIconsScreenXPos[i]; + s16 yPos = playerIconsScreenYPos[i]; - if (D_879060C4[i] == 0) { - func_87801644(i, tmp1, tmp2, 0.75f); - } else { - func_87801644(-1 - i, tmp1, tmp2, 0.75f); + if (D_879060C4[i] == 0) { // if ai player + func_87801644(i, xPos, yPos, 0.75f); + } else { // if human player + func_87801644(-1 - i, xPos, yPos, 0.75f); } } @@ -2312,14 +2320,14 @@ void func_86F01EB4(void) { func_87903260(); func_86F01C40(); - if (D_87906044 != 0) { - func_86F01D78(); + if (miniShowHUB != 0) { + fixSandshrewMinigameHUD(); } } -void func_86F01EF4(s32 arg0) { - u8 sp1C[] = { 0, 0, 30 }; // D_86F0B168 - u8 sp18[] = { 0, 0, 250 }; // D_86F0B16C +void func_86F01EF4(UNUSED s32 arg0) { + UNUSED u8 sp1C[] = { 0, 0, 30 }; // D_86F0B168 + UNUSED u8 sp18[] = { 0, 0, 250 }; // D_86F0B16C func_8001F3F4(); func_8001EBE0(4, -2); @@ -2345,50 +2353,50 @@ void func_86F01F58(s32 arg0) { func_80015094(&D_87906050->unk_00); func_87901C98(); - if (D_87903DB0 == 0) { + if (miniDebugMode == 0) { if (D_8780FC98 == 0) { func_86F01EF4(arg0); } func_87804FD4(); } else { - func_87900F44(); - func_879010A4(); + showDebuggCameraInfo(); + showDebuggJoystickInfo(); } func_80007778(); } -void func_86F02004(void) { - func_86F014B8(); +void sandshrewMinigameInit(void) { + sandshrewMinigameInitObjects(); func_800077B4(0xA); func_80006C6C(0x10); - D_87903DC4 = 3; - D_87906046 = D_8780FA38; + miniTutoScreenState = 3; + miniDifficulty = D_8780FA38; } void func_86F0204C(void) { s32 var_s5 = 1; func_87901620(); - func_87900558(); + hideMiniGameHUD(); while (var_s5 != 0) { func_87900528(); - if (D_87903DA0 == 0) { + if (minigameState == 0) { D_87906042 += 1; if (D_87906042 < 0) { D_87906042 = 0; } } - if ((D_87903DB0 == 0) && (D_87906044 == 0) && (func_80007604() == 0)) { - if (gPlayer1Controller->buttonPressed & 0x1000) { - D_87903DC4 = 1; - D_87903DA0 = 1; - D_87906044 = 1; + if ((miniDebugMode == false) && (miniShowHUB == false) && (func_80007604() == 0)) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { + miniTutoScreenState = 1; + minigameState = 1; + miniShowHUB = true; func_86F00188(7, 0); - } else if ((D_8780FA2A == 0) && (gPlayer1Controller->buttonPressed & 0x4000)) { + } else if ((D_8780FA2A == 0) && (BTN_IS_PRESSED(gPlayer1Controller, BTN_B))) { func_86F00188(8, 0); func_87802EB8(2); } @@ -2396,7 +2404,7 @@ void func_86F0204C(void) { if (D_8780FC94 == 0) { func_8140C5D0(); - func_86F0174C(); + func_86F0174C(); // next stept func_86F00D04(); func_86F01014(); func_86F012B8(); @@ -2404,7 +2412,7 @@ void func_86F0204C(void) { func_86F01488(); } - if ((D_87903DB0 == 0) && ((D_87903DAC != 0) || (D_8780FC92 != 0))) { + if ((miniDebugMode == 0) && ((D_87903DAC != 0) || (D_8780FC92 != 0))) { var_s5 = 0; } @@ -2452,15 +2460,15 @@ void func_86F02320(void) { func_8001BB20(); for (i = 0; i < 4; i++) { - func_8001BB58(&D_86F0B1F0[i].unk_000); + func_8001BB58(&miniSandshrews[i].unk_000); } for (i = 0; i < 4; i++) { - func_8001BB58(&D_86F0BCC0[i].unk_000); + func_8001BB58(&miniSandshrewHoles[i].unk_000); } for (i = 0; i < 4; i++) { - func_8001BB58(&D_86F0C790[i].unk_000); + func_8001BB58(&miniSandshrewGeisers[i].unk_000); } func_8001987C(); @@ -2468,32 +2476,32 @@ void func_86F02320(void) { temp_s1 = func_80019D18(0xA1); for (i = 0; i < 4; i++) { - D_86F0B1F0[i].unk_23C = 0xA1; - D_86F0B1F0[i].unk_168 = temp_s1; - func_8001BC34(&D_86F0B1F0[i].unk_000, 0, D_86F0B1F0[i].unk_23C, temp_s1->unk_08->unk_00[0]); - func_8001BD04(&D_86F0B1F0[i].unk_000, 0); + miniSandshrews[i].unk_23C = 0xA1; + miniSandshrews[i].unk_168 = temp_s1; + func_8001BC34(&miniSandshrews[i].unk_000, 0, miniSandshrews[i].unk_23C, temp_s1->unk_08->unk_00[0]); + func_8001BD04(&miniSandshrews[i].unk_000, 0); } temp_s1 = func_80019D18(0x9D); for (i = 0; i < 4; i++) { - D_86F0BCC0[i].unk_23C = 0x9D; - D_86F0BCC0[i].unk_168 = temp_s1; - func_8001BC34(&D_86F0BCC0[i].unk_000, 0, D_86F0BCC0[i].unk_23C, temp_s1->unk_08->unk_00[0]); - func_8001BD04(&D_86F0BCC0[i].unk_000, 0); + miniSandshrewHoles[i].unk_23C = 0x9D; + miniSandshrewHoles[i].unk_168 = temp_s1; + func_8001BC34(&miniSandshrewHoles[i].unk_000, 0, miniSandshrewHoles[i].unk_23C, temp_s1->unk_08->unk_00[0]); + func_8001BD04(&miniSandshrewHoles[i].unk_000, 0); } temp_s1 = func_80019D18(0xA2); for (i = 0; i < 4; i++) { - D_86F0C790[i].unk_23C = 0xA2; - D_86F0C790[i].unk_168 = temp_s1; - func_8001BC34(&D_86F0C790[i].unk_000, 0, D_86F0C790[i].unk_23C, temp_s1->unk_08->unk_00[0]); - func_8001BD04(&D_86F0C790[i].unk_000, 0); + miniSandshrewGeisers[i].unk_23C = 0xA2; + miniSandshrewGeisers[i].unk_168 = temp_s1; + func_8001BC34(&miniSandshrewGeisers[i].unk_000, 0, miniSandshrewGeisers[i].unk_23C, temp_s1->unk_08->unk_00[0]); + func_8001BD04(&miniSandshrewGeisers[i].unk_000, 0); } } -s32 func_86F02520(s32 arg0, UNUSED s32 arg1) { +s32 sandshrewMinigameLoad(s32 arg0, UNUSED s32 arg1) { unk_func_80007444* sp24; if (arg0 == 1) { @@ -2514,12 +2522,12 @@ s32 func_86F02520(s32 arg0, UNUSED s32 arg1) { func_86F02320(); func_80007678(sp24); - func_86F02004(); - func_86F0204C(); + sandshrewMinigameInit(); + func_86F0204C(); // tutorial screen ? func_86F02230(); func_800076C0(); - func_8001E9CC(); - func_80005EAC(); + func_8001E9CC(); // main_pool_try_free(D_800AC870); + func_80005EAC(); // main_pool_try_free(D_800A7428.unk4); main_pool_try_free(D_800A7428.unk0); main_pool_pop_state('MINI'); diff --git a/src/fragments/21/fragment21.h b/src/fragments/21/fragment21.h index 02844b3..2217b43 100644 --- a/src/fragments/21/fragment21.h +++ b/src/fragments/21/fragment21.h @@ -6,29 +6,29 @@ void func_86F00020(s16 arg0, s16 arg1); void func_86F00188(s16 arg0, s16 arg1); -void func_86F001CC(unk_func_8790002C* arg0, s32 arg1); -void func_86F002F4(void); -void func_86F0035C(unk_func_8790002C* arg0); -void func_86F00370(void); -void func_86F003FC(unk_func_8790002C* arg0, s32 arg1); -void func_86F00450(unk_func_8790002C* arg0, f32 arg1); -void func_86F0048C(unk_func_8790002C* arg0, s32 arg1); -void func_86F0050C(unk_func_8790002C* arg0); -void func_86F00778(unk_func_8790002C* arg0); -void func_86F00920(unk_func_8790002C* arg0); +void initSandshrew(MiniActor* sandshrew, s32 player); +void initSandshrews(void); +void miniSandshewReangle(MiniActor* sandshrew); +void miniSandshewReangleAll(void); +void miniSandshewChangeAnim(MiniActor* actor, s32 animID); +void sandshrewDecreaseVel(MiniActor* arg0, f32 arg1); +void sandshrewChangeState(MiniActor* sandshrew, s32 arg1); +void sandshrewHumanControls(MiniActor* sandshrew); +void sandshrewCompControls(MiniActor* arg0); +void func_86F00920(MiniActor* sandshrew); void func_86F00D04(void); -void func_86F00E34(unk_func_8790002C* a0, s32 arg1); -void func_86F00F00(void); -void func_86F00F68(unk_func_8790002C* arg0, unk_func_8790002C* arg1); +void initSandshrewHole(MiniActor* a0, s32 arg1); +void initSandshrewHoles(void); +void func_86F00F68(MiniActor* sandshrewHole, MiniActor* sandshrewPlayer); void func_86F01014(void); -void func_86F010B4(unk_func_8790002C* a0, s32 arg1); -void func_86F01180(void); -void func_86F011E8(unk_func_8790002C* arg0); +void initSandshrewWaterGeiser(MiniActor* arg0, s32 arg1); +void initSandshrewGeisers(void); +void func_86F011E8(MiniActor* geiser); void func_86F012B8(void); void func_86F0132C(void); void func_86F013B8(void); void func_86F01488(void); -void func_86F014B8(void); +void sandshrewMinigameInitObjects(void); s32 func_86F014F8(void); void func_86F0164C(void); s32 func_86F016D8(void); @@ -36,14 +36,14 @@ void func_86F0174C(void); void func_86F018E4(void); void func_86F01904(void); void func_86F01C40(void); -void func_86F01D78(void); +void fixSandshrewMinigameHUD(void); void func_86F01EB4(void); void func_86F01EF4(s32 arg0); void func_86F01F58(s32 arg0); -void func_86F02004(void); +void sandshrewMinigameInit(void); void func_86F0204C(void); void func_86F02230(void); void func_86F02320(void); -s32 func_86F02520(s32 arg0, UNUSED s32 arg1); +s32 sandshrewMinigameLoad(s32 arg0, UNUSED s32 arg1); #endif // _FRAGMENT21_H_ diff --git a/src/fragments/3/fragment3.h b/src/fragments/3/fragment3.h index 36da038..c56642d 100644 --- a/src/fragments/3/fragment3.h +++ b/src/fragments/3/fragment3.h @@ -6,101 +6,118 @@ #include "src/3FB0.h" #include "src/controller.h" -typedef struct unk_func_8790002C { - /* 0x000 */ unk_D_86002F58_004_000 unk_000; +typedef struct MiniActor { + /* 0x000 */ unk_D_86002F58_004_000 unk_000; // collider ? model ? /* 0x168 */ unk_D_86002F30* unk_168; - /* 0x16C */ Vec3f unk_16C; - /* 0x178 */ char unk178[0x18]; - /* 0x190 */ Vec3f unk_190; - /* 0x19C */ Vec3f unk_19C; - /* 0x1A8 */ Vec3f unk_1A8; - /* 0x1B4 */ Vec3f unk_1B4; - /* 0x1C0 */ Vec3f unk_1C0; - /* 0x1CC */ f32 unk_1CC; - /* 0x1D0 */ f32 unk_1D0; - /* 0x1D4 */ f32 unk_1D4; - /* 0x1D8 */ Vec3f unk_1D8; - /* 0x1E4 */ f32 unk_1E4; - /* 0x1E8 */ char unk1E8[0x4]; - /* 0x1EC */ f32 unk_1EC; - /* 0x1F0 */ f32 unk_1F0; - /* 0x1F4 */ f32 unk_1F4; - /* 0x1F8 */ f32 unk_1F8; - /* 0x1FC */ f32 unk_1FC; - /* 0x200 */ f32 unk_200; - /* 0x204 */ f32 unk_204; - /* 0x208 */ f32 unk_208; - /* 0x20C */ f32 unk_20C; - /* 0x210 */ f32 unk_210; - /* 0x214 */ Vec3s unk_214; - /* 0x21A */ s16 unk_21A; - /* 0x21C */ s16 unk_21C; - /* 0x21E */ s16 unk_21E; - /* 0x220 */ s16 unk_220; - /* 0x222 */ s16 unk_222; - /* 0x224 */ s16 unk_224; - /* 0x226 */ s16 unk_226; - /* 0x228 */ s16 unk_228; - /* 0x22A */ s16 unk_22A; - /* 0x22C */ s16 unk_22C; - /* 0x22E */ s16 unk_22E; - /* 0x230 */ s16 unk_230; - /* 0x232 */ s16 unk_232; - /* 0x234 */ s16 unk_234; - /* 0x236 */ s16 unk_236; - /* 0x238 */ s16 unk_238; - /* 0x23A */ s16 unk_23A; - /* 0x23A */ s16 unk_23C; - /* 0x23E */ s16 unk_23E; - /* 0x240 */ s16 unk_240; - /* 0x242 */ s16 unk_242; - /* 0x244 */ s16 unk_244; - /* 0x246 */ char unk246[0x2]; - /* 0x248 */ s16 unk_248; - /* 0x24A */ s16 unk_24A; - /* 0x24C */ s16 unk_24C; - /* 0x24E */ char unk24E[0x6]; - /* 0x254 */ s32 unk_254; - /* 0x258 */ s16 unk_258; - /* 0x25A */ s16 unk_25A; - /* 0x25C */ s16 unk_25C; - /* 0x25E */ s16 unk_25E; - /* 0x260 */ s16 unk_260; - /* 0x262 */ s16 unk_262; - /* 0x264 */ s16 unk_264; - /* 0x264 */ s16 unk_266; - /* 0x268 */ s16 unk_268; - /* 0x26A */ s16 unk_26A; - /* 0x26C */ s16 unk_26C; - /* 0x26E */ s16 unk_26E; - /* 0x270 */ s16 unk_270; - /* 0x272 */ s16 unk_272; - /* 0x274 */ f32 unk_274; - /* 0x278 */ char unk278[0x4]; - /* 0x27C */ f32 unk_27C; - /* 0x280 */ f32 unk_280; - /* 0x284 */ f32 unk_284; - /* 0x288 */ f32 unk_288; - /* 0x28C */ f32 unk_28C; - /* 0x290 */ s16 unk_290; - /* 0x292 */ s16 unk_292; - /* 0x294 */ s16 unk_294; + /* 0x16C */ Vec3f scale; + /* 0x178 */ char unk178[0x18]; // unused + /* 0x190 */ Vec3f totalPos; // all positions + /* 0x19C */ Vec3f totalPos_alt; // all positions + height/2 + /* 0x1A8 */ Vec3f position_1; + /* 0x1B4 */ Vec3f closestDiglettPos;// ** ekans only + /* 0x1C0 */ Vec3f position_2; + /* 0x1CC */ f32 dist2DiglettLevelX; // 1,2,4 + /* 0x1D0 */ f32 dist2DiglettLevelY; // unused + /* 0x1D4 */ f32 dist2DiglettLevelZ; // 1,2,4 + /* 0x1D8 */ Vec3f unk_1D8; // also position, unused + /* 0x1E4 */ f32 middleHeight; + /* 0x1E8 */ char unk1E8[0x4]; // unused ? + /* 0x1EC */ f32 unk_1EC; // always zero + /* 0x1F0 */ f32 unk_1F0; // always zero + /* 0x1F4 */ f32 unk_1F4; // always zero + /* 0x1F8 */ f32 xSpeed; + /* 0x1FC */ f32 ySpeed; + /* 0x200 */ f32 zSpeed; + /* 0x204 */ f32 xAccel; + /* 0x208 */ f32 yAccel; + /* 0x20C */ f32 zAccel; + /* 0x210 */ f32 antiAcceleration; + /* 0x214 */ Vec3s totalRot; + /* 0x21A */ s16 xRot_1; + /* 0x21C */ s16 yRot_1; + /* 0x21E */ s16 zRot_1; + /* 0x220 */ s16 unk_220; // x something + /* 0x222 */ s16 unk_222; // y something ; ??? ; stick direction on sandshrew (?) + /* 0x224 */ s16 unk_224; // z something + /* 0x226 */ s16 xRot_2; + /* 0x228 */ s16 yRot_2; // throwing direction on ekans + /* 0x22A */ s16 zRot_2; + /* 0x22C */ s16 unk_22C; // zero, x spinning speed ? + /* 0x22E */ s16 ySpinSpeed; // y spinning speed on ekans + /* 0x230 */ s16 unk_230; // zero, z spinning speed ? + /* 0x232 */ s16 xRot_3; + /* 0x234 */ s16 yRot_3; + /* 0x236 */ s16 zRot_3; + /* 0x238 */ s16 unk_238; // always zero + /* 0x23A */ s16 unk_23A; // always zero + /* 0x23C */ s16 unk_23C; // ??? some value to send to unk_000->unk_018 + /* 0x23E */ s16 mainState; + /* 0x240 */ s16 isSquashed; // on metapod + /* 0x242 */ s16 compState; + /* 0x244 */ s16 unk_244; // something metapod comp AI RNG + /* 0x246 */ char unk246[0x2]; // unused + /* 0x248 */ s16 unk_248; // animation something 0,1,2 + /* 0x24A */ s16 unk_24A; // animation id or state? + /* 0x24C */ s16 unk_24C; // texture animation ? + /* 0x24E */ char unk24E[0x6]; // unused + /* 0x254 */ s32 unk_254; // always zero + /* 0x258 */ s16 miniHealth; + /* 0x25A */ s16 damageTimer; // ** metapod only + /* 0x25C */ s16 miniMaxHealth; // 400 instead of 100 on metapod + /* 0x25E */ s16 ekansAbbleToHoop; // ** ekans only + /* 0x260 */ s16 midAirState; // mid air state, ekanses and falling rocks + /* 0x262 */ s16 ekansIsMidAir; // ekans is in mid air ** ekans only + /* 0x264 */ s16 unk_264; // always zero + /* 0x266 */ s16 collidingActorId; + /* 0x268 */ s16 collidingActorId_alt; // ** ekans only + /* 0x26A */ s16 unk_26A; // some flag related to collisions + /* 0x26C */ s16 unk_26C; // animation something + /* 0x26E */ s16 unk_26E; // animation something + /* 0x270 */ s16 unk_270; // ??? ** metapod only + /* 0x272 */ s16 unk_272; // colliding with a rock on metapod's minigame ? ; + /* 0x274 */ union{ + f32 unk_274; + f32 diggingSpeed; + f32 launchForce; + }; + /* 0x278 */ char unk278[0x4]; // unused + /* 0x27C */ f32 diggingAccel2; // + /* 0x280 */ union { + f32 unk_280; + f32 stickMagnitude1; + f32 diggingAccel1; + }; + /* 0x284 */ f32 stickMagnitude2; // launch forse on ekans + /* 0x288 */ f32 cubeRadio; // bottom of the hitbox / bounding box ? + /* 0x28C */ f32 halfHeight; + /* 0x290 */ s16 unk_290; // always zero + /* 0x292 */ s16 unk_292; // always zero + /* 0x294 */ s16 unk_294; // always zero /* 0x296 */ s16 unk_296; - /* 0x298 */ s16 unk_298; - /* 0x29A */ s16 unk_29A; - /* 0x29C */ s16 unk_29C; - /* 0x29E */ s16 unk_29E; - /* 0x2A0 */ s16 unk_2A0; - /* 0x2A2 */ s16 unk_2A2; + /* 0x298 */ s16 unk_298; // timer after bouncin on digletts on ekans + /* 0x29A */ union { + s16 unk_29A; + s16 sandshrewLastDir; + s16 ekansDiglettHitScore; + s16 metapodInputLockTimer; + }; + /* 0x29C */ s16 diglettIsGold; // ** diglett only + /* 0x29E */ s16 unk_29E; // something comp AI RNG maybe timer to launch + /* 0x2A0 */ union { + s16 unk_2A0; + s16 leftRightTimer; // on sandshrew, 20 to 0 + s16 leftRightCount; // on ekans + }; + /* 0x2A2 */ s16 ekansScore; // ** ekans only /* 0x2A4 */ s16 unk_2A4; - /* 0x2A6 */ s16 unk_2A6; - /* 0x2A8 */ s16 unk_2A8; + /* 0x2A6 */ s16 unk_2A6; // metapod state ? + /* 0x2A8 */ s16 isWinner; /* 0x2AA */ s16 unk_2AA; - /* 0x2AC */ s16 unk_2AC; - /* 0x2AE */ s16 unk_2AE; - /* 0x2B0 */ s16 unk_2B0; + /* 0x2AC */ s16 isComp; + /* 0x2AE */ s16 unk_2AE; // ??? ** metapod only + /* 0x2B0 */ s16 sandshrewFailChances; // 3,2,1,0 ** sandsrew only /* 0x2B2 */ s16 unk_2B2; -} unk_func_8790002C; // size = 0x2B4 +} MiniActor; // size = 0x2B4 // Possibly unk_D_86002F34_alt7, unk_D_86002F34_alt8, // unk_D_86002F34_alt9 or unk_D_86002F34_alt2 @@ -121,13 +138,13 @@ typedef struct unk_D_87903E10 { /* 0x04 */ unk_D_87903E00* unk_04; } unk_D_87903E10; // size = 0x8 -extern s16 D_87903DA0; -extern s16 D_87903DA4; +extern s16 minigameState; +extern s16 minigameInputLock; extern s16 D_87903DA8; extern s16 D_87903DAC; extern s16 D_87903DBC; extern s16 D_87903DC0; -extern s16 D_87903DC4; +extern s16 miniTutoScreenState; extern s16 D_87903DC8; extern s16 D_87903DCC; extern s16 D_87903DD0; @@ -137,21 +154,21 @@ extern unk_D_87903E10 D_87903E10; extern unk_D_87903E10 D_87903E28; extern unk_D_87903E10 D_87903E40; extern unk_D_87903E10 D_87903E58; -extern s16 D_87906040; +extern s16 miniInputLockTimer; extern s16 D_87906042; -extern s16 D_87906044; -extern s16 D_87906046; +extern s16 miniShowHUB; +extern s16 miniDifficulty; extern s16 D_87906048; extern s16 D_8790604A; -extern unk_D_86002F34_00C* D_87906050; +extern unk_D_86002F34_00C* D_87906050; // geo layout extern unk_D_86002F34_00C* D_87906054; -extern s16 D_87906060; -extern s16 D_87906062; -extern s16 D_87906064; -extern s16 D_87906066; -extern s16 D_87906068; -extern s16 D_8790606A; -extern Vec3s D_8790606C; +extern s16 miniCameraXRot; +extern s16 miniCameraYRot; +extern s16 miniCameraDistance; +extern s16 miniCameraFov; +extern s16 miniCameraNear; +extern s16 miniCameraFar; +extern Vec3s miniCameraCoords; extern s16 D_87906072; extern s16 D_87906076; extern s16 D_87906078; @@ -170,13 +187,13 @@ extern s16 D_879060A6; extern s16 D_879060A8; extern Vec3s D_879060AC; -extern s16 D_87903DB0; +extern s16 miniDebugMode; extern s16 D_87903DB8; -extern Controller* D_879060BC; +extern Controller* miniControllerPtr; extern s16 D_879060C0; -extern s16 D_879060C2; +extern s16 miniEkansCountdown; extern s8 D_879060C4[4]; -extern s16 D_879060C8; +extern s16 miniHudTransparency; extern s16 D_879060CA; extern Vec3f D_879060E0; @@ -184,34 +201,34 @@ extern Vec3f D_87906100; extern Vec3f D_87906110; ret_func_80004454 func_87900020(void); -void func_8790002C(unk_func_8790002C* arg0, unk_func_8790002C* arg1); -void func_87900070(unk_func_8790002C* arg0, unk_func_8790002C* arg1); -s32 func_879000C4(unk_func_8790002C* arg0, unk_func_8790002C* arg1); -s32 func_879001A4(unk_func_8790002C* arg0, unk_func_8790002C* arg1); -void func_879002B8(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3); -void func_879002FC(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4); -void func_87900344(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3); -s32 func_87900384(unk_func_8790002C* arg0); -void func_879003A0(unk_func_8790002C* arg0); +float MinigameGetVec3Distance_2d(MiniActor* arg0, MiniActor* arg1); +void MinigameGetVec3Distance_3d(MiniActor* arg0, MiniActor* arg1); +s32 func_879000C4(MiniActor* arg0, MiniActor* arg1); +s32 metapodRockCollisionCheck(MiniActor* arg0, MiniActor* arg1); +void miniChangeActorAnim(MiniActor* arg0, s16 arg1, s16 arg2, s16 arg3); +void miniChangeActorAnim_alt1(MiniActor* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4); +void miniChangeActorAnim_alt2(MiniActor* arg0, s16 arg1, s16 arg2, s16 arg3); +s32 miniPokeIsIdleCheck(MiniActor* arg0); +void func_879003A0(MiniActor* poke); void func_879004F8(unk_D_86002F58_004_000* arg0); void func_87900528(void); -void func_87900558(void); -void func_87900564(unk_func_8790002C* arg0); -void func_87900594(unk_func_8790002C* arg0); -void func_879005AC(unk_func_8790002C* arg0); -void func_879005C4(unk_func_8790002C* arg0); -void func_8790060C(unk_func_8790002C* arg0); -void func_87900770(unk_func_8790002C* arg0); -void func_87900808(unk_func_8790002C* arg0); +void hideMiniGameHUD(void); +void func_87900564(MiniActor* actor); +void minigameActorLocalOriginToZero(MiniActor* arg0); +void func_879005AC(MiniActor* arg0); +void miniEkansUpdatePos(MiniActor* ekans); +void miniActorAllToZero(MiniActor* actor); +void miniActorUpdateTransform(MiniActor* poke); +void func_87900808(MiniActor* arg0); void func_87900854(void); void func_87900920(void); void func_879009B4(void); void func_87900A50(void); -void func_87900B64(void); -s32 func_87900C5C(void); -void func_87900F44(void); -void func_879010A4(void); +void miniUpdateCamera(void); +s32 minigameDebuggModeControl(void); +void showDebuggCameraInfo(void); +void showDebuggJoystickInfo(void); void func_87901200(void); void func_87901620(void); @@ -252,11 +269,11 @@ void func_87903260(void); void func_87903294(void); void func_879032BC(s16 arg0); void func_87903358(s16 arg0, s16 arg1); -void func_879033FC(unk_func_8790002C* arg0); +void func_879033FC(MiniActor* arg0); void func_8790354C(void); void func_87903600(void); -void func_879036B4(unk_func_8790002C* arg0); +void func_879036B4(MiniActor* arg0); void func_8790370C(void); void func_879037D0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6); void func_87903838(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6); diff --git a/src/fragments/3/fragment3_1189B0.c b/src/fragments/3/fragment3_1189B0.c index b66708a..cec2df4 100644 --- a/src/fragments/3/fragment3_1189B0.c +++ b/src/fragments/3/fragment3_1189B0.c @@ -4,20 +4,20 @@ #include "src/18140.h" #include "src/1C720.h" #include "src/20330.h" -#include "src/3FB0.h" +// #include "src/3FB0.h" #include "src/controller.h" #include "src/fragments/2/fragment2.h" -s16 D_87903DA0 = 0; -s16 D_87903DA4 = 0; +s16 minigameState = 0; +s16 minigameInputLock = 0; s16 D_87903DA8 = 0; s16 D_87903DAC = 0; -s16 D_87903DB0 = 0; +s16 miniDebugMode = 0; s32 pad_D_87903DB4 = 0; s16 D_87903DB8 = 0; s16 D_87903DBC = 0; s16 D_87903DC0 = 0; -s16 D_87903DC4 = 0; +s16 miniTutoScreenState = 0; s16 D_87903DC8 = 0; s16 D_87903DCC = 0; s16 D_87903DD0 = 0; @@ -27,86 +27,89 @@ ret_func_80004454 func_87900020(void) { return func_87900020; } -void func_8790002C(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - sqrtf(SQ(arg1->unk_19C.x - arg0->unk_19C.x) + SQ(arg1->unk_19C.z - arg0->unk_19C.z)); +// func_8790002C +float MinigameGetVec3Distance_2d(MiniActor* arg0, MiniActor* arg1) { + return sqrtf(SQ(arg1->totalPos_alt.x - arg0->totalPos_alt.x) + SQ(arg1->totalPos_alt.z - arg0->totalPos_alt.z)); +} +// func_87900070 +void MinigameGetVec3Distance_3d(MiniActor* arg0, MiniActor* arg1) { + sqrtf(SQ(arg1->totalPos_alt.x - arg0->totalPos_alt.x) + SQ(arg1->totalPos_alt.y - arg0->totalPos_alt.y) + + SQ(arg1->totalPos_alt.z - arg0->totalPos_alt.z)); } -void func_87900070(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - sqrtf(SQ(arg1->unk_19C.x - arg0->unk_19C.x) + SQ(arg1->unk_19C.y - arg0->unk_19C.y) + - SQ(arg1->unk_19C.z - arg0->unk_19C.z)); +// unused, +s32 func_879000C4(MiniActor* arg0, MiniActor* arg1) { + f32 totalX = arg1->totalPos_alt.x - arg0->totalPos_alt.x; + f32 totalY = arg1->totalPos_alt.y - arg0->totalPos_alt.y; + f32 totalZ = arg1->totalPos_alt.z - arg0->totalPos_alt.z; + f32 totalTops = (arg0->cubeRadio * arg0->scale.y) + (arg1->cubeRadio * arg1->scale.y); + s32 ret = FALSE; + + if (totalX < 0.0f) { + totalX = -totalX; + } + + if (totalY < 0.0f) { + totalY = -totalY; + } + + if (totalZ < 0.0f) { + totalZ = -totalZ; + } + + if (totalTops < 0.0f) { + totalTops = -totalTops; + } + + if (CB(totalZ) < ((CB(totalTops) - CB(totalX)) - CB(totalY))) { + ret = TRUE; + } + + return ret; } -s32 func_879000C4(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - f32 var_fv0 = arg1->unk_19C.x - arg0->unk_19C.x; - f32 var_fv1 = arg1->unk_19C.y - arg0->unk_19C.y; - f32 var_fa0 = arg1->unk_19C.z - arg0->unk_19C.z; - f32 var_fa1 = (arg0->unk_288 * arg0->unk_16C.y) + (arg1->unk_288 * arg1->unk_16C.y); - s32 ret = 0; +s32 metapodRockCollisionCheck(MiniActor* fallingRock, MiniActor* metapod) { + f32 totalX; + f32 totalY; + f32 totalZ; + f32 var_fa1; + f32 var_fs0; + f32 tmp; + s32 ret; - if (var_fv0 < 0.0f) { - var_fv0 = -var_fv0; - } + totalX = metapod->totalPos_alt.x - fallingRock->totalPos_alt.x; + totalY = metapod->totalPos_alt.y - fallingRock->totalPos_alt.y; + totalZ = metapod->totalPos_alt.z - fallingRock->totalPos_alt.z; + ret = 0; - if (var_fv1 < 0.0f) { - var_fv1 = -var_fv1; - } + var_fa1 = (fallingRock->cubeRadio * fallingRock->scale.y) + (metapod->cubeRadio * metapod->scale.y); + var_fs0 = ((fallingRock->halfHeight * fallingRock->scale.y) + (metapod->halfHeight * metapod->scale.y)) / 2.0f; - if (var_fa0 < 0.0f) { - var_fa0 = -var_fa0; - } + totalX = ABS(totalX); + totalY = ABS(totalY); + totalZ = ABS(totalZ); + var_fa1 = ABS(var_fa1); + var_fs0 = ABS(var_fs0); + tmp = var_fs0 - totalY; - if (var_fa1 < 0.0f) { - var_fa1 = -var_fa1; - } - - if (CB(var_fa0) < ((CB(var_fa1) - CB(var_fv0)) - CB(var_fv1))) { + if ((SQ(totalZ) < (SQ(var_fa1) - SQ(totalX))) && (tmp > 0)) { ret = 1; } return ret; } -s32 func_879001A4(unk_func_8790002C* arg0, unk_func_8790002C* arg1) { - f32 var_fa0; - f32 var_fa1; - f32 var_fs0; - f32 var_fv0; - f32 var_fv1; - f32 tmp; - s32 var_v1; - - var_fv0 = arg1->unk_19C.x - arg0->unk_19C.x; - var_fv1 = arg1->unk_19C.y - arg0->unk_19C.y; - var_fa0 = arg1->unk_19C.z - arg0->unk_19C.z; - var_v1 = 0; - - var_fa1 = (arg0->unk_288 * arg0->unk_16C.y) + (arg1->unk_288 * arg1->unk_16C.y); - var_fs0 = ((arg0->unk_28C * arg0->unk_16C.y) + (arg1->unk_28C * arg1->unk_16C.y)) * 0.5f; - - var_fv0 = ABS(var_fv0); - var_fv1 = ABS(var_fv1); - var_fa0 = ABS(var_fa0); - var_fa1 = ABS(var_fa1); - var_fs0 = ABS(var_fs0); - tmp = var_fs0 - var_fv1; - - if ((SQ(var_fa0) < (SQ(var_fa1) - SQ(var_fv0))) && (tmp > 0)) { - var_v1 = 1; - } - - return var_v1; +void miniChangeActorAnim(MiniActor* poke, s16 anim, s16 arg2, s16 arg3) { + poke->unk_248 = 1; + poke->unk_24A = anim; + poke->unk_24C = arg2; + poke->unk_26A = arg3; + poke->unk_26C = 0; + poke->unk_26E = 0; } -void func_879002B8(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3) { - arg0->unk_248 = 1; - arg0->unk_24A = arg1; - arg0->unk_24C = arg2; - arg0->unk_26A = arg3; - arg0->unk_26C = 0; - arg0->unk_26E = 0; -} - -void func_879002FC(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) { +// unused +void miniChangeActorAnim_alt1(MiniActor* arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4) { arg0->unk_248 = 1; arg0->unk_24A = arg1; arg0->unk_24C = arg2; @@ -115,15 +118,15 @@ void func_879002FC(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3, s16 ar arg0->unk_26E = arg4; } -void func_87900344(unk_func_8790002C* arg0, s16 arg1, s16 arg2, s16 arg3) { - arg0->unk_248 = 1; - arg0->unk_24A = arg1; - arg0->unk_24C = arg2; - arg0->unk_26A = arg3; - arg0->unk_26C = 1; +void miniChangeActorAnim_alt2(MiniActor* diglett, s16 anim, s16 arg2, s16 arg3) { + diglett->unk_248 = 1; + diglett->unk_24A = anim; + diglett->unk_24C = arg2; + diglett->unk_26A = arg3; + diglett->unk_26C = 1; } -s32 func_87900384(unk_func_8790002C* arg0) { +s32 miniPokeIsIdleCheck(MiniActor* arg0) { s32 var_v1 = 0; if (arg0->unk_248 == 0) { @@ -132,42 +135,42 @@ s32 func_87900384(unk_func_8790002C* arg0) { return var_v1; } -void func_879003A0(unk_func_8790002C* arg0) { - switch (arg0->unk_248) { +void func_879003A0(MiniActor* poke) { + switch (poke->unk_248) { case 1: - func_8001BD04(&arg0->unk_000, arg0->unk_24A); - if (arg0->unk_26C != 0) { - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, -0x10000); - func_80017464(&arg0->unk_000, arg0->unk_000.unk_040.unk_04->unk_0A - 1); + func_8001BD04(&poke->unk_000, poke->unk_24A); + if (poke->unk_26C != 0) { + func_800173DC(&poke->unk_000, 0, poke->unk_000.unk_040.unk_04, -0x10000); + func_80017464(&poke->unk_000, poke->unk_000.unk_040.unk_04->unk_0A - 1); } else { - func_800173DC(&arg0->unk_000, 0, arg0->unk_000.unk_040.unk_04, 0x10000); - func_80017464(&arg0->unk_000, arg0->unk_26E); - func_80017788(&arg0->unk_000); - if (arg0->unk_24C != -1) { - func_8001BD9C(&arg0->unk_000, arg0->unk_24C); - func_80017804(&arg0->unk_000, arg0->unk_26E); + func_800173DC(&poke->unk_000, 0, poke->unk_000.unk_040.unk_04, 0x10000); + func_80017464(&poke->unk_000, poke->unk_26E); + func_80017788(&poke->unk_000); + if (poke->unk_24C != -1) { + func_8001BD9C(&poke->unk_000, poke->unk_24C); + func_80017804(&poke->unk_000, poke->unk_26E); } } - arg0->unk_248++; + poke->unk_248++; break; case 2: - if (arg0->unk_26C == 0) { - if (func_800174E4(&arg0->unk_000) != 0) { - arg0->unk_248++; + if (poke->unk_26C == 0) { + if (func_800174E4(&poke->unk_000) != 0) { + poke->unk_248++; } } else { - if (arg0->unk_000.unk_040.unk_08 == 0) { - arg0->unk_248++; + if (poke->unk_000.unk_040.unk_08 == 0) { + poke->unk_248++; } } break; case 3: - if (arg0->unk_26A != 0) { - func_8001BD04(&arg0->unk_000, 0); + if (poke->unk_26A != 0) { + func_8001BD04(&poke->unk_000, 0); } - arg0->unk_248 = 0; + poke->unk_248 = 0; break; } } @@ -179,137 +182,140 @@ void func_879004F8(unk_D_86002F58_004_000* arg0) { void func_87900528(void) { Cont_StartReadInputs(); Cont_ReadInputs(); - func_8001F730(); + func_8001F730(); // nothing } -void func_87900558(void) { - D_87906044 = 0; +void hideMiniGameHUD(void) { + miniShowHUB = 0; } -void func_87900564(unk_func_8790002C* arg0) { - arg0->unk_1C0.x = 0.0f; - arg0->unk_1A8.x = 0.0f; - arg0->unk_190.x = 0.0f; - arg0->unk_1C0.y = 0.0f; - arg0->unk_1A8.y = 0.0f; - arg0->unk_190.y = 0.0f; - arg0->unk_1C0.z = 0.0f; - arg0->unk_1A8.z = 0.0f; - arg0->unk_190.z = 0.0f; +void func_87900564(MiniActor* actor) { + actor->position_2.x = 0.0f; + actor->position_1.x = 0.0f; + actor->totalPos.x = 0.0f; + + actor->position_2.y = 0.0f; + actor->position_1.y = 0.0f; + actor->totalPos.y = 0.0f; + + actor->position_2.z = 0.0f; + actor->position_1.z = 0.0f; + actor->totalPos.z = 0.0f; } -void func_87900594(unk_func_8790002C* arg0) { - arg0->unk_1A8.x = 0.0f; - arg0->unk_1A8.y = 0.0f; - arg0->unk_1A8.z = 0.0f; +void minigameActorLocalOriginToZero(MiniActor* arg0) { + arg0->position_1.x = 0.0f; + arg0->position_1.y = 0.0f; + arg0->position_1.z = 0.0f; } -void func_879005AC(unk_func_8790002C* arg0) { - arg0->unk_1C0.x = 0.0f; - arg0->unk_1C0.y = 0.0f; - arg0->unk_1C0.z = 0.0f; +void func_879005AC(MiniActor* arg0) { + arg0->position_2.x = 0.0f; + arg0->position_2.y = 0.0f; + arg0->position_2.z = 0.0f; } -void func_879005C4(unk_func_8790002C* arg0) { - arg0->unk_1FC = arg0->unk_1FC - arg0->unk_210; - arg0->unk_1C0.x = arg0->unk_1C0.x + arg0->unk_1F8; - arg0->unk_1C0.y = arg0->unk_1C0.y + (arg0->unk_1FC - arg0->unk_210); - arg0->unk_1C0.z = arg0->unk_1C0.z + arg0->unk_200; +void miniEkansUpdatePos(MiniActor* ekans) { + ekans->ySpeed = ekans->ySpeed - ekans->antiAcceleration; + ekans->position_2.x = ekans->position_2.x + ekans->xSpeed; + ekans->position_2.y = ekans->position_2.y + (ekans->ySpeed - ekans->antiAcceleration); + ekans->position_2.z = ekans->position_2.z + ekans->zSpeed; } -void func_8790060C(unk_func_8790002C* arg0) { - arg0->unk_214.x = arg0->unk_214.y = arg0->unk_214.z = 0; - arg0->unk_21A = arg0->unk_21C = arg0->unk_21E = 0; - arg0->unk_220 = arg0->unk_222 = arg0->unk_224 = 0; - arg0->unk_226 = arg0->unk_228 = arg0->unk_22A = 0; - arg0->unk_22C = arg0->unk_22E = arg0->unk_230 = 0; - arg0->unk_232 = arg0->unk_234 = arg0->unk_236 = 0; - arg0->unk_23E = arg0->unk_240 = arg0->unk_242 = arg0->unk_248 = 0; +void miniActorAllToZero(MiniActor* actor) { + actor->totalRot.x = actor->totalRot.y = actor->totalRot.z = 0; + actor->xRot_1 = actor->yRot_1 = actor->zRot_1 = 0; + actor->unk_220 = actor->unk_222 = actor->unk_224 = 0; + actor->xRot_2 = actor->yRot_2 = actor->zRot_2 = 0; + actor->unk_22C = actor->ySpinSpeed = actor->unk_230 = 0; + actor->xRot_3 = actor->yRot_3 = actor->zRot_3 = 0; + actor->mainState = actor->isSquashed = actor->compState = actor->unk_248 = 0; - arg0->unk_254 = 0; - arg0->unk_272 = 0; - arg0->unk_238 = 0; - arg0->unk_25A = 0; - arg0->unk_2A8 = 0; - arg0->unk_2A4 = 0; - arg0->unk_2A2 = 0; - arg0->unk_29A = 0; - arg0->unk_2AA = 0; - arg0->unk_29C = 0; - arg0->unk_2A0 = 0; - arg0->unk_29E = 0; - arg0->unk_296 = 0; - arg0->unk_298 = 0; + actor->unk_254 = 0; + actor->unk_272 = 0; + actor->unk_238 = 0; + actor->damageTimer = 0; + actor->isWinner = 0; + actor->unk_2A4 = 0; + actor->ekansScore = 0; + actor->unk_29A = 0; + actor->unk_2AA = 0; + actor->diglettIsGold = 0; + actor->unk_2A0 = 0; + actor->unk_29E = 0; + actor->unk_296 = 0; + actor->unk_298 = 0; - arg0->unk_16C.x = arg0->unk_16C.y = arg0->unk_16C.z = 1.0f; - arg0->unk_190.x = arg0->unk_190.y = arg0->unk_190.z = 0.0f; - arg0->unk_1A8.x = arg0->unk_1A8.y = arg0->unk_1A8.z = 0.0f; + actor->scale.x = actor->scale.y = actor->scale.z = 1.0f; + actor->totalPos.x = actor->totalPos.y = actor->totalPos.z = 0.0f; + actor->position_1.x = actor->position_1.y = actor->position_1.z = 0.0f; - arg0->unk_1B4.z = 0.0f; - arg0->unk_1B4.y = 0.0f; - arg0->unk_1B4.x = 0.0f; - arg0->unk_1C0.x = arg0->unk_1C0.y = arg0->unk_1C0.z = 0.0f; + actor->closestDiglettPos.z = 0.0f; + actor->closestDiglettPos.y = 0.0f; + actor->closestDiglettPos.x = 0.0f; + actor->position_2.x = actor->position_2.y = actor->position_2.z = 0.0f; - arg0->unk_1D4 = 0.0f; - arg0->unk_1D0 = 0.0f; - arg0->unk_1CC = 0.0f; - arg0->unk_1E4 = 0.0f; - arg0->unk_210 = 0.0f; - arg0->unk_20C = 0.0f; - arg0->unk_208 = 0.0f; - arg0->unk_204 = 0.0f; - arg0->unk_200 = 0.0f; - arg0->unk_1FC = 0.0f; - arg0->unk_1F8 = 0.0f; - arg0->unk_1F4 = 0.0f; - arg0->unk_1F0 = 0.0f; - arg0->unk_1EC = 0.0f; - arg0->unk_284 = 0.0f; - arg0->unk_280 = 0.0f; - arg0->unk_27C = 0.0f; - arg0->unk_274 = 0.0f; + actor->dist2DiglettLevelZ = 0.0f; + actor->dist2DiglettLevelY = 0.0f; + actor->dist2DiglettLevelX = 0.0f; + actor->middleHeight = 0.0f; + actor->antiAcceleration = 0.0f; + actor->zAccel = 0.0f; + actor->yAccel = 0.0f; + actor->xAccel = 0.0f; + actor->zSpeed = 0.0f; + actor->ySpeed = 0.0f; + actor->xSpeed = 0.0f; + actor->unk_1F4 = 0.0f; + actor->unk_1F0 = 0.0f; + actor->unk_1EC = 0.0f; + actor->stickMagnitude2 = 0.0f; + actor->unk_280 = 0.0f; + actor->diggingAccel2 = 0.0f; + actor->unk_274 = 0.0f; - arg0->unk_260 = arg0->unk_262 = arg0->unk_264 = arg0->unk_266 = 0; - arg0->unk_290 = arg0->unk_292 = arg0->unk_294 = 0; + actor->midAirState = actor->ekansIsMidAir = actor->unk_264 = actor->collidingActorId = 0; + actor->unk_290 = actor->unk_292 = actor->unk_294 = 0; } -void func_87900770(unk_func_8790002C* arg0) { - arg0->unk_190.x = arg0->unk_19C.x = arg0->unk_1A8.x + arg0->unk_1C0.x; - arg0->unk_190.y = arg0->unk_19C.y = arg0->unk_1A8.y + arg0->unk_1C0.y; - arg0->unk_190.z = arg0->unk_19C.z = arg0->unk_1A8.z + arg0->unk_1C0.z; +void miniActorUpdateTransform(MiniActor* poke) { + poke->totalPos.x = poke->totalPos_alt.x = poke->position_1.x + poke->position_2.x; + poke->totalPos.y = poke->totalPos_alt.y = poke->position_1.y + poke->position_2.y; + poke->totalPos.z = poke->totalPos_alt.z = poke->position_1.z + poke->position_2.z; - arg0->unk_19C.y = arg0->unk_19C.y + arg0->unk_1E4; + poke->totalPos_alt.y = poke->totalPos_alt.y + poke->middleHeight; - arg0->unk_214.x = arg0->unk_21A + arg0->unk_226 + arg0->unk_232; - arg0->unk_214.y = arg0->unk_21C + arg0->unk_228 + arg0->unk_234; - arg0->unk_214.z = arg0->unk_21E + arg0->unk_22A + arg0->unk_236; + poke->totalRot.x = poke->xRot_1 + poke->xRot_2 + poke->xRot_3; + poke->totalRot.y = poke->yRot_1 + poke->yRot_2 + poke->yRot_3; + poke->totalRot.z = poke->zRot_1 + poke->zRot_2 + poke->zRot_3; } -void func_87900808(unk_func_8790002C* arg0) { - arg0->unk_000.unk_030.x = arg0->unk_16C.x; - arg0->unk_000.unk_030.y = arg0->unk_16C.y; - arg0->unk_000.unk_030.z = arg0->unk_16C.z; +// updates an object's collider ? +void func_87900808(MiniActor* arg0) { + arg0->unk_000.unk_030.x = arg0->scale.x; + arg0->unk_000.unk_030.y = arg0->scale.y; + arg0->unk_000.unk_030.z = arg0->scale.z; - arg0->unk_000.unk_024.x = arg0->unk_190.x; - arg0->unk_000.unk_024.y = arg0->unk_190.y; - arg0->unk_000.unk_024.z = arg0->unk_190.z; + arg0->unk_000.unk_024.x = arg0->totalPos.x; + arg0->unk_000.unk_024.y = arg0->totalPos.y; + arg0->unk_000.unk_024.z = arg0->totalPos.z; - arg0->unk_000.unk_01E.x = arg0->unk_214.x; - arg0->unk_000.unk_01E.y = arg0->unk_214.y; - arg0->unk_000.unk_01E.z = arg0->unk_214.z; + arg0->unk_000.unk_01E.x = arg0->totalRot.x; + arg0->unk_000.unk_01E.y = arg0->totalRot.y; + arg0->unk_000.unk_01E.z = arg0->totalRot.z; } void func_87900854(void) { s16* ptr = D_8780FA30; - D_87903DA4 = 0; + minigameInputLock = 0; D_87903DA8 = 0; D_87903DAC = 0; - D_87906040 = 0; + miniInputLockTimer = 0; D_87906048 = 0; D_8790604A = 0; D_87903DC0 = 0; - D_87903DC4 = 0; + miniTutoScreenState = 0; D_87903DC8 = 0; D_87903DCC = 0; D_87903DD0 = 0; @@ -323,29 +329,29 @@ void func_87900854(void) { D_879060C4[2] = ptr[2]; D_879060C4[3] = ptr[3]; - D_879060C8 = 0xFF; + miniHudTransparency = 0xFF; } void func_87900920(void) { - D_8790607C = D_87906064; - D_87906080 = D_87906066; + D_8790607C = miniCameraDistance; + D_87906080 = miniCameraFov; - D_87906088.x = D_8790606C.x; - D_87906088.y = D_8790606C.y; - D_87906088.z = D_8790606C.z; + D_87906088.x = miniCameraCoords.x; + D_87906088.y = miniCameraCoords.y; + D_87906088.z = miniCameraCoords.z; - D_87906076 = D_87906060; - D_87906078 = D_87906062; + D_87906076 = miniCameraXRot; + D_87906078 = miniCameraYRot; } void func_879009B4(void) { - D_87906064 = D_8790607C; - D_87906066 = D_87906080; + miniCameraDistance = D_8790607C; + miniCameraFov = D_87906080; - D_8790606C.x = D_87906088.x; - D_8790606C.y = D_87906088.y; - D_8790606C.z = D_87906088.z; + miniCameraCoords.x = D_87906088.x; + miniCameraCoords.y = D_87906088.y; + miniCameraCoords.z = D_87906088.z; - D_87906060 = D_87906076; - D_87906062 = D_87906078; + miniCameraXRot = D_87906076; + miniCameraYRot = D_87906078; } diff --git a/src/fragments/3/fragment3_1193E0.c b/src/fragments/3/fragment3_1193E0.c index 6d64c42..d716e92 100644 --- a/src/fragments/3/fragment3_1193E0.c +++ b/src/fragments/3/fragment3_1193E0.c @@ -3,23 +3,23 @@ #include "src/20470.h" #include "src/F420.h" -s16 D_87906040; +s16 miniInputLockTimer; s16 D_87906042; -s16 D_87906044; -s16 D_87906046; -s16 D_87906048; +s16 miniShowHUB; +s16 miniDifficulty; +s16 D_87906048; // unused? s16 D_8790604A; -s32 pad_D_8790604C; +s32 pad_D_8790604C; // unused? unk_D_86002F34_00C* D_87906050; unk_D_86002F34_00C* D_87906054; -s32 pad_D_87906058[2]; -s16 D_87906060; -s16 D_87906062; -s16 D_87906064; -s16 D_87906066; -s16 D_87906068; -s16 D_8790606A; -Vec3s D_8790606C; +s32 pad_D_87906058[2]; // unused? +s16 miniCameraXRot; +s16 miniCameraYRot; +s16 miniCameraDistance; +s16 miniCameraFov; +s16 miniCameraNear; +s16 miniCameraFar; +Vec3s miniCameraCoords; s16 D_87906072; s16 pad_D_87906074; s16 D_87906076; @@ -40,11 +40,11 @@ s16 D_879060A8; Vec3s D_879060AC; s32 pad_D_879060B4; s32 pad_D_879060B8; -Controller* D_879060BC; +Controller* miniControllerPtr; s16 D_879060C0; -s16 D_879060C2; +s16 miniEkansCountdown; s8 D_879060C4[4]; -s16 D_879060C8; +s16 miniHudTransparency; s16 D_879060CA; s32 pad_D_879060D0[4]; Vec3f D_879060E0; @@ -53,61 +53,61 @@ Vec3f D_87906100; Vec3f D_87906110; void func_87900A50(void) { - D_87906060 = D_879060A2 + D_87906094; - D_87906062 = D_879060A4 + D_87906096; + miniCameraXRot = D_879060A2 + D_87906094; + miniCameraYRot = D_879060A4 + D_87906096; - D_8790606C.x = D_879060AC.x + D_8790609C.x; - D_8790606C.y = D_879060AC.y + D_8790609C.y; - D_8790606C.z = D_879060AC.z + D_8790609C.z; + miniCameraCoords.x = D_879060AC.x + D_8790609C.x; + miniCameraCoords.y = D_879060AC.y + D_8790609C.y; + miniCameraCoords.z = D_879060AC.z + D_8790609C.z; - D_87906064 = D_879060A6 + D_87906098; - D_87906066 = D_879060A8 + D_8790609A; + miniCameraDistance = D_879060A6 + D_87906098; + miniCameraFov = D_879060A8 + D_8790609A; - if (D_87906064 < 0x32) { - D_87906064 = 0x32; - D_87906098 = D_87906064 - D_879060A6; + if (miniCameraDistance < 0x32) { + miniCameraDistance = 0x32; + D_87906098 = miniCameraDistance - D_879060A6; } - if (D_87906066 < 0xA) { - D_87906066 = 0xA; - D_8790609A = D_87906066 - D_879060A8; + if (miniCameraFov < 0xA) { + miniCameraFov = 0xA; + D_8790609A = miniCameraFov - D_879060A8; } } -void func_87900B64(void) { - D_87906054->unk_24.fovy = D_87906066; - D_87906054->unk_24.near = D_87906068; - D_87906054->unk_24.far = D_8790606A; +void miniUpdateCamera(void) { + D_87906054->unk_24.fovy = miniCameraFov; + D_87906054->unk_24.near = miniCameraNear; + D_87906054->unk_24.far = miniCameraFar; - D_87906054->unk_60.at.x = D_8790606C.x; - D_87906054->unk_60.at.y = D_8790606C.y; - D_87906054->unk_60.at.z = D_8790606C.z; + D_87906054->unk_60.at.x = miniCameraCoords.x; + D_87906054->unk_60.at.y = miniCameraCoords.y; + D_87906054->unk_60.at.z = miniCameraCoords.z; - func_80010354(&D_87906054->unk_60.at, &D_87906054->unk_60.eye, D_87906064, D_87906060, D_87906062); + func_80010354(&D_87906054->unk_60.at, &D_87906054->unk_60.eye, miniCameraDistance, miniCameraXRot, miniCameraYRot); } -s32 func_87900C5C(void) { +s32 minigameDebuggModeControl(void) { s16 sp6; - if (D_87903DB0 == 0) { + if (miniDebugMode == 0) { return; } - if (gPlayer1Controller->buttonPressed & 0x20) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_L)) { D_87903DB8++; if (D_87903DB8 == 1) { D_87903DB8 = 0; } } - if (gPlayer1Controller->buttonPressed & 0x10) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_R)) { D_87903DB8--; if (D_87903DB8 < 0) { D_87903DB8 = 0; } } - if (gPlayer1Controller->buttonPressed & 0x1000) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_START)) { D_8790609C.x = 0; D_8790609C.y = 0; D_8790609C.z = 0; @@ -119,29 +119,29 @@ s32 func_87900C5C(void) { } if (D_87903DB8 == 0) { - if (gPlayer1Controller->buttonDown & 0xCF00) { - if (gPlayer1Controller->buttonDown & 0x800) { - sp6 = D_87906062 + 0x8000; + if (BTN_IS_DOWN(gPlayer1Controller, 0xCF00)) { + if (BTN_IS_DOWN(gPlayer1Controller, BTN_DUP)) { + sp6 = miniCameraYRot + 0x8000; } - if (gPlayer1Controller->buttonDown & 0x400) { - sp6 = D_87906062; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_DDOWN)) { + sp6 = miniCameraYRot; } - if (gPlayer1Controller->buttonDown & 0x200) { - sp6 = D_87906062 + 0xC000; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_DLEFT)) { + sp6 = miniCameraYRot + 0xC000; } - if (gPlayer1Controller->buttonDown & 0x100) { - sp6 = D_87906062 + 0x4000; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_DRIGHT)) { + sp6 = miniCameraYRot + 0x4000; } - if (gPlayer1Controller->buttonDown & 0x8000) { - sp6 = D_87906062 + 0x8000; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_A)) { + sp6 = miniCameraYRot + 0x8000; } - if (gPlayer1Controller->buttonDown & 0x4000) { - sp6 = D_87906062; + if (BTN_IS_DOWN(gPlayer1Controller, BTN_B)) { + sp6 = miniCameraYRot; } D_8790609C.x += SINS(sp6) * 16.0f; @@ -151,25 +151,25 @@ s32 func_87900C5C(void) { D_87906096 += gPlayer1Controller->stickX * 4.0f; D_87906094 += gPlayer1Controller->stickY * 4.0f; - if (gPlayer1Controller->buttonDown & 8) { + if (BTN_IS_DOWN(gPlayer1Controller, BTN_CUP)) { D_8790609C.y += 4; } - if (gPlayer1Controller->buttonDown & 4) { + if (BTN_IS_DOWN(gPlayer1Controller, BTN_CDOWN)) { D_8790609C.y -= 4; } - if (gPlayer1Controller->buttonDown & 1) { + if (BTN_IS_DOWN(gPlayer1Controller, BTN_CRIGHT)) { D_87906098 += 0xA; } - if (gPlayer1Controller->buttonDown & 2) { + if (BTN_IS_DOWN(gPlayer1Controller, BTN_CLEFT)) { D_87906098 -= 0xA; } } } -void func_87900F44(void) { +void showDebuggCameraInfo(void) { u8 sp24[3] = { 0, 0, 30 }; // D_87903DE0 u8 sp20[3] = { 0, 0, 250 }; // D_87903DE4 @@ -182,16 +182,16 @@ void func_87900F44(void) { func_8001F1E8(0x19, 0x1C, "TRANSRATE"); } - func_8001F1E8(0x19, 0x28, "CAMERA X:%d", D_8790606C.x); - func_8001F1E8(0x19, 0x34, "CAMERA Y:%d", D_8790606C.y); - func_8001F1E8(0x19, 0x40, "CAMERA Z:%d", D_8790606C.z); - func_8001F1E8(0xA7, 0x28, "CAMERA D:%d", D_87906064); - func_8001F1E8(0xA7, 0x34, "CAMERA F:%d", D_87906066); - func_8001F1E8(0xA7, 0x40, "X:%04hX Y:%04hX", D_87906060, D_87906062); + func_8001F1E8(0x19, 0x28, "CAMERA X:%d", miniCameraCoords.x); + func_8001F1E8(0x19, 0x34, "CAMERA Y:%d", miniCameraCoords.y); + func_8001F1E8(0x19, 0x40, "CAMERA Z:%d", miniCameraCoords.z); + func_8001F1E8(0xA7, 0x28, "CAMERA D:%d", miniCameraDistance); + func_8001F1E8(0xA7, 0x34, "CAMERA F:%d", miniCameraFov); + func_8001F1E8(0xA7, 0x40, "X:%04hX Y:%04hX", miniCameraXRot, miniCameraYRot); func_8001F444(); } -void func_879010A4(void) { +void showDebuggJoystickInfo(void) { u8 sp2C[3] = { 0, 0, 30 }; // D_87903DE8 u8 sp28[3] = { 0, 0, 250 }; // D_87903DEC @@ -213,14 +213,14 @@ void func_87901200(void) { u8 sp30[3] = { 0, 0, 30 }; // D_87903DF0 u8 sp2C[3] = { 0, 0, 250 }; // D_87903DF4 - if (gPlayer1Controller->buttonPressed & 8) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CUP)) { D_879060CA--; if (D_879060CA < 0) { D_879060CA = 4; } } - if (gPlayer1Controller->buttonPressed & 4) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CDOWN)) { D_879060CA++; if (D_879060CA >= 5) { D_879060CA = 0; @@ -229,46 +229,46 @@ void func_87901200(void) { switch (D_879060CA) { case 0: - if (gPlayer1Controller->buttonPressed & 2) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CLEFT)) { D_87906100.x -= 0.1f; } - if (gPlayer1Controller->buttonPressed & 1) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CRIGHT)) { D_87906100.x += 0.1f; } break; case 1: - if (gPlayer1Controller->buttonPressed & 2) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CLEFT)) { D_87906100.y -= 0.1; } - if (gPlayer1Controller->buttonPressed & 1) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CRIGHT)) { D_87906100.y += 0.1; } break; case 2: - if (gPlayer1Controller->buttonPressed & 2) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CLEFT)) { D_879060E0.x -= 1.0; } - if (gPlayer1Controller->buttonPressed & 1) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CRIGHT)) { D_879060E0.x += 1.0; } break; case 3: - if (gPlayer1Controller->buttonPressed & 2) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CLEFT)) { D_879060E0.y -= 1.0; } - if (gPlayer1Controller->buttonPressed & 1) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CRIGHT)) { D_879060E0.y += 1.0; } break; case 4: - if (gPlayer1Controller->buttonPressed & 2) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CLEFT)) { D_87906110.y -= 0.02; } - if (gPlayer1Controller->buttonPressed & 1) { + if (BTN_IS_PRESSED(gPlayer1Controller, BTN_CRIGHT)) { D_87906110.y += 0.02; } break; diff --git a/src/fragments/3/fragment3_11BBF0.c b/src/fragments/3/fragment3_11BBF0.c index 90841fa..b991f86 100644 --- a/src/fragments/3/fragment3_11BBF0.c +++ b/src/fragments/3/fragment3_11BBF0.c @@ -309,15 +309,15 @@ u32 D_87905680[] = { }; void func_87903260(void) { - if (D_87903DC4 > 0) { - D_87903DCC = D_87903DC4; - D_87903DC4 = -2; + if (miniTutoScreenState > 0) { + D_87903DCC = miniTutoScreenState; + miniTutoScreenState = -2; D_87903DC0 = 1; } } void func_87903294(void) { - D_87903DC4 = -1; + miniTutoScreenState = -1; D_87903DC0 = 0; D_87903DCC = 0; D_87903DD0 = 0; @@ -343,7 +343,7 @@ void func_879032BC(s16 arg0) { void func_87903358(s16 arg0, s16 arg1) { switch (D_87903DC0) { case 1: - D_87903DD0 = arg0; + D_87903DD0 = arg0; // 0x11 D_87903DC8 = arg1; D_87903DC0++; break; @@ -357,7 +357,7 @@ void func_87903358(s16 arg0, s16 arg1) { } } -void func_879033FC(unk_func_8790002C* arg0) { +void func_879033FC(MiniActor* arg0) { s32 i; s16 temp_a2; s32 var_s2; @@ -369,9 +369,9 @@ void func_879033FC(unk_func_8790002C* arg0) { var_s2 = 0; for (i = 0; i < 4; i++) { - if (arg0[i].unk_2A8 != 0) { + if (arg0[i].isWinner != 0) { temp_a2 = D_87903E60[D_87903DD4][var_s2]; - if (arg0[i].unk_2AC != 0) { + if (arg0[i].isComp != 0) { func_87801644(-1 - i, 0x78, temp_a2, 1.0f); } else { func_87801644(i, 0x78, temp_a2, 1.0f); @@ -384,7 +384,7 @@ void func_879033FC(unk_func_8790002C* arg0) { } void func_8790354C(void) { - switch (D_87906046) { + switch (miniDifficulty) { case 0: func_8001F1E8(0xC8, 0x20, "(EASY)"); break; diff --git a/src/fragments/3/fragment3_11BF90.c b/src/fragments/3/fragment3_11BF90.c index 9d45184..46123bb 100644 --- a/src/fragments/3/fragment3_11BF90.c +++ b/src/fragments/3/fragment3_11BF90.c @@ -4,13 +4,13 @@ #include "src/12D80.h" #include "src/memory.h" -static unk_func_8790002C* D_87906120; +static MiniActor* D_87906120; void func_87903600(void) { s32 i; - unk_func_8790002C* ptr; + MiniActor* ptr; - D_87906120 = main_pool_alloc(sizeof(unk_func_8790002C) * 3, 0); + D_87906120 = main_pool_alloc(sizeof(MiniActor) * 3, 0); ptr = D_87906120; for (i = 0; i < 3; i++, ptr++) { @@ -19,64 +19,63 @@ void func_87903600(void) { func_8001BC34(&ptr->unk_000, 0, ptr->unk_23C, ptr->unk_168->unk_08->unk_00[0]); func_8001BD04(&ptr->unk_000, 0); ptr->unk_000.unk_000.unk_01 &= ~1; - func_8790060C(ptr); + miniActorAllToZero(ptr); } } -void func_879036B4(unk_func_8790002C* arg0) { - if (arg0->unk_23E == 1) { +void func_879036B4(MiniActor* arg0) { + if (arg0->mainState == 1) { arg0->unk_000.unk_000.unk_01 |= 1; - func_879002B8(arg0, 0, -1, 0); - arg0->unk_23E++; + miniChangeActorAnim(arg0, 0, -1, 0); + arg0->mainState++; } } void func_8790370C(void) { s32 i; - unk_func_8790002C* ptr = D_87906120; + MiniActor* ptr = D_87906120; func_8140C5D0(); for (i = 0; i < 3; i++, ptr++) { func_879036B4(ptr); func_879003A0(ptr); - func_87900770(ptr); + miniActorUpdateTransform(ptr); func_87900808(ptr); } } -void func_87903778(unk_func_8790002C* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s16 arg5, s16 arg6, s16 arg7, - s16 arg8) { - arg0->unk_16C.x = arg1; - arg0->unk_16C.y = arg1; - arg0->unk_16C.z = arg1; +void func_87903778(MiniActor* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s16 arg5, s16 arg6, s16 arg7, s16 arg8) { + arg0->scale.x = arg1; + arg0->scale.y = arg1; + arg0->scale.z = arg1; - arg0->unk_1A8.x = arg2; - arg0->unk_1A8.y = arg3; - arg0->unk_1A8.z = arg4; - arg0->unk_21A = arg5; - arg0->unk_21C = arg6; - arg0->unk_21E = arg7; - arg0->unk_266 = arg8; - arg0->unk_23E = 1; + arg0->position_1.x = arg2; + arg0->position_1.y = arg3; + arg0->position_1.z = arg4; + arg0->xRot_1 = arg5; + arg0->yRot_1 = arg6; + arg0->zRot_1 = arg7; + arg0->collidingActorId = arg8; + arg0->mainState = 1; } void func_879037D0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6) { - unk_func_8790002C* sp34 = D_87906120; + MiniActor* sp34 = D_87906120; func_87903778(sp34, arg0, arg1, arg2, arg3, arg4, arg5, arg6, 0); sp34->unk_000.unk_000.unk_14 = 0; } void func_87903838(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6) { - unk_func_8790002C* sp34 = &D_87906120[1]; + MiniActor* sp34 = &D_87906120[1]; func_87903778(sp34, arg0, arg1, arg2, arg3, arg4, arg5, arg6, 1); sp34->unk_000.unk_000.unk_14 = 1; } void func_879038AC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4, s16 arg5, s16 arg6) { - unk_func_8790002C* sp34 = &D_87906120[2]; + MiniActor* sp34 = &D_87906120[2]; func_87903778(sp34, arg0, arg1, arg2, arg3, arg4, arg5, arg6, 2); sp34->unk_000.unk_000.unk_14 = 2; @@ -94,18 +93,18 @@ Gfx* func_87903920(Gfx* arg0, arg1_func_87903D64_014* arg1) { unk_D_86002F34_000_014_010* sp20; s32 temp_a2; - s32 temp_t1; - s32 temp_t1_2; - s32 temp_t2; - s32 temp_t2_2; - s32 temp_t2_3; - s32 temp_t4; + UNUSED s32 temp_t1; + UNUSED s32 temp_t1_2; + UNUSED s32 temp_t2; + UNUSED s32 temp_t2_2; + UNUSED s32 temp_t2_3; + UNUSED s32 temp_t4; s32 var_a0; s32 var_v1; u32 temp_a3; u32 var_v0; - u8* temp_t1_3; - u8* temp_v1; + UNUSED u8* temp_t1_3; + UNUSED u8* temp_v1; unk_D_86002F34_000_014_004* var_a1; unk_D_86002F34_000_014_004* var_a2; unk_D_86002F34_000_014_010* var_a3;