diff options
author | Revo <projectrevotpp@hotmail.com> | 2021-03-22 10:41:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-22 10:41:51 -0400 |
commit | 11fdf1d630a743f3236135028ea51e818331210f (patch) | |
tree | 32b91930861e8ff8910a59d00e41b4377d844734 /arm9/src | |
parent | 9e4080cdfb082a9738a8c159ad9cf1c317a60873 (diff) | |
parent | fb9ded97a1f966f1e5d389e0332b62fe3422c4e3 (diff) |
Merge pull request #343 from tgsm/scrcmds
decompile scrcmd 14, 15, 19, 20, 25
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/scrcmd_19.c | 89 | ||||
-rw-r--r-- | arm9/src/scrcmd_20.c | 38 | ||||
-rw-r--r-- | arm9/src/scrcmd_25.c | 27 | ||||
-rw-r--r-- | arm9/src/scrcmd_coins.c | 140 | ||||
-rw-r--r-- | arm9/src/scrcmd_money.c | 115 |
5 files changed, 409 insertions, 0 deletions
diff --git a/arm9/src/scrcmd_19.c b/arm9/src/scrcmd_19.c new file mode 100644 index 00000000..f0fb9b42 --- /dev/null +++ b/arm9/src/scrcmd_19.c @@ -0,0 +1,89 @@ +#include "scrcmd.h" +#include "bag.h" + +extern u16 VarGet(struct UnkSavStruct80* arg, u16); +extern u16* GetVarPointer(struct UnkSavStruct80* arg, u16); + +const u16 UNK_020F450C[7][2] = { + { 0x0067, 0x008E }, + { 0x0065, 0x008A }, + { 0x0066, 0x008C }, + { 0x0063, 0x0159 }, + { 0x0064, 0x015B }, + { 0x0068, 0x019A }, + { 0x0069, 0x0198 }, +}; + +THUMB_FUNC BOOL ScrCmd_Unk01F1(struct ScriptContext * ctx) +{ + struct UnkSavStruct80 * sav_ptr = ctx->unk80; + + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u8 i; + u16 total; + for (i = 0, total = 0; i < 7; i++) + { + total += Bag_GetQuantity(Sav2_Bag_get(sav_ptr->saveBlock2), UNK_020F450C[i][0], 4); + } + + *ret_ptr = total; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F4(struct ScriptContext * ctx) +{ + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr = 0; + + for (u16 i = 0; i < 7; i++) + { + if (UNK_020F450C[i][0] == unk) + { + *ret_ptr = UNK_020F450C[i][1]; + break; + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F5(struct ScriptContext * ctx) +{ + struct UnkSavStruct80* sav_ptr = ctx->unk80; + u16 * ret_ptr1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 needed_amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr1 = 0; + *ret_ptr2 = 0; + + u8 i = 0; + u16 total = 0; + for (; i < 7; i++) + { + total += Bag_GetQuantity(Sav2_Bag_get(sav_ptr->saveBlock2), UNK_020F450C[i][0], 4); + if (total >= needed_amount) + { + *ret_ptr1 = UNK_020F450C[i][0]; + *ret_ptr2 = i; + break; + } + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F2(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk01F3(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} diff --git a/arm9/src/scrcmd_20.c b/arm9/src/scrcmd_20.c new file mode 100644 index 00000000..bf4fb7f1 --- /dev/null +++ b/arm9/src/scrcmd_20.c @@ -0,0 +1,38 @@ +#include "scrcmd.h" + +extern u16 VarGet(struct UnkSavStruct80* arg, u16); +extern u16* GetVarPointer(struct UnkSavStruct80* arg, u16); + +const u16 UNK_020F452A[19][2] = { + { 0x00FB, 0x03E8 }, + { 0x0109, 0x03E8 }, + { 0x0114, 0x03E8 }, + { 0x0115, 0x03E8 }, + { 0x01A1, 0x07D0 }, + { 0x0181, 0x07D0 }, + { 0x0192, 0x0FA0 }, + { 0x0167, 0x0FA0 }, + { 0x0173, 0x1770 }, + { 0x01A0, 0x1770 }, + { 0x0151, 0x1770 }, + { 0x0162, 0x1F40 }, + { 0x015C, 0x1F40 }, + { 0x016A, 0x2710 }, + { 0x015F, 0x2710 }, + { 0x0154, 0x2710 }, + { 0x0164, 0x2710 }, + { 0x0191, 0x3A98 }, + { 0x018B, 0x4E20 }, +}; + +THUMB_FUNC BOOL ScrCmd_Unk02A6(struct ScriptContext * ctx) +{ + u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 * ret_ptr2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + *ret_ptr1 = UNK_020F452A[idx][0]; + *ret_ptr2 = UNK_020F452A[idx][1]; + + return FALSE; +} diff --git a/arm9/src/scrcmd_25.c b/arm9/src/scrcmd_25.c new file mode 100644 index 00000000..e3638675 --- /dev/null +++ b/arm9/src/scrcmd_25.c @@ -0,0 +1,27 @@ +#include "scrcmd.h" + +THUMB_FUNC BOOL ScrCmd_Unk02EF(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + GF_ASSERT(FALSE); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02F0(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + GF_ASSERT(FALSE); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02F1(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk02F2(struct ScriptContext * ctx) +{ +#pragma unused(ctx) + return FALSE; +} 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/arm9/src/scrcmd_money.c b/arm9/src/scrcmd_money.c new file mode 100644 index 00000000..b61a7ff7 --- /dev/null +++ b/arm9/src/scrcmd_money.c @@ -0,0 +1,115 @@ +#include "scrcmd.h" +#include "player_data.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_021E27E8(struct UnkSavStruct80* arg, u8, u8); +extern void MOD05_021E288C(u32 *); +extern void MOD05_021E28A0(struct UnkSavStruct80* arg, u32 *); + +THUMB_FUNC BOOL ScrCmd_GiveMoney(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = ScriptReadWord(ctx); + PlayerProfile_AddMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeMoneyImmediate(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = ScriptReadWord(ctx); + PlayerProfile_SubMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_TakeMoneyAddress(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + + u32 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + PlayerProfile_SubMoney(player, amount); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughMoneyImmediate(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = ScriptReadWord(ctx); + u32 money = PlayerProfile_GetMoney(player); + + if (money < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_HasEnoughMoneyAddress(struct ScriptContext * ctx) +{ + struct SaveBlock2 * sav2 = ScriptEnvironment_GetSav2Ptr(ctx->unk80); + struct PlayerData * player = Sav2_PlayerData_GetProfileAddr(sav2); + u16 * ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + + u32 amount = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 money = PlayerProfile_GetMoney(player); + + if (money < amount) + { + *ret_ptr = 0; + } + else + { + *ret_ptr = 1; + } + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0072(struct ScriptContext * ctx) +{ + struct UnkSavStruct80 * sav_ptr = ctx->unk80; + u32 unk1 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + u32 *unk_ret_ptr = FUN_02039438(sav_ptr, 0x27); + + *unk_ret_ptr = MOD05_021E27E8(ctx->unk80, (u8)unk1, (u8)unk2); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0073(struct ScriptContext * ctx) +{ + u32 ** unk = FUN_02039438(ctx->unk80, 0x27); + MOD05_021E288C(*unk); + + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Unk0074(struct ScriptContext * ctx) +{ + u32 ** unk = FUN_02039438(ctx->unk80, 0x27); + MOD05_021E28A0(ctx->unk80, *unk); + + return FALSE; +} |