Clean gulpin/felicity

This commit is contained in:
Kermalis
2023-07-22 19:14:33 -04:00
parent d45718c437
commit a5c7e736f9
8 changed files with 138 additions and 141 deletions

View File

@@ -1419,14 +1419,14 @@ _0802038C:
ldrsh r1, [r2, r5]
adds r2, 0x24
movs r0, 0
bl DisplayGulpinDialogueSprite
bl CreateGulpinShop
b _08020562
_080203A2:
movs r0, 0xC
ldrsh r1, [r2, r0]
adds r2, 0x24
movs r0, 0x1
bl DisplayGulpinDialogueSprite
bl CreateGulpinShop
b _08020562
_080203B0:
ldr r2, [r5]
@@ -2709,14 +2709,14 @@ sub_8020D90:
ldr r1, _08020DB8
ldr r1, [r1]
strb r0, [r1, 0x14]
bl sub_801E93C
bl DestroyGulpinShop
movs r0, 0x1A
bl sub_801FDA8
b _08020DC6
.align 2, 0
_08020DB8: .4byte gUnknown_203B27C
_08020DBC:
bl sub_801E93C
bl DestroyGulpinShop
movs r0, 0x10
bl sub_801FDA8
_08020DC6:

View File

@@ -147,7 +147,7 @@ gUnknown_81161D8: @ 81161D8
gUnknown_81161E8: @ 81161E8
.byte 0x01, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.4byte CleanFelicityBank
.4byte DestroyFelicityBank
.4byte FelicityBankCallback
.global gUnknown_81161F8

View File

@@ -8,11 +8,11 @@
// size: 0x108
struct FelicityBankWork
{
u32 isAsleep;
s32 currState;
u32 fallbackState;
u32 chosenAmount;
u32 menuAction;
/* 0x0 */ u32 isAsleep;
/* 0x4 */ s32 currState;
/* 0x8 */ u32 fallbackState;
/* 0xC */ u32 chosenAmount;
/* 0x10 */ u32 menuAction;
struct MenuItem unk14[8];
u16 unk54[8];
u32 unk64;

View File

@@ -1,10 +1,10 @@
#ifndef GUARD_GULPIN_SHOP_H
#define GUARD_GULPIN_SHOP_H
struct unkStruct_203B26C
{
// size: 0x18C
u32 unk0;
struct GulpinShopWork
{
/* 0x0 */ u32 isAsleep;
/* 0x4 */ s32 state;
u32 unk8;
/* 0xC */ s16 speciesNum; // species of chosen Pokemon
@@ -28,7 +28,10 @@ struct unkStruct_203B26C
u8 unk126;
u8 unk127;
struct OpenedFile **unk128;
struct UnkTextStruct2 unk12C[4];
struct UnkTextStruct2 unk12C[4];
};
u32 CreateGulpinShop(s32 isAsleep, s16 pokeSpecies, struct Move *moves);
void DestroyGulpinShop(void);
#endif

View File

@@ -5,6 +5,7 @@
#include "team_inventory.h"
#include "menu.h"
#include "pokemon.h"
#include "gulpin_shop.h"
extern void sub_8092C84(u8 *, u16);
extern void sub_8099690(u32);
@@ -29,7 +30,6 @@ extern u8 gUnknown_202E218[0x50];
extern void InitZeroedPPPokemonMove(struct Move*, u16);
extern void unk_CopyMoves4To8(struct Move *, struct Move *);
extern bool8 IsHMItem(u8);
extern void DisplayGulpinDialogueSprite(u32, u32, void *);
extern void sub_801B178(void);
extern void sub_8094060(void *, struct Move *);
extern void PlaySound(u32);
@@ -38,7 +38,6 @@ extern void sub_8014248(u32 *, u32, u32, struct MenuItem *, u32, u32, u32, u32,
extern void PrintPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon);
extern s32 sub_80144A4(s32 *);
extern u32 sub_801E8C0(void);
extern void sub_801E93C(void);
extern bool8 CanMonLearnMove(u16 moveID, s16 _species);
extern s32 sub_808D580(s32*);
@@ -130,7 +129,7 @@ void sub_801B080(void)
sub_8014248(&gUnknown_80DB9BC, 0, gUnknown_203B22C->unk60, gUnknown_203B22C->menuItems, 0, 4, 0, 0, 0x20);
break;
case 1:
DisplayGulpinDialogueSprite(2, gUnknown_203B22C->chosenPokemon, gUnknown_203B22C->moves);
CreateGulpinShop(2, gUnknown_203B22C->chosenPokemon, gUnknown_203B22C->moves);
break;
case 2:
sub_8094060(gUnknown_203B22C->moves, gUnknown_203B22C->pokeStruct->moves);
@@ -215,11 +214,11 @@ void sub_801B2AC(void)
switch(sub_801E8C0())
{
case 3:
sub_801E93C();
DestroyGulpinShop();
sub_801B064(2);
break;
case 2:
sub_801E93C();
DestroyGulpinShop();
sub_801B064(0);
break;
case 0:

View File

@@ -88,7 +88,7 @@ u32 FelicityBankCallback(void)
return 0;
}
void CleanFelicityBank(void)
void DestroyFelicityBank(void)
{
if (gFelicityBankWork != NULL) {
CloseFile(gFelicityBankWork->faceFile);

View File

@@ -9,7 +9,7 @@
#include "gulpin_shop.h"
#include "menu_input.h"
extern struct unkStruct_203B26C *gUnknown_203B26C;
extern struct GulpinShopWork *gGulpinShopWork;
extern const struct UnkTextStruct2 gUnknown_80DC11C;
extern const struct UnkTextStruct2 gUnknown_80DC134;
extern const u8 *gUnknown_80D4920[];
@@ -42,45 +42,43 @@ extern void sub_801F808(u16 *);
extern u32 sub_801F890(void);
extern void sub_801F8D0(void);
extern void PlaySound(u32);
void UpdateGulpinShopState(u32);
void SetGulpinShopState(u32);
u32 DisplayGulpinDialogueSprite(s32 param_1,s16 pokeSpecies,struct Move *param_3)
u32 CreateGulpinShop(s32 isAsleep, s16 pokeSpecies, struct Move *moves)
{
struct OpenedFile *faceFile;
s32 species_32;
species_32 = pokeSpecies; // dumb cast needed to get lsr/asr combo
gUnknown_203B26C = MemoryAlloc(sizeof(struct unkStruct_203B26C),8);
gUnknown_203B26C->unk0 = param_1;
gUnknown_203B26C->speciesNum = species_32;
gUnknown_203B26C->moves = param_3;
gUnknown_203B26C->unk1C = param_3[4].id;
gGulpinShopWork = MemoryAlloc(sizeof(struct GulpinShopWork), 8);
gGulpinShopWork->isAsleep = isAsleep;
gGulpinShopWork->speciesNum = species_32;
gGulpinShopWork->moves = moves;
gGulpinShopWork->unk1C = moves[4].id; // 5th move..?
if (isAsleep == 0)
gGulpinShopWork->unk128 = &gGulpinShopWork->faceFile;
else
gGulpinShopWork->unk128 = NULL;
if (param_1 == 0) {
gUnknown_203B26C->unk128 = &gUnknown_203B26C->faceFile;
}
else {
gUnknown_203B26C->unk128 = NULL;
}
faceFile = GetDialogueSpriteDataPtr(MONSTER_GULPIN);
gUnknown_203B26C->faceFile = faceFile;
gUnknown_203B26C->faceData = faceFile->data;
gGulpinShopWork->faceFile = faceFile;
gGulpinShopWork->faceData = faceFile->data;
gUnknown_203B26C->unk124 = 0;
gUnknown_203B26C->unk125 = 0;
gUnknown_203B26C->unk126 = 0;
gGulpinShopWork->unk124 = 0;
gGulpinShopWork->unk125 = 0;
gGulpinShopWork->unk126 = 0;
gUnknown_203B26C->unk120 = 2;
gUnknown_203B26C->unk122 = 8;
UpdateGulpinShopState(0);
gGulpinShopWork->unk120 = 2;
gGulpinShopWork->unk122 = 8;
SetGulpinShopState(0);
return 1;
}
u32 sub_801E8C0(void)
{
switch(gUnknown_203B26C->state)
{
switch (gGulpinShopWork->state) {
case 0:
case 1:
sub_801ECBC();
@@ -93,7 +91,7 @@ u32 sub_801E8C0(void)
break;
case 4:
sub_801EDC0();
if(gUnknown_203B26C->state == 5)
if (gGulpinShopWork->state == 5)
return 3;
break;
case 5:
@@ -101,27 +99,26 @@ u32 sub_801E8C0(void)
case 6:
return 2;
}
return 0;
return 0;
}
bool8 GulpinIsNextMoveLinked(void)
{
return gUnknown_203B26C->isNextMoveLinked;
return gGulpinShopWork->isNextMoveLinked;
}
void sub_801E93C(void)
void DestroyGulpinShop(void)
{
if(gUnknown_203B26C != NULL)
{
CloseFile(gUnknown_203B26C->faceFile);
MemoryFree(gUnknown_203B26C);
gUnknown_203B26C = NULL;
if (gGulpinShopWork != NULL) {
CloseFile(gGulpinShopWork->faceFile);
MemoryFree(gGulpinShopWork);
gGulpinShopWork = NULL;
}
}
void UpdateGulpinShopState(u32 newState)
void SetGulpinShopState(u32 newState)
{
gUnknown_203B26C->state = newState;
gGulpinShopWork->state = newState;
sub_801E980();
sub_801EA28();
}
@@ -130,124 +127,122 @@ void sub_801E980(void)
{
s32 index;
sub_8006518(gUnknown_203B26C->unk12C);
switch(gUnknown_203B26C->state)
{
sub_8006518(gGulpinShopWork->unk12C);
switch (gGulpinShopWork->state) {
case 2:
sub_801EBC4();
gUnknown_203B26C->unk12C[1] = gUnknown_80DC11C;
gUnknown_203B26C->unk12C[2] = gUnknown_80DC134;
sub_8012CAC(&gUnknown_203B26C->unk12C[2], gUnknown_203B26C->unk28);
gGulpinShopWork->unk12C[1] = gUnknown_80DC11C;
gGulpinShopWork->unk12C[2] = gUnknown_80DC134;
sub_8012CAC(&gGulpinShopWork->unk12C[2], gGulpinShopWork->unk28);
break;
default:
for(index = 0; index < 4; index++)
{
gUnknown_203B26C->unk12C[index] = gUnknown_80DC11C;
for(index = 0; index < 4; index++) {
gGulpinShopWork->unk12C[index] = gUnknown_80DC11C;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B26C->unk12C, 1, 1);
sub_800641C(gGulpinShopWork->unk12C, 1, 1);
}
void sub_801EA28(void) {
switch(gUnknown_203B26C->state) {
void sub_801EA28(void)
{
switch (gGulpinShopWork->state) {
case 0:
sub_801EE10(2, gUnknown_203B26C->speciesNum, gUnknown_203B26C->moves, 0, &gUnknown_80DC164, 0);
sub_801EE10(2, gGulpinShopWork->speciesNum, gGulpinShopWork->moves, 0, &gUnknown_80DC164, 0);
break;
case 1:
sub_801F1B0(1, 0);
break;
case 2:
sub_801F280(0);
sub_8012D60(&gUnknown_203B26C->unk78, gUnknown_203B26C->unk28, 0, gUnknown_203B26C->unk68, gUnknown_203B26C->unk24, 2);
sub_8012D60(&gGulpinShopWork->unk78, gGulpinShopWork->unk28, 0, gGulpinShopWork->unk68, gGulpinShopWork->unk24, 2);
break;
case 3:
GetLinkedSequence(gUnknown_203B26C->unk20, gUnknown_203B26C->moves, &gUnknown_203B26C->unk14[0]);
sub_801F808(&gUnknown_203B26C->unk14[0]);
GetLinkedSequence(gGulpinShopWork->unk20, gGulpinShopWork->moves, &gGulpinShopWork->unk14[0]);
sub_801F808(&gGulpinShopWork->unk14[0]);
break;
case 4:
sub_801EC7C();
sub_8092C84(gAvailablePokemonNames, gUnknown_203B26C->unk1C);
sub_8092C84(&gAvailablePokemonNames[0x50], gUnknown_203B26C->unk1E);
sub_8092C84(gAvailablePokemonNames, gGulpinShopWork->unk1C);
sub_8092C84(&gAvailablePokemonNames[0x50], gGulpinShopWork->unk1E);
switch (gUnknown_203B26C->unk0) {
switch (gGulpinShopWork->isAsleep) {
case 0:
case 1:
if (gUnknown_203B26C->isNextMoveLinked) {
sub_8014248(gGulpinDialogue[gUnknown_203B26C->unk0][12], 0, 5, &gUnknown_203B26C->unk28[0],
&gUnknown_203B26C->unk68, 4, 0, gUnknown_203B26C->unk128, 12); // Forget the move and any moves linked to it and learn?
}
else {
sub_8014248(gGulpinDialogue[gUnknown_203B26C->unk0][11], 0, 5, &gUnknown_203B26C->unk28[0],
&gUnknown_203B26C->unk68, 4, 0, gUnknown_203B26C->unk128, 12); // Forget the move and learn?
}
break;
case 2:
if (gUnknown_203B26C->isNextMoveLinked)
sub_8014248(gUnknown_80DC1A0, 0, 5, &gUnknown_203B26C->unk28[0],
&gUnknown_203B26C->unk68, 4, 0, NULL, 32);
if (gGulpinShopWork->isNextMoveLinked)
sub_8014248(gGulpinDialogue[gGulpinShopWork->isAsleep][12], 0, 5, &gGulpinShopWork->unk28[0],
&gGulpinShopWork->unk68, 4, 0, gGulpinShopWork->unk128, 12); // Forget the move and any moves linked to it and learn?
else
sub_8014248(gUnknown_80DC1FC, 0, 5, &gUnknown_203B26C->unk28[0],
&gUnknown_203B26C->unk68, 4, 0, NULL, 32);
break;
sub_8014248(gGulpinDialogue[gGulpinShopWork->isAsleep][11], 0, 5, &gGulpinShopWork->unk28[0],
&gGulpinShopWork->unk68, 4, 0, gGulpinShopWork->unk128, 12); // Forget the move and learn?
break;
case 2:
if (gGulpinShopWork->isNextMoveLinked)
sub_8014248(gUnknown_80DC1A0, 0, 5, &gGulpinShopWork->unk28[0],
&gGulpinShopWork->unk68, 4, 0, NULL, 32);
else
sub_8014248(gUnknown_80DC1FC, 0, 5, &gGulpinShopWork->unk28[0],
&gGulpinShopWork->unk68, 4, 0, NULL, 32);
break;
}
break;
}
}
void sub_801EBC4(void) {
void sub_801EBC4(void)
{
s32 which;
s32 i;
which = 0;
MemoryFill16(&gUnknown_203B26C->unk68[0], 0, sizeof(gUnknown_203B26C->unk68));
MemoryFill16(gGulpinShopWork->unk68, 0, sizeof(gGulpinShopWork->unk68));
gUnknown_203B26C->unk28[which].text = gUnknown_80DC230; // "Forget"
gUnknown_203B26C->unk28[which].menuAction = 2;
gGulpinShopWork->unk28[which].text = gUnknown_80DC230; // "Forget"
gGulpinShopWork->unk28[which].menuAction = 2;
if (!IsAnyMoveLinked(gUnknown_203B26C->unk1E, gUnknown_203B26C->moves)
|| (s32)gUnknown_203B26C->unk20 >= 4) {
gUnknown_203B26C->unk68[0] = 1;
}
if (!IsAnyMoveLinked(gGulpinShopWork->unk1E, gGulpinShopWork->moves) || (s32)gGulpinShopWork->unk20 >= 4)
gGulpinShopWork->unk68[0] = 1;
which++;
gUnknown_203B26C->unk28[which].text = *gUnknown_80D4970; // "Info"
gUnknown_203B26C->unk28[which].menuAction = 3;
gGulpinShopWork->unk28[which].text = *gUnknown_80D4970; // "Info"
gGulpinShopWork->unk28[which].menuAction = 3;
which++;
gUnknown_203B26C->unk28[which].text = NULL;
gUnknown_203B26C->unk28[which].menuAction = 1;
gGulpinShopWork->unk28[which].text = NULL;
gGulpinShopWork->unk28[which].menuAction = 1;
i = 0;
if (i < which) {
if (gUnknown_203B26C->unk68[0] == 0) {
gUnknown_203B26C->unk24 = gUnknown_203B26C->unk28[0].menuAction;
}
if (gGulpinShopWork->unk68[0] == 0)
gGulpinShopWork->unk24 = gGulpinShopWork->unk28[0].menuAction;
else {
while (i < which) {
if (gUnknown_203B26C->unk68[i] == 0) {
gUnknown_203B26C->unk24 = gUnknown_203B26C->unk28[i].menuAction;
if (gGulpinShopWork->unk68[i] == 0) {
gGulpinShopWork->unk24 = gGulpinShopWork->unk28[i].menuAction;
break;
}
i++;
}
}
}
}
}
void sub_801EC7C(void) {
void sub_801EC7C(void)
{
s32 which;
which = 0;
MemoryFill16(&gUnknown_203B26C->unk68[0], 0, sizeof(gUnknown_203B26C->unk68));
gUnknown_203B26C->unk28[which].text = *gUnknown_80D4920; // "Yes"
gUnknown_203B26C->unk28[which].menuAction = 4;
MemoryFill16(gGulpinShopWork->unk68, 0, sizeof(gGulpinShopWork->unk68));
gGulpinShopWork->unk28[which].text = *gUnknown_80D4920; // "Yes"
gGulpinShopWork->unk28[which].menuAction = 4;
which++;
gUnknown_203B26C->unk28[which].text = *gUnknown_80D4928; // "No"
gUnknown_203B26C->unk28[which].menuAction = 5;
gGulpinShopWork->unk28[which].text = *gUnknown_80D4928; // "No"
gGulpinShopWork->unk28[which].menuAction = 5;
which++;
gUnknown_203B26C->unk28[which].text = NULL;
gUnknown_203B26C->unk28[which].menuAction = 1;
gGulpinShopWork->unk28[which].text = NULL;
gGulpinShopWork->unk28[which].menuAction = 1;
}
void sub_801ECBC(void)
@@ -256,26 +251,26 @@ void sub_801ECBC(void)
case 3:
{
struct Move* move;
gUnknown_203B26C->unk20 = sub_801F194();
move = gUnknown_203B26C->moves;
move = &move[gUnknown_203B26C->unk20];
gUnknown_203B26C->unk1E = move->id;
UpdateGulpinShopState(2);
gGulpinShopWork->unk20 = sub_801F194();
move = gGulpinShopWork->moves;
move = &move[gGulpinShopWork->unk20];
gGulpinShopWork->unk1E = move->id;
SetGulpinShopState(2);
break;
}
case 4:
{
struct Move* move;
gUnknown_203B26C->unk20 = sub_801F194();
move = gUnknown_203B26C->moves;
move = &move[gUnknown_203B26C->unk20];
gUnknown_203B26C->unk1E = move->id;
UpdateGulpinShopState(3);
gGulpinShopWork->unk20 = sub_801F194();
move = gGulpinShopWork->moves;
move = &move[gGulpinShopWork->unk20];
gGulpinShopWork->unk1E = move->id;
SetGulpinShopState(3);
break;
}
case 2:
sub_801F214();
UpdateGulpinShopState(6);
SetGulpinShopState(6);
break;
}
}
@@ -286,21 +281,21 @@ void sub_801ED28(void)
menuAction = 0;
sub_801EF38(0);
if (sub_8012FD8(&gUnknown_203B26C->unk78) == 0)
sub_8013114(&gUnknown_203B26C->unk78, &menuAction);
if (sub_8012FD8(&gGulpinShopWork->unk78) == 0)
sub_8013114(&gGulpinShopWork->unk78, &menuAction);
switch(menuAction) {
switch (menuAction) {
case 1:
case 5:
UpdateGulpinShopState(1);
SetGulpinShopState(1);
break;
case 2:
PlaySound(0x133);
gUnknown_203B26C->isNextMoveLinked = IsNextMoveLinked(gUnknown_203B26C->unk20, gUnknown_203B26C->moves);
UpdateGulpinShopState(4);
gGulpinShopWork->isNextMoveLinked = IsNextMoveLinked(gGulpinShopWork->unk20, gGulpinShopWork->moves);
SetGulpinShopState(4);
break;
case 3:
UpdateGulpinShopState(3);
SetGulpinShopState(3);
break;
}
}
@@ -311,7 +306,7 @@ void sub_801EDA4(void)
case 2:
case 3:
sub_801F8D0();
UpdateGulpinShopState(1);
SetGulpinShopState(1);
break;
case 0:
case 1:
@@ -322,17 +317,17 @@ void sub_801EDA4(void)
void sub_801EDC0(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0) {
switch (temp)
{
switch (temp) {
case 4:
sub_801F214();
RemoveLinkSequenceFromMoves8(gUnknown_203B26C->moves, gUnknown_203B26C->unk20);
gUnknown_203B26C->state = 5;
RemoveLinkSequenceFromMoves8(gGulpinShopWork->moves, gGulpinShopWork->unk20);
gGulpinShopWork->state = 5;
break;
case 1:
case 5:
UpdateGulpinShopState(1);
SetGulpinShopState(1);
break;
}
}

View File

@@ -220,7 +220,7 @@ gUnknown_203B264: /* 203B264 */
gUnknown_203B268: /* 203B268 */
.space 0x4
gUnknown_203B26C: /* 203B26C */
gGulpinShopWork: /* 203B26C */
.space 0x4
gUnknown_203B270: /* 203B270 */