From 747e914fe29e5c942f22f7d4c8d19b879af4004c Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Wed, 9 Oct 2019 17:41:33 +1000 Subject: [PATCH] Create chrai.c and decompile chraiGoToLabel --- ld/boot.ld | 2 + ld/game.ld | 2 + ld/library.ld | 2 + ld/setup.ld | 2 + src/game/chr/chrai.c | 439 +++++++++++++++++++++++++++++ src/game/chr/chraicommands.c | 11 +- src/game/game_000000.c | 468 +------------------------------ src/game/game_0601b0.c | 9 +- src/include/constants.h | 4 + src/include/game/chr/chrai.h | 10 + src/include/setup/setup_000000.h | 2 + 11 files changed, 477 insertions(+), 474 deletions(-) create mode 100644 src/game/chr/chrai.c create mode 100644 src/include/game/chr/chrai.h diff --git a/ld/boot.ld b/ld/boot.ld index e511f3124..ed092bca8 100644 --- a/ld/boot.ld +++ b/ld/boot.ld @@ -28,10 +28,12 @@ SECTIONS .game 0x0f000000 : AT(SIZEOF(.boot) + SIZEOF(.library) + SIZEOF(.setup)) { src/game/game_000000.o (.text); + src/game/chr/chrai.o (.text); src/game/chr/chraicommands.o (.text); src/game/game_0601b0.o (.text); src/game/game_000000.o (.data); + src/game/chr/chrai.o (.data); src/game/chr/chraicommands.o (.data); src/game/game_0601b0.o (.data); } diff --git a/ld/game.ld b/ld/game.ld index 2737c5fd4..4e924a2af 100644 --- a/ld/game.ld +++ b/ld/game.ld @@ -5,10 +5,12 @@ SECTIONS { .game 0x0f000000 : AT(0) { src/game/game_000000.o (.text); + src/game/chr/chrai.o (.text); src/game/chr/chraicommands.o (.text); src/game/game_0601b0.o (.text); src/game/game_000000.o (.data); + src/game/chr/chrai.o (.data); src/game/chr/chraicommands.o (.data); src/game/game_0601b0.o (.data); } diff --git a/ld/library.ld b/ld/library.ld index 6f030c36e..69fb0db8a 100644 --- a/ld/library.ld +++ b/ld/library.ld @@ -18,10 +18,12 @@ SECTIONS .game 0x0f000000 : AT(SIZEOF(.library) + SIZEOF(.setup)) { src/game/game_000000.o (.text); + src/game/chr/chrai.o (.text); src/game/chr/chraicommands.o (.text); src/game/game_0601b0.o (.text); src/game/game_000000.o (.data); + src/game/chr/chrai.o (.data); src/game/chr/chraicommands.o (.data); src/game/game_0601b0.o (.data); } diff --git a/ld/setup.ld b/ld/setup.ld index 233d6aa6b..2db564a46 100644 --- a/ld/setup.ld +++ b/ld/setup.ld @@ -18,10 +18,12 @@ SECTIONS .game 0x7f000000 : AT(SIZEOF(.setup) + SIZEOF(.library)) { src/game/game_000000.o (.text); + src/game/chr/chrai.o (.text); src/game/chr/chraicommands.o (.text); src/game/game_0601b0.o (.text); src/game/game_000000.o (.data); + src/game/chr/chrai.o (.data); src/game/chr/chraicommands.o (.data); src/game/game_0601b0.o (.data); } diff --git a/src/game/chr/chrai.c b/src/game/chr/chrai.c new file mode 100644 index 000000000..31378e8fd --- /dev/null +++ b/src/game/chr/chrai.c @@ -0,0 +1,439 @@ +#include +#include "constants.h" +#include "gvars/gvars.h" +#include "game/chr/chrai.h" +#include "game/game_000000.h" +#include "game/game_0601b0.h" +#include "library/library.h" +#include "setup/setup_000000.h" + +GLOBAL_ASM( +glabel chraiEndList +/* f04d560: 3c08800a */ lui $t0,0x800a +/* f04d564: 2508d030 */ addiu $t0,$t0,-12240 +/* f04d568: 8d020018 */ lw $v0,0x18($t0) +/* f04d56c: 00a03825 */ or $a3,$a1,$zero +/* f04d570: 3c198008 */ lui $t9,0x8008 +/* f04d574: 10400013 */ beqz $v0,.L0f04d5c4 +/* f04d578: 00000000 */ sll $zero,$zero,0x0 +/* f04d57c: 8c4e0000 */ lw $t6,0x0($v0) +/* f04d580: 00001825 */ or $v1,$zero,$zero +/* f04d584: 00402825 */ or $a1,$v0,$zero +/* f04d588: 11c0000e */ beqz $t6,.L0f04d5c4 +/* f04d58c: 00000000 */ sll $zero,$zero,0x0 +/* f04d590: 8c460000 */ lw $a2,0x0($v0) +.L0f04d594: +/* f04d594: 54860007 */ bnel $a0,$a2,.L0f04d5b4 +/* f04d598: 8ca60008 */ lw $a2,0x8($a1) +/* f04d59c: ace00000 */ sw $zero,0x0($a3) +/* f04d5a0: 8d0f0018 */ lw $t7,0x18($t0) +/* f04d5a4: 01e3c021 */ addu $t8,$t7,$v1 +/* f04d5a8: 03e00008 */ jr $ra +/* f04d5ac: 8f020004 */ lw $v0,0x4($t8) +/* f04d5b0: 8ca60008 */ lw $a2,0x8($a1) +.L0f04d5b4: +/* f04d5b4: 24630008 */ addiu $v1,$v1,0x8 +/* f04d5b8: 24a50008 */ addiu $a1,$a1,0x8 +/* f04d5bc: 14c0fff5 */ bnez $a2,.L0f04d594 +/* f04d5c0: 00000000 */ sll $zero,$zero,0x0 +.L0f04d5c4: +/* f04d5c4: 8f39ac58 */ lw $t9,-0x53a8($t9) +/* f04d5c8: 3c098008 */ lui $t1,0x8008 +/* f04d5cc: 2523ac58 */ addiu $v1,$t1,-21416 +/* f04d5d0: 1320000b */ beqz $t9,.L0f04d600 +/* f04d5d4: 240a0001 */ addiu $t2,$zero,0x1 +/* f04d5d8: 8c620000 */ lw $v0,0x0($v1) +.L0f04d5dc: +/* f04d5dc: 54820005 */ bnel $a0,$v0,.L0f04d5f4 +/* f04d5e0: 8c620008 */ lw $v0,0x8($v1) +/* f04d5e4: acea0000 */ sw $t2,0x0($a3) +/* f04d5e8: 03e00008 */ jr $ra +/* f04d5ec: 8c620004 */ lw $v0,0x4($v1) +/* f04d5f0: 8c620008 */ lw $v0,0x8($v1) +.L0f04d5f4: +/* f04d5f4: 24630008 */ addiu $v1,$v1,0x8 +/* f04d5f8: 1440fff8 */ bnez $v0,.L0f04d5dc +/* f04d5fc: 00000000 */ sll $zero,$zero,0x0 +.L0f04d600: +/* f04d600: 2402ffff */ addiu $v0,$zero,-1 +/* f04d604: 03e00008 */ jr $ra +/* f04d608: 00000000 */ sll $zero,$zero,0x0 +); + +u32 chraiGoToLabel(u8 *ailist, u32 aioffset, u8 label) +{ + do { + u8 *cmd = aioffset + ailist; + u32 type = (cmd[0] << 8) + cmd[1]; + + if (type == CMD_LABEL) { + if (label == cmd[2]) { + return aioffset; + } + } else if (type == CMD_END) { + return 0; + } + + aioffset += chraiGetCommandLength(ailist, aioffset); + } while (true); +} + +GLOBAL_ASM( +glabel chraiExecute +/* f04d6b4: 27bdffe0 */ addiu $sp,$sp,-32 +/* f04d6b8: afb00018 */ sw $s0,0x18($sp) +/* f04d6bc: 3c10800a */ lui $s0,0x800a +/* f04d6c0: 26109fc0 */ addiu $s0,$s0,-24640 +/* f04d6c4: 24010003 */ addiu $at,$zero,0x3 +/* f04d6c8: afbf001c */ sw $ra,0x1c($sp) +/* f04d6cc: ae000424 */ sw $zero,0x424($s0) +/* f04d6d0: ae000428 */ sw $zero,0x428($s0) +/* f04d6d4: ae00042c */ sw $zero,0x42c($s0) +/* f04d6d8: ae000430 */ sw $zero,0x430($s0) +/* f04d6dc: ae000434 */ sw $zero,0x434($s0) +/* f04d6e0: 14a10003 */ bne $a1,$at,.L0f04d6f0 +/* f04d6e4: ae000438 */ sw $zero,0x438($s0) +/* f04d6e8: 10000015 */ beqz $zero,.L0f04d740 +/* f04d6ec: ae040424 */ sw $a0,0x424($s0) +.L0f04d6f0: +/* f04d6f0: 24010001 */ addiu $at,$zero,0x1 +/* f04d6f4: 54a10013 */ bnel $a1,$at,.L0f04d744 +/* f04d6f8: 8e070424 */ lw $a3,0x424($s0) +/* f04d6fc: 90820003 */ lbu $v0,0x3($a0) +/* f04d700: 24010027 */ addiu $at,$zero,0x27 +/* f04d704: 54410004 */ bnel $v0,$at,.L0f04d718 +/* f04d708: 24010028 */ addiu $at,$zero,0x28 +/* f04d70c: 1000000c */ beqz $zero,.L0f04d740 +/* f04d710: ae040428 */ sw $a0,0x428($s0) +/* f04d714: 24010028 */ addiu $at,$zero,0x28 +.L0f04d718: +/* f04d718: 54410004 */ bnel $v0,$at,.L0f04d72c +/* f04d71c: 24010037 */ addiu $at,$zero,0x37 +/* f04d720: 10000007 */ beqz $zero,.L0f04d740 +/* f04d724: ae04042c */ sw $a0,0x42c($s0) +/* f04d728: 24010037 */ addiu $at,$zero,0x37 +.L0f04d72c: +/* f04d72c: 10410003 */ beq $v0,$at,.L0f04d73c +/* f04d730: 24010039 */ addiu $at,$zero,0x39 +/* f04d734: 54410003 */ bnel $v0,$at,.L0f04d744 +/* f04d738: 8e070424 */ lw $a3,0x424($s0) +.L0f04d73c: +/* f04d73c: ae040430 */ sw $a0,0x430($s0) +.L0f04d740: +/* f04d740: 8e070424 */ lw $a3,0x424($s0) +.L0f04d744: +/* f04d744: 50e00007 */ beqzl $a3,.L0f04d764 +/* f04d748: 8e020428 */ lw $v0,0x428($s0) +/* f04d74c: 8cee0108 */ lw $t6,0x108($a3) +/* f04d750: ae0e0434 */ sw $t6,0x434($s0) +/* f04d754: 94ef010c */ lhu $t7,0x10c($a3) +/* f04d758: 10000018 */ beqz $zero,.L0f04d7bc +/* f04d75c: ae0f0438 */ sw $t7,0x438($s0) +/* f04d760: 8e020428 */ lw $v0,0x428($s0) +.L0f04d764: +/* f04d764: 50400007 */ beqzl $v0,.L0f04d784 +/* f04d768: 8e02042c */ lw $v0,0x42c($s0) +/* f04d76c: 8c58005c */ lw $t8,0x5c($v0) +/* f04d770: ae180434 */ sw $t8,0x434($s0) +/* f04d774: 94590060 */ lhu $t9,0x60($v0) +/* f04d778: 10000010 */ beqz $zero,.L0f04d7bc +/* f04d77c: ae190438 */ sw $t9,0x438($s0) +/* f04d780: 8e02042c */ lw $v0,0x42c($s0) +.L0f04d784: +/* f04d784: 50400007 */ beqzl $v0,.L0f04d7a4 +/* f04d788: 8e020430 */ lw $v0,0x430($s0) +/* f04d78c: 8c48005c */ lw $t0,0x5c($v0) +/* f04d790: ae080434 */ sw $t0,0x434($s0) +/* f04d794: 94490060 */ lhu $t1,0x60($v0) +/* f04d798: 10000008 */ beqz $zero,.L0f04d7bc +/* f04d79c: ae090438 */ sw $t1,0x438($s0) +/* f04d7a0: 8e020430 */ lw $v0,0x430($s0) +.L0f04d7a4: +/* f04d7a4: 50400006 */ beqzl $v0,.L0f04d7c0 +/* f04d7a8: 8e0c0434 */ lw $t4,0x434($s0) +/* f04d7ac: 8c4a005c */ lw $t2,0x5c($v0) +/* f04d7b0: ae0a0434 */ sw $t2,0x434($s0) +/* f04d7b4: 944b0060 */ lhu $t3,0x60($v0) +/* f04d7b8: ae0b0438 */ sw $t3,0x438($s0) +.L0f04d7bc: +/* f04d7bc: 8e0c0434 */ lw $t4,0x434($s0) +.L0f04d7c0: +/* f04d7c0: 518000db */ beqzl $t4,.L0f04db30 +/* f04d7c4: 8fbf001c */ lw $ra,0x1c($sp) +/* f04d7c8: 10e00004 */ beqz $a3,.L0f04d7dc +/* f04d7cc: 00000000 */ sll $zero,$zero,0x0 +/* f04d7d0: 0fc13111 */ jal func0f04c444 +/* f04d7d4: 00e02025 */ or $a0,$a3,$zero +/* f04d7d8: 8e070424 */ lw $a3,0x424($s0) +.L0f04d7dc: +/* f04d7dc: 10e0002c */ beqz $a3,.L0f04d890 +/* f04d7e0: 00000000 */ sll $zero,$zero,0x0 +/* f04d7e4: 8ced0018 */ lw $t5,0x18($a3) +/* f04d7e8: 000d7280 */ sll $t6,$t5,0xa +/* f04d7ec: 05c10028 */ bgez $t6,.L0f04d890 +/* f04d7f0: 00000000 */ sll $zero,$zero,0x0 +/* f04d7f4: 0c00744f */ jal 0x1d13c +/* f04d7f8: 8ce40020 */ lw $a0,0x20($a3) +/* f04d7fc: 8e070424 */ lw $a3,0x424($s0) +/* f04d800: 84ef0110 */ lh $t7,0x110($a3) +/* f04d804: 05e00020 */ bltz $t7,.L0f04d888 +/* f04d808: 00000000 */ sll $zero,$zero,0x0 +/* f04d80c: 44800000 */ mtc1 $zero,$f0 +/* f04d810: c4e40180 */ lwc1 $f4,0x180($a3) +/* f04d814: 4600203e */ c.le.s $f4,$f0 +/* f04d818: 00000000 */ sll $zero,$zero,0x0 +/* f04d81c: 4500001a */ bc1f .L0f04d888 +/* f04d820: 00000000 */ sll $zero,$zero,0x0 +/* f04d824: c4e60100 */ lwc1 $f6,0x100($a3) +/* f04d828: 24010269 */ addiu $at,$zero,0x269 +/* f04d82c: 4606003e */ c.le.s $f0,$f6 +/* f04d830: 00000000 */ sll $zero,$zero,0x0 +/* f04d834: 45010004 */ bc1t .L0f04d848 +/* f04d838: 00000000 */ sll $zero,$zero,0x0 +/* f04d83c: 8cf80300 */ lw $t8,0x300($a3) +/* f04d840: 13000011 */ beqz $t8,.L0f04d888 +/* f04d844: 00000000 */ sll $zero,$zero,0x0 +.L0f04d848: +/* f04d848: 1041000f */ beq $v0,$at,.L0f04d888 +/* f04d84c: 2401026b */ addiu $at,$zero,0x26b +/* f04d850: 1041000d */ beq $v0,$at,.L0f04d888 +/* f04d854: 2401026a */ addiu $at,$zero,0x26a +/* f04d858: 1041000b */ beq $v0,$at,.L0f04d888 +/* f04d85c: 00000000 */ sll $zero,$zero,0x0 +/* f04d860: 8cf90018 */ lw $t9,0x18($a3) +/* f04d864: 3c01ffdf */ lui $at,0xffdf +/* f04d868: 3421ffff */ ori $at,$at,0xffff +/* f04d86c: 03214024 */ and $t0,$t9,$at +/* f04d870: ace80018 */ sw $t0,0x18($a3) +/* f04d874: 8e090424 */ lw $t1,0x424($s0) +/* f04d878: 0c006134 */ jal ailistFindById +/* f04d87c: 85240110 */ lh $a0,0x110($t1) +/* f04d880: ae020434 */ sw $v0,0x434($s0) +/* f04d884: ae000438 */ sw $zero,0x438($s0) +.L0f04d888: +/* f04d888: 1000008b */ beqz $zero,.L0f04dab8 +/* f04d88c: 8e040434 */ lw $a0,0x434($s0) +.L0f04d890: +/* f04d890: 10e00052 */ beqz $a3,.L0f04d9dc +/* f04d894: 00000000 */ sll $zero,$zero,0x0 +/* f04d898: 8ce20018 */ lw $v0,0x18($a3) +/* f04d89c: 3c01f7ff */ lui $at,0xf7ff +/* f04d8a0: 3421ffff */ ori $at,$at,0xffff +/* f04d8a4: 00025100 */ sll $t2,$v0,0x4 +/* f04d8a8: 0541004c */ bgez $t2,.L0f04d9dc +/* f04d8ac: 00415824 */ and $t3,$v0,$at +/* f04d8b0: aceb0018 */ sw $t3,0x18($a3) +/* f04d8b4: 8e0c0424 */ lw $t4,0x424($s0) +/* f04d8b8: 85840356 */ lh $a0,0x356($t4) +/* f04d8bc: 0482003b */ bltzl $a0,.L0f04d9ac +/* f04d8c0: 8e070424 */ lw $a3,0x424($s0) +/* f04d8c4: 0c006134 */ jal ailistFindById +/* f04d8c8: 00000000 */ sll $zero,$zero,0x0 +/* f04d8cc: 8e0d0424 */ lw $t5,0x424($s0) +/* f04d8d0: 8dae0108 */ lw $t6,0x108($t5) +/* f04d8d4: 504e0035 */ beql $v0,$t6,.L0f04d9ac +/* f04d8d8: 8e070424 */ lw $a3,0x424($s0) +/* f04d8dc: 0c004b70 */ jal 0x12dc0 +/* f04d8e0: 00000000 */ sll $zero,$zero,0x0 +/* f04d8e4: 24010064 */ addiu $at,$zero,0x64 +/* f04d8e8: 0041001b */ divu $zero,$v0,$at +/* f04d8ec: 8e070424 */ lw $a3,0x424($s0) +/* f04d8f0: 00007810 */ mfhi $t7 +/* f04d8f4: 24050400 */ addiu $a1,$zero,0x400 +/* f04d8f8: 90f8035e */ lbu $t8,0x35e($a3) +/* f04d8fc: 00e02025 */ or $a0,$a3,$zero +/* f04d900: 01f8082b */ sltu $at,$t7,$t8 +/* f04d904: 50200029 */ beqzl $at,.L0f04d9ac +/* f04d908: 8e070424 */ lw $a3,0x424($s0) +/* f04d90c: 0fc12790 */ jal func0f049e40 +/* f04d910: 24060001 */ addiu $a2,$zero,0x1 +/* f04d914: 14400024 */ bnez $v0,.L0f04d9a8 +/* f04d918: 3c050001 */ lui $a1,0x1 +/* f04d91c: 8e040424 */ lw $a0,0x424($s0) +/* f04d920: 0fc12790 */ jal func0f049e40 +/* f04d924: 00003025 */ or $a2,$zero,$zero +/* f04d928: 54400020 */ bnezl $v0,.L0f04d9ac +/* f04d92c: 8e070424 */ lw $a3,0x424($s0) +/* f04d930: 8e190424 */ lw $t9,0x424($s0) +/* f04d934: 0c006134 */ jal ailistFindById +/* f04d938: 87240356 */ lh $a0,0x356($t9) +/* f04d93c: 8e070424 */ lw $a3,0x424($s0) +/* f04d940: 8ce80108 */ lw $t0,0x108($a3) +/* f04d944: 50480019 */ beql $v0,$t0,.L0f04d9ac +/* f04d948: 8e070424 */ lw $a3,0x424($s0) +/* f04d94c: 80e20007 */ lb $v0,0x7($a3) +/* f04d950: 24010008 */ addiu $at,$zero,0x8 +/* f04d954: 10410014 */ beq $v0,$at,.L0f04d9a8 +/* f04d958: 24010009 */ addiu $at,$zero,0x9 +/* f04d95c: 10410012 */ beq $v0,$at,.L0f04d9a8 +/* f04d960: 24010004 */ addiu $at,$zero,0x4 +/* f04d964: 10410010 */ beq $v0,$at,.L0f04d9a8 +/* f04d968: 24010005 */ addiu $at,$zero,0x5 +/* f04d96c: 1041000e */ beq $v0,$at,.L0f04d9a8 +/* f04d970: 24010006 */ addiu $at,$zero,0x6 +/* f04d974: 1041000c */ beq $v0,$at,.L0f04d9a8 +/* f04d978: 24010007 */ addiu $at,$zero,0x7 +/* f04d97c: 1041000a */ beq $v0,$at,.L0f04d9a8 +/* f04d980: 2401000a */ addiu $at,$zero,0xa +/* f04d984: 50410009 */ beql $v0,$at,.L0f04d9ac +/* f04d988: 8e070424 */ lw $a3,0x424($s0) +/* f04d98c: 0c006134 */ jal ailistFindById +/* f04d990: 84e40356 */ lh $a0,0x356($a3) +/* f04d994: 8e090424 */ lw $t1,0x424($s0) +/* f04d998: ae020434 */ sw $v0,0x434($s0) +/* f04d99c: ae000438 */ sw $zero,0x438($s0) +/* f04d9a0: 1000000c */ beqz $zero,.L0f04d9d4 +/* f04d9a4: a120035e */ sb $zero,0x35e($t1) +.L0f04d9a8: +/* f04d9a8: 8e070424 */ lw $a3,0x424($s0) +.L0f04d9ac: +/* f04d9ac: 90ea035e */ lbu $t2,0x35e($a3) +/* f04d9b0: 000a5840 */ sll $t3,$t2,0x1 +/* f04d9b4: a0eb035e */ sb $t3,0x35e($a3) +/* f04d9b8: 8e070424 */ lw $a3,0x424($s0) +/* f04d9bc: 90e2035f */ lbu $v0,0x35f($a3) +/* f04d9c0: 90ec035e */ lbu $t4,0x35e($a3) +/* f04d9c4: 004c082a */ slt $at,$v0,$t4 +/* f04d9c8: 10200002 */ beqz $at,.L0f04d9d4 +/* f04d9cc: 00000000 */ sll $zero,$zero,0x0 +/* f04d9d0: a0e2035e */ sb $v0,0x35e($a3) +.L0f04d9d4: +/* f04d9d4: 10000038 */ beqz $zero,.L0f04dab8 +/* f04d9d8: 8e040434 */ lw $a0,0x434($s0) +.L0f04d9dc: +/* f04d9dc: 50e00036 */ beqzl $a3,.L0f04dab8 +/* f04d9e0: 8e040434 */ lw $a0,0x434($s0) +/* f04d9e4: 8ced032c */ lw $t5,0x32c($a3) +/* f04d9e8: 00e02025 */ or $a0,$a3,$zero +/* f04d9ec: 24050400 */ addiu $a1,$zero,0x400 +/* f04d9f0: 000d7b80 */ sll $t7,$t5,0xe +/* f04d9f4: 05e30030 */ bgezl $t7,.L0f04dab8 +/* f04d9f8: 8e040434 */ lw $a0,0x434($s0) +/* f04d9fc: 0fc12790 */ jal func0f049e40 +/* f04da00: 24060001 */ addiu $a2,$zero,0x1 +/* f04da04: 5440002c */ bnezl $v0,.L0f04dab8 +/* f04da08: 8e040434 */ lw $a0,0x434($s0) +/* f04da0c: 8e180424 */ lw $t8,0x424($s0) +/* f04da10: 0c006134 */ jal ailistFindById +/* f04da14: 8704035a */ lh $a0,0x35a($t8) +/* f04da18: 8e070424 */ lw $a3,0x424($s0) +/* f04da1c: 8cf90108 */ lw $t9,0x108($a3) +/* f04da20: 50590025 */ beql $v0,$t9,.L0f04dab8 +/* f04da24: 8e040434 */ lw $a0,0x434($s0) +/* f04da28: 8e0804b4 */ lw $t0,0x4b4($s0) +/* f04da2c: 2401001c */ addiu $at,$zero,0x1c +/* f04da30: 51010021 */ beql $t0,$at,.L0f04dab8 +/* f04da34: 8e040434 */ lw $a0,0x434($s0) +/* f04da38: 90e9032d */ lbu $t1,0x32d($a3) +/* f04da3c: 312afffd */ andi $t2,$t1,0xfffd +/* f04da40: a0ea032d */ sb $t2,0x32d($a3) +/* f04da44: 8e070424 */ lw $a3,0x424($s0) +/* f04da48: 84eb035a */ lh $t3,0x35a($a3) +/* f04da4c: 05600017 */ bltz $t3,.L0f04daac +/* f04da50: 00000000 */ sll $zero,$zero,0x0 +/* f04da54: 80e20007 */ lb $v0,0x7($a3) +/* f04da58: 24010004 */ addiu $at,$zero,0x4 +/* f04da5c: 10410013 */ beq $v0,$at,.L0f04daac +/* f04da60: 24010005 */ addiu $at,$zero,0x5 +/* f04da64: 10410011 */ beq $v0,$at,.L0f04daac +/* f04da68: 24010006 */ addiu $at,$zero,0x6 +/* f04da6c: 1041000f */ beq $v0,$at,.L0f04daac +/* f04da70: 00e02025 */ or $a0,$a3,$zero +/* f04da74: 24050400 */ addiu $a1,$zero,0x400 +/* f04da78: 0fc12776 */ jal func0f049dd8 +/* f04da7c: 24060001 */ addiu $a2,$zero,0x1 +/* f04da80: 8e040424 */ lw $a0,0x424($s0) +/* f04da84: 3c051000 */ lui $a1,0x1000 +/* f04da88: 0fc12776 */ jal func0f049dd8 +/* f04da8c: 24060001 */ addiu $a2,$zero,0x1 +/* f04da90: 8e0c0424 */ lw $t4,0x424($s0) +/* f04da94: a1800113 */ sb $zero,0x113($t4) +/* f04da98: 8e0d0424 */ lw $t5,0x424($s0) +/* f04da9c: 0c006134 */ jal ailistFindById +/* f04daa0: 85a4035a */ lh $a0,0x35a($t5) +/* f04daa4: ae020434 */ sw $v0,0x434($s0) +/* f04daa8: ae000438 */ sw $zero,0x438($s0) +.L0f04daac: +/* f04daac: 10000002 */ beqz $zero,.L0f04dab8 +/* f04dab0: 8e040434 */ lw $a0,0x434($s0) +/* f04dab4: 8e040434 */ lw $a0,0x434($s0) +.L0f04dab8: +/* f04dab8: 5080001d */ beqzl $a0,.L0f04db30 +/* f04dabc: 8fbf001c */ lw $ra,0x1c($sp) +/* f04dac0: 8e050438 */ lw $a1,0x438($s0) +.L0f04dac4: +/* f04dac4: 00a41021 */ addu $v0,$a1,$a0 +/* f04dac8: 904f0000 */ lbu $t7,0x0($v0) +/* f04dacc: 904e0001 */ lbu $t6,0x1($v0) +/* f04dad0: 000fc200 */ sll $t8,$t7,0x8 +/* f04dad4: 01d81821 */ addu $v1,$t6,$t8 +/* f04dad8: 0460000c */ bltz $v1,.L0f04db0c +/* f04dadc: 286101e1 */ slti $at,$v1,0x1e1 +/* f04dae0: 1020000a */ beqz $at,.L0f04db0c +/* f04dae4: 0003c880 */ sll $t9,$v1,0x2 +/* f04dae8: 3c018007 */ lui $at,0x8007 +/* f04daec: 00390821 */ addu $at,$at,$t9 +/* f04daf0: 8c398490 */ lw $t9,-0x7b70($at) +/* f04daf4: 0320f809 */ jalr $t9 +/* f04daf8: 00000000 */ sll $zero,$zero,0x0 +/* f04dafc: 50400009 */ beqzl $v0,.L0f04db24 +/* f04db00: 8e040434 */ lw $a0,0x434($s0) +/* f04db04: 1000000a */ beqz $zero,.L0f04db30 +/* f04db08: 8fbf001c */ lw $ra,0x1c($sp) +.L0f04db0c: +/* f04db0c: 0fc136d0 */ jal chraiGetCommandLength +/* f04db10: 00000000 */ sll $zero,$zero,0x0 +/* f04db14: 8e080438 */ lw $t0,0x438($s0) +/* f04db18: 01024821 */ addu $t1,$t0,$v0 +/* f04db1c: ae090438 */ sw $t1,0x438($s0) +/* f04db20: 8e040434 */ lw $a0,0x434($s0) +.L0f04db24: +/* f04db24: 5480ffe7 */ bnezl $a0,.L0f04dac4 +/* f04db28: 8e050438 */ lw $a1,0x438($s0) +/* f04db2c: 8fbf001c */ lw $ra,0x1c($sp) +.L0f04db30: +/* f04db30: 8fb00018 */ lw $s0,0x18($sp) +/* f04db34: 27bd0020 */ addiu $sp,$sp,0x20 +/* f04db38: 03e00008 */ jr $ra +/* f04db3c: 00000000 */ sll $zero,$zero,0x0 +); + +GLOBAL_ASM( +glabel chraiGetCommandLength +/* f04db40: 00a41021 */ addu $v0,$a1,$a0 +/* f04db44: 904f0000 */ lbu $t7,0x0($v0) +/* f04db48: 904e0001 */ lbu $t6,0x1($v0) +/* f04db4c: 240100b5 */ addiu $at,$zero,0xb5 +/* f04db50: 000fc200 */ sll $t8,$t7,0x8 +/* f04db54: 01d81821 */ addu $v1,$t6,$t8 +/* f04db58: 1461000e */ bne $v1,$at,.L0f04db94 +/* f04db5c: 00000000 */ sll $zero,$zero,0x0 +/* f04db60: 90590002 */ lbu $t9,0x2($v0) +/* f04db64: 24a30002 */ addiu $v1,$a1,0x2 +/* f04db68: 00831021 */ addu $v0,$a0,$v1 +/* f04db6c: 53200007 */ beqzl $t9,.L0f04db8c +/* f04db70: 00651023 */ subu $v0,$v1,$a1 +/* f04db74: 90480001 */ lbu $t0,0x1($v0) +.L0f04db78: +/* f04db78: 24630001 */ addiu $v1,$v1,0x1 +/* f04db7c: 24420001 */ addiu $v0,$v0,0x1 +/* f04db80: 5500fffd */ bnezl $t0,.L0f04db78 +/* f04db84: 90480001 */ lbu $t0,0x1($v0) +/* f04db88: 00651023 */ subu $v0,$v1,$a1 +.L0f04db8c: +/* f04db8c: 03e00008 */ jr $ra +/* f04db90: 24420001 */ addiu $v0,$v0,0x1 +.L0f04db94: +/* f04db94: 04600007 */ bltz $v1,.L0f04dbb4 +/* f04db98: 286101e1 */ slti $at,$v1,0x1e1 +/* f04db9c: 10200005 */ beqz $at,.L0f04dbb4 +/* f04dba0: 00034840 */ sll $t1,$v1,0x1 +/* f04dba4: 3c028007 */ lui $v0,0x8007 +/* f04dba8: 00491021 */ addu $v0,$v0,$t1 +/* f04dbac: 03e00008 */ jr $ra +/* f04dbb0: 94428c14 */ lhu $v0,-0x73ec($v0) +.L0f04dbb4: +/* f04dbb4: 24020001 */ addiu $v0,$zero,0x1 +/* f04dbb8: 03e00008 */ jr $ra +/* f04dbbc: 00000000 */ sll $zero,$zero,0x0 +); diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index c1506d95b..40cb70a32 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -1,6 +1,7 @@ #include #include "constants.h" #include "game/chr/chraicommands.h" +#include "game/chr/chrai.h" #include "game/game_000000.h" #include "game/game_0601b0.h" #include "gvars/gvars.h" @@ -372,7 +373,7 @@ glabel aiReturn bool aiEndList(void) { u64 unk; - func0f04d560(g_Vars.ailist, &unk); + chraiEndList(g_Vars.ailist, &unk); return true; } @@ -1191,10 +1192,10 @@ bool aiRemoveChr(void) bool ai0027(void) { u8 *cmd = g_Vars.ailist + g_Vars.aioffset; - u32 value = cmd[3] | (cmd[2] << 8); + u16 value = cmd[3] | (cmd[2] << 8); - if (func0f03b5f0(g_Vars.chrdata, value & 0xffff)) { - g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4] & 0xff); + if (func0f03b5f0(g_Vars.chrdata, value)) { + g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[4]); } else { g_Vars.aioffset += 5; } @@ -7766,7 +7767,7 @@ glabel ai00b5 .L0f054edc: /* f054edc: 24639fc0 */ addiu $v1,$v1,-24640 /* f054ee0: 8c640434 */ lw $a0,0x434($v1) -/* f054ee4: 0fc136d0 */ jal func0f04db40 +/* f054ee4: 0fc136d0 */ jal chraiGetCommandLength /* f054ee8: 8c650438 */ lw $a1,0x438($v1) /* f054eec: 3c03800a */ lui $v1,0x800a /* f054ef0: 24639fc0 */ addiu $v1,$v1,-24640 diff --git a/src/game/game_000000.c b/src/game/game_000000.c index c5f221015..61292c807 100644 --- a/src/game/game_000000.c +++ b/src/game/game_000000.c @@ -1,6 +1,7 @@ #include #include "constants.h" #include "gvars/gvars.h" +#include "game/chr/chrai.h" #include "game/game_000000.h" #include "game/game_0601b0.h" #include "library/library.h" @@ -13488,7 +13489,7 @@ glabel func0f00bbc8 /* f00c1d8: 01cf2025 */ or $a0,$t6,$t7 /* f00c1dc: 02002025 */ or $a0,$s0,$zero .L0f00c1e0: -/* f00c1e0: 0fc136d0 */ jal func0f04db40 +/* f00c1e0: 0fc136d0 */ jal chraiGetCommandLength /* f00c1e4: 00002825 */ or $a1,$zero,$zero /* f00c1e8: 1000ffb9 */ beqz $zero,.L0f00c0d0 /* f00c1ec: 02028021 */ addu $s0,$s0,$v0 @@ -80998,7 +80999,7 @@ glabel func0f047c80 /* f047ddc: 2cc60001 */ sltiu $a2,$a2,0x1 /* f047de0: a3a6004b */ sb $a2,0x4b($sp) .L0f047de4: -/* f047de4: 0fc135ad */ jal func0f04d6b4 +/* f047de4: 0fc135ad */ jal chraiExecute /* f047de8: a2000008 */ sb $zero,0x8($s0) /* f047dec: 8e02001c */ lw $v0,0x1c($s0) /* f047df0: 3c07800a */ lui $a3,0x800a @@ -87372,466 +87373,3 @@ glabel func0f04d4bc /* f04d558: 00000000 */ sll $zero,$zero,0x0 /* f04d55c: 00000000 */ sll $zero,$zero,0x0 ); - -GLOBAL_ASM( -glabel func0f04d560 -/* f04d560: 3c08800a */ lui $t0,0x800a -/* f04d564: 2508d030 */ addiu $t0,$t0,-12240 -/* f04d568: 8d020018 */ lw $v0,0x18($t0) -/* f04d56c: 00a03825 */ or $a3,$a1,$zero -/* f04d570: 3c198008 */ lui $t9,0x8008 -/* f04d574: 10400013 */ beqz $v0,.L0f04d5c4 -/* f04d578: 00000000 */ sll $zero,$zero,0x0 -/* f04d57c: 8c4e0000 */ lw $t6,0x0($v0) -/* f04d580: 00001825 */ or $v1,$zero,$zero -/* f04d584: 00402825 */ or $a1,$v0,$zero -/* f04d588: 11c0000e */ beqz $t6,.L0f04d5c4 -/* f04d58c: 00000000 */ sll $zero,$zero,0x0 -/* f04d590: 8c460000 */ lw $a2,0x0($v0) -.L0f04d594: -/* f04d594: 54860007 */ bnel $a0,$a2,.L0f04d5b4 -/* f04d598: 8ca60008 */ lw $a2,0x8($a1) -/* f04d59c: ace00000 */ sw $zero,0x0($a3) -/* f04d5a0: 8d0f0018 */ lw $t7,0x18($t0) -/* f04d5a4: 01e3c021 */ addu $t8,$t7,$v1 -/* f04d5a8: 03e00008 */ jr $ra -/* f04d5ac: 8f020004 */ lw $v0,0x4($t8) -/* f04d5b0: 8ca60008 */ lw $a2,0x8($a1) -.L0f04d5b4: -/* f04d5b4: 24630008 */ addiu $v1,$v1,0x8 -/* f04d5b8: 24a50008 */ addiu $a1,$a1,0x8 -/* f04d5bc: 14c0fff5 */ bnez $a2,.L0f04d594 -/* f04d5c0: 00000000 */ sll $zero,$zero,0x0 -.L0f04d5c4: -/* f04d5c4: 8f39ac58 */ lw $t9,-0x53a8($t9) -/* f04d5c8: 3c098008 */ lui $t1,0x8008 -/* f04d5cc: 2523ac58 */ addiu $v1,$t1,-21416 -/* f04d5d0: 1320000b */ beqz $t9,.L0f04d600 -/* f04d5d4: 240a0001 */ addiu $t2,$zero,0x1 -/* f04d5d8: 8c620000 */ lw $v0,0x0($v1) -.L0f04d5dc: -/* f04d5dc: 54820005 */ bnel $a0,$v0,.L0f04d5f4 -/* f04d5e0: 8c620008 */ lw $v0,0x8($v1) -/* f04d5e4: acea0000 */ sw $t2,0x0($a3) -/* f04d5e8: 03e00008 */ jr $ra -/* f04d5ec: 8c620004 */ lw $v0,0x4($v1) -/* f04d5f0: 8c620008 */ lw $v0,0x8($v1) -.L0f04d5f4: -/* f04d5f4: 24630008 */ addiu $v1,$v1,0x8 -/* f04d5f8: 1440fff8 */ bnez $v0,.L0f04d5dc -/* f04d5fc: 00000000 */ sll $zero,$zero,0x0 -.L0f04d600: -/* f04d600: 2402ffff */ addiu $v0,$zero,-1 -/* f04d604: 03e00008 */ jr $ra -/* f04d608: 00000000 */ sll $zero,$zero,0x0 -); - -GLOBAL_ASM( -glabel chraiGoToLabel -/* f04d60c: 27bdffd0 */ addiu $sp,$sp,-48 -/* f04d610: afb40028 */ sw $s4,0x28($sp) -/* f04d614: afb30024 */ sw $s3,0x24($sp) -/* f04d618: afb20020 */ sw $s2,0x20($sp) -/* f04d61c: afb1001c */ sw $s1,0x1c($sp) -/* f04d620: afb00018 */ sw $s0,0x18($sp) -/* f04d624: 00a08025 */ or $s0,$a1,$zero -/* f04d628: 00808825 */ or $s1,$a0,$zero -/* f04d62c: 30d200ff */ andi $s2,$a2,0xff -/* f04d630: afbf002c */ sw $ra,0x2c($sp) -/* f04d634: afa60038 */ sw $a2,0x38($sp) -/* f04d638: 24130002 */ addiu $s3,$zero,0x2 -/* f04d63c: 24140004 */ addiu $s4,$zero,0x4 -.L0f04d640: -/* f04d640: 02111021 */ addu $v0,$s0,$s1 -/* f04d644: 904f0000 */ lbu $t7,0x0($v0) -/* f04d648: 904e0001 */ lbu $t6,0x1($v0) -/* f04d64c: 02202025 */ or $a0,$s1,$zero -/* f04d650: 000fc200 */ sll $t8,$t7,0x8 -/* f04d654: 01d81821 */ addu $v1,$t6,$t8 -/* f04d658: 14730006 */ bne $v1,$s3,.L0f04d674 -/* f04d65c: 00000000 */ sll $zero,$zero,0x0 -/* f04d660: 90590002 */ lbu $t9,0x2($v0) -/* f04d664: 16590007 */ bne $s2,$t9,.L0f04d684 -/* f04d668: 00000000 */ sll $zero,$zero,0x0 -/* f04d66c: 10000009 */ beqz $zero,.L0f04d694 -/* f04d670: 02001025 */ or $v0,$s0,$zero -.L0f04d674: -/* f04d674: 14740003 */ bne $v1,$s4,.L0f04d684 -/* f04d678: 00000000 */ sll $zero,$zero,0x0 -/* f04d67c: 10000005 */ beqz $zero,.L0f04d694 -/* f04d680: 00001025 */ or $v0,$zero,$zero -.L0f04d684: -/* f04d684: 0fc136d0 */ jal func0f04db40 -/* f04d688: 02002825 */ or $a1,$s0,$zero -/* f04d68c: 1000ffec */ beqz $zero,.L0f04d640 -/* f04d690: 02028021 */ addu $s0,$s0,$v0 -.L0f04d694: -/* f04d694: 8fbf002c */ lw $ra,0x2c($sp) -/* f04d698: 8fb00018 */ lw $s0,0x18($sp) -/* f04d69c: 8fb1001c */ lw $s1,0x1c($sp) -/* f04d6a0: 8fb20020 */ lw $s2,0x20($sp) -/* f04d6a4: 8fb30024 */ lw $s3,0x24($sp) -/* f04d6a8: 8fb40028 */ lw $s4,0x28($sp) -/* f04d6ac: 03e00008 */ jr $ra -/* f04d6b0: 27bd0030 */ addiu $sp,$sp,0x30 -); - -GLOBAL_ASM( -glabel func0f04d6b4 -/* f04d6b4: 27bdffe0 */ addiu $sp,$sp,-32 -/* f04d6b8: afb00018 */ sw $s0,0x18($sp) -/* f04d6bc: 3c10800a */ lui $s0,0x800a -/* f04d6c0: 26109fc0 */ addiu $s0,$s0,-24640 -/* f04d6c4: 24010003 */ addiu $at,$zero,0x3 -/* f04d6c8: afbf001c */ sw $ra,0x1c($sp) -/* f04d6cc: ae000424 */ sw $zero,0x424($s0) -/* f04d6d0: ae000428 */ sw $zero,0x428($s0) -/* f04d6d4: ae00042c */ sw $zero,0x42c($s0) -/* f04d6d8: ae000430 */ sw $zero,0x430($s0) -/* f04d6dc: ae000434 */ sw $zero,0x434($s0) -/* f04d6e0: 14a10003 */ bne $a1,$at,.L0f04d6f0 -/* f04d6e4: ae000438 */ sw $zero,0x438($s0) -/* f04d6e8: 10000015 */ beqz $zero,.L0f04d740 -/* f04d6ec: ae040424 */ sw $a0,0x424($s0) -.L0f04d6f0: -/* f04d6f0: 24010001 */ addiu $at,$zero,0x1 -/* f04d6f4: 54a10013 */ bnel $a1,$at,.L0f04d744 -/* f04d6f8: 8e070424 */ lw $a3,0x424($s0) -/* f04d6fc: 90820003 */ lbu $v0,0x3($a0) -/* f04d700: 24010027 */ addiu $at,$zero,0x27 -/* f04d704: 54410004 */ bnel $v0,$at,.L0f04d718 -/* f04d708: 24010028 */ addiu $at,$zero,0x28 -/* f04d70c: 1000000c */ beqz $zero,.L0f04d740 -/* f04d710: ae040428 */ sw $a0,0x428($s0) -/* f04d714: 24010028 */ addiu $at,$zero,0x28 -.L0f04d718: -/* f04d718: 54410004 */ bnel $v0,$at,.L0f04d72c -/* f04d71c: 24010037 */ addiu $at,$zero,0x37 -/* f04d720: 10000007 */ beqz $zero,.L0f04d740 -/* f04d724: ae04042c */ sw $a0,0x42c($s0) -/* f04d728: 24010037 */ addiu $at,$zero,0x37 -.L0f04d72c: -/* f04d72c: 10410003 */ beq $v0,$at,.L0f04d73c -/* f04d730: 24010039 */ addiu $at,$zero,0x39 -/* f04d734: 54410003 */ bnel $v0,$at,.L0f04d744 -/* f04d738: 8e070424 */ lw $a3,0x424($s0) -.L0f04d73c: -/* f04d73c: ae040430 */ sw $a0,0x430($s0) -.L0f04d740: -/* f04d740: 8e070424 */ lw $a3,0x424($s0) -.L0f04d744: -/* f04d744: 50e00007 */ beqzl $a3,.L0f04d764 -/* f04d748: 8e020428 */ lw $v0,0x428($s0) -/* f04d74c: 8cee0108 */ lw $t6,0x108($a3) -/* f04d750: ae0e0434 */ sw $t6,0x434($s0) -/* f04d754: 94ef010c */ lhu $t7,0x10c($a3) -/* f04d758: 10000018 */ beqz $zero,.L0f04d7bc -/* f04d75c: ae0f0438 */ sw $t7,0x438($s0) -/* f04d760: 8e020428 */ lw $v0,0x428($s0) -.L0f04d764: -/* f04d764: 50400007 */ beqzl $v0,.L0f04d784 -/* f04d768: 8e02042c */ lw $v0,0x42c($s0) -/* f04d76c: 8c58005c */ lw $t8,0x5c($v0) -/* f04d770: ae180434 */ sw $t8,0x434($s0) -/* f04d774: 94590060 */ lhu $t9,0x60($v0) -/* f04d778: 10000010 */ beqz $zero,.L0f04d7bc -/* f04d77c: ae190438 */ sw $t9,0x438($s0) -/* f04d780: 8e02042c */ lw $v0,0x42c($s0) -.L0f04d784: -/* f04d784: 50400007 */ beqzl $v0,.L0f04d7a4 -/* f04d788: 8e020430 */ lw $v0,0x430($s0) -/* f04d78c: 8c48005c */ lw $t0,0x5c($v0) -/* f04d790: ae080434 */ sw $t0,0x434($s0) -/* f04d794: 94490060 */ lhu $t1,0x60($v0) -/* f04d798: 10000008 */ beqz $zero,.L0f04d7bc -/* f04d79c: ae090438 */ sw $t1,0x438($s0) -/* f04d7a0: 8e020430 */ lw $v0,0x430($s0) -.L0f04d7a4: -/* f04d7a4: 50400006 */ beqzl $v0,.L0f04d7c0 -/* f04d7a8: 8e0c0434 */ lw $t4,0x434($s0) -/* f04d7ac: 8c4a005c */ lw $t2,0x5c($v0) -/* f04d7b0: ae0a0434 */ sw $t2,0x434($s0) -/* f04d7b4: 944b0060 */ lhu $t3,0x60($v0) -/* f04d7b8: ae0b0438 */ sw $t3,0x438($s0) -.L0f04d7bc: -/* f04d7bc: 8e0c0434 */ lw $t4,0x434($s0) -.L0f04d7c0: -/* f04d7c0: 518000db */ beqzl $t4,.L0f04db30 -/* f04d7c4: 8fbf001c */ lw $ra,0x1c($sp) -/* f04d7c8: 10e00004 */ beqz $a3,.L0f04d7dc -/* f04d7cc: 00000000 */ sll $zero,$zero,0x0 -/* f04d7d0: 0fc13111 */ jal func0f04c444 -/* f04d7d4: 00e02025 */ or $a0,$a3,$zero -/* f04d7d8: 8e070424 */ lw $a3,0x424($s0) -.L0f04d7dc: -/* f04d7dc: 10e0002c */ beqz $a3,.L0f04d890 -/* f04d7e0: 00000000 */ sll $zero,$zero,0x0 -/* f04d7e4: 8ced0018 */ lw $t5,0x18($a3) -/* f04d7e8: 000d7280 */ sll $t6,$t5,0xa -/* f04d7ec: 05c10028 */ bgez $t6,.L0f04d890 -/* f04d7f0: 00000000 */ sll $zero,$zero,0x0 -/* f04d7f4: 0c00744f */ jal 0x1d13c -/* f04d7f8: 8ce40020 */ lw $a0,0x20($a3) -/* f04d7fc: 8e070424 */ lw $a3,0x424($s0) -/* f04d800: 84ef0110 */ lh $t7,0x110($a3) -/* f04d804: 05e00020 */ bltz $t7,.L0f04d888 -/* f04d808: 00000000 */ sll $zero,$zero,0x0 -/* f04d80c: 44800000 */ mtc1 $zero,$f0 -/* f04d810: c4e40180 */ lwc1 $f4,0x180($a3) -/* f04d814: 4600203e */ c.le.s $f4,$f0 -/* f04d818: 00000000 */ sll $zero,$zero,0x0 -/* f04d81c: 4500001a */ bc1f .L0f04d888 -/* f04d820: 00000000 */ sll $zero,$zero,0x0 -/* f04d824: c4e60100 */ lwc1 $f6,0x100($a3) -/* f04d828: 24010269 */ addiu $at,$zero,0x269 -/* f04d82c: 4606003e */ c.le.s $f0,$f6 -/* f04d830: 00000000 */ sll $zero,$zero,0x0 -/* f04d834: 45010004 */ bc1t .L0f04d848 -/* f04d838: 00000000 */ sll $zero,$zero,0x0 -/* f04d83c: 8cf80300 */ lw $t8,0x300($a3) -/* f04d840: 13000011 */ beqz $t8,.L0f04d888 -/* f04d844: 00000000 */ sll $zero,$zero,0x0 -.L0f04d848: -/* f04d848: 1041000f */ beq $v0,$at,.L0f04d888 -/* f04d84c: 2401026b */ addiu $at,$zero,0x26b -/* f04d850: 1041000d */ beq $v0,$at,.L0f04d888 -/* f04d854: 2401026a */ addiu $at,$zero,0x26a -/* f04d858: 1041000b */ beq $v0,$at,.L0f04d888 -/* f04d85c: 00000000 */ sll $zero,$zero,0x0 -/* f04d860: 8cf90018 */ lw $t9,0x18($a3) -/* f04d864: 3c01ffdf */ lui $at,0xffdf -/* f04d868: 3421ffff */ ori $at,$at,0xffff -/* f04d86c: 03214024 */ and $t0,$t9,$at -/* f04d870: ace80018 */ sw $t0,0x18($a3) -/* f04d874: 8e090424 */ lw $t1,0x424($s0) -/* f04d878: 0c006134 */ jal ailistFindById -/* f04d87c: 85240110 */ lh $a0,0x110($t1) -/* f04d880: ae020434 */ sw $v0,0x434($s0) -/* f04d884: ae000438 */ sw $zero,0x438($s0) -.L0f04d888: -/* f04d888: 1000008b */ beqz $zero,.L0f04dab8 -/* f04d88c: 8e040434 */ lw $a0,0x434($s0) -.L0f04d890: -/* f04d890: 10e00052 */ beqz $a3,.L0f04d9dc -/* f04d894: 00000000 */ sll $zero,$zero,0x0 -/* f04d898: 8ce20018 */ lw $v0,0x18($a3) -/* f04d89c: 3c01f7ff */ lui $at,0xf7ff -/* f04d8a0: 3421ffff */ ori $at,$at,0xffff -/* f04d8a4: 00025100 */ sll $t2,$v0,0x4 -/* f04d8a8: 0541004c */ bgez $t2,.L0f04d9dc -/* f04d8ac: 00415824 */ and $t3,$v0,$at -/* f04d8b0: aceb0018 */ sw $t3,0x18($a3) -/* f04d8b4: 8e0c0424 */ lw $t4,0x424($s0) -/* f04d8b8: 85840356 */ lh $a0,0x356($t4) -/* f04d8bc: 0482003b */ bltzl $a0,.L0f04d9ac -/* f04d8c0: 8e070424 */ lw $a3,0x424($s0) -/* f04d8c4: 0c006134 */ jal ailistFindById -/* f04d8c8: 00000000 */ sll $zero,$zero,0x0 -/* f04d8cc: 8e0d0424 */ lw $t5,0x424($s0) -/* f04d8d0: 8dae0108 */ lw $t6,0x108($t5) -/* f04d8d4: 504e0035 */ beql $v0,$t6,.L0f04d9ac -/* f04d8d8: 8e070424 */ lw $a3,0x424($s0) -/* f04d8dc: 0c004b70 */ jal 0x12dc0 -/* f04d8e0: 00000000 */ sll $zero,$zero,0x0 -/* f04d8e4: 24010064 */ addiu $at,$zero,0x64 -/* f04d8e8: 0041001b */ divu $zero,$v0,$at -/* f04d8ec: 8e070424 */ lw $a3,0x424($s0) -/* f04d8f0: 00007810 */ mfhi $t7 -/* f04d8f4: 24050400 */ addiu $a1,$zero,0x400 -/* f04d8f8: 90f8035e */ lbu $t8,0x35e($a3) -/* f04d8fc: 00e02025 */ or $a0,$a3,$zero -/* f04d900: 01f8082b */ sltu $at,$t7,$t8 -/* f04d904: 50200029 */ beqzl $at,.L0f04d9ac -/* f04d908: 8e070424 */ lw $a3,0x424($s0) -/* f04d90c: 0fc12790 */ jal func0f049e40 -/* f04d910: 24060001 */ addiu $a2,$zero,0x1 -/* f04d914: 14400024 */ bnez $v0,.L0f04d9a8 -/* f04d918: 3c050001 */ lui $a1,0x1 -/* f04d91c: 8e040424 */ lw $a0,0x424($s0) -/* f04d920: 0fc12790 */ jal func0f049e40 -/* f04d924: 00003025 */ or $a2,$zero,$zero -/* f04d928: 54400020 */ bnezl $v0,.L0f04d9ac -/* f04d92c: 8e070424 */ lw $a3,0x424($s0) -/* f04d930: 8e190424 */ lw $t9,0x424($s0) -/* f04d934: 0c006134 */ jal ailistFindById -/* f04d938: 87240356 */ lh $a0,0x356($t9) -/* f04d93c: 8e070424 */ lw $a3,0x424($s0) -/* f04d940: 8ce80108 */ lw $t0,0x108($a3) -/* f04d944: 50480019 */ beql $v0,$t0,.L0f04d9ac -/* f04d948: 8e070424 */ lw $a3,0x424($s0) -/* f04d94c: 80e20007 */ lb $v0,0x7($a3) -/* f04d950: 24010008 */ addiu $at,$zero,0x8 -/* f04d954: 10410014 */ beq $v0,$at,.L0f04d9a8 -/* f04d958: 24010009 */ addiu $at,$zero,0x9 -/* f04d95c: 10410012 */ beq $v0,$at,.L0f04d9a8 -/* f04d960: 24010004 */ addiu $at,$zero,0x4 -/* f04d964: 10410010 */ beq $v0,$at,.L0f04d9a8 -/* f04d968: 24010005 */ addiu $at,$zero,0x5 -/* f04d96c: 1041000e */ beq $v0,$at,.L0f04d9a8 -/* f04d970: 24010006 */ addiu $at,$zero,0x6 -/* f04d974: 1041000c */ beq $v0,$at,.L0f04d9a8 -/* f04d978: 24010007 */ addiu $at,$zero,0x7 -/* f04d97c: 1041000a */ beq $v0,$at,.L0f04d9a8 -/* f04d980: 2401000a */ addiu $at,$zero,0xa -/* f04d984: 50410009 */ beql $v0,$at,.L0f04d9ac -/* f04d988: 8e070424 */ lw $a3,0x424($s0) -/* f04d98c: 0c006134 */ jal ailistFindById -/* f04d990: 84e40356 */ lh $a0,0x356($a3) -/* f04d994: 8e090424 */ lw $t1,0x424($s0) -/* f04d998: ae020434 */ sw $v0,0x434($s0) -/* f04d99c: ae000438 */ sw $zero,0x438($s0) -/* f04d9a0: 1000000c */ beqz $zero,.L0f04d9d4 -/* f04d9a4: a120035e */ sb $zero,0x35e($t1) -.L0f04d9a8: -/* f04d9a8: 8e070424 */ lw $a3,0x424($s0) -.L0f04d9ac: -/* f04d9ac: 90ea035e */ lbu $t2,0x35e($a3) -/* f04d9b0: 000a5840 */ sll $t3,$t2,0x1 -/* f04d9b4: a0eb035e */ sb $t3,0x35e($a3) -/* f04d9b8: 8e070424 */ lw $a3,0x424($s0) -/* f04d9bc: 90e2035f */ lbu $v0,0x35f($a3) -/* f04d9c0: 90ec035e */ lbu $t4,0x35e($a3) -/* f04d9c4: 004c082a */ slt $at,$v0,$t4 -/* f04d9c8: 10200002 */ beqz $at,.L0f04d9d4 -/* f04d9cc: 00000000 */ sll $zero,$zero,0x0 -/* f04d9d0: a0e2035e */ sb $v0,0x35e($a3) -.L0f04d9d4: -/* f04d9d4: 10000038 */ beqz $zero,.L0f04dab8 -/* f04d9d8: 8e040434 */ lw $a0,0x434($s0) -.L0f04d9dc: -/* f04d9dc: 50e00036 */ beqzl $a3,.L0f04dab8 -/* f04d9e0: 8e040434 */ lw $a0,0x434($s0) -/* f04d9e4: 8ced032c */ lw $t5,0x32c($a3) -/* f04d9e8: 00e02025 */ or $a0,$a3,$zero -/* f04d9ec: 24050400 */ addiu $a1,$zero,0x400 -/* f04d9f0: 000d7b80 */ sll $t7,$t5,0xe -/* f04d9f4: 05e30030 */ bgezl $t7,.L0f04dab8 -/* f04d9f8: 8e040434 */ lw $a0,0x434($s0) -/* f04d9fc: 0fc12790 */ jal func0f049e40 -/* f04da00: 24060001 */ addiu $a2,$zero,0x1 -/* f04da04: 5440002c */ bnezl $v0,.L0f04dab8 -/* f04da08: 8e040434 */ lw $a0,0x434($s0) -/* f04da0c: 8e180424 */ lw $t8,0x424($s0) -/* f04da10: 0c006134 */ jal ailistFindById -/* f04da14: 8704035a */ lh $a0,0x35a($t8) -/* f04da18: 8e070424 */ lw $a3,0x424($s0) -/* f04da1c: 8cf90108 */ lw $t9,0x108($a3) -/* f04da20: 50590025 */ beql $v0,$t9,.L0f04dab8 -/* f04da24: 8e040434 */ lw $a0,0x434($s0) -/* f04da28: 8e0804b4 */ lw $t0,0x4b4($s0) -/* f04da2c: 2401001c */ addiu $at,$zero,0x1c -/* f04da30: 51010021 */ beql $t0,$at,.L0f04dab8 -/* f04da34: 8e040434 */ lw $a0,0x434($s0) -/* f04da38: 90e9032d */ lbu $t1,0x32d($a3) -/* f04da3c: 312afffd */ andi $t2,$t1,0xfffd -/* f04da40: a0ea032d */ sb $t2,0x32d($a3) -/* f04da44: 8e070424 */ lw $a3,0x424($s0) -/* f04da48: 84eb035a */ lh $t3,0x35a($a3) -/* f04da4c: 05600017 */ bltz $t3,.L0f04daac -/* f04da50: 00000000 */ sll $zero,$zero,0x0 -/* f04da54: 80e20007 */ lb $v0,0x7($a3) -/* f04da58: 24010004 */ addiu $at,$zero,0x4 -/* f04da5c: 10410013 */ beq $v0,$at,.L0f04daac -/* f04da60: 24010005 */ addiu $at,$zero,0x5 -/* f04da64: 10410011 */ beq $v0,$at,.L0f04daac -/* f04da68: 24010006 */ addiu $at,$zero,0x6 -/* f04da6c: 1041000f */ beq $v0,$at,.L0f04daac -/* f04da70: 00e02025 */ or $a0,$a3,$zero -/* f04da74: 24050400 */ addiu $a1,$zero,0x400 -/* f04da78: 0fc12776 */ jal func0f049dd8 -/* f04da7c: 24060001 */ addiu $a2,$zero,0x1 -/* f04da80: 8e040424 */ lw $a0,0x424($s0) -/* f04da84: 3c051000 */ lui $a1,0x1000 -/* f04da88: 0fc12776 */ jal func0f049dd8 -/* f04da8c: 24060001 */ addiu $a2,$zero,0x1 -/* f04da90: 8e0c0424 */ lw $t4,0x424($s0) -/* f04da94: a1800113 */ sb $zero,0x113($t4) -/* f04da98: 8e0d0424 */ lw $t5,0x424($s0) -/* f04da9c: 0c006134 */ jal ailistFindById -/* f04daa0: 85a4035a */ lh $a0,0x35a($t5) -/* f04daa4: ae020434 */ sw $v0,0x434($s0) -/* f04daa8: ae000438 */ sw $zero,0x438($s0) -.L0f04daac: -/* f04daac: 10000002 */ beqz $zero,.L0f04dab8 -/* f04dab0: 8e040434 */ lw $a0,0x434($s0) -/* f04dab4: 8e040434 */ lw $a0,0x434($s0) -.L0f04dab8: -/* f04dab8: 5080001d */ beqzl $a0,.L0f04db30 -/* f04dabc: 8fbf001c */ lw $ra,0x1c($sp) -/* f04dac0: 8e050438 */ lw $a1,0x438($s0) -.L0f04dac4: -/* f04dac4: 00a41021 */ addu $v0,$a1,$a0 -/* f04dac8: 904f0000 */ lbu $t7,0x0($v0) -/* f04dacc: 904e0001 */ lbu $t6,0x1($v0) -/* f04dad0: 000fc200 */ sll $t8,$t7,0x8 -/* f04dad4: 01d81821 */ addu $v1,$t6,$t8 -/* f04dad8: 0460000c */ bltz $v1,.L0f04db0c -/* f04dadc: 286101e1 */ slti $at,$v1,0x1e1 -/* f04dae0: 1020000a */ beqz $at,.L0f04db0c -/* f04dae4: 0003c880 */ sll $t9,$v1,0x2 -/* f04dae8: 3c018007 */ lui $at,0x8007 -/* f04daec: 00390821 */ addu $at,$at,$t9 -/* f04daf0: 8c398490 */ lw $t9,-0x7b70($at) -/* f04daf4: 0320f809 */ jalr $t9 -/* f04daf8: 00000000 */ sll $zero,$zero,0x0 -/* f04dafc: 50400009 */ beqzl $v0,.L0f04db24 -/* f04db00: 8e040434 */ lw $a0,0x434($s0) -/* f04db04: 1000000a */ beqz $zero,.L0f04db30 -/* f04db08: 8fbf001c */ lw $ra,0x1c($sp) -.L0f04db0c: -/* f04db0c: 0fc136d0 */ jal func0f04db40 -/* f04db10: 00000000 */ sll $zero,$zero,0x0 -/* f04db14: 8e080438 */ lw $t0,0x438($s0) -/* f04db18: 01024821 */ addu $t1,$t0,$v0 -/* f04db1c: ae090438 */ sw $t1,0x438($s0) -/* f04db20: 8e040434 */ lw $a0,0x434($s0) -.L0f04db24: -/* f04db24: 5480ffe7 */ bnezl $a0,.L0f04dac4 -/* f04db28: 8e050438 */ lw $a1,0x438($s0) -/* f04db2c: 8fbf001c */ lw $ra,0x1c($sp) -.L0f04db30: -/* f04db30: 8fb00018 */ lw $s0,0x18($sp) -/* f04db34: 27bd0020 */ addiu $sp,$sp,0x20 -/* f04db38: 03e00008 */ jr $ra -/* f04db3c: 00000000 */ sll $zero,$zero,0x0 -); - -GLOBAL_ASM( -glabel func0f04db40 -/* f04db40: 00a41021 */ addu $v0,$a1,$a0 -/* f04db44: 904f0000 */ lbu $t7,0x0($v0) -/* f04db48: 904e0001 */ lbu $t6,0x1($v0) -/* f04db4c: 240100b5 */ addiu $at,$zero,0xb5 -/* f04db50: 000fc200 */ sll $t8,$t7,0x8 -/* f04db54: 01d81821 */ addu $v1,$t6,$t8 -/* f04db58: 1461000e */ bne $v1,$at,.L0f04db94 -/* f04db5c: 00000000 */ sll $zero,$zero,0x0 -/* f04db60: 90590002 */ lbu $t9,0x2($v0) -/* f04db64: 24a30002 */ addiu $v1,$a1,0x2 -/* f04db68: 00831021 */ addu $v0,$a0,$v1 -/* f04db6c: 53200007 */ beqzl $t9,.L0f04db8c -/* f04db70: 00651023 */ subu $v0,$v1,$a1 -/* f04db74: 90480001 */ lbu $t0,0x1($v0) -.L0f04db78: -/* f04db78: 24630001 */ addiu $v1,$v1,0x1 -/* f04db7c: 24420001 */ addiu $v0,$v0,0x1 -/* f04db80: 5500fffd */ bnezl $t0,.L0f04db78 -/* f04db84: 90480001 */ lbu $t0,0x1($v0) -/* f04db88: 00651023 */ subu $v0,$v1,$a1 -.L0f04db8c: -/* f04db8c: 03e00008 */ jr $ra -/* f04db90: 24420001 */ addiu $v0,$v0,0x1 -.L0f04db94: -/* f04db94: 04600007 */ bltz $v1,.L0f04dbb4 -/* f04db98: 286101e1 */ slti $at,$v1,0x1e1 -/* f04db9c: 10200005 */ beqz $at,.L0f04dbb4 -/* f04dba0: 00034840 */ sll $t1,$v1,0x1 -/* f04dba4: 3c028007 */ lui $v0,0x8007 -/* f04dba8: 00491021 */ addu $v0,$v0,$t1 -/* f04dbac: 03e00008 */ jr $ra -/* f04dbb0: 94428c14 */ lhu $v0,-0x73ec($v0) -.L0f04dbb4: -/* f04dbb4: 24020001 */ addiu $v0,$zero,0x1 -/* f04dbb8: 03e00008 */ jr $ra -/* f04dbbc: 00000000 */ sll $zero,$zero,0x0 -); diff --git a/src/game/game_0601b0.c b/src/game/game_0601b0.c index dd89413fa..999468be8 100644 --- a/src/game/game_0601b0.c +++ b/src/game/game_0601b0.c @@ -1,6 +1,7 @@ #include #include "constants.h" #include "gvars/gvars.h" +#include "game/chr/chrai.h" #include "game/game_0601b0.h" #include "library/library.h" #include "setup/setup_000000.h" @@ -32142,7 +32143,7 @@ glabel func0f07c7b0 /* f07c7cc: 02002025 */ or $a0,$s0,$zero /* f07c7d0: e7a4003c */ swc1 $f4,0x3c($sp) /* f07c7d4: c6060080 */ lwc1 $f6,0x80($s0) -/* f07c7d8: 0fc135ad */ jal func0f04d6b4 +/* f07c7d8: 0fc135ad */ jal chraiExecute /* f07c7dc: e7a60038 */ swc1 $f6,0x38($sp) /* f07c7e0: 3c18800a */ lui $t8,0x800a /* f07c7e4: 8f189ff8 */ lw $t8,-0x6008($t8) @@ -32179,7 +32180,7 @@ glabel func0f07c830 /* f07c850: 02002025 */ or $a0,$s0,$zero /* f07c854: e7a400a4 */ swc1 $f4,0xa4($sp) /* f07c858: c6060080 */ lwc1 $f6,0x80($s0) -/* f07c85c: 0fc135ad */ jal func0f04d6b4 +/* f07c85c: 0fc135ad */ jal chraiExecute /* f07c860: e7a600a0 */ swc1 $f6,0xa0($sp) /* f07c864: 3c03800a */ lui $v1,0x800a /* f07c868: 24639fc0 */ addiu $v1,$v1,-24640 @@ -32371,7 +32372,7 @@ glabel func0f07cacc /* f07cb1c: afa5005c */ sw $a1,0x5c($sp) /* f07cb20: e7a00158 */ swc1 $f0,0x158($sp) /* f07cb24: 02602025 */ or $a0,$s3,$zero -/* f07cb28: 0fc135ad */ jal func0f04d6b4 +/* f07cb28: 0fc135ad */ jal chraiExecute /* f07cb2c: 24050001 */ addiu $a1,$zero,0x1 /* f07cb30: 3c18800a */ lui $t8,0x800a /* f07cb34: 8f189ff8 */ lw $t8,-0x6008($t8) @@ -33027,7 +33028,7 @@ glabel func0f07d1e4 /* f07d4b4: 100002ab */ beqz $zero,.L0f07df64 /* f07d4b8: 8fbf004c */ lw $ra,0x4c($sp) .L0f07d4bc: -/* f07d4bc: 0fc135ad */ jal func0f04d6b4 +/* f07d4bc: 0fc135ad */ jal chraiExecute /* f07d4c0: afa201f8 */ sw $v0,0x1f8($sp) /* f07d4c4: afa00274 */ sw $zero,0x274($sp) /* f07d4c8: 8e020088 */ lw $v0,0x88($s0) diff --git a/src/include/constants.h b/src/include/constants.h index bed6ec6b6..d192c348d 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -227,6 +227,10 @@ #define CHRFLAG3_40000000 0x40000000 // Not used in scripts #define CHRFLAG3_80000000 0x80000000 // Not used in scripts +#define CMD_LABEL 0x0002 +#define CMD_END 0x0004 +#define CMD_PRINT 0x00b5 + #define COLOR_00_GREEN 0x00 #define COLOR_02_WHITE 0x02 #define COLOR_03_RED 0x03 diff --git a/src/include/game/chr/chrai.h b/src/include/game/chr/chrai.h new file mode 100644 index 000000000..562e8c453 --- /dev/null +++ b/src/include/game/chr/chrai.h @@ -0,0 +1,10 @@ +#ifndef _IN_CHR_CHRAI_H +#define _IN_CHR_CHRAI_H +#include + +s32 chraiEndList(u8 *ailist, u64 *unk); +u32 chraiGoToLabel(u8 *ailist, u32 aioffset, u8 label); +void chraiExecute(struct chrdata *chr, u8 mode); +u32 chraiGetCommandLength(u8 *ailist, u32 aioffset); + +#endif diff --git a/src/include/setup/setup_000000.h b/src/include/setup/setup_000000.h index 8345f48df..0941069a9 100644 --- a/src/include/setup/setup_000000.h +++ b/src/include/setup/setup_000000.h @@ -16,6 +16,8 @@ extern u32 var0000c3f8; extern u32 var0000db50; extern u32 var0000db98; +extern u16 command_lengths[]; + extern struct coord var0000f00c; extern s32 g_AlarmActive;