Convert chrdata.BITFIELD to actual bitfield

* Match chraiExecute
* Match ai01b3
* Match aiToggleP1P2
* Match ai01b5
This commit is contained in:
Ryan Dwyer 2019-12-16 21:56:31 +10:00
parent 13527755de
commit 452d86aec3
6 changed files with 185 additions and 641 deletions

View File

@ -12702,7 +12702,7 @@ struct position *chrGetTargetPosition(struct chrdata *chr)
struct position *ret;
if (chr->target == -1) {
ret = g_Vars.players[(u32)chr->BITFIELD.shorts[1] >> 14]->targetpos;
ret = g_Vars.players[chr->p1p2]->targetpos;
} else {
ret = g_Vars.positions + chr->target;
}
@ -50233,7 +50233,7 @@ glabel chrResolveId
// break;
// case 0xf2:
// {
// u32 index = g_Vars.coopplayernum >= 0 ? (u32)ref->BITFIELD.shorts[1] >> 14 : g_Vars.bondplayernum;
// u32 index = g_Vars.coopplayernum >= 0 ? ref->p1p2 : g_Vars.bondplayernum;
// struct player *player = g_Vars.players[index];
// if (player && player->targetpos && player->targetpos->chr) {
// id = player->targetpos->chr->chrnum;
@ -50242,7 +50242,7 @@ glabel chrResolveId
// break;
// case 0xf1:
// if (g_Vars.coopplayernum >= 0) {
// struct player *player = g_Vars.players[1 - ((u32)ref->BITFIELD.shorts[1] >> 14)];
// struct player *player = g_Vars.players[1 - ref->p1p2];
// if (player && player->targetpos && player->targetpos->chr) {
// id = player->targetpos->chr->chrnum;
// }

View File

@ -80,449 +80,128 @@ u32 chraiGoToLabel(u8 *ailist, u32 aioffset, u8 label)
} while (true);
}
GLOBAL_ASM(
glabel chraiExecute
/* f04d6b4: 27bdffe0 */ addiu $sp,$sp,-32
/* f04d6b8: afb00018 */ sw $s0,0x18($sp)
/* f04d6bc: 3c10800a */ lui $s0,%hi(g_Vars)
/* f04d6c0: 26109fc0 */ addiu $s0,$s0,%lo(g_Vars)
/* 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 func0001d13c
/* 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 random
/* 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 chrHasFlag
/* 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 chrHasFlag
/* 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 chrHasFlag
/* 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 chrSetFlags
/* f04da7c: 24060001 */ addiu $a2,$zero,0x1
/* f04da80: 8e040424 */ lw $a0,0x424($s0)
/* f04da84: 3c051000 */ lui $a1,0x1000
/* f04da88: 0fc12776 */ jal chrSetFlags
/* 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
);
void chraiExecute(void *entity, s32 entity_type)
{
g_Vars.chrdata = NULL;
g_Vars.objdata = NULL;
g_Vars.aicdata = NULL;
g_Vars.hovdata = NULL;
g_Vars.ailist = NULL;
g_Vars.aioffset = 0;
// Uses different temporary register near BITFIELD. Matches otherwise.
//void chraiExecute(void *entity, s32 entity_type)
//{
// g_Vars.chrdata = NULL;
// g_Vars.objdata = NULL;
// g_Vars.aicdata = NULL;
// g_Vars.hovdata = NULL;
// g_Vars.ailist = NULL;
// g_Vars.aioffset = 0;
//
// if (entity_type == 3) {
// g_Vars.chrdata = entity;
// } else if (entity_type == 1) {
// struct defaultobj *obj = entity;
//
// if (obj->type == 0x27) {
// g_Vars.objdata = entity;
// } else if (obj->type == 0x28) {
// g_Vars.aicdata = entity;
// } else if (obj->type == OBJTYPE_HOVERVEHICLE || obj->type == OBJTYPE_ARMEDVEHICLE) {
// g_Vars.hovdata = entity;
// }
// }
//
// if (g_Vars.chrdata) {
// g_Vars.ailist = g_Vars.chrdata->ailist;
// g_Vars.aioffset = g_Vars.chrdata->aioffset;
// } else if (g_Vars.objdata) {
// g_Vars.ailist = g_Vars.objdata->ailist;
// g_Vars.aioffset = g_Vars.objdata->aioffset;
// } else if (g_Vars.aicdata) {
// g_Vars.ailist = g_Vars.aicdata->ailist;
// g_Vars.aioffset = g_Vars.aicdata->aioffset;
// } else if (g_Vars.hovdata) {
// g_Vars.ailist = g_Vars.hovdata->ailist;
// g_Vars.aioffset = g_Vars.hovdata->aioffset;
// }
//
// if (g_Vars.ailist) {
// if (g_Vars.chrdata) {
// func0f04c444(g_Vars.chrdata);
// }
//
// // Check if the ailist should be switched to a different one
// if (g_Vars.chrdata && (g_Vars.chrdata->chrflags & 0x00200000)) {
// u32 animationmaybe = func0001d13c(g_Vars.chrdata->unk020);
// if (g_Vars.chrdata->aishotlist >= 0
// && g_Vars.chrdata->cshield <= 0
// && (0 <= g_Vars.chrdata->damage || g_Vars.chrdata->gungroundpos != NULL)
// && animationmaybe != 0x269 && animationmaybe != 0x26b && animationmaybe != 0x26a) {
// // Set shot list
// g_Vars.chrdata->chrflags &= ~0x00200000;
// g_Vars.ailist = ailistFindById(g_Vars.chrdata->aishotlist);
// g_Vars.aioffset = 0;
// }
// } else if (g_Vars.chrdata && (g_Vars.chrdata->chrflags & 0x08000000)) {
// g_Vars.chrdata->chrflags &= ~0x08000000;
//
// if (g_Vars.chrdata->aishootingatmelist >= 0
// && ailistFindById(g_Vars.chrdata->aishootingatmelist) != g_Vars.chrdata->ailist
// && g_Vars.chrdata->dodgerating > (u32)random() % 100
// && chrHasFlag(g_Vars.chrdata, 0x00000400, BANK_1) == 0
// && chrHasFlag(g_Vars.chrdata, 0x00010000, BANK_0) == 0
// && ailistFindById(g_Vars.chrdata->aishootingatmelist) != g_Vars.chrdata->ailist
// && g_Vars.chrdata->actiontype != 8
// && g_Vars.chrdata->actiontype != 9
// && g_Vars.chrdata->actiontype != 4
// && g_Vars.chrdata->actiontype != 5
// && g_Vars.chrdata->actiontype != 6
// && g_Vars.chrdata->actiontype != 7
// && g_Vars.chrdata->actiontype != 10) {
// // Set shooting at me list
// g_Vars.ailist = ailistFindById(g_Vars.chrdata->aishootingatmelist);
// g_Vars.aioffset = 0;
// g_Vars.chrdata->dodgerating = 0;
// } else {
// // Increase dodge rating
// g_Vars.chrdata->dodgerating *= 2;
//
// if (g_Vars.chrdata->dodgerating > g_Vars.chrdata->maxdodgerating) {
// g_Vars.chrdata->dodgerating = g_Vars.chrdata->maxdodgerating & 0xff;
// }
// }
// } else if (g_Vars.chrdata
// && g_Vars.chrdata->BITFIELD.word & 0x00020000
// && chrHasFlag(g_Vars.chrdata, 0x00000400, BANK_1) == 0
// && ailistFindById(g_Vars.chrdata->aidarkroomlist) != g_Vars.chrdata->ailist
// && g_Vars.unk0004b4 != 0x1c) {
// g_Vars.chrdata->BITFIELD.bytes[1] &= ~0x02;
//
// if (g_Vars.chrdata->aidarkroomlist >= 0
// && g_Vars.chrdata->actiontype != 4
// && g_Vars.chrdata->actiontype != 5
// && g_Vars.chrdata->actiontype != 6) {
// // Set darkroom list
// chrSetFlags(g_Vars.chrdata, 0x00000400, BANK_1);
// chrSetFlags(g_Vars.chrdata, 0x10000000, BANK_1);
// g_Vars.chrdata->alertness = 0;
// g_Vars.ailist = ailistFindById(g_Vars.chrdata->aidarkroomlist);
// g_Vars.aioffset = 0;
// }
// } else {
// // empty
// }
//
// // Iterate and execute the ailist
// while (g_Vars.ailist) {
// u8 *cmd = g_Vars.aioffset + g_Vars.ailist;
// s32 type = (cmd[0] << 8) + cmd[1];
//
// if (type >= 0 && type <= 0x1e0) {
// if (g_CommandPointers[type]()) {
// break;
// }
// } else {
// // This is attempting to handle situations where the command
// // type is invalid by passing over them and continuing
// // execution. This would very likely result in a crash though.
// g_Vars.aioffset += chraiGetCommandLength(g_Vars.ailist, g_Vars.aioffset);
// }
// }
// }
//}
if (entity_type == 3) {
g_Vars.chrdata = entity;
} else if (entity_type == 1) {
struct defaultobj *obj = entity;
if (obj->type == 0x27) {
g_Vars.objdata = entity;
} else if (obj->type == 0x28) {
g_Vars.aicdata = entity;
} else if (obj->type == OBJTYPE_HOVERVEHICLE || obj->type == OBJTYPE_ARMEDVEHICLE) {
g_Vars.hovdata = entity;
}
}
if (g_Vars.chrdata) {
g_Vars.ailist = g_Vars.chrdata->ailist;
g_Vars.aioffset = g_Vars.chrdata->aioffset;
} else if (g_Vars.objdata) {
g_Vars.ailist = g_Vars.objdata->ailist;
g_Vars.aioffset = g_Vars.objdata->aioffset;
} else if (g_Vars.aicdata) {
g_Vars.ailist = g_Vars.aicdata->ailist;
g_Vars.aioffset = g_Vars.aicdata->aioffset;
} else if (g_Vars.hovdata) {
g_Vars.ailist = g_Vars.hovdata->ailist;
g_Vars.aioffset = g_Vars.hovdata->aioffset;
}
if (g_Vars.ailist) {
if (g_Vars.chrdata) {
func0f04c444(g_Vars.chrdata);
}
// Check if the ailist should be switched to a different one
if (g_Vars.chrdata && (g_Vars.chrdata->chrflags & 0x00200000)) {
u32 animationmaybe = func0001d13c(g_Vars.chrdata->unk020);
if (g_Vars.chrdata->aishotlist >= 0
&& g_Vars.chrdata->cshield <= 0
&& (0 <= g_Vars.chrdata->damage || g_Vars.chrdata->gungroundpos != NULL)
&& animationmaybe != 0x269 && animationmaybe != 0x26b && animationmaybe != 0x26a) {
// Set shot list
g_Vars.chrdata->chrflags &= ~0x00200000;
g_Vars.ailist = ailistFindById(g_Vars.chrdata->aishotlist);
g_Vars.aioffset = 0;
}
} else if (g_Vars.chrdata && (g_Vars.chrdata->chrflags & 0x08000000)) {
g_Vars.chrdata->chrflags &= ~0x08000000;
if (g_Vars.chrdata->aishootingatmelist >= 0
&& ailistFindById(g_Vars.chrdata->aishootingatmelist) != g_Vars.chrdata->ailist
&& g_Vars.chrdata->dodgerating > (u32)random() % 100
&& chrHasFlag(g_Vars.chrdata, 0x00000400, BANK_1) == 0
&& chrHasFlag(g_Vars.chrdata, 0x00010000, BANK_0) == 0
&& ailistFindById(g_Vars.chrdata->aishootingatmelist) != g_Vars.chrdata->ailist
&& g_Vars.chrdata->actiontype != 8
&& g_Vars.chrdata->actiontype != 9
&& g_Vars.chrdata->actiontype != 4
&& g_Vars.chrdata->actiontype != 5
&& g_Vars.chrdata->actiontype != 6
&& g_Vars.chrdata->actiontype != 7
&& g_Vars.chrdata->actiontype != 10) {
// Set shooting at me list
g_Vars.ailist = ailistFindById(g_Vars.chrdata->aishootingatmelist);
g_Vars.aioffset = 0;
g_Vars.chrdata->dodgerating = 0;
} else {
// Increase dodge rating
g_Vars.chrdata->dodgerating *= 2;
if (g_Vars.chrdata->dodgerating > g_Vars.chrdata->maxdodgerating) {
g_Vars.chrdata->dodgerating = g_Vars.chrdata->maxdodgerating;
}
}
} else if (g_Vars.chrdata
&& g_Vars.chrdata->darkroomthing
&& chrHasFlag(g_Vars.chrdata, 0x00000400, BANK_1) == 0
&& ailistFindById(g_Vars.chrdata->aidarkroomlist) != g_Vars.chrdata->ailist
&& g_Vars.unk0004b4 != 0x1c) {
g_Vars.chrdata->darkroomthing = 0;
if (g_Vars.chrdata->aidarkroomlist >= 0
&& g_Vars.chrdata->actiontype != 4
&& g_Vars.chrdata->actiontype != 5
&& g_Vars.chrdata->actiontype != 6) {
// Set darkroom list
chrSetFlags(g_Vars.chrdata, 0x00000400, BANK_1);
chrSetFlags(g_Vars.chrdata, 0x10000000, BANK_1);
g_Vars.chrdata->alertness = 0;
g_Vars.ailist = ailistFindById(g_Vars.chrdata->aidarkroomlist);
g_Vars.aioffset = 0;
}
} else {
// empty
}
// Iterate and execute the ailist
while (g_Vars.ailist) {
u8 *cmd = g_Vars.aioffset + g_Vars.ailist;
s32 type = (cmd[0] << 8) + cmd[1];
if (type >= 0 && type <= 0x1e0) {
if (g_CommandPointers[type]()) {
break;
}
} else {
// This is attempting to handle situations where the command
// type is invalid by passing over them and continuing
// execution. This would very likely result in a crash though.
g_Vars.aioffset += chraiGetCommandLength(g_Vars.ailist, g_Vars.aioffset);
}
}
}
}
u32 chraiGetCommandLength(u8 *ailist, u32 aioffset)
{

View File

@ -12693,7 +12693,7 @@ bool aiMiniSkedarTryPounce(void)
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
u16 thing = cmd[4] | (cmd[3] << 8);
if (func0f04767c(g_Vars.chrdata, (g_Vars.chrdata->BITFIELD.word << 9) >> 29, cmd[2], thing, cmd[5])) {
if (func0f04767c(g_Vars.chrdata, g_Vars.chrdata->pouncebits, cmd[2], thing, cmd[5])) {
g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[6]);
} else {
g_Vars.aioffset += 7;
@ -12968,7 +12968,7 @@ bool aiSetChrSpecialDeathAnimation(void)
struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]);
if (chr) {
chr->BITFIELD.bytes[3] = cmd[3];
chr->specialdie = cmd[3];
}
g_Vars.aioffset += 4;
@ -13594,186 +13594,55 @@ bool ai01b2(void)
/**
* @cmd 01b3
*/
GLOBAL_ASM(
glabel ai01b3
/* f05e6a0: 3c03800a */ lui $v1,%hi(g_Vars)
/* f05e6a4: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars)
/* f05e6a8: 8c780298 */ lw $t8,0x298($v1)
/* f05e6ac: 8c6e0434 */ lw $t6,0x434($v1)
/* f05e6b0: 8c6f0438 */ lw $t7,0x438($v1)
/* f05e6b4: 27bdffe8 */ addiu $sp,$sp,-24
/* f05e6b8: afbf0014 */ sw $ra,0x14($sp)
/* f05e6bc: 07000020 */ bltz $t8,.L0f05e740
/* f05e6c0: 01cf1021 */ addu $v0,$t6,$t7
/* f05e6c4: 8c640424 */ lw $a0,0x424($v1)
/* f05e6c8: 0fc126d1 */ jal chrFindById
/* f05e6cc: 90450002 */ lbu $a1,0x2($v0)
/* f05e6d0: 3c03800a */ lui $v1,%hi(g_Vars)
/* f05e6d4: 1040001a */ beqz $v0,.L0f05e740
/* f05e6d8: 24639fc0 */ addiu $v1,$v1,%lo(g_Vars)
/* f05e6dc: 9459032e */ lhu $t9,0x32e($v0)
/* f05e6e0: 8c640294 */ lw $a0,0x294($v1)
/* f05e6e4: 00194382 */ srl $t0,$t9,0xe
/* f05e6e8: 5488000d */ bnel $a0,$t0,.L0f05e720
/* f05e6ec: 8c6802a0 */ lw $t0,0x2a0($v1)
/* f05e6f0: 8c6902a4 */ lw $t1,0x2a4($v1)
/* f05e6f4: 8d2a00d8 */ lw $t2,0xd8($t1)
/* f05e6f8: 55400009 */ bnezl $t2,.L0f05e720
/* f05e6fc: 8c6802a0 */ lw $t0,0x2a0($v1)
/* f05e700: 8c6c0298 */ lw $t4,0x298($v1)
/* f05e704: 904f032e */ lbu $t7,0x32e($v0)
/* f05e708: 000c7180 */ sll $t6,$t4,0x6
/* f05e70c: 31f8ff3f */ andi $t8,$t7,0xff3f
/* f05e710: 01d8c825 */ or $t9,$t6,$t8
/* f05e714: 1000000a */ beqz $zero,.L0f05e740
/* f05e718: a059032e */ sb $t9,0x32e($v0)
/* f05e71c: 8c6802a0 */ lw $t0,0x2a0($v1)
.L0f05e720:
/* f05e720: 8d0900d8 */ lw $t1,0xd8($t0)
/* f05e724: 55200007 */ bnezl $t1,.L0f05e744
/* f05e728: 8c780438 */ lw $t8,0x438($v1)
/* f05e72c: 904d032e */ lbu $t5,0x32e($v0)
/* f05e730: 00046180 */ sll $t4,$a0,0x6
/* f05e734: 31afff3f */ andi $t7,$t5,0xff3f
/* f05e738: 018f7025 */ or $t6,$t4,$t7
/* f05e73c: a04e032e */ sb $t6,0x32e($v0)
.L0f05e740:
/* f05e740: 8c780438 */ lw $t8,0x438($v1)
.L0f05e744:
/* f05e744: 8fbf0014 */ lw $ra,0x14($sp)
/* f05e748: 27bd0018 */ addiu $sp,$sp,0x18
/* f05e74c: 27190003 */ addiu $t9,$t8,0x3
/* f05e750: ac790438 */ sw $t9,0x438($v1)
/* f05e754: 03e00008 */ jr $ra
/* f05e758: 00001025 */ or $v0,$zero,$zero
);
bool aiToggleP1P2(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
// Mismatch due to different temporary registers
//bool ai01b3(void)
//{
// u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
//
// if (g_Vars.coopplayernum >= 0) {
// struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]);
//
// if (chr) {
// if (((u32)chr->BITFIELD >> 14) == g_Vars.bondplayernum && g_Vars.coop->unk00d8 == 0) {
// chr->bitfielddata.unk32e = (g_Vars.coopplayernum << 6) | (chr->bitfielddata.unk32e & 0xff3f);
// } else if (g_Vars.bond->unk00d8 == 0) {
// chr->bitfielddata.unk32e = (g_Vars.bondplayernum << 6) | (chr->bitfielddata.unk32e & 0xff3f);
// }
// }
// }
//
// g_Vars.aioffset += 3;
//
// return false;
//}
if (g_Vars.coopplayernum >= 0) {
struct chrdata *chr = chrFindById(g_Vars.chrdata, cmd[2]);
if (chr) {
if (chr->p1p2 == g_Vars.bondplayernum && g_Vars.coop->unk00d8 == 0) {
chr->p1p2 = g_Vars.coopplayernum;
} else if (g_Vars.bond->unk00d8 == 0) {
chr->p1p2 = g_Vars.bondplayernum;
}
}
}
g_Vars.aioffset += 3;
return false;
}
/**
* @cmd 01b5
*/
GLOBAL_ASM(
glabel ai01b5
/* f05e75c: 27bdffd0 */ addiu $sp,$sp,-48
/* f05e760: afb00018 */ sw $s0,0x18($sp)
/* f05e764: 3c10800a */ lui $s0,%hi(g_Vars)
/* f05e768: 26109fc0 */ addiu $s0,$s0,%lo(g_Vars)
/* f05e76c: 8e180298 */ lw $t8,0x298($s0)
/* f05e770: 8e0e0434 */ lw $t6,0x434($s0)
/* f05e774: 8e0f0438 */ lw $t7,0x438($s0)
/* f05e778: afbf001c */ sw $ra,0x1c($sp)
/* f05e77c: 07000034 */ bltz $t8,.L0f05e850
/* f05e780: 01cf1821 */ addu $v1,$t6,$t7
/* f05e784: 90650002 */ lbu $a1,0x2($v1)
/* f05e788: afa3002c */ sw $v1,0x2c($sp)
/* f05e78c: 0fc126d1 */ jal chrFindById
/* f05e790: 8e040424 */ lw $a0,0x424($s0)
/* f05e794: 8fa3002c */ lw $v1,0x2c($sp)
/* f05e798: 8e040424 */ lw $a0,0x424($s0)
/* f05e79c: 90650003 */ lbu $a1,0x3($v1)
/* f05e7a0: 0fc126d1 */ jal chrFindById
/* f05e7a4: afa20028 */ sw $v0,0x28($sp)
/* f05e7a8: 8fa60028 */ lw $a2,0x28($sp)
/* f05e7ac: 50c00029 */ beqzl $a2,.L0f05e854
/* f05e7b0: 8e080438 */ lw $t0,0x438($s0)
/* f05e7b4: 50400027 */ beqzl $v0,.L0f05e854
/* f05e7b8: 8e080438 */ lw $t0,0x438($s0)
/* f05e7bc: 8c43001c */ lw $v1,0x1c($v0)
/* f05e7c0: 50600024 */ beqzl $v1,.L0f05e854
/* f05e7c4: 8e080438 */ lw $t0,0x438($s0)
/* f05e7c8: 90790000 */ lbu $t9,0x0($v1)
/* f05e7cc: 24010006 */ addiu $at,$zero,0x6
/* f05e7d0: 57210020 */ bnel $t9,$at,.L0f05e854
/* f05e7d4: 8e080438 */ lw $t0,0x438($s0)
/* f05e7d8: 8c44001c */ lw $a0,0x1c($v0)
/* f05e7dc: afa60028 */ sw $a2,0x28($sp)
/* f05e7e0: 0fc4a25f */ jal posGetPlayerNum
/* f05e7e4: afa20024 */ sw $v0,0x24($sp)
/* f05e7e8: 00024080 */ sll $t0,$v0,0x2
/* f05e7ec: 02084821 */ addu $t1,$s0,$t0
/* f05e7f0: 8d2a0064 */ lw $t2,0x64($t1)
/* f05e7f4: 8fa50024 */ lw $a1,0x24($sp)
/* f05e7f8: 8fa60028 */ lw $a2,0x28($sp)
/* f05e7fc: 8d4b00d8 */ lw $t3,0xd8($t2)
/* f05e800: 55600014 */ bnezl $t3,.L0f05e854
/* f05e804: 8e080438 */ lw $t0,0x438($s0)
/* f05e808: 8e0c02a4 */ lw $t4,0x2a4($s0)
/* f05e80c: 8cae001c */ lw $t6,0x1c($a1)
/* f05e810: 8d8d00bc */ lw $t5,0xbc($t4)
/* f05e814: 55ae0009 */ bnel $t5,$t6,.L0f05e83c
/* f05e818: 8e0d0294 */ lw $t5,0x294($s0)
/* f05e81c: 8e180298 */ lw $t8,0x298($s0)
/* f05e820: 90c9032e */ lbu $t1,0x32e($a2)
/* f05e824: 00184180 */ sll $t0,$t8,0x6
/* f05e828: 312aff3f */ andi $t2,$t1,0xff3f
/* f05e82c: 010a5825 */ or $t3,$t0,$t2
/* f05e830: 10000007 */ beqz $zero,.L0f05e850
/* f05e834: a0cb032e */ sb $t3,0x32e($a2)
/* f05e838: 8e0d0294 */ lw $t5,0x294($s0)
.L0f05e83c:
/* f05e83c: 90d8032e */ lbu $t8,0x32e($a2)
/* f05e840: 000d7980 */ sll $t7,$t5,0x6
/* f05e844: 3319ff3f */ andi $t9,$t8,0xff3f
/* f05e848: 01f94825 */ or $t1,$t7,$t9
/* f05e84c: a0c9032e */ sb $t1,0x32e($a2)
.L0f05e850:
/* f05e850: 8e080438 */ lw $t0,0x438($s0)
.L0f05e854:
/* f05e854: 8fbf001c */ lw $ra,0x1c($sp)
/* f05e858: 00001025 */ or $v0,$zero,$zero
/* f05e85c: 250a0004 */ addiu $t2,$t0,0x4
/* f05e860: ae0a0438 */ sw $t2,0x438($s0)
/* f05e864: 8fb00018 */ lw $s0,0x18($sp)
/* f05e868: 03e00008 */ jr $ra
/* f05e86c: 27bd0030 */ addiu $sp,$sp,0x30
);
bool ai01b5(void)
{
u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
//bool ai01b5(void)
//{
// u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
//
// if (g_Vars.coopplayernum >= 0) {
// struct chrdata *chr1 = chrFindById(g_Vars.chrdata, cmd[2]);
// struct chrdata *chr2 = chrFindById(g_Vars.chrdata, cmd[3]);
//
// if (chr1 && chr2 && chr2->pos && chr2->pos->type == POSITIONTYPE_PLAYER) {
// u32 playernum = posGetPlayerNum(chr2->pos);
//
// if (g_Vars.players[playernum]->unk00d8 == 0) {
// if (g_Vars.coop->targetpos == chr2->pos) {
// chr1->BITFIELD.bytes[2] = (g_Vars.coopplayernum << 6) | (chr1->BITFIELD.bytes[2] & 0xff3f);
// } else {
// chr1->BITFIELD.bytes[2] = (g_Vars.bondplayernum << 6) | (chr1->BITFIELD.bytes[2] & 0xff3f);
// }
// }
// }
// }
//
// g_Vars.aioffset += 4;
//
// return false;
//}
if (g_Vars.coopplayernum >= 0) {
struct chrdata *chr1 = chrFindById(g_Vars.chrdata, cmd[2]);
struct chrdata *chr2 = chrFindById(g_Vars.chrdata, cmd[3]);
if (chr1 && chr2 && chr2->pos && chr2->pos->type == POSITIONTYPE_PLAYER) {
u32 playernum = posGetPlayerNum(chr2->pos);
if (g_Vars.players[playernum]->unk00d8 == 0) {
if (chr2->pos == g_Vars.coop->targetpos) {
chr1->p1p2 = g_Vars.coopplayernum;
} else {
chr1->p1p2 = g_Vars.bondplayernum;
}
}
}
}
g_Vars.aioffset += 4;
return false;
}
/**
* @cmd 01b7
@ -13952,7 +13821,7 @@ glabel ai01bc
//{
// u8 *cmd = g_Vars.ailist + g_Vars.aioffset;
//
// if (cmd[2] == ((g_Vars.chrdata->BITFIELD.word << 9) >> 29)) {
// if (cmd[2] == g_Vars.chrdata->pouncebits) {
// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[3]);
// } else {
// g_Vars.aioffset += 4;

View File

@ -398,7 +398,7 @@
/*0x01af*/ bool aiChrGrabObject(void);
/*0x01b1*/ bool ai01b1(void);
/*0x01b2*/ bool ai01b2(void);
/*0x01b3*/ bool ai01b3(void);
/*0x01b3*/ bool aiToggleP1P2(void);
/*0x01b4*/ bool ai01b4(void);
/*0x01b5*/ bool ai01b5(void);
/*0x01b6*/ bool aiConfigureSnow(void);

View File

@ -78,14 +78,6 @@ struct pad {
/*0x50*/ u32 unk50;
};
struct bitfield {
union {
u8 bytes[4];
u16 shorts[2];
u32 word;
};
};
struct chrdata {
/*0x000*/ s16 chrnum;
/*0x002*/ s8 accuracyrating;
@ -261,15 +253,19 @@ struct chrdata {
/*0x31c*/ u32 onladder;
/*0x320*/ struct coord laddernormal;
/**
* ........ .mmm..d. pp...... aaaaaaaa
*
* m = related to miniskedar pouncing
* d = related to dark rooms
* p = P1/P2 chr ID (0-3)
* a = special death animation
*/
/*0x32c*/ struct bitfield BITFIELD;
/*0x32c*/
u8 unk32c_00 : 8;
u8 unk32c_08 : 1;
u8 pouncebits : 3;
u8 unk32c_12 : 2;
u8 darkroomthing : 1;
u8 unk32c_15 : 1;
u8 p1p2 : 2;
u8 unk32c_18 : 6;
u8 specialdie : 8;
/*0x330*/ u16 roomtosearch;
/*0x332*/ u8 propsoundcount;

View File

@ -14567,7 +14567,7 @@ bool (*g_CommandPointers[])(void) = {
/*0x01b0*/ NULL,
/*0x01b1*/ ai01b1,
/*0x01b2*/ ai01b2,
/*0x01b3*/ ai01b3,
/*0x01b3*/ aiToggleP1P2,
/*0x01b4*/ ai01b4,
/*0x01b5*/ ai01b5,
/*0x01b6*/ aiConfigureSnow,