diff options
author | tgsm <doodrabbit@hotmail.com> | 2021-03-22 07:04:41 -0400 |
---|---|---|
committer | tgsm <doodrabbit@hotmail.com> | 2021-03-22 07:04:41 -0400 |
commit | fb9ded97a1f966f1e5d389e0332b62fe3422c4e3 (patch) | |
tree | 32b91930861e8ff8910a59d00e41b4377d844734 | |
parent | 343729e9c8b63c5804852933df33e743d722ad6b (diff) |
decompile scrcmd_14 -> scrcmd_coins
-rw-r--r-- | arm9/arm9.lsf | 2 | ||||
-rw-r--r-- | arm9/asm/scrcmd_14.s | 267 | ||||
-rw-r--r-- | arm9/asm/unk_02038C78.s | 20 | ||||
-rw-r--r-- | arm9/global.inc | 20 | ||||
-rw-r--r-- | arm9/src/scrcmd_coins.c | 140 | ||||
-rw-r--r-- | include/scrcmd.h | 12 |
6 files changed, 173 insertions, 288 deletions
diff --git a/arm9/arm9.lsf b/arm9/arm9.lsf index 9b12ab46..d0ea254a 100644 --- a/arm9/arm9.lsf +++ b/arm9/arm9.lsf @@ -165,7 +165,7 @@ Static arm9 Object scrcmd_11.o Object scrcmd_12.o Object scrcmd_13.o - Object scrcmd_14.o + Object scrcmd_coins.o Object scrcmd_money.o Object scrcmd_16.o Object scrcmd_17.o diff --git a/arm9/asm/scrcmd_14.s b/arm9/asm/scrcmd_14.s deleted file mode 100644 index 1fd34357..00000000 --- a/arm9/asm/scrcmd_14.s +++ /dev/null @@ -1,267 +0,0 @@ - .include "asm/macros.inc" - .include "global.inc" - - .text - - thumb_func_start FUN_02043A44 -FUN_02043A44: ; 0x02043A44 - push {r3-r7, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x26 - bl FUN_02039438 - lsl r1, r6, #0x18 - lsl r2, r7, #0x18 - add r4, #0x80 - add r5, r0, #0x0 - ldr r0, [r4, #0x0] - lsr r1, r1, #0x18 - lsr r2, r2, #0x18 - bl MOD05_021E2950 - str r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02043A94 -FUN_02043A94: ; 0x02043A94 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x26 - bl FUN_02039438 - ldr r0, [r0, #0x0] - bl MOD05_021E29B4 - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02043AAC -FUN_02043AAC: ; 0x02043AAC - push {r4, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x26 - bl FUN_02039438 - add r1, r0, #0x0 - add r4, #0x80 - ldr r0, [r4, #0x0] - ldr r1, [r1, #0x0] - bl MOD05_021E29C8 - mov r0, #0x0 - pop {r4, pc} - .balign 4 - - thumb_func_start FUN_02043ACC -FUN_02043ACC: ; 0x02043ACC - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl CheckCoins - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043AFC -FUN_02043AFC: ; 0x02043AFC - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl GiveCoins - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043B28 -FUN_02043B28: ; 0x02043B28 - push {r3-r5, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TakeCoins - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02043B54 -FUN_02043B54: ; 0x02043B54 - push {r3-r5, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r1, r0, #0x0 - ldrh r1, [r1, #0x0] - add r0, r4, #0x0 - bl TakeCoins - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start FUN_02043B84 -FUN_02043B84: ; 0x02043B84 - push {r4-r6, lr} - add r4, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - add r0, r5, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - ldr r0, [r5, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadWord - add r4, r0, #0x0 - add r0, r6, #0x0 - bl CheckCoins - cmp r0, r4 - bhs _02043BC8 - mov r0, #0x0 - b _02043BCA -_02043BC8: - mov r0, #0x1 -_02043BCA: - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02043BD0 -FUN_02043BD0: ; 0x02043BD0 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r4, [r0, #0x0] - add r0, r4, #0x0 - bl ScriptEnvironment_GetSav2Ptr - bl Sav2_PlayerData_GetProfileAddr - ldr r0, [r4, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - ldrh r5, [r0, #0x0] - add r0, r6, #0x0 - bl CheckCoins - cmp r0, r5 - bhs _02043C1E - mov r0, #0x0 - b _02043C20 -_02043C1E: - mov r0, #0x1 -_02043C20: - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02043C28 -FUN_02043C28: ; 0x02043C28 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_PlayerData_GetCoinsAddr - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r6, #0x0 - bl CanGiveCoins - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 53d41e3b..c9a8bdd6 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -266,12 +266,12 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_Unk0072 .word ScrCmd_Unk0073 .word ScrCmd_Unk0074 - .word FUN_02043A44 - .word FUN_02043A94 - .word FUN_02043AAC - .word FUN_02043ACC - .word FUN_02043AFC - .word FUN_02043B28 + .word ScrCmd_Unk0075 + .word ScrCmd_Unk0076 + .word ScrCmd_Unk0077 + .word ScrCmd_GetCoins + .word ScrCmd_GiveCoins + .word ScrCmd_TakeCoinsImmediate .word FUN_02045784 .word FUN_020457DC .word FUN_02045834 @@ -777,9 +777,9 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203C58C .word FUN_02040DEC .word FUN_0203F2AC - .word FUN_02043B84 + .word ScrCmd_HasEnoughCoinsImmediate .word FUN_0203F2E4 - .word FUN_02043C28 + .word ScrCmd_CanGiveCoins .word FUN_0203F31C .word ScrCmd_getpartymonlevel .word FUN_0203F348 @@ -829,8 +829,8 @@ gScriptCmdTable: ; 0x020F355C .word FUN_0203B914 .word ScrCmd_Unk02A6 .word FUN_0203FA14 - .word FUN_02043B54 - .word FUN_02043BD0 + .word ScrCmd_TakeCoinsAddress + .word ScrCmd_HasEnoughCoinsAddress .word FUN_0203FA58 .word FUN_0203B7F0 .word FUN_0203FB4C diff --git a/arm9/global.inc b/arm9/global.inc index 057a0ad3..c7d3bd73 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -3282,16 +3282,16 @@ .extern FUN_020438D0 .extern FUN_02043918 .extern FUN_020439B4 -.extern FUN_02043A44 -.extern FUN_02043A94 -.extern FUN_02043AAC -.extern FUN_02043ACC -.extern FUN_02043AFC -.extern FUN_02043B28 -.extern FUN_02043B54 -.extern FUN_02043B84 -.extern FUN_02043BD0 -.extern FUN_02043C28 +.extern ScrCmd_Unk0075 +.extern ScrCmd_Unk0076 +.extern ScrCmd_Unk0077 +.extern ScrCmd_GetCoins +.extern ScrCmd_GiveCoins +.extern ScrCmd_TakeCoinsImmediate +.extern ScrCmd_TakeCoinsAddress +.extern ScrCmd_HasEnoughCoinsImmediate +.extern ScrCmd_HasEnoughCoinsAddress +.extern ScrCmd_CanGiveCoins .extern ScrCmd_GiveMoney .extern ScrCmd_TakeMoneyImmediate .extern ScrCmd_TakeMoneyAddress diff --git a/arm9/src/scrcmd_coins.c b/arm9/src/scrcmd_coins.c new file mode 100644 index 00000000..de4e993e --- /dev/null +++ b/arm9/src/scrcmd_coins.c @@ -0,0 +1,140 @@ +#include "scrcmd.h" +#include "coins.h" + +extern u16 VarGet(struct UnkSavStruct80* arg, u16); +extern u16* GetVarPointer(struct UnkSavStruct80* arg, u16); +extern struct SaveBlock2 * ScriptEnvironment_GetSav2Ptr(struct UnkSavStruct80* unk); + +extern void * FUN_02039438(struct UnkSavStruct80* arg, u8 idx); + +extern u32 MOD05_021E2950(struct UnkSavStruct80* arg, u8, u8); +extern MOD05_021E29B4(); +extern MOD05_021E29C8(); + +THUMB_FUNC BOOL ScrCmd_Unk0075(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + u32 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 ** unk_ret_ptr = FUN_02039438(sav_ptr, 0x26); + + u32 unk3 = MOD05_021E2950(ctx->unk80, (u8)unk1, (u8)unk2); + *unk_ret_ptr = unk3; + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0076(struct ScriptContext * ctx) +{ + u16 ** unk = FUN_02039438(ctx->unk80, 0x26); + MOD05_021E29B4(*unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0077(struct ScriptContext * ctx) +{ + u16 ** unk = FUN_02039438(ctx->unk80, 0x26); + MOD05_021E29C8(ctx->unk80, *unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GetCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = CheckCoins(coins_ptr); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GiveCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + GiveCoins(coins_ptr, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeCoinsImmediate(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + TakeCoins(coins_ptr, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeCoinsAddress(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * amount = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + TakeCoins(coins_ptr, *amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughCoinsImmediate(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + // Created, but discarded. + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(sav_ptr->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = ScriptReadWord(ctx); + u16 coins = CheckCoins(coins_ptr); + + if (coins < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughCoinsAddress(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(sav_ptr); + // Created, but discarded + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(sav_ptr->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u16 amount = *(u16*)GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 coins = CheckCoins(coins_ptr); + + if (coins < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CanGiveCoins(struct ScriptContext * ctx) +{ + u16 * coins_ptr = Sav2_PlayerData_GetCoinsAddr(ctx->unk80->saveBlock2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = CanGiveCoins(coins_ptr, amount); + + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 174e14cd..2dacb9fb 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -85,6 +85,18 @@ BOOL ScrCmd_Unk0039(struct ScriptContext* ctx); BOOL ScrCmd_Unk003A(struct ScriptContext* ctx); BOOL ScrCmd_Unk003B(struct ScriptContext *ctx); +//scrcmd_coins.c +BOOL ScrCmd_Unk0075(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0076(struct ScriptContext* ctx); +BOOL ScrCmd_Unk0077(struct ScriptContext* ctx); +BOOL ScrCmd_GetCoins(struct ScriptContext* ctx); +BOOL ScrCmd_GiveCoins(struct ScriptContext* ctx); +BOOL ScrCmd_TakeCoinsImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_TakeCoinsAddress(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughCoinsImmediate(struct ScriptContext* ctx); +BOOL ScrCmd_HasEnoughCoinsAddress(struct ScriptContext* ctx); +BOOL ScrCmd_CanGiveCoins(struct ScriptContext* ctx); + //scrcmd_money.c BOOL ScrCmd_GiveMoney(struct ScriptContext* ctx); BOOL ScrCmd_TakeMoneyImmediate(struct ScriptContext* ctx); |