diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index fff8ae72b..88fe0dc27 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -2,6 +2,7 @@ #include "constants.h" #include "gvars/gvars.h" #include "game/chr/chr.h" +#include "game/game_000920.h" #include "game/game_066310.h" #include "game/game_0b28d0.h" #include "game/game_165670.h" @@ -8427,58 +8428,29 @@ bool ai0101(void) /** * @cmd 0102 */ -GLOBAL_ASM( -glabel ai0102 -/* f0589e8: 3c06800a */ lui $a2,%hi(g_Vars) -/* f0589ec: 24c69fc0 */ addiu $a2,$a2,%lo(g_Vars) -/* f0589f0: 8cce0434 */ lw $t6,0x434($a2) -/* f0589f4: 8ccf0438 */ lw $t7,0x438($a2) -/* f0589f8: 27bdffd8 */ addiu $sp,$sp,-40 -/* f0589fc: afbf001c */ sw $ra,0x1c($sp) -/* f058a00: 01cf1821 */ addu $v1,$t6,$t7 -/* f058a04: 90780002 */ lbu $t8,0x2($v1) -/* f058a08: 90680003 */ lbu $t0,0x3($v1) -/* f058a0c: afa30024 */ sw $v1,0x24($sp) -/* f058a10: 0018ca00 */ sll $t9,$t8,0x8 -/* f058a14: 03281025 */ or $v0,$t9,$t0 -/* f058a18: 3045ffff */ andi $a1,$v0,0xffff -/* f058a1c: 0fc12574 */ jal func0f0495d0 -/* f058a20: 8cc40424 */ lw $a0,0x424($a2) -/* f058a24: 8fa30024 */ lw $v1,0x24($sp) -/* f058a28: 04400014 */ bltz $v0,.L0f058a7c -/* f058a2c: 00402025 */ or $a0,$v0,$zero -/* f058a30: 90650004 */ lbu $a1,0x4($v1) -/* f058a34: 24010006 */ addiu $at,$zero,0x6 -/* f058a38: 10a10007 */ beq $a1,$at,.L0f058a58 -/* f058a3c: 24010007 */ addiu $at,$zero,0x7 -/* f058a40: 54a1000a */ bnel $a1,$at,.L0f058a6c -/* f058a44: 906a0007 */ lbu $t2,0x7($v1) -/* f058a48: 0fc00ad6 */ jal func0f002b58 -/* f058a4c: 00002825 */ or $a1,$zero,$zero -/* f058a50: 1000000a */ beqz $zero,.L0f058a7c -/* f058a54: 00000000 */ sll $zero,$zero,0x0 -.L0f058a58: -/* f058a58: 0fc00ad6 */ jal func0f002b58 -/* f058a5c: 24050001 */ addiu $a1,$zero,0x1 -/* f058a60: 10000006 */ beqz $zero,.L0f058a7c -/* f058a64: 00000000 */ sll $zero,$zero,0x0 -/* f058a68: 906a0007 */ lbu $t2,0x7($v1) -.L0f058a6c: -/* f058a6c: 90660005 */ lbu $a2,0x5($v1) -/* f058a70: 90670006 */ lbu $a3,0x6($v1) -/* f058a74: 0fc00b0a */ jal func0f002c28 -/* f058a78: afaa0010 */ sw $t2,0x10($sp) -.L0f058a7c: -/* f058a7c: 3c03800a */ lui $v1,%hi(g_Vars) -/* f058a80: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars) -/* f058a84: 8c6b0438 */ lw $t3,0x438($v1) -/* f058a88: 8fbf001c */ lw $ra,0x1c($sp) -/* f058a8c: 27bd0028 */ addiu $sp,$sp,0x28 -/* f058a90: 256c000b */ addiu $t4,$t3,0xb -/* f058a94: ac6c0438 */ sw $t4,0x438($v1) -/* f058a98: 03e00008 */ jr $ra -/* f058a9c: 00001025 */ or $v0,$zero,$zero -); +bool aiSetLights(void) +{ + u8 *cmd = g_Vars.ailist + g_Vars.aioffset; + u16 room_id = cmd[3] | (cmd[2] << 8); + s32 thing = func0f0495d0(g_Vars.chrdata, room_id); + + if (thing >= 0) { + switch (cmd[4]) { + case 7: + func0f002b58(thing, false); + break; + case 6: + func0f002b58(thing, true); + break; + default: + func0f002c28(thing, cmd[4], cmd[5], cmd[6], cmd[7]); + } + } + + g_Vars.aioffset += 11; + + return false; +} /** * @cmd 0103 diff --git a/src/include/commands.h b/src/include/commands.h index 7ad398390..2e6ed73ff 100644 --- a/src/include/commands.h +++ b/src/include/commands.h @@ -1062,13 +1062,13 @@ value, \ label, -#define set_lights_state(room, u1, u2, u3, u4) \ +#define set_lights_state(room, operation, u1, u2, u3) \ mkshort(0x0102), \ mkshort(room), \ + operation, \ u1, \ u2, \ u3, \ - u4, \ 0x00, \ 0x00, \ 0x00, diff --git a/src/include/game/chr/chraicommands.h b/src/include/game/chr/chraicommands.h index 49855f13c..eca7032ba 100644 --- a/src/include/game/chr/chraicommands.h +++ b/src/include/game/chr/chraicommands.h @@ -258,7 +258,7 @@ /*0x00ff*/ bool ai00ff(void); /*0x0100*/ bool ai0100(void); /*0x0101*/ bool ai0101(void); -/*0x0102*/ bool ai0102(void); +/*0x0102*/ bool aiSetLights(void); /*0x0103*/ bool ai0103(void); /*0x0104*/ bool ai0104(void); /*0x0105*/ bool ai0105(void); diff --git a/src/include/game/game_000920.h b/src/include/game/game_000920.h index dd715bc9a..2504502fc 100644 --- a/src/include/game/game_000920.h +++ b/src/include/game/game_000920.h @@ -31,8 +31,8 @@ u32 func0f0023b8(void); u32 func0f00259c(void); u32 func0f002844(void); u32 func0f002a98(void); -u32 func0f002b58(void); -u32 func0f002c28(void); +void func0f002b58(s32 roomthing, bool enable); +void func0f002c28(s32 roomthing, s32 operation, s32 arg2, s32 arg3, s32 arg4); u32 func0f002ef8(void); u32 func0f0033b0(void); u32 func0f003444(void); diff --git a/src/setup/setup_000000.c b/src/setup/setup_000000.c index d7a87e96c..0bf3ef273 100644 --- a/src/setup/setup_000000.c +++ b/src/setup/setup_000000.c @@ -14390,7 +14390,7 @@ bool (*g_CommandPointers[])(void) = { /*0x00ff*/ ai00ff, /*0x0100*/ ai0100, /*0x0101*/ ai0101, - /*0x0102*/ ai0102, + /*0x0102*/ aiSetLights, /*0x0103*/ ai0103, /*0x0104*/ ai0104, /*0x0105*/ ai0105,