From 85cd1a1103047f2bf36974957caae82d60959d9a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Thu, 25 Jun 2020 08:29:02 +1000 Subject: [PATCH] Decompile func0f07e474 --- src/game/chr/chraicommands.c | 1 - src/game/game_091e10.c | 2 +- src/game/propobj.c | 314 +++++++++++---------------------- src/include/constants.h | 2 + src/include/game/game_091e10.h | 2 +- src/include/game/game_0abe70.h | 2 +- src/include/game/propobj.h | 8 +- src/include/types.h | 40 +++-- 8 files changed, 139 insertions(+), 232 deletions(-) diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 49c63f5e8..3544106a6 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -5052,7 +5052,6 @@ bool ai00d4(void) bool aiHovercarBeginPath(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - struct path *path = pathFindById(cmd[2]); if (g_Vars.truck) { diff --git a/src/game/game_091e10.c b/src/game/game_091e10.c index 96db817c6..330c7998e 100644 --- a/src/game/game_091e10.c +++ b/src/game/game_091e10.c @@ -147,7 +147,7 @@ s32 tagGetCommandIndex(struct tag *tag) } GLOBAL_ASM( -glabel func0f092124 +glabel setupGetCommandOffset /* f092124: 27bdffd8 */ addiu $sp,$sp,-40 /* f092128: afb00014 */ sw $s0,0x14($sp) /* f09212c: 3c10800a */ lui $s0,%hi(g_StageSetup+0x10) diff --git a/src/game/propobj.c b/src/game/propobj.c index 3b3cfb9ea..309629aec 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -20524,7 +20524,7 @@ glabel var7f1aa454 ); GLOBAL_ASM( -glabel func0f077c10 +glabel liftTick /* f077c10: 27bdfcc0 */ addiu $sp,$sp,-832 /* f077c14: afbf0024 */ sw $ra,0x24($sp) /* f077c18: afb10020 */ sw $s1,0x20($sp) @@ -20834,7 +20834,7 @@ glabel func0f077c10 ); GLOBAL_ASM( -glabel func0f078094 +glabel escalatorTick /* f078094: 27bdfda0 */ addiu $sp,$sp,-608 /* f078098: afbf001c */ sw $ra,0x1c($sp) /* f07809c: afb00018 */ sw $s0,0x18($sp) @@ -27886,218 +27886,114 @@ glabel func0f07e2cc ); GLOBAL_ASM( -glabel func0f07e468 +glabel propCanRegen /* f07e468: afa40000 */ sw $a0,0x0($sp) /* f07e46c: 03e00008 */ jr $ra /* f07e470: 24020001 */ addiu $v0,$zero,0x1 ); -GLOBAL_ASM( -glabel func0f07e474 -/* f07e474: 27bdff98 */ addiu $sp,$sp,-104 -/* f07e478: afbf004c */ sw $ra,0x4c($sp) -/* f07e47c: afb10048 */ sw $s1,0x48($sp) -/* f07e480: afb00044 */ sw $s0,0x44($sp) -/* f07e484: 8c900004 */ lw $s0,0x4($a0) -/* f07e488: afa00060 */ sw $zero,0x60($sp) -/* f07e48c: 84820002 */ lh $v0,0x2($a0) -/* f07e490: 00808825 */ or $s1,$a0,$zero -/* f07e494: 3c0e800a */ lui $t6,%hi(g_Vars+0x38) -/* f07e498: 18400088 */ blez $v0,.L0f07e6bc -/* f07e49c: 2841003c */ slti $at,$v0,0x3c -/* f07e4a0: 14200002 */ bnez $at,.L0f07e4ac -/* f07e4a4: 24030001 */ addiu $v1,$zero,0x1 -/* f07e4a8: 00001825 */ or $v1,$zero,$zero -.L0f07e4ac: -/* f07e4ac: 8dce9ff8 */ lw $t6,%lo(g_Vars+0x38)($t6) -/* f07e4b0: 004e7823 */ subu $t7,$v0,$t6 -/* f07e4b4: a62f0002 */ sh $t7,0x2($s1) -/* f07e4b8: 86380002 */ lh $t8,0x2($s1) -/* f07e4bc: 2b01003c */ slti $at,$t8,0x3c -/* f07e4c0: 5020000b */ beqzl $at,.L0f07e4f0 -/* f07e4c4: 86220002 */ lh $v0,0x2($s1) -/* f07e4c8: 14600008 */ bnez $v1,.L0f07e4ec -/* f07e4cc: 02202025 */ or $a0,$s1,$zero -/* f07e4d0: 0fc1f91a */ jal func0f07e468 -/* f07e4d4: afa3005c */ sw $v1,0x5c($sp) -/* f07e4d8: 14400004 */ bnez $v0,.L0f07e4ec -/* f07e4dc: 8fa3005c */ lw $v1,0x5c($sp) -/* f07e4e0: 86390002 */ lh $t9,0x2($s1) -/* f07e4e4: 2728003c */ addiu $t0,$t9,0x3c -/* f07e4e8: a6280002 */ sh $t0,0x2($s1) -.L0f07e4ec: -/* f07e4ec: 86220002 */ lh $v0,0x2($s1) -.L0f07e4f0: -/* f07e4f0: 1c40000f */ bgtz $v0,.L0f07e530 -/* f07e4f4: 2841003c */ slti $at,$v0,0x3c -/* f07e4f8: a6200002 */ sh $zero,0x2($s1) -/* f07e4fc: 92090002 */ lbu $t1,0x2($s0) -/* f07e500: 312a0010 */ andi $t2,$t1,0x10 -/* f07e504: 51400006 */ beqzl $t2,.L0f07e520 -/* f07e508: 8e0d0040 */ lw $t5,0x40($s0) -/* f07e50c: 8e0b0040 */ lw $t3,0x40($s0) -/* f07e510: 356c1000 */ ori $t4,$t3,0x1000 -/* f07e514: 10000069 */ b .L0f07e6bc -/* f07e518: ae0c0040 */ sw $t4,0x40($s0) -/* f07e51c: 8e0d0040 */ lw $t5,0x40($s0) -.L0f07e520: -/* f07e520: 2401efff */ addiu $at,$zero,-4097 -/* f07e524: 01a17024 */ and $t6,$t5,$at -/* f07e528: 10000064 */ b .L0f07e6bc -/* f07e52c: ae0e0040 */ sw $t6,0x40($s0) -.L0f07e530: -/* f07e530: 50200063 */ beqzl $at,.L0f07e6c0 -/* f07e534: 92020003 */ lbu $v0,0x3($s0) -/* f07e538: 54600061 */ bnezl $v1,.L0f07e6c0 -/* f07e53c: 92020003 */ lbu $v0,0x3($s0) -/* f07e540: 860f004c */ lh $t7,0x4c($s0) -/* f07e544: 24040001 */ addiu $a0,$zero,0x1 -/* f07e548: 55e00030 */ bnezl $t7,.L0f07e60c -/* f07e54c: 92180002 */ lbu $t8,0x2($s0) -/* f07e550: 92180002 */ lbu $t8,0x2($s0) -/* f07e554: 33190040 */ andi $t9,$t8,0x40 -/* f07e558: 5720002c */ bnezl $t9,.L0f07e60c -/* f07e55c: 92180002 */ lbu $t8,0x2($s0) -/* f07e560: 8e080008 */ lw $t0,0x8($s0) -/* f07e564: 31098000 */ andi $t1,$t0,0x8000 -/* f07e568: 1120001e */ beqz $t1,.L0f07e5e4 -/* f07e56c: 00000000 */ nop -/* f07e570: 0fc19711 */ jal func0f065c44 -/* f07e574: 02202025 */ or $a0,$s1,$zero -/* f07e578: 0fc18171 */ jal func0f0605c4 -/* f07e57c: 02202025 */ or $a0,$s1,$zero -/* f07e580: 8e0a0040 */ lw $t2,0x40($s0) -/* f07e584: 2401f7ff */ addiu $at,$zero,-2049 -/* f07e588: 02202025 */ or $a0,$s1,$zero -/* f07e58c: 01415824 */ and $t3,$t2,$at -/* f07e590: 0fc24849 */ jal func0f092124 -/* f07e594: ae0b0040 */ sw $t3,0x40($s0) -/* f07e598: 86030006 */ lh $v1,0x6($s0) -/* f07e59c: 0fc24908 */ jal setupCommandGetObject -/* f07e5a0: 00432021 */ addu $a0,$v0,$v1 -/* f07e5a4: 5040002b */ beqzl $v0,.L0f07e654 -/* f07e5a8: 920e0003 */ lbu $t6,0x3($s0) -/* f07e5ac: 8c4c0014 */ lw $t4,0x14($v0) -/* f07e5b0: 51800028 */ beqzl $t4,.L0f07e654 -/* f07e5b4: 920e0003 */ lbu $t6,0x3($s0) -/* f07e5b8: 8e040018 */ lw $a0,0x18($s0) -/* f07e5bc: 8c850014 */ lw $a1,0x14($a0) -/* f07e5c0: 0c006bd6 */ jal func0001af58 -/* f07e5c4: afa20050 */ sw $v0,0x50($sp) -/* f07e5c8: 8fa30050 */ lw $v1,0x50($sp) -/* f07e5cc: 8e040014 */ lw $a0,0x14($s0) -/* f07e5d0: 0fc181a6 */ jal propReparent -/* f07e5d4: 8c650014 */ lw $a1,0x14($v1) -/* f07e5d8: 240d0001 */ addiu $t5,$zero,0x1 -/* f07e5dc: 1000001c */ b .L0f07e650 -/* f07e5e0: afad0060 */ sw $t5,0x60($sp) -.L0f07e5e4: -/* f07e5e4: 0fc180bc */ jal propShow -/* f07e5e8: 02202025 */ or $a0,$s1,$zero -/* f07e5ec: 0fc248f5 */ jal func0f0923d4 -/* f07e5f0: 02002025 */ or $a0,$s0,$zero -/* f07e5f4: 8e0e0040 */ lw $t6,0x40($s0) -/* f07e5f8: 2401f7ff */ addiu $at,$zero,-2049 -/* f07e5fc: 01c17824 */ and $t7,$t6,$at -/* f07e600: 10000013 */ b .L0f07e650 -/* f07e604: ae0f0040 */ sw $t7,0x40($s0) -/* f07e608: 92180002 */ lbu $t8,0x2($s0) -.L0f07e60c: -/* f07e60c: 33190008 */ andi $t9,$t8,0x8 -/* f07e610: 53200006 */ beqzl $t9,.L0f07e62c -/* f07e614: 8e0a0008 */ lw $t2,0x8($s0) -/* f07e618: 8e080008 */ lw $t0,0x8($s0) -/* f07e61c: 35090100 */ ori $t1,$t0,0x100 -/* f07e620: 10000005 */ b .L0f07e638 -/* f07e624: ae090008 */ sw $t1,0x8($s0) -/* f07e628: 8e0a0008 */ lw $t2,0x8($s0) -.L0f07e62c: -/* f07e62c: 2401feff */ addiu $at,$zero,-257 -/* f07e630: 01415824 */ and $t3,$t2,$at -/* f07e634: ae0b0008 */ sw $t3,0x8($s0) -.L0f07e638: -/* f07e638: 920c0002 */ lbu $t4,0x2($s0) -/* f07e63c: a600004c */ sh $zero,0x4c($s0) -/* f07e640: 8e050018 */ lw $a1,0x18($s0) -/* f07e644: 318dffbf */ andi $t5,$t4,0xffbf -/* f07e648: 0fc226a5 */ jal func0f089a94 -/* f07e64c: a20d0002 */ sb $t5,0x2($s0) -.L0f07e650: -/* f07e650: 920e0003 */ lbu $t6,0x3($s0) -.L0f07e654: -/* f07e654: 24010015 */ addiu $at,$zero,0x15 -/* f07e658: 00002025 */ or $a0,$zero,$zero -/* f07e65c: 15c10003 */ bne $t6,$at,.L0f07e66c -/* f07e660: 02202825 */ or $a1,$s1,$zero -/* f07e664: c604005c */ lwc1 $f4,0x5c($s0) -/* f07e668: e6040060 */ swc1 $f4,0x60($s0) -.L0f07e66c: -/* f07e66c: 8faf0060 */ lw $t7,0x60($sp) -/* f07e670: 3c01bf80 */ lui $at,0xbf80 -/* f07e674: 24060052 */ addiu $a2,$zero,0x52 -/* f07e678: 15e00010 */ bnez $t7,.L0f07e6bc -/* f07e67c: 2407ffff */ addiu $a3,$zero,-1 -/* f07e680: 44810000 */ mtc1 $at,$f0 -/* f07e684: 2418ffff */ addiu $t8,$zero,-1 -/* f07e688: 2419ffff */ addiu $t9,$zero,-1 -/* f07e68c: afb9002c */ sw $t9,0x2c($sp) -/* f07e690: afb80010 */ sw $t8,0x10($sp) -/* f07e694: afa00014 */ sw $zero,0x14($sp) -/* f07e698: afa00018 */ sw $zero,0x18($sp) -/* f07e69c: afa0001c */ sw $zero,0x1c($sp) -/* f07e6a0: afa00020 */ sw $zero,0x20($sp) -/* f07e6a4: afa00028 */ sw $zero,0x28($sp) -/* f07e6a8: e7a00024 */ swc1 $f0,0x24($sp) -/* f07e6ac: e7a00030 */ swc1 $f0,0x30($sp) -/* f07e6b0: e7a00034 */ swc1 $f0,0x34($sp) -/* f07e6b4: 0fc24e7e */ jal func0f0939f8 -/* f07e6b8: e7a00038 */ swc1 $f0,0x38($sp) -.L0f07e6bc: -/* f07e6bc: 92020003 */ lbu $v0,0x3($s0) -.L0f07e6c0: -/* f07e6c0: 2401000d */ addiu $at,$zero,0xd -/* f07e6c4: 5441000a */ bnel $v0,$at,.L0f07e6f0 -/* f07e6c8: 24010039 */ addiu $at,$zero,0x39 -/* f07e6cc: 8e220004 */ lw $v0,0x4($s1) -/* f07e6d0: 8c44009c */ lw $a0,0x9c($v0) -/* f07e6d4: 5080001b */ beqzl $a0,.L0f07e744 -/* f07e6d8: 8fbf004c */ lw $ra,0x4c($sp) -/* f07e6dc: 0fc2b6ef */ jal func0f0adbbc -/* f07e6e0: 00000000 */ nop -/* f07e6e4: 10000017 */ b .L0f07e744 -/* f07e6e8: 8fbf004c */ lw $ra,0x4c($sp) -/* f07e6ec: 24010039 */ addiu $at,$zero,0x39 -.L0f07e6f0: -/* f07e6f0: 54410008 */ bnel $v0,$at,.L0f07e714 -/* f07e6f4: 24010030 */ addiu $at,$zero,0x30 -/* f07e6f8: 8e220004 */ lw $v0,0x4($s1) -/* f07e6fc: 8c4800e0 */ lw $t0,0xe0($v0) -/* f07e700: 0fc2b6ef */ jal func0f0adbbc -/* f07e704: 8d040004 */ lw $a0,0x4($t0) -/* f07e708: 1000000e */ b .L0f07e744 -/* f07e70c: 8fbf004c */ lw $ra,0x4c($sp) -/* f07e710: 24010030 */ addiu $at,$zero,0x30 -.L0f07e714: -/* f07e714: 54410006 */ bnel $v0,$at,.L0f07e730 -/* f07e718: 2401003b */ addiu $at,$zero,0x3b -/* f07e71c: 0fc1df04 */ jal func0f077c10 -/* f07e720: 02202025 */ or $a0,$s1,$zero -/* f07e724: 10000007 */ b .L0f07e744 -/* f07e728: 8fbf004c */ lw $ra,0x4c($sp) -/* f07e72c: 2401003b */ addiu $at,$zero,0x3b -.L0f07e730: -/* f07e730: 54410004 */ bnel $v0,$at,.L0f07e744 -/* f07e734: 8fbf004c */ lw $ra,0x4c($sp) -/* f07e738: 0fc1e025 */ jal func0f078094 -/* f07e73c: 02202025 */ or $a0,$s1,$zero -/* f07e740: 8fbf004c */ lw $ra,0x4c($sp) -.L0f07e744: -/* f07e744: 8fb00044 */ lw $s0,0x44($sp) -/* f07e748: 8fb10048 */ lw $s1,0x48($sp) -/* f07e74c: 27bd0068 */ addiu $sp,$sp,0x68 -/* f07e750: 03e00008 */ jr $ra -/* f07e754: 00001025 */ or $v0,$zero,$zero -); +u32 func0f07e474(struct prop *prop) +{ + struct defaultobj *obj = prop->obj; + bool silent = false; + bool regenning; + u32 cmdoffset; + u32 padnum; + struct defaultobj *newparent; + + if (prop->timetoregen > 0) { + // Prop is taken/unavailable + regenning = true; + + if (prop->timetoregen >= 60) { + regenning = false; + } + + prop->timetoregen -= g_Vars.lvupdate240_60; + + // If ready to start fading in but propCanRegen returns false, wait + // another second and try again. In practice propCanRegen will always + // return true so this condition will never pass. + if (prop->timetoregen < 60 && !regenning && !propCanRegen(prop)) { + prop->timetoregen += 60; + } + + if (prop->timetoregen <= 0) { + // Prop has finished fading in + prop->timetoregen = 0; + + if (obj->hidden2 & OBJH2FLAG_10) { + obj->hidden |= OBJHFLAG_00001000; + } else { + obj->hidden &= ~OBJHFLAG_00001000; + } + } else if (prop->timetoregen < 60 && !regenning) { + // 1 second left - time to start fading in + if (obj->damage == 0 && (obj->hidden2 & OBJH2FLAG_40) == 0) { + if (obj->flags & OBJFLAG_00008000) { + func0f065c44(prop); + func0f0605c4(prop); + obj->hidden &= ~OBJHFLAG_00000800; + cmdoffset = setupGetCommandOffset(prop); + + // Uh... why add obj->pad to the command offset? + // I suspect obj->pad has been repurposed. + padnum = obj->pad; + newparent = setupCommandGetObject(cmdoffset + padnum); + + if (newparent && newparent->prop) { + func0001af58(obj->model, obj->model->unk14); + propReparent(obj->prop, newparent->prop); + silent = true; + } + } else { + propShow(prop); + func0f0923d4(obj); + obj->hidden &= ~OBJHFLAG_00000800; + } + } else { + // Object was previously damaged. Maybe glass? + if (obj->hidden2 & OBJH2FLAG_08) { + obj->flags |= OBJFLAG_00000100; + } else { + obj->flags &= ~OBJFLAG_00000100; + } + + obj->damage = 0; + obj->hidden2 &= ~OBJH2FLAG_40; + func0f089a94(1, obj->model); + } + + if (obj->type == OBJTYPE_SHIELD) { + struct shieldobj *shield = (struct shieldobj *)obj; + shield->amount = shield->initialamount; + } + + if (!silent) { + // Play respawn sound + func0f0939f8(NULL, prop, 0x52, -1, + -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1); + } + } + } + + if (obj->type == OBJTYPE_AUTOGUN) { + struct autogunobj *autogun = (struct autogunobj *)prop->obj; + + if (autogun->unk9c) { + func0f0adbbc(autogun->unk9c); + } + } else if (obj->type == OBJTYPE_CHOPPER) { + struct chopperobj *chopper = (struct chopperobj *)prop->obj; + func0f0adbbc(chopper->fireslotthing->unk04); + } else if (obj->type == OBJTYPE_LIFT) { + liftTick(prop); + } else if (obj->type == OBJTYPE_ESCALATOR) { + escalatorTick(prop); + } + + return 0; +} s32 objTick(struct prop *prop) { diff --git a/src/include/constants.h b/src/include/constants.h index 19f1ec014..c95a2b9d6 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -2020,6 +2020,7 @@ #define OBJHFLAG_00000200 0x00000200 #define OBJHFLAG_00000400 0x00000400 #define OBJHFLAG_00000800 0x00000800 +#define OBJHFLAG_00001000 0x00001000 #define OBJHFLAG_ACTIVATED_BY_BOND 0x00004000 #define OBJHFLAG_ACTIVATED_BY_COOP 0x00040000 #define OBJHFLAG_00100000 0x00100000 @@ -2031,6 +2032,7 @@ // obj->hidden2 #define OBJH2FLAG_04 0x04 #define OBJH2FLAG_08 0x08 +#define OBJH2FLAG_10 0x10 #define OBJH2FLAG_40 0x40 #define OBJTYPE_DOOR 0x01 diff --git a/src/include/game/game_091e10.h b/src/include/game/game_091e10.h index d7ed16c57..ed8793fc1 100644 --- a/src/include/game/game_091e10.h +++ b/src/include/game/game_091e10.h @@ -6,7 +6,7 @@ u32 setupGetCommandLength(u32 *cmd); u32 *setupGetPtrToCommandByIndex(u32 cmdindex); s32 tagGetCommandIndex(struct tag *tag); -u32 func0f092124(void); +u32 setupGetCommandOffset(struct prop *prop); bool propLoad(s32 propnum); bool func0f09220c(struct defaultobj *obj, struct coord *pos, f32 *realrot, u32 arg3, u32 arg4); bool func0f092304(struct defaultobj *obj, u32 arg1, u32 arg2); diff --git a/src/include/game/game_0abe70.h b/src/include/game/game_0abe70.h index 58e57b57a..b37fd69bb 100644 --- a/src/include/game/game_0abe70.h +++ b/src/include/game/game_0abe70.h @@ -7,7 +7,7 @@ u32 func0f0abe70(void); u32 func0f0ac138(void); u32 func0f0ac4b8(void); u32 func0f0acb90(void); -void func0f0adbbc(u32 *arg0); +void func0f0adbbc(struct fireslot04 *fireslot04); u32 func0f0adcc8(void); u32 func0f0ade00(void); u32 func0f0ae964(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 48fff37a6..3d622b80b 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -151,8 +151,8 @@ void doorTick(struct prop *doorprop); void func0f07731c(struct prop *door, s32 playercount); u32 func0f077448(void); u32 func0f07766c(void); -u32 func0f077c10(void); -u32 func0f078094(void); +void liftTick(struct prop *lift); +void escalatorTick(struct prop *escalator); void cameraTick(struct prop *camera); u32 func0f078930(void); void fanTick(struct prop *fan); @@ -187,7 +187,7 @@ void func0f07e0b8(struct prop *glass, s32 playercount, u32 *arg2); u32 func0f07e184(void); u32 func0f07e1fc(void); void func0f07e2cc(struct prop *prop); -u32 func0f07e468(void); +bool propCanRegen(struct prop *prop); u32 func0f07e474(struct prop *prop); s32 objTick(struct prop *prop); u32 func0f07f6d0(void); @@ -249,7 +249,7 @@ void currentPlayerQueuePickupWeaponHudmsg(u32 weaponnum, bool dual); u32 func0f088840(struct prop *prop, bool showhudmsg); u32 func0f089014(void); u32 func0f0899dc(void); -u32 func0f089a94(void); +void func0f089a94(bool arg0, struct model *model); u32 func0f089c70(void); u32 func0f089d64(void); u32 func0f089db8(void); diff --git a/src/include/types.h b/src/include/types.h index 89bbe0375..955d83ae7 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -36,7 +36,7 @@ struct explosion; struct prop { /*0x00*/ u8 type; /*0x01*/ u8 flags; - /*0x02*/ s16 timetoregen; + /*0x02*/ s16 timetoregen; // ticks down /*0x04*/ union { @@ -1135,7 +1135,7 @@ struct autogunobj { // objtype 0d /*0x90*/ u32 unk90; /*0x94*/ u32 unk94; /*0x98*/ u32 unk98; - /*0x9c*/ u32 unk9c; + /*0x9c*/ struct fireslot04 *unk9c; /*0xa0*/ u32 unka0; /*0xa4*/ u32 unka4; /*0xa8*/ u8 autogun_type; @@ -1149,7 +1149,7 @@ struct multiammocrateobj { // objtype 14 struct shieldobj { // objtype 15 struct defaultobj base; - /*0x5c*/ f32 unk5c; + /*0x5c*/ f32 initialamount; /*0x60*/ f32 amount; }; @@ -1282,7 +1282,7 @@ struct chopperobj { /*0xd4*/ f32 gunrotx; /*0xd8*/ f32 barrelrotspeed; /*0xdc*/ f32 barrelrot; - /*0xdc*/ u32 unke0; + /*0xe0*/ struct fireslotthing *fireslotthing; /*0xe4*/ bool dead; }; @@ -3271,19 +3271,29 @@ struct room { /*0x88*/ u32 unk88; }; +struct fireslot04 { + s8 unk00; + s8 unk01; + u32 unk04; + u32 unk08; + u32 unk0c; + u32 unk10; + u32 unk14; + u32 unk18; + f32 unk1c; + f32 unk20; + u32 unk24; + f32 unk28; +}; + +struct fireslotthing { + /*0x00*/ u32 unk00; + /*0x04*/ struct fireslot04 *unk04; +}; + struct fireslot { /*0x00*/ s32 unk00; - /*0x04*/ u32 unk04; - /*0x08*/ u32 unk08; - /*0x0c*/ u32 unk0c; - /*0x10*/ u32 unk10; - /*0x14*/ u32 unk14; - /*0x18*/ u32 unk18; - /*0x1c*/ u32 unk1c; - /*0x20*/ u32 unk20; - /*0x24*/ u32 unk24; - /*0x28*/ u32 unk28; - /*0x2c*/ u32 unk2c; + /*0x04*/ struct fireslot04 unk04; }; struct menulayer {