Attempt to decompile aibotGiveAmmo

This commit is contained in:
Ryan Dwyer 2020-03-12 18:28:30 +10:00
parent 51e037ca80
commit 845c8cd59d
8 changed files with 49 additions and 26 deletions

View File

@ -21692,7 +21692,7 @@ glabel currentPlayerGetAmmoCount
);
GLOBAL_ASM(
glabel func0f0a98f4
glabel ammotypeGetMaxCapacity
/* f0a98f4: 00047080 */ sll $t6,$a0,0x2
/* f0a98f8: 01c47023 */ subu $t6,$t6,$a0
/* f0a98fc: 000e7080 */ sll $t6,$t6,0x2

View File

@ -789,7 +789,7 @@ glabel var7f1b8ea8
/* f190df4: 9124005c */ lbu $a0,0x5c($t1)
/* f190df8: 0fc6666c */ jal func0f1999b0
/* f190dfc: 9125005f */ lbu $a1,0x5f($t1)
/* f190e00: 0fc2a63d */ jal func0f0a98f4
/* f190e00: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f190e04: 00402025 */ or $a0,$v0,$zero
/* f190e08: 0202082a */ slt $at,$s0,$v0
/* f190e0c: 54200004 */ bnezl $at,.L0f190e20
@ -823,7 +823,7 @@ glabel var7f1b8ea8
/* f190e70: 0fc6672e */ jal func0f199cb8
/* f190e74: 8dc402d4 */ lw $a0,0x2d4($t6)
/* f190e78: 8e04005c */ lw $a0,0x5c($s0)
/* f190e7c: 0fc2a63d */ jal func0f0a98f4
/* f190e7c: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f190e80: afa20034 */ sw $v0,0x34($sp)
/* f190e84: 8fa50034 */ lw $a1,0x34($sp)
/* f190e88: 00a2082a */ slt $at,$a1,$v0
@ -865,7 +865,7 @@ glabel var7f1b8ea8
/* f190f0c: 0fc6672e */ jal func0f199cb8
/* f190f10: afa30028 */ sw $v1,0x28($sp)
/* f190f14: 02002025 */ or $a0,$s0,$zero
/* f190f18: 0fc2a63d */ jal func0f0a98f4
/* f190f18: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f190f1c: afa20034 */ sw $v0,0x34($sp)
/* f190f20: 8fa50034 */ lw $a1,0x34($sp)
/* f190f24: 8fa30028 */ lw $v1,0x28($sp)
@ -4384,13 +4384,13 @@ glabel var7f1b8f50
/* f1941f4: 8e640000 */ lw $a0,0x0($s3)
/* f1941f8: 0fc6666c */ jal func0f1999b0
/* f1941fc: 00002825 */ or $a1,$zero,$zero
/* f194200: 0fc2a63d */ jal func0f0a98f4
/* f194200: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f194204: 00402025 */ or $a0,$v0,$zero
/* f194208: 0040b825 */ or $s7,$v0,$zero
/* f19420c: 8e640000 */ lw $a0,0x0($s3)
/* f194210: 0fc6666c */ jal func0f1999b0
/* f194214: 24050001 */ addiu $a1,$zero,0x1
/* f194218: 0fc2a63d */ jal func0f0a98f4
/* f194218: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19421c: 00402025 */ or $a0,$v0,$zero
/* f194220: 8e650000 */ lw $a1,0x0($s3)
/* f194224: 3c038008 */ lui $v1,%hi(var80087eb4)
@ -4660,7 +4660,7 @@ glabel var7f1b8f50
/* f1945d0: 0fc6672e */ jal func0f199cb8
/* f1945d4: 00003025 */ or $a2,$zero,$zero
/* f1945d8: 00409025 */ or $s2,$v0,$zero
/* f1945dc: 0fc2a63d */ jal func0f0a98f4
/* f1945dc: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f1945e0: 02002025 */ or $a0,$s0,$zero
/* f1945e4: 0242082a */ slt $at,$s2,$v0
/* f1945e8: 10200008 */ beqz $at,.L0f19460c

View File

@ -203,7 +203,7 @@ glabel func0f199be4
/* f199c1c: 00a02025 */ or $a0,$a1,$zero
/* f199c20: 0fc6666c */ jal func0f1999b0
/* f199c24: 00c02825 */ or $a1,$a2,$zero
/* f199c28: 0fc2a63d */ jal func0f0a98f4
/* f199c28: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f199c2c: 00402025 */ or $a0,$v0,$zero
/* f199c30: 10000007 */ beqz $zero,.L0f199c50
/* f199c34: 00401825 */ or $v1,$v0,$zero
@ -260,7 +260,7 @@ glabel func0f199cb8
/* f199ce0: 31cf0001 */ andi $t7,$t6,0x1
/* f199ce4: 51e00007 */ beqzl $t7,.L0f199d04
/* f199ce8: 8cf8001c */ lw $t8,0x1c($a3)
/* f199cec: 0fc2a63d */ jal func0f0a98f4
/* f199cec: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f199cf0: afa70020 */ sw $a3,0x20($sp)
/* f199cf4: 8fa70020 */ lw $a3,0x20($sp)
/* f199cf8: 10000005 */ beqz $zero,.L0f199d10
@ -393,7 +393,7 @@ glabel func0f199e3c
/* f199eb0: 8fa40024 */ lw $a0,0x24($sp)
/* f199eb4: 0fc6666c */ jal func0f1999b0
/* f199eb8: afa30018 */ sw $v1,0x18($sp)
/* f199ebc: 0fc2a63d */ jal func0f0a98f4
/* f199ebc: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f199ec0: 00402025 */ or $a0,$v0,$zero
/* f199ec4: 8fa30018 */ lw $v1,0x18($sp)
/* f199ec8: 8c6c0000 */ lw $t4,0x0($v1)
@ -436,7 +436,7 @@ glabel aibotGiveAmmo
/* f199f40: 8c680000 */ lw $t0,0x0($v1)
/* f199f44: 01064821 */ addu $t1,$t0,$a2
/* f199f48: ac690000 */ sw $t1,0x0($v1)
/* f199f4c: 0fc2a63d */ jal func0f0a98f4
/* f199f4c: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f199f50: afa30018 */ sw $v1,0x18($sp)
/* f199f54: 8fa30018 */ lw $v1,0x18($sp)
/* f199f58: 8c6a0000 */ lw $t2,0x0($v1)
@ -455,6 +455,29 @@ glabel aibotGiveAmmo
/* f199f80: 00000000 */ sll $zero,$zero,0x0
);
// Mismatches because the target saves the heldquantity pointer to the stack
// before calling to ammotypeGetMaxCapacity, despite it already being saved.
//void aibotGiveAmmo(struct aibot *aibot, u32 ammotype, s32 quantity)
//{
// s32 max;
// s32 *heldquantity = &aibot->ammotypes->quantities[ammotype];
//
// if (!aibot || (aibot->unk064 & 1) || quantity <= 0) {
// return;
// }
//
// dprint();
//
// *heldquantity += quantity;
// max = ammotypeGetMaxCapacity(ammotype);
//
// if (*heldquantity > max) {
// *heldquantity = max;
// }
//
// dprint();
//}
GLOBAL_ASM(
glabel func0f199f84
.late_rodata

View File

@ -1364,7 +1364,7 @@ glabel var7f1b93ec
/* f19dbc0: 00402025 */ or $a0,$v0,$zero
/* f19dbc4: 0fc2a685 */ jal weaponGetAmmoType
/* f19dbc8: 00002825 */ or $a1,$zero,$zero
/* f19dbcc: 0fc2a63d */ jal func0f0a98f4
/* f19dbcc: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19dbd0: 00402025 */ or $a0,$v0,$zero
/* f19dbd4: 920f0448 */ lbu $t7,0x448($s0)
/* f19dbd8: 26310004 */ addiu $s1,$s1,0x4
@ -1386,7 +1386,7 @@ glabel var7f1b93ec
.L0f19dc14:
/* f19dc14: 10000073 */ beqz $zero,.L0f19dde4
/* f19dc18: 92220000 */ lbu $v0,0x0($s1)
/* f19dc1c: 0fc2a63d */ jal func0f0a98f4
/* f19dc1c: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19dc20: 2404000b */ addiu $a0,$zero,0xb
/* f19dc24: 92080448 */ lbu $t0,0x448($s0)
/* f19dc28: 26310004 */ addiu $s1,$s1,0x4
@ -2346,7 +2346,7 @@ glabel func0f19e900
/* f19e90c: 0fc2a685 */ jal weaponGetAmmoType
/* f19e910: 00002825 */ or $a1,$zero,$zero
/* f19e914: afa20020 */ sw $v0,0x20($sp)
/* f19e918: 0fc2a63d */ jal func0f0a98f4
/* f19e918: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19e91c: 00402025 */ or $a0,$v0,$zero
/* f19e920: 0fc6757d */ jal func0f19d5f4
/* f19e924: afa2001c */ sw $v0,0x1c($sp)
@ -3897,7 +3897,7 @@ glabel var7f1b94e4
/* f19fd4c: 0fc2a685 */ jal weaponGetAmmoType
/* f19fd50: 00002825 */ or $a1,$zero,$zero
/* f19fd54: 00408825 */ or $s1,$v0,$zero
/* f19fd58: 0fc2a63d */ jal func0f0a98f4
/* f19fd58: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19fd5c: 00402025 */ or $a0,$v0,$zero
/* f19fd60: 00408025 */ or $s0,$v0,$zero
/* f19fd64: 02402025 */ or $a0,$s2,$zero
@ -3940,7 +3940,7 @@ glabel var7f1b94e4
.L0f19fde8:
/* f19fde8: 5641001d */ bnel $s2,$at,.L0f19fe60
/* f19fdec: a2a0045a */ sb $zero,0x45a($s5)
/* f19fdf0: 0fc2a63d */ jal func0f0a98f4
/* f19fdf0: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f19fdf4: 2404000b */ addiu $a0,$zero,0xb
/* f19fdf8: 86a30478 */ lh $v1,0x478($s5)
/* f19fdfc: 00408025 */ or $s0,$v0,$zero

View File

@ -39207,7 +39207,7 @@ glabel func0f088028
/* f088048: 0fc2a5dc */ jal ammoGetQuantity
/* f08804c: 00000000 */ sll $zero,$zero,0x0
/* f088050: afa20020 */ sw $v0,0x20($sp)
/* f088054: 0fc2a63d */ jal func0f0a98f4
/* f088054: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f088058: 02002025 */ or $a0,$s0,$zero
/* f08805c: 8faf0020 */ lw $t7,0x20($sp)
/* f088060: 01e2082a */ slt $at,$t7,$v0
@ -40104,7 +40104,7 @@ glabel var7f1aae70
/* f088ccc: 0fc2a5dc */ jal ammoGetQuantity
/* f088cd0: afa20054 */ sw $v0,0x54($sp)
/* f088cd4: 8fa4006c */ lw $a0,0x6c($sp)
/* f088cd8: 0fc2a63d */ jal func0f0a98f4
/* f088cd8: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f088cdc: afa2003c */ sw $v0,0x3c($sp)
/* f088ce0: 8fa6003c */ lw $a2,0x3c($sp)
/* f088ce4: 8fa50054 */ lw $a1,0x54($sp)
@ -40135,7 +40135,7 @@ glabel var7f1aae70
/* f088d40: 0fc2a5dc */ jal ammoGetQuantity
/* f088d44: 2404000b */ addiu $a0,$zero,0xb
/* f088d48: 2404000b */ addiu $a0,$zero,0xb
/* f088d4c: 0fc2a63d */ jal func0f0a98f4
/* f088d4c: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f088d50: afa2003c */ sw $v0,0x3c($sp)
/* f088d54: 8fa6003c */ lw $a2,0x3c($sp)
/* f088d58: 00c2082a */ slt $at,$a2,$v0
@ -40638,7 +40638,7 @@ glabel var7f1aae84
/* f08940c: 0fc2a5dc */ jal ammoGetQuantity
/* f089410: 8e04005c */ lw $a0,0x5c($s0)
/* f089414: 8e04005c */ lw $a0,0x5c($s0)
/* f089418: 0fc2a63d */ jal func0f0a98f4
/* f089418: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f08941c: afa20030 */ sw $v0,0x30($sp)
/* f089420: 8fa30030 */ lw $v1,0x30($sp)
/* f089424: 0062082a */ slt $at,$v1,$v0
@ -40745,7 +40745,7 @@ glabel var7f1aae84
/* f08958c: 0fc2a5dc */ jal ammoGetQuantity
/* f089590: afa30028 */ sw $v1,0x28($sp)
/* f089594: 02002025 */ or $a0,$s0,$zero
/* f089598: 0fc2a63d */ jal func0f0a98f4
/* f089598: 0fc2a63d */ jal ammotypeGetMaxCapacity
/* f08959c: afa20030 */ sw $v0,0x30($sp)
/* f0895a0: 8fa30030 */ lw $v1,0x30($sp)
/* f0895a4: 0062082a */ slt $at,$v1,$v0

View File

@ -154,7 +154,7 @@ void func0f0a95ec(u32 arg0, u32 arg1);
void currentPlayerGiveAmmo(s32 ammotype, s32 quantity);
s32 ammoGetQuantity(u32 type);
s32 currentPlayerGetAmmoCount(s8 arg0);
u32 func0f0a98f4(void);
s32 ammotypeGetMaxCapacity(u32 ammotype);
bool ammotypeAllowsUnlimitedAmmo(u32 ammotype);
u32 func0f0a9980(void);
s32 weaponGetAmmoType(s32 weaponnum, u32 func);

View File

@ -10,7 +10,7 @@ u32 func0f199be4(void);
u32 func0f199cb8(void);
u32 func0f199d70(void);
void func0f199e3c(struct aibot *aibot, u32 weaponnum, bool proxy, u32 qty);
void aibotGiveAmmo(struct aibot *aibot, u32 ammotype, u32 qty);
void aibotGiveAmmo(struct aibot *aibot, u32 ammotype, s32 quantity);
u32 func0f199f84(void);
bool func0f19a29c(u32 value, bool fallback);
u32 func0f19a2dc(u32 value);

View File

@ -137,8 +137,8 @@ struct animdata {
/*0x20*/ struct anim *anim;
};
struct aibot_01c {
u32 unk00[33];
struct aibotammotype {
s32 quantities[33];
};
struct aibot {
@ -150,7 +150,7 @@ struct aibot {
/*0x010*/ struct prop *prop;
/*0x014*/ u32 unk014;
/*0x018*/ u32 unk018;
/*0x01c*/ struct aibot_01c *unk01c;
/*0x01c*/ struct aibotammotype *ammotypes;
/*0x020*/ u32 unk020;
/*0x024*/ u32 unk024;
/*0x028*/ u32 unk028;