Decompile liftUpdateTiles

This commit is contained in:
Ryan Dwyer 2021-11-28 12:46:32 +10:00
parent 1c69db05b5
commit 104e7b5ec0
4 changed files with 110 additions and 287 deletions

View File

@ -3084,7 +3084,7 @@ void setupParseObjects(s32 stagenum)
lift->prevpos.y = prop->pos.y;
lift->prevpos.z = prop->pos.z;
func0f070f08(lift, true);
liftUpdateTiles(lift, true);
}
}
break;

View File

@ -4430,7 +4430,7 @@ void func0f069b4c(struct defaultobj *obj)
uVar3 = 0x23;
}
func0f070ca0(obj, ptr, uVar3, 0, rodata);
func0f070ca0(obj, ptr, uVar3, NULL, rodata);
ptr += 0x40;
}
@ -4438,7 +4438,7 @@ void func0f069b4c(struct defaultobj *obj)
rodata = modelGetPartRodata(obj->model->filedata, MODELPART_0066);
if (rodata != NULL) {
func0f070ca0(obj, ptr, 0x1c, 0, rodata);
func0f070ca0(obj, ptr, 0x1c, NULL, rodata);
}
}
}
@ -17274,279 +17274,102 @@ f32 liftGetY(struct liftobj *lift)
return y;
}
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel func0f070f08
/* f070f08: 27bdffa0 */ addiu $sp,$sp,-96
/* f070f0c: afbf0044 */ sw $ra,0x44($sp)
/* f070f10: afbe0040 */ sw $s8,0x40($sp)
/* f070f14: afb7003c */ sw $s7,0x3c($sp)
/* f070f18: afb60038 */ sw $s6,0x38($sp)
/* f070f1c: afb50034 */ sw $s5,0x34($sp)
/* f070f20: afb40030 */ sw $s4,0x30($sp)
/* f070f24: afb3002c */ sw $s3,0x2c($sp)
/* f070f28: afb20028 */ sw $s2,0x28($sp)
/* f070f2c: afb10024 */ sw $s1,0x24($sp)
/* f070f30: afb00020 */ sw $s0,0x20($sp)
/* f070f34: afa50064 */ sw $a1,0x64($sp)
/* f070f38: a080005a */ sb $zero,0x5a($a0)
/* f070f3c: 00808825 */ or $s1,$a0,$zero
/* f070f40: 00009025 */ or $s2,$zero,$zero
/* f070f44: 8fb3004c */ lw $s3,0x4c($sp)
/* f070f48: 24150001 */ addiu $s5,$zero,0x1
/* f070f4c: 24160002 */ addiu $s6,$zero,0x2
/* f070f50: 24170003 */ addiu $s7,$zero,0x3
/* f070f54: 241e0004 */ addiu $s8,$zero,0x4
/* f070f58: 822f005a */ lb $t7,0x5a($s1)
.L0f070f5c:
/* f070f5c: 8e2e0044 */ lw $t6,0x44($s1)
/* f070f60: 0000a025 */ or $s4,$zero,$zero
/* f070f64: 000fc180 */ sll $t8,$t7,0x6
/* f070f68: 01d8c821 */ addu $t9,$t6,$t8
/* f070f6c: afb9005c */ sw $t9,0x5c($sp)
/* f070f70: 00008025 */ or $s0,$zero,$zero
.L0f070f74:
/* f070f74: 16400011 */ bnez $s2,.L0f070fbc
/* f070f78: 24050005 */ addiu $a1,$zero,0x5
/* f070f7c: 8e280018 */ lw $t0,0x18($s1)
/* f070f80: 2413003b */ addiu $s3,$zero,0x3b
/* f070f84: 0c006a6f */ jal modelGetPartRodata
/* f070f88: 8d040008 */ lw $a0,0x8($t0)
/* f070f8c: 14400036 */ bnez $v0,.L0f071068
/* f070f90: 00408025 */ or $s0,$v0,$zero
/* f070f94: 8e290018 */ lw $t1,0x18($s1)
/* f070f98: 00002825 */ or $a1,$zero,$zero
/* f070f9c: 0c006a6f */ jal modelGetPartRodata
/* f070fa0: 8d240008 */ lw $a0,0x8($t1)
/* f070fa4: 14400030 */ bnez $v0,.L0f071068
/* f070fa8: 0040a025 */ or $s4,$v0,$zero
/* f070fac: 0fc1a2bd */ jal objFindBboxRodata
/* f070fb0: 02202025 */ or $a0,$s1,$zero
/* f070fb4: 1000002c */ b .L0f071068
/* f070fb8: 0040a025 */ or $s4,$v0,$zero
.L0f070fbc:
/* f070fbc: 16550007 */ bne $s2,$s5,.L0f070fdc
/* f070fc0: 02a02825 */ or $a1,$s5,$zero
/* f070fc4: 8e2a0018 */ lw $t2,0x18($s1)
/* f070fc8: 24130004 */ addiu $s3,$zero,0x4
/* f070fcc: 0c006a6f */ jal modelGetPartRodata
/* f070fd0: 8d440008 */ lw $a0,0x8($t2)
/* f070fd4: 10000024 */ b .L0f071068
/* f070fd8: 00408025 */ or $s0,$v0,$zero
.L0f070fdc:
/* f070fdc: 16560007 */ bne $s2,$s6,.L0f070ffc
/* f070fe0: 02c02825 */ or $a1,$s6,$zero
/* f070fe4: 8e2b0018 */ lw $t3,0x18($s1)
/* f070fe8: 24130004 */ addiu $s3,$zero,0x4
/* f070fec: 0c006a6f */ jal modelGetPartRodata
/* f070ff0: 8d640008 */ lw $a0,0x8($t3)
/* f070ff4: 1000001c */ b .L0f071068
/* f070ff8: 00408025 */ or $s0,$v0,$zero
.L0f070ffc:
/* f070ffc: 16570007 */ bne $s2,$s7,.L0f07101c
/* f071000: 02e02825 */ or $a1,$s7,$zero
/* f071004: 8e2c0018 */ lw $t4,0x18($s1)
/* f071008: 24130004 */ addiu $s3,$zero,0x4
/* f07100c: 0c006a6f */ jal modelGetPartRodata
/* f071010: 8d840008 */ lw $a0,0x8($t4)
/* f071014: 10000014 */ b .L0f071068
/* f071018: 00408025 */ or $s0,$v0,$zero
.L0f07101c:
/* f07101c: 165e000b */ bne $s2,$s8,.L0f07104c
/* f071020: 24010005 */ addiu $at,$zero,0x5
/* f071024: 8fad0064 */ lw $t5,0x64($sp)
/* f071028: 03c02825 */ or $a1,$s8,$zero
/* f07102c: 15a0000e */ bnez $t5,.L0f071068
/* f071030: 00000000 */ nop
/* f071034: 8e2f0018 */ lw $t7,0x18($s1)
/* f071038: 24130004 */ addiu $s3,$zero,0x4
/* f07103c: 0c006a6f */ jal modelGetPartRodata
/* f071040: 8de40008 */ lw $a0,0x8($t7)
/* f071044: 10000008 */ b .L0f071068
/* f071048: 00408025 */ or $s0,$v0,$zero
.L0f07104c:
/* f07104c: 1641000a */ bne $s2,$at,.L0f071078
/* f071050: 24050006 */ addiu $a1,$zero,0x6
/* f071054: 8e2e0018 */ lw $t6,0x18($s1)
/* f071058: 2413003b */ addiu $s3,$zero,0x3b
/* f07105c: 0c006a6f */ jal modelGetPartRodata
/* f071060: 8dc40008 */ lw $a0,0x8($t6)
/* f071064: 00408025 */ or $s0,$v0,$zero
.L0f071068:
/* f071068: 16800003 */ bnez $s4,.L0f071078
/* f07106c: 26520001 */ addiu $s2,$s2,0x1
/* f071070: 1200ffc0 */ beqz $s0,.L0f070f74
/* f071074: 00000000 */ nop
.L0f071078:
/* f071078: 16800003 */ bnez $s4,.L0f071088
/* f07107c: 02202025 */ or $a0,$s1,$zero
/* f071080: 12000009 */ beqz $s0,.L0f0710a8
/* f071084: 00000000 */ nop
.L0f071088:
/* f071088: 8fa5005c */ lw $a1,0x5c($sp)
/* f07108c: 02603025 */ or $a2,$s3,$zero
/* f071090: 02803825 */ or $a3,$s4,$zero
/* f071094: 0fc1c328 */ jal func0f070ca0
/* f071098: afb00010 */ sw $s0,0x10($sp)
/* f07109c: 8238005a */ lb $t8,0x5a($s1)
/* f0710a0: 27190001 */ addiu $t9,$t8,0x1
/* f0710a4: a239005a */ sb $t9,0x5a($s1)
.L0f0710a8:
/* f0710a8: 5680ffac */ bnezl $s4,.L0f070f5c
/* f0710ac: 822f005a */ lb $t7,0x5a($s1)
/* f0710b0: 5600ffaa */ bnezl $s0,.L0f070f5c
/* f0710b4: 822f005a */ lb $t7,0x5a($s1)
/* f0710b8: 8fbf0044 */ lw $ra,0x44($sp)
/* f0710bc: afb3004c */ sw $s3,0x4c($sp)
/* f0710c0: 8fb3002c */ lw $s3,0x2c($sp)
/* f0710c4: 8fb00020 */ lw $s0,0x20($sp)
/* f0710c8: 8fb10024 */ lw $s1,0x24($sp)
/* f0710cc: 8fb20028 */ lw $s2,0x28($sp)
/* f0710d0: 8fb40030 */ lw $s4,0x30($sp)
/* f0710d4: 8fb50034 */ lw $s5,0x34($sp)
/* f0710d8: 8fb60038 */ lw $s6,0x38($sp)
/* f0710dc: 8fb7003c */ lw $s7,0x3c($sp)
/* f0710e0: 8fbe0040 */ lw $s8,0x40($sp)
/* f0710e4: 03e00008 */ jr $ra
/* f0710e8: 27bd0060 */ addiu $sp,$sp,0x60
);
#else
GLOBAL_ASM(
glabel func0f070f08
/* f070f08: 27bdffa0 */ addiu $sp,$sp,-96
/* f070f0c: afbf0044 */ sw $ra,0x44($sp)
/* f070f10: afbe0040 */ sw $s8,0x40($sp)
/* f070f14: afb7003c */ sw $s7,0x3c($sp)
/* f070f18: afb60038 */ sw $s6,0x38($sp)
/* f070f1c: afb50034 */ sw $s5,0x34($sp)
/* f070f20: afb40030 */ sw $s4,0x30($sp)
/* f070f24: afb3002c */ sw $s3,0x2c($sp)
/* f070f28: afb20028 */ sw $s2,0x28($sp)
/* f070f2c: afb10024 */ sw $s1,0x24($sp)
/* f070f30: afb00020 */ sw $s0,0x20($sp)
/* f070f34: afa50064 */ sw $a1,0x64($sp)
/* f070f38: a080005a */ sb $zero,0x5a($a0)
/* f070f3c: 00808825 */ or $s1,$a0,$zero
/* f070f40: 00009025 */ or $s2,$zero,$zero
/* f070f44: 8fb3004c */ lw $s3,0x4c($sp)
/* f070f48: 24150001 */ addiu $s5,$zero,0x1
/* f070f4c: 24160002 */ addiu $s6,$zero,0x2
/* f070f50: 24170003 */ addiu $s7,$zero,0x3
/* f070f54: 241e0004 */ addiu $s8,$zero,0x4
/* f070f58: 822f005a */ lb $t7,0x5a($s1)
.L0f070f5c:
/* f070f5c: 8e2e0044 */ lw $t6,0x44($s1)
/* f070f60: 0000a025 */ or $s4,$zero,$zero
/* f070f64: 000fc180 */ sll $t8,$t7,0x6
/* f070f68: 01d8c821 */ addu $t9,$t6,$t8
/* f070f6c: afb9005c */ sw $t9,0x5c($sp)
/* f070f70: 00008025 */ or $s0,$zero,$zero
.L0f070f74:
/* f070f74: 16400011 */ bnez $s2,.L0f070fbc
/* f070f78: 24050005 */ addiu $a1,$zero,0x5
/* f070f7c: 8e280018 */ lw $t0,0x18($s1)
/* f070f80: 2413003b */ addiu $s3,$zero,0x23
/* f070f84: 0c006a6f */ jal modelGetPartRodata
/* f070f88: 8d040008 */ lw $a0,0x8($t0)
/* f070f8c: 14400036 */ bnez $v0,.L0f071068
/* f070f90: 00408025 */ or $s0,$v0,$zero
/* f070f94: 8e290018 */ lw $t1,0x18($s1)
/* f070f98: 00002825 */ or $a1,$zero,$zero
/* f070f9c: 0c006a6f */ jal modelGetPartRodata
/* f070fa0: 8d240008 */ lw $a0,0x8($t1)
/* f070fa4: 14400030 */ bnez $v0,.L0f071068
/* f070fa8: 0040a025 */ or $s4,$v0,$zero
/* f070fac: 0fc1a2bd */ jal objFindBboxRodata
/* f070fb0: 02202025 */ or $a0,$s1,$zero
/* f070fb4: 1000002c */ b .L0f071068
/* f070fb8: 0040a025 */ or $s4,$v0,$zero
.L0f070fbc:
/* f070fbc: 16550007 */ bne $s2,$s5,.L0f070fdc
/* f070fc0: 02a02825 */ or $a1,$s5,$zero
/* f070fc4: 8e2a0018 */ lw $t2,0x18($s1)
/* f070fc8: 24130004 */ addiu $s3,$zero,0x4
/* f070fcc: 0c006a6f */ jal modelGetPartRodata
/* f070fd0: 8d440008 */ lw $a0,0x8($t2)
/* f070fd4: 10000024 */ b .L0f071068
/* f070fd8: 00408025 */ or $s0,$v0,$zero
.L0f070fdc:
/* f070fdc: 16560007 */ bne $s2,$s6,.L0f070ffc
/* f070fe0: 02c02825 */ or $a1,$s6,$zero
/* f070fe4: 8e2b0018 */ lw $t3,0x18($s1)
/* f070fe8: 24130004 */ addiu $s3,$zero,0x4
/* f070fec: 0c006a6f */ jal modelGetPartRodata
/* f070ff0: 8d640008 */ lw $a0,0x8($t3)
/* f070ff4: 1000001c */ b .L0f071068
/* f070ff8: 00408025 */ or $s0,$v0,$zero
.L0f070ffc:
/* f070ffc: 16570007 */ bne $s2,$s7,.L0f07101c
/* f071000: 02e02825 */ or $a1,$s7,$zero
/* f071004: 8e2c0018 */ lw $t4,0x18($s1)
/* f071008: 24130004 */ addiu $s3,$zero,0x4
/* f07100c: 0c006a6f */ jal modelGetPartRodata
/* f071010: 8d840008 */ lw $a0,0x8($t4)
/* f071014: 10000014 */ b .L0f071068
/* f071018: 00408025 */ or $s0,$v0,$zero
.L0f07101c:
/* f07101c: 165e000b */ bne $s2,$s8,.L0f07104c
/* f071020: 24010005 */ addiu $at,$zero,0x5
/* f071024: 8fad0064 */ lw $t5,0x64($sp)
/* f071028: 03c02825 */ or $a1,$s8,$zero
/* f07102c: 15a0000e */ bnez $t5,.L0f071068
/* f071030: 00000000 */ nop
/* f071034: 8e2f0018 */ lw $t7,0x18($s1)
/* f071038: 24130004 */ addiu $s3,$zero,0x4
/* f07103c: 0c006a6f */ jal modelGetPartRodata
/* f071040: 8de40008 */ lw $a0,0x8($t7)
/* f071044: 10000008 */ b .L0f071068
/* f071048: 00408025 */ or $s0,$v0,$zero
.L0f07104c:
/* f07104c: 1641000a */ bne $s2,$at,.L0f071078
/* f071050: 24050006 */ addiu $a1,$zero,0x6
/* f071054: 8e2e0018 */ lw $t6,0x18($s1)
/* f071058: 2413003b */ addiu $s3,$zero,0x23
/* f07105c: 0c006a6f */ jal modelGetPartRodata
/* f071060: 8dc40008 */ lw $a0,0x8($t6)
/* f071064: 00408025 */ or $s0,$v0,$zero
.L0f071068:
/* f071068: 16800003 */ bnez $s4,.L0f071078
/* f07106c: 26520001 */ addiu $s2,$s2,0x1
/* f071070: 1200ffc0 */ beqz $s0,.L0f070f74
/* f071074: 00000000 */ nop
.L0f071078:
/* f071078: 16800003 */ bnez $s4,.L0f071088
/* f07107c: 02202025 */ or $a0,$s1,$zero
/* f071080: 12000009 */ beqz $s0,.L0f0710a8
/* f071084: 00000000 */ nop
.L0f071088:
/* f071088: 8fa5005c */ lw $a1,0x5c($sp)
/* f07108c: 02603025 */ or $a2,$s3,$zero
/* f071090: 02803825 */ or $a3,$s4,$zero
/* f071094: 0fc1c328 */ jal func0f070ca0
/* f071098: afb00010 */ sw $s0,0x10($sp)
/* f07109c: 8238005a */ lb $t8,0x5a($s1)
/* f0710a0: 27190001 */ addiu $t9,$t8,0x1
/* f0710a4: a239005a */ sb $t9,0x5a($s1)
.L0f0710a8:
/* f0710a8: 5680ffac */ bnezl $s4,.L0f070f5c
/* f0710ac: 822f005a */ lb $t7,0x5a($s1)
/* f0710b0: 5600ffaa */ bnezl $s0,.L0f070f5c
/* f0710b4: 822f005a */ lb $t7,0x5a($s1)
/* f0710b8: 8fbf0044 */ lw $ra,0x44($sp)
/* f0710bc: afb3004c */ sw $s3,0x4c($sp)
/* f0710c0: 8fb3002c */ lw $s3,0x2c($sp)
/* f0710c4: 8fb00020 */ lw $s0,0x20($sp)
/* f0710c8: 8fb10024 */ lw $s1,0x24($sp)
/* f0710cc: 8fb20028 */ lw $s2,0x28($sp)
/* f0710d0: 8fb40030 */ lw $s4,0x30($sp)
/* f0710d4: 8fb50034 */ lw $s5,0x34($sp)
/* f0710d8: 8fb60038 */ lw $s6,0x38($sp)
/* f0710dc: 8fb7003c */ lw $s7,0x3c($sp)
/* f0710e0: 8fbe0040 */ lw $s8,0x40($sp)
/* f0710e4: 03e00008 */ jr $ra
/* f0710e8: 27bd0060 */ addiu $sp,$sp,0x60
);
#endif
/**
* Recalculate a lift's tile/geometry information.
*
* The lift models and the part numbers in each model are:
*
* a51_lift_control 0
* a51_lift_hangar 0
* a51_lift_store 0
* a51_lift_thinwall 0
* a51dish 0
* airbase_lift_angle 0 1 2
* airbase_lift_enclosed 0 1 2
* al_docklift 5 6
* baggagecarrier 0
* chamber 0
* ci_lift 0
* dd_liftr 0 1 2 3 4
* lift_platform 0 1
* matrix_lift 0 1 2
* ravinelift 0
* sk_lift 0
* skedarbridge 0
*
* Part 0 is the floor if rectangular
* Parts 1-3 are walls (some lifts rely on BG geometry instead)
* Part 4 is a door blocker (used by dataDyne tower lifts)
* Part 5 is the first half of the floor if non-rectangular (Deep Sea lift)
* Part 6 is the second half of the floor if non-rectangular (Deep Sea lift)
*/
void liftUpdateTiles(struct liftobj *lift, bool stationary)
{
u8 *geo;
union modelrodata *rodata;
struct modelrodata_bbox *bbox;
s32 numtiles;
u32 sp4c;
s32 i;
lift->base.numtiles = 0;
i = 0;
do {
geo = (u8 *)lift->base.unkgeo + lift->base.numtiles * 0x40;
bbox = NULL;
rodata = NULL;
do {
if (i == 0) {
sp4c = VERSION >= VERSION_NTSC_1_0 ? 0x3b : 0x23;
// Look for a non-rectangular floor with fallback to rectangular
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORNONRECT1);
if (rodata == NULL) {
union modelrodata *tmp;
tmp = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORRECT);
bbox = &tmp->bbox;
if (bbox == NULL) {
bbox = objFindBboxRodata(&lift->base);
}
}
} else if (i == 1) {
sp4c = 4;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL1);
} else if (i == 2) {
sp4c = 4;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL2);
} else if (i == 3) {
sp4c = 4;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_WALL3);
} else if (i == 4) {
// The doorblock model part exists in the dataDyne tower lifts.
// It's a tile across the door that only applies while the lift
// is moving. Without it, the player could exit the lift through
// the doorway while it's moving.
if (!stationary) {
sp4c = 4;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_DOORBLOCK);
}
} else if (i == 5) {
sp4c = VERSION >= VERSION_NTSC_1_0 ? 0x3b : 0x23;
rodata = modelGetPartRodata(lift->base.model->filedata, MODELPART_LIFT_FLOORNONRECT2);
} else {
break;
}
i++;
} while (!bbox && !rodata);
if (bbox || rodata) {
func0f070ca0(&lift->base, geo, sp4c, bbox, rodata);
lift->base.numtiles++;
}
} while (bbox || rodata);
}
#if VERSION >= VERSION_NTSC_1_0
void liftGoToStop(struct liftobj *lift, s32 stopnum)
@ -35184,7 +35007,7 @@ void liftTick(struct prop *prop)
propDeregisterRooms(prop);
roomsCopy(newrooms, prop->rooms);
func0f069c70(obj, true, true);
func0f070f08(lift, lift->levelcur == lift->levelaim);
liftUpdateTiles(lift, lift->levelcur == lift->levelaim);
platformDisplaceProps(prop, propnums, &prevpos, &prop->pos);
}
} else {
@ -50056,7 +49879,7 @@ s32 objTick(struct prop *prop)
func0f069c70(obj, true, true);
if (obj->type == OBJTYPE_LIFT) {
func0f070f08((struct liftobj *)obj, 0);
liftUpdateTiles((struct liftobj *)obj, false);
}
sp592 = true;

View File

@ -2101,13 +2101,13 @@
#define MODELPART_LASER_0037 0x0037 // position
#define MODELPART_LASER_0041 0x0041 // gundl
#define MODELPART_LASER_0042 0x0042 // toggle
#define MODELPART_LIFT_0000 0x0000 // bbox
#define MODELPART_LIFT_0001 0x0001 // type19
#define MODELPART_LIFT_0002 0x0002 // type19
#define MODELPART_LIFT_0003 0x0003 // type19
#define MODELPART_LIFT_0004 0x0004 // type19
#define MODELPART_LIFT_0005 0x0005 // type19
#define MODELPART_LIFT_0006 0x0006 // type19
#define MODELPART_LIFT_FLOORRECT 0x0000 // bbox
#define MODELPART_LIFT_WALL1 0x0001 // type19
#define MODELPART_LIFT_WALL2 0x0002 // type19
#define MODELPART_LIFT_WALL3 0x0003 // type19
#define MODELPART_LIFT_DOORBLOCK 0x0004 // type19
#define MODELPART_LIFT_FLOORNONRECT1 0x0005 // type19
#define MODELPART_LIFT_FLOORNONRECT2 0x0006 // type19
#define MODELPART_LOGO_0000 0x0000 // toggle
#define MODELPART_LOGO_0001 0x0001 // toggle
#define MODELPART_LOGO_0002 0x0002 // dl

View File

@ -138,11 +138,11 @@ void func0f07079c(struct prop *prop, bool arg1);
s32 glassCalculateOpacity(struct coord *pos, f32 xludist, f32 opadist, f32 arg3);
u32 func0f070a1c(void);
u32 func0f070bd0(void);
void func0f070ca0(struct defaultobj *obj, void *ptr, s32 arg2, s32 arg3, union modelrodata *rodata);
void func0f070ca0(struct defaultobj *obj, void *ptr, s32 arg2, struct modelrodata_bbox *bbox, union modelrodata *rodata);
void liftActivate(struct prop *prop, u8 liftnum);
struct prop *liftFindByPad(s16 padnum);
f32 liftGetY(struct liftobj *lift);
void func0f070f08(struct liftobj *lift, bool arg0);
void liftUpdateTiles(struct liftobj *lift, bool stationary);
void liftGoToStop(struct liftobj *lift, s32 stopnum);
f32 objGetHov04(struct defaultobj *obj);
void hovUpdateGround(struct defaultobj *obj, struct hov *hov, struct coord *pos, s16 *rooms, f32 matrix[3][3]);