Decompile ammocrateAllocate

This commit is contained in:
Ryan Dwyer
2021-11-26 18:11:51 +10:00
parent c9a0b6eef2
commit 20772381ff
5 changed files with 89 additions and 165 deletions
+22 -22
View File
@@ -185,18 +185,18 @@ void setupInit(void)
var8009ce40 = 50;
var8009ce44 = 10;
var8009ce48 = 20;
g_MaxAmmoCrates = 20;
var8009ce4c = 15;
g_NumProjectiles = IS4MB() ? 20 : 100;
g_NumMonitorThings = IS4MB() ? 40 : 80;
g_MaxProjectiles = IS4MB() ? 20 : 100;
g_MaxMonitorThings = IS4MB() ? 40 : 80;
if (g_Vars.stagenum >= STAGE_TITLE) {
var8009ce40 = 0;
var8009ce44 = 0;
var8009ce48 = 0;
g_MaxAmmoCrates = 0;
var8009ce4c = 0;
g_NumProjectiles = 0;
g_NumMonitorThings = 0;
g_MaxProjectiles = 0;
g_MaxMonitorThings = 0;
}
func0f00cc8c();
@@ -246,13 +246,13 @@ void setupInit(void)
var80069918 = 0;
}
if (var8009ce48 == 0) {
var8009ce60 = 0;
if (g_MaxAmmoCrates == 0) {
g_AmmoCrates = NULL;
} else {
var8009ce60 = mempAlloc(ALIGN16(var8009ce48 * sizeof(struct var8009ce60)), MEMPOOL_STAGE);
g_AmmoCrates = mempAlloc(ALIGN16(g_MaxAmmoCrates * sizeof(struct ammocrateobj)), MEMPOOL_STAGE);
for (i = 0; i < var8009ce48; i++) {
var8009ce60[i].base.prop = NULL;
for (i = 0; i < g_MaxAmmoCrates; i++) {
g_AmmoCrates[i].base.prop = NULL;
}
}
@@ -266,22 +266,22 @@ void setupInit(void)
}
}
if (g_NumProjectiles == 0) {
if (g_MaxProjectiles == 0) {
g_Projectiles = 0;
} else {
g_Projectiles = mempAlloc(ALIGN16(g_NumProjectiles * sizeof(struct projectile)), MEMPOOL_STAGE);
g_Projectiles = mempAlloc(ALIGN16(g_MaxProjectiles * sizeof(struct projectile)), MEMPOOL_STAGE);
for (i = 0; i < g_NumProjectiles; i++) {
for (i = 0; i < g_MaxProjectiles; i++) {
g_Projectiles[i].flags = PROJECTILEFLAG_FREE;
}
}
if (g_NumMonitorThings == 0) {
if (g_MaxMonitorThings == 0) {
g_MonitorThings = 0;
} else {
g_MonitorThings = mempAlloc(ALIGN16(g_NumMonitorThings * sizeof(struct monitorthing)), MEMPOOL_STAGE);
g_MonitorThings = mempAlloc(ALIGN16(g_MaxMonitorThings * sizeof(struct monitorthing)), MEMPOOL_STAGE);
for (i = 0; i < g_NumMonitorThings; i++) {
for (i = 0; i < g_MaxMonitorThings; i++) {
g_MonitorThings[i].flags = 0x00000001;
}
}
@@ -444,7 +444,7 @@ glabel var7f1a7f80
.L0f00cfa4:
/* f00cfa4: 3c058008 */ lui $a1,%hi(g_ModelStates)
/* f00cfa8: 00ad2821 */ addu $a1,$a1,$t5
/* f00cfac: 0fc1a94b */ jal func0f06a52c
/* f00cfac: 0fc1a94b */ jal objInitWithModelDef
/* f00cfb0: 8ca5b06c */ lw $a1,%lo(g_ModelStates)($a1)
/* f00cfb4: 8e040018 */ lw $a0,0x18($s0)
.L0f00cfb8:
@@ -486,7 +486,7 @@ glabel var7f1a7f80
.L0f00d040:
/* f00d040: 3c058008 */ lui $a1,%hi(g_ModelStates)
/* f00d044: 00aa2821 */ addu $a1,$a1,$t2
/* f00d048: 0fc1a94b */ jal func0f06a52c
/* f00d048: 0fc1a94b */ jal objInitWithModelDef
/* f00d04c: 8ca5b06c */ lw $a1,%lo(g_ModelStates)($a1)
/* f00d050: 00403025 */ or $a2,$v0,$zero
.L0f00d054:
@@ -525,7 +525,7 @@ glabel var7f1a7f80
.L0f00d0d0:
/* f00d0d0: 3c058008 */ lui $a1,%hi(g_ModelStates)
/* f00d0d4: 00ae2821 */ addu $a1,$a1,$t6
/* f00d0d8: 0fc1a94b */ jal func0f06a52c
/* f00d0d8: 0fc1a94b */ jal objInitWithModelDef
/* f00d0dc: 8ca5b06c */ lw $a1,%lo(g_ModelStates)($a1)
/* f00d0e0: 8e040018 */ lw $a0,0x18($s0)
.L0f00d0e4:
@@ -637,7 +637,7 @@ glabel var7f1a7f80
/* f00d278: 10000004 */ b .L0f00d28c
/* f00d27c: afa2007c */ sw $v0,0x7c($sp)
.L0f00d280:
/* f00d280: 0fc1a954 */ jal func0f06a550
/* f00d280: 0fc1a954 */ jal objInitWithAutoModel
/* f00d284: 02002025 */ or $a0,$s0,$zero
/* f00d288: afa2007c */ sw $v0,0x7c($sp)
.L0f00d28c:
@@ -1356,7 +1356,7 @@ void setupSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
monitor->base.hidden2 |= OBJH2FLAG_CANREGEN;
}
prop = func0f06a550(&monitor->base);
prop = objInitWithAutoModel(&monitor->base);
monitor->base.monitorthing = monitorthingGetNew();
if (prop && monitor->base.monitorthing) {
+59 -130
View File
@@ -108,13 +108,13 @@ f32 g_GasReleaseTimerMax240;
bool g_GasEnableDamage;
s32 var8009ce40;
s32 var8009ce44;
s32 var8009ce48;
s32 g_MaxAmmoCrates;
s32 var8009ce4c;
s32 g_NumProjectiles;
s32 g_NumMonitorThings;
s32 g_MaxProjectiles;
s32 g_MaxMonitorThings;
struct weaponobj *var8009ce58;
struct defaultobj *var8009ce5c;
struct var8009ce60 *var8009ce60;
struct ammocrateobj *g_AmmoCrates;
struct defaultobj *var8009ce64;
struct projectile *g_Projectiles;
struct monitorthing *g_MonitorThings;
@@ -2356,7 +2356,7 @@ void projectilesUnrefOwner(struct prop *owner)
{
s32 i;
for (i = 0; i < g_NumProjectiles; i++) {
for (i = 0; i < g_MaxProjectiles; i++) {
if ((g_Projectiles[i].flags & PROJECTILEFLAG_FREE) == 0
&& g_Projectiles[i].ownerprop == owner) {
g_Projectiles[i].ownerprop = NULL;
@@ -2411,7 +2411,7 @@ struct projectile *projectileGetNew(void)
s32 i;
// Happy path - find one that is already free
for (i = 0; i < g_NumProjectiles; i++) {
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].flags & PROJECTILEFLAG_FREE) {
projectileReset(&g_Projectiles[i]);
return &g_Projectiles[i];
@@ -2420,7 +2420,7 @@ struct projectile *projectileGetNew(void)
// Find one with the lowest unk0d8 (some kind of age/timer?)
// and some other conditions
for (i = 0; i < g_NumProjectiles; i++) {
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].obj
&& g_Projectiles[i].unk0d8 > 0
&& (bestindex < 0 || g_Projectiles[i].unk0d8 < g_Projectiles[bestindex].unk0d8)) {
@@ -2429,8 +2429,8 @@ struct projectile *projectileGetNew(void)
}
// If there were none, pick one at random
if (bestindex == -1 && g_NumProjectiles) {
bestindex = random() % g_NumProjectiles;
if (bestindex == -1 && g_MaxProjectiles) {
bestindex = random() % g_MaxProjectiles;
}
if (bestindex >= 0) {
@@ -2498,7 +2498,7 @@ struct monitorthing *monitorthingGetNew(void)
{
s32 i;
for (i = 0; i < g_NumMonitorThings; i++) {
for (i = 0; i < g_MaxMonitorThings; i++) {
if (g_MonitorThings[i].flags & 0x00000001) {
g_MonitorThings[i].flags = 0;
g_MonitorThings[i].unk044 = NULL;
@@ -4572,7 +4572,7 @@ glabel var7f1aa1fc
/* f069df8: 860f0004 */ lh $t7,0x4($s0)
/* f069dfc: 000fc0c0 */ sll $t8,$t7,0x3
/* f069e00: 00b82821 */ addu $a1,$a1,$t8
/* f069e04: 0fc1a94b */ jal func0f06a52c
/* f069e04: 0fc1a94b */ jal objInitWithModelDef
/* f069e08: 8ca5b06c */ lw $a1,%lo(g_ModelStates)($a1)
/* f069e0c: 104000d3 */ beqz $v0,.L0f06a15c
/* f069e10: 8fae00a8 */ lw $t6,0xa8($sp)
@@ -4879,7 +4879,7 @@ glabel var7f1aa1fc
/* f069df8: 860f0004 */ lh $t7,0x4($s0)
/* f069dfc: 000fc0c0 */ sll $t8,$t7,0x3
/* f069e00: 00b82821 */ addu $a1,$a1,$t8
/* f069e04: 0fc1a94b */ jal func0f06a52c
/* f069e04: 0fc1a94b */ jal objInitWithModelDef
/* f069e08: 8ca5b06c */ lw $a1,%lo(g_ModelStates)($a1)
/* f069e0c: 104000d3 */ beqz $v0,.L0f06a15c
/* f069e10: 8fae00a8 */ lw $t6,0xa8($sp)
@@ -5149,7 +5149,7 @@ glabel func0f06a170
/* f06a1e8: 27bd0030 */ addiu $sp,$sp,0x30
);
struct prop *objInitialise(struct defaultobj *obj, struct modelfiledata *filedata, struct prop *prop, struct model *model)
struct prop *objInit(struct defaultobj *obj, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
if (prop == NULL) {
prop = propAllocate();
@@ -5266,14 +5266,14 @@ struct prop *objInitialise(struct defaultobj *obj, struct modelfiledata *filedat
return prop;
}
struct prop *func0f06a52c(struct defaultobj *obj, struct modelfiledata *filedata)
struct prop *objInitWithModelDef(struct defaultobj *obj, struct modelfiledata *filedata)
{
return objInitialise(obj, filedata, NULL, NULL);
return objInit(obj, filedata, NULL, NULL);
}
struct prop *func0f06a550(struct defaultobj *obj)
struct prop *objInitWithAutoModel(struct defaultobj *obj)
{
return func0f06a52c(obj, g_ModelStates[obj->modelnum].filedata);
return objInitWithModelDef(obj, g_ModelStates[obj->modelnum].filedata);
}
void func0f06a580(struct defaultobj *obj, struct coord *pos, Mtxf *matrix, s16 *rooms)
@@ -61398,7 +61398,7 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon
do {
if (crate->slots[i].quantity > 0 && crate->slots[i].modelnum != 0xffff) {
struct ammocrateobj *newcrate = func0f08a724();
struct ammocrateobj *newcrate = ammocrateAllocate();
if (newcrate) {
s32 modelnum = crate->slots[i].modelnum;
@@ -61432,7 +61432,7 @@ void objDamage(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weapon
newcrate->base.modelnum = modelnum;
newcrate->ammotype = i + 1;
if (func0f06a52c(&newcrate->base, g_ModelStates[modelnum].filedata)) {
if (objInitWithModelDef(&newcrate->base, g_ModelStates[modelnum].filedata)) {
propReparent(newcrate->base.prop, obj->prop);
}
@@ -67554,7 +67554,7 @@ glabel func0f089a94
struct prop *hatApplyToChr(struct hatobj *hat, struct chrdata *chr, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
if (chr->model->filedata->type == &g_ModelTypeChr) {
prop = objInitialise(&hat->base, filedata, prop, model);
prop = objInit(&hat->base, filedata, prop, model);
if (prop && hat->base.model) {
f32 scale = hat->base.extrascale * (1.0f / 256.0f);
@@ -68497,111 +68497,40 @@ glabel func0f08a38c
/* f08a720: 00000000 */ nop
);
GLOBAL_ASM(
glabel func0f08a724
/* f08a724: 3c05800a */ lui $a1,%hi(var8009ce48)
/* f08a728: 8ca5ce48 */ lw $a1,%lo(var8009ce48)($a1)
/* f08a72c: 27bdffd8 */ addiu $sp,$sp,-40
/* f08a730: afbf0014 */ sw $ra,0x14($sp)
/* f08a734: 18a0000f */ blez $a1,.L0f08a774
/* f08a738: 00001825 */ or $v1,$zero,$zero
/* f08a73c: 3c07800a */ lui $a3,%hi(var8009ce60)
/* f08a740: 8ce7ce60 */ lw $a3,%lo(var8009ce60)($a3)
/* f08a744: 00003025 */ or $a2,$zero,$zero
/* f08a748: 00e01025 */ or $v0,$a3,$zero
.L0f08a74c:
/* f08a74c: 8c4e0014 */ lw $t6,0x14($v0)
/* f08a750: 24630001 */ addiu $v1,$v1,0x1
/* f08a754: 0065082a */ slt $at,$v1,$a1
/* f08a758: 15c00003 */ bnez $t6,.L0f08a768
/* f08a75c: 24420060 */ addiu $v0,$v0,0x60
/* f08a760: 10000046 */ b .L0f08a87c
/* f08a764: 00c71021 */ addu $v0,$a2,$a3
.L0f08a768:
/* f08a768: 1420fff8 */ bnez $at,.L0f08a74c
/* f08a76c: 24c60060 */ addiu $a2,$a2,0x60
/* f08a770: 00001825 */ or $v1,$zero,$zero
.L0f08a774:
/* f08a774: 18a00022 */ blez $a1,.L0f08a800
/* f08a778: 3c07800a */ lui $a3,%hi(var8009ce60)
/* f08a77c: 8ce7ce60 */ lw $a3,%lo(var8009ce60)($a3)
/* f08a780: 00003025 */ or $a2,$zero,$zero
/* f08a784: 00e01025 */ or $v0,$a3,$zero
.L0f08a788:
/* f08a788: 8c4f0040 */ lw $t7,0x40($v0)
/* f08a78c: 24630001 */ addiu $v1,$v1,0x1
/* f08a790: 0065082a */ slt $at,$v1,$a1
/* f08a794: 31f80080 */ andi $t8,$t7,0x80
/* f08a798: 57000016 */ bnezl $t8,.L0f08a7f4
/* f08a79c: 24c60060 */ addiu $a2,$a2,0x60
/* f08a7a0: 90590002 */ lbu $t9,0x2($v0)
/* f08a7a4: 33280004 */ andi $t0,$t9,0x4
/* f08a7a8: 55000012 */ bnezl $t0,.L0f08a7f4
/* f08a7ac: 24c60060 */ addiu $a2,$a2,0x60
/* f08a7b0: 8c440014 */ lw $a0,0x14($v0)
/* f08a7b4: 8c890018 */ lw $t1,0x18($a0)
/* f08a7b8: 5520000e */ bnezl $t1,.L0f08a7f4
/* f08a7bc: 24c60060 */ addiu $a2,$a2,0x60
/* f08a7c0: 908a0001 */ lbu $t2,0x1($a0)
/* f08a7c4: 314b00c2 */ andi $t3,$t2,0xc2
/* f08a7c8: 15600009 */ bnez $t3,.L0f08a7f0
/* f08a7cc: 00c72021 */ addu $a0,$a2,$a3
/* f08a7d0: 24050001 */ addiu $a1,$zero,0x1
/* f08a7d4: 0fc1acd3 */ jal objFreePermanently
/* f08a7d8: afa60018 */ sw $a2,0x18($sp)
/* f08a7dc: 3c0c800a */ lui $t4,%hi(var8009ce60)
/* f08a7e0: 8fa60018 */ lw $a2,0x18($sp)
/* f08a7e4: 8d8cce60 */ lw $t4,%lo(var8009ce60)($t4)
/* f08a7e8: 10000024 */ b .L0f08a87c
/* f08a7ec: 00cc1021 */ addu $v0,$a2,$t4
.L0f08a7f0:
/* f08a7f0: 24c60060 */ addiu $a2,$a2,0x60
.L0f08a7f4:
/* f08a7f4: 1420ffe4 */ bnez $at,.L0f08a788
/* f08a7f8: 24420060 */ addiu $v0,$v0,0x60
/* f08a7fc: 00001825 */ or $v1,$zero,$zero
.L0f08a800:
/* f08a800: 18a0001d */ blez $a1,.L0f08a878
/* f08a804: 3c07800a */ lui $a3,%hi(var8009ce60)
/* f08a808: 8ce7ce60 */ lw $a3,%lo(var8009ce60)($a3)
/* f08a80c: 00003025 */ or $a2,$zero,$zero
/* f08a810: 00e01025 */ or $v0,$a3,$zero
.L0f08a814:
/* f08a814: 8c4d0040 */ lw $t5,0x40($v0)
/* f08a818: 24630001 */ addiu $v1,$v1,0x1
/* f08a81c: 0065082a */ slt $at,$v1,$a1
/* f08a820: 31ae0080 */ andi $t6,$t5,0x80
/* f08a824: 55c00012 */ bnezl $t6,.L0f08a870
/* f08a828: 24c60060 */ addiu $a2,$a2,0x60
/* f08a82c: 904f0002 */ lbu $t7,0x2($v0)
/* f08a830: 31f80004 */ andi $t8,$t7,0x4
/* f08a834: 5700000e */ bnezl $t8,.L0f08a870
/* f08a838: 24c60060 */ addiu $a2,$a2,0x60
/* f08a83c: 8c590014 */ lw $t9,0x14($v0)
/* f08a840: 8f280018 */ lw $t0,0x18($t9)
/* f08a844: 15000009 */ bnez $t0,.L0f08a86c
/* f08a848: 00c72021 */ addu $a0,$a2,$a3
/* f08a84c: 24050001 */ addiu $a1,$zero,0x1
/* f08a850: 0fc1acd3 */ jal objFreePermanently
/* f08a854: afa60018 */ sw $a2,0x18($sp)
/* f08a858: 3c09800a */ lui $t1,%hi(var8009ce60)
/* f08a85c: 8fa60018 */ lw $a2,0x18($sp)
/* f08a860: 8d29ce60 */ lw $t1,%lo(var8009ce60)($t1)
/* f08a864: 10000005 */ b .L0f08a87c
/* f08a868: 00c91021 */ addu $v0,$a2,$t1
.L0f08a86c:
/* f08a86c: 24c60060 */ addiu $a2,$a2,0x60
.L0f08a870:
/* f08a870: 1420ffe8 */ bnez $at,.L0f08a814
/* f08a874: 24420060 */ addiu $v0,$v0,0x60
.L0f08a878:
/* f08a878: 00001025 */ or $v0,$zero,$zero
.L0f08a87c:
/* f08a87c: 8fbf0014 */ lw $ra,0x14($sp)
/* f08a880: 27bd0028 */ addiu $sp,$sp,0x28
/* f08a884: 03e00008 */ jr $ra
/* f08a888: 00000000 */ nop
);
struct ammocrateobj *ammocrateAllocate(void)
{
s32 i;
// Try to find a free one
for (i = 0; i < g_MaxAmmoCrates; i++) {
if (g_AmmoCrates[i].base.prop == NULL) {
return &g_AmmoCrates[i];
}
}
// Find one that can be freed off-screen
for (i = 0; i < g_MaxAmmoCrates; i++) {
if ((g_AmmoCrates[i].base.hidden & OBJHFLAG_AIRBORNE) == 0
&& (g_AmmoCrates[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_AmmoCrates[i].base.prop->parent == NULL
&& (g_AmmoCrates[i].base.prop->flags & (PROPFLAG_ONSCREEN | PROPFLAG_40 | PROPFLAG_80)) == 0) {
objFreePermanently(&g_AmmoCrates[i].base, true);
return &g_AmmoCrates[i];
}
}
// Find one that can be freed on-screen
for (i = 0; i < g_MaxAmmoCrates; i++) {
if ((g_AmmoCrates[i].base.hidden & OBJHFLAG_AIRBORNE) == 0
&& (g_AmmoCrates[i].base.hidden2 & OBJH2FLAG_CANREGEN) == 0
&& g_AmmoCrates[i].base.prop->parent == NULL) {
objFreePermanently(&g_AmmoCrates[i].base, true);
return &g_AmmoCrates[i];
}
}
return NULL;
}
GLOBAL_ASM(
glabel func0f08a88c
@@ -68850,7 +68779,7 @@ void propweaponSetDual(struct weaponobj *weapon1, struct weaponobj *weapon2)
struct prop *func0f08adc8(struct weaponobj *weapon, struct modelfiledata *filedata, struct prop *prop, struct model *model)
{
prop = objInitialise(&weapon->base, filedata, prop, model);
prop = objInit(&weapon->base, filedata, prop, model);
if (prop) {
prop->type = PROPTYPE_WEAPON;
@@ -68862,7 +68791,7 @@ struct prop *func0f08adc8(struct weaponobj *weapon, struct modelfiledata *fileda
struct prop *func0f08ae0c(struct weaponobj *weapon, struct modelfiledata *filedata)
{
struct prop *prop = func0f06a52c(&weapon->base, filedata);
struct prop *prop = objInitWithModelDef(&weapon->base, filedata);
if (prop) {
prop->type = PROPTYPE_WEAPON;
@@ -69054,7 +68983,7 @@ struct autogunobj *laptopDeploy(s32 modelnum, struct gset *gset, struct chrdata
laptop->base = tmp;
laptop->base.modelnum = modelnum;
prop = objInitialise(&laptop->base, filedata, prop, model);
prop = objInit(&laptop->base, filedata, prop, model);
laptop->targetpad = -1;
laptop->aimdist = 5000;
@@ -71326,7 +71255,7 @@ glabel var7f1aaf78
/* f08d558: 8c8e0008 */ lw $t6,0x8($a0)
/* f08d55c: 00808025 */ or $s0,$a0,$zero
/* f08d560: 35cf0100 */ ori $t7,$t6,0x100
/* f08d564: 0fc1a954 */ jal func0f06a550
/* f08d564: 0fc1a954 */ jal objInitWithAutoModel
/* f08d568: ac8f0008 */ sw $t7,0x8($a0)
/* f08d56c: 10400080 */ beqz $v0,.L0f08d770
/* f08d570: afa2007c */ sw $v0,0x7c($sp)
@@ -73470,7 +73399,7 @@ void projectilesDebug(void)
{
s32 i;
for (i = 0; i < g_NumProjectiles; i++) {
for (i = 0; i < g_MaxProjectiles; i++) {
if (g_Projectiles[i].flags) {
// empty
}
+4 -4
View File
@@ -98,13 +98,13 @@ extern u32 var8009cdb0;
extern struct weaponobj *g_Proxies[30];
extern s32 var8009ce40;
extern s32 var8009ce44;
extern s32 var8009ce48;
extern s32 g_MaxAmmoCrates;
extern s32 var8009ce4c;
extern s32 g_NumProjectiles;
extern s32 g_NumMonitorThings;
extern s32 g_MaxProjectiles;
extern s32 g_MaxMonitorThings;
extern struct weaponobj *var8009ce58;
extern struct defaultobj *var8009ce5c;
extern struct var8009ce60 *var8009ce60;
extern struct ammocrateobj *g_AmmoCrates;
extern struct defaultobj *var8009ce64;
extern struct projectile *g_Projectiles;
extern struct monitorthing *g_MonitorThings;
+4 -4
View File
@@ -97,9 +97,9 @@ void func0f069c70(struct defaultobj *obj, bool arg1, bool arg2);
void objInitToggleNodes(struct defaultobj *obj);
u32 func0f069d38(void);
u32 func0f06a170(void);
struct prop *objInitialise(struct defaultobj *obj, struct modelfiledata *filedata, struct prop *prop, struct model *model);
struct prop *func0f06a52c(struct defaultobj *obj, struct modelfiledata *modelfiledata);
struct prop *func0f06a550(struct defaultobj *obj);
struct prop *objInit(struct defaultobj *obj, struct modelfiledata *filedata, struct prop *prop, struct model *model);
struct prop *objInitWithModelDef(struct defaultobj *obj, struct modelfiledata *modelfiledata);
struct prop *objInitWithAutoModel(struct defaultobj *obj);
void func0f06a580(struct defaultobj *obj, struct coord *pos, Mtxf *matrix, s16 *rooms);
f32 func0f06a620(struct defaultobj *obj);
void func0f06a730(struct defaultobj *obj, struct pad *newpad, Mtxf *matrix, s16 *arg3, struct pad *arg4);
@@ -269,7 +269,7 @@ void hatAssignToChr(struct hatobj *hat, struct chrdata *chr);
struct prop *hatCreateForChr(struct chrdata *chr, s32 modelnum, u32 flags);
struct weaponobj *func0f089f8c(bool arg0, bool arg1, struct modelfiledata *filedata);
struct hatobj *func0f08a38c(bool arg0, bool arg1, struct modelfiledata *filedata);
struct ammocrateobj *func0f08a724(void);
struct ammocrateobj *ammocrateAllocate(void);
u32 func0f08a88c(void);
void playerActivateRemoteMineDetonator(s32 playernum);
struct weaponobj *func0f08aa70(s32 weaponnum, struct prop *prop);
-5
View File
@@ -6807,11 +6807,6 @@ struct roomproplistchunk {
s16 propnums[8];
};
struct var8009ce60 {
struct defaultobj base;
/*0x5c*/ u32 unk5c;
};
struct nbomb {
struct coord pos;
s32 age240;