Decompile chrAttackStand

This commit is contained in:
Ryan Dwyer 2021-05-23 16:28:24 +10:00
parent 4a1b9c948e
commit bdad78ab9d
2 changed files with 75 additions and 204 deletions

View File

@ -1083,70 +1083,29 @@ struct attackanimconfig var80066630[] = {
struct attackanimgroup var800666c0 = { var80066630, 0xffffffff };
u32 g_StandDualAttackAnims = (u32) &var80066468;
u32 var800666cc = (u32) &var80066468;
u32 var800666d0 = (u32) &var80066468;
u32 var800666d4 = (u32) &var80066468;
u32 var800666d8 = (u32) &var80066468;
u32 var800666dc = (u32) &var80066548;
u32 var800666e0 = (u32) &var80066548;
u32 var800666e4 = (u32) &var80066548;
u32 var800666e8 = (u32) &var80066548;
u32 var800666ec = (u32) &var80066548;
u32 var800666f0 = (u32) &var80066548;
u32 var800666f4 = (u32) &var80066548;
u32 var800666f8 = (u32) &var80066548;
u32 var800666fc = (u32) &var80066548;
u32 var80066700 = (u32) &var80066548;
u32 var80066704 = (u32) &var80066548;
u32 var80066708 = (u32) &var80066628;
u32 var8006670c = (u32) &var80066628;
u32 var80066710 = (u32) &var80066628;
u32 var80066714 = (u32) &var80066628;
u32 var80066718 = (u32) &var80066628;
u32 var8006671c = (u32) &var80066628;
u32 var80066720 = (u32) &var80066628;
u32 var80066724 = (u32) &var80066628;
u32 var80066728 = (u32) &var80066628;
u32 var8006672c = (u32) &var80066628;
u32 var80066730 = (u32) &var80066628;
u32 var80066734 = (u32) &var80066468;
u32 var80066738 = (u32) &var80066468;
u32 var8006673c = (u32) &var80066468;
u32 var80066740 = (u32) &var80066468;
u32 var80066744 = (u32) &var80066468;
u32 var80066748 = (u32) &var800666c0;
u32 var8006674c = (u32) &var800666c0;
u32 var80066750 = (u32) &var800666c0;
u32 var80066754 = (u32) &var800666c0;
u32 var80066758 = (u32) &var800666c0;
u32 var8006675c = (u32) &var800666c0;
u32 var80066760 = (u32) &var800666c0;
u32 var80066764 = (u32) &var800666c0;
u32 var80066768 = (u32) &var800666c0;
u32 var8006676c = (u32) &var800666c0;
u32 var80066770 = (u32) &var800666c0;
u32 var80066774 = (u32) &var800666c0;
u32 var80066778 = (u32) &var800666c0;
u32 var8006677c = (u32) &var800666c0;
u32 var80066780 = (u32) &var800666c0;
u32 var80066784 = (u32) &var800666c0;
u32 var80066788 = (u32) &var800666c0;
u32 var8006678c = (u32) &var800666c0;
u32 var80066790 = (u32) &var800666c0;
u32 var80066794 = (u32) &var800666c0;
u32 var80066798 = (u32) &var800666c0;
u32 var8006679c = (u32) &var800666c0;
u32 var800667a0 = (u32) &var800666c0;
u32 var800667a4 = (u32) &var800666c0;
u32 var800667a8 = (u32) &var800666c0;
u32 var800667ac = (u32) &var800666c0;
u32 var800667b0 = (u32) &var800666c0;
u32 var800667b4 = (u32) &var800666c0;
u32 var800667b8 = (u32) &var800666c0;
u32 var800667bc = (u32) &var800666c0;
u32 var800667c0 = (u32) &var800666c0;
u32 var800667c4 = (u32) &var800666c0;
struct attackanimgroup *g_StandDualAttackAnims[][32] = {
{
// RACE_HUMAN
&var80066468, &var80066468, &var80066468, &var80066468,
&var80066468, &var80066548, &var80066548, &var80066548,
&var80066548, &var80066548, &var80066548, &var80066548,
&var80066548, &var80066548, &var80066548, &var80066548,
&var80066628, &var80066628, &var80066628, &var80066628,
&var80066628, &var80066628, &var80066628, &var80066628,
&var80066628, &var80066628, &var80066628, &var80066468,
&var80066468, &var80066468, &var80066468, &var80066468,
}, {
// RACE_SKEDAR
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
&var800666c0, &var800666c0, &var800666c0, &var800666c0,
},
};
struct attackanimconfig var800667c8[] = {
{ 0x0007, 27, 0, 0, 0, -1, 35, 75, -1, -1, 31, 75, 0.87252569198608, -0.69802057743073, 0.90742671489716, -0.69802057743073, 1.5, 1.5 },
@ -1451,11 +1410,6 @@ s16 *var80068008[] = {
var80068004,
};
u32 var8006801c = 0x00000000;
u32 var80068020 = 0x00000000;
u32 var80068024 = 0x00000000;
u32 var80068028 = 0x00000000;
f32 func0f02dff0(s16 animnum)
{
s32 i;
@ -2295,7 +2249,7 @@ void chrRunToPos(struct chrdata *chr, struct coord *pos)
chr->act_runpos.pos.y = pos->y;
chr->act_runpos.pos.z = pos->z;
chr->sleep = 0;
chr->act_runpos.unk038 = 30; // float
chr->act_runpos.unk038 = 30;
chr->act_runpos.unk040 = 0;
if (modelIsAnimMerging(chr->model)) {
@ -2306,139 +2260,56 @@ void chrRunToPos(struct chrdata *chr, struct coord *pos)
}
}
GLOBAL_ASM(
glabel chrAttackStand
/* f030120: 27bdffa8 */ addiu $sp,$sp,-88
/* f030124: afbf0024 */ sw $ra,0x24($sp)
/* f030128: afa5005c */ sw $a1,0x5c($sp)
/* f03012c: afa40058 */ sw $a0,0x58($sp)
/* f030130: afa60060 */ sw $a2,0x60($sp)
/* f030134: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030138: 24050001 */ addiu $a1,$zero,0x1
/* f03013c: afa20054 */ sw $v0,0x54($sp)
/* f030140: 8fa40058 */ lw $a0,0x58($sp)
/* f030144: 0fc0a209 */ jal chrGetEquippedWeaponProp
/* f030148: 00002825 */ or $a1,$zero,$zero
/* f03014c: 3c0f8007 */ lui $t7,%hi(var8006801c)
/* f030150: 25ef801c */ addiu $t7,$t7,%lo(var8006801c)
/* f030154: 8fa60058 */ lw $a2,0x58($sp)
/* f030158: 8de10000 */ lw $at,0x0($t7)
/* f03015c: 8de80004 */ lw $t0,0x4($t7)
/* f030160: 27ae0040 */ addiu $t6,$sp,0x40
/* f030164: 00402825 */ or $a1,$v0,$zero
/* f030168: adc10000 */ sw $at,0x0($t6)
/* f03016c: 10c00003 */ beqz $a2,.L0f03017c
/* f030170: adc80004 */ sw $t0,0x4($t6)
/* f030174: 10000002 */ b .L0f030180
/* f030178: 90c702fe */ lbu $a3,0x2fe($a2)
.L0f03017c:
/* f03017c: 00003825 */ or $a3,$zero,$zero
.L0f030180:
/* f030180: 8fa40054 */ lw $a0,0x54($sp)
/* f030184: 50800036 */ beqzl $a0,.L0f030260
/* f030188: afa50050 */ sw $a1,0x50($sp)
/* f03018c: 50400034 */ beqzl $v0,.L0f030260
/* f030190: afa50050 */ sw $a1,0x50($sp)
/* f030194: 00c02025 */ or $a0,$a2,$zero
/* f030198: 24050001 */ addiu $a1,$zero,0x1
/* f03019c: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f0301a0: afa7003c */ sw $a3,0x3c($sp)
/* f0301a4: afa20038 */ sw $v0,0x38($sp)
/* f0301a8: 8fa40058 */ lw $a0,0x58($sp)
/* f0301ac: 0fc0a20d */ jal chrGetEquippedWeaponPropWithCheck
/* f0301b0: 00002825 */ or $a1,$zero,$zero
/* f0301b4: 8fa90038 */ lw $t1,0x38($sp)
/* f0301b8: 8fa7003c */ lw $a3,0x3c($sp)
/* f0301bc: 2c460001 */ sltiu $a2,$v0,0x1
/* f0301c0: 1120001f */ beqz $t1,.L0f030240
/* f0301c4: 000741c0 */ sll $t0,$a3,0x7
/* f0301c8: 1040001d */ beqz $v0,.L0f030240
/* f0301cc: 00000000 */ nop
/* f0301d0: 0c004b70 */ jal random
/* f0301d4: afa7003c */ sw $a3,0x3c($sp)
/* f0301d8: 30460001 */ andi $a2,$v0,0x1
/* f0301dc: 0c004b70 */ jal random
/* f0301e0: afa6004c */ sw $a2,0x4c($sp)
/* f0301e4: 24010003 */ addiu $at,$zero,0x3
/* f0301e8: 0041001b */ divu $zero,$v0,$at
/* f0301ec: 00005010 */ mfhi $t2
/* f0301f0: 8fa6004c */ lw $a2,0x4c($sp)
/* f0301f4: 15400009 */ bnez $t2,.L0f03021c
/* f0301f8: 8fa7003c */ lw $a3,0x3c($sp)
/* f0301fc: 3c0c8006 */ lui $t4,%hi(g_StandLightAttackAnims)
/* f030200: 258c62d8 */ addiu $t4,$t4,%lo(g_StandLightAttackAnims)
/* f030204: 000759c0 */ sll $t3,$a3,0x7
/* f030208: 2ccd0001 */ sltiu $t5,$a2,0x1
/* f03020c: 016c2821 */ addu $a1,$t3,$t4
/* f030210: afa60044 */ sw $a2,0x44($sp)
/* f030214: 1000002f */ b .L0f0302d4
/* f030218: afad0040 */ sw $t5,0x40($sp)
.L0f03021c:
/* f03021c: 3c188006 */ lui $t8,%hi(g_StandDualAttackAnims)
/* f030220: 271866c8 */ addiu $t8,$t8,%lo(g_StandDualAttackAnims)
/* f030224: 0007c9c0 */ sll $t9,$a3,0x7
/* f030228: 240e0001 */ addiu $t6,$zero,0x1
/* f03022c: 240f0001 */ addiu $t7,$zero,0x1
/* f030230: 03382821 */ addu $a1,$t9,$t8
/* f030234: afae0044 */ sw $t6,0x44($sp)
/* f030238: 10000026 */ b .L0f0302d4
/* f03023c: afaf0040 */ sw $t7,0x40($sp)
.L0f030240:
/* f030240: 3c098006 */ lui $t1,%hi(g_StandLightAttackAnims)
/* f030244: 252962d8 */ addiu $t1,$t1,%lo(g_StandLightAttackAnims)
/* f030248: 2cca0001 */ sltiu $t2,$a2,0x1
/* f03024c: 01092821 */ addu $a1,$t0,$t1
/* f030250: afa60044 */ sw $a2,0x44($sp)
/* f030254: 1000001f */ b .L0f0302d4
/* f030258: afaa0040 */ sw $t2,0x40($sp)
/* f03025c: afa50050 */ sw $a1,0x50($sp)
.L0f030260:
/* f030260: 0fc0b849 */ jal weaponIsOneHanded
/* f030264: afa7003c */ sw $a3,0x3c($sp)
/* f030268: 8fa50050 */ lw $a1,0x50($sp)
/* f03026c: 14400006 */ bnez $v0,.L0f030288
/* f030270: 8fa7003c */ lw $a3,0x3c($sp)
/* f030274: 00a02025 */ or $a0,$a1,$zero
/* f030278: 0fc0b849 */ jal weaponIsOneHanded
/* f03027c: afa7003c */ sw $a3,0x3c($sp)
/* f030280: 1040000b */ beqz $v0,.L0f0302b0
/* f030284: 8fa7003c */ lw $a3,0x3c($sp)
.L0f030288:
/* f030288: 8fa20054 */ lw $v0,0x54($sp)
/* f03028c: 3c0d8006 */ lui $t5,%hi(g_StandLightAttackAnims)
/* f030290: 25ad62d8 */ addiu $t5,$t5,%lo(g_StandLightAttackAnims)
/* f030294: 0002302b */ sltu $a2,$zero,$v0
/* f030298: 000761c0 */ sll $t4,$a3,0x7
/* f03029c: 2cd90001 */ sltiu $t9,$a2,0x1
/* f0302a0: 018d2821 */ addu $a1,$t4,$t5
/* f0302a4: afa60044 */ sw $a2,0x44($sp)
/* f0302a8: 1000000a */ b .L0f0302d4
/* f0302ac: afb90040 */ sw $t9,0x40($sp)
.L0f0302b0:
/* f0302b0: 8fa20054 */ lw $v0,0x54($sp)
/* f0302b4: 3c0f8006 */ lui $t7,%hi(g_StandHeavyAttackAnims)
/* f0302b8: 25ef5ae0 */ addiu $t7,$t7,%lo(g_StandHeavyAttackAnims)
/* f0302bc: 0002302b */ sltu $a2,$zero,$v0
/* f0302c0: 000771c0 */ sll $t6,$a3,0x7
/* f0302c4: 2cc80001 */ sltiu $t0,$a2,0x1
/* f0302c8: 01cf2821 */ addu $a1,$t6,$t7
/* f0302cc: afa60044 */ sw $a2,0x44($sp)
/* f0302d0: afa80040 */ sw $t0,0x40($sp)
.L0f0302d4:
/* f0302d4: 8fa9005c */ lw $t1,0x5c($sp)
/* f0302d8: 8faa0060 */ lw $t2,0x60($sp)
/* f0302dc: 240b0001 */ addiu $t3,$zero,0x1
/* f0302e0: afab0018 */ sw $t3,0x18($sp)
/* f0302e4: 8fa40058 */ lw $a0,0x58($sp)
/* f0302e8: 27a70040 */ addiu $a3,$sp,0x40
/* f0302ec: afa90010 */ sw $t1,0x10($sp)
/* f0302f0: 0fc0c4e1 */ jal chrAttack
/* f0302f4: afaa0014 */ sw $t2,0x14($sp)
/* f0302f8: 8fbf0024 */ lw $ra,0x24($sp)
/* f0302fc: 27bd0058 */ addiu $sp,$sp,0x58
/* f030300: 03e00008 */ jr $ra
/* f030304: 00000000 */ nop
);
void chrAttackStand(struct chrdata *chr, u32 attackflags, s32 entityid)
{
struct prop *leftgun = chrGetEquippedWeaponProp(chr, HAND_LEFT);
struct prop *rightgun = chrGetEquippedWeaponProp(chr, HAND_RIGHT);
bool flip;
struct attackanimgroup **animgroup;
bool firing[] = {false, false};
s32 race = CHRRACE(chr);
if (leftgun && rightgun) {
struct prop *leftgun2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_LEFT);
struct prop *rightgun2 = chrGetEquippedWeaponPropWithCheck(chr, HAND_RIGHT);
if (leftgun2 && rightgun2) {
flip = random() % 2;
if (random() % 3 == 0) {
animgroup = g_StandLightAttackAnims[race];
firing[1] = flip;
firing[0] = !flip;
} else {
animgroup = g_StandDualAttackAnims[race];
firing[1] = true;
firing[0] = true;
}
} else {
flip = (bool)rightgun2 == false;
animgroup = g_StandLightAttackAnims[race];
firing[1] = (bool)rightgun2 == false;
firing[0] = !flip;
}
} else {
if (weaponIsOneHanded(leftgun) || weaponIsOneHanded(rightgun)) {
flip = (bool)leftgun != false;
animgroup = g_StandLightAttackAnims[race];
firing[1] = (bool)leftgun != false;
firing[0] = !flip;
} else {
flip = (bool)leftgun != false;
animgroup = g_StandHeavyAttackAnims[race];
firing[1] = (bool)leftgun != false;
firing[0] = !flip;
}
}
chrAttack(chr, animgroup, flip, firing, attackflags, entityid, 1);
}
u32 var80068024 = 0x00000000;
u32 var80068028 = 0x00000000;
GLOBAL_ASM(
glabel chrAttackLie

View File

@ -202,7 +202,7 @@ extern struct attackanimgroup *g_StandHeavyAttackAnims[][32];
extern struct attackanimconfig var80065be0[];
extern struct attackanimgroup *g_StandLightAttackAnims[][32];
extern struct attackanimconfig var800663d8[];
extern u32 g_StandDualAttackAnims;
extern struct attackanimgroup *g_StandDualAttackAnims[][32];
extern struct attackanimgroup *g_KneelHeavyAttackAnims[][32];
extern struct attackanimgroup *g_KneelLightAttackAnims[][32];
extern struct attackanimgroup *g_KneelDualAttackAnims[][32];