From d6b4e4b23f41fb50aeac37928dda3b68fd690bcf Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 2 Jun 2021 23:37:57 +1000 Subject: [PATCH] Decompile roomGetProps and rename functions/symbols relating to room registration --- src/game/bondbike.c | 6 +- src/game/bondeyespy.c | 6 +- src/game/bondgrab.c | 10 +- src/game/bondmove.c | 4 +- src/game/bondwalk.c | 18 +-- src/game/chr/chr.c | 18 +-- src/game/chr/chraction.c | 6 +- src/game/chr/chraicommands.c | 12 +- src/game/game_00c240.c | 16 +-- src/game/game_00c490.c | 1 - src/game/game_011110.c | 8 +- src/game/game_091e10.c | 4 +- src/game/game_097ba0.c | 2 +- src/game/game_0b69d0.c | 6 +- src/game/prop.c | 226 +++++++++++++++++---------------- src/game/propobj.c | 110 ++++++++-------- src/include/bss.h | 4 +- src/include/game/game_00c240.h | 2 +- src/include/game/prop.h | 14 +- src/include/types.h | 10 +- 20 files changed, 251 insertions(+), 232 deletions(-) diff --git a/src/game/bondbike.c b/src/game/bondbike.c index 753b1d417..8e8fb4e53 100644 --- a/src/game/bondbike.c +++ b/src/game/bondbike.c @@ -1139,7 +1139,7 @@ s32 bbikeCalculateNewPosition(struct coord *vel, f32 angledelta) g_Vars.currentplayer->hoverbike->pos.x = dstpos.x; g_Vars.currentplayer->hoverbike->pos.z = dstpos.z; - func0f065c44(g_Vars.currentplayer->hoverbike); + propDeregisterRooms(g_Vars.currentplayer->hoverbike); roomsCopy(dstrooms, g_Vars.currentplayer->hoverbike->rooms); bike->hov = hov; @@ -1234,7 +1234,7 @@ void bbikeUpdateVertical(struct coord *arg0) #endif bmove0f0cb79c(g_Vars.currentplayer, arg0, newrooms); - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); roomsCopy(newrooms, g_Vars.currentplayer->prop->rooms); g_Vars.currentplayer->vv_theta = (M_BADTAU - angle) * 360.0f / M_BADTAU; @@ -1670,7 +1670,7 @@ void bbikeTick(void) #if VERSION >= VERSION_NTSC_1_0 for (i = 0; prop->rooms[i] != -1; i++) { if (prop->rooms[i] == g_Vars.currentplayer->floorroom) { - func0f065c44(prop); + propDeregisterRooms(prop); g_Vars.currentplayer->prop->rooms[0] = g_Vars.currentplayer->floorroom; g_Vars.currentplayer->prop->rooms[1] = -1; break; diff --git a/src/game/bondeyespy.c b/src/game/bondeyespy.c index e21af9f3d..7ef66e1f3 100644 --- a/src/game/bondeyespy.c +++ b/src/game/bondeyespy.c @@ -103,7 +103,7 @@ s32 eyespyTryMoveUpwards(f32 yvel) if (result == CDRESULT_NOCOLLISION) { prop->pos.y = dstpos.y; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(dstrooms, prop->rooms); } @@ -203,7 +203,7 @@ s32 eyespyCalculateNewPosition(struct coord *vel) eyespyprop->pos.y = dstpos.y; eyespyprop->pos.z = dstpos.z; - func0f065c44(eyespyprop); + propDeregisterRooms(eyespyprop); roomsCopy(dstrooms, eyespyprop->rooms); } @@ -668,7 +668,7 @@ bool eyespyTryLaunch(void) } currentPlayerSetPerimEnabled(g_Vars.currentplayer->prop, true); - func0f065c44(g_Vars.currentplayer->eyespy->prop); + propDeregisterRooms(g_Vars.currentplayer->eyespy->prop); func0f065e74(&g_Vars.currentplayer->prop->pos, g_Vars.currentplayer->prop->rooms, &g_Vars.currentplayer->eyespy->prop->pos, g_Vars.currentplayer->eyespy->prop->rooms); diff --git a/src/game/bondgrab.c b/src/game/bondgrab.c index 43693ee02..8c55403a0 100644 --- a/src/game/bondgrab.c +++ b/src/game/bondgrab.c @@ -512,7 +512,7 @@ bool bgrabTryMoveUpwards(f32 y) if (result == CDRESULT_NOCOLLISION) { g_Vars.currentplayer->prop->pos.y = newpos.y; - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); roomsCopy(rooms, g_Vars.currentplayer->prop->rooms); } @@ -1033,7 +1033,7 @@ glabel var7f1ad9c4 /* f0cd8c4: 5160000a */ beqzl $t3,.L0f0cd8f0 /* f0cd8c8: 8e080284 */ lw $t0,0x284($s0) /* f0cd8cc: 8e0c0284 */ lw $t4,0x284($s0) -/* f0cd8d0: 0fc19711 */ jal func0f065c44 +/* f0cd8d0: 0fc19711 */ jal propDeregisterRooms /* f0cd8d4: 8d8400bc */ lw $a0,0xbc($t4) /* f0cd8d8: 8e0d0284 */ lw $t5,0x284($s0) /* f0cd8dc: 27a400cc */ addiu $a0,$sp,0xcc @@ -1591,7 +1591,7 @@ glabel var7f1ad9c4 /* f0cd8c4: 5160000a */ beqzl $t3,.L0f0cd8f0 /* f0cd8c8: 8e080284 */ lw $t0,0x284($s0) /* f0cd8cc: 8e0c0284 */ lw $t4,0x284($s0) -/* f0cd8d0: 0fc19711 */ jal func0f065c44 +/* f0cd8d0: 0fc19711 */ jal propDeregisterRooms /* f0cd8d4: 8d8400bc */ lw $a0,0xbc($t4) /* f0cd8d8: 8e0d0284 */ lw $t5,0x284($s0) /* f0cd8dc: 27a400cc */ addiu $a0,$sp,0xcc @@ -2169,7 +2169,7 @@ glabel var7f1ad9c4 /* f0cb138: 51e0000a */ beqzl $t7,.NB0f0cb164 /* f0cb13c: 8e080284 */ lw $t0,0x284($s0) /* f0cb140: 8e180284 */ lw $t8,0x284($s0) -/* f0cb144: 0fc193ab */ jal func0f065c44 +/* f0cb144: 0fc193ab */ jal propDeregisterRooms /* f0cb148: 8f0400bc */ lw $a0,0xbc($t8) /* f0cb14c: 8e190284 */ lw $t9,0x284($s0) /* f0cb150: 27a400c4 */ addiu $a0,$sp,0xc4 @@ -3629,7 +3629,7 @@ void bgrabTick(void) #if VERSION >= VERSION_NTSC_1_0 for (i = 0; g_Vars.currentplayer->prop->rooms[i] != -1; i++) { if (g_Vars.currentplayer->prop->rooms[i] == g_Vars.currentplayer->floorroom) { - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); g_Vars.currentplayer->prop->rooms[0] = g_Vars.currentplayer->floorroom; g_Vars.currentplayer->prop->rooms[1] = -1; break; diff --git a/src/game/bondmove.c b/src/game/bondmove.c index 4fda24779..1809d41e4 100644 --- a/src/game/bondmove.c +++ b/src/game/bondmove.c @@ -11890,9 +11890,9 @@ void bmove0f0cb89c(struct player *player, s16 *rooms) void bmove0f0cb8c4(struct player *player) { - func0f065c44(player->prop); + propDeregisterRooms(player->prop); bmove0f0cb89c(player, player->prop->rooms); - func0f065cb0(player->prop); + propRegisterRooms(player->prop); } void bmove0f0cb904(struct coord *arg0) diff --git a/src/game/bondwalk.c b/src/game/bondwalk.c index 7bb64f618..b785709be 100644 --- a/src/game/bondwalk.c +++ b/src/game/bondwalk.c @@ -412,7 +412,7 @@ s32 bwalkTryMoveUpwards(f32 amount) if (result == CDRESULT_NOCOLLISION) { g_Vars.currentplayer->prop->pos.y = newpos.y; - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); roomsCopy(rooms, g_Vars.currentplayer->prop->rooms); } @@ -522,7 +522,7 @@ bool bwalkCalculateNewPosition(struct coord *vel, f32 rotateamount, bool apply, g_Vars.currentplayer->prop->pos.z = dstpos.z; if (copyrooms) { - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); roomsCopy(dstrooms, g_Vars.currentplayer->prop->rooms); } } @@ -828,7 +828,7 @@ glabel var7f1a7ad8nb /* f0c1e08: 8fbf0034 */ lw $ra,0x34($sp) /* f0c1e0c: 8e0a0284 */ lw $t2,0x284($s0) /* f0c1e10: 8d4400bc */ lw $a0,0xbc($t2) -/* f0c1e14: 0fc193ab */ jal func0f065c44 +/* f0c1e14: 0fc193ab */ jal propDeregisterRooms /* f0c1e18: afa300b4 */ sw $v1,0xb4($sp) /* f0c1e1c: 8e0b0284 */ lw $t3,0x284($s0) /* f0c1e20: 27a40094 */ addiu $a0,$sp,0x94 @@ -1072,7 +1072,7 @@ glabel bwalkCalculateNewPositionWithPush /* f0c4594: c7a4006c */ lwc1 $f4,0x6c($sp) /* f0c4598: e484000c */ swc1 $f4,0xc($a0) /* f0c459c: c7a60070 */ lwc1 $f6,0x70($sp) -/* f0c45a0: 0fc19711 */ jal func0f065c44 +/* f0c45a0: 0fc19711 */ jal propDeregisterRooms /* f0c45a4: e4860010 */ swc1 $f6,0x10($a0) /* f0c45a8: 8fa500a0 */ lw $a1,0xa0($sp) /* f0c45ac: 27a40058 */ addiu $a0,$sp,0x58 @@ -1415,7 +1415,7 @@ glabel bwalkCalculateNewPositionWithPush /* f0c4594: c7a4006c */ lwc1 $f4,0x6c($sp) /* f0c4598: e484000c */ swc1 $f4,0xc($a0) /* f0c459c: c7a60070 */ lwc1 $f6,0x70($sp) -/* f0c45a0: 0fc19711 */ jal func0f065c44 +/* f0c45a0: 0fc19711 */ jal propDeregisterRooms /* f0c45a4: e4860010 */ swc1 $f6,0x10($a0) /* f0c45a8: 8fa500a0 */ lw $a1,0xa0($sp) /* f0c45ac: 27a40058 */ addiu $a0,$sp,0x58 @@ -1622,7 +1622,7 @@ glabel bwalkCalculateNewPositionWithPush // obstacle->pos.y = newpos.y; // obstacle->pos.z = newpos.z; // -// func0f065c44(obstacle); +// propDeregisterRooms(obstacle); // roomsCopy(newrooms, obstacle->rooms); // func0f0220ac(chr); // modelSetRootPosition(chr->model, &newpos); @@ -2287,7 +2287,7 @@ void bwalkUpdateVertical(void) g_Vars.currentplayer->prop->pos.y = newpos.y; g_Vars.currentplayer->prop->pos.z = newpos.z; - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); roomsCopy(newrooms, g_Vars.currentplayer->prop->rooms); } } @@ -3230,7 +3230,7 @@ glabel var7f1a7b20nb /* f0c3910: 8dcd00bc */ lw $t5,0xbc($t6) /* f0c3914: e5aa0010 */ swc1 $f10,0x10($t5) /* f0c3918: 8e0f0284 */ lw $t7,0x284($s0) -/* f0c391c: 0fc193ab */ jal func0f065c44 +/* f0c391c: 0fc193ab */ jal propDeregisterRooms /* f0c3920: 8de400bc */ lw $a0,0xbc($t7) /* f0c3924: 8e180284 */ lw $t8,0x284($s0) /* f0c3928: 27a40098 */ addiu $a0,$sp,0x98 @@ -6606,7 +6606,7 @@ void bwalkTick(void) #if VERSION >= VERSION_NTSC_1_0 for (i = 0; g_Vars.currentplayer->prop->rooms[i] != -1; i++) { if (g_Vars.currentplayer->floorroom == g_Vars.currentplayer->prop->rooms[i]) { - func0f065c44(g_Vars.currentplayer->prop); + propDeregisterRooms(g_Vars.currentplayer->prop); g_Vars.currentplayer->prop->rooms[0] = g_Vars.currentplayer->floorroom; g_Vars.currentplayer->prop->rooms[1] = -1; break; diff --git a/src/game/chr/chr.c b/src/game/chr/chr.c index af1e7858e..933697e95 100644 --- a/src/game/chr/chr.c +++ b/src/game/chr/chr.c @@ -1807,7 +1807,7 @@ glabel var7f1a992cpf /* f020590: 8fa9012c */ lw $t1,0x12c($sp) /* f020594: e5200000 */ swc1 $f0,0x0($t1) .PF0f020598: -/* f020598: 0fc197b5 */ jal func0f065c44 +/* f020598: 0fc197b5 */ jal propDeregisterRooms /* f02059c: 00000000 */ nop /* f0205a0: 27a400fc */ addiu $a0,$sp,0xfc /* f0205a4: 0fc1968d */ jal roomsCopy @@ -1827,7 +1827,7 @@ glabel var7f1a992cpf .PF0f0205dc: /* f0205dc: 5483000a */ bnel $a0,$v1,.PF0f020608 /* f0205e0: 8443002a */ lh $v1,0x2a($v0) -/* f0205e4: 0fc197b5 */ jal func0f065c44 +/* f0205e4: 0fc197b5 */ jal propDeregisterRooms /* f0205e8: 00c02025 */ move $a0,$a2 /* f0205ec: 8fac0118 */ lw $t4,0x118($sp) /* f0205f0: 860d02b2 */ lh $t5,0x2b2($s0) @@ -3083,7 +3083,7 @@ glabel var7f1a8720 /* f020484: 8fa9012c */ lw $t1,0x12c($sp) /* f020488: e5200000 */ swc1 $f0,0x0($t1) .L0f02048c: -/* f02048c: 0fc19711 */ jal func0f065c44 +/* f02048c: 0fc19711 */ jal propDeregisterRooms /* f020490: 00000000 */ nop /* f020494: 27a400fc */ addiu $a0,$sp,0xfc /* f020498: 0fc195e9 */ jal roomsCopy @@ -3103,7 +3103,7 @@ glabel var7f1a8720 .L0f0204d0: /* f0204d0: 5483000a */ bnel $a0,$v1,.L0f0204fc /* f0204d4: 8443002a */ lh $v1,0x2a($v0) -/* f0204d8: 0fc19711 */ jal func0f065c44 +/* f0204d8: 0fc19711 */ jal propDeregisterRooms /* f0204dc: 00c02025 */ or $a0,$a2,$zero /* f0204e0: 8fac0118 */ lw $t4,0x118($sp) /* f0204e4: 860d02b2 */ lh $t5,0x2b2($s0) @@ -4209,7 +4209,7 @@ glabel var7f1a8720 /* f020030: 8fae00fc */ lw $t6,0xfc($sp) /* f020034: e5c00000 */ swc1 $f0,0x0($t6) .NB0f020038: -/* f020038: 0fc193ab */ jal func0f065c44 +/* f020038: 0fc193ab */ jal propDeregisterRooms /* f02003c: 8fa400e8 */ lw $a0,0xe8($sp) /* f020040: 27a400cc */ addiu $a0,$sp,0xcc /* f020044: 0fc19283 */ jal roomsCopy @@ -4536,7 +4536,7 @@ struct prop *func0f020b14(struct prop *prop, struct model *model, prop->pos.y = ground + 100; prop->pos.z = testpos.z; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(rooms, prop->rooms); func0f0220ac(chr); modelSetRootPosition(model, &prop->pos); @@ -4596,7 +4596,7 @@ void func0f020d44(struct prop *prop, bool removechr) func0f0926bc(prop, 1, 0xffff); func0f0292bc(prop); func0f089a94(0, model); - func0f065c44(prop); + propDeregisterRooms(prop); if (g_Vars.stagenum == STAGE_CITRAINING) { eyespyobj = objFindByTagId(0x26); @@ -6404,9 +6404,9 @@ void func0f022084(struct chrdata *chr, s16 *room) void func0f0220ac(struct chrdata *chr) { - func0f065c44(chr->prop); + propDeregisterRooms(chr->prop); func0f022084(chr, chr->prop->rooms); - func0f065cb0(chr->prop); + propRegisterRooms(chr->prop); } void func0f0220ec(struct chrdata *chr, s32 arg1, s32 arg2) diff --git a/src/game/chr/chraction.c b/src/game/chr/chraction.c index 5fb9a014b..d364f8d56 100644 --- a/src/game/chr/chraction.c +++ b/src/game/chr/chraction.c @@ -6110,9 +6110,9 @@ void chrGoPosTickMagic(struct chrdata *chr, struct waydata *waydata, f32 speed, chr->floortype = floortype; chr->floorroom = floorroom; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(sp118, prop->rooms); - func0f065cb0(prop); + propRegisterRooms(prop); modelSetRootPosition(chr->model, &prop->pos); @@ -26344,7 +26344,7 @@ bool chrMoveToPos(struct chrdata *chr, struct coord *pos, s16 *rooms, f32 angle, chr->prop->pos.y = pos2.y; chr->prop->pos.z = pos2.z; - func0f065c44(chr->prop); + propDeregisterRooms(chr->prop); roomsCopy(rooms2, chr->prop->rooms); func0f0220ac(chr); modelSetRootPosition(chr->model, &pos2); diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 6ae4ad479..833feaa39 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -2380,7 +2380,7 @@ bool aiGiveObjectToChr(void) if (obj->prop->parent) { objDetach(obj->prop); } else { - func0f065c44(obj->prop); + propDeregisterRooms(obj->prop); propDelist(obj->prop); propDisable(obj->prop); } @@ -5454,7 +5454,7 @@ bool aiDisableChr(void) struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]); if (chr && chr->prop && chr->model) { - func0f065c44(chr->prop); + propDeregisterRooms(chr->prop); propDelist(chr->prop); propDisable(chr->prop); } @@ -5508,7 +5508,7 @@ bool aiDisableObj(void) if (obj->prop->parent) { objDetach(obj->prop); } else { - func0f065c44(obj->prop); + propDeregisterRooms(obj->prop); propDelist(obj->prop); propDisable(obj->prop); } @@ -5517,7 +5517,7 @@ bool aiDisableObj(void) if (obj->prop->parent) { objDetach(obj->prop); } else { - func0f065c44(obj->prop); + propDeregisterRooms(obj->prop); propDelist(obj->prop); propDisable(obj->prop); } @@ -10849,7 +10849,7 @@ glabel ai0172 /* f05cad0: 24010004 */ addiu $at,$zero,0x4 /* f05cad4: 5521000b */ bnel $t1,$at,.L0f05cb04 /* f05cad8: 8faa0024 */ lw $t2,0x24($sp) -/* f05cadc: 0fc19711 */ jal func0f065c44 +/* f05cadc: 0fc19711 */ jal propDeregisterRooms /* f05cae0: 02002025 */ or $a0,$s0,$zero /* f05cae4: 0fc18171 */ jal propDelist /* f05cae8: 02002025 */ or $a0,$s0,$zero @@ -10881,7 +10881,7 @@ glabel ai0172 // g_Vars.chrdata->gunprop = NULL; // // if (prop && prop->obj && prop->parent == NULL && prop->type == PROPTYPE_WEAPON) { -// func0f065c44(prop); +// propDeregisterRooms(prop); // propDelist(prop); // propDisable(prop); // chrEquipWeapon(prop->obj, g_Vars.chrdata); diff --git a/src/game/game_00c240.c b/src/game/game_00c240.c index a69b084f3..ed8835d3f 100644 --- a/src/game/game_00c240.c +++ b/src/game/game_00c240.c @@ -29,7 +29,7 @@ void gvarsInitProps(void) g_Vars.props[i].next = &g_Vars.props[i + 1]; } - func0f00c390(); + gvarsInitRoomProps(); if (g_Vars.normmplayerisrunning) { g_Vars.numpropstates = 4; @@ -53,23 +53,23 @@ void gvarsInitProps(void) } } -void func0f00c390(void) +void gvarsInitRoomProps(void) { s32 i; s32 j; - var8009cda0 = malloc(ALIGN16(g_Vars.roomcount * 2), MEMPOOL_STAGE); - var8009cda4 = malloc(256 * sizeof(struct var8009cda4), MEMPOOL_STAGE); + g_RoomPropListChunkIndexes = malloc(ALIGN16(g_Vars.roomcount * sizeof(s16)), MEMPOOL_STAGE); + g_RoomPropListChunks = malloc(256 * sizeof(struct roomproplistchunk), MEMPOOL_STAGE); for (i = 0; i < g_Vars.roomcount; i++) { - var8009cda0[i] = -1; + g_RoomPropListChunkIndexes[i] = -1; } for (i = 0; i < 256; i++) { - var8009cda4[i].propnums[0] = -2; + g_RoomPropListChunks[i].propnums[0] = -2; - for (j = 1; j < ARRAYCOUNT(var8009cda4[i].propnums); j++) { - var8009cda4[i].propnums[j] = -1; + for (j = 1; j < ARRAYCOUNT(g_RoomPropListChunks[i].propnums); j++) { + g_RoomPropListChunks[i].propnums[j] = -1; } } } diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index 3fd21c353..5d3191db4 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -3670,4 +3670,3 @@ void setupParseObjects(s32 stagenum) stageAllocateBgChrs(); } -//#endif diff --git a/src/game/game_011110.c b/src/game/game_011110.c index b29b274b2..b8db5e80e 100644 --- a/src/game/game_011110.c +++ b/src/game/game_011110.c @@ -1153,7 +1153,7 @@ glabel var7f1a827c /* f012294: 8d4e00bc */ lw $t6,0xbc($t2) /* f012298: e5c20010 */ swc1 $f2,0x10($t6) /* f01229c: 8e2b0284 */ lw $t3,0x284($s1) -/* f0122a0: 0fc197b5 */ jal func0f065c44 +/* f0122a0: 0fc197b5 */ jal propDeregisterRooms /* f0122a4: 8d6400bc */ lw $a0,0xbc($t3) /* f0122a8: 8e2d0284 */ lw $t5,0x284($s1) /* f0122ac: 87a9008c */ lh $t1,0x8c($sp) @@ -1974,7 +1974,7 @@ glabel var7f1a827c /* f012270: 8d4e00bc */ lw $t6,0xbc($t2) /* f012274: e5c20010 */ swc1 $f2,0x10($t6) /* f012278: 8e2b0284 */ lw $t3,0x284($s1) -/* f01227c: 0fc19711 */ jal func0f065c44 +/* f01227c: 0fc19711 */ jal propDeregisterRooms /* f012280: 8d6400bc */ lw $a0,0xbc($t3) /* f012284: 8e2d0284 */ lw $t5,0x284($s1) /* f012288: 87a9008c */ lh $t1,0x8c($sp) @@ -2787,7 +2787,7 @@ glabel var7f1a827c /* f011f94: 8d4e00bc */ lw $t6,0xbc($t2) /* f011f98: e5c20010 */ swc1 $f2,0x10($t6) /* f011f9c: 8e2b0284 */ lw $t3,0x284($s1) -/* f011fa0: 0fc193ab */ jal func0f065c44 +/* f011fa0: 0fc193ab */ jal propDeregisterRooms /* f011fa4: 8d6400bc */ lw $a0,0xbc($t3) /* f011fa8: 8e2d0284 */ lw $t5,0x284($s1) /* f011fac: 87a9008c */ lh $t1,0x8c($sp) @@ -3227,7 +3227,7 @@ glabel var7f1a827c // g_Vars.currentplayer->bondprevpos.z = (tmp = pos.z); // g_Vars.currentplayer->prop->pos.z = tmp; // -// func0f065c44(g_Vars.currentplayer->prop); +// propDeregisterRooms(g_Vars.currentplayer->prop); // // g_Vars.currentplayer->prop->rooms[0] = rooms[0]; // g_Vars.currentplayer->prop->rooms[1] = -1; diff --git a/src/game/game_091e10.c b/src/game/game_091e10.c index 9ba69c4f5..8d7165d2e 100644 --- a/src/game/game_091e10.c +++ b/src/game/game_091e10.c @@ -302,9 +302,9 @@ void func0f09233c(struct defaultobj *obj, struct coord *pos, f32 *realrot, s16 * void func0f0923d4(struct defaultobj *obj) { - func0f065c44(obj->prop); + propDeregisterRooms(obj->prop); func0f09233c(obj, &obj->prop->pos, obj->realrot, obj->prop->rooms); - func0f065cb0(obj->prop); + propRegisterRooms(obj->prop); } struct defaultobj *setupCommandGetObject(u32 cmdindex) diff --git a/src/game/game_097ba0.c b/src/game/game_097ba0.c index 7d1db9062..d16a86e45 100644 --- a/src/game/game_097ba0.c +++ b/src/game/game_097ba0.c @@ -12359,7 +12359,7 @@ void func0f09f848(s32 handnum) func00015f04(obj->model->scale, &mtx); func0f06a580(obj, &hand->muzzlepos, &mtx, playerprop->rooms); - func0f065c44(objprop); + propDeregisterRooms(objprop); } model->matrices = gfxAllocate(model->filedata->nummatrices * sizeof(Mtxf)); diff --git a/src/game/game_0b69d0.c b/src/game/game_0b69d0.c index 94aef1d27..a97f0029a 100644 --- a/src/game/game_0b69d0.c +++ b/src/game/game_0b69d0.c @@ -735,7 +735,7 @@ glabel var7f1ad568 /* f0b74ec: 8d2a00bc */ lw $t2,0xbc($t1) /* f0b74f0: e5420010 */ swc1 $f2,0x10($t2) /* f0b74f4: 8e4b0284 */ lw $t3,0x284($s2) -/* f0b74f8: 0fc19711 */ jal func0f065c44 +/* f0b74f8: 0fc19711 */ jal propDeregisterRooms /* f0b74fc: 8d6400bc */ lw $a0,0xbc($t3) /* f0b7500: 8e4d0284 */ lw $t5,0x284($s2) /* f0b7504: 87ac00fc */ lh $t4,0xfc($sp) @@ -1008,7 +1008,7 @@ glabel var7f1ad568 // g_Vars.currentplayer->bondprevpos.z = pos.z; // g_Vars.currentplayer->prop->pos.z = pos.z; // -// func0f065c44(g_Vars.currentplayer->prop); +// propDeregisterRooms(g_Vars.currentplayer->prop); // // g_Vars.currentplayer->prop->rooms[0] = rooms[0]; // g_Vars.currentplayer->prop->rooms[1] = -1; @@ -1366,7 +1366,7 @@ bool currentPlayerAssumeChrForAnti(struct chrdata *hostchr, bool force) g_Vars.currentplayer->bond2.width = hostchr->chrwidth; func0f020d44(hostprop, true); - func0f065c44(hostprop); + propDeregisterRooms(hostprop); propDelist(hostprop); propDisable(hostprop); propFree(hostprop); diff --git a/src/game/prop.c b/src/game/prop.c index bec958fd5..fd509e4a2 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -38,8 +38,8 @@ #include "data.h" #include "types.h" -s16 *var8009cda0; -struct var8009cda4 *var8009cda4; +s16 *g_RoomPropListChunkIndexes; +struct roomproplistchunk *g_RoomPropListChunks; struct prop *var8009cda8; u32 var8009cdac; u32 var8009cdb0; @@ -2542,24 +2542,24 @@ void propExecuteTickOperation(struct prop *prop, s32 op) obj->hidden &= ~OBJHFLAG_REAPABLE; obj->hidden2 &= ~OBJH2FLAG_40; - func0f065c44(prop); + propDeregisterRooms(prop); propDisable(prop); if (!prop->active) { propUnpause(prop); } } else { - func0f065c44(prop); + propDeregisterRooms(prop); propDelist(prop); propDisable(prop); propFree(prop); } } else if (op == TICKOP_DISABLE) { - func0f065c44(prop); + propDeregisterRooms(prop); propDelist(prop); propDisable(prop); } else if (op == TICKOP_GIVETOPLAYER) { - func0f065c44(prop); + propDeregisterRooms(prop); propDelist(prop); propDisable(prop); objDetach(prop); @@ -7329,13 +7329,13 @@ glabel arrayIntersects /* f0658e4: 00000000 */ nop ); -bool func0f0658e8(s16 propnum, s32 arg1) +bool propTryAddToChunk(s16 propnum, s32 chunkindex) { s32 i; for (i = 0; i < 7; i++) { - if (var8009cda4[arg1].propnums[i] < 0) { - var8009cda4[arg1].propnums[i] = propnum; + if (g_RoomPropListChunks[chunkindex].propnums[i] < 0) { + g_RoomPropListChunks[chunkindex].propnums[i] = propnum; return true; } } @@ -7343,21 +7343,21 @@ bool func0f0658e8(s16 propnum, s32 arg1) return false; } -s32 func0f06593c(s32 room, s32 arg1) +s32 roomAllocatePropListChunk(s32 room, s32 prevchunkindex) { s32 i; s32 j; for (i = 0; i < 256; i++) { - if (var8009cda4[i].propnums[0] == -2) { + if (g_RoomPropListChunks[i].propnums[0] == -2) { for (j = 0; j < 8; j++) { - var8009cda4[i].propnums[j] = -1; + g_RoomPropListChunks[i].propnums[j] = -1; } - if (arg1 >= 0) { - var8009cda4[arg1].propnums[7] = i; + if (prevchunkindex >= 0) { + g_RoomPropListChunks[prevchunkindex].propnums[7] = i; } else { - var8009cda0[room] = i; + g_RoomPropListChunkIndexes[room] = i; } return i; @@ -7367,94 +7367,110 @@ s32 func0f06593c(s32 room, s32 arg1) return -1; } -void func0f0659e4(struct prop *prop, s16 room) +void propRegisterRoom(struct prop *prop, s16 room) { s32 prev = -1; s32 i; if (room >= 0 && room < g_Vars.roomcount) { - s32 value = var8009cda0[room]; + // Find which chunk to start at + s32 chunkindex = g_RoomPropListChunkIndexes[room]; s16 propnum = prop - g_Vars.props; - for (i = 0; value >= 0; i++) { - if (func0f0658e8(propnum, value)) { + for (i = 0; chunkindex >= 0; i++) { + if (propTryAddToChunk(propnum, chunkindex)) { return; } - prev = value; - value = var8009cda4[value].propnums[7]; + prev = chunkindex; + chunkindex = g_RoomPropListChunks[chunkindex].propnums[7]; } - value = func0f06593c(room, prev); + // Allocate a new chunk + chunkindex = roomAllocatePropListChunk(room, prev); - if (value >= 0) { - func0f0658e8(propnum, value); + if (chunkindex >= 0) { + propTryAddToChunk(propnum, chunkindex); } } } -void func0f065ae0(struct prop *prop, s16 room) +void propDeregisterRoom(struct prop *prop, s16 room) { bool removed = false; s32 prev = -1; if (room >= 0 && room < g_Vars.roomcount) { - s32 value = var8009cda0[room]; + // Find which chunk to start at + s32 chunkindex = g_RoomPropListChunkIndexes[room]; s16 propnum = prop - g_Vars.props; - while (value >= 0) { + while (chunkindex >= 0) { bool populated = false; s32 j; + // Iterate propnums in this chunk for (j = 0; j < 7; j++) { - if (var8009cda4[value].propnums[j] == propnum) { - var8009cda4[value].propnums[j] = -1; + if (g_RoomPropListChunks[chunkindex].propnums[j] == propnum) { + g_RoomPropListChunks[chunkindex].propnums[j] = -1; removed = true; - } else if (!populated && var8009cda4[value].propnums[j] >= 0) { + } else if (!populated && g_RoomPropListChunks[chunkindex].propnums[j] >= 0) { populated = true; } } if (!populated) { - var8009cda4[value].propnums[0] = -2; + // This chunk is empty, so it can be marked as available + g_RoomPropListChunks[chunkindex].propnums[0] = -2; if (prev >= 0) { - var8009cda4[prev].propnums[7] = var8009cda4[value].propnums[7]; + g_RoomPropListChunks[prev].propnums[7] = g_RoomPropListChunks[chunkindex].propnums[7]; } else { - var8009cda0[room] = var8009cda4[value].propnums[7]; + g_RoomPropListChunkIndexes[room] = g_RoomPropListChunks[chunkindex].propnums[7]; } } else { - prev = value; + prev = chunkindex; } if (removed) { return; } - value = var8009cda4[value].propnums[7]; + chunkindex = g_RoomPropListChunks[chunkindex].propnums[7]; } } } -void func0f065c44(struct prop *prop) +/** + * Remove a prop from the room registration system. + * The prop's rooms list is unchanged. + * + * Room registration is used to look up props by room number. + */ +void propDeregisterRooms(struct prop *prop) { s16 *rooms = prop->rooms; s16 room = *rooms; while (room != -1) { - func0f065ae0(prop, room); + propDeregisterRoom(prop, room); rooms++; room = *rooms; } } -void func0f065cb0(struct prop *prop) +/** + * Add a prop to the room registration system based on its rooms list. + * + * Room registration is used to look up props by room number. + */ +void propRegisterRooms(struct prop *prop) { s16 *rooms = prop->rooms; s16 room = *rooms; while (room != -1) { - func0f0659e4(prop, room); + propRegisterRoom(prop, room); rooms++; room = *rooms; } @@ -7537,70 +7553,66 @@ void func0f065e98(struct coord *pos, s16 *rooms, struct coord *pos2, s16 *rooms2 } } -GLOBAL_ASM( -glabel roomGetProps -/* f065f80: afa60008 */ sw $a2,0x8($sp) -/* f065f84: 84830000 */ lh $v1,0x0($a0) -/* f065f88: 240affff */ addiu $t2,$zero,-1 -/* f065f8c: 00a01025 */ or $v0,$a1,$zero -/* f065f90: 106a002e */ beq $v1,$t2,.L0f06604c -/* f065f94: 240c000e */ addiu $t4,$zero,0xe -/* f065f98: 3c0b800a */ lui $t3,%hi(var8009cda0) -/* f065f9c: 256bcda0 */ addiu $t3,$t3,%lo(var8009cda0) -/* f065fa0: 8d6e0000 */ lw $t6,0x0($t3) -.L0f065fa4: -/* f065fa4: 00037840 */ sll $t7,$v1,0x1 -/* f065fa8: 3c07800a */ lui $a3,%hi(var8009cda4) -/* f065fac: 01cfc021 */ addu $t8,$t6,$t7 -/* f065fb0: 87060000 */ lh $a2,0x0($t8) -/* f065fb4: 04c20022 */ bltzl $a2,.L0f066040 -/* f065fb8: 84830002 */ lh $v1,0x2($a0) -/* f065fbc: 8ce7cda4 */ lw $a3,%lo(var8009cda4)($a3) -/* f065fc0: 00004025 */ or $t0,$zero,$zero -.L0f065fc4: -/* f065fc4: 0006c900 */ sll $t9,$a2,0x4 -.L0f065fc8: -/* f065fc8: 00f96821 */ addu $t5,$a3,$t9 -/* f065fcc: 01a87021 */ addu $t6,$t5,$t0 -/* f065fd0: 85c30000 */ lh $v1,0x0($t6) -/* f065fd4: 25080002 */ addiu $t0,$t0,0x2 -/* f065fd8: 00a2082b */ sltu $at,$a1,$v0 -/* f065fdc: 04600010 */ bltz $v1,.L0f066020 -/* f065fe0: 00000000 */ nop -/* f065fe4: 10200008 */ beqz $at,.L0f066008 -/* f065fe8: 00a04825 */ or $t1,$a1,$zero -/* f065fec: 852f0000 */ lh $t7,0x0($t1) -.L0f065ff0: -/* f065ff0: 106f0005 */ beq $v1,$t7,.L0f066008 -/* f065ff4: 00000000 */ nop -/* f065ff8: 25290002 */ addiu $t1,$t1,0x2 -/* f065ffc: 0122082b */ sltu $at,$t1,$v0 -/* f066000: 5420fffb */ bnezl $at,.L0f065ff0 -/* f066004: 852f0000 */ lh $t7,0x0($t1) -.L0f066008: -/* f066008: 15220005 */ bne $t1,$v0,.L0f066020 -/* f06600c: 00000000 */ nop -/* f066010: a4430000 */ sh $v1,0x0($v0) -/* f066014: 3c07800a */ lui $a3,%hi(var8009cda4) -/* f066018: 24420002 */ addiu $v0,$v0,0x2 -/* f06601c: 8ce7cda4 */ lw $a3,%lo(var8009cda4)($a3) -.L0f066020: -/* f066020: 550cffe9 */ bnel $t0,$t4,.L0f065fc8 -/* f066024: 0006c900 */ sll $t9,$a2,0x4 -/* f066028: 0006c100 */ sll $t8,$a2,0x4 -/* f06602c: 00f8c821 */ addu $t9,$a3,$t8 -/* f066030: 8726000e */ lh $a2,0xe($t9) -/* f066034: 04c3ffe3 */ bgezl $a2,.L0f065fc4 -/* f066038: 00004025 */ or $t0,$zero,$zero -/* f06603c: 84830002 */ lh $v1,0x2($a0) -.L0f066040: -/* f066040: 24840002 */ addiu $a0,$a0,0x2 -/* f066044: 546affd7 */ bnel $v1,$t2,.L0f065fa4 -/* f066048: 8d6e0000 */ lw $t6,0x0($t3) -.L0f06604c: -/* f06604c: 03e00008 */ jr $ra -/* f066050: a44a0000 */ sh $t2,0x0($v0) -); +/** + * Given a list of rooms (terminated by -1), and a pointer to an empty + * allocation of propnums, populate the propnums list based on which props are + * in any of those rooms. + * + * @dangerous: The len argument is ignored, so array overflow will occur if + * there are too many props in a small area. In most (if not all) invocations, + * the caller uses an array that can hold 256 propnums, so if you can find a way + * to get 256 props in a small space without exhausing the memory of the + * console, you could potentially achieve arbitrary code execution. + */ +void roomGetProps(s16 *rooms, s16 *propnums, s32 len) +{ + s16 *writeptr = propnums; + s32 room; + s32 i; + s32 j; + + room = *rooms; + + // Iterate rooms + while (room != -1) { + // Find the chunk to start at + s32 chunkindex = g_RoomPropListChunkIndexes[room]; + + // Iterate the chunks + while (chunkindex >= 0) { + // Iterate the propnums within each chunk + for (i = 0; i < 7; i++) { + s16 propnum = g_RoomPropListChunks[chunkindex].propnums[i]; + + if (propnum >= 0) { + // Check if it's in the list already + s16 *ptr = propnums; + + while (ptr < writeptr) { + if (*ptr == propnum) { + break; + } + + ptr++; + } + + if (ptr == writeptr) { + // Prop is not in the list, so insert it + writeptr++; + writeptr[-1] = propnum; + } + } + } + + chunkindex = g_RoomPropListChunks[chunkindex].propnums[7]; + } + + rooms++; + room = *rooms; + } + + *writeptr = -1; +} GLOBAL_ASM( glabel func0f066054 @@ -7613,10 +7625,10 @@ glabel func0f066054 /* f06606c: afb00008 */ sw $s0,0x8($sp) /* f066070: 1860005c */ blez $v1,.L0f0661e4 /* f066074: 00001025 */ or $v0,$zero,$zero -/* f066078: 3c0d800a */ lui $t5,%hi(var8009cda4) -/* f06607c: 3c0c800a */ lui $t4,%hi(var8009cda0) -/* f066080: 258ccda0 */ addiu $t4,$t4,%lo(var8009cda0) -/* f066084: 25adcda4 */ addiu $t5,$t5,%lo(var8009cda4) +/* f066078: 3c0d800a */ lui $t5,%hi(g_RoomPropListChunks) +/* f06607c: 3c0c800a */ lui $t4,%hi(g_RoomPropListChunkIndexes) +/* f066080: 258ccda0 */ addiu $t4,$t4,%lo(g_RoomPropListChunkIndexes) +/* f066084: 25adcda4 */ addiu $t5,$t5,%lo(g_RoomPropListChunks) /* f066088: 00002825 */ or $a1,$zero,$zero /* f06608c: 2413000e */ addiu $s3,$zero,0xe /* f066090: 2412fffe */ addiu $s2,$zero,-2 diff --git a/src/game/propobj.c b/src/game/propobj.c index e866c0443..36817139e 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -5370,7 +5370,7 @@ void func0f06a580(struct defaultobj *obj, struct coord *pos, Mtxf *matrix, s16 * prop->pos.y = pos->y; prop->pos.z = pos->z; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(rooms, prop->rooms); func0f069c70(obj, true, true); @@ -6348,7 +6348,7 @@ void objRemove2(struct defaultobj *obj, bool freeprop, bool regen) objDetach(obj->prop); } - func0f065c44(obj->prop); + propDeregisterRooms(obj->prop); if (obj->prop->type != PROPTYPE_DOOR) { func0f089a94(true, obj->model); @@ -9279,7 +9279,7 @@ glabel var7f1aa26c /* f06d4c8: 02002025 */ or $a0,$s0,$zero /* f06d4cc: e610000c */ swc1 $f16,0xc($s0) /* f06d4d0: c7b20088 */ lwc1 $f18,0x88($sp) -/* f06d4d4: 0fc19711 */ jal func0f065c44 +/* f06d4d4: 0fc19711 */ jal propDeregisterRooms /* f06d4d8: e6120010 */ swc1 $f18,0x10($s0) /* f06d4dc: 27a40070 */ addiu $a0,$sp,0x70 /* f06d4e0: 0fc195e9 */ jal roomsCopy @@ -9530,7 +9530,7 @@ glabel var7f1aa26c /* f06d85c: 02002025 */ or $a0,$s0,$zero /* f06d860: e606000c */ swc1 $f6,0xc($s0) /* f06d864: c7a80054 */ lwc1 $f8,0x54($sp) -/* f06d868: 0fc19711 */ jal func0f065c44 +/* f06d868: 0fc19711 */ jal propDeregisterRooms /* f06d86c: e6080010 */ swc1 $f8,0x10($s0) /* f06d870: 27a40070 */ addiu $a0,$sp,0x70 /* f06d874: 0fc195e9 */ jal roomsCopy @@ -9562,7 +9562,7 @@ glabel var7f1aa26c /* f06d8d4: e7a80054 */ swc1 $f8,0x54($sp) /* f06d8d8: c7aa0050 */ lwc1 $f10,0x50($sp) /* f06d8dc: 02002025 */ or $a0,$s0,$zero -/* f06d8e0: 0fc19711 */ jal func0f065c44 +/* f06d8e0: 0fc19711 */ jal propDeregisterRooms /* f06d8e4: e60a000c */ swc1 $f10,0xc($s0) /* f06d8e8: 27a40070 */ addiu $a0,$sp,0x70 /* f06d8ec: 0fc195e9 */ jal roomsCopy @@ -9670,7 +9670,7 @@ glabel var7f1aa26c /* f06d4c8: 02002025 */ or $a0,$s0,$zero /* f06d4cc: e610000c */ swc1 $f16,0xc($s0) /* f06d4d0: c7b20088 */ lwc1 $f18,0x88($sp) -/* f06d4d4: 0fc19711 */ jal func0f065c44 +/* f06d4d4: 0fc19711 */ jal propDeregisterRooms /* f06d4d8: e6120010 */ swc1 $f18,0x10($s0) /* f06d4dc: 27a40070 */ addiu $a0,$sp,0x70 /* f06d4e0: 0fc195e9 */ jal roomsCopy @@ -9921,7 +9921,7 @@ glabel var7f1aa26c /* f06d85c: 02002025 */ or $a0,$s0,$zero /* f06d860: e606000c */ swc1 $f6,0xc($s0) /* f06d864: c7a80054 */ lwc1 $f8,0x54($sp) -/* f06d868: 0fc19711 */ jal func0f065c44 +/* f06d868: 0fc19711 */ jal propDeregisterRooms /* f06d86c: e6080010 */ swc1 $f8,0x10($s0) /* f06d870: 27a40070 */ addiu $a0,$sp,0x70 /* f06d874: 0fc195e9 */ jal roomsCopy @@ -9953,7 +9953,7 @@ glabel var7f1aa26c /* f06d8d4: e7a80054 */ swc1 $f8,0x54($sp) /* f06d8d8: c7aa0050 */ lwc1 $f10,0x50($sp) /* f06d8dc: 02002025 */ or $a0,$s0,$zero -/* f06d8e0: 0fc19711 */ jal func0f065c44 +/* f06d8e0: 0fc19711 */ jal propDeregisterRooms /* f06d8e4: e60a000c */ swc1 $f10,0xc($s0) /* f06d8e8: 27a40070 */ addiu $a0,$sp,0x70 /* f06d8ec: 0fc195e9 */ jal roomsCopy @@ -11657,7 +11657,7 @@ glabel func0f06ef44 /* f06ef98: 8e190040 */ lw $t9,0x40($s0) /* f06ef9c: 02202025 */ or $a0,$s1,$zero /* f06efa0: 37280040 */ ori $t0,$t9,0x40 -/* f06efa4: 0fc19711 */ jal func0f065c44 +/* f06efa4: 0fc19711 */ jal propDeregisterRooms /* f06efa8: ae080040 */ sw $t0,0x40($s0) /* f06efac: 0fc18171 */ jal propDelist /* f06efb0: 02202025 */ or $a0,$s1,$zero @@ -18233,7 +18233,7 @@ glabel var7f1aa31c /* f072548: 8fa400e8 */ lw $a0,0xe8($sp) /* f07254c: e4840008 */ swc1 $f4,0x8($a0) /* f072550: c7a80458 */ lwc1 $f8,0x458($sp) -/* f072554: 0fc19711 */ jal func0f065c44 +/* f072554: 0fc19711 */ jal propDeregisterRooms /* f072558: e4880010 */ swc1 $f8,0x10($a0) /* f07255c: 27a40440 */ addiu $a0,$sp,0x440 /* f072560: 0fc195e9 */ jal roomsCopy @@ -20093,7 +20093,7 @@ glabel func0f0732d4 /* f073400: c7aa008c */ lwc1 $f10,0x8c($sp) /* f073404: e60a000c */ swc1 $f10,0xc($s0) /* f073408: c7b00090 */ lwc1 $f16,0x90($sp) -/* f07340c: 0fc19711 */ jal func0f065c44 +/* f07340c: 0fc19711 */ jal propDeregisterRooms /* f073410: e6100010 */ swc1 $f16,0x10($s0) /* f073414: 02a02025 */ or $a0,$s5,$zero /* f073418: 03c02825 */ or $a1,$s8,$zero @@ -20389,7 +20389,7 @@ glabel var7f1aa3d0 /* f073818: c7a60078 */ lwc1 $f6,0x78($sp) /* f07381c: e666000c */ swc1 $f6,0xc($s3) /* f073820: c7b0007c */ lwc1 $f16,0x7c($sp) -/* f073824: 0fc19711 */ jal func0f065c44 +/* f073824: 0fc19711 */ jal propDeregisterRooms /* f073828: e6700010 */ swc1 $f16,0x10($s3) /* f07382c: 02202025 */ or $a0,$s1,$zero /* f073830: 0fc195e9 */ jal roomsCopy @@ -20846,7 +20846,7 @@ glabel var7f1aa3d0 /* f073818: c7a60078 */ lwc1 $f6,0x78($sp) /* f07381c: e666000c */ swc1 $f6,0xc($s3) /* f073820: c7b0007c */ lwc1 $f16,0x7c($sp) -/* f073824: 0fc19711 */ jal func0f065c44 +/* f073824: 0fc19711 */ jal propDeregisterRooms /* f073828: e6700010 */ swc1 $f16,0x10($s3) /* f07382c: 02202025 */ or $a0,$s1,$zero /* f073830: 0fc195e9 */ jal roomsCopy @@ -21090,7 +21090,7 @@ glabel func0f073ae8 /* f073b90: c66600c8 */ lwc1 $f6,0xc8($s3) /* f073b94: e626000c */ swc1 $f6,0xc($s1) /* f073b98: c66800cc */ lwc1 $f8,0xcc($s3) -/* f073b9c: 0fc19711 */ jal func0f065c44 +/* f073b9c: 0fc19711 */ jal propDeregisterRooms /* f073ba0: e6280010 */ swc1 $f8,0x10($s1) /* f073ba4: 02402025 */ or $a0,$s2,$zero /* f073ba8: 0fc195e9 */ jal roomsCopy @@ -21127,7 +21127,7 @@ glabel func0f073ae8 /* f073c1c: e630000c */ swc1 $f16,0xc($s1) /* f073c20: 8fa90068 */ lw $t1,0x68($sp) /* f073c24: c5320008 */ lwc1 $f18,0x8($t1) -/* f073c28: 0fc19711 */ jal func0f065c44 +/* f073c28: 0fc19711 */ jal propDeregisterRooms /* f073c2c: e6320010 */ swc1 $f18,0x10($s1) /* f073c30: 27a40034 */ addiu $a0,$sp,0x34 /* f073c34: 0fc195e9 */ jal roomsCopy @@ -23638,7 +23638,7 @@ glabel var7f1ab6dcpf /* f076264: c7a805e0 */ lwc1 $f8,0x5e0($sp) /* f076268: e648000c */ swc1 $f8,0xc($s2) /* f07626c: c7aa05e4 */ lwc1 $f10,0x5e4($sp) -/* f076270: 0fc197b5 */ jal func0f065c44 +/* f076270: 0fc197b5 */ jal propDeregisterRooms /* f076274: e64a0010 */ swc1 $f10,0x10($s2) /* f076278: 27a4013c */ addiu $a0,$sp,0x13c /* f07627c: 0fc1968d */ jal roomsCopy @@ -23680,7 +23680,7 @@ glabel var7f1ab6dcpf /* f0762f8: c7a805e0 */ lwc1 $f8,0x5e0($sp) /* f0762fc: e648000c */ swc1 $f8,0xc($s2) /* f076300: c7aa05e4 */ lwc1 $f10,0x5e4($sp) -/* f076304: 0fc197b5 */ jal func0f065c44 +/* f076304: 0fc197b5 */ jal propDeregisterRooms /* f076308: e64a0010 */ swc1 $f10,0x10($s2) /* f07630c: 27a4012c */ addiu $a0,$sp,0x12c /* f076310: 0fc1968d */ jal roomsCopy @@ -23803,7 +23803,7 @@ glabel var7f1ab6dcpf /* f0764d4: 02402025 */ move $a0,$s2 /* f0764d8: e64a000c */ swc1 $f10,0xc($s2) /* f0764dc: c7a605d0 */ lwc1 $f6,0x5d0($sp) -/* f0764e0: 0fc197b5 */ jal func0f065c44 +/* f0764e0: 0fc197b5 */ jal propDeregisterRooms /* f0764e4: e6460010 */ swc1 $f6,0x10($s2) /* f0764e8: 27a405b8 */ addiu $a0,$sp,0x5b8 /* f0764ec: 0fc1968d */ jal roomsCopy @@ -24598,7 +24598,7 @@ glabel var7f1ab6dcpf /* f077068: 264e0008 */ addiu $t6,$s2,0x8 /* f07706c: 02402025 */ move $a0,$s2 /* f077070: e6460010 */ swc1 $f6,0x10($s2) -/* f077074: 0fc197b5 */ jal func0f065c44 +/* f077074: 0fc197b5 */ jal propDeregisterRooms /* f077078: afae0070 */ sw $t6,0x70($sp) /* f07707c: 27a405b8 */ addiu $a0,$sp,0x5b8 /* f077080: 0fc1968d */ jal roomsCopy @@ -27176,7 +27176,7 @@ glabel var7f1aa438 /* f075fe0: c7a605e0 */ lwc1 $f6,0x5e0($sp) /* f075fe4: e646000c */ swc1 $f6,0xc($s2) /* f075fe8: c7a805e4 */ lwc1 $f8,0x5e4($sp) -/* f075fec: 0fc19711 */ jal func0f065c44 +/* f075fec: 0fc19711 */ jal propDeregisterRooms /* f075ff0: e6480010 */ swc1 $f8,0x10($s2) /* f075ff4: 27a4013c */ addiu $a0,$sp,0x13c /* f075ff8: 0fc195e9 */ jal roomsCopy @@ -27218,7 +27218,7 @@ glabel var7f1aa438 /* f076074: c7a605e0 */ lwc1 $f6,0x5e0($sp) /* f076078: e646000c */ swc1 $f6,0xc($s2) /* f07607c: c7a805e4 */ lwc1 $f8,0x5e4($sp) -/* f076080: 0fc19711 */ jal func0f065c44 +/* f076080: 0fc19711 */ jal propDeregisterRooms /* f076084: e6480010 */ swc1 $f8,0x10($s2) /* f076088: 27a4012c */ addiu $a0,$sp,0x12c /* f07608c: 0fc195e9 */ jal roomsCopy @@ -27341,7 +27341,7 @@ glabel var7f1aa438 /* f076250: 02402025 */ or $a0,$s2,$zero /* f076254: e648000c */ swc1 $f8,0xc($s2) /* f076258: c7a405d0 */ lwc1 $f4,0x5d0($sp) -/* f07625c: 0fc19711 */ jal func0f065c44 +/* f07625c: 0fc19711 */ jal propDeregisterRooms /* f076260: e6440010 */ swc1 $f4,0x10($s2) /* f076264: 27a405b8 */ addiu $a0,$sp,0x5b8 /* f076268: 0fc195e9 */ jal roomsCopy @@ -28130,7 +28130,7 @@ glabel var7f1aa438 /* f076dcc: 264e0008 */ addiu $t6,$s2,0x8 /* f076dd0: 02402025 */ or $a0,$s2,$zero /* f076dd4: e64a0010 */ swc1 $f10,0x10($s2) -/* f076dd8: 0fc19711 */ jal func0f065c44 +/* f076dd8: 0fc19711 */ jal propDeregisterRooms /* f076ddc: afae0070 */ sw $t6,0x70($sp) /* f076de0: 27a405b8 */ addiu $a0,$sp,0x5b8 /* f076de4: 0fc195e9 */ jal roomsCopy @@ -30679,7 +30679,7 @@ glabel var7f1aa438 /* f074d10: c7a605e0 */ lwc1 $f6,0x5e0($sp) /* f074d14: e646000c */ swc1 $f6,0xc($s2) /* f074d18: c7a805e4 */ lwc1 $f8,0x5e4($sp) -/* f074d1c: 0fc193ab */ jal func0f065c44 +/* f074d1c: 0fc193ab */ jal propDeregisterRooms /* f074d20: e6480010 */ swc1 $f8,0x10($s2) /* f074d24: 27a4013c */ addiu $a0,$sp,0x13c /* f074d28: 0fc19283 */ jal roomsCopy @@ -30721,7 +30721,7 @@ glabel var7f1aa438 /* f074da4: c7a605e0 */ lwc1 $f6,0x5e0($sp) /* f074da8: e646000c */ swc1 $f6,0xc($s2) /* f074dac: c7a805e4 */ lwc1 $f8,0x5e4($sp) -/* f074db0: 0fc193ab */ jal func0f065c44 +/* f074db0: 0fc193ab */ jal propDeregisterRooms /* f074db4: e6480010 */ swc1 $f8,0x10($s2) /* f074db8: 27a4012c */ addiu $a0,$sp,0x12c /* f074dbc: 0fc19283 */ jal roomsCopy @@ -31564,7 +31564,7 @@ glabel var7f1aa438 /* f0759f4: 264e0008 */ addiu $t6,$s2,0x8 /* f0759f8: 02402025 */ or $a0,$s2,$zero /* f0759fc: e6460010 */ swc1 $f6,0x10($s2) -/* f075a00: 0fc193ab */ jal func0f065c44 +/* f075a00: 0fc193ab */ jal propDeregisterRooms /* f075a04: afae0074 */ sw $t6,0x74($sp) /* f075a08: 27a405b8 */ addiu $a0,$sp,0x5b8 /* f075a0c: 0fc19283 */ jal roomsCopy @@ -32121,7 +32121,7 @@ glabel var7f1aa454 /* f0777cc: c6a60008 */ lwc1 $f6,0x8($s5) /* f0777d0: 46083401 */ sub.s $f16,$f6,$f8 /* f0777d4: 46105480 */ add.s $f18,$f10,$f16 -/* f0777d8: 0fc19711 */ jal func0f065c44 +/* f0777d8: 0fc19711 */ jal propDeregisterRooms /* f0777dc: e6320010 */ swc1 $f18,0x10($s1) /* f0777e0: 02602025 */ or $a0,$s3,$zero /* f0777e4: 02802825 */ or $a1,$s4,$zero @@ -32181,7 +32181,7 @@ glabel var7f1aa454 /* f0778b8: c6a40008 */ lwc1 $f4,0x8($s5) /* f0778bc: 46062401 */ sub.s $f16,$f4,$f6 /* f0778c0: 46109200 */ add.s $f8,$f18,$f16 -/* f0778c4: 0fc19711 */ jal func0f065c44 +/* f0778c4: 0fc19711 */ jal propDeregisterRooms /* f0778c8: e6280010 */ swc1 $f8,0x10($s1) /* f0778cc: 26320008 */ addiu $s2,$s1,0x8 /* f0778d0: 02403025 */ or $a2,$s2,$zero @@ -32334,7 +32334,7 @@ glabel var7f1aa454 /* f077b10: c7a4007c */ lwc1 $f4,0x7c($sp) /* f077b14: e624000c */ swc1 $f4,0xc($s1) /* f077b18: c7a60080 */ lwc1 $f6,0x80($sp) -/* f077b1c: 0fc19711 */ jal func0f065c44 +/* f077b1c: 0fc19711 */ jal propDeregisterRooms /* f077b20: e6260010 */ swc1 $f6,0x10($s1) /* f077b24: 27a40068 */ addiu $a0,$sp,0x68 /* f077b28: 0fc195e9 */ jal roomsCopy @@ -32507,7 +32507,7 @@ glabel var7f1aa454 /* f0777cc: c6a60008 */ lwc1 $f6,0x8($s5) /* f0777d0: 46083401 */ sub.s $f16,$f6,$f8 /* f0777d4: 46105480 */ add.s $f18,$f10,$f16 -/* f0777d8: 0fc19711 */ jal func0f065c44 +/* f0777d8: 0fc19711 */ jal propDeregisterRooms /* f0777dc: e6320010 */ swc1 $f18,0x10($s1) /* f0777e0: 02602025 */ or $a0,$s3,$zero /* f0777e4: 02802825 */ or $a1,$s4,$zero @@ -32567,7 +32567,7 @@ glabel var7f1aa454 /* f0778b8: c6a40008 */ lwc1 $f4,0x8($s5) /* f0778bc: 46062401 */ sub.s $f16,$f4,$f6 /* f0778c0: 46109200 */ add.s $f8,$f18,$f16 -/* f0778c4: 0fc19711 */ jal func0f065c44 +/* f0778c4: 0fc19711 */ jal propDeregisterRooms /* f0778c8: e6280010 */ swc1 $f8,0x10($s1) /* f0778cc: 26320008 */ addiu $s2,$s1,0x8 /* f0778d0: 02403025 */ or $a2,$s2,$zero @@ -32720,7 +32720,7 @@ glabel var7f1aa454 /* f077b10: c7a4007c */ lwc1 $f4,0x7c($sp) /* f077b14: e624000c */ swc1 $f4,0xc($s1) /* f077b18: c7a60080 */ lwc1 $f6,0x80($sp) -/* f077b1c: 0fc19711 */ jal func0f065c44 +/* f077b1c: 0fc19711 */ jal propDeregisterRooms /* f077b20: e6260010 */ swc1 $f6,0x10($s1) /* f077b24: 27a40068 */ addiu $a0,$sp,0x68 /* f077b28: 0fc195e9 */ jal roomsCopy @@ -32890,7 +32890,7 @@ glabel var7f1aa454 /* f0763c4: c6460008 */ lwc1 $f6,0x8($s2) /* f0763c8: 46083401 */ sub.s $f16,$f6,$f8 /* f0763cc: 46105480 */ add.s $f18,$f10,$f16 -/* f0763d0: 0fc193ab */ jal func0f065c44 +/* f0763d0: 0fc193ab */ jal propDeregisterRooms /* f0763d4: e6320010 */ swc1 $f18,0x10($s1) /* f0763d8: 02a02025 */ or $a0,$s5,$zero /* f0763dc: 02c02825 */ or $a1,$s6,$zero @@ -32950,7 +32950,7 @@ glabel var7f1aa454 /* f0764b0: c6440008 */ lwc1 $f4,0x8($s2) /* f0764b4: 46062401 */ sub.s $f16,$f4,$f6 /* f0764b8: 46109200 */ add.s $f8,$f18,$f16 -/* f0764bc: 0fc193ab */ jal func0f065c44 +/* f0764bc: 0fc193ab */ jal propDeregisterRooms /* f0764c0: e6280010 */ swc1 $f8,0x10($s1) /* f0764c4: 26340008 */ addiu $s4,$s1,0x8 /* f0764c8: 02803025 */ or $a2,$s4,$zero @@ -33217,7 +33217,7 @@ void liftTick(struct prop *prop) prop->pos.y = newpos.y; prop->pos.z = newpos.z; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(newrooms, prop->rooms); func0f069c70(obj, true, true); func0f070f08(lift, lift->levelcur == lift->levelaim); @@ -39911,7 +39911,7 @@ glabel var7f1aa668 /* f07c074: c7a60158 */ lwc1 $f6,0x158($sp) /* f07c078: e486000c */ swc1 $f6,0xc($a0) /* f07c07c: c7b2015c */ lwc1 $f18,0x15c($sp) -/* f07c080: 0fc19711 */ jal func0f065c44 +/* f07c080: 0fc19711 */ jal propDeregisterRooms /* f07c084: e4920010 */ swc1 $f18,0x10($a0) /* f07c088: 27a40160 */ addiu $a0,$sp,0x160 /* f07c08c: 0fc195e9 */ jal roomsCopy @@ -40435,7 +40435,7 @@ glabel var7f1aa668 /* f07c074: c7a60158 */ lwc1 $f6,0x158($sp) /* f07c078: e486000c */ swc1 $f6,0xc($a0) /* f07c07c: c7b2015c */ lwc1 $f18,0x15c($sp) -/* f07c080: 0fc19711 */ jal func0f065c44 +/* f07c080: 0fc19711 */ jal propDeregisterRooms /* f07c084: e4920010 */ swc1 $f18,0x10($a0) /* f07c088: 27a40160 */ addiu $a0,$sp,0x160 /* f07c08c: 0fc195e9 */ jal roomsCopy @@ -40888,7 +40888,7 @@ glabel var7f1aa698 /* f07c690: c7a4009c */ lwc1 $f4,0x9c($sp) /* f07c694: e624000c */ swc1 $f4,0xc($s1) /* f07c698: c7aa00a0 */ lwc1 $f10,0xa0($sp) -/* f07c69c: 0fc19711 */ jal func0f065c44 +/* f07c69c: 0fc19711 */ jal propDeregisterRooms /* f07c6a0: e62a0010 */ swc1 $f10,0x10($s1) /* f07c6a4: 27a40050 */ addiu $a0,$sp,0x50 /* f07c6a8: 0fc195e9 */ jal roomsCopy @@ -41365,7 +41365,7 @@ glabel var7f1aa698 /* f07c690: c7a4009c */ lwc1 $f4,0x9c($sp) /* f07c694: e624000c */ swc1 $f4,0xc($s1) /* f07c698: c7aa00a0 */ lwc1 $f10,0xa0($sp) -/* f07c69c: 0fc19711 */ jal func0f065c44 +/* f07c69c: 0fc19711 */ jal propDeregisterRooms /* f07c6a0: e62a0010 */ swc1 $f10,0x10($s1) /* f07c6a4: 27a40050 */ addiu $a0,$sp,0x50 /* f07c6a8: 0fc195e9 */ jal roomsCopy @@ -41841,7 +41841,7 @@ glabel var7f1aa698 /* f07b13c: c7a6009c */ lwc1 $f6,0x9c($sp) /* f07b140: e626000c */ swc1 $f6,0xc($s1) /* f07b144: c7b200a0 */ lwc1 $f18,0xa0($sp) -/* f07b148: 0fc193ab */ jal func0f065c44 +/* f07b148: 0fc193ab */ jal propDeregisterRooms /* f07b14c: e6320010 */ swc1 $f18,0x10($s1) /* f07b150: 27a40050 */ addiu $a0,$sp,0x50 /* f07b154: 0fc19283 */ jal roomsCopy @@ -42070,7 +42070,7 @@ glabel var7f1aa698 // chopperprop->pos.y = sp98.y; // chopperprop->pos.z = sp98.z; // -// func0f065c44(chopperprop); +// propDeregisterRooms(chopperprop); // roomsCopy(sp50, chopperprop->rooms); // func0f069c70(obj, false, true); // @@ -42888,7 +42888,7 @@ glabel var7f1aa6e4 /* f07d484: c7a401c4 */ lwc1 $f4,0x1c4($sp) /* f07d488: e484000c */ swc1 $f4,0xc($a0) /* f07d48c: c7aa01c8 */ lwc1 $f10,0x1c8($sp) -/* f07d490: 0fc19711 */ jal func0f065c44 +/* f07d490: 0fc19711 */ jal propDeregisterRooms /* f07d494: e48a0010 */ swc1 $f10,0x10($a0) /* f07d498: 27a401b0 */ addiu $a0,$sp,0x1b0 /* f07d49c: 0fc195e9 */ jal roomsCopy @@ -43575,7 +43575,7 @@ glabel var7f1aa6e4 /* f07de74: c7a60154 */ lwc1 $f6,0x154($sp) /* f07de78: e486000c */ swc1 $f6,0xc($a0) /* f07de7c: c7a80158 */ lwc1 $f8,0x158($sp) -/* f07de80: 0fc19711 */ jal func0f065c44 +/* f07de80: 0fc19711 */ jal propDeregisterRooms /* f07de84: e4880010 */ swc1 $f8,0x10($a0) /* f07de88: 27a40140 */ addiu $a0,$sp,0x140 /* f07de8c: 0fc195e9 */ jal roomsCopy @@ -43854,7 +43854,7 @@ glabel var7f1aa6e4 /* f07d484: c7a401c4 */ lwc1 $f4,0x1c4($sp) /* f07d488: e484000c */ swc1 $f4,0xc($a0) /* f07d48c: c7aa01c8 */ lwc1 $f10,0x1c8($sp) -/* f07d490: 0fc19711 */ jal func0f065c44 +/* f07d490: 0fc19711 */ jal propDeregisterRooms /* f07d494: e48a0010 */ swc1 $f10,0x10($a0) /* f07d498: 27a401b0 */ addiu $a0,$sp,0x1b0 /* f07d49c: 0fc195e9 */ jal roomsCopy @@ -44541,7 +44541,7 @@ glabel var7f1aa6e4 /* f07de74: c7a60154 */ lwc1 $f6,0x154($sp) /* f07de78: e486000c */ swc1 $f6,0xc($a0) /* f07de7c: c7a80158 */ lwc1 $f8,0x158($sp) -/* f07de80: 0fc19711 */ jal func0f065c44 +/* f07de80: 0fc19711 */ jal propDeregisterRooms /* f07de84: e4880010 */ swc1 $f8,0x10($a0) /* f07de88: 27a40140 */ addiu $a0,$sp,0x140 /* f07de8c: 0fc195e9 */ jal roomsCopy @@ -44818,7 +44818,7 @@ glabel var7f1aa6e0 /* f07bf30: c7a401c4 */ lwc1 $f4,0x1c4($sp) /* f07bf34: e484000c */ swc1 $f4,0xc($a0) /* f07bf38: c7aa01c8 */ lwc1 $f10,0x1c8($sp) -/* f07bf3c: 0fc193ab */ jal func0f065c44 +/* f07bf3c: 0fc193ab */ jal propDeregisterRooms /* f07bf40: e48a0010 */ swc1 $f10,0x10($a0) /* f07bf44: 27a401b0 */ addiu $a0,$sp,0x1b0 /* f07bf48: 0fc19283 */ jal roomsCopy @@ -45491,7 +45491,7 @@ glabel var7f1aa6e0 /* f07c8ec: c7a40154 */ lwc1 $f4,0x154($sp) /* f07c8f0: e484000c */ swc1 $f4,0xc($a0) /* f07c8f4: c7aa0158 */ lwc1 $f10,0x158($sp) -/* f07c8f8: 0fc193ab */ jal func0f065c44 +/* f07c8f8: 0fc193ab */ jal propDeregisterRooms /* f07c8fc: e48a0010 */ swc1 $f10,0x10($a0) /* f07c900: 27a40140 */ addiu $a0,$sp,0x140 /* f07c904: 0fc19283 */ jal roomsCopy @@ -45666,7 +45666,7 @@ glabel var7f1aa6e0 // prop->pos.y = sp1c0.y; // prop->pos.z = sp1c0.z; // -// func0f065c44(prop); +// propDeregisterRooms(prop); // roomsCopy(sp1b0, prop->rooms); // func0f069c70(&hovercar->base, false, true); // } @@ -45901,7 +45901,7 @@ glabel var7f1aa6e0 // prop->pos.y = sp150.y; // prop->pos.z = sp150.z; // -// func0f065c44(prop); +// propDeregisterRooms(prop); // roomsCopy(sp140, prop->rooms); // // hovercar->roty = sp190; @@ -46243,7 +46243,7 @@ u32 func0f07e474(struct prop *prop) // 1 second left - time to start fading in if (obj->damage == 0 && (obj->hidden2 & OBJH2FLAG_40) == 0) { if (obj->flags & OBJFLAG_00008000) { - func0f065c44(prop); + propDeregisterRooms(prop); propDelist(prop); obj->hidden &= ~OBJHFLAG_00000800; cmdoffset = setupGetCommandOffset(prop); @@ -46428,7 +46428,7 @@ s32 objTick(struct prop *prop) prop->pos.y = sp400.y; prop->pos.z = sp400.z; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(sp384, prop->rooms); if (obj->type == OBJTYPE_HOVERPROP) { @@ -46540,7 +46540,7 @@ s32 objTick(struct prop *prop) prop->pos.x = sp236.x; prop->pos.z = sp236.z; - func0f065c44(prop); + propDeregisterRooms(prop); roomsCopy(sp220, prop->rooms); if (sp148 <= sp144) { @@ -54189,7 +54189,7 @@ glabel var7f1aa978 /* f083cd8: c7a40124 */ lwc1 $f4,0x124($sp) /* f083cdc: e484000c */ swc1 $f4,0xc($a0) /* f083ce0: c7a80128 */ lwc1 $f8,0x128($sp) -/* f083ce4: 0fc19711 */ jal func0f065c44 +/* f083ce4: 0fc19711 */ jal propDeregisterRooms /* f083ce8: e4880010 */ swc1 $f8,0x10($a0) /* f083cec: 8fa50140 */ lw $a1,0x140($sp) /* f083cf0: 27a400d4 */ addiu $a0,$sp,0xd4 @@ -55162,7 +55162,7 @@ glabel var7f1aa978 /* f083cd8: c7a40124 */ lwc1 $f4,0x124($sp) /* f083cdc: e484000c */ swc1 $f4,0xc($a0) /* f083ce0: c7a80128 */ lwc1 $f8,0x128($sp) -/* f083ce4: 0fc19711 */ jal func0f065c44 +/* f083ce4: 0fc19711 */ jal propDeregisterRooms /* f083ce8: e4880010 */ swc1 $f8,0x10($a0) /* f083cec: 8fa50140 */ lw $a1,0x140($sp) /* f083cf0: 27a400d4 */ addiu $a0,$sp,0xd4 @@ -67700,7 +67700,7 @@ glabel var7f1aaf78 /* f08d70c: c4c60004 */ lwc1 $f6,0x4($a2) /* f08d710: e486000c */ swc1 $f6,0xc($a0) /* f08d714: c4ca0008 */ lwc1 $f10,0x8($a2) -/* f08d718: 0fc19711 */ jal func0f065c44 +/* f08d718: 0fc19711 */ jal propDeregisterRooms /* f08d71c: e48a0010 */ swc1 $f10,0x10($a0) /* f08d720: 8fa5007c */ lw $a1,0x7c($sp) /* f08d724: 27a40028 */ addiu $a0,$sp,0x28 diff --git a/src/include/bss.h b/src/include/bss.h index 05412785a..21bfe03be 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -103,8 +103,8 @@ extern s16 *g_ChrIndexes; extern s32 g_NumActiveHeadsPerGender; extern u32 g_ActiveMaleHeads[8]; extern u32 g_ActiveFemaleHeads[8]; -extern s16 *var8009cda0; -extern struct var8009cda4 *var8009cda4; +extern s16 *g_RoomPropListChunkIndexes; +extern struct roomproplistchunk *g_RoomPropListChunks; extern struct prop *var8009cda8; extern u32 var8009cdac; extern u32 var8009cdb0; diff --git a/src/include/game/game_00c240.h b/src/include/game/game_00c240.h index 89044fbea..4d5ed915a 100644 --- a/src/include/game/game_00c240.h +++ b/src/include/game/game_00c240.h @@ -5,6 +5,6 @@ #include "types.h" void gvarsInitProps(void); -void func0f00c390(void); +void gvarsInitRoomProps(void); #endif diff --git a/src/include/game/prop.h b/src/include/game/prop.h index 942c26b98..0fca2867f 100644 --- a/src/include/game/prop.h +++ b/src/include/game/prop.h @@ -45,18 +45,18 @@ bool propIsOfCdType(struct prop *prop, u32 types); void roomsCopy(s16 *srcrooms, s16 *dstrooms); void roomsAppend(s16 *newrooms, s16 *rooms, u32 arg2); bool arrayIntersects(s16 *a, s16 *b); -bool func0f0658e8(s16 propnum, s32 arg1); -s32 func0f06593c(s32 room, s32 arg1); -void func0f0659e4(struct prop *prop, s16 room); -void func0f065ae0(struct prop *prop, s16 room); -void func0f065c44(struct prop *prop); -void func0f065cb0(struct prop *prop); +bool propTryAddToChunk(s16 propnum, s32 chunkindex); +s32 roomAllocatePropListChunk(s32 room, s32 arg1); +void propRegisterRoom(struct prop *prop, s16 room); +void propDeregisterRoom(struct prop *prop, s16 room); +void propDeregisterRooms(struct prop *prop); +void propRegisterRooms(struct prop *prop); void func0f065d1c(struct coord *pos, s16 *rooms, struct coord *newpos, s16 *newrooms, s16 *morerooms, u32 arg5); void func0f065dd8(struct coord *pos, s16 *rooms, struct coord *newpos, s16 *newrooms); void func0f065dfc(struct coord *pos, s16 *rooms, struct coord *newpos, s16 *newrooms, s16 *morerooms, u32 arg5); void func0f065e74(struct coord *pos, s16 *rooms, struct coord *newpos, s16 *newrooms); void func0f065e98(struct coord *pos, s16 *rooms, struct coord *pos2, s16 *rooms2); -void roomGetProps(s16 *room, s16 *propnums, u32 size); +void roomGetProps(s16 *room, s16 *propnums, s32 len); u32 func0f066054(void); void propGetBbox(struct prop *prop, f32 *width, f32 *ymax, f32 *ymin); bool propUpdateGeometry(struct prop *prop, u8 **start, u8 **end); diff --git a/src/include/types.h b/src/include/types.h index 44f9d7de4..d020b63e9 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6797,7 +6797,15 @@ struct var800a41b0 { /*0x78*/ u32 unk78; }; -struct var8009cda4 { +/** + * This struct is used as a pretend linked list. + * + * The final item in the propnums array is not a propnum; it's the index of the + * next chunk in the chunks array. + * + * The first item in the propnums array is -2 if this chunk is unallocated. + */ +struct roomproplistchunk { s16 propnums[8]; };