From 786465b8d72fa7eeb82cbf652fec3b8aa6555407 Mon Sep 17 00:00:00 2001 From: red031000 Date: Mon, 12 Jun 2023 00:12:26 +0100 Subject: [PATCH] more scrcmd --- arm9/asm/scrcmd_asm.s | 111 ---------------------------------------- arm9/asm/unk_02038C78.s | 4 +- arm9/global.inc | 4 +- arm9/src/scrcmd.c | 34 ++++++++++++ include/pokemon.h | 8 +-- include/scrcmd.h | 3 ++ include/unk_020377F0.h | 1 + 7 files changed, 46 insertions(+), 119 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index c6d4c2f83..575eb3398 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -10,117 +10,6 @@ .text - thumb_func_start ScrCmd_Unk00BB -ScrCmd_Unk00BB: ; 0x0203C520 - push {r4-r7, lr} - sub sp, #0x34 - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - ldr r0, [r4, #0xc] - bl SaveArray_PlayerParty_Get - add r1, r6, #0x0 - bl GetPartyMonByIndex - mov r1, #0x74 - add r2, sp, #0xc - add r7, r0, #0x0 - bl GetMonData - 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, r7, #0x0 - mov r1, #0x5 - mov r2, #0x0 - bl GetMonData - add r2, r0, #0x0 - str r6, [sp, #0x0] - add r0, sp, #0xc - str r0, [sp, #0x4] - str r4, [sp, #0x8] - ldr r0, [r5, #0x74] - mov r1, #0x1 - mov r3, #0xa - bl CreateNamingScreen - mov r0, #0x1 - add sp, #0x34 - pop {r4-r7, pc} - - thumb_func_start ScrCmd_Unk0271 -ScrCmd_Unk0271: ; 0x0203C58C - push {r3-r4, lr} - sub sp, #0xc - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - mov r2, #0x0 - str r2, [sp, #0x0] - str r2, [sp, #0x4] - str r0, [sp, #0x8] - ldr r0, [r4, #0x74] - mov r1, #0x6 - mov r3, #0xa - bl CreateNamingScreen - mov r0, #0x1 - add sp, #0xc - pop {r3-r4, pc} - .balign 4 - - thumb_func_start ScrCmd_Unk0243 -ScrCmd_Unk0243: ; 0x0203C5BC - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - 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 r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r2, r0, #0x0 - ldr r0, _0203C610 ; =0x0000FFFF - add r5, #0x80 - strh r0, [r2, #0x0] - ldr r0, [r5, #0x0] - add r1, r4, #0x0 - ldr r0, [r0, #0x10] - mov r3, #0x0 - bl FUN_02037E18 - mov r0, #0x1 - pop {r3-r5, pc} - nop -_0203C610: .word 0x0000FFFF - thumb_func_start ScrCmd_Unk0244 ScrCmd_Unk0244: ; 0x0203C614 push {r4-r6, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 6f0933813..862ef0738 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -336,7 +336,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_Unk00B8 .word ScrCmd_Unk00B9 .word ScrCmd_NamePlayerScreen - .word ScrCmd_Unk00BB + .word ScrCmd_NamePokemonScreen .word ScrCmd_Unk00BC .word ScrCmd_Unk00BD .word ScrCmd_Unk00BE @@ -774,7 +774,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_Unk026E .word ScrCmd_Unk026F .word ScrCmd_Unk0270 - .word ScrCmd_Unk0271 + .word ScrCmd_WriteWhiteRockInscription .word ScrCmd_GetWhiteRockInscription .word ScrCmd_Unk0273 .word ScrCmd_HasEnoughCoinsImmediate diff --git a/arm9/global.inc b/arm9/global.inc index 1720a57dc..7d925e824 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2865,8 +2865,8 @@ .extern ScrCmd_ShowBagScreen .extern ScrCmd_GetBagScreenSelection .extern ScrCmd_NamePlayerScreen -.extern ScrCmd_Unk00BB -.extern ScrCmd_Unk0271 +.extern ScrCmd_NamePokemonScreen +.extern ScrCmd_WriteWhiteRockInscription .extern ScrCmd_Unk0243 .extern ScrCmd_Unk0244 .extern ScrCmd_Unk0245 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index b8df2a806..59c801b35 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -147,6 +147,7 @@ extern void FUN_020386A4(FieldSystem *fieldSystem, StarterSelectionData *starter extern void FUN_0205F378(struct ScriptState *flags, u16 state); extern BagScreenAppData *FUN_0203789C(FieldSystem *fieldSystem, u8 mode); extern u16 FUN_020378FC(BagScreenAppData *bagScreenAppData); +extern void FUN_02037E18(TaskManager *taskManager, u16 *param1, u16 *param2, u32 param3); u8 UNK_021C5A0C[4]; @@ -2342,3 +2343,36 @@ BOOL ScrCmd_NamePlayerScreen(ScriptContext *ctx) { //00BA CreateNamingScreen(ctx->taskManager, NAMINGSCREEN_PLAYER, 0, PLAYER_NAME_LENGTH, 0, NULL, var); return TRUE; } + +BOOL ScrCmd_NamePokemonScreen(ScriptContext *ctx) { //00BB + FieldSystem *fieldSystem = ctx->fieldSystem; + + u16 partyPos = ScriptGetVar(ctx); + PlayerParty *party = SaveArray_PlayerParty_Get(fieldSystem->saveBlock2); + Pokemon *mon = GetPartyMonByIndex(party, partyPos); + + u16 monNick[20]; + GetMonData(mon, MON_DATA_NICKNAME, monNick); + + u16 *var = ScriptGetVarPointer(ctx); + + s32 species = GetMonData(mon, MON_DATA_SPECIES, NULL); + + CreateNamingScreen(ctx->taskManager, NAMINGSCREEN_POKEMON, species, POKEMON_NAME_LENGTH, partyPos, monNick, var); + return TRUE; +} + +BOOL ScrCmd_WriteWhiteRockInscription(ScriptContext *ctx) { //0271 + u16 *var = ScriptGetVarPointer(ctx); + CreateNamingScreen(ctx->taskManager, NAMINGSCREEN_SHAYMIN_ROCK, 0, POKEMON_NAME_LENGTH, 0, NULL, var); + return TRUE; +} + +BOOL ScrCmd_Unk0243(ScriptContext *ctx) { //0243 + u16 unused = ScriptGetVar(ctx); + u16 *unk1 = ScriptGetVarPointer(ctx); + u16 *unk2 = ScriptGetVarPointer(ctx); + *unk2 = 0xFFFF; + FUN_02037E18(ctx->fieldSystem->taskManager, unk1, unk2, 0); + return TRUE; +} diff --git a/include/pokemon.h b/include/pokemon.h index 60fa18383..47ee24c34 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -147,10 +147,10 @@ struct PartyPokemon /* 0x0D4 */ u8 sealCoords[8][3]; // seal coords }; -struct Pokemon { +typedef struct Pokemon { /* 0x000 */ struct BoxPokemon box; /* 0x088 */ struct PartyPokemon party; -}; // size: 0xEC +} Pokemon; // size: 0xEC struct SomeDrawPokemonStruct { @@ -193,12 +193,12 @@ struct Evolution #define PARTY_SIZE 6 -struct PlayerParty +typedef struct PlayerParty { int maxCount; int curCount; struct Pokemon mons[PARTY_SIZE]; -}; +} PlayerParty; void ZeroMonData(struct Pokemon * pokemon); void ZeroBoxMonData(struct BoxPokemon * boxmon); diff --git a/include/scrcmd.h b/include/scrcmd.h index 7e9fb09b8..182bda98c 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -201,6 +201,9 @@ BOOL ScrCmd_EndStarterSelectionScreen(ScriptContext *ctx); BOOL ScrCmd_ShowBagScreen(ScriptContext *ctx); BOOL ScrCmd_GetBagScreenSelection(ScriptContext *ctx); BOOL ScrCmd_NamePlayerScreen(ScriptContext *ctx); +BOOL ScrCmd_NamePokemonScreen(ScriptContext *ctx); +BOOL ScrCmd_WriteWhiteRockInscription(ScriptContext *ctx); +BOOL ScrCmd_Unk0243(ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); diff --git a/include/unk_020377F0.h b/include/unk_020377F0.h index 6e219b1a2..d6522c1ec 100644 --- a/include/unk_020377F0.h +++ b/include/unk_020377F0.h @@ -37,6 +37,7 @@ enum NamingScreenType { NAMINGSCREEN_BOX, NAMINGSCREEN_RIVAL, NAMINGSCREEN_GROUP = 5, + NAMINGSCREEN_SHAYMIN_ROCK = 6, }; void CreateNamingScreen(TaskManager *taskManager, enum NamingScreenType type, s32 param2, s32 maxLen, s32 initPos, const u16 *defaultStr, u16 *retVar);