split out and decomp most of wigglytuff shop

This commit is contained in:
Seth Barberee
2023-07-23 20:37:52 -07:00
parent 07230ba68e
commit f9788fdc07
5 changed files with 1407 additions and 2174 deletions

File diff suppressed because it is too large Load Diff

664
asm/code_8023144.s Normal file
View File

@@ -0,0 +1,664 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80227B8
sub_80227B8:
push {r4,r5,lr}
adds r5, r0, 0
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r4, _08022810
movs r0, 0xD4
lsls r0, 1
movs r1, 0x8
bl MemoryAlloc
str r0, [r4]
adds r2, r0, 0
adds r2, 0xF4
movs r1, 0
str r1, [r2]
str r5, [r0, 0x48]
cmp r5, 0
beq _08022820
ldr r4, _08022814
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x7
bl PrintColoredPokeNameToBuffer
adds r4, 0x50
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x6
bl PrintColoredPokeNameToBuffer
bl HasGummiItem
lsls r0, 24
cmp r0, 0
beq _08022818
movs r0, 0
bl sub_8022924
b _08022856
.align 2, 0
_08022810: .4byte gUnknown_203B294
_08022814: .4byte gAvailablePokemonNames
_08022818:
movs r0, 0x11
bl sub_8022924
b _08022856
_08022820:
ldr r4, _08022848
ldr r5, _0802284C
adds r0, r4, 0
adds r1, r5, 0
bl strcpy
adds r4, 0x50
adds r0, r4, 0
adds r1, r5, 0
bl strcpy
bl GetNumberOfFilledInventorySlots
cmp r0, 0
bne _08022850
movs r0, 0x12
bl sub_8022924
b _08022856
.align 2, 0
_08022848: .4byte gAvailablePokemonNames
_0802284C: .4byte gUnknown_80DC5EC
_08022850:
movs r0, 0
bl sub_8022924
_08022856:
movs r0, 0x1
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_80227B8
thumb_func_start sub_8022860
sub_8022860:
push {lr}
ldr r0, _08022878
ldr r0, [r0]
ldr r0, [r0]
cmp r0, 0x16
bhi _080228FE
lsls r0, 2
ldr r1, _0802287C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022878: .4byte gUnknown_203B294
_0802287C: .4byte _08022880
.align 2, 0
_08022880:
.4byte _080228DC
.4byte _080228DC
.4byte _080228E2
.4byte _080228E8
.4byte _080228EE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228FE
.4byte _080228F4
.4byte _080228FA
_080228DC:
bl sub_8022E78
b _08022902
_080228E2:
bl sub_8022EF4
b _08022902
_080228E8:
bl sub_8023068
b _08022902
_080228EE:
bl sub_80230E8
b _08022902
_080228F4:
bl sub_8023104
b _08022902
_080228FA:
movs r0, 0x3
b _08022904
_080228FE:
bl sub_8023120
_08022902:
movs r0, 0
_08022904:
pop {r1}
bx r1
thumb_func_end sub_8022860
thumb_func_start sub_8022908
sub_8022908:
push {r4,lr}
ldr r4, _08022920
ldr r0, [r4]
cmp r0, 0
beq _0802291A
bl MemoryFree
movs r0, 0
str r0, [r4]
_0802291A:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08022920: .4byte gUnknown_203B294
thumb_func_end sub_8022908
thumb_func_start sub_8022924
sub_8022924:
push {lr}
ldr r1, _08022938
ldr r1, [r1]
str r0, [r1]
bl sub_802293C
bl sub_8022A10
pop {r0}
bx r0
.align 2, 0
_08022938: .4byte gUnknown_203B294
thumb_func_end sub_8022924
thumb_func_start sub_802293C
sub_802293C:
push {r4-r7,lr}
mov r7, r8
push {r7}
ldr r4, _08022964
ldr r0, [r4]
movs r1, 0xA4
lsls r1, 1
adds r0, r1
bl sub_8006518
ldr r1, [r4]
ldr r0, [r1]
cmp r0, 0x3
beq _080229A4
cmp r0, 0x3
bgt _08022968
cmp r0, 0x2
beq _08022972
b _080229BC
.align 2, 0
_08022964: .4byte gUnknown_203B294
_08022968:
cmp r0, 0x10
bgt _080229BC
cmp r0, 0xA
blt _080229BC
b _080229E6
_08022972:
bl sub_8022D2C
ldr r2, [r4]
movs r0, 0xBC
lsls r0, 1
adds r2, r0
ldr r1, _080229A0
ldm r1!, {r3,r5,r6}
stm r2!, {r3,r5,r6}
ldm r1!, {r3,r5,r7}
stm r2!, {r3,r5,r7}
ldr r1, [r4]
adds r0, r1, r0
adds r1, 0xF8
bl sub_8012CAC
ldr r0, [r4]
movs r6, 0xC2
lsls r6, 1
adds r0, r6
movs r1, 0x6
strh r1, [r0]
b _080229E6
.align 2, 0
_080229A0: .4byte gUnknown_80DC5BC
_080229A4:
movs r7, 0xB0
lsls r7, 1
adds r1, r7
ldr r0, _080229B8
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
b _080229E6
.align 2, 0
_080229B8: .4byte gUnknown_80DC5D4
_080229BC:
ldr r0, _08022A08
mov r12, r0
movs r1, 0xA4
lsls r1, 1
mov r8, r1
ldr r4, _08022A0C
movs r3, 0
movs r2, 0x3
_080229CC:
mov r5, r12
ldr r1, [r5]
adds r1, r3
add r1, r8
adds r0, r4, 0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
adds r3, 0x18
subs r2, 0x1
cmp r2, 0
bge _080229CC
_080229E6:
bl ResetUnusedInputStruct
ldr r0, _08022A08
ldr r0, [r0]
movs r6, 0xA4
lsls r6, 1
adds r0, r6
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08022A08: .4byte gUnknown_203B294
_08022A0C: .4byte gUnknown_80DC5A4
thumb_func_end sub_802293C
thumb_func_start sub_8022A10
sub_8022A10:
push {r4-r7,lr}
sub sp, 0x8
ldr r1, _08022A2C
ldr r0, [r1]
ldr r0, [r0]
adds r4, r1, 0
cmp r0, 0x16
bls _08022A22
b _08022D1E
_08022A22:
lsls r0, 2
ldr r1, _08022A30
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022A2C: .4byte gUnknown_203B294
_08022A30: .4byte _08022A34
.align 2, 0
_08022A34:
.4byte _08022A90
.4byte _08022AAA
.4byte _08022AB2
.4byte _08022AE0
.4byte _08022B10
.4byte _08022B1A
.4byte _08022B24
.4byte _08022B34
.4byte _08022B44
.4byte _08022B54
.4byte _08022B64
.4byte _08022C28
.4byte _08022CA0
.4byte _08022CA8
.4byte _08022CB0
.4byte _08022CB8
.4byte _08022CC0
.4byte _08022CC8
.4byte _08022CD8
.4byte _08022CE8
.4byte _08022CF8
.4byte _08022D14
.4byte _08022D1E
_08022A90:
ldr r0, [r4]
ldr r0, [r0, 0x48]
cmp r0, 0
beq _08022A9C
movs r0, 0x5
b _08022A9E
_08022A9C:
movs r0, 0x1
_08022A9E:
movs r1, 0x3
movs r2, 0
movs r3, 0xA
bl sub_801A5D8
b _08022D22
_08022AAA:
movs r0, 0x1
bl sub_801A8D0
b _08022D22
_08022AB2:
bl sub_801A9E0
ldr r0, _08022ADC
ldr r2, [r0]
adds r0, r2, 0
adds r0, 0x54
adds r1, r2, 0
adds r1, 0xF8
movs r4, 0x9C
lsls r4, 1
adds r3, r2, r4
adds r2, 0xF4
ldr r2, [r2]
str r2, [sp]
movs r2, 0x2
str r2, [sp, 0x4]
movs r2, 0
bl sub_8012D60
b _08022D22
.align 2, 0
_08022ADC: .4byte gUnknown_203B294
_08022AE0:
bl sub_801A9E0
ldr r4, _08022B08
ldr r0, [r4]
adds r0, 0x54
movs r1, 0
bl sub_8012EA4
ldr r0, [r4]
adds r0, 0xA4
ldr r1, _08022B0C
movs r2, 0x3
str r2, [sp]
movs r2, 0x1
str r2, [sp, 0x4]
movs r2, 0
movs r3, 0
bl sub_8012D60
b _08022D22
.align 2, 0
_08022B08: .4byte gUnknown_203B294
_08022B0C: .4byte gUnknown_80DC584
_08022B10:
ldr r0, [r4]
adds r0, 0x50
bl sub_801B3C0
b _08022D22
_08022B1A:
ldr r0, _08022B20
b _08022D00
.align 2, 0
_08022B20: .4byte gUnknown_80DC5F4
_08022B24:
ldr r0, _08022B2C
ldr r3, _08022B30
b _08022D02
.align 2, 0
_08022B2C: .4byte gUnknown_80DC618
_08022B30: .4byte 0x00000101
_08022B34:
ldr r0, _08022B3C
ldr r3, _08022B40
b _08022D02
.align 2, 0
_08022B3C: .4byte gUnknown_80DC674
_08022B40: .4byte 0x00000101
_08022B44:
ldr r0, _08022B4C
ldr r3, _08022B50
b _08022D02
.align 2, 0
_08022B4C: .4byte gUnknown_80DC6CC
_08022B50: .4byte 0x00000101
_08022B54:
ldr r0, _08022B5C
ldr r3, _08022B60
b _08022D02
.align 2, 0
_08022B5C: .4byte gUnknown_80DC728
_08022B60: .4byte 0x00000101
_08022B64:
ldr r7, _08022B68
b _08022B78
.align 2, 0
_08022B68: .4byte gUnknown_203B294
_08022B6C:
ldr r1, [r4]
ldr r0, [r1, 0x40]
adds r0, 0x1
str r0, [r1, 0x40]
cmp r0, 0x17
bgt _08022C10
_08022B78:
movs r5, 0
movs r6, 0
movs r3, 0
ldr r2, [r4]
ldr r0, [r2, 0x38]
cmp r5, r0
bge _08022BA4
ldrb r1, [r2, 0x8]
b _08022B9C
_08022B8A:
adds r3, 0x1
ldr r2, [r4]
ldr r0, [r2, 0x38]
cmp r3, r0
bge _08022BA4
adds r0, r2, 0
adds r0, 0x8
adds r0, r3
ldrb r1, [r0]
_08022B9C:
ldr r0, [r2, 0x40]
cmp r1, r0
bne _08022B8A
movs r5, 0x1
_08022BA4:
movs r3, 0
ldr r2, [r4]
ldr r0, [r2, 0x3C]
cmp r3, r0
bge _08022BCE
adds r0, r2, 0
adds r0, 0x20
b _08022BC4
_08022BB4:
adds r3, 0x1
ldr r2, [r4]
ldr r0, [r2, 0x3C]
cmp r3, r0
bge _08022BCE
adds r0, r2, 0
adds r0, 0x20
adds r0, r3
_08022BC4:
ldrb r1, [r0]
ldr r0, [r2, 0x40]
cmp r1, r0
bne _08022BB4
movs r6, 0x1
_08022BCE:
cmp r5, r6
beq _08022B6C
ldr r1, [r7]
movs r0, 0xA
str r0, [r1, 0x4]
ldr r0, [r1, 0x40]
lsls r0, 24
lsrs r0, 24
bl GetIQSkillName
adds r1, r0, 0
ldr r0, _08022C18
bl strcpy
movs r0, 0xCB
bl PlaySound
ldr r0, _08022C1C
movs r1, 0
movs r2, 0
ldr r3, _08022C20
bl sub_80141B4
ldr r1, [r7]
ldr r0, [r1, 0x40]
adds r0, 0x1
str r0, [r1, 0x40]
ldr r0, _08022C24
ldr r0, [r0]
ldr r0, [r0, 0x40]
cmp r0, 0x17
bgt _08022C10
b _08022D22
_08022C10:
movs r0, 0xB
bl sub_8022924
b _08022D22
.align 2, 0
_08022C18: .4byte gUnknown_202DEA8
_08022C1C: .4byte gUnknown_80DC788
_08022C20: .4byte 0x00000101
_08022C24: .4byte gUnknown_203B294
_08022C28:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
bl nullsub_104
ldr r0, [r4]
adds r0, 0x46
ldrh r0, [r0]
cmp r0, 0x8
bhi _08022C98
lsls r0, 2
ldr r1, _08022C48
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022C48: .4byte _08022C4C
.align 2, 0
_08022C4C:
.4byte _08022C70
.4byte _08022C78
.4byte _08022C80
.4byte _08022C98
.4byte _08022C88
.4byte _08022C98
.4byte _08022C98
.4byte _08022C98
.4byte _08022C90
_08022C70:
movs r0, 0x16
bl sub_8022924
b _08022D22
_08022C78:
movs r0, 0xD
bl sub_8022924
b _08022D22
_08022C80:
movs r0, 0xE
bl sub_8022924
b _08022D22
_08022C88:
movs r0, 0xF
bl sub_8022924
b _08022D22
_08022C90:
movs r0, 0x10
bl sub_8022924
b _08022D22
_08022C98:
movs r0, 0xC
bl sub_8022924
b _08022D22
_08022CA0:
ldr r0, _08022CA4
b _08022D00
.align 2, 0
_08022CA4: .4byte gUnknown_80DC7B4
_08022CA8:
ldr r0, _08022CAC
b _08022D00
.align 2, 0
_08022CAC: .4byte gUnknown_80DC7FC
_08022CB0:
ldr r0, _08022CB4
b _08022D00
.align 2, 0
_08022CB4: .4byte gUnknown_80DC81C
_08022CB8:
ldr r0, _08022CBC
b _08022D00
.align 2, 0
_08022CBC: .4byte gUnknown_80DC844
_08022CC0:
ldr r0, _08022CC4
b _08022D00
.align 2, 0
_08022CC4: .4byte gUnknown_80DC864
_08022CC8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CD4
b _08022D00
.align 2, 0
_08022CD4: .4byte gUnknown_80DC88C
_08022CD8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CE4
b _08022D00
.align 2, 0
_08022CE4: .4byte gUnknown_80DC8AC
_08022CE8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022CF4
b _08022D00
.align 2, 0
_08022CF4: .4byte gUnknown_80DC8C8
_08022CF8:
ldr r1, [r4]
movs r0, 0x16
str r0, [r1, 0x4]
ldr r0, _08022D0C
_08022D00:
ldr r3, _08022D10
_08022D02:
movs r1, 0
movs r2, 0
bl sub_80141B4
b _08022D22
.align 2, 0
_08022D0C: .4byte gUnknown_80DC8DC
_08022D10: .4byte 0x00000301
_08022D14:
ldr r0, [r4]
ldr r0, [r0, 0x4C]
bl sub_801AFA4
b _08022D22
_08022D1E:
bl sub_801A928
_08022D22:
add sp, 0x8
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8022A10
.align 2,0

112
asm/wigglytuff_shop.s Normal file
View File

@@ -0,0 +1,112 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_80226F0
sub_80226F0:
push {r4,lr}
sub sp, 0x4
mov r1, sp
movs r2, 0
movs r0, 0x80
strb r0, [r1]
strb r0, [r1, 0x1]
movs r0, 0x10
strb r0, [r1, 0x2]
strb r2, [r1, 0x3]
bl sub_8099B94
lsls r0, 24
cmp r0, 0
bne _08022782
ldr r0, _08022728
ldr r0, [r0]
movs r1, 0x98
lsls r1, 1
adds r0, r1
ldr r0, [r0]
cmp r0, 0x4
bhi _0802275C
lsls r0, 2
ldr r1, _0802272C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08022728: .4byte gUnknown_203B290
_0802272C: .4byte _08022730
.align 2, 0
_08022730:
.4byte _0802275C
.4byte _08022744
.4byte _08022750
.4byte _08022744
.4byte _08022750
_08022744:
movs r0, 0x5
movs r1, 0x2
ldr r2, [sp]
bl sub_8099AFC
b _08022772
_08022750:
movs r0, 0x5
movs r1, 0x2
ldr r2, [sp]
bl sub_8099A5C
b _08022772
_0802275C:
ldr r4, _0802278C
ldr r0, [r4]
ldr r0, [r0, 0x8]
bl UpdateWigglytuffState
ldr r0, [r4]
movs r1, 0x98
lsls r1, 1
adds r0, r1
movs r1, 0
str r1, [r0]
_08022772:
ldr r0, _0802278C
ldr r1, [r0]
movs r0, 0x98
lsls r0, 1
adds r1, r0
ldr r0, [r1]
adds r0, 0x1
str r0, [r1]
_08022782:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0802278C: .4byte gUnknown_203B290
thumb_func_end sub_80226F0
thumb_func_start sub_8022790
sub_8022790:
push {lr}
ldr r0, _080227A8
ldr r2, [r0]
movs r0, 0x9A
lsls r0, 1
adds r1, r2, r0
ldr r0, [r1]
cmp r0, 0
beq _080227AC
subs r0, 0x1
str r0, [r1]
b _080227B2
.align 2, 0
_080227A8: .4byte gUnknown_203B290
_080227AC:
ldr r0, [r2, 0x8]
bl UpdateWigglytuffState
_080227B2:
pop {r0}
bx r0
thumb_func_end sub_8022790
.align 2,0

View File

@@ -118,6 +118,9 @@ SECTIONS {
asm/code_801EE10.o(.text);
src/code_801EE10_mid.o(.text);
asm/code_801EE10_mid.o(.text);
src/wigglytuff_shop.o(.text);
asm/wigglytuff_shop.o(.text);
asm/code_8023144.o(.text);
src/code_8023144.o(.text);
asm/code_801EE10_1.o(.text);
src/code_801EE10_1.o(.text);

628
src/wigglytuff_shop.c Normal file
View File

@@ -0,0 +1,628 @@
#include "global.h"
#include "constants/friend_area.h"
#include "file_system.h"
#include "menu.h"
#include "pokemon.h"
#include "input.h"
#include "team_inventory.h"
#include "text.h"
#include "memory.h"
#include "menu_input.h"
#include "friend_area.h"
struct unkStruct_8092638
{
u32 unk0;
u8 unk4;
u32 unk5;
};
extern u8 gUnknown_202E628[];
extern u32 gUnknown_202DE30[2];
extern u8 gUnknown_202E5D8[];
extern u8 gUnknown_202E1C8[];
extern u8 gAvailablePokemonNames[];
extern u8 *gWigglytuffDialogue[2][20];
extern u8 *gWigglytuffCheck[];
extern u8 *gUnknown_80D4920[];
extern u8 *gUnknown_80D4928[];
extern u8 *gUnknown_80D4934[];
extern u8 *gUnknown_80D4970[];
extern u8 *gUnknown_80D4978[];
extern struct UnkTextStruct2 gUnknown_80DC534;
extern struct UnkTextStruct2 gUnknown_80DC564;
extern struct UnkTextStruct2 gUnknown_80DC54C;
extern struct UnkTextStruct2 gUnknown_80DC534;
s32 sub_80144A4(s32 *);
u8 sub_8021700(u32);
void sub_8092578(u8 *buffer, u8 index, u8 r2);
void sub_80222C8(void);
extern void sub_8014248(const char *r0, u32, u32, const struct MenuItem *r4, u16 *, u32, u32,u8 *r5, u32);
extern void sub_80141B4(const u8 *, u32, u8*, u32);
extern void DrawTeamMoneyBox(u32);
extern void sub_80211AC(u32, u32);
extern void sub_8021354(u32);
extern void sub_8021494();
extern void sub_803AA34();
extern void sub_8021774(u8,u32, u32);
extern void sub_809249C(u8, u32);
extern void sub_8021830(void);
extern u32 sub_80217EC(void);
extern u8 sub_803ABC8(void);
extern u32 sub_8021274(u32);
extern u8 sub_802132C(void);
extern void sub_80213A0(void);
extern void sub_8022380(void);
extern void PlaySound(u32);
bool8 sub_8023144(s32 param_1, s32 index, struct UnkTextStruct2_sub *sub, u32 param_4);
void sub_8023354(u8 param_1);
extern bool8 sub_80023E4(u32);
extern void sub_8022420(void);
extern void sub_8092638(u8,struct unkStruct_8092638 *, u32, u32);
extern u32 sub_8023278(u32);
void sub_80233A0(void);
s16 sub_802331C(void);
extern void sub_8022460(void);
extern void sub_8022538(void);
extern void sub_80225C8(void);
extern void sub_80224D4(void);
extern void sub_80226F0(void);
extern void sub_8022790(void);
extern void sub_8022668(void);
extern void sub_8022684(void);
extern void sub_80226CC(void);
void UpdateWigglytuffState(s32);
void sub_8021D5C(void);
void UpdateWigglytuffDialogue(void);
struct unkStruct_203B290
{
// size: 0x138
bool32 isAsleep;
s32 state;
s32 fallbackState;
s32 friendAreaPrice;
u8 chosenFriendArea;
s16 chosenSpecies;
u32 menuAction1;
u32 menuAction2;
struct MenuItem unk1C[8];
u16 unk5C[0x8];
struct MenuStruct unk6C;
/* 0xBC */ struct OpenedFile *faceFile;
/* 0xC0 */ u8 *faceData;
u16 unkC4;
u16 unkC6;
u8 unkC8;
u8 unkC9;
u8 unkCA;
u8 fillCB;
u8 *unkCC;
struct UnkTextStruct2 unkD0[4];
u32 unk130;
u32 unk134;
};
extern struct unkStruct_203B290 *gUnknown_203B290;
bool8 CreateWigglytuffShop(bool32 isAsleep)
{
char *string;
struct OpenedFile *file;
ResetUnusedInputStruct();
sub_800641C(0, 1, 1);
gUnknown_203B290 = MemoryAlloc(sizeof(struct unkStruct_203B290), 8);
gUnknown_203B290->menuAction1 = 0;
gUnknown_203B290->menuAction2 = 0;
gUnknown_203B290->isAsleep = isAsleep;
CopyYellowMonsterNametoBuffer(gUnknown_202E5D8,MONSTER_WIGGLYTUFF);
CopyYellowMonsterNametoBuffer(gUnknown_202E1C8,MONSTER_WIGGLYTUFF);
string = GetMonSpecies(MONSTER_WIGGLYTUFF);
strcpy(gUnknown_202E1C8 - 0x50, string);
if (gUnknown_203B290->isAsleep == TRUE) {
gUnknown_203B290->unkCC = NULL;
}
else {
gUnknown_203B290->unkCC = (u8 *)&gUnknown_203B290->faceFile;
}
file = GetDialogueSpriteDataPtr(MONSTER_WIGGLYTUFF);
gUnknown_203B290->faceFile = file;
gUnknown_203B290->faceData = file->data;
gUnknown_203B290->unkC8 = 0;
gUnknown_203B290->unkC9 = 0;
gUnknown_203B290->unkCA = 0;
gUnknown_203B290->unkC4 = 2;
gUnknown_203B290->unkC6 = 8;
UpdateWigglytuffState(0);
return TRUE;
}
u32 sub_8021C5C(void)
{
switch(gUnknown_203B290->state)
{
case 0:
case 1:
sub_8022460();
break;
case 9:
case 10:
sub_8022538();
break;
case 0xb:
sub_80225C8();
break;
case 0x11:
sub_80224D4();
break;
case 0xd:
sub_80226F0();
break;
case 0xe:
sub_8022790();
break;
case 0x10:
sub_8022668();
break;
case 0x16:
case 0x17:
sub_8022684();
break;
case 4:
return 3;
default:
sub_80226CC();
break;
}
return 0;
}
void sub_8021D1C(void)
{
if(gUnknown_203B290)
{
CloseFile(gUnknown_203B290->faceFile);
MemoryFree(gUnknown_203B290);
gUnknown_203B290 = NULL;
}
}
void UpdateWigglytuffState(s32 newState)
{
gUnknown_203B290->state = newState;
sub_8021D5C();
UpdateWigglytuffDialogue();
}
void sub_8021D5C(void)
{
s32 index;
sub_8006518(gUnknown_203B290->unkD0);
switch(gUnknown_203B290->state)
{
case 0x9:
case 0xA:
gUnknown_203B290->unkD0[0] = gUnknown_80DC534;
gUnknown_203B290->unkD0[2] = gUnknown_80DC534;
gUnknown_203B290->unkD0[1] = gUnknown_80DC564;
break;
case 0xB:
gUnknown_203B290->unkD0[2] = gUnknown_80DC54C;
break;
break;
default:
for(index = 0; index < 4; index++)
{
gUnknown_203B290->unkD0[index] = gUnknown_80DC534;
}
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B290->unkD0, 1, 1);
}
void UpdateWigglytuffDialogue(void)
{
char *string;
struct unkStruct_8092638 uStack_14;
switch(gUnknown_203B290->state)
{
case 0:
sub_80222C8();
sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][0],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc);
break;
case 1:
sub_80222C8();
sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][1],0,gUnknown_203B290->menuAction1,gUnknown_203B290->unk1C,gUnknown_203B290->unk5C,4,0,gUnknown_203B290->unkCC,0xc);
break;
case 7:
gUnknown_203B290->fallbackState = 9;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][3],0,gUnknown_203B290->unkCC,0x10d);
break;
case 8:
gUnknown_203B290->fallbackState = 10;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][4],0,gUnknown_203B290->unkCC,0x10d);
break;
case 2:
gUnknown_203B290->fallbackState = 1;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][19],0,gUnknown_203B290->unkCC,0x10d);
break;
case 3:
gUnknown_203B290->fallbackState = 4;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][2],0,gUnknown_203B290->unkCC,0x30d);
break;
default:
break;
case 5:
gUnknown_203B290->fallbackState = 3;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][8],0,gUnknown_203B290->unkCC,0x10d);
break;
case 6:
gUnknown_203B290->fallbackState = 10;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][9],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x12:
gUnknown_203B290->fallbackState = 3;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][10],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x13:
gUnknown_203B290->fallbackState = 10;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][11],0,gUnknown_203B290->unkCC,0x10d);
break;
case 9:
sub_80211AC(2,3);
DrawTeamMoneyBox(1);
break;
case 10:
sub_8021354(1);
DrawTeamMoneyBox(1);
break;
case 0xb:
sub_8021494();
DrawTeamMoneyBox(1);
sub_8022380();
sub_8012D60(&gUnknown_203B290->unk6C,gUnknown_203B290->unk1C,0,gUnknown_203B290->unk5C, gUnknown_203B290->menuAction2,2);
break;
case 0x11:
sub_8022420();
sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0);
gUnknown_202DE30[0] = gUnknown_203B290->friendAreaPrice;
sub_8014248(gWigglytuffDialogue[gUnknown_203B290->isAsleep][5],0,5,gUnknown_203B290->unk1C,0,4,0,gUnknown_203B290->unkCC,0xc);
break;
case 0x10:
sub_8021774(gUnknown_203B290->chosenFriendArea,0,2);
break;
case 0xc:
gUnknown_203B290->fallbackState = 0xd;
sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0);
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][6],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0xd:
gUnknown_203B290->fallbackState = 0xe;
PlaySound(0x25b);
gUnknown_203B290->unk130 = 1;
break;
case 0xe:
gUnknown_203B290->fallbackState = 0xf;
gUnknown_203B290->unk134 = 0x1e;
break;
case 0xf:
if (sub_8021700(2) != 0) {
sub_80213A0();
gUnknown_203B290->fallbackState = 0x12;
}
else {
gUnknown_203B290->fallbackState = 8;
}
PlaySound(0xce);
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][7],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x14:
gUnknown_203B290->fallbackState = 0x16;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][12],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x15:
gUnknown_203B290->fallbackState = 0x17;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][13],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x16:
sub_8023144(0,3,0,10);
break;
case 0x17:
sub_8023354(1);
break;
case 0x18:
sub_8092638(gUnknown_203B290->chosenFriendArea,&uStack_14,0,0);
if (uStack_14.unk4 != 0) {
gUnknown_203B290->fallbackState = 0x19;
}
else
{
switch(GetFriendAreaUnlockCondition(gUnknown_203B290->chosenFriendArea))
{
case UNLOCK_SHOP_POST_GAME:
if (sub_80023E4(6) != 0) {
gUnknown_203B290->fallbackState = 0x15;
}
else {
gUnknown_203B290->fallbackState = 0x1a;
}
break;
case UNLOCK_WONDER_MAIL:
gUnknown_203B290->fallbackState = 0x1b;
break;
case UNLOCK_LEGENDARY_REQUEST:
gUnknown_203B290->fallbackState = 0x1c;
break;
default:
gUnknown_203B290->fallbackState = 0x15;
break;
}
}
string = GetMonSpecies(gUnknown_203B290->chosenSpecies);
strcpy(gAvailablePokemonNames,string);
sub_8092578(gUnknown_202E628,gUnknown_203B290->chosenFriendArea,0);
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][14],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x19:
gUnknown_203B290->fallbackState = 0x15;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][15],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x1a:
gUnknown_203B290->fallbackState = 0x15;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][16],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x1b:
gUnknown_203B290->fallbackState = 0x15;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][17],0,gUnknown_203B290->unkCC,0x10d);
break;
case 0x1c:
gUnknown_203B290->fallbackState = 0x15;
sub_80141B4(gWigglytuffDialogue[gUnknown_203B290->isAsleep][18],0,gUnknown_203B290->unkCC,0x10d);
break;
}
}
void sub_80222C8(void)
{
s32 i;
s32 index = 0;
MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C));
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978;
gUnknown_203B290->unk1C[index].menuAction = 2;
index++;
gUnknown_203B290->unk1C[index].text = *gWigglytuffCheck;
gUnknown_203B290->unk1C[index].menuAction = 3;
index++;
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970;
gUnknown_203B290->unk1C[index].menuAction = 4;
index++;
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4934;
gUnknown_203B290->unk1C[index].menuAction = 1;
index++;
gUnknown_203B290->unk1C[index].text = NULL;
gUnknown_203B290->unk1C[index].menuAction = 1;
for(i = 0; i < index; i++)
{
if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction1)
return;
}
for(i = 0; i < index; i++)
{
if(gUnknown_203B290->unk5C[i] == 0)
{
gUnknown_203B290->menuAction1 = gUnknown_203B290->unk1C[i].menuAction;
break;
}
}
}
void sub_8022380(void)
{
s32 i;
s32 index = 0;
MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C));
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4978;
gUnknown_203B290->unk1C[index].menuAction = 2;
index++;
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4970;
gUnknown_203B290->unk1C[index].menuAction = 4;
index++;
gUnknown_203B290->unk1C[index].text = NULL;
gUnknown_203B290->unk1C[index].menuAction = 1;
for(i = 0; i < index; i++)
{
if(gUnknown_203B290->unk5C[i] == 0 && gUnknown_203B290->unk1C[i].menuAction == gUnknown_203B290->menuAction2)
return;
}
for(i = 0; i < index; i++)
{
if(gUnknown_203B290->unk5C[i] == 0)
{
gUnknown_203B290->menuAction2 = gUnknown_203B290->unk1C[i].menuAction;
break;
}
}
}
void sub_8022420(void)
{
s32 index = 0;
MemoryFill16(gUnknown_203B290->unk5C, 0, sizeof(gUnknown_203B290->unk5C));
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4920;
gUnknown_203B290->unk1C[index].menuAction = 5;
index++;
gUnknown_203B290->unk1C[index].text = *gUnknown_80D4928;
gUnknown_203B290->unk1C[index].menuAction = 6;
index++;
gUnknown_203B290->unk1C[index].text = NULL;
gUnknown_203B290->unk1C[index].menuAction = 1;
}
void sub_8022460(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0)
{
if (menuAction != 1) {
gUnknown_203B290->menuAction1 = menuAction;
}
switch(menuAction)
{
case 2:
if (sub_8021700(2) != 0) {
UpdateWigglytuffState(5);
}
else {
UpdateWigglytuffState(7);
}
break;
case 3:
UpdateWigglytuffState(0x14);
break;
case 4:
UpdateWigglytuffState(2);
break;
case 1:
UpdateWigglytuffState(3);
break;
}
}
}
void sub_80224D4(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) == 0) {
switch(menuAction)
{
case 5:
gTeamInventory_203B460->teamMoney -= gUnknown_203B290->friendAreaPrice;
UnlockFriendArea(gUnknown_203B290->chosenFriendArea);
PlaySound(0x14C);
UpdateWigglytuffState(0xC);
break;
case 1:
case 6:
UpdateWigglytuffState(0xA);
break;
}
}
}
void sub_8022538(void)
{
switch(sub_8021274(1))
{
case 3:
gUnknown_203B290->chosenFriendArea = sub_802132C();
gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea);
UpdateWigglytuffState(0xB);
break;
case 4:
gUnknown_203B290->chosenFriendArea = sub_802132C();
gUnknown_203B290->friendAreaPrice = GetFriendAreaPrice(gUnknown_203B290->chosenFriendArea);
UpdateWigglytuffState(0x10);
break;
case 0:
break;
case 2:
sub_80213A0();
UpdateWigglytuffState(1);
break;
case 1:
default:
DrawTeamMoneyBox(1);
break;
}
}
void sub_80225C8(void)
{
s32 menuAction = 0;
sub_8021274(0);
if(sub_8012FD8(&gUnknown_203B290->unk6C) == 0)
{
sub_8013114(&gUnknown_203B290->unk6C, &menuAction);
if(menuAction != 1) gUnknown_203B290->menuAction2 = menuAction;
}
switch(menuAction)
{
case 2:
if(gTeamInventory_203B460->teamMoney == 0)
{
UpdateWigglytuffState(6);
}
else if(gUnknown_203B290->friendAreaPrice > gTeamInventory_203B460->teamMoney)
{
UpdateWigglytuffState(0x13);
}
else
{
UpdateWigglytuffState(0x11);
}
break;
case 4:
UpdateWigglytuffState(0x10);
break;
case 1:
UpdateWigglytuffState(10);
break;
}
}
void sub_8022668(void)
{
switch(sub_80217EC())
{
case 2:
case 3:
sub_8021830();
UpdateWigglytuffState(0xA);
break;
case 0:
case 1:
break;
}
}
void sub_8022684(void)
{
switch(sub_8023278(1))
{
case 3:
gUnknown_203B290->chosenSpecies = sub_802331C();
gUnknown_203B290->chosenFriendArea = GetFriendArea(gUnknown_203B290->chosenSpecies);
UpdateWigglytuffState(0x18);
break;
case 2:
sub_80233A0();
UpdateWigglytuffState(1);
break;
case 0:
case 1:
break;
}
}
void sub_80226CC(void)
{
s32 temp;
if (sub_80144A4(&temp) == 0)
{
UpdateWigglytuffState(gUnknown_203B290->fallbackState);
}
}