Decompile scrcmd_pokemon_misc, 6

This commit is contained in:
Adrienn Tindall 2022-09-27 01:55:30 -04:00
parent c1914e7150
commit d85a4e4336
3 changed files with 115 additions and 227 deletions

View File

@ -2541,228 +2541,11 @@ _02201F08: .word gGameVersion
_02201F0C: .word 0x00001388
thumb_func_end ScrCmd_741
thumb_func_start ScrCmd_743
ScrCmd_743: ; 0x02201F10
push {r4, lr}
add r4, r0, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl VarGet
add r1, r0, #0
ldr r0, [r4, #0x74]
bl ov03_02258CFC
mov r0, #1
pop {r4, pc}
thumb_func_end ScrCmd_743
thumb_func_start ScrCmd_744
ScrCmd_744: ; 0x02201F30
push {r3, r4, r5, r6, r7, lr}
sub sp, #0x10
add r0, #0x80
ldr r7, [r0]
ldr r0, [r7, #0xc]
bl sub_02031B00
ldr r5, _02201F90 ; =ov01_022093B4
add r4, r0, #0
mov r6, #0
_02201F44:
add r1, r6, #0
ldr r0, [r7, #0x3c]
add r1, #0xf6
bl GetMapObjectByID
cmp r0, #0
beq _02201F56
bl DeleteMapObject
_02201F56:
ldrh r2, [r4]
cmp r2, #0
beq _02201F80
ldr r0, _02201F94 ; =0x000001ED
cmp r2, r0
bhi _02201F80
ldrb r0, [r4, #2]
lsl r1, r6, #0x18
lsr r1, r1, #0x18
str r0, [sp]
ldrb r0, [r5]
str r0, [sp, #4]
ldrb r0, [r5, #1]
str r0, [sp, #8]
ldr r0, [r7, #0x20]
ldr r0, [r0]
str r0, [sp, #0xc]
ldrb r3, [r4, #3]
ldr r0, [r7, #0x3c]
bl ov01_02201F98
_02201F80:
add r6, r6, #1
add r4, r4, #4
add r5, r5, #2
cmp r6, #3
blt _02201F44
mov r0, #1
add sp, #0x10
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
_02201F90: .word ov01_022093B4
_02201F94: .word 0x000001ED
thumb_func_end ScrCmd_744
thumb_func_start ov01_02201F98
ov01_02201F98: ; 0x02201F98
push {r4, r5, r6, r7, lr}
sub sp, #0x1c
str r3, [sp, #0x18]
add r6, r1, #0
add r7, r2, #0
add r4, r0, #0
ldr r1, [sp, #0x18]
ldr r2, [sp, #0x30]
add r0, r7, #0
bl FollowingPokemon_GetSpriteID
lsl r5, r0, #1
add r0, r7, #0
bl GetFollowPokeSizeParamBySpecies
lsl r1, r0, #1
add r0, r0, r1
add r1, r6, r0
ldr r0, _02202058 ; =0x0000019F
ldr r2, [sp, #0x38]
add r0, r1, r0
str r0, [sp]
mov r1, #0
ldr r0, [sp, #0x3c]
str r1, [sp, #4]
str r0, [sp, #8]
str r1, [sp, #0xc]
str r1, [sp, #0x10]
ldr r1, [sp, #0x34]
add r0, r4, #0
mov r3, #1
str r5, [sp, #0x14]
bl CreateSpecialFieldObjectEx
add r4, r0, #0
bne _02201FE4
bl GF_AssertFail
_02201FE4:
add r6, #0xf6
add r0, r4, #0
add r1, r6, #0
bl MapObject_SetID
add r0, r4, #0
mov r1, #0
bl MapObject_SetType
add r0, r4, #0
mov r1, #0
bl MapObject_SetFlagID
add r0, r4, #0
mov r1, #0
bl MapObject_SetScript
add r0, r4, #0
mov r1, #0
mov r2, #2
bl MapObject_SetParam
str r5, [sp]
ldr r2, [sp, #0x18]
add r0, r4, #0
lsl r2, r2, #0x18
add r1, r7, #0
lsr r2, r2, #0x18
mov r3, #0
bl sub_02069F0C
mov r1, #0
add r0, r4, #0
mvn r1, r1
bl MapObject_SetXRange
mov r1, #0
add r0, r4, #0
mvn r1, r1
bl MapObject_SetYRange
mov r1, #1
add r0, r4, #0
lsl r1, r1, #0x1e
bl MapObject_SetBits
add r0, r4, #0
mov r1, #0
bl MapObject_ClearBits
add r0, r4, #0
mov r1, #0
bl sub_0205F89C
add r0, r4, #0
add sp, #0x1c
pop {r4, r5, r6, r7, pc}
nop
_02202058: .word 0x0000019F
thumb_func_end ov01_02201F98
thumb_func_start ScrCmd_770
ScrCmd_770: ; 0x0220205C
push {r3, r4, r5, r6, r7, lr}
add r4, r0, #0
bl ScriptReadHalfword
add r1, r0, #0
add r0, r4, #0
add r0, #0x80
ldr r0, [r0]
bl GetVarPointer
add r4, #0x80
str r0, [sp]
ldr r0, [r4]
ldr r0, [r0, #0xc]
bl Sav2_Pokedex_get
mov r1, #1
add r7, r0, #0
bl Pokedex_GetSeenFormeNum_Unown
add r6, r0, #0
cmp r6, #0x1a
bge _02202094
ldr r0, [sp]
mov r1, #0
strh r1, [r0]
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
_02202094:
mov r5, #0
add r4, r5, #0
cmp r6, #0
ble _022020B6
_0220209C:
add r0, r7, #0
add r1, r4, #0
mov r2, #1
bl Pokedex_GetSeenFormeByIdx_Unown
cmp r0, #0x1a
beq _022020B0
cmp r0, #0x1b
beq _022020B0
add r5, r5, #1
_022020B0:
add r4, r4, #1
cmp r4, r6
blt _0220209C
_022020B6:
cmp r5, #0x1a
bne _022020C0
mov r1, #1
ldr r0, [sp]
b _022020C4
_022020C0:
ldr r0, [sp]
mov r1, #0
_022020C4:
strh r1, [r0]
mov r0, #1
pop {r3, r4, r5, r6, r7, pc}
.balign 4, 0
thumb_func_end ScrCmd_770
.rodata
ov01_022093B4: ; 0x022093B4
.public sFriendshipRoomStatuesPositions
sFriendshipRoomStatuesPositions: ; 0x022093B4
.byte 0x04, 0x0A, 0x07, 0x05, 0x0A, 0x0A
.public sSpikyEarPichuMoveset

View File

@ -4,7 +4,15 @@
#include "save.h"
typedef struct {
u8 unk[0x28];
u16 species;
u8 gender;
u8 forme;
} PokeathlonFriendshipRoomStatueData;
//TODO: Rename to PokeathlonSaveData or PokeathlonRecords smth like that
typedef struct {
PokeathlonFriendshipRoomStatueData friendshipRoomStatues[3];
u8 unk[0x1C];
} UnkSaveStruct29;
u32 sub_02031AF0(void);

View File

@ -2,11 +2,114 @@
#include "fieldmap.h"
#include "friend_group.h"
#include "photo_album.h"
#include "pokedex.h"
#include "scrcmd.h"
#include "unk_0206D494.h"
#include "unk_02031AF0.h"
#include "msgdata/msg/msg_0096_D31R0201.h"
#include "msgdata/msg/msg_0066_D23R0102.h"
static LocalMapObject *ov01_02201F98(MapObjectMan *mapObjectMan, u8 unkA, u16 species, u16 forme, u32 gender, u32 x, u32 y, u32 mapId);
//TODO: define ov03_02258CFC in a header
BOOL ScrCmd_743(SCRIPTCONTEXT *ctx) {
ov03_02258CFC(ctx->taskman, VarGet(ctx->fsys, ScriptReadHalfword(ctx)));
return TRUE;
}
extern u8 sFriendshipRoomStatuesPositions[3][2];
//TODO: rename to ScrCmd_CreatePokeathlonFriendshipRoomSprites
BOOL ScrCmd_744(SCRIPTCONTEXT *ctx) {
s32 i;
u16 species;
FieldSystem *fsys = ctx->fsys;
UnkSaveStruct29 *unkPtr = sub_02031B00(fsys->savedata);
for (i = 0; i < 3; i++) {
//TODO: Replace 0xf6 with whatever the const is
LocalMapObject *mapObj = GetMapObjectByID(fsys->mapObjectMan, 0xf6 + i);
if (mapObj) {
DeleteMapObject(mapObj);
}
species = unkPtr->friendshipRoomStatues[i].species;
if (species != 0 && species <= SPECIES_ARCEUS) {
ov01_02201F98(fsys->mapObjectMan, (u8) i, species, unkPtr->friendshipRoomStatues[i].forme, unkPtr->friendshipRoomStatues[i].gender, sFriendshipRoomStatuesPositions[i][0], sFriendshipRoomStatuesPositions[i][1], fsys->location->mapId);
}
}
return TRUE;
}
static LocalMapObject *ov01_02201F98(MapObjectMan *mapObjectMan, u8 unkA, u16 species, u16 forme, u32 gender, u32 x, u32 y, u32 mapId) {
LocalMapObject *mapObj;
u32 spriteId;
u32 size;
spriteId = FollowingPokemon_GetSpriteID(species, forme, gender) << 1;
size = GetFollowPokeSizeParamBySpecies(species)*3 + unkA;
//TODO: Define CreateSpecialFieldObjectEx in a header
mapObj = CreateSpecialFieldObjectEx(mapObjectMan, x, y, DIR_SOUTH, size + 0x19f, 0, mapId, 0, 0, spriteId);
if (!mapObj) {
GF_AssertFail();
}
MapObject_SetID(mapObj, unkA + 0xf6);
MapObject_SetType(mapObj, 0);
MapObject_SetFlagID(mapObj, 0);
MapObject_SetScript(mapObj, 0);
MapObject_SetParam(mapObj, 0, 2);
sub_02069F0C(mapObj, species, (u8) forme, FALSE, spriteId);
MapObject_SetXRange(mapObj, -1);
MapObject_SetYRange(mapObj, -1);
MapObject_SetBits(mapObj, 1 << 0x1e);
MapObject_ClearBits(mapObj, FALSE);
sub_0205F89C(mapObj, FALSE);
return mapObj;
}
//TODO: Rename to ScrCmd_CheckAllLetterUnownSeen
BOOL ScrCmd_770(SCRIPTCONTEXT *ctx) {
u32 forme;
s32 i;
u32 counter;
s32 unownFormes;
POKEDEX *pokedex;
u16 *allUnownSeen;
allUnownSeen = GetVarPointer(ctx->fsys, ScriptReadHalfword(ctx));
pokedex = Sav2_Pokedex_get(ctx->fsys->savedata);
unownFormes = Pokedex_GetSeenFormeNum_Unown(pokedex, 1);
if (unownFormes < 26) {
*allUnownSeen = FALSE;
return TRUE;
}
counter = 0;
for (i = 0; i < unownFormes; i++) {
forme = Pokedex_GetSeenFormeByIdx_Unown(pokedex, i, TRUE);
if (forme != 26 && forme != 27) {
counter++;
}
}
if (counter == 26) {
*allUnownSeen = TRUE;
} else {
*allUnownSeen = FALSE;
}
return TRUE;
}
BOOL ScrCmd_GiveTogepiEgg(SCRIPTCONTEXT *ctx) {
s32 i;
u8 pp;
@ -231,8 +334,6 @@ BOOL ScrCmd_GetBuenasPassword(SCRIPTCONTEXT *ctx) {
return FALSE;
}
//TODO: Rename to MonGetShinyLeafCount
static u32 MonGetShinyLeafCount(POKEMON *mon) {
int c;
u32 shinyLeafCount = 0;
@ -247,7 +348,6 @@ static u32 MonGetShinyLeafCount(POKEMON *mon) {
return shinyLeafCount;
}
//TODO: Rename to ScrCmd_GetShinyLeafCount
BOOL ScrCmd_GetShinyLeafCount(SCRIPTCONTEXT *ctx) {
u32 monIndex = VarGet(ctx->fsys, ScriptReadHalfword(ctx));
u16 *shinyLeafCount = GetVarPointer(ctx->fsys, ScriptReadHalfword(ctx));
@ -255,7 +355,6 @@ BOOL ScrCmd_GetShinyLeafCount(SCRIPTCONTEXT *ctx) {
return FALSE;
}
//TODO: Rename to ScrCmd_TryGiveShinyLeafCrown
BOOL ScrCmd_TryGiveShinyLeafCrown(SCRIPTCONTEXT *ctx) {
u32 monIndex = VarGet(ctx->fsys, ScriptReadHalfword(ctx));
@ -268,7 +367,6 @@ BOOL ScrCmd_TryGiveShinyLeafCrown(SCRIPTCONTEXT *ctx) {
return FALSE;
}
//TODO: Rename to ScrCmd_GetUniqueSealsCount
BOOL ScrCmd_GetUniqueSealsQuantity(SCRIPTCONTEXT *ctx) {
u16 *uniqueSeals = GetVarPointer(ctx->fsys, ScriptReadHalfword(ctx));
@ -295,7 +393,6 @@ BOOL ScrCmd_GiveOrTakeSeal(SCRIPTCONTEXT *ctx) {
return FALSE;
}
//TODO: rename to IsSealNonUnique
static BOOL IsSealNonUnique(u16 sealId, u16 *uniqueSealIds, s32 size) {
s32 c;