From e6ad762487e98c1ff0bc7a412b84db07eec9ef8c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 10 Apr 2020 21:37:43 +1000 Subject: [PATCH] Decompile htEnd --- src/game/data/data_02da90.c | 6 +- src/game/game_19c990.c | 138 +++++-------------- src/include/game/data/data_02da90.h | 3 +- src/include/game/game_19c990.h | 6 +- src/include/game/padhalllv.h | 2 +- src/include/types.h | 202 +++++++++++++++++++++++++++- 6 files changed, 246 insertions(+), 111 deletions(-) diff --git a/src/game/data/data_02da90.c b/src/game/data/data_02da90.c index 4891343c3..7b5e1fcef 100644 --- a/src/game/data/data_02da90.c +++ b/src/game/data/data_02da90.c @@ -778,11 +778,9 @@ u32 device_tips2[] = { /*9*/ L_MISC(376), }; -u32 var80088bb4 = 0x00000000; +u8 var80088bb4 = 0; u8 var80088bb8 = 0; -u32 var80088bbc = 0x00160017; -u32 var80088bc0 = 0x00180019; -u32 var80088bc4 = 0xffff0000; +s16 g_HoloRooms[5] = { 0x0016, 0x0017, 0x0018, 0x0019, -1 }; u32 var80088bc8 = 0x0000599a; u32 var80088bcc = 0x0000599b; u32 var80088bd0 = 0x0000599c; diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 570ff3316..1d0998e34 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -6327,107 +6327,43 @@ glabel func0f1a2220 /* f1a22d0: 00000000 */ sll $zero,$zero,0x0 ); -GLOBAL_ASM( -glabel htEnd -/* f1a22d4: 27bdfda8 */ addiu $sp,$sp,-600 -/* f1a22d8: 3c0e8009 */ lui $t6,%hi(var80088bbc) -/* f1a22dc: afbf002c */ sw $ra,0x2c($sp) -/* f1a22e0: afb40028 */ sw $s4,0x28($sp) -/* f1a22e4: afb30024 */ sw $s3,0x24($sp) -/* f1a22e8: afb20020 */ sw $s2,0x20($sp) -/* f1a22ec: afb1001c */ sw $s1,0x1c($sp) -/* f1a22f0: afb00018 */ sw $s0,0x18($sp) -/* f1a22f4: 25ce8bbc */ addiu $t6,$t6,%lo(var80088bbc) -/* f1a22f8: 8dc10000 */ lw $at,0x0($t6) -/* f1a22fc: 27b20044 */ addiu $s2,$sp,0x44 -/* f1a2300: 3c02800b */ lui $v0,%hi(g_HoloTrainingData) -/* f1a2304: ae410000 */ sw $at,0x0($s2) -/* f1a2308: 8dd90004 */ lw $t9,0x4($t6) -/* f1a230c: 2442d1b0 */ addiu $v0,$v0,%lo(g_HoloTrainingData) -/* f1a2310: 90480000 */ lbu $t0,0x0($v0) -/* f1a2314: ae590004 */ sw $t9,0x4($s2) -/* f1a2318: 95c10008 */ lhu $at,0x8($t6) -/* f1a231c: 3c10800a */ lui $s0,%hi(g_StageSetup) -/* f1a2320: 3109ff7f */ andi $t1,$t0,0xff7f -/* f1a2324: a6410008 */ sh $at,0x8($s2) -/* f1a2328: 8e10d030 */ lw $s0,%lo(g_StageSetup)($s0) -/* f1a232c: a0490000 */ sb $t1,0x0($v0) -/* f1a2330: 00002025 */ or $a0,$zero,$zero -/* f1a2334: 0fc127cb */ jal chrSetStageFlag -/* f1a2338: 24050020 */ addiu $a1,$zero,0x20 -/* f1a233c: 00002025 */ or $a0,$zero,$zero -/* f1a2340: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a2344: 24050080 */ addiu $a1,$zero,0x80 -/* f1a2348: 3c048009 */ lui $a0,%hi(var80088bb4) -/* f1a234c: 0fc68937 */ jal func0f1a24dc -/* f1a2350: 90848bb4 */ lbu $a0,%lo(var80088bb4)($a0) -/* f1a2354: 0fc68970 */ jal func0f1a25c0 -/* f1a2358: 00402025 */ or $a0,$v0,$zero -/* f1a235c: 00002025 */ or $a0,$zero,$zero -/* f1a2360: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a2364: 00402825 */ or $a1,$v0,$zero -/* f1a2368: 26040200 */ addiu $a0,$s0,0x200 -/* f1a236c: 0fc4569e */ jal func0f115a78 -/* f1a2370: 26050310 */ addiu $a1,$s0,0x310 -/* f1a2374: 3c14800a */ lui $s4,%hi(g_Vars) -/* f1a2378: 26949fc0 */ addiu $s4,$s4,%lo(g_Vars) -/* f1a237c: 8e8a0284 */ lw $t2,0x284($s4) -/* f1a2380: 27b10050 */ addiu $s1,$sp,0x50 -/* f1a2384: 02202825 */ or $a1,$s1,$zero -/* f1a2388: 02402025 */ or $a0,$s2,$zero -/* f1a238c: 24060100 */ addiu $a2,$zero,0x100 -/* f1a2390: 0fc197e0 */ jal roomGetProps -/* f1a2394: ad401c08 */ sw $zero,0x1c08($t2) -/* f1a2398: 87ab0050 */ lh $t3,0x50($sp) -/* f1a239c: 02208025 */ or $s0,$s1,$zero -/* f1a23a0: 27ac0050 */ addiu $t4,$sp,0x50 -/* f1a23a4: 05600017 */ bltz $t3,.L0f1a2404 -/* f1a23a8: 24130008 */ addiu $s3,$zero,0x8 -/* f1a23ac: 85830000 */ lh $v1,0x0($t4) -/* f1a23b0: 24120004 */ addiu $s2,$zero,0x4 -/* f1a23b4: 24110048 */ addiu $s1,$zero,0x48 -.L0f1a23b8: -/* f1a23b8: 00710019 */ multu $v1,$s1 -/* f1a23bc: 8e980338 */ lw $t8,0x338($s4) -/* f1a23c0: 00006812 */ mflo $t5 -/* f1a23c4: 01b81021 */ addu $v0,$t5,$t8 -/* f1a23c8: 5040000b */ beqzl $v0,.L0f1a23f8 -/* f1a23cc: 86030002 */ lh $v1,0x2($s0) -/* f1a23d0: 904f0000 */ lbu $t7,0x0($v0) -/* f1a23d4: 564f0008 */ bnel $s2,$t7,.L0f1a23f8 -/* f1a23d8: 86030002 */ lh $v1,0x2($s0) -/* f1a23dc: 8c440004 */ lw $a0,0x4($v0) -/* f1a23e0: 908e0003 */ lbu $t6,0x3($a0) -/* f1a23e4: 566e0004 */ bnel $s3,$t6,.L0f1a23f8 -/* f1a23e8: 86030002 */ lh $v1,0x2($s0) -/* f1a23ec: 0fc1acd3 */ jal setupParseObjectWithArg2False -/* f1a23f0: 24050001 */ addiu $a1,$zero,0x1 -/* f1a23f4: 86030002 */ lh $v1,0x2($s0) -.L0f1a23f8: -/* f1a23f8: 26100002 */ addiu $s0,$s0,0x2 -/* f1a23fc: 0461ffee */ bgez $v1,.L0f1a23b8 -/* f1a2400: 00000000 */ sll $zero,$zero,0x0 -.L0f1a2404: -/* f1a2404: 0fc2a4ab */ jal playersSetPassiveMode -/* f1a2408: 24040001 */ addiu $a0,$zero,0x1 -/* f1a240c: 00002025 */ or $a0,$zero,$zero -/* f1a2410: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a2414: 24050001 */ addiu $a1,$zero,0x1 -/* f1a2418: 0fc2eda7 */ jal func0f0bb69c -/* f1a241c: 00000000 */ sll $zero,$zero,0x0 -/* f1a2420: 3c013f80 */ lui $at,0x3f80 -/* f1a2424: 44812000 */ mtc1 $at,$f4 -/* f1a2428: 8e990284 */ lw $t9,0x284($s4) -/* f1a242c: e72400dc */ swc1 $f4,0xdc($t9) -/* f1a2430: 8fbf002c */ lw $ra,0x2c($sp) -/* f1a2434: 8fb40028 */ lw $s4,0x28($sp) -/* f1a2438: 8fb30024 */ lw $s3,0x24($sp) -/* f1a243c: 8fb20020 */ lw $s2,0x20($sp) -/* f1a2440: 8fb1001c */ lw $s1,0x1c($sp) -/* f1a2444: 8fb00018 */ lw $s0,0x18($sp) -/* f1a2448: 03e00008 */ jr $ra -/* f1a244c: 27bd0258 */ addiu $sp,$sp,0x258 -); +void htEnd(void) +{ + struct prop *prop; + s16 *propnum; + s16 propnums[256]; + s16 rooms[5] = g_HoloRooms; + struct stagesetup00 *setup00 = g_StageSetup.unk00; + + g_HoloTrainingData.intraining = false; + chrSetStageFlag(NULL, STAGEFLAG_CI_HOLO_ABORTING); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_TRIGGER_HOLO_FAILURE); + chrUnsetStageFlag(NULL, func0f1a25c0(func0f1a24dc(var80088bb4))); + func0f115a78(&setup00->unk200, &setup00->unk310); + g_Vars.currentplayer->deadtimer = 0; + roomGetProps(rooms, propnums, 256); + propnum = &propnums[0]; + + // Remove dropped weapons + while (*propnum >= 0) { + prop = &g_Vars.props[*propnum]; + + if (prop && prop->type == PROPTYPE_WEAPON) { + struct defaultobj *obj = prop->obj; + + if (obj->type == OBJTYPE_WEAPON) { + setupParseObjectWithArg2False(obj, true); + } + } + + propnum++; + } + + playersSetPassiveMode(true); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_IN_TRAINING); + func0f0bb69c(); + g_Vars.currentplayer->bondhealth = 1; +} bool func0f1a2450(u32 value) { diff --git a/src/include/game/data/data_02da90.h b/src/include/game/data/data_02da90.h index 0b884a821..f996a3e32 100644 --- a/src/include/game/data/data_02da90.h +++ b/src/include/game/data/data_02da90.h @@ -39,8 +39,9 @@ extern u32 g_CiDeviceStageFlags[10]; extern u32 device_descriptions[]; extern u32 device_tips1[]; extern u32 device_tips2[]; +extern u8 var80088bb4; extern u8 var80088bb8; -extern u32 var80088bbc; +extern s16 g_HoloRooms[5]; extern u32 var80088bc8; extern u32 var80088be4; extern u32 var80088c04; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index d0411fdbd..267dc923c 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -94,12 +94,12 @@ void htPushEndscreen(void); void htTick(void); u32 func0f1a2198(void); u32 func0f1a2220(void); -u32 htEnd(void); +void htEnd(void); bool func0f1a2450(u32 value); u32 func0f1a2484(void); -u32 func0f1a24dc(void); +u32 func0f1a24dc(u32 arg0); u32 func0f1a2554(void); -u32 func0f1a25c0(void); +u32 func0f1a25c0(u32 arg0); u32 func0f1a2624(void); u32 func0f1a269c(void); u32 func0f1a2714(void); diff --git a/src/include/game/padhalllv.h b/src/include/game/padhalllv.h index d525a1600..c49aec435 100644 --- a/src/include/game/padhalllv.h +++ b/src/include/game/padhalllv.h @@ -25,6 +25,6 @@ u32 func0f1155e0(void); u32 func0f115784(void); u32 func0f11594c(void); u32 func0f115a48(void); -u32 func0f115a78(void); +void func0f115a78(u32 *arg0, u32 *arg1); #endif diff --git a/src/include/types.h b/src/include/types.h index e36368c82..8b0082c50 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -2326,6 +2326,206 @@ struct player { /*0x1c58*/ f32 unk1c58; }; +struct stagesetup00 { + /*0x000*/ u32 unk000; + /*0x004*/ u32 unk004; + /*0x008*/ u32 unk008; + /*0x00c*/ u32 unk00c; + /*0x010*/ u32 unk010; + /*0x014*/ u32 unk014; + /*0x018*/ u32 unk018; + /*0x01c*/ u32 unk01c; + /*0x020*/ u32 unk020; + /*0x024*/ u32 unk024; + /*0x028*/ u32 unk028; + /*0x02c*/ u32 unk02c; + /*0x030*/ u32 unk030; + /*0x034*/ u32 unk034; + /*0x038*/ u32 unk038; + /*0x03c*/ u32 unk03c; + /*0x040*/ u32 unk040; + /*0x044*/ u32 unk044; + /*0x048*/ u32 unk048; + /*0x04c*/ u32 unk04c; + /*0x050*/ u32 unk050; + /*0x054*/ u32 unk054; + /*0x058*/ u32 unk058; + /*0x05c*/ u32 unk05c; + /*0x060*/ u32 unk060; + /*0x064*/ u32 unk064; + /*0x068*/ u32 unk068; + /*0x06c*/ u32 unk06c; + /*0x070*/ u32 unk070; + /*0x074*/ u32 unk074; + /*0x078*/ u32 unk078; + /*0x07c*/ u32 unk07c; + /*0x080*/ u32 unk080; + /*0x084*/ u32 unk084; + /*0x088*/ u32 unk088; + /*0x08c*/ u32 unk08c; + /*0x090*/ u32 unk090; + /*0x094*/ u32 unk094; + /*0x098*/ u32 unk098; + /*0x09c*/ u32 unk09c; + /*0x0a0*/ u32 unk0a0; + /*0x0a4*/ u32 unk0a4; + /*0x0a8*/ u32 unk0a8; + /*0x0ac*/ u32 unk0ac; + /*0x0b0*/ u32 unk0b0; + /*0x0b4*/ u32 unk0b4; + /*0x0b8*/ u32 unk0b8; + /*0x0bc*/ u32 unk0bc; + /*0x0c0*/ u32 unk0c0; + /*0x0c4*/ u32 unk0c4; + /*0x0c8*/ u32 unk0c8; + /*0x0cc*/ u32 unk0cc; + /*0x0d0*/ u32 unk0d0; + /*0x0d4*/ u32 unk0d4; + /*0x0d8*/ u32 unk0d8; + /*0x0dc*/ u32 unk0dc; + /*0x0e0*/ u32 unk0e0; + /*0x0e4*/ u32 unk0e4; + /*0x0e8*/ u32 unk0e8; + /*0x0ec*/ u32 unk0ec; + /*0x0f0*/ u32 unk0f0; + /*0x0f4*/ u32 unk0f4; + /*0x0f8*/ u32 unk0f8; + /*0x0fc*/ u32 unk0fc; + /*0x100*/ u32 unk100; + /*0x104*/ u32 unk104; + /*0x108*/ u32 unk108; + /*0x10c*/ u32 unk10c; + /*0x110*/ u32 unk110; + /*0x114*/ u32 unk114; + /*0x118*/ u32 unk118; + /*0x11c*/ u32 unk11c; + /*0x120*/ u32 unk120; + /*0x124*/ u32 unk124; + /*0x128*/ u32 unk128; + /*0x12c*/ u32 unk12c; + /*0x130*/ u32 unk130; + /*0x134*/ u32 unk134; + /*0x138*/ u32 unk138; + /*0x13c*/ u32 unk13c; + /*0x140*/ u32 unk140; + /*0x144*/ u32 unk144; + /*0x148*/ u32 unk148; + /*0x14c*/ u32 unk14c; + /*0x150*/ u32 unk150; + /*0x154*/ u32 unk154; + /*0x158*/ u32 unk158; + /*0x15c*/ u32 unk15c; + /*0x160*/ u32 unk160; + /*0x164*/ u32 unk164; + /*0x168*/ u32 unk168; + /*0x16c*/ u32 unk16c; + /*0x170*/ u32 unk170; + /*0x174*/ u32 unk174; + /*0x178*/ u32 unk178; + /*0x17c*/ u32 unk17c; + /*0x180*/ u32 unk180; + /*0x184*/ u32 unk184; + /*0x188*/ u32 unk188; + /*0x18c*/ u32 unk18c; + /*0x190*/ u32 unk190; + /*0x194*/ u32 unk194; + /*0x198*/ u32 unk198; + /*0x19c*/ u32 unk19c; + /*0x1a0*/ u32 unk1a0; + /*0x1a4*/ u32 unk1a4; + /*0x1a8*/ u32 unk1a8; + /*0x1ac*/ u32 unk1ac; + /*0x1b0*/ u32 unk1b0; + /*0x1b4*/ u32 unk1b4; + /*0x1b8*/ u32 unk1b8; + /*0x1bc*/ u32 unk1bc; + /*0x1c0*/ u32 unk1c0; + /*0x1c4*/ u32 unk1c4; + /*0x1c8*/ u32 unk1c8; + /*0x1cc*/ u32 unk1cc; + /*0x1d0*/ u32 unk1d0; + /*0x1d4*/ u32 unk1d4; + /*0x1d8*/ u32 unk1d8; + /*0x1dc*/ u32 unk1dc; + /*0x1e0*/ u32 unk1e0; + /*0x1e4*/ u32 unk1e4; + /*0x1e8*/ u32 unk1e8; + /*0x1ec*/ u32 unk1ec; + /*0x1f0*/ u32 unk1f0; + /*0x1f4*/ u32 unk1f4; + /*0x1f8*/ u32 unk1f8; + /*0x1fc*/ u32 unk1fc; + /*0x200*/ u32 unk200; + /*0x204*/ u32 unk204; + /*0x208*/ u32 unk208; + /*0x20c*/ u32 unk20c; + /*0x210*/ u32 unk210; + /*0x214*/ u32 unk214; + /*0x218*/ u32 unk218; + /*0x21c*/ u32 unk21c; + /*0x220*/ u32 unk220; + /*0x224*/ u32 unk224; + /*0x228*/ u32 unk228; + /*0x22c*/ u32 unk22c; + /*0x230*/ u32 unk230; + /*0x234*/ u32 unk234; + /*0x238*/ u32 unk238; + /*0x23c*/ u32 unk23c; + /*0x240*/ u32 unk240; + /*0x244*/ u32 unk244; + /*0x248*/ u32 unk248; + /*0x24c*/ u32 unk24c; + /*0x250*/ u32 unk250; + /*0x254*/ u32 unk254; + /*0x258*/ u32 unk258; + /*0x25c*/ u32 unk25c; + /*0x260*/ u32 unk260; + /*0x264*/ u32 unk264; + /*0x268*/ u32 unk268; + /*0x26c*/ u32 unk26c; + /*0x270*/ u32 unk270; + /*0x274*/ u32 unk274; + /*0x278*/ u32 unk278; + /*0x27c*/ u32 unk27c; + /*0x280*/ u32 unk280; + /*0x284*/ u32 unk284; + /*0x288*/ u32 unk288; + /*0x28c*/ u32 unk28c; + /*0x290*/ u32 unk290; + /*0x294*/ u32 unk294; + /*0x298*/ u32 unk298; + /*0x29c*/ u32 unk29c; + /*0x2a0*/ u32 unk2a0; + /*0x2a4*/ u32 unk2a4; + /*0x2a8*/ u32 unk2a8; + /*0x2ac*/ u32 unk2ac; + /*0x2b0*/ u32 unk2b0; + /*0x2b4*/ u32 unk2b4; + /*0x2b8*/ u32 unk2b8; + /*0x2bc*/ u32 unk2bc; + /*0x2c0*/ u32 unk2c0; + /*0x2c4*/ u32 unk2c4; + /*0x2c8*/ u32 unk2c8; + /*0x2cc*/ u32 unk2cc; + /*0x2d0*/ u32 unk2d0; + /*0x2d4*/ u32 unk2d4; + /*0x2d8*/ u32 unk2d8; + /*0x2dc*/ u32 unk2dc; + /*0x2e0*/ u32 unk2e0; + /*0x2e4*/ u32 unk2e4; + /*0x2e8*/ u32 unk2e8; + /*0x2ec*/ u32 unk2ec; + /*0x2f0*/ u32 unk2f0; + /*0x2f4*/ u32 unk2f4; + /*0x2f8*/ u32 unk2f8; + /*0x2fc*/ u32 unk2fc; + /*0x300*/ u32 unk300; + /*0x304*/ u32 unk304; + /*0x308*/ u32 unk308; + /*0x30c*/ u32 unk30c; + /*0x310*/ u32 unk310; +}; + struct ailist { u8 *list; s32 id; @@ -2352,7 +2552,7 @@ struct cover { }; struct stagesetup { - /*0x00*/ void *unk00; + /*0x00*/ struct stagesetup00 *unk00; /*0x04*/ void *unk04; /*0x08*/ struct coverdefinition *cover; /*0x0c*/ s32 *intro;