Decomp sub_0203D538; replace its stale extern with the new header

sub_0203D538 (0x0203D538, 1666 instructions in US and EU, 1640 in JP) is the
mission-reward state machine: a 77-case dense switch over
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 driving money, egg, item, rank-up
and recruit rewards through dialogue boxes and menus. It is function 13 of
89 in asm/main_0203CAF0.s, so extract_function.py splits rather than merges:
the 76 functions after it move to asm/main_0203EFD4.s, the function lands in
src/main_0203D538.c with include/main_0203D538.h, and main.lsf lists both new
objects where it listed one.

src/overlay_24_init.c declared sub_0203D538 itself, with a live call site in
a switch. That extern is removed and the file now includes the new header.

Case order is source order and is not ascending - two contiguous runs are
swapped (32,33,34 before 30,31; and 52..57 before 45..51), read off the jump
table. Every case ends `break` with a single `return 0` after the switch,
because the target's exit block itself materialises the value: a `return 0`
per case makes MWCC materialise r0 at each of 77 sites and, worse,
de-predicates the short blocks above them. case 76 keeps its `return 1`,
which is how the target jumps past that shared `mov r0, #0`.

The nine function-scope locals are declared buffer-first then the five
struct item in reverse case order, because MWCC gives the first-declared
local the highest stack address and the target wants the buffer at sp+0x22.
That ordering costs no instructions, so it shows up only as a wrong offset at
every stack access - not as a length difference.

struct unk_020AFE74 is a placeholder for the 0x3C0-byte state struct, with
field_0x<off> members and two u8 filler ranges this function never touches;
it cannot be honestly typed from one caller. The 19 callees with no
declaration anywhere are declared extern in the .c with prototypes read off
their own asm, and two of them - sub_02046C78 and sub_02046D20 - take no
arguments, contradicting src/main_020663C8.c.

Region handling: 35 message ids carry a uniform +0x21D4 under JAPAN via one
file-scope offset macro; one id at 0x2CC shifts by +0x2D20 instead and needs
its own ifdef; StrncpySimple becomes the two-argument StrcpySimple; and JAPAN
omits case 74's item fetch, its name formatting and its early-exit guard,
which is what removes a struct item local and takes the frame from 0x11C to
0x114. EUROPE is byte-identical to NORTH_AMERICA - there is no EUROPE
directive anywhere in this function.

Authored by Claude (Opus 5) under human direction. Confirmed by matching
builds of all three regions: build/pmdsky.us/pmdsky.us.nds: OK,
build/pmdsky.eu/pmdsky.eu.nds: OK, build/pmdsky.jp/pmdsky.jp.nds: OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
cecilarmitais
2026-09-07 01:56:08 -07:00
parent d814f8d017
commit f47593d94e
8 changed files with 5663 additions and 6735 deletions

View File

@@ -1,262 +1,50 @@
#pragma once
.public AppendStandardStringToMission
.public ClearWindow
.public ClosePortraitBox
.public CloseTextBox
.public CreatePortraitBox
.public CreateTextBox
.public DrawTextInWindow
.public GetDexNumber
.public GetNextIqSkill
.public GetSpeciesString
.public GetType
.public GetTypeStringId
.public HidePortraitBox
.public InitPortraitParams
.public InitPortraitParamsWithMonsterId
.public InitPreprocessorArgs
.public IsTextboxState3
.public MISSION_REWARD_STRUCT_MAIN_PTR
.public MemAlloc
.public MemZero
.public PreprocessString
.public PreprocessStringFromId
.public SetPortraitEmotion
.public SetPortraitLayout
.public SetPortraitOffset
.public ShowPortraitInPortraitBox
.public StringFromId
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UpdateWindow
.public _0209C7CC
.public _0209C7D4
.public _0209C7E4
.public _0209C820
.public _0209C82C
.public _0209C83C
.public _0209C844
.public _0209C846
.public _0209C850
.public _0209C85C
.public _0209C86C
.public _0209C884
.public _0209C89C
.public _0209C8A8
.public _0209C8B8
.public _0209C8C8
.public _0209C928
.public _0209C92C
.public _0209C93C
.public _0209C94C
.public _0209C95C
.public _0209C96C
.public _0209C97C
.public _0209C98C
.public _0209C99C
.public _0209C9AC
.public _0209C9B0
.public _0209C9CC
.public _0209C9D4
.public _0209C9DC
.public _0209C9E4
.public _0209C9F4
.public _0209C9FC
.public _0209CA08
.public _0209CA18
.public _0209CA2C
.public _0209E912
.public _020AFE70
.public _020AFE78
.public _020AFE7C
.public _020AFE8C
.public _020AFE90
.public _020AFE98
.public _022AADFC
.public _022AAE00
.public _022AAE2A
.public _022AAE2E
.public _022AAE58
.public _s32_div_f
.public AddItemToStorage
.public AddMoneyCarried
.public AppendStandardStringToMission
.public ApplyLevelUpBoostsToGroundMonster
.public Arm9LoadUnkFieldNa0x2029EC8
.public Arm9StoreUnkFieldNa0x2029ED8
.public BAG_ITEMS_PTR_MIRROR
.public CanMonsterUseMove
.public ClearBagSelectedItemTable
.public ClearWindow
.public CloseAdvancedMenu
.public CloseAdvancedTextBox
.public CloseCollectionMenu
.public CloseDialogueBox
.public CloseParentMenu
.public ClosePortraitBox
.public CloseScrollBox
.public CloseSimpleMenu
.public CloseTextBox
.public CopyNStringFromId
.public CountNbOfItemsInStorage
.public CreateAdvancedMenu
.public CreateAdvancedTextBox
.public CreateCollectionMenu
.public CreateParentMenuFromStringIds
.public CreatePortraitBox
.public CreateScrollBoxMulti
.public CreateScrollBoxSingle
.public CreateSimpleMenuFromStringIds
.public CreateTextBox
.public DisableIqSkill
.public DrawTextInWindow
.public FormatMoveStringMore
.public GetActiveTeamMember
.public GetActualSellPrice
.public GetAdvancedMenuResult
.public GetAdvancedTextBoxFlags2
.public GetDexNumber
.public GetDigitInputResult
.public GetDungeonResultString
.public GetEggSpecies
.public GetHeldButtons
.public GetIqSkillStringId
.public GetItemAtIdx
.public GetItemCategory
.public GetKeyboardStatus
.public GetKeyboardStringResult
.public GetLearnableIqSkills
.public GetMaxPp
.public GetMoneyCarried
.public GetMonsterName
.public GetMoveRangeId
.public GetMoveType
.public GetNameRaw
.public GetNameWithGender
.public GetNbItemsInBag
.public GetNextIqSkill
.public GetPpIncrease
.public GetPressedButtons
.public GetRank
.public GetRankUpEntry
.public GetReleasedStylus
.public GetResolvedPerformanceProgressFlag
.public GetSimpleMenuResult__0202AEA4
.public GetSimpleMenuResult__0202B870
.public GetSpeciesString
.public GetStringFromFileVeneer
.public GetType
.public GetTypeStringId
.public GetWindowIdPageStart
.public GetWindowIdSelectedMenuItemIdx
.public HidePortraitBox
.public InitMove
.public InitPortraitParams
.public InitPortraitParamsWithMonsterId
.public InitPreprocessorArgs
.public InitUnkStorageStruct0x410
.public IqSkillFlagTest
.public Is2TurnsMove
.public IsAdvancedMenuActive2
.public IsAdvancedTextBoxActive
.public IsCollectionMenuActive
.public IsCollectionMenuState3
.public IsDeoxys
.public IsGummi
.public IsMonsterIllegalForMissions
.public IsNot2TurnsMoveOrSketch
.public IsParentMenuActive
.public IsScrollBoxActive
.public IsShoppableItem
.public IsSimpleMenuActive
.public IsStorableItem
.public IsTextboxState3
.public IsThrownItem
.public IsTouchScreenNotOff
.public LAST_NEW_MOVE
.public LoadScriptVariableValue
.public MaybeGetColoredFormattedItemName
.public MaybeGetUncoloredFormattedItemName
.public MemAlloc
.public memcpy
.public MemcpySimple
.public MemFree
.public MemZero
.public MISSION_REWARD_STRUCT_MAIN_PTR
.public ov11_023061CC
.public ov11_023061E4
.public ov11_02306C64
.public ov11_02306C9C
.public ov11_0230D000
.public ov11_0230D220
.public ov11_0230D92C
.public ov11_02310BDC
.public PlayAdvancedTextBoxInputSound
.public PlaySeByIdVolumeWrapper
.public PlaySeVolumeWrapper
.public PreprocessString
.public PreprocessStringFromId
.public RandIntSafe
.public RemoveEmptyItemsInBag
.public ResumeAdvancedMenu
.public SetAdvancedTextBoxField0x1C2
.public SetAdvancedTextBoxState5
.public SetCollectionMenuField0x1BC
.public SetCollectionMenuVoidFn
.public SetCollectionMenuWidth
.public SetEggHatchTimer
.public SetEggSpecies
.public SetPortraitEmotion
.public SetPortraitLayout
.public SetPortraitOffset
.public SetUnkAdvancedTextBoxFn
.public SetUnkAdvancedTextBoxWindowFn
.public ShowKeyboard
.public ShowPortraitInPortraitBox
.public STATUSES_FULL_DESCRIPTION_STRING_IDS
.public strcat
.public strcpy
.public StrcpySimple
.public StringFromId
.public StrncpySimple
.public StrncpySimpleNoPadSafe
.public sub_02001808
.public sub_020063F4
.public sub_02006498
.public sub_02006BFC
.public sub_0200FD48
.public sub_02013E54
.public sub_02013F58
.public sub_02017C50
.public sub_02017C74
.public sub_02024D7C
.public sub_02025D50
.public sub_02027B1C
.public sub_0202810C
.public sub_0202812C
.public sub_02028354
.public sub_020288DC
.public sub_0202A2A4
.public sub_0202C1E4
.public sub_0202C620
.public sub_0202C75C
.public sub_0202D068
.public sub_0202D0EC
.public sub_0202D16C
.public sub_0202F954
.public sub_020307EC
.public sub_020308E4
.public sub_02030908
.public sub_02030978
.public sub_02030A50
.public sub_02030A64
.public sub_02030A74
.public sub_02030A90
.public sub_02030EF0
.public sub_02037468
.public sub_0203909C
.public sub_02039218
.public sub_0203931C
.public sub_02042B20
.public sub_02042BE0
.public sub_0204426C
.public sub_020442CC
.public sub_02044308
.public sub_0204440C
.public sub_02044474
.public sub_020444B0
.public sub_02044568
.public sub_020445C8
.public sub_02045FD0
.public sub_02046028
.public sub_02046A20
.public sub_02046B04
.public sub_02046BA0
.public sub_02046BE8
.public sub_02046C78
.public sub_02046D20
.public sub_02050C10
.public sub_02052E2C
.public sub_02053A0C
.public sub_02055D4C
.public sub_02056410
.public sub_020564B0
.public sub_02056F60
.public sub_0205A4B4
.public sub_0205B028
.public sub_0205B0A0
.public sub_0205B0B8
.public TEAM_MEMBER_TABLE_PTR
.public UNK_STORAGE_STRUCT_0XC
.public UpdateWindow
.public vsprintf

View File

@@ -0,0 +1,176 @@
#pragma once
.public Arm9LoadUnkFieldNa0x2029EC8
.public Arm9StoreUnkFieldNa0x2029ED8
.public BAG_ITEMS_PTR_MIRROR
.public CanMonsterUseMove
.public ClearBagSelectedItemTable
.public CloseAdvancedMenu
.public CloseAdvancedTextBox
.public CloseCollectionMenu
.public CloseDialogueBox
.public CloseParentMenu
.public ClosePortraitBox
.public CloseScrollBox
.public CopyNStringFromId
.public CountNbOfItemsInStorage
.public CreateAdvancedMenu
.public CreateAdvancedTextBox
.public CreateCollectionMenu
.public CreatePortraitBox
.public CreateScrollBoxMulti
.public CreateScrollBoxSingle
.public DisableIqSkill
.public DrawTextInWindow
.public FormatMoveStringMore
.public GetActiveTeamMember
.public GetActualSellPrice
.public GetAdvancedMenuResult
.public GetAdvancedTextBoxFlags2
.public GetDigitInputResult
.public GetDungeonResultString
.public GetHeldButtons
.public GetIqSkillStringId
.public GetItemAtIdx
.public GetLearnableIqSkills
.public GetMaxPp
.public GetMoneyCarried
.public GetMonsterName
.public GetMoveRangeId
.public GetMoveType
.public GetNbItemsInBag
.public GetPpIncrease
.public GetPressedButtons
.public GetReleasedStylus
.public GetResolvedPerformanceProgressFlag
.public GetStringFromFileVeneer
.public GetWindowIdPageStart
.public GetWindowIdSelectedMenuItemIdx
.public InitMove
.public InitPreprocessorArgs
.public IqSkillFlagTest
.public Is2TurnsMove
.public IsAdvancedMenuActive2
.public IsAdvancedTextBoxActive
.public IsCollectionMenuActive
.public IsCollectionMenuState3
.public IsDeoxys
.public IsGummi
.public IsNot2TurnsMoveOrSketch
.public IsScrollBoxActive
.public IsShoppableItem
.public IsStorableItem
.public IsTouchScreenNotOff
.public LAST_NEW_MOVE
.public MISSION_REWARD_STRUCT_MAIN_PTR
.public MaybeGetColoredFormattedItemName
.public MaybeGetUncoloredFormattedItemName
.public MemAlloc
.public MemFree
.public MemZero
.public PlayAdvancedTextBoxInputSound
.public PlaySeByIdVolumeWrapper
.public PlaySeVolumeWrapper
.public PreprocessString
.public RemoveEmptyItemsInBag
.public ResumeAdvancedMenu
.public STATUSES_FULL_DESCRIPTION_STRING_IDS
.public SetAdvancedTextBoxField0x1C2
.public SetAdvancedTextBoxState5
.public SetCollectionMenuField0x1BC
.public SetCollectionMenuVoidFn
.public SetCollectionMenuWidth
.public SetUnkAdvancedTextBoxFn
.public SetUnkAdvancedTextBoxWindowFn
.public ShowPortraitInPortraitBox
.public StrncpySimpleNoPadSafe
.public TEAM_MEMBER_TABLE_PTR
.public UNK_STORAGE_STRUCT_0XC
.public UpdateWindow
.public _0209C89C
.public _0209C8A8
.public _0209C8B8
.public _0209C8C8
.public _0209C928
.public _0209C92C
.public _0209C93C
.public _0209C94C
.public _0209C95C
.public _0209C96C
.public _0209C97C
.public _0209C98C
.public _0209C99C
.public _0209C9AC
.public _0209C9B0
.public _0209C9CC
.public _0209C9D4
.public _0209C9DC
.public _0209C9E4
.public _0209C9F4
.public _0209C9FC
.public _0209CA08
.public _0209CA18
.public _0209CA2C
.public _0209E912
.public _020AFE78
.public _020AFE7C
.public _020AFE8C
.public _020AFE90
.public _020AFE98
.public _022AADFC
.public _022AAE00
.public _022AAE2A
.public _022AAE2E
.public _022AAE58
.public memcpy
.public strcat
.public strcpy
.public sub_02001808
.public sub_020063F4
.public sub_02006498
.public sub_02006BFC
.public sub_0200FD48
.public sub_02013E54
.public sub_02013F58
.public sub_02017C74
.public sub_02025D50
.public sub_02027B1C
.public sub_0202810C
.public sub_0202812C
.public sub_02028354
.public sub_020288DC
.public sub_0202A2A4
.public sub_0202C1E4
.public sub_0202C620
.public sub_0202C75C
.public sub_0202D068
.public sub_0202D0EC
.public sub_0202D16C
.public sub_020307EC
.public sub_020308E4
.public sub_02030908
.public sub_02030978
.public sub_02030A50
.public sub_02030A64
.public sub_02030A74
.public sub_02030A90
.public sub_02030EF0
.public sub_02042B20
.public sub_02042BE0
.public sub_0204426C
.public sub_020442CC
.public sub_02044308
.public sub_0204440C
.public sub_02044474
.public sub_020444B0
.public sub_02044568
.public sub_020445C8
.public sub_02046A20
.public sub_02046B04
.public sub_02046BA0
.public sub_02046D20
.public sub_02056410
.public sub_020564B0
.public sub_02056F60
.public sub_0205A4B4
.public sub_0205B0B8
.public vsprintf

File diff suppressed because it is too large Load Diff

4533
asm/main_0203EFD4.s Normal file

File diff suppressed because it is too large Load Diff

6
include/main_0203D538.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef PMDSKY_MAIN_0203D538_H
#define PMDSKY_MAIN_0203D538_H
s32 sub_0203D538(void);
#endif

View File

@@ -207,6 +207,8 @@ Static main
Object asm/main_0203C774.o
Object src/main_0203C910.o
Object asm/main_0203CAF0.o
Object src/main_0203D538.o
Object asm/main_0203EFD4.o
Object src/main_02042AF8.o
Object src/main_02042B84.o
Object asm/main_02042BE0.o

915
src/main_0203D538.c Normal file
View File

@@ -0,0 +1,915 @@
#include "main_0203D538.h"
#include "window.h"
#include "common.h"
#include "item.h"
#include "main_0200C4FC.h"
#include "item_util.h"
#include "item_util_4.h"
#include "main_02017B58.h"
#include "main_0201077C.h"
#include "main_020107DC.h"
#include "item_util_1.h"
#include "main_0200330C.h"
#include "main_0200ECFC.h"
#include "main_020251AC.h"
#include "main_0202AB40.h"
#include "main_0202B4C4.h"
#include "main_0203755C.h"
#include "progression.h"
#include "script_variable.h"
struct unk_020517F4 {
u8 field_0x0[8];
s32 field_0x8;
s16 field_0xc;
u8 field_0xe[2];
};
struct unk_020AFE74 {
s32 field_0x0;
s8 field_0x4;
s8 field_0x5;
s8 field_0x6;
u8 field_0x7;
s32 field_0x8;
u8 field_0xc;
u8 field_0xd[3];
s32 field_0x10;
s16 field_0x14;
u8 field_0x16[2];
s32 field_0x18;
s32 field_0x1c;
s32 field_0x20;
struct item field_0x24[3];
u8 field_0x36;
u8 field_0x37;
s16 field_0x38;
u8 field_0x3a[2];
s32 field_0x3c;
struct ground_monster field_0x40;
struct item field_0x84;
u8 field_0x8a[2];
struct preprocessor_args field_0x8c;
s16 field_0xdc;
struct item field_0xde;
u32 field_0xe4;
char field_0xe8[0x50];
char field_0x138[0x50];
s32 field_0x188;
s32 field_0x18c;
portrait_params field_0x190;
s8 field_0x1a0;
char field_0x1a1[10];
char field_0x1ab[10];
char field_0x1b5[10];
u8 field_0x1bf[0xf6];
char field_0x2b5[0x4e];
u8 field_0x303[0xb5];
struct ground_monster *field_0x3b8;
s32 field_0x3bc;
};
extern struct unk_020AFE74 *MISSION_REWARD_STRUCT_MAIN_PTR;
extern void MaybeGetColoredFormattedItemName(void*, struct item*, void*);
extern s8 CreateSimpleMenuFromStringIds(void*, s32, s32, void*, s32);
extern u8 CreateParentMenuFromStringIds(void *, u32, void *, void *);
extern void GetNameWithGender(char *dst, s16 monster_id, char color_id);
extern void GetNameRaw(unsigned char *, s32);
extern void StrncpySimpleNoPadSafe(u8* dest, const u8* src, u32 n);
extern s32 GetSimpleMenuResult__0202B870(s8);
extern s32 GetSimpleMenuResult__0202AEA4(s8);
extern void InitPreprocessorArgs(struct preprocessor_args* args);
extern bool8 IsMonsterIllegalForMissions(enum monster_id);
extern void sub_02046BE8(s32 a, s32 b, struct preprocessor_args *c);
extern s32 sub_02046C78(void);
extern void sub_02046D20(void);
extern s32 ov11_0230D220(void);
extern void ov11_0230D92C(void);
extern void *ov11_02306C64();
extern s32 ov11_02306C9C();
extern s32 GetKeyboardStatus();
extern s32 sub_02037468();
extern s32 sub_02039218();
extern s32 sub_0203931C();
extern s32 sub_02046028(void);
extern void sub_02045FD0(struct item *out);
extern bool8 AddItemToStorage(struct item *item);
extern void InitUnkStorageStruct0x410(struct item *, u8);
extern s32 GetRank(void);
extern struct unk_020517F4 *GetRankUpEntry(s32 rank);
extern void sub_0203F00C(void);
extern void MissionRewardCloseAllBoxes(void);
extern struct ground_monster *sub_02055D4C(struct ground_monster *mon);
extern void sub_02052E2C(struct ground_monster *, s16, s32, const u8 *, const u16 *);
extern void sub_02053A0C(u16 *buf, s16 monster_id, s32, s32);
extern void ApplyLevelUpBoostsToGroundMonster(void *mon, s16 levels, s32 flag);
extern void sub_02050C10(s32 delta);
extern void sub_0203909C(u8 *name);
extern void ShowKeyboard(s32 mode, u8 *, s32, u8 *);
extern s32 RandIntSafe(s32 n);
extern void ov11_023061CC(void *);
extern void ov11_023061E4(void *, s32);
extern void ov11_02310BDC(void);
extern const u8 _0209C844[2];
extern const u16 _0209C846[4];
extern s32 _0209C850;
extern s32 _0209C85C;
extern s32 _0209C86C;
extern s32 _0209C884;
#ifdef JAPAN
#define SUB_0203D538_OFFSET 0x21D4
#else
#define SUB_0203D538_OFFSET 0
#endif
s32 sub_0203D538(void)
{
u16 v6[4];
struct item v5;
struct item v4;
struct item v3;
struct item v2;
#ifndef JAPAN
struct item v1;
#endif
struct preprocessor_args v7;
struct preprocessor_args v8;
struct preprocessor_args v9;
switch (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0) {
case 0: {
s32 i;
s32 k;
k = -1;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x36 != 0) {
if (GetEggSpecies() != 0 || !GetResolvedPerformanceProgressFlag(0x1e)) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c * k;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x36 = 0;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38 = 0;
}
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38 != 0) {
if (!GetResolvedPerformanceProgressFlag(0x1d) || IsMonsterIllegalForMissions((enum monster_id)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38)) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38 = 0;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c * k;
}
}
if (!(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 0x10) && !GetResolvedPerformanceProgressFlag(0x1f)) {
for (i = 0; i < MISSION_REWARD_STRUCT_MAIN_PTR->field_0x20; i++) {
if (GetItemCategory(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[i].id) == CATEGORY_EXCLUSIVE_ITEMS) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[i].id = ITEM_NOTHING;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c * k;
}
}
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 1;
break;
}
case 1: {
u16 msg;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 7;
break;
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[1] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c * 10;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 != 0) {
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
msg = (0x289 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 3) {
msg = (0x28a + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
msg = LoadScriptVariableValue(NULL, VAR_REQUEST_THANKS_RESULT_VARIATION) + (0x28b + SUB_0203D538_OFFSET);
sub_0203F00C();
} else {
msg = (0x288 + SUB_0203D538_OFFSET);
}
sub_02046BE8(0x101c, msg, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 2;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 4;
}
break;
}
case 2:
if (sub_02046C78() != 0) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 3;
}
break;
case 3:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 4;
}
break;
case 4: {
u16 msg;
sub_02017C50(4);
AddMoneyCarried(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1c);
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
msg = (0x26f + SUB_0203D538_OFFSET);
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 3) {
msg = (0x270 + SUB_0203D538_OFFSET);
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
msg = (0x271 + SUB_0203D538_OFFSET);
} else {
msg = (0x26e + SUB_0203D538_OFFSET);
}
sub_02046BE8(0x101c, msg, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 5;
break;
}
case 5:
if (sub_02046C78() != 0) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 6;
}
break;
case 6:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 7;
}
break;
case 7: {
u16 msg;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38 == 0 || MISSION_REWARD_STRUCT_MAIN_PTR->field_0x36 != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x29;
break;
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.flag_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x14;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.flag_vals[1] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 != 0) {
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
msg = (0x29a + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
msg = LoadScriptVariableValue(NULL, VAR_REQUEST_THANKS_RESULT_VARIATION) + (0x29b + SUB_0203D538_OFFSET);
sub_0203F00C();
} else {
msg = (0x299 + SUB_0203D538_OFFSET);
}
sub_02046BE8(0x3008, msg, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 8;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xb;
}
break;
}
case 8:
if (sub_02046C78() != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x4 = CreateParentMenuFromStringIds(NULL, 0x11, NULL, &_0209C884);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 9;
}
break;
case 9:
if (!IsParentMenuActive(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x4)) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x18c = GetSimpleMenuResult__0202AEA4(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x4);
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 10;
}
break;
case 10:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x18c == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xb;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x23;
}
}
break;
case 11: {
struct unk_0209C846 {
u16 field_0x0[4];
};
*(struct unk_0209C846 *)v6 = *(const struct unk_0209C846 *)_0209C846;
sub_02053A0C(v6, MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38, 1, 0);
sub_02052E2C(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x40, MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38, 0, _0209C844, v6);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8 = sub_02055D4C(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x40);
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8 != NULL) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xc;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1e;
}
break;
}
case 12:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x18 > 1) {
ApplyLevelUpBoostsToGroundMonster(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8, (s16)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x18, 1);
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.flag_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
sub_02046BE8(0x101C, (0x27A + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
sub_0203F00C();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xd;
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
sub_02046BE8(0x101C, (u16)(LoadScriptVariableValue(0, 0x69) + (0x27B + SUB_0203D538_OFFSET)), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
sub_0203F00C();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xd;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xf;
}
break;
case 13:
if (sub_02046C78() != 0) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xe;
}
break;
case 14:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xf;
}
break;
case 15:
GetNameWithGender(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x2b5, MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38, 0x4e);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x2b5;
sub_02046BE8(0x100C, (0x2A6 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
#ifdef JAPAN
StrcpySimple((unsigned char *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a1, (const unsigned char *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8->name);
#else
StrncpySimple((unsigned char *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a1, (const unsigned char *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8->name, 10);
#endif
MemcpySimple((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, (u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8->name, 10);
StrncpySimpleNoPadSafe((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1b5, (const u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, 10);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x10;
break;
case 16:
if (sub_02046C78() != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0 = CreateSimpleMenuFromStringIds(&_0209C85C, 0x300011, 0, &_0209C86C, 2);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x11;
}
break;
case 17:
if (IsSimpleMenuActive(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0) == 0) {
s32 result = GetSimpleMenuResult__0202B870(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0);
CloseSimpleMenu(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a0 = -2;
sub_02046D20();
switch (result) {
case 0:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x12;
break;
case 1:
default:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x20;
break;
}
}
break;
case 18:
ov11_0230D92C();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x13;
break;
case 19:
if (ov11_0230D220() == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x14;
}
break;
case 20:
ShowKeyboard(2, (u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, 0, (u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1a1);
ov11_02310BDC();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x15;
break;
case 21:
if (ov11_0230D220() == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x16;
}
break;
case 22:
if (GetKeyboardStatus() == 3) {
MemcpySimple((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, (u8 *)GetKeyboardStringResult(), 10);
StrncpySimpleNoPadSafe((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1b5, (const u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, 10);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x17;
}
break;
case 23:
if (sub_02037468() != 0) {
ov11_0230D92C();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x18;
}
break;
case 24:
if (ov11_0230D220() == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x19;
}
break;
case 25:
ov11_0230D92C();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1a;
break;
case 26:
if (ov11_0230D220() == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1b;
}
break;
case 27:
sub_0203909C((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1b5);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1c;
break;
case 28:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3bc = sub_0203931C();
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3bc >= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1d;
}
break;
case 29:
if (sub_02039218() != 0) {
switch (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3bc) {
case 0:
MemcpySimple((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8->name, (u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, 10);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x20;
break;
case 1:
default:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x12;
break;
}
}
break;
case 32:
{
s32 v10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.flag_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38 | 0x80000;
StrncpySimpleNoPadSafe((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1b5, (u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1ab, 10);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x1b5;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
v10 = (0x283 + SUB_0203D538_OFFSET);
} else {
v10 = (0x281 + SUB_0203D538_OFFSET);
}
sub_02017C50(5);
sub_02046BE8(0x101C, v10, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x21;
}
break;
case 33:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x22;
}
break;
case 34:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x29;
}
break;
case 30:
sub_02046D20();
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2 || MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 3) {
ov11_023061E4(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x40, 1);
} else {
ov11_023061CC(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x40);
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x1f;
break;
case 31:
{
s32 v10;
struct ground_monster *v11;
v10 = ov11_02306C9C();
switch (v10) {
case 3:
case 4:
v11 = ov11_02306C64();
if (v11 == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x23;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3b8 = v11;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0xc;
}
break;
}
}
break;
case 35:
GetNameRaw((u8 *)MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8, MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8;
sub_02046BE8(0x101C, (0x284 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x24;
break;
case 36:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x25;
}
break;
case 37:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x26;
}
break;
case 38:
sub_02017C50(4);
AddMoneyCarried(1000);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = 1000;
sub_02046BE8(0x101C, (0x285 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x27;
break;
case 39:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x28;
}
break;
case 40:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x29;
}
break;
case 41:
{
s32 v10;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10 >= MISSION_REWARD_STRUCT_MAIN_PTR->field_0x20) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3a;
break;
}
v5.id = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].id;
v5.flags = 0;
if (IsStorableItem(v5.id)) {
if (IsThrownItem(v5.id) || (v5.id >= ITEM_GORGEOUS_BOX_1 && v5.id <= ITEM_SINISTER_BOX_3)) {
v5.quantity = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].quantity;
} else {
v5.quantity = 0;
}
v5.flags = 1;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10] = v5;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[0] = v5.id;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = 0;
MaybeGetColoredFormattedItemName(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8, &v5, &_0209C850);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.flag_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x14;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 != 0) {
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
v10 = (0x296 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 3) {
v10 = (0x297 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
v10 = (0x298 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else {
v10 = (0x295 + SUB_0203D538_OFFSET);
}
sub_02046BE8(0x101C, v10, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2a;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2c;
}
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x33;
}
}
break;
case 42:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2b;
}
break;
case 43:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2c;
}
break;
case 44:
if (AddItemToStorage(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10])) {
if ((MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 2) == 0) {
sub_02017C50(4);
}
if ((MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 4) == 0) {
sub_02046BE8(0x1c, (0x273 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2e;
} else if ((MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 8) != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x30;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x33;
}
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x34;
}
break;
case 52:
v4.id = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].id;
v4.quantity = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].quantity;
v4.flags = 0;
sub_02046D20();
InitUnkStorageStruct0x410(&v4, (MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 1) == 0);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x35;
break;
case 53:
switch (sub_02046028()) {
case 4:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2d;
break;
case 2:
sub_02045FD0(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0xde);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x36;
break;
case 3:
sub_02045FD0(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0xde);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x38;
break;
}
break;
case 54:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x37;
}
break;
case 55:
if (AddItemToStorage(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10])) {
if ((MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 2) == 0) {
sub_02017C50(4);
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].id;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = 0;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[2] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xdc;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[2] = 0;
v3.id = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xde.id;
v3.quantity = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xde.quantity;
v3.flags = 0;
MaybeGetColoredFormattedItemName(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10], &_0209C850);
MaybeGetColoredFormattedItemName(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x138, &v3, &_0209C850);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[2] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x138;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8;
sub_02046BE8(0x101C, (0x275 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2e;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x34;
}
break;
case 56:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x39;
}
break;
case 57:
if (AddItemToStorage(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10])) {
if ((MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 2) == 0) {
sub_02017C50(4);
}
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10].id;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = 0;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[2] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xdc;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[2] = 0;
MaybeGetColoredFormattedItemName(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x24[MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10], &_0209C850);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8;
sub_02046BE8(0x101C, (0x277 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2e;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x34;
}
break;
case 45:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
sub_02046BE8(0x101C, (0x286 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
sub_02045FD0(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0xde);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2e;
}
break;
case 46:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x2f;
}
break;
case 47:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x33;
}
break;
case 48:
#ifdef JAPAN
sub_02046BE8(0x101C, 0x2FEC, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
#else
sub_02046BE8(0x101C, 0x2CC, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
#endif
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x31;
break;
case 49:
if (sub_02046C78()) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x32;
}
break;
case 50:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x33;
}
break;
case 51:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10++;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x10 < 3) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x29;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3a;
}
break;
case 58:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x36 == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x40;
break;
}
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 != 0) {
s32 v10;
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 2) {
v10 = (0x292 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 3) {
v10 = (0x293 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8 == 4) {
v10 = (0x294 + SUB_0203D538_OFFSET);
sub_0203F00C();
} else {
v10 = (0x291 + SUB_0203D538_OFFSET);
}
sub_02046BE8(0x101c, v10, &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3b;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3d;
}
break;
case 59:
if (sub_02046C78() != 0) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3c;
}
break;
case 60:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3d;
}
break;
case 61:
sub_02017C50(5);
SetEggSpecies(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x38);
SetEggHatchTimer((u16)(RandIntSafe(4) + 6));
sub_02046BE8(0x101c, (0x272 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3e;
break;
case 62:
if (sub_02046C78() != 0) {
MissionRewardCloseAllBoxes();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188 = 10;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x3f;
}
break;
case 63:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x188-- <= 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x40;
}
break;
case 64:
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3c == 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
break;
}
InitPreprocessorArgs(&v7);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0xc = GetRank();
sub_02050C10(MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3c);
sub_02017C50(4);
v7.number_vals[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x3c;
sub_02046BE8(0x101c, (0x2a1 + SUB_0203D538_OFFSET), &v7);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x41;
break;
case 65:
if (sub_02046C78() != 0) {
if (MISSION_REWARD_STRUCT_MAIN_PTR->field_0xc != GetRank()) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x42;
} else {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
}
}
break;
case 66:
sub_02017C50(2);
InitPreprocessorArgs(&v8);
v8.id_vals[2] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xc;
v8.id_vals[3] = GetRank();
sub_02046BE8(0x101c, (0x2a2 + SUB_0203D538_OFFSET), &v8);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x43;
break;
case 67:
if (sub_02046C78() != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x44;
}
break;
case 68:
InitPreprocessorArgs(&v9);
v9.number_vals[0] = GetRankUpEntry(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xc)->field_0x8;
v9.number_vals[1] = GetRankUpEntry(GetRank())->field_0x8;
if (v9.number_vals[0] == v9.number_vals[1]) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x46;
break;
}
sub_02046BE8(0x101c, (0x2a3 + SUB_0203D538_OFFSET), &v9);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x45;
break;
case 69:
if (sub_02046C78() != 0) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x46;
}
break;
case 70: {
struct unk_020AFE74 *p;
s16 v;
p = MISSION_REWARD_STRUCT_MAIN_PTR;
v = GetRankUpEntry(GetRank())->field_0xc;
p->field_0x84.id = v;
if (v == 0) {
sub_02046D20();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
} else if (IsStorableItem(v)) {
p->field_0x84.quantity = IsThrownItem(p->field_0x84.id) != 0;
p->field_0x84.flags = ITEM_FLAG_EXISTS;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.id_vals[0] = p->field_0x84.id;
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.number_vals[0] = 0;
sub_02017C50(4);
sub_02046BE8(0x101c, (0x2a4 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x47;
} else {
sub_02046D20();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
}
break;
}
case 71:
if (sub_02046C78()) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x48;
}
break;
case 72:
if (!AddItemToStorage(&MISSION_REWARD_STRUCT_MAIN_PTR->field_0x84)) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x49;
} else {
sub_02046D20();
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
}
break;
case 73:
v2.id = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x84.id;
v2.quantity = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x84.quantity;
v2.flags = 0;
sub_02046D20();
InitUnkStorageStruct0x410(&v2, (MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe4 & 1) == 0);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4a;
break;
case 74: {
s32 v10;
v10 = sub_02046028();
#ifndef JAPAN
if (v10 == 1) {
break;
}
sub_02045FD0(&v1);
if (v1.id == 0) {
v1 = MISSION_REWARD_STRUCT_MAIN_PTR->field_0x84;
}
#endif
switch (v10) {
case 4:
#ifndef JAPAN
MaybeGetColoredFormattedItemName(MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8, &v1, &_0209C850);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c.strings[0] = MISSION_REWARD_STRUCT_MAIN_PTR->field_0xe8;
#endif
sub_02046BE8(0x101c, (0x286 + SUB_0203D538_OFFSET), &MISSION_REWARD_STRUCT_MAIN_PTR->field_0x8c);
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4b;
break;
case 2:
case 3:
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x48;
break;
}
break;
}
case 75:
if (sub_02046C78()) {
MISSION_REWARD_STRUCT_MAIN_PTR->field_0x0 = 0x4c;
}
break;
case 76:
return 1;
}
return 0;
}

View File

@@ -1,4 +1,5 @@
#include "overlay_24.h"
#include "main_0203D538.h"
extern void CloseCollectionMenu(s8);
extern void CloseDialogueBox(s8);
@@ -23,7 +24,6 @@ extern void sub_0202F2C4(s8);
extern s32 sub_02037468();
extern s32 sub_02039218();
extern s32 sub_0203931C();
extern s32 sub_0203D538();
s32 ov24_0238A140(void)