From 96a5c2981cdfcab7ba608684315819b758f94b95 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 29 May 2021 12:56:27 +1000 Subject: [PATCH] Decompile gasReleaseFromPos --- src/game/game_00c490.c | 14 +++--- src/game/game_015010.c | 2 +- src/game/game_091e10.c | 8 ++-- src/game/game_190260.c | 2 +- src/game/propobj.c | 91 ++++++++++++++------------------------ src/include/constants.h | 2 +- src/include/data.h | 4 +- src/include/game/propobj.h | 2 +- src/include/props.h | 3 ++ 9 files changed, 54 insertions(+), 74 deletions(-) diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 16bd8378d..c6883d167 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -208,10 +208,10 @@ void setupInit(void) g_AlarmSpeakerWeight = 64; var800698e4 = 0; - var800698e8 = 0; - var800698ec[0] = 0; - var800698ec[1] = 0; - var800698ec[2] = 0; + g_GasReleased = false; + g_GasPos.x = 0; + g_GasPos.y = 0; + g_GasPos.z = 0; var800698f8 = 0; var800698fc = 0; var80069900 = 0; @@ -2823,7 +2823,7 @@ void setupLoadFiles(s32 stagenum) total += setupCountCommandType(OBJTYPE_TINTEDGLASS); total += setupCountCommandType(OBJTYPE_SAFE); total += setupCountCommandType(OBJTYPE_29); - total += setupCountCommandType(OBJTYPE_24); + total += setupCountCommandType(OBJTYPE_GASBOTTLE); total += setupCountCommandType(OBJTYPE_ALARM); total += setupCountCommandType(OBJTYPE_AMMOCRATE); total += setupCountCommandType(OBJTYPE_MULTIAMMOCRATE); @@ -3182,7 +3182,7 @@ void setupParseObjects(s32 stagenum) case OBJTYPE_ALARM: case OBJTYPE_AMMOCRATE: case OBJTYPE_DEBRIS: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_29: case OBJTYPE_SAFE: if (withobjs && (obj->flags2 & diffflag) == 0) { @@ -3496,7 +3496,7 @@ void setupParseObjects(s32 stagenum) case OBJTYPE_DEBRIS: case OBJTYPE_MULTIAMMOCRATE: case OBJTYPE_SHIELD: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_29: case OBJTYPE_GLASS: case OBJTYPE_SAFE: diff --git a/src/game/game_015010.c b/src/game/game_015010.c index a1fd7cd45..e5c2aee4e 100644 --- a/src/game/game_015010.c +++ b/src/game/game_015010.c @@ -28,7 +28,7 @@ void func0f015010(void) case OBJTYPE_HAT: case OBJTYPE_MULTIAMMOCRATE: case OBJTYPE_SHIELD: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_TRUCK: case OBJTYPE_HELI: case OBJTYPE_29: diff --git a/src/game/game_091e10.c b/src/game/game_091e10.c index 1e65265e6..fe1110c2e 100644 --- a/src/game/game_091e10.c +++ b/src/game/game_091e10.c @@ -30,10 +30,10 @@ u32 setupGetCommandLength(u32 *cmd) case OBJTYPE_GLASS: return 24; case OBJTYPE_TINTEDGLASS: return 26; case OBJTYPE_SAFE: return 23; - case OBJTYPE_24: return 23; + case OBJTYPE_GASBOTTLE: return 23; case OBJTYPE_KEY: return 24; case OBJTYPE_ALARM: return 23; - case OBJTYPE_CCTV: return 49; + case OBJTYPE_CCTV: return 49; case OBJTYPE_AMMOCRATE: return 24; case OBJTYPE_WEAPON: return 26; case OBJTYPE_SINGLEMONITOR: return 53; @@ -66,7 +66,7 @@ u32 setupGetCommandLength(u32 *cmd) case OBJTYPE_TRUCK: return 34; case OBJTYPE_HELI: return 35; case OBJTYPE_TANK: return 32; - case OBJTYPE_CAMERAPOS: return 7; + case OBJTYPE_CAMERAPOS: return 7; case OBJTYPE_LIFT: return 37; case OBJTYPE_CONDITIONALSCENERY: return 5; case OBJTYPE_BLOCKEDPATH: return 4; @@ -328,7 +328,7 @@ struct defaultobj *setupCommandGetObject(u32 cmdindex) case OBJTYPE_HAT: case OBJTYPE_MULTIAMMOCRATE: case OBJTYPE_SHIELD: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_TRUCK: case OBJTYPE_HELI: case OBJTYPE_29: diff --git a/src/game/game_190260.c b/src/game/game_190260.c index ad766af4e..33452e590 100644 --- a/src/game/game_190260.c +++ b/src/game/game_190260.c @@ -1111,7 +1111,7 @@ u32 propobjHandlePickupByAibot(struct prop *prop, struct chrdata *chr) case OBJTYPE_TAG: case OBJTYPE_22: case OBJTYPE_BRIEFING: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_RENAMEOBJ: case OBJTYPE_PADLOCKEDDOOR: case OBJTYPE_TRUCK: diff --git a/src/game/propobj.c b/src/game/propobj.c index ddae6b850..691889ae4 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -105,7 +105,7 @@ const char var7f1a9fd4[] = "kkd"; const char var7f1a9fd8[] = "kkp"; struct weaponobj *g_Proxies[30]; -u32 var8009ce38; +f32 var8009ce38; u32 var8009ce3c; s32 var8009ce40; s32 var8009ce44; @@ -126,8 +126,8 @@ struct audiohandle *g_AlarmAudioHandle = NULL; f32 g_AlarmSpeakerWeight = 64; f32 g_AlarmSpeakerDirection = 1; f32 var800698e4 = 0; -s32 var800698e8 = 0; -f32 var800698ec[3] = {0}; +bool g_GasReleased = false; +struct coord g_GasPos = {0}; u32 var800698f8 = 0x00000000; f32 var800698fc = 0; struct audiohandle *var80069900 = NULL; @@ -57496,7 +57496,7 @@ bool func0f085158(struct defaultobj *obj) case OBJTYPE_HANGINGMONITORS: case OBJTYPE_AUTOGUN: case OBJTYPE_DEBRIS: - case OBJTYPE_24: + case OBJTYPE_GASBOTTLE: case OBJTYPE_29: case OBJTYPE_GLASS: case OBJTYPE_SAFE: @@ -57587,7 +57587,7 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon obj->hidden |= (playernum << 28) & 0xf0000000; #endif - if (obj->type == OBJTYPE_24 && func0f0687b8(obj) == 1) { + if (obj->type == OBJTYPE_GASBOTTLE && func0f0687b8(obj) == 1) { return; } @@ -57787,9 +57787,9 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon tvscreenSetCmdlist(&monitor->screens[2], g_TvCmdlist14); tvscreenSetCmdlist(&monitor->screens[3], g_TvCmdlist14); } - } else if (obj->type == OBJTYPE_24) { + } else if (obj->type == OBJTYPE_GASBOTTLE) { if (func0f0687b8(obj) == 1) { - func0f09044c(&obj->prop->pos); + gasReleaseFromPos(&obj->prop->pos); } } else if (obj->type == OBJTYPE_SHIELD) { struct shieldobj *shield = (struct shieldobj *) obj; @@ -70573,48 +70573,25 @@ bool alarmIsActive(void) return g_AlarmTimer > 0; } -GLOBAL_ASM( -glabel func0f09044c -/* f09044c: 44802000 */ mtc1 $zero,$f4 -/* f090450: 240e0001 */ addiu $t6,$zero,0x1 -/* f090454: 3c018007 */ lui $at,%hi(var800698e8) -/* f090458: ac2e98e8 */ sw $t6,%lo(var800698e8)($at) -/* f09045c: 27bdffe8 */ addiu $sp,$sp,-24 -/* f090460: 3c018007 */ lui $at,%hi(var800698fc) -/* f090464: afbf0014 */ sw $ra,0x14($sp) -/* f090468: e42498fc */ swc1 $f4,%lo(var800698fc)($at) -/* f09046c: c4860000 */ lwc1 $f6,0x0($a0) -/* f090470: 3c028007 */ lui $v0,%hi(var800698ec) -/* f090474: 244298ec */ addiu $v0,$v0,%lo(var800698ec) -/* f090478: e4460000 */ swc1 $f6,0x0($v0) -/* f09047c: c4880004 */ lwc1 $f8,0x4($a0) -/* f090480: e4480004 */ swc1 $f8,0x4($v0) -/* f090484: c48a0008 */ lwc1 $f10,0x8($a0) -/* f090488: 0c003a61 */ jal mainGetStageNum -/* f09048c: e44a0008 */ swc1 $f10,0x8($v0) -/* f090490: 24010020 */ addiu $at,$zero,0x20 -/* f090494: 14410007 */ bne $v0,$at,.L0f0904b4 -/* f090498: 3c0142f0 */ lui $at,0x42f0 -/* f09049c: 44818000 */ mtc1 $at,$f16 -/* f0904a0: 3c01800a */ lui $at,%hi(var8009ce38) -/* f0904a4: e430ce38 */ swc1 $f16,%lo(var8009ce38)($at) -/* f0904a8: 3c01800a */ lui $at,%hi(var8009ce3c) -/* f0904ac: 10000008 */ b .L0f0904d0 -/* f0904b0: ac20ce3c */ sw $zero,%lo(var8009ce3c)($at) -.L0f0904b4: -/* f0904b4: 3c014561 */ lui $at,0x4561 -/* f0904b8: 44819000 */ mtc1 $at,$f18 -/* f0904bc: 3c01800a */ lui $at,%hi(var8009ce38) -/* f0904c0: 240f0001 */ addiu $t7,$zero,0x1 -/* f0904c4: e432ce38 */ swc1 $f18,%lo(var8009ce38)($at) -/* f0904c8: 3c01800a */ lui $at,%hi(var8009ce3c) -/* f0904cc: ac2fce3c */ sw $t7,%lo(var8009ce3c)($at) -.L0f0904d0: -/* f0904d0: 8fbf0014 */ lw $ra,0x14($sp) -/* f0904d4: 27bd0018 */ addiu $sp,$sp,0x18 -/* f0904d8: 03e00008 */ jr $ra -/* f0904dc: 00000000 */ nop -); +void gasReleaseFromPos(struct coord *pos) +{ + g_GasReleased = true; + var800698fc = 0; + + g_GasPos.x = pos->x; + g_GasPos.y = pos->y; + g_GasPos.z = pos->z; + + // Gas objects don't exist in PD, so this stage number might have carried + // over from GoldenEye. + if (mainGetStageNum() == STAGE_MP_G5BUILDING) { + var8009ce38 = 120; + var8009ce3c = false; + } else { + var8009ce38 = 3600; + var8009ce3c = true; + } +} void func0f0904e0(void) { @@ -70635,8 +70612,8 @@ glabel func0f09054c glabel var7f1ab19c .word 0x453b8000 .text -/* f09054c: 3c028007 */ lui $v0,%hi(var800698e8) -/* f090550: 244298e8 */ addiu $v0,$v0,%lo(var800698e8) +/* f09054c: 3c028007 */ lui $v0,%hi(g_GasReleased) +/* f090550: 244298e8 */ addiu $v0,$v0,%lo(g_GasReleased) /* f090554: 8c4e0000 */ lw $t6,0x0($v0) /* f090558: 27bdffb0 */ addiu $sp,$sp,-80 /* f09055c: 44808000 */ mtc1 $zero,$f16 @@ -70779,8 +70756,8 @@ glabel var7f1ab19c .L0f090774: /* f090774: 3c048007 */ lui $a0,%hi(var80069900) /* f090778: 8c849900 */ lw $a0,%lo(var80069900)($a0) -/* f09077c: 3c058007 */ lui $a1,%hi(var800698ec) -/* f090780: 24a598ec */ addiu $a1,$a1,%lo(var800698ec) +/* f09077c: 3c058007 */ lui $a1,%hi(g_GasPos) +/* f090780: 24a598ec */ addiu $a1,$a1,%lo(g_GasPos) /* f090784: 1080001c */ beqz $a0,.L0f0907f8 /* f090788: 3c0643c8 */ lui $a2,0x43c8 /* f09078c: 3c017f1b */ lui $at,%hi(var7f1ab19c) @@ -70825,8 +70802,8 @@ glabel func0f09054c glabel var7f1ab19c .word 0x453b8000 .text -/* f09054c: 3c028007 */ lui $v0,%hi(var800698e8) -/* f090550: 244298e8 */ addiu $v0,$v0,%lo(var800698e8) +/* f09054c: 3c028007 */ lui $v0,%hi(g_GasReleased) +/* f090550: 244298e8 */ addiu $v0,$v0,%lo(g_GasReleased) /* f090554: 8c4e0000 */ lw $t6,0x0($v0) /* f090558: 27bdffb0 */ addiu $sp,$sp,-80 /* f09055c: 44808000 */ mtc1 $zero,$f16 @@ -70969,8 +70946,8 @@ glabel var7f1ab19c .L0f090774: /* f090774: 3c048007 */ lui $a0,%hi(var80069900) /* f090778: 8c849900 */ lw $a0,%lo(var80069900)($a0) -/* f09077c: 3c058007 */ lui $a1,%hi(var800698ec) -/* f090780: 24a598ec */ addiu $a1,$a1,%lo(var800698ec) +/* f09077c: 3c058007 */ lui $a1,%hi(g_GasPos) +/* f090780: 24a598ec */ addiu $a1,$a1,%lo(g_GasPos) /* f090784: 1080001c */ beqz $a0,.L0f0907f8 /* f090788: 3c0643c8 */ lui $a2,0x43c8 /* f09078c: 3c017f1b */ lui $at,%hi(var7f1ab19c) diff --git a/src/include/constants.h b/src/include/constants.h index f8360e8f9..b42982e54 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -3013,7 +3013,7 @@ #define OBJECTIVETYPE_ATTACHOBJ 0x21 #define OBJTYPE_22 0x22 #define OBJTYPE_BRIEFING 0x23 -#define OBJTYPE_24 0x24 +#define OBJTYPE_GASBOTTLE 0x24 #define OBJTYPE_RENAMEOBJ 0x25 #define OBJTYPE_PADLOCKEDDOOR 0x26 #define OBJTYPE_TRUCK 0x27 diff --git a/src/include/data.h b/src/include/data.h index 1c06038b0..e196fb716 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -227,8 +227,8 @@ extern s32 g_AlarmTimer; extern struct audiohandle *g_AlarmAudioHandle; extern f32 g_AlarmSpeakerWeight; extern f32 var800698e4; -extern s32 var800698e8; -extern f32 var800698ec[3]; +extern bool g_GasReleased; +extern struct coord g_GasPos; extern u32 var800698f8; extern f32 var800698fc; extern struct audiohandle *var80069900; diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 592e3d34f..99424b7eb 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -340,7 +340,7 @@ bool posIsInFrontOfDoor(struct coord *pos, struct doorobj *door); void doorsChooseSwingDirection(struct prop *chrprop, struct doorobj *door); bool propdoorInteract(struct prop *doorprop); void alarmStopAudio(void); -void func0f09044c(struct coord *pos); +void gasReleaseFromPos(struct coord *pos); void func0f0904e0(void); bool func0f090520(void); void func0f09054c(void); diff --git a/src/include/props.h b/src/include/props.h index e68beb9cf..649162916 100644 --- a/src/include/props.h +++ b/src/include/props.h @@ -127,6 +127,9 @@ #define briefing(value, text) \ 0x23, value, text, 0, +#define gasbottle(scale, model, pad, flags, flags2, flags3, maxdamage) \ + _generic_object(0x24, scale, model, pad, flags, flags2, flags3, maxdamage), + #define rename_object(objoffset, weapon, text, text2, text3, text4, text5) \ 0x25, objoffset, weapon, text, text2, text3, text4, text5, 0, 0,