// BehBobHmcCageDoorLoop: begin 802C263C (07D63C) .org 0x07D63C addiu sp, sp, 0xFFE8 sw s0, 0x10(sp) lui s0, 0x8036 lw s0, 0x1160(s0) lw t7, 0x14c(s0) bnez t7, GrillDoorLoop_state1 nop lw t9, 0x68(s0) lw t0, 0x88(t9) // t0 == 1 if the switch has been activated beqz t0, GrillDoorLoop_end nop beqz r0, GrillDoorLoop_increment nop GrillDoorLoop_state1: // 802C2684 addiu at, R0, 0x1 lw t5, 0x14c(s0) bne t5, at, GrillDoorLoop_end nop lw t7, 0x154(s0) // door->0x154 = timer slti at, t7, 0x40 // if (timer < 0x40) then at = 1 beqz at, GrillDoorLoop_increment nop lw t0, 0x144(s0) lw t9, 0xc8(s0) sll t2, t0, 0x8 subu t3, t9, t2 // Rotate cage door by (door->0x144) * 256 beqz r0, GrillDoorLoop_end sw t3, 0xc8(s0) GrillDoorLoop_increment: // 802C26D4 lw t4, 0x14c(s0) addiu t5, t4, 0x1 sw t5, 0x14c(s0) GrillDoorLoop_end: // 802C26E8 lw s0, 0x10(sp) jr ra addiu sp, sp, 0x18 // end BehBobHmcCageDoorLoop // New behavior for doors, seg address: 002C26C0 .org 0x07D6C0 hex { 00 09 00 00 11 01 00 09 2A 00 00 00 00 2C 28 98 08 00 00 00 0C 00 00 00 80 2C 26 3C 0C 00 00 00 80 38 39 CC 09 00 00 00 } .org 0x405A90 // Fix gate in Bob-omb Battlefield hex { 24 18 1F 00 F7 FE 00 00 F4 03 00 00 00 19 00 00 00 38 01 40 13 00 25 E0 } .org 0x3E6C44 // Fix gate in Hazy Maze Cave hex { 24 18 1F 00 02 66 ED AE 09 1A 00 00 01 0E 00 00 00 3C 01 90 13 00 25 E0 } // BehOpenableGrillLoop: begin 802C26F8 (07D6F8) .org 0x07D6F8 addiu sp, sp, 0xFFC0 sw ra, 0x2c(sp) sw s0, 0x28(sp) lui s0, 0x8036 lw s0, 0x1160(s0) // s0 = pointer to current object lw t0, 0x14c(s0) // object->0x14C = current state beqz t0, OpenableGrillLoop_init nop addiu at, r0, 0x1 beq t0, at, OpenableGrillLoop_check nop addiu at, r0, 0x2 beq t0, at, OpenableGrillLoop_open nop beqz r0, OpenableGrillLoop_end nop OpenableGrillLoop_init: // state 0, initizalize lw t1, 0x144(s0) sw t1, 0x14(sp) // Model ID lw a1, 0x188(s0) // X-offset andi a1, a1, 0xFFFF bnez a1, OpenableGrillLoop_skipXFix // branch if X-offset does not equal zero. nop ori a1, r0, 0x190 sh a1, 0x18A(s0) // Fixes X-offset, if it equals zero. OpenableGrillLoop_skipXFix: sw s0, 0x10(sp) lui t5, 0x002C addiu t5, t5, 0x26c0 //002C26C0 sw t5, 0x18(sp) addiu a0, r0, 0xFFFF mov a2, r0 jal 0x8029EF64 // SpawnObjAdv(-1, obj->0x188, 0, 0, obj, obj->0x144, 0x130025C0); mov a3, r0 ori at, r0, 0x8000 lw t7, 0xc8(v0) addu t8, t7, at sw t8, 0xc8(v0) // Rotate first gate 180 degrees lw t1, 0x144(s0) sw t1, 0x14(sp) // Model ID lw a1, 0x188(s0) // X-offset andi a1, a1, 0xFFFF sw s0, 0x10(sp) lui t8, 0x002C addiu t8, t8, 0x26c0 //002C26C0 sw t8, 0x18(sp) addiu a0, r0, 0x1 mov a2, r0 subu a1, r0, a1 jal 0x8029EF64 // SpawnObjAdv(1, -obj->0x188, 0, 0, obj, obj->0x144, 0x130025C0); mov a3, r0 lw t1, 0x14c(s0) addiu t3, t1, 0x1 beqz r0, OpenableGrillLoop_end sw t3, 0x14c(s0) // increment state value OpenableGrillLoop_check: // state 1, check for floor switch press. lui a0, 0x1300 jal 0x8029F95C addiu a0, a0, 0x1478 // a0 = 0x13001478 = beh_floor_switch_grills beqz v0, OpenableGrillLoop_end sw v0, 0xf4(s0) lw t4, 0x14c(s0) // increment state value addiu t7, t4, 0x1 beqz r0, OpenableGrillLoop_end sw t7, 0x14c(s0) OpenableGrillLoop_open: // state 2, open doors lw t6, 0xf4(s0) addiu at, r0, 0x2 lw t1, 0x14c(t6) bne t1, at, OpenableGrillLoop_end nop sw t1, 0x88(s0) // Store 0x2 to (object->0x88) lui a0, 0x303f jal 0x802CA1E0 // PlaySound2 ori a0, a0, 0xa081 lw t4, 0x14c(s0) addiu t7, t4, 0x1 // increment state value sw t7, 0x14c(s0) lw t8, 0x144(s0) ori at, r0, 0x3C bne t8, at, OpenableGrillLoop_end nop jal 0x803220F0 // Sets fanfare music for HMC. nop OpenableGrillLoop_end: // end of function lw ra, 0x2c(sp) lw s0, 0x28(sp) addiu sp, sp, 0x40 jr ra nop // Collision Data (0x84 bytes long), seg address: 002C2898 .org 0x7D898 hex { 0040 0008 019A 0000 0033 019A 02CF FFCE 019A 02CF 0033 0000 02CF 0033 0000 0000 0033 0000 02CF FFCE 019A 0000 FFCE 0000 0000 FFCE 0000 000C 0000 0001 0002 0002 0003 0004 0002 0004 0000 0002 0001 0005 0002 0005 0003 0006 0005 0001 0000 0006 0001 0006 0007 0005 0003 0005 0007 0003 0007 0004 0004 0007 0006 0004 0006 0000 0041 0042 }