summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/scrcmd.c88
-rw-r--r--arm9/src/scrcmd_13.c111
-rw-r--r--arm9/src/scrcmd_18_c.c2
-rw-r--r--arm9/src/scrcmd_19.c3
-rw-r--r--arm9/src/scrcmd_20.c3
-rw-r--r--arm9/src/scrcmd_coins.c4
-rw-r--r--arm9/src/scrcmd_items.c96
-rw-r--r--arm9/src/scrcmd_money.c4
8 files changed, 291 insertions, 20 deletions
diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c
index bad0d69c..4ad17e51 100644
--- a/arm9/src/scrcmd.c
+++ b/arm9/src/scrcmd.c
@@ -5,8 +5,6 @@
#include "player_data.h"
#include "text.h"
-extern u16 *GetVarPointer(struct UnkSavStruct80* arg, u16);
-extern u16 VarGet(struct UnkSavStruct80* arg, u16 wk);
extern void *FUN_02039438(struct UnkSavStruct80* arg, u32 id);
extern void *CreateScriptContext(struct UnkSavStruct80* arg, u16 id);
extern u8 FUN_02058448(u32 param0);
@@ -50,6 +48,12 @@ extern void MOD05_021E1C4C(u32 param0, u32 param1, u32 param2);
extern void MOD05_021E1C54(u32 param0);
extern u32 FUN_02052714(u32 param0);
extern void MOD05_021E1ECC(u32 param0);
+extern u32 MOD05_021E1F34(struct UnkSavStruct80 *arg, u8 param1, u8 param2, u8 param3, u8 param4, u16 *param5, u32 param6, u32 *param7, struct MsgData *msgData);
+extern void MOD05_021E1F58(u32 param0, u8 param1, u8 param2, u8 param3);
+extern void MOD05_021E1F60(u32 param0);
+extern void MOD05_021E26CC(u32 param0, u8 param1);
+extern void MOD05_021E2B80(u32 param0, u8 param1);
+extern void MOD05_021E2B9C(u32 param0, u8 param1);
extern u8 *UNK_020F34E0;
@@ -66,7 +70,7 @@ static BOOL FUN_0203A8A0(struct ScriptContext *ctx);
static BOOL FUN_0203A94C(struct ScriptContext *ctx);
static BOOL FUN_0203AA0C(struct ScriptContext *ctx);
static BOOL FUN_0203AB00(struct ScriptContext *ctx);
-/*static*/ BOOL FUN_0203AD2C(struct ScriptContext *ctx);
+static BOOL FUN_0203AD2C(struct ScriptContext *ctx);
static BOOL FUN_0203AD78(struct ScriptContext *ctx);
extern u8 sScriptConditionTable[6][3];
@@ -1173,7 +1177,7 @@ THUMB_FUNC BOOL ScrCmd_Unk0043(struct ScriptContext *ctx)
return TRUE;
}
-THUMB_FUNC BOOL FUN_0203AD2C(struct ScriptContext *ctx)
+THUMB_FUNC static BOOL FUN_0203AD2C(struct ScriptContext *ctx)
{
u16 *varPtr = GetVarPointer(ctx->unk80, (u16)ctx->data[0]);
if (*varPtr == 0xEEEE)
@@ -1218,3 +1222,79 @@ THUMB_FUNC static BOOL FUN_0203AD78(struct ScriptContext *ctx)
return TRUE;
}
}
+
+THUMB_FUNC BOOL ScrCmd_Unk0044(struct ScriptContext *ctx)
+{
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
+ u32 *unk = FUN_02039438(unk80, 0);
+ u32 *unk2 = FUN_02039438(unk80, 15);
+ u8 unk3 = ScriptReadByte(ctx);
+ u8 unk4 = ScriptReadByte(ctx);
+ u8 unk5 = ScriptReadByte(ctx);
+ u8 unk6 = ScriptReadByte(ctx);
+
+ u16 halfWord = ScriptReadHalfword(ctx);
+ u16 *varPtr = GetVarPointer(unk80, halfWord);
+ u32 *unk7 = FUN_02039438(ctx->unk80, 1);
+ *unk = MOD05_021E1F34(unk80, unk3, unk4, unk5, unk6, varPtr, *unk2, unk7, NULL);
+ ctx->data[0] = halfWord;
+ return TRUE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0045(struct ScriptContext *ctx)
+{
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
+ u32 *unk = FUN_02039438(unk80, 0);
+ u32 *unk2 = FUN_02039438(unk80, 15);
+ u8 unk3 = ScriptReadByte(ctx);
+ u8 unk4 = ScriptReadByte(ctx);
+ u8 unk5 = ScriptReadByte(ctx);
+ u8 unk6 = ScriptReadByte(ctx);
+
+ u16 halfWord = ScriptReadHalfword(ctx);
+ u16 *varPtr = GetVarPointer(unk80, halfWord);
+ u32 *unk7 = FUN_02039438(ctx->unk80, 1);
+ *unk = MOD05_021E1F34(unk80, unk3, unk4, unk5, unk6, varPtr, *unk2, unk7, ctx->msgData);
+ ctx->data[0] = halfWord;
+ return TRUE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0046(struct ScriptContext *ctx)
+{
+ u32 *unk = FUN_02039438(ctx->unk80, 0);
+ u16 unk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 unk3 = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 unk4 = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ MOD05_021E1F58(*unk, (u8)unk2, (u8)unk3, (u8)unk4);
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0047(struct ScriptContext *ctx)
+{
+ u32 *unk = FUN_02039438(ctx->unk80, 0);
+ MOD05_021E1F60(*unk);
+ SetupNativeScript(ctx, FUN_0203AD2C);
+ return TRUE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0048(struct ScriptContext *ctx)
+{
+ u32 *unk = FUN_02039438(ctx->unk80, 0);
+ MOD05_021E26CC(*unk, ScriptReadByte(ctx));
+ SetupNativeScript(ctx, FUN_0203AD2C);
+ return TRUE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk02CF(struct ScriptContext *ctx)
+{
+ u32 *unk = FUN_02039438(ctx->unk80, 0);
+ MOD05_021E2B80(*unk, ScriptReadByte(ctx));
+ return TRUE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk02D0(struct ScriptContext *ctx)
+{
+ u32 *unk = FUN_02039438(ctx->unk80, 0);
+ MOD05_021E2B9C(*unk, ScriptReadByte(ctx));
+ return TRUE;
+}
diff --git a/arm9/src/scrcmd_13.c b/arm9/src/scrcmd_13.c
new file mode 100644
index 00000000..3b21facc
--- /dev/null
+++ b/arm9/src/scrcmd_13.c
@@ -0,0 +1,111 @@
+#include "scrcmd.h"
+#include "event_data.h"
+#include "heap.h"
+#include "pokedex.h"
+#include "pokemon_storage_system.h"
+#include "unk_0202C144.h"
+
+extern struct PCStorage* GetStoragePCPointer(struct SaveBlock2* sav2);
+extern void* FUN_02022528(struct SaveBlock2* sav2);
+extern void FUN_0202BEDC(struct Pokemon* pokemon);
+extern void FUN_0202BFD8(void* a0, s32 a1, struct Pokemon* pokemon);
+extern u16 FUN_0202C000(struct Pokemon* pokemon);
+extern void FUN_0204B9EC(struct UnkSavStruct80*);
+extern u32 FUN_0204BA1C(struct UnkSavStruct80*);
+extern u16 FUN_0204BAC4(struct UnkSavStruct80*);
+extern u16 FUN_0204BAD4(struct UnkSavStruct80*);
+extern u16 FUN_0204BAE4(struct UnkSavStruct80*);
+extern void FUN_0205F224(struct ScriptState* state);
+extern void FUN_0205F234(struct ScriptState* state);
+extern void FUN_0208089C(struct Pokemon* pokemon, struct PlayerData* player, u32 a2, u32 a3, u32 heap_id);
+
+THUMB_FUNC BOOL ScrCmd_Unk0253(struct ScriptContext* ctx)
+{
+ struct ScriptState* state = SavArray_Flags_get(ctx->unk80->saveBlock2);
+ u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+
+ if (unk == 0)
+ {
+ FUN_0205F224(state);
+ FUN_0204B9EC(ctx->unk80);
+ }
+ else if (unk == 1)
+ {
+ FUN_0205F234(state);
+ FUN_0204BA1C(ctx->unk80);
+ }
+ else
+ {
+ GF_ASSERT(FALSE);
+ }
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0254(struct ScriptContext* ctx)
+{
+ void* unk = FUN_02022528(ctx->unk80->saveBlock2);
+ struct Pokemon* pokemon = AllocMonZeroed(32);
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ u16 eggs = FUN_0202C000(unk);
+ if (eggs == 6) {
+ *ret_ptr = 1;
+ } else {
+ *ret_ptr = 0;
+ }
+
+ FreeToHeap(pokemon);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0255(struct ScriptContext* ctx)
+{
+ void* unk = FUN_02022528(ctx->unk80->saveBlock2);
+ struct PCStorage* pc = GetStoragePCPointer(ctx->unk80->saveBlock2);
+ struct Pokemon* pokemon = AllocMonZeroed(32);
+ struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(ctx->unk80->saveBlock2);
+ struct Pokedex* pokedex = Sav2_Pokedex_get(ctx->unk80->saveBlock2); // unused
+
+ for (s32 i = 0; i < PARTY_SIZE; i++)
+ {
+ FUN_0202BFD8(unk, i, pokemon);
+ FUN_0208089C(pokemon, player, 2, 0, 32);
+
+ struct BoxPokemon* box_mon = FUN_020690E4(pokemon);
+ GF_ASSERT(PCStorage_PlaceMonInFirstEmptySlotInAnyBox(pc, box_mon));
+
+ FUN_0202C144(ctx->unk80->saveBlock2, pokemon);
+ }
+
+ FreeToHeap(pokemon);
+ FUN_0202BEDC(unk);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0256(struct ScriptContext* ctx)
+{
+ u16 unk = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ switch (unk)
+ {
+ case 0:
+ *ret_ptr = FUN_0204BAC4(ctx->unk80);
+ break;
+ case 1:
+ *ret_ptr = FUN_0204BAD4(ctx->unk80);
+ break;
+ case 2:
+ *ret_ptr = FUN_0204BAE4(ctx->unk80);
+ break;
+ case 3:
+ // For some reason, mwcc puts the FUN_0204BAD4 call before the FUN_0204BAC4 and FUN_0204BAE4 calls.
+ *ret_ptr = (u16)(FUN_0204BAC4(ctx->unk80) + FUN_0204BAE4(ctx->unk80) + FUN_0204BAD4(ctx->unk80));
+ break;
+ }
+
+ return FALSE;
+}
diff --git a/arm9/src/scrcmd_18_c.c b/arm9/src/scrcmd_18_c.c
index c683bc8c..d4437c5f 100644
--- a/arm9/src/scrcmd_18_c.c
+++ b/arm9/src/scrcmd_18_c.c
@@ -6,8 +6,6 @@
#include "map_header.h"
#include "scrcmd.h"
-extern u16 VarGet(struct UnkSavStruct80* arg, u16 wk);
-extern u16 *GetVarPointer(struct UnkSavStruct80* arg, u16);
extern BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u8 encounterType);
THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx)
diff --git a/arm9/src/scrcmd_19.c b/arm9/src/scrcmd_19.c
index f0fb9b42..b0a201b7 100644
--- a/arm9/src/scrcmd_19.c
+++ b/arm9/src/scrcmd_19.c
@@ -1,9 +1,6 @@
#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 },
diff --git a/arm9/src/scrcmd_20.c b/arm9/src/scrcmd_20.c
index bf4fb7f1..882126a0 100644
--- a/arm9/src/scrcmd_20.c
+++ b/arm9/src/scrcmd_20.c
@@ -1,8 +1,5 @@
#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 },
diff --git a/arm9/src/scrcmd_coins.c b/arm9/src/scrcmd_coins.c
index 5f7c4aa8..59638c83 100644
--- a/arm9/src/scrcmd_coins.c
+++ b/arm9/src/scrcmd_coins.c
@@ -1,10 +1,6 @@
#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);
diff --git a/arm9/src/scrcmd_items.c b/arm9/src/scrcmd_items.c
new file mode 100644
index 00000000..0184d02e
--- /dev/null
+++ b/arm9/src/scrcmd_items.c
@@ -0,0 +1,96 @@
+#include "scrcmd.h"
+#include "bag.h"
+
+extern BOOL FUN_02054CB0(u16 item_id);
+
+THUMB_FUNC BOOL ScrCmd_GiveItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* item_was_added = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2);
+
+ *item_was_added = (u16)Bag_AddItem(bag, item_id, quantity, 4);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_TakeItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* item_was_taken = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2);
+
+ *item_was_taken = (u16)Bag_TakeItem(bag, item_id, quantity, 4);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_HasSpaceForItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* has_space = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2);
+
+ *has_space = (u16)Bag_HasSpaceForItem(bag, item_id, quantity, 4);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_HasItem(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16 quantity = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* has_item = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+ struct Bag* bag = Sav2_Bag_get(sav_ptr->saveBlock2);
+
+ *has_item = (u16)Bag_HasItem(bag, item_id, quantity, 11);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_ItemIdIsTMOrHM(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* is_tm_or_hm = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ *is_tm_or_hm = (u16)FUN_02054CB0(item_id);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_GetItemPocketId(struct ScriptContext* ctx)
+{
+ struct UnkSavStruct80* sav_ptr = ctx->unk80;
+
+ u16 item_id = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
+ u16* pocket = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
+
+ *pocket = (u16)GetItemAttr(item_id, ITEMATTR_POCKET, 11);
+
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0081(struct ScriptContext* ctx)
+{
+#pragma unused(ctx)
+ return FALSE;
+}
+
+THUMB_FUNC BOOL ScrCmd_Unk0082(struct ScriptContext* ctx)
+{
+#pragma unused(ctx)
+ return FALSE;
+}
diff --git a/arm9/src/scrcmd_money.c b/arm9/src/scrcmd_money.c
index b61a7ff7..d2254844 100644
--- a/arm9/src/scrcmd_money.c
+++ b/arm9/src/scrcmd_money.c
@@ -1,10 +1,6 @@
#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);