From 81ac48cd95d98f8b4f9472cdda293acdb64b0976 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 11 Apr 2020 11:00:15 +1000 Subject: [PATCH] Decompile func0f19d560 --- ld/pd.ld | 2 ++ src/game/data/data_02e820.c | 2 +- src/game/game_012450.c | 2 +- src/game/game_19c990.c | 41 +++++++++-------------------- src/include/constants.h | 1 + src/include/game/data/data_02e820.h | 2 +- src/include/game/game_19c990.h | 2 +- src/include/lib/lib_0d0a0.h | 2 +- 8 files changed, 20 insertions(+), 34 deletions(-) diff --git a/ld/pd.ld b/ld/pd.ld index 0854c2a6f..262d409e8 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -15,6 +15,8 @@ SECTIONS _rspMicrocodeStartPlusOne = 0x80059fe1; _rspMicrocodeEnd = 0x8005afe0; + _addr007e9d20 = 0x007e9d20; + _antipiracyUncloakWriteAddress = 0x7002a324; osCicId = 0x80000310; diff --git a/src/game/data/data_02e820.c b/src/game/data/data_02e820.c index 442119711..ba75497c0 100644 --- a/src/game/data/data_02e820.c +++ b/src/game/data/data_02e820.c @@ -22,7 +22,7 @@ u32 var80088800 = 0; u8 var80088804 = 0; u8 var80088808 = 0; u8 var8008880c = 0; -u32 var80088810 = 0x00000000; +void *var80088810 = NULL; u32 var80088814 = 0x00d600d7; u32 var80088818 = 0x00d900d8; u32 var8008881c = 0x00da00db; diff --git a/src/game/game_012450.c b/src/game/game_012450.c index b1e170cae..b7552f2ce 100644 --- a/src/game/game_012450.c +++ b/src/game/game_012450.c @@ -33,6 +33,6 @@ void currentPlayerInitGunsHeld(void) void func0f012530(s32 arg0) { g_Vars.currentplayer->equipmaxitems = arg0 + 30; - g_Vars.currentplayer->equipment = malloc((g_Vars.currentplayer->equipmaxitems * sizeof(struct invitem) + 15 | 0xf) ^ 0xf, 4); + g_Vars.currentplayer->equipment = malloc(ALIGN16(g_Vars.currentplayer->equipmaxitems * sizeof(struct invitem)), 4); currentPlayerClearInventory(); } diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index e7f240d17..118c8f70a 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -865,35 +865,18 @@ void func0f19d4ec(void) var8008880c = 0; } -GLOBAL_ASM( -glabel func0f19d560 -/* f19d560: 27bdffe8 */ addiu $sp,$sp,-24 -/* f19d564: afa40018 */ sw $a0,0x18($sp) -/* f19d568: 2484000f */ addiu $a0,$a0,0xf -/* f19d56c: afbf0014 */ sw $ra,0x14($sp) -/* f19d570: 348e000f */ ori $t6,$a0,0xf -/* f19d574: 39c4000f */ xori $a0,$t6,0xf -/* f19d578: 0c0048f2 */ jal malloc -/* f19d57c: 24050004 */ addiu $a1,$zero,0x4 -/* f19d580: 3c038009 */ lui $v1,%hi(var80088810) -/* f19d584: 24638810 */ addiu $v1,$v1,%lo(var80088810) -/* f19d588: ac620000 */ sw $v0,0x0($v1) -/* f19d58c: 10400007 */ beqz $v0,.L0f19d5ac -/* f19d590: 00402025 */ or $a0,$v0,$zero -/* f19d594: 3c05007f */ lui $a1,0x7f -/* f19d598: 24a59d20 */ addiu $a1,$a1,-25312 -/* f19d59c: 0c003522 */ jal func0000d488 -/* f19d5a0: 8fa60018 */ lw $a2,0x18($sp) -/* f19d5a4: 10000003 */ beqz $zero,.L0f19d5b4 -/* f19d5a8: 8fbf0014 */ lw $ra,0x14($sp) -.L0f19d5ac: -/* f19d5ac: 00001025 */ or $v0,$zero,$zero -/* f19d5b0: 8fbf0014 */ lw $ra,0x14($sp) -.L0f19d5b4: -/* f19d5b4: 27bd0018 */ addiu $sp,$sp,0x18 -/* f19d5b8: 03e00008 */ jr $ra -/* f19d5bc: 00000000 */ sll $zero,$zero,0x0 -); +void *func0f19d560(u32 len) +{ + extern u32 _addr007e9d20; + + var80088810 = malloc(ALIGN16(len), 4); + + if (var80088810) { + return func0000d488(var80088810, &_addr007e9d20, len); + } + + return NULL; +} void frSetDifficulty(s32 difficulty) { diff --git a/src/include/constants.h b/src/include/constants.h index d2a564bf5..816519023 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -11,6 +11,7 @@ #define U32_MAX 4294967295 #define ABS(val) (val > 0 ? val : -val) +#define ALIGN16(val) ((val + 0xf | 0xf) ^ 0xf) #define ARRAYCOUNT(a) (s32)(sizeof(a) / sizeof(a[0])) #define CHRRACE(chr) (chr ? chr->race : RACE_HUMAN) #define FRAMEDURATION (1 / 60.0f) diff --git a/src/include/game/data/data_02e820.h b/src/include/game/data/data_02e820.h index 8339e136a..cddbb65a1 100644 --- a/src/include/game/data/data_02e820.h +++ b/src/include/game/data/data_02e820.h @@ -7,7 +7,7 @@ extern u32 var80088800; extern u8 var80088804; extern u8 var80088808; extern u8 var8008880c; -extern u32 var80088810; +extern void *var80088810; extern u32 var80088854; extern u8 var800888a0; extern struct chrbio g_ChrBios[10]; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 530e5f5a9..a05f97549 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -21,7 +21,7 @@ u32 func0f19d2e0(void); u32 func0f19d338(void); u32 func0f19d414(void); void func0f19d4ec(void); -u32 func0f19d560(void); +void *func0f19d560(u32 len); void frSetDifficulty(s32 difficulty); u32 frGetDifficulty(void); u32 func0f19d5f4(void); diff --git a/src/include/lib/lib_0d0a0.h b/src/include/lib/lib_0d0a0.h index bc6cc2c32..44fa66d77 100644 --- a/src/include/lib/lib_0d0a0.h +++ b/src/include/lib/lib_0d0a0.h @@ -11,6 +11,6 @@ u32 func0000d29c(void); u32 func0000d350(void); void func0000d410(void *memaddr, void *romaddr, u32 len); u32 func0000d44c(void); -u32 func0000d488(void); +void *func0000d488(void *memaddr, void *romaddr, u32 len); #endif