summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortgsm <doodrabbit@hotmail.com>2021-03-22 07:04:41 -0400
committertgsm <doodrabbit@hotmail.com>2021-03-22 07:04:41 -0400
commitfb9ded97a1f966f1e5d389e0332b62fe3422c4e3 (patch)
tree32b91930861e8ff8910a59d00e41b4377d844734
parent343729e9c8b63c5804852933df33e743d722ad6b (diff)
decompile scrcmd_14 -> scrcmd_coins
-rw-r--r--arm9/arm9.lsf2
-rw-r--r--arm9/asm/scrcmd_14.s267
-rw-r--r--arm9/asm/unk_02038C78.s20
-rw-r--r--arm9/global.inc20
-rw-r--r--arm9/src/scrcmd_coins.c140
-rw-r--r--include/scrcmd.h12
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);