From 3f6c0d79910851d0d751a08fbc43d85c81945365 Mon Sep 17 00:00:00 2001 From: slaw-22 Date: Wed, 31 Dec 2025 15:42:07 +0000 Subject: [PATCH] Decomp InitDungeonInit --- asm/include/main_0204DE7C.inc | 113 +- asm/include/main_0204EFE0.inc | 58 + asm/main_0204DE7C.s | 3214 --------------------------------- asm/main_0204EFE0.s | 2810 ++++++++++++++++++++++++++++ asm/main_rodata_020A2808.s | 74 +- include/common.h | 2 +- include/dungeon_init.h | 91 + include/enums.h | 234 ++- main.lsf | 2 + src/dungeon_init.c | 223 +++ 10 files changed, 3483 insertions(+), 3338 deletions(-) create mode 100644 asm/include/main_0204EFE0.inc create mode 100644 asm/main_0204EFE0.s create mode 100644 include/dungeon_init.h create mode 100644 src/dungeon_init.c diff --git a/asm/include/main_0204DE7C.inc b/asm/include/main_0204DE7C.inc index 4cf62072..3a9160ff 100644 --- a/asm/include/main_0204DE7C.inc +++ b/asm/include/main_0204DE7C.inc @@ -1,106 +1,47 @@ #pragma once +.public ARM9_UNKNOWN_TABLE__NA_209E280 +.public ApplyLevelUpBoostsToGroundMonster +.public CLIENT_LEVEL_TABLE +.public CopyLogFrom +.public CopyLogTo +.public Debug_Print0 +.public GetDungeonModeSpecial +.public GetGameMode +.public GetResolvedPerformanceProgressFlag +.public GetSosMailCount +.public InitDungeonInit +.public LoadOptionsFromCtx +.public LoadScriptVariableValue +.public LoadScriptVariableValueAtIndex +.public MemcpySimple +.public PENDING_DUNGEON_ID +.public SaveOptionsToCtx +.public SaveScriptVariableValue +.public StringFromId +.public WONDER_MAIL_BITS_SWAP +.public WONDER_MAIL_ENCRYPTION_TABLE .public _0209E264 -.public _0209E3A1 -.public _0209E3A2 -.public _0209E3A3 -.public _0209E6BD -.public _020A192C -.public _020A28E0 -.public _020A2904 -.public _020A2928 -.public _020A294C -.public _020A2970 -.public _020A2994 -.public _020A29B8 -.public _020A29DC -.public _020A2A00 -.public _020A2A24 -.public _020A2A48 -.public _020A2A6C -.public _020A2A90 -.public _020A2AB4 -.public _020A2AD8 -.public _020A2AFC -.public _020A2B20 .public _022AB4F8 .public _022AB510 .public _022AB518 .public _022AB5A8 .public _022AB5AC -.public _022AB69C -.public _022AB924 .public _s32_div_f -.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS -.public ADVENTURE_LOG_PTR -.public ApplyLevelUpBoostsToGroundMonster -.public ARM9_UNKNOWN_DATA__NA_209E6BC -.public ARM9_UNKNOWN_TABLE__NA_209E280 -.public CLIENT_LEVEL_TABLE -.public Copy16BitsFrom -.public CopyNStringFromId -.public Debug_Print0 -.public DUNGEON_DATA_LIST -.public DungeonSwapIdToIdx -.public DungeonSwapIdxToId -.public GetBaseFormCastformCherrimDeoxys -.public GetBodySize -.public GetDexNumberVeneer -.public GetDungeonMode -.public GetDungeonModeSpecial -.public GetGameMode -.public GetMaxItemsAllowed -.public GetMaxMembersAllowed -.public GetMaxReachedFloor -.public GetMoneyCarried -.public GetNameString -.public GetNbItemsInBag -.public GetPartyMembers -.public GetResolvedPerformanceProgressFlag -.public GetRankUpEntry -.public GetSosMailCount -.public GetStringFromFileVeneer -.public GUEST_MONSTER_DATA -.public GuestMonsterToGroundMonster -.public IsItemValidVeneer -.public IsLevelResetDungeon -.public IsMoneyAllowed -.public IsRealMove -.public IsRecruitingAllowed -.public LoadScriptVariableValue -.public LoadScriptVariableValueAtIndex -.public MemcpySimple -.public MemZero -.public MISSION_FLOOR_RANKS_PTRS -.public NormalizeTreasureBox -.public OUTLAW_LEVEL_TABLE -.public OUTLAW_MINION_LEVEL_TABLE -.public PENDING_DUNGEON_ID -.public PLAY_TIME_SECONDS -.public SaveScriptVariableValue -.public SECONDARY_TERRAIN_TYPES -.public StringFromId -.public StrncpyName -.public StrncpySimpleNoPad -.public StrncpySimpleNoPadSafe .public sub_02004F80 .public sub_0200C4CC .public sub_02048BFC .public sub_02048CB8 -.public SaveOptionsToCtx -.public LoadOptionsFromCtx -.public SetResolvedPerformanceProgressFlag -.public sub_0204CEE0 .public sub_0204DB08 -.public sub_020515C4 +.public sub_0204F7A8 +.public sub_0204F9F4 +.public sub_0204FA0C +.public sub_02050974 +.public sub_02050990 +.public sub_020509BC .public sub_0205633C .public sub_02056360 .public sub_0205B77C .public sub_0205BB7C .public sub_0205BD14 -.public sub_0205EE40 .public sub_0205F00C .public sub_0205FE80 -.public TEAM_MEMBER_TABLE_PTR -.public TEAM_NAME -.public WONDER_MAIL_BITS_SWAP -.public WONDER_MAIL_ENCRYPTION_TABLE diff --git a/asm/include/main_0204EFE0.inc b/asm/include/main_0204EFE0.inc new file mode 100644 index 00000000..4782e419 --- /dev/null +++ b/asm/include/main_0204EFE0.inc @@ -0,0 +1,58 @@ +#pragma once +.public ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS +.public ADVENTURE_LOG_PTR +.public ARM9_UNKNOWN_DATA__NA_209E6BC +.public Copy16BitsFrom +.public CopyNStringFromId +.public DUNGEON_DATA_LIST +.public DungeonSwapIdToIdx +.public DungeonSwapIdxToId +.public GetBaseFormCastformCherrimDeoxys +.public GetBodySize +.public GetDexNumberVeneer +.public GetDungeonMode +.public GetDungeonModeSpecial +.public GetGameMode +.public GetMaxItemsAllowed +.public GetMaxMembersAllowed +.public GetMaxReachedFloor +.public GetMoneyCarried +.public GetNameString +.public GetNbItemsInBag +.public GetPartyMembers +.public GetRankUpEntry +.public GetResolvedPerformanceProgressFlag +.public GetStringFromFileVeneer +.public GuestMonsterToGroundMonster +.public IsItemValidVeneer +.public IsLevelResetDungeon +.public IsMoneyAllowed +.public IsRealMove +.public IsRecruitingAllowed +.public LoadScriptVariableValue +.public MISSION_FLOOR_RANKS_PTRS +.public MemZero +.public NormalizeTreasureBox +.public OUTLAW_LEVEL_TABLE +.public OUTLAW_MINION_LEVEL_TABLE +.public PENDING_DUNGEON_ID +.public PLAY_TIME_SECONDS +.public SECONDARY_TERRAIN_TYPES +.public SetResolvedPerformanceProgressFlag +.public StrncpyName +.public StrncpySimpleNoPad +.public StrncpySimpleNoPadSafe +.public TEAM_MEMBER_TABLE_PTR +.public TEAM_NAME +.public _0209E3A1 +.public _0209E3A2 +.public _0209E3A3 +.public _0209E6BD +.public _020A192C +.public _022AB4F8 +.public _022AB5AC +.public _022AB69C +.public _022AB924 +.public sub_0204CEE0 +.public sub_020515C4 +.public sub_0205EE40 diff --git a/asm/main_0204DE7C.s b/asm/main_0204DE7C.s index ff7f47c3..237229b9 100644 --- a/asm/main_0204DE7C.s +++ b/asm/main_0204DE7C.s @@ -966,3217 +966,3 @@ _0204EA50: .word _022AB510 _0204EA54: .word _022AB5A8 _0204EA58: .word _022AB4F8 arm_func_end sub_0204E974 - - arm_func_start InitDungeonInit -InitDungeonInit: ; 0x0204EA5C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - bl GetGameMode - mov r4, r0 - mov r0, r6 - strh r6, [r7, #2] - bl DungeonSwapIdxToId - strb r0, [r7] - mov r1, #1 - strb r1, [r7, #1] - sub r1, r1, #2 - strb r1, [r7, #0x12] - mov r0, #0 - str r0, [r7, #0xac] - strb r0, [r7, #0xd] - strb r1, [r7, #0xe] - strb r0, [r7, #4] - strb r0, [r7, #0xf] - strb r0, [r7, #0x10] - strb r0, [r7, #0x11] - cmp r4, #2 - strneb r0, [r7, #5] - strneb r0, [r7, #6] - strneb r0, [r7, #8] - bne _0204EAF0 - mov r0, #7 - bl GetResolvedPerformanceProgressFlag - strb r0, [r7, #5] - mov r0, #5 - bl GetResolvedPerformanceProgressFlag - strb r0, [r7, #6] - mov r0, #6 - bl GetResolvedPerformanceProgressFlag - strb r0, [r7, #8] - mov r0, #1 - bl GetResolvedPerformanceProgressFlag -_0204EAF0: - strb r0, [r7, #9] - mov r3, #0 - strb r3, [r7, #0xa] - strb r3, [r7, #0xb] - strb r3, [r7, #7] - strb r3, [r7, #0xc] - mov r1, r3 - mov r0, #0x44 -_0204EB10: - mla r2, r3, r0, r7 - strb r1, [r2, #0x1c] - add r3, r3, #1 - strh r1, [r2, #0x20] - cmp r3, #2 - blt _0204EB10 - cmp r4, #5 - bne _0204EB88 - mov r0, #1 - strb r0, [r7, #5] - strb r1, [r7, #6] - strb r1, [r7, #8] - strb r1, [r7, #9] - strb r1, [r7, #0xb] - mov r0, #3 - strb r0, [r7, #0xd] - strb r1, [r7, #4] - sub r0, r6, #0x26 - strb r1, [r7, #0x11] - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0204EB84 -_0204EB68: ; jump table - b _0204EB80 ; case 0 - b _0204EB80 ; case 1 - b _0204EB80 ; case 2 - b _0204EB80 ; case 3 - b _0204EB80 ; case 4 - b _0204EB80 ; case 5 -_0204EB80: - strb r1, [r7, #5] -_0204EB84: - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0204EB88: - mov r0, r6 - bl GetDungeonModeSpecial - cmp r0, #1 - beq _0204EBB0 - cmp r0, #2 - beq _0204EF50 - cmp r0, #3 - moveq r0, #0 - streqb r0, [r7, #0xd] - b _0204EF88 -_0204EBB0: - mov r4, #0 - mov r0, r6 - strb r4, [r7, #0xd] - mov r5, r4 - bl IsNoLossPenaltyDungeon - strb r0, [r7, #0xc] - cmp r6, #0x44 - bgt _0204ECA4 - bge _0204EE70 - cmp r6, #0x3e - bgt _0204EC60 - bge _0204EE68 - cmp r6, #0x21 - bgt _0204EC1C - bge _0204EDEC - cmp r6, #0xb - bgt _0204EC10 - subs r0, r6, #8 - addpl pc, pc, r0, lsl #2 - b _0204EF34 -_0204EC00: ; jump table - b _0204ED88 ; case 0 - b _0204ED9C ; case 1 - b _0204EDB0 ; case 2 - b _0204EDC4 ; case 3 -_0204EC10: - cmp r6, #0x20 - beq _0204EDD8 - b _0204EF34 -_0204EC1C: - cmp r6, #0x22 - bgt _0204EC2C - beq _0204EE10 - b _0204EF34 -_0204EC2C: - sub r0, r6, #0x23 - cmp r0, #8 - addls pc, pc, r0, lsl #2 - b _0204EF34 -_0204EC3C: ; jump table - b _0204EE24 ; case 0 - b _0204EF34 ; case 1 - b _0204EF34 ; case 2 - b _0204EE48 ; case 3 - b _0204EE48 ; case 4 - b _0204EE48 ; case 5 - b _0204EE60 ; case 6 - b _0204EE60 ; case 7 - b _0204EE60 ; case 8 -_0204EC60: - cmp r6, #0x41 - bgt _0204EC88 - bge _0204EE68 - cmp r6, #0x3f - bgt _0204EC7C - beq _0204EE68 - b _0204EF34 -_0204EC7C: - cmp r6, #0x40 - beq _0204EE68 - b _0204EF34 -_0204EC88: - cmp r6, #0x42 - bgt _0204EC98 - beq _0204EE68 - b _0204EF34 -_0204EC98: - cmp r6, #0x43 - beq _0204EE70 - b _0204EF34 -_0204ECA4: - cmp r6, #0x73 - bgt _0204ECF4 - bge _0204EE88 - cmp r6, #0x70 - bgt _0204ECD8 - bge _0204EE88 - cmp r6, #0x45 - bgt _0204ECCC - beq _0204EE70 - b _0204EF34 -_0204ECCC: - cmp r6, #0x6f - beq _0204EE88 - b _0204EF34 -_0204ECD8: - cmp r6, #0x71 - bgt _0204ECE8 - beq _0204EE88 - b _0204EF34 -_0204ECE8: - cmp r6, #0x72 - beq _0204EE88 - b _0204EF34 -_0204ECF4: - cmp r6, #0x76 - bgt _0204ED1C - bge _0204EE88 - cmp r6, #0x74 - bgt _0204ED10 - beq _0204EE88 - b _0204EF34 -_0204ED10: - cmp r6, #0x75 - beq _0204EE88 - b _0204EF34 -_0204ED1C: - cmp r6, #0x87 - bgt _0204ED7C - subs r0, r6, #0x78 - addpl pc, pc, r0, lsl #2 - b _0204ED70 -_0204ED30: ; jump table - b _0204EE88 ; case 0 - b _0204EE88 ; case 1 - b _0204EE88 ; case 2 - b _0204EE9C ; case 3 - b _0204EEC4 ; case 4 - b _0204EF34 ; case 5 - b _0204EF34 ; case 6 - b _0204EF34 ; case 7 - b _0204EEEC ; case 8 - b _0204EF34 ; case 9 - b _0204EF34 ; case 10 - b _0204EF34 ; case 11 - b _0204EF34 ; case 12 - b _0204EF34 ; case 13 - b _0204EF34 ; case 14 - b _0204EF10 ; case 15 -_0204ED70: - cmp r6, #0x77 - beq _0204EE88 - b _0204EF34 -_0204ED7C: - cmp r6, #0xa4 - beq _0204EF24 - b _0204EF34 -_0204ED88: - ldr r2, _0204EF98 ; =_020A2904 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204ED9C: - ldr r2, _0204EF9C ; =_020A2AD8 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EDB0: - ldr r2, _0204EFA0 ; =_020A2AB4 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EDC4: - ldr r2, _0204EFA4 ; =_020A294C - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EDD8: - ldr r2, _0204EFA8 ; =_020A2970 - mov r0, r7 - mov r1, #0 - bl AddGuestMonster - b _0204EF34 -_0204EDEC: - ldr r2, _0204EFAC ; =_020A2A48 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - ldr r2, _0204EFB0 ; =_020A2A24 - mov r0, r7 - mov r1, #1 - bl AddGuestMonster - b _0204EF34 -_0204EE10: - ldr r2, _0204EFB4 ; =_020A29DC - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EE24: - mov r0, #0x19 - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - bne _0204EF34 - ldr r2, _0204EFB8 ; =_020A2A00 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EE48: - ldr r2, _0204EFBC ; =_020A2A6C - mov r0, r7 - mov r1, r4 - mov r5, #1 - bl AddGuestMonster - b _0204EF34 -_0204EE60: - mov r4, #1 - b _0204EF34 -_0204EE68: - mov r4, #1 - b _0204EF34 -_0204EE70: - ldr r2, _0204EFC0 ; =_020A2A90 - mov r0, r7 - mov r1, #0 - bl AddGuestMonster - mov r4, #1 - b _0204EF34 -_0204EE88: - ldr r2, _0204EFC4 ; =_020A2AFC - mov r0, r7 - mov r1, #0 - bl AddGuestMonster - b _0204EF34 -_0204EE9C: - mov r0, r4 - mov r1, #0x10 - bl LoadScriptVariableValue - cmp r0, #0 - bne _0204EF34 - ldr r2, _0204EFC8 ; =_020A2B20 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EEC4: - mov r0, r4 - mov r1, #0x10 - bl LoadScriptVariableValue - cmp r0, #0 - bne _0204EF34 - ldr r2, _0204EFCC ; =_020A2928 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EEEC: - ldr r2, _0204EFD0 ; =GUEST_MONSTER_DATA - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - ldr r2, _0204EFD4 ; =_020A28E0 - mov r0, r7 - mov r1, #1 - bl AddGuestMonster - b _0204EF34 -_0204EF10: - ldr r2, _0204EFD8 ; =_020A29B8 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster - b _0204EF34 -_0204EF24: - ldr r2, _0204EFDC ; =_020A2994 - mov r0, r7 - mov r1, r4 - bl AddGuestMonster -_0204EF34: - cmp r4, #0 - movne r0, #1 - strneb r0, [r7, #0xb] - cmp r5, #0 - movne r0, #1 - strneb r0, [r7, #7] - b _0204EF88 -_0204EF50: - sub r0, r6, #0x26 - cmp r0, #5 - addls pc, pc, r0, lsl #2 - b _0204EF80 -_0204EF60: ; jump table - b _0204EF78 ; case 0 - b _0204EF78 ; case 1 - b _0204EF78 ; case 2 - b _0204EF78 ; case 3 - b _0204EF78 ; case 4 - b _0204EF78 ; case 5 -_0204EF78: - mov r0, #1 - strb r0, [r7, #0xb] -_0204EF80: - mov r0, #1 - strb r0, [r7, #0xd] -_0204EF88: - mov r0, #0 - strb r0, [r7, #4] - strb r0, [r7, #0x11] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0204EF98: .word _020A2904 -_0204EF9C: .word _020A2AD8 -_0204EFA0: .word _020A2AB4 -_0204EFA4: .word _020A294C -_0204EFA8: .word _020A2970 -_0204EFAC: .word _020A2A48 -_0204EFB0: .word _020A2A24 -_0204EFB4: .word _020A29DC -_0204EFB8: .word _020A2A00 -_0204EFBC: .word _020A2A6C -_0204EFC0: .word _020A2A90 -_0204EFC4: .word _020A2AFC -_0204EFC8: .word _020A2B20 -_0204EFCC: .word _020A2928 -_0204EFD0: .word GUEST_MONSTER_DATA -_0204EFD4: .word _020A28E0 -_0204EFD8: .word _020A29B8 -_0204EFDC: .word _020A2994 - arm_func_end InitDungeonInit - - arm_func_start IsNoLossPenaltyDungeon -IsNoLossPenaltyDungeon: ; 0x0204EFE0 - stmdb sp!, {r4, lr} - cmp r0, #0x1a - mov r4, #0 - cmpne r0, #0x79 - beq _0204F000 - cmp r0, #0x7d - beq _0204F008 - b _0204F01C -_0204F000: - mov r4, #1 - b _0204F01C -_0204F008: - mov r0, r4 - mov r1, #0x10 - bl LoadScriptVariableValue - cmp r0, #0 - moveq r4, #1 -_0204F01C: - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end IsNoLossPenaltyDungeon - - arm_func_start sub_0204F024 -sub_0204F024: ; 0x0204F024 - ldr r1, _0204F030 ; =PENDING_DUNGEON_ID - strb r0, [r1, #0xe] - bx lr - .align 2, 0 -_0204F030: .word PENDING_DUNGEON_ID - arm_func_end sub_0204F024 - - arm_func_start sub_0204F034 -sub_0204F034: ; 0x0204F034 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, #0x28 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x18 - mov r0, r0, asr #0x18 - ldmia sp!, {r3, pc} - arm_func_end sub_0204F034 - - arm_func_start sub_0204F050 -sub_0204F050: ; 0x0204F050 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, #0x27 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mvn r1, #0 - cmp r0, r1 - cmpne r0, #0xd6 - ldmeqia sp!, {r3, pc} - cmp r0, #0xd7 - cmpeq r0, #0xd9 - cmpeq r0, #0xd8 - ldmeqia sp!, {r3, pc} - mov r0, #0 - mov r1, #0x29 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - ldmia sp!, {r3, pc} - arm_func_end sub_0204F050 - - arm_func_start sub_0204F0A0 -sub_0204F0A0: ; 0x0204F0A0 - stmdb sp!, {r3, lr} - mov r0, #0 - mov r1, #0x27 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mvn r1, #0 - cmp r1, r0, asr #16 - mov r0, r0, asr #0x10 - moveq r0, #0xff - ldmeqia sp!, {r3, pc} - cmp r0, #0xd6 - moveq r0, #0xd4 - ldmeqia sp!, {r3, pc} - sub r1, r0, #0xd7 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - cmp r1, #2 - bhi _0204F104 - mov r0, #0 - mov r1, #0x29 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 -_0204F104: - bl DungeonSwapIdxToId - ldmia sp!, {r3, pc} - arm_func_end sub_0204F0A0 - - arm_func_start sub_0204F10C -sub_0204F10C: ; 0x0204F10C - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - mov r1, #0x27 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r1, r0, asr #0x10 - mvn r0, #0 - cmp r1, r0 - cmpne r1, #0xd6 - cmpne r1, #0xd7 - cmpne r1, #0xd8 - cmpne r1, #0xd9 - movne r0, #1 - strneh r1, [r4] - mvneq r0, #0 - streqh r0, [r4] - moveq r0, #0 - ldmia sp!, {r4, pc} - arm_func_end sub_0204F10C - - arm_func_start sub_0204F158 -sub_0204F158: ; 0x0204F158 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - mov r1, #0x27 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - cmp r0, #0xd7 - bne _0204F1AC - mov r0, #0 - mov r1, #0x29 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl DungeonSwapIdxToId - cmp r0, #0xff - beq _0204F1AC - cmp r0, #0xb4 - strlob r0, [r4] - movlo r0, #1 - ldmloia sp!, {r4, pc} -_0204F1AC: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end sub_0204F158 - - arm_func_start sub_0204F1B4 -sub_0204F1B4: ; 0x0204F1B4 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, #0 - mov r1, #0x27 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - cmp r0, #0xd6 - mov r0, #0 - ldmneia sp!, {r4, pc} - mov r1, #0x29 - bl LoadScriptVariableValue - strb r0, [r4] - mov r0, #1 - ldmia sp!, {r4, pc} - arm_func_end sub_0204F1B4 - - arm_func_start sub_0204F1F0 -sub_0204F1F0: ; 0x0204F1F0 - stmdb sp!, {r3, r4, r5, lr} - movs r5, r0 - mov r4, r1 - beq _0204F22C - ldr lr, _0204F23C ; =_022AB5AC - mov ip, #0xe -_0204F208: - ldmia r5!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0204F208 - ldmia r5, {r0, r1} - ldr r2, _0204F240 ; =_022AB4F8 - stmia lr, {r0, r1} - strb r4, [r2, #1] - ldmia sp!, {r3, r4, r5, pc} -_0204F22C: - ldr r0, _0204F240 ; =_022AB4F8 - mov r1, #0 - strb r1, [r0, #1] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0204F23C: .word _022AB5AC -_0204F240: .word _022AB4F8 - arm_func_end sub_0204F1F0 - - arm_func_start sub_0204F244 -sub_0204F244: ; 0x0204F244 - stmdb sp!, {r4, lr} - movs r4, r0 - beq _0204F270 - ldr lr, _0204F27C ; =_022AB5AC - mov ip, #0xe -_0204F258: - ldmia lr!, {r0, r1, r2, r3} - stmia r4!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0204F258 - ldmia lr, {r0, r1} - stmia r4, {r0, r1} -_0204F270: - ldr r0, _0204F280 ; =_022AB4F8 - ldrb r0, [r0, #1] - ldmia sp!, {r4, pc} - .align 2, 0 -_0204F27C: .word _022AB5AC -_0204F280: .word _022AB4F8 - arm_func_end sub_0204F244 - - arm_func_start sub_0204F284 -sub_0204F284: ; 0x0204F284 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #8 - mov sl, r0 - add r0, sp, #0 - mov sb, r1 - bl GetPartyMembers - mov r6, r0 - mov r0, sl - bl GetMaxMembersAllowed - cmp r6, r0 - ble _0204F2C0 - cmp r0, #1 - ldreq r0, _0204F354 ; =0x00000301 - ldrne r0, _0204F358 ; =0x00000101 - b _0204F34C -_0204F2C0: - cmp sb, #0 - beq _0204F2D8 - add r0, r6, #1 - cmp r0, #4 - ldrgt r0, _0204F358 ; =0x00000101 - bgt _0204F34C -_0204F2D8: - mov r7, #0 - mov r8, r7 - add r5, sp, #0 - ldr r4, _0204F35C ; =TEAM_MEMBER_TABLE_PTR - mov fp, #0x44 - b _0204F310 -_0204F2F0: - mov r0, r8, lsl #1 - ldrsh r0, [r5, r0] - ldr r1, [r4] - smlabb r0, r0, fp, r1 - ldrsh r0, [r0, #4] - bl GetBodySize - add r7, r7, r0 - add r8, r8, #1 -_0204F310: - cmp r8, r6 - blt _0204F2F0 - cmp sb, #0 - beq _0204F32C - mov r0, sb - bl GetBodySize - add r7, r7, r0 -_0204F32C: - cmp r7, #6 - movgt r0, #0x81 - bgt _0204F34C - mov r0, sl - bl IsLevelResetDungeon - cmp r0, #0 - ldrne r0, _0204F360 ; =0x00002002 - moveq r0, #0 -_0204F34C: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0204F354: .word 0x00000301 -_0204F358: .word 0x00000101 -_0204F35C: .word TEAM_MEMBER_TABLE_PTR -_0204F360: .word 0x00002002 - arm_func_end sub_0204F284 - - arm_func_start sub_0204F364 -sub_0204F364: ; 0x0204F364 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, #0 - bl GetMaxItemsAllowed - mov r4, r0 - bl GetNbItemsInBag - cmp r4, #0 - ble _0204F39C - cmp r4, r0 - bge _0204F39C - orr r5, r5, #2 - cmp r4, #0 - orreq r5, r5, #0x800 - orrne r5, r5, #0x400 -_0204F39C: - mov r0, r6 - bl IsMoneyAllowed - cmp r0, #0 - bne _0204F3BC - bl GetMoneyCarried - cmp r0, #0 - orrgt r5, r5, #2 - orrgt r5, r5, #0x1000 -_0204F3BC: - mov r0, r5 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_0204F364 - - arm_func_start CheckMissionRestrictions -CheckMissionRestrictions: ; 0x0204F3C4 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl GetGameMode - cmp r0, #2 - bne _0204F424 - mov r0, r5 - bl DungeonSwapIdToIdx - bl GetDungeonModeSpecial - cmp r0, #2 - bne _0204F424 - add r1, sp, #2 - add r2, sp, #0 - mov r0, r5 - bl sub_0205EE40 - cmp r0, #0 - beq _0204F424 - ldrsh r0, [sp] - cmp r0, #0 - movne r0, #0x21 - ldmneia sp!, {r3, r4, r5, pc} - ldrh r0, [sp, #2] - cmp r0, #0 - movne r0, #0x41 - ldmneia sp!, {r3, r4, r5, pc} -_0204F424: - cmp r5, #0x26 - cmpne r5, #0x29 - cmpne r5, #0x3f - cmpne r5, #0x63 - cmpne r5, #0x64 - cmpne r5, #0x65 - cmpne r5, #0x66 - cmpne r5, #0x67 - cmpne r5, #0x68 - cmpne r5, #0x6b - cmpne r5, #0x6c - cmpne r5, #0x6d - cmpne r5, #0x6e - cmpne r5, #0xae - ldreq r0, _0204F484 ; =0x00004001 - ldmeqia sp!, {r3, r4, r5, pc} - mov r0, r5 - mov r1, #0 - bl sub_0204F284 - mov r4, r0 - mov r0, r5 - bl sub_0204F364 - orr r0, r4, r0 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0204F484: .word 0x00004001 - arm_func_end CheckMissionRestrictions - - arm_func_start sub_0204F488 -sub_0204F488: ; 0x0204F488 - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} - mov sb, r0 - mov r8, r1 - mov r7, r2 - bl DungeonSwapIdToIdx - mov r5, r0 - mov r0, sb - bl GetMaxReachedFloor - mov r6, r0 - mov r0, r5 - bl GetDungeonMode - mov r4, r0 - cmp r4, #1 - moveq r0, #0x11 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp r6, #1 - bge _0204F4EC - mov r0, r5 - bl sub_0204CEE0 - cmp r0, #0 - bne _0204F4EC - cmp r4, #3 - movne r0, #5 - moveq r0, #9 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} -_0204F4EC: - cmp r8, r6 - movgt r0, #9 - ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - cmp sb, #0x26 - cmpne sb, #0x29 - cmpne sb, #0x3f - cmpne sb, #0x63 - cmpne sb, #0x64 - cmpne sb, #0x65 - cmpne sb, #0x66 - cmpne sb, #0x67 - cmpne sb, #0x68 - cmpne sb, #0x6b - cmpne sb, #0x6c - cmpne sb, #0x6d - cmpne sb, #0x6e - cmpne sb, #0xae - ldreq r0, _0204F558 ; =0x00004001 - ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - mov r0, sb - mov r1, r7 - bl sub_0204F284 - mov r4, r0 - mov r0, sb - bl sub_0204F364 - orr r0, r4, r0 - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} - .align 2, 0 -_0204F558: .word 0x00004001 - arm_func_end sub_0204F488 - - arm_func_start TilesetSecondaryTerrainIsChasm -TilesetSecondaryTerrainIsChasm: ; 0x0204F55C - ldr r1, _0204F578 ; =SECONDARY_TERRAIN_TYPES - ldrb r0, [r1, r0] - cmp r0, #2 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr - .align 2, 0 -_0204F578: .word SECONDARY_TERRAIN_TYPES - arm_func_end TilesetSecondaryTerrainIsChasm - - arm_func_start GetNbFloors -GetNbFloors: ; 0x0204F57C - cmp r0, #0xb4 - blo _0204F590 - cmp r0, #0xbd - movls r0, #5 - bxls lr -_0204F590: - cmp r0, #0xbe - moveq r0, #1 - bxeq lr - cmp r0, #0xbf - ldrlo r1, _0204F5B0 ; =DUNGEON_DATA_LIST - movhs r0, #0x30 - ldrlob r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_0204F5B0: .word DUNGEON_DATA_LIST - arm_func_end GetNbFloors - - arm_func_start GetNbFloorsPlusOne -GetNbFloorsPlusOne: ; 0x0204F5B4 - stmdb sp!, {r3, lr} - bl GetNbFloors - add r0, r0, #1 - and r0, r0, #0xff - ldmia sp!, {r3, pc} - arm_func_end GetNbFloorsPlusOne - - arm_func_start GetDungeonGroup -GetDungeonGroup: ; 0x0204F5C8 - cmp r0, #0xb4 - ldrlo r1, _0204F5DC ; =_0209E3A1 - movhs r0, #0x35 - ldrlob r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_0204F5DC: .word _0209E3A1 - arm_func_end GetDungeonGroup - - arm_func_start GetNbPrecedingFloors -GetNbPrecedingFloors: ; 0x0204F5E0 - cmp r0, #0xb4 - ldrlo r1, _0204F5F4 ; =_0209E3A2 - movhs r0, #0 - ldrlob r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_0204F5F4: .word _0209E3A2 - arm_func_end GetNbPrecedingFloors - - arm_func_start GetNbFloorsDungeonGroup -GetNbFloorsDungeonGroup: ; 0x0204F5F8 - cmp r0, #0xb4 - ldrlo r1, _0204F60C ; =_0209E3A3 - movhs r0, #0 - ldrlob r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_0204F60C: .word _0209E3A3 - arm_func_end GetNbFloorsDungeonGroup - - arm_func_start sub_0204F610 -sub_0204F610: ; 0x0204F610 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r4, #0xb4 - movhs r0, #0 - ldmhsia sp!, {r4, pc} - bl GetMaxMembersAllowed - cmp r0, #1 - bne _0204F644 - mov r0, r4 - bl IsRecruitingAllowed - cmp r0, #0 - moveq r0, #1 - ldmeqia sp!, {r4, pc} -_0204F644: - mov r0, #0 - ldmia sp!, {r4, pc} - arm_func_end sub_0204F610 - - arm_func_start DungeonFloorToGroupFloor -DungeonFloorToGroupFloor: ; 0x0204F64C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r0 - ldrb r0, [r5] - cmp r0, #0xb4 - blo _0204F690 - cmp r0, #0xbd - bhi _0204F690 - mov r0, #0x35 - strb r0, [r4] - ldrb r0, [r5] - ldrb r1, [r5, #1] - sub r0, r0, #0xb4 - add r0, r0, r0, lsl #2 - add r0, r1, r0 - strb r0, [r4, #1] - ldmia sp!, {r3, r4, r5, pc} -_0204F690: - cmp r0, #0xbe - bne _0204F6B0 - mov r0, #0x35 - strb r0, [r4] - ldrb r0, [r5, #1] - add r0, r0, #0x32 - strb r0, [r4, #1] - ldmia sp!, {r3, r4, r5, pc} -_0204F6B0: - cmp r0, #0xbf - blo _0204F6D8 - cmp r0, #0xd3 - bhi _0204F6D8 - mov r0, #0x35 - strb r0, [r4] - ldrb r0, [r5, #1] - add r0, r0, #0x33 - strb r0, [r4, #1] - ldmia sp!, {r3, r4, r5, pc} -_0204F6D8: - bl GetDungeonGroup - strb r0, [r4] - ldrb r0, [r5] - bl GetNbPrecedingFloors - ldrb r1, [r5, #1] - add r0, r1, r0 - strb r0, [r4, #1] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DungeonFloorToGroupFloor - - arm_func_start sub_0204F6F8 -sub_0204F6F8: ; 0x0204F6F8 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, r1 - mov r1, r2 - bl sub_0204F77C - cmp r5, #3 - addls pc, pc, r5, lsl #2 - b _0204F770 -_0204F718: ; jump table - b _0204F728 ; case 0 - b _0204F734 ; case 1 - b _0204F74C ; case 2 - b _0204F760 ; case 3 -_0204F728: - bl GetGroundNameId - mov r4, r0 - b _0204F770 -_0204F734: - bl GetGroundNameId -#ifdef JAPAN - add r0, r0, #3 - add r0, r0, #0x100 -#else - ldr r1, _0204F778 ; =0xFFFFFEFD - add r0, r0, r1 -#endif - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - b _0204F770 -_0204F74C: -#if defined(EUROPE) - add r0, r0, #0xbe - add r0, r0, #0x4300 -#elif defined(JAPAN) - add r0, r0, #0x26c - add r0, r0, #0x400 -#else - add r0, r0, #0x3bc - add r0, r0, #0x4000 -#endif - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 - b _0204F770 -_0204F760: -#if defined(EUROPE) - add r0, r0, #0xbd - add r0, r0, #0x4200 -#elif defined(JAPAN) - add r0, r0, #0x6f - add r0, r0, #0x700 -#else - add r0, r0, #0xbb - add r0, r0, #0x4200 -#endif - mov r0, r0, lsl #0x10 - mov r4, r0, lsr #0x10 -_0204F770: - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#ifndef JAPAN -_0204F778: .word 0xFFFFFEFD -#endif - arm_func_end sub_0204F6F8 - - arm_func_start sub_0204F77C -sub_0204F77C: ; 0x0204F77C - stmdb sp!, {r3, r4, r5, lr} - movs r4, r1 - mov r5, r0 - beq _0204F7A0 - cmp r5, #0xae - bne _0204F7A0 - bl GetNbFloorsDungeonGroup - cmp r4, r0 - moveq r5, #0x7f -_0204F7A0: - mov r0, r5 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_0204F77C - - arm_func_start sub_0204F7A8 -sub_0204F7A8: ; 0x0204F7A8 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrb r0, [r4] - cmp r0, #0xb4 - movhs r0, #1 - bhs _0204F808 - bl GetNbFloors - add r1, r0, #1 - ldrb r0, [r4, #1] - and r1, r1, #0xff - cmp r0, r1 - movhs r0, #1 - bhs _0204F808 - add r0, sp, #0 - mov r1, r4 - bl DungeonFloorToGroupFloor - ldrb r2, [sp] - cmp r2, #0x64 - movhs r0, #1 - ldrlo r1, _0204F810 ; =MISSION_FLOOR_RANKS_PTRS - ldrlob r0, [sp, #1] - ldrlo r1, [r1, r2, lsl #2] - ldrlob r0, [r1, r0] -_0204F808: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_0204F810: .word MISSION_FLOOR_RANKS_PTRS - arm_func_end sub_0204F7A8 - - arm_func_start GetMissionRank -GetMissionRank: ; 0x0204F814 - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - ldrb r0, [r4] - cmp r0, #0xb4 - movhs r0, #1 - bhs _0204F880 - bl GetNbFloors - add r1, r0, #1 - ldrb r0, [r4, #1] - and r1, r1, #0xff - cmp r0, r1 - movhs r0, #1 - bhs _0204F880 - add r0, sp, #0 - mov r1, r4 - bl DungeonFloorToGroupFloor - ldrb r2, [sp] - cmp r2, #0x64 - movhs r0, #1 - bhs _0204F880 - ldrb r1, [sp, #1] - ldr r0, _0204F888 ; =MISSION_FLOOR_RANKS_PTRS - cmp r1, #1 - ldr r0, [r0, r2, lsl #2] - movle r1, #2 - ldrb r0, [r0, r1] -_0204F880: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_0204F888: .word MISSION_FLOOR_RANKS_PTRS - arm_func_end GetMissionRank - - arm_func_start GetOutlawLevel -GetOutlawLevel: ; 0x0204F88C - stmdb sp!, {r3, lr} - bl GetMissionRank - ldr r1, _0204F8A4 ; =OUTLAW_LEVEL_TABLE - mov r0, r0, lsl #1 - ldrsh r0, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204F8A4: .word OUTLAW_LEVEL_TABLE - arm_func_end GetOutlawLevel - - arm_func_start GetOutlawLeaderLevel -GetOutlawLeaderLevel: ; 0x0204F8A8 - stmdb sp!, {r3, lr} - bl GetMissionRank - ldr r1, _0204F8C0 ; =OUTLAW_LEVEL_TABLE - mov r0, r0, lsl #1 - ldrsh r0, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204F8C0: .word OUTLAW_LEVEL_TABLE - arm_func_end GetOutlawLeaderLevel - - arm_func_start GetOutlawMinionLevel -GetOutlawMinionLevel: ; 0x0204F8C4 - stmdb sp!, {r3, lr} - bl GetMissionRank - ldr r1, _0204F8DC ; =OUTLAW_MINION_LEVEL_TABLE - mov r0, r0, lsl #1 - ldrsh r0, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204F8DC: .word OUTLAW_MINION_LEVEL_TABLE - arm_func_end GetOutlawMinionLevel - - arm_func_start AddGuestMonster -AddGuestMonster: ; 0x0204F8E0 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #0x3c - add lr, sp, #0x18 - mov r5, r0 - mov r4, r1 - mov r6, r2 - mov ip, #2 -_0204F8FC: - ldmia r6!, {r0, r1, r2, r3} - stmia lr!, {r0, r1, r2, r3} - subs ip, ip, #1 - bne _0204F8FC - ldr r1, [r6] - mov r0, #1 - str r1, [lr] - strb r0, [r5, #0xf] - ldrsh r0, [sp, #0x1c] - bl GetNameString - mov r1, r0 - add r0, sp, #0 - mov r2, #0xa - bl StrncpyName - add r2, sp, #0 - add r1, r5, #0x1c - mov r0, #0x44 - mla r0, r4, r0, r1 - add r1, sp, #0x18 - str r2, [sp, #0x18] - bl GuestMonsterToGroundMonster - add sp, sp, #0x3c - ldmia sp!, {r3, r4, r5, r6, pc} - arm_func_end AddGuestMonster - - arm_func_start GetGroundNameId -GetGroundNameId: ; 0x0204F958 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r4, #6 - bne _0204F980 - mov r0, #0x1b - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - bne _0204F99C - ldr r0, _0204F9B0 ; =0x000042B9 - ldmia sp!, {r4, pc} -_0204F980: - cmp r4, #0x15 - bne _0204F99C - mov r0, #0x1c - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 -#ifdef JAPAN - moveq r0, #0x1c4 -#else - ldreq r0, _0204F9B4 ; =0x000042BA -#endif - ldmeqia sp!, {r4, pc} -_0204F99C: -#if defined(EUROPE) - add r0, r4, #0xba - add r0, r0, #0x4100 -#elif defined(JAPAN) - add r0, r4, #0xc2 -#else - add r0, r4, #0x1b8 - add r0, r0, #0x4000 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r4, pc} - .align 2, 0 -#if defined(EUROPE) -_0204F9B0: .word 0x000042BB -_0204F9B4: .word 0x000042BC -#elif defined(JAPAN) -_0204F9B0: .word 0x000001C3 -#else -_0204F9B0: .word 0x000042B9 -_0204F9B4: .word 0x000042BA -#endif - arm_func_end GetGroundNameId - - arm_func_start sub_0204F9B8 -sub_0204F9B8: ; 0x0204F9B8 - ldr ip, _0204F9C4 ; =ResetPlayTimer - ldr r0, _0204F9C8 ; =PLAY_TIME_SECONDS - bx ip - .align 2, 0 -_0204F9C4: .word ResetPlayTimer -_0204F9C8: .word PLAY_TIME_SECONDS - arm_func_end sub_0204F9B8 - - arm_func_start sub_0204F9CC -sub_0204F9CC: ; 0x0204F9CC - ldr ip, _0204F9D8 ; =PlayTimerTick - ldr r0, _0204F9DC ; =PLAY_TIME_SECONDS - bx ip - .align 2, 0 -_0204F9D8: .word PlayTimerTick -_0204F9DC: .word PLAY_TIME_SECONDS - arm_func_end sub_0204F9CC - - arm_func_start sub_0204F9E0 -sub_0204F9E0: ; 0x0204F9E0 - ldr ip, _0204F9EC ; =GetPlayTimeSeconds - ldr r0, _0204F9F0 ; =PLAY_TIME_SECONDS - bx ip - .align 2, 0 -_0204F9EC: .word GetPlayTimeSeconds -_0204F9F0: .word PLAY_TIME_SECONDS - arm_func_end sub_0204F9E0 - - arm_func_start sub_0204F9F4 -sub_0204F9F4: ; 0x0204F9F4 - ldr ip, _0204FA04 ; =sub_02050E5C - mov r1, r0 - ldr r0, _0204FA08 ; =PLAY_TIME_SECONDS - bx ip - .align 2, 0 -_0204FA04: .word sub_02050E5C -_0204FA08: .word PLAY_TIME_SECONDS - arm_func_end sub_0204F9F4 - - arm_func_start sub_0204FA0C -sub_0204FA0C: ; 0x0204FA0C - ldr ip, _0204FA1C ; =sub_02050E8C - mov r1, r0 - ldr r0, _0204FA20 ; =PLAY_TIME_SECONDS - bx ip - .align 2, 0 -_0204FA1C: .word sub_02050E8C -_0204FA20: .word PLAY_TIME_SECONDS - arm_func_end sub_0204FA0C - - arm_func_start SetAdventureLogStructLocation -SetAdventureLogStructLocation: ; 0x0204FA24 - ldr r1, _0204FA34 ; =_022AB69C - ldr r0, _0204FA38 ; =ADVENTURE_LOG_PTR - str r1, [r0] - bx lr - .align 2, 0 -_0204FA34: .word _022AB69C -_0204FA38: .word ADVENTURE_LOG_PTR - arm_func_end SetAdventureLogStructLocation - - arm_func_start SetAdventureLogDungeonFloor -SetAdventureLogDungeonFloor: ; 0x0204FA3C - ldr r1, _0204FA58 ; =ADVENTURE_LOG_PTR - ldrb r2, [r0] - ldr r1, [r1] - strb r2, [r1, #0x278] - ldrb r0, [r0, #1] - strb r0, [r1, #0x279] - bx lr - .align 2, 0 -_0204FA58: .word ADVENTURE_LOG_PTR - arm_func_end SetAdventureLogDungeonFloor - - arm_func_start GetAdventureLogDungeonFloor -GetAdventureLogDungeonFloor: ; 0x0204FA5C - ldr r0, _0204FA6C ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - add r0, r0, #0x278 - bx lr - .align 2, 0 -_0204FA6C: .word ADVENTURE_LOG_PTR - arm_func_end GetAdventureLogDungeonFloor - - arm_func_start ClearAdventureLogStruct -ClearAdventureLogStruct: ; 0x0204FA70 - mov r3, #0 - ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR - mov r0, r3 -_0204FA7C: - ldr r2, [r1] - str r0, [r2, r3, lsl #2] - add r3, r3, #1 - cmp r3, #4 - blt _0204FA7C - ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR - mov r3, #0 - ldr r2, [r1] - str r0, [r2, #0x2c] - ldr r2, [r1] - str r0, [r2, #0x30] - ldr r2, [r1] - str r0, [r2, #0x34] - ldr r2, [r1] - str r0, [r2, #0x28] - ldr r2, [r1] - str r0, [r2, #0x10] - ldr r2, [r1] - str r0, [r2, #0x14] - ldr r2, [r1] - str r0, [r2, #0x18] - ldr r2, [r1] - str r0, [r2, #0x1c] - ldr r2, [r1] - str r0, [r2, #0x20] - ldr r2, [r1] - str r0, [r2, #0x24] - ldr r2, [r1] - str r0, [r2, #0x38] - ldr r2, [r1] - str r0, [r2, #0x3c] - ldr r2, [r1] - str r0, [r2, #0x40] -_0204FB00: - ldr r2, [r1] - add r2, r2, r0, lsl #2 - str r3, [r2, #0x44] - ldr r2, [r1] - add r2, r2, r0, lsl #2 - add r0, r0, #1 - str r3, [r2, #0xd8] - cmp r0, #0x25 - blt _0204FB00 - ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR - mov r2, #0 -_0204FB2C: - ldr r1, [r0] - add r1, r1, r3, lsl #2 - add r3, r3, #1 - str r2, [r1, #0x16c] - cmp r3, #0x11 - blt _0204FB2C - ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR - mov ip, #0 -_0204FB4C: - ldr r1, [r0] - add r1, r1, r2, lsl #2 - add r2, r2, #1 - str ip, [r1, #0x1b0] - cmp r2, #0x2c - blt _0204FB4C - ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR - ldr r0, [r1] - str ip, [r0, #0x260] - mov r0, #0x3e8 -_0204FB74: - rsb r2, ip, #5 - mul r3, r2, r0 - ldr r2, [r1] - add r2, r2, ip, lsl #2 - add ip, ip, #1 - str r3, [r2, #0x264] - cmp ip, #5 - blt _0204FB74 - bx lr - .align 2, 0 -_0204FB98: .word ADVENTURE_LOG_PTR - arm_func_end ClearAdventureLogStruct - - arm_func_start SetAdventureLogCompleted -SetAdventureLogCompleted: ; 0x0204FB9C - ldr r1, _0204FBC0 ; =ADVENTURE_LOG_PTR - mov r3, r0, asr #5 - ldr ip, [r1] - and r0, r0, #0x1f - ldr r2, [ip, r3, lsl #2] - mov r1, #1 - orr r0, r2, r1, lsl r0 - str r0, [ip, r3, lsl #2] - bx lr - .align 2, 0 -_0204FBC0: .word ADVENTURE_LOG_PTR - arm_func_end SetAdventureLogCompleted - - arm_func_start IsAdventureLogNotEmpty -IsAdventureLogNotEmpty: ; 0x0204FBC4 - ldr r0, _0204FBF8 ; =ADVENTURE_LOG_PTR - mov r1, #0 - ldr r2, [r0] - b _0204FBE8 -_0204FBD4: - ldr r0, [r2, r1, lsl #2] - cmp r0, #0 - movne r0, #1 - bxne lr - add r1, r1, #1 -_0204FBE8: - cmp r1, #4 - blt _0204FBD4 - mov r0, #0 - bx lr - .align 2, 0 -_0204FBF8: .word ADVENTURE_LOG_PTR - arm_func_end IsAdventureLogNotEmpty - - arm_func_start GetAdventureLogCompleted -GetAdventureLogCompleted: ; 0x0204FBFC - ldr r1, _0204FC24 ; =ADVENTURE_LOG_PTR - mov r2, r0, asr #5 - ldr r1, [r1] - and r3, r0, #0x1f - ldr r0, [r1, r2, lsl #2] - mov r1, #1 - tst r0, r1, lsl r3 - moveq r1, #0 - and r0, r1, #0xff - bx lr - .align 2, 0 -_0204FC24: .word ADVENTURE_LOG_PTR - arm_func_end GetAdventureLogCompleted - - arm_func_start IncrementNbDungeonsCleared -IncrementNbDungeonsCleared: ; 0x0204FC28 - ldr r0, _0204FC64 ; =ADVENTURE_LOG_PTR - ldr r1, _0204FC68 ; =0x000F423F - ldr r3, [r0] - ldr r2, [r3, #0x10] - add r2, r2, #1 - str r2, [r3, #0x10] - ldr r3, [r0] - ldr r2, [r3] - orr r2, r2, #0x10 - str r2, [r3] - ldr r2, [r0] - ldr r0, [r2, #0x10] - cmp r0, r1 - strgt r1, [r2, #0x10] - bx lr - .align 2, 0 -_0204FC64: .word ADVENTURE_LOG_PTR -_0204FC68: .word 0x000F423F - arm_func_end IncrementNbDungeonsCleared - - arm_func_start GetNbDungeonsCleared -GetNbDungeonsCleared: ; 0x0204FC6C - ldr r0, _0204FC7C ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x10] - bx lr - .align 2, 0 -_0204FC7C: .word ADVENTURE_LOG_PTR - arm_func_end GetNbDungeonsCleared - - arm_func_start IncrementNbFriendRescues -IncrementNbFriendRescues: ; 0x0204FC80 - ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR - ldr r1, _0204FCC4 ; =0x000F423F - ldr r3, [r0] - ldr r2, [r3, #0x14] - add r2, r2, #1 - str r2, [r3, #0x14] - ldr r2, [r0] - ldr r0, [r2, #0x14] - cmp r0, r1 - ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR - strgt r1, [r2, #0x14] - ldr r1, [r0] - ldr r0, [r1] - orr r0, r0, #0x40 - str r0, [r1] - bx lr - .align 2, 0 -_0204FCC0: .word ADVENTURE_LOG_PTR -_0204FCC4: .word 0x000F423F - arm_func_end IncrementNbFriendRescues - - arm_func_start GetNbFriendRescues -GetNbFriendRescues: ; 0x0204FCC8 - ldr r0, _0204FCD8 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x14] - bx lr - .align 2, 0 -_0204FCD8: .word ADVENTURE_LOG_PTR - arm_func_end GetNbFriendRescues - - arm_func_start IncrementNbEvolutions -IncrementNbEvolutions: ; 0x0204FCDC - ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR - ldr r1, _0204FD20 ; =0x000F423F - ldr r3, [r0] - ldr r2, [r3, #0x18] - add r2, r2, #1 - str r2, [r3, #0x18] - ldr r2, [r0] - ldr r0, [r2, #0x18] - cmp r0, r1 - ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR - strgt r1, [r2, #0x18] - ldr r1, [r0] - ldr r0, [r1] - orr r0, r0, #0x80 - str r0, [r1] - bx lr - .align 2, 0 -_0204FD1C: .word ADVENTURE_LOG_PTR -_0204FD20: .word 0x000F423F - arm_func_end IncrementNbEvolutions - - arm_func_start GetNbEvolutions -GetNbEvolutions: ; 0x0204FD24 - ldr r0, _0204FD34 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x18] - bx lr - .align 2, 0 -_0204FD34: .word ADVENTURE_LOG_PTR - arm_func_end GetNbEvolutions - - arm_func_start IncrementNbSteals -IncrementNbSteals: ; 0x0204FD38 - bx lr - arm_func_end IncrementNbSteals - - arm_func_start IncrementNbEggsHatched -IncrementNbEggsHatched: ; 0x0204FD3C - ldr r1, _0204FD70 ; =ADVENTURE_LOG_PTR - ldr r0, _0204FD74 ; =0x000F423F - ldr r2, [r1] - ldr r1, [r2, #0x1c] - cmp r1, r0 - addlt r0, r1, #1 - strlt r0, [r2, #0x1c] - ldr r0, _0204FD70 ; =ADVENTURE_LOG_PTR - ldr r1, [r0] - ldr r0, [r1] - orr r0, r0, #0x100 - str r0, [r1] - bx lr - .align 2, 0 -_0204FD70: .word ADVENTURE_LOG_PTR -_0204FD74: .word 0x000F423F - arm_func_end IncrementNbEggsHatched - - arm_func_start GetNbEggsHatched -GetNbEggsHatched: ; 0x0204FD78 - ldr r0, _0204FD88 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x1c] - bx lr - .align 2, 0 -_0204FD88: .word ADVENTURE_LOG_PTR - arm_func_end GetNbEggsHatched - - arm_func_start GetNbPokemonJoined -GetNbPokemonJoined: ; 0x0204FD8C - ldr r0, _0204FD9C ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x2c] - bx lr - .align 2, 0 -_0204FD9C: .word ADVENTURE_LOG_PTR - arm_func_end GetNbPokemonJoined - - arm_func_start GetNbMovesLearned -GetNbMovesLearned: ; 0x0204FDA0 - ldr r0, _0204FDB0 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x34] - bx lr - .align 2, 0 -_0204FDB0: .word ADVENTURE_LOG_PTR - arm_func_end GetNbMovesLearned - - arm_func_start SetVictoriesOnOneFloor -SetVictoriesOnOneFloor: ; 0x0204FDB4 - ldr r1, _0204FDE0 ; =0x000F423F - cmp r0, r1 - movgt r0, r1 - ldr r1, _0204FDE4 ; =ADVENTURE_LOG_PTR - ldr r2, [r1] - str r0, [r2, #0x28] - ldr r1, [r1] - ldr r0, [r1] - orr r0, r0, #0x200 - str r0, [r1] - bx lr - .align 2, 0 -_0204FDE0: .word 0x000F423F -_0204FDE4: .word ADVENTURE_LOG_PTR - arm_func_end SetVictoriesOnOneFloor - - arm_func_start GetVictoriesOnOneFloor -GetVictoriesOnOneFloor: ; 0x0204FDE8 - ldr r0, _0204FDF8 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x28] - bx lr - .align 2, 0 -_0204FDF8: .word ADVENTURE_LOG_PTR - arm_func_end GetVictoriesOnOneFloor - - arm_func_start SetPokemonJoined -SetPokemonJoined: ; 0x0204FDFC - stmdb sp!, {r3, lr} - bl GetDexNumberVeneer - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r3, _0204FE54 ; =ADVENTURE_LOG_PTR - mov r1, r0, asr #4 - ldr lr, [r3] - add r1, r0, r1, lsr #27 - ldr ip, [lr] - mov r2, r0, lsr #0x1f - orr ip, ip, #1 - str ip, [lr] - ldr r3, [r3] - rsb r0, r2, r0, lsl #27 - add lr, r3, #0x44 - mov ip, r1, asr #5 - ldr r3, [lr, ip, lsl #2] - add r0, r2, r0, ror #27 - mov r1, #1 - orr r0, r3, r1, lsl r0 - str r0, [lr, ip, lsl #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204FE54: .word ADVENTURE_LOG_PTR - arm_func_end SetPokemonJoined - - arm_func_start SetPokemonBattled -SetPokemonBattled: ; 0x0204FE58 - stmdb sp!, {r3, lr} - bl GetDexNumberVeneer - cmp r0, #0 - ldmeqia sp!, {r3, pc} - ldr r3, _0204FEB0 ; =ADVENTURE_LOG_PTR - mov r1, r0, asr #4 - ldr lr, [r3] - add r1, r0, r1, lsr #27 - ldr ip, [lr] - mov r2, r0, lsr #0x1f - orr ip, ip, #2 - str ip, [lr] - ldr r3, [r3] - rsb r0, r2, r0, lsl #27 - add lr, r3, #0xd8 - mov ip, r1, asr #5 - ldr r3, [lr, ip, lsl #2] - add r0, r2, r0, ror #27 - mov r1, #1 - orr r0, r3, r1, lsl r0 - str r0, [lr, ip, lsl #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_0204FEB0: .word ADVENTURE_LOG_PTR - arm_func_end SetPokemonBattled - - arm_func_start GetNbPokemonBattled -GetNbPokemonBattled: ; 0x0204FEB4 - ldr r0, _0204FEC4 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x30] - bx lr - .align 2, 0 -_0204FEC4: .word ADVENTURE_LOG_PTR - arm_func_end GetNbPokemonBattled - - arm_func_start IncrementNbBigTreasureWins -IncrementNbBigTreasureWins: ; 0x0204FEC8 - ldr r0, _0204FEE0 ; =ADVENTURE_LOG_PTR - ldr ip, _0204FEE4 ; =SetNbBigTreasureWins - ldr r0, [r0] - ldr r0, [r0, #0x38] - add r0, r0, #1 - bx ip - .align 2, 0 -_0204FEE0: .word ADVENTURE_LOG_PTR -_0204FEE4: .word SetNbBigTreasureWins - arm_func_end IncrementNbBigTreasureWins - - arm_func_start SetNbBigTreasureWins -SetNbBigTreasureWins: ; 0x0204FEE8 - ldr r2, _0204FF18 ; =ADVENTURE_LOG_PTR - ldr r1, _0204FF1C ; =0x000F423F - ldr r3, [r2] - cmp r0, r1 - ldr r2, [r3] - movgt r0, r1 - orr r2, r2, #0x400 - ldr r1, _0204FF18 ; =ADVENTURE_LOG_PTR - str r2, [r3] - ldr r1, [r1] - str r0, [r1, #0x38] - bx lr - .align 2, 0 -_0204FF18: .word ADVENTURE_LOG_PTR -_0204FF1C: .word 0x000F423F - arm_func_end SetNbBigTreasureWins - - arm_func_start GetNbBigTreasureWins -GetNbBigTreasureWins: ; 0x0204FF20 - ldr r0, _0204FF30 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x38] - bx lr - .align 2, 0 -_0204FF30: .word ADVENTURE_LOG_PTR - arm_func_end GetNbBigTreasureWins - - arm_func_start SetNbRecycled -SetNbRecycled: ; 0x0204FF34 - ldr r2, _0204FF64 ; =ADVENTURE_LOG_PTR - ldr r1, _0204FF68 ; =0x000F423F - ldr r3, [r2] - cmp r0, r1 - ldr r2, [r3] - movgt r0, r1 - orr r2, r2, #0x800 - ldr r1, _0204FF64 ; =ADVENTURE_LOG_PTR - str r2, [r3] - ldr r1, [r1] - str r0, [r1, #0x3c] - bx lr - .align 2, 0 -_0204FF64: .word ADVENTURE_LOG_PTR -_0204FF68: .word 0x000F423F - arm_func_end SetNbRecycled - - arm_func_start GetNbRecycled -GetNbRecycled: ; 0x0204FF6C - ldr r0, _0204FF7C ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x3c] - bx lr - .align 2, 0 -_0204FF7C: .word ADVENTURE_LOG_PTR - arm_func_end GetNbRecycled - - arm_func_start IncrementNbSkyGiftsSent -IncrementNbSkyGiftsSent: ; 0x0204FF80 - ldr r0, _0204FF98 ; =ADVENTURE_LOG_PTR - ldr ip, _0204FF9C ; =SetNbSkyGiftsSent - ldr r0, [r0] - ldr r0, [r0, #0x40] - add r0, r0, #1 - bx ip - .align 2, 0 -_0204FF98: .word ADVENTURE_LOG_PTR -_0204FF9C: .word SetNbSkyGiftsSent - arm_func_end IncrementNbSkyGiftsSent - - arm_func_start SetNbSkyGiftsSent -SetNbSkyGiftsSent: ; 0x0204FFA0 - ldr r2, _0204FFD0 ; =ADVENTURE_LOG_PTR - ldr r1, _0204FFD4 ; =0x000F423F - ldr r3, [r2] - cmp r0, r1 - ldr r2, [r3] - movgt r0, r1 - orr r2, r2, #0x1000 - ldr r1, _0204FFD0 ; =ADVENTURE_LOG_PTR - str r2, [r3] - ldr r1, [r1] - str r0, [r1, #0x40] - bx lr - .align 2, 0 -_0204FFD0: .word ADVENTURE_LOG_PTR -_0204FFD4: .word 0x000F423F - arm_func_end SetNbSkyGiftsSent - - arm_func_start GetNbSkyGiftsSent -GetNbSkyGiftsSent: ; 0x0204FFD8 - ldr r0, _0204FFE8 ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x40] - bx lr - .align 2, 0 -_0204FFE8: .word ADVENTURE_LOG_PTR - arm_func_end GetNbSkyGiftsSent - - arm_func_start ComputeSpecialCounters -ComputeSpecialCounters: ; 0x0204FFEC - stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} - mov r4, #0 - mov r8, r4 -_0204FFF8: - mov r0, #0x44 - mul sl, r8, r0 - ldr r0, _0205022C ; =TEAM_MEMBER_TABLE_PTR - ldr r0, [r0] - ldrb r0, [r0, sl] - tst r0, #1 - movne r0, #1 - moveq r0, #0 - tst r0, #0xff - beq _0205009C - mov sb, #0 - mov r7, #1 - ldr r3, _02050230 ; =ADVENTURE_LOG_PTR - ldr ip, _0205022C ; =TEAM_MEMBER_TABLE_PTR - mov fp, sb - mov lr, r7 - mov r2, #6 -_0205003C: - mul r1, sb, r2 - ldr r0, [ip] - add r0, r0, sl - add r5, r0, #0x22 - ldrb r0, [r5, r1] - add r1, r5, r1 - tst r0, #1 - movne r0, r7 - moveq r0, fp - tst r0, #0xff - beq _02050090 - ldrh r0, [r1, #2] - ldr r5, [r3] - mov r1, r0, lsr #5 - add r6, r5, r1, lsl #2 - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #27 - ldr r5, [r6, #0x16c] - add r0, r1, r0, ror #27 - orr r0, r5, lr, lsl r0 - str r0, [r6, #0x16c] -_02050090: - add sb, sb, #1 - cmp sb, #4 - blt _0205003C -_0205009C: - ldr r0, _02050234 ; =0x0000022B - add r8, r8, #1 - cmp r8, r0 - blt _0204FFF8 - mov r6, #0 - add r5, r0, #0x258 -_020500B4: - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetDexNumberVeneer - add r6, r6, #1 - cmp r6, r5 - blt _020500B4 - mov r7, #0 - ldr r5, _02050230 ; =ADVENTURE_LOG_PTR - ldr sb, _02050238 ; =0x0000021F - mov r8, r7 - mov r6, #1 -_020500E0: - mov r0, r8, lsl #0x10 - mov r0, r0, lsr #0x10 - bl IsRealMove - cmp r0, #0 - beq _02050120 - mov r0, r8, asr #4 - add r0, r8, r0, lsr #27 - ldr r2, [r5] - mov r0, r0, asr #5 - add r2, r2, r0, lsl #2 - mov r1, r8, lsr #0x1f - rsb r0, r1, r8, lsl #27 - ldr r2, [r2, #0x16c] - add r0, r1, r0, ror #27 - tst r2, r6, lsl r0 - addne r7, r7, #1 -_02050120: - add r8, r8, #1 - cmp r8, sb - blt _020500E0 - cmp r7, #0 - ble _02050150 - ldr r0, _02050230 ; =ADVENTURE_LOG_PTR - ldr r1, [r0] - str r7, [r1, #0x34] - ldr r1, [r0] - ldr r0, [r1] - orr r0, r0, #4 - str r0, [r1] -_02050150: - mov sb, #1 - ldr r5, _02050230 ; =ADVENTURE_LOG_PTR - ldr sl, _0205023C ; =0x00000483 - mov r8, #0 - mov r6, sb -_02050164: - mov r0, sb, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetBaseFormCastformCherrimDeoxys - mov r7, r0 - bl GetDexNumberVeneer - cmp r0, #0 - beq _020501B4 - mov r1, r0, asr #4 - add r1, r0, r1, lsr #27 - ldr r3, [r5] - mov r2, r1, asr #5 - mov r1, r0, lsr #0x1f - add r2, r3, r2, lsl #2 - rsb r0, r1, r0, lsl #27 - ldr r2, [r2, #0x44] - add r0, r1, r0, ror #27 - tst r2, r6, lsl r0 - beq _020501B4 - mov r0, r7 - bl RecruitSpecialPokemonLog -_020501B4: - add sb, sb, #1 - cmp sb, sl - blt _02050164 - ldr r0, _02050230 ; =ADVENTURE_LOG_PTR - mov r2, #1 - ldr r1, [r0] - ldr r3, _02050240 ; =0x000001ED - mov r0, r2 -_020501D4: - mov r5, r2, asr #4 - add r5, r2, r5, lsr #27 - mov sb, r5, asr #5 - mov r6, r2, lsr #0x1f - rsb r5, r6, r2, lsl #27 - add r7, r1, sb, lsl #2 - add r6, r6, r5, ror #27 - add r5, r1, sb, lsl #2 - ldr r7, [r7, #0x44] - ldr r5, [r5, #0xd8] - tst r7, r0, lsl r6 - addne r8, r8, #1 - tst r5, r0, lsl r6 - add r2, r2, #1 - addne r4, r4, #1 - cmp r2, r3 - blt _020501D4 - ldr r0, _02050230 ; =ADVENTURE_LOG_PTR - str r8, [r1, #0x2c] - ldr r0, [r0] - str r4, [r0, #0x30] - ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0205022C: .word TEAM_MEMBER_TABLE_PTR -_02050230: .word ADVENTURE_LOG_PTR -_02050234: .word 0x0000022B -_02050238: .word 0x0000021F -_0205023C: .word 0x00000483 -_02050240: .word 0x000001ED - arm_func_end ComputeSpecialCounters - - arm_func_start RecruitSpecialPokemonLog -RecruitSpecialPokemonLog: ; 0x02050244 - stmdb sp!, {r3, lr} - cmp r0, #0x258 - subge r0, r0, #0x258 - movge r0, r0, lsl #0x10 - ldr r2, _020502AC ; =ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS - mov r3, #0 - movge r0, r0, asr #0x10 -_02050260: - mov r1, r3, lsl #1 - ldrsh r1, [r2, r1] - cmp r1, #0 - ldmeqia sp!, {r3, pc} - cmp r1, #0xc9 - bne _0205028C - cmp r0, #0xc9 - blt _02050294 - cmp r0, #0xe4 - ble _0205029C - b _02050294 -_0205028C: - cmp r1, r0 - beq _0205029C -_02050294: - add r3, r3, #1 - b _02050260 -_0205029C: - add r0, r3, #0x24 - and r0, r0, #0xff - bl SetAdventureLogCompleted - ldmia sp!, {r3, pc} - .align 2, 0 -_020502AC: .word ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS - arm_func_end RecruitSpecialPokemonLog - - arm_func_start IncrementNbFainted -IncrementNbFainted: ; 0x020502B0 - ldr r1, _020502E4 ; =ADVENTURE_LOG_PTR - ldr r0, _020502E8 ; =0x000F423F - ldr r2, [r1] - ldr r1, [r2, #0x24] - cmp r1, r0 - addlt r0, r1, #1 - strlt r0, [r2, #0x24] - ldr r0, _020502E4 ; =ADVENTURE_LOG_PTR - ldr r1, [r0] - ldr r0, [r1] - orr r0, r0, #0x20 - str r0, [r1] - bx lr - .align 2, 0 -_020502E4: .word ADVENTURE_LOG_PTR -_020502E8: .word 0x000F423F - arm_func_end IncrementNbFainted - - arm_func_start GetNbFainted -GetNbFainted: ; 0x020502EC - ldr r0, _020502FC ; =ADVENTURE_LOG_PTR - ldr r0, [r0] - ldr r0, [r0, #0x24] - bx lr - .align 2, 0 -_020502FC: .word ADVENTURE_LOG_PTR - arm_func_end GetNbFainted - - arm_func_start SetItemAcquired -SetItemAcquired: ; 0x02050300 - stmdb sp!, {r4, r5, r6, lr} - ldrsh r0, [r0, #4] - bl NormalizeTreasureBox - mov r4, r0 - mov r0, r4, lsl #0x10 - mov r0, r0, asr #0x10 - bl IsItemValidVeneer - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - cmp r4, #0x3b - blt _02050380 - cmp r4, #0x41 - bgt _02050380 - sub r0, r4, #0x21 - and r0, r0, #0xff - mov r5, #1 - bl SetAdventureLogCompleted - mov r6, #0x1a - b _02050364 -_0205034C: - and r0, r6, #0xff - bl GetAdventureLogCompleted - cmp r0, #0 - moveq r5, #0 - beq _0205036C - add r6, r6, #1 -_02050364: - cmp r6, #0x20 - ble _0205034C -_0205036C: - cmp r5, #0 - beq _02050380 - mov r0, #0x15 - mov r1, #1 - bl SetResolvedPerformanceProgressFlag -_02050380: - ldr r3, _020503C8 ; =ADVENTURE_LOG_PTR - mov r0, r4, asr #4 - ldr ip, [r3] - add r0, r4, r0, lsr #27 - mov r2, r4, lsr #0x1f - rsb r1, r2, r4, lsl #27 - add lr, ip, #0x1b0 - mov ip, r0, asr #5 - ldr r4, [lr, ip, lsl #2] - add r0, r2, r1, ror #27 - mov r1, #1 - orr r0, r4, r1, lsl r0 - str r0, [lr, ip, lsl #2] - ldr r1, [r3] - ldr r0, [r1] - orr r0, r0, #8 - str r0, [r1] - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_020503C8: .word ADVENTURE_LOG_PTR - arm_func_end SetItemAcquired - - arm_func_start GetNbItemAcquired -GetNbItemAcquired: ; 0x020503CC - stmdb sp!, {r4, lr} - ldr r1, _0205041C ; =ADVENTURE_LOG_PTR - mov r0, #0 - ldr r4, [r1] - mov lr, r0 - mov ip, #1 -_020503E4: - mov r1, lr, asr #4 - add r1, lr, r1, lsr #27 - mov r1, r1, asr #5 - add r3, r4, r1, lsl #2 - mov r2, lr, lsr #0x1f - rsb r1, r2, lr, lsl #27 - ldr r3, [r3, #0x1b0] - add r1, r2, r1, ror #27 - tst r3, ip, lsl r1 - add lr, lr, #1 - addne r0, r0, #1 - cmp lr, #0x580 - blt _020503E4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0205041C: .word ADVENTURE_LOG_PTR - arm_func_end GetNbItemAcquired - - arm_func_start SetChallengeLetterCleared -SetChallengeLetterCleared: ; 0x02050420 - stmdb sp!, {r4, lr} - ldr r3, _020504A0 ; =ADVENTURE_LOG_PTR - mov r2, r0, lsr #0x1f - ldr ip, [r3] - rsb r1, r2, r0, lsl #27 - mov lr, r0, lsr #5 - add r4, ip, #0x260 - ldr ip, [r4, lr, lsl #2] - add r1, r2, r1, ror #27 - mov r0, #1 - orr r1, ip, r0, lsl r1 - str r1, [r4, lr, lsl #2] - ldr r4, [r3] - mov ip, r0 - b _02050488 -_0205045C: - mov r1, r0, asr #4 - add r1, r0, r1, lsr #27 - mov r1, r1, asr #5 - add r3, r4, r1, lsl #2 - mov r2, r0, lsr #0x1f - rsb r1, r2, r0, lsl #27 - ldr r3, [r3, #0x260] - add r1, r2, r1, ror #27 - tst r3, ip, lsl r1 - ldmeqia sp!, {r4, pc} - add r0, r0, #1 -_02050488: - cmp r0, #6 - blt _0205045C - ldr r0, [r4, #4] - orr r0, r0, #4 - str r0, [r4, #4] - ldmia sp!, {r4, pc} - .align 2, 0 -_020504A0: .word ADVENTURE_LOG_PTR - arm_func_end SetChallengeLetterCleared - - arm_func_start GetSentryDutyGamePoints -GetSentryDutyGamePoints: ; 0x020504A4 - ldr r1, _020504B8 ; =ADVENTURE_LOG_PTR - ldr r1, [r1] - add r0, r1, r0, lsl #2 - ldr r0, [r0, #0x264] - bx lr - .align 2, 0 -_020504B8: .word ADVENTURE_LOG_PTR - arm_func_end GetSentryDutyGamePoints - - arm_func_start SetSentryDutyGamePoints -SetSentryDutyGamePoints: ; 0x020504BC - stmdb sp!, {r3, lr} - ldr r1, _02050548 ; =ADVENTURE_LOG_PTR - mov lr, #0 - ldr r2, [r1] - b _020504EC -_020504D0: - add r1, r2, lr, lsl #2 - ldr r1, [r1, #0x264] - cmp r0, r1 - bhi _020504F4 - add r1, lr, #1 - mov r1, r1, lsl #0x10 - mov lr, r1, asr #0x10 -_020504EC: - cmp lr, #5 - blt _020504D0 -_020504F4: - cmp lr, #5 - mvnge r0, #0 - ldmgeia sp!, {r3, pc} - mov ip, #4 - ldr r2, _02050548 ; =ADVENTURE_LOG_PTR - b _02050528 -_0205050C: - ldr r3, [r2] - sub r1, ip, #1 - add ip, r3, ip, lsl #2 - ldr r3, [ip, #0x260] - mov r1, r1, lsl #0x10 - str r3, [ip, #0x264] - mov ip, r1, asr #0x10 -_02050528: - cmp ip, lr - bgt _0205050C - ldr r1, _02050548 ; =ADVENTURE_LOG_PTR - ldr r1, [r1] - add r1, r1, lr, lsl #2 - str r0, [r1, #0x264] - mov r0, lr - ldmia sp!, {r3, pc} - .align 2, 0 -_02050548: .word ADVENTURE_LOG_PTR - arm_func_end SetSentryDutyGamePoints - - arm_func_start CopyLogTo -CopyLogTo: ; 0x0205054C - stmdb sp!, {r4, lr} - mov r4, r0 - bl ComputeSpecialCounters - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x14 - add r1, r1, #0x10 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x14 - add r1, r1, #0x14 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x14 - add r1, r1, #0x18 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x80 - ldr r1, [r1] - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0xe - ldr r1, [r1] - add r1, r1, #0x2c - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0xe - ldr r1, [r1] - add r1, r1, #0x30 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #9 - ldr r1, [r1] - add r1, r1, #0x34 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x28 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x24 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x1c - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x38 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x3c - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x40 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x4a0 - ldr r1, [r1] - add r1, r1, #0x44 - bl CopyBitsTo - mov r0, r4 - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r2, #0x4a0 - ldr r1, [r1] - add r1, r1, #0xd8 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x220 - add r1, r1, #0x16c - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x580 - add r1, r1, #0x1b0 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x20 - add r1, r1, #0x260 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0xa0 - add r1, r1, #0x264 - bl CopyBitsTo - ldr r1, _02050734 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x278 - bl sub_020515C4 - ldmia sp!, {r4, pc} - .align 2, 0 -_02050734: .word ADVENTURE_LOG_PTR - arm_func_end CopyLogTo - - arm_func_start CopyLogFrom -CopyLogFrom: ; 0x02050738 - stmdb sp!, {r4, lr} - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - mov r4, r0 - add r1, r1, #0x10 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x14 - add r1, r1, #0x14 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x14 - add r1, r1, #0x18 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x80 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0xe - add r1, r1, #0x2c - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0xe - ldr r1, [r1] - add r1, r1, #0x30 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #9 - ldr r1, [r1] - add r1, r1, #0x34 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x28 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x24 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x1c - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x38 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x3c - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x14 - ldr r1, [r1] - add r1, r1, #0x40 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x4a0 - ldr r1, [r1] - add r1, r1, #0x44 - bl CopyBitsFrom - mov r0, r4 - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r2, #0x4a0 - ldr r1, [r1] - add r1, r1, #0xd8 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x220 - add r1, r1, #0x16c - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x580 - add r1, r1, #0x1b0 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0x20 - add r1, r1, #0x260 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - mov r2, #0xa0 - add r1, r1, #0x264 - bl CopyBitsFrom - ldr r1, _02050918 ; =ADVENTURE_LOG_PTR - mov r0, r4 - ldr r1, [r1] - add r1, r1, #0x278 - bl Copy16BitsFrom - ldmia sp!, {r4, pc} - .align 2, 0 -_02050918: .word ADVENTURE_LOG_PTR - arm_func_end CopyLogFrom - - arm_func_start GetAbilityString -GetAbilityString: ; 0x0205091C -#if defined(EUROPE) - add r1, r1, #0x5e0 - add r1, r1, #0x3000 -#elif defined(JAPAN) - add r1, r1, #0x81 - add r1, r1, #0x4800 -#else - add r1, r1, #0xde - add r1, r1, #0x3500 -#endif - mov r1, r1, lsl #0x10 - ldr ip, _02050938 ; =CopyNStringFromId - mov r1, r1, lsr #0x10 - mov r2, #0x50 - bx ip - .align 2, 0 -_02050938: .word CopyNStringFromId - arm_func_end GetAbilityString - - arm_func_start GetAbilityDescStringId -GetAbilityDescStringId: ; 0x0205093C -#if defined(EUROPE) - add r0, r0, #0x25c - add r0, r0, #0x3400 -#elif defined(JAPAN) - add r0, r0, #0xfd - add r0, r0, #0x4800 -#else - add r0, r0, #0x5a - add r0, r0, #0x3600 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - arm_func_end GetAbilityDescStringId - - arm_func_start GetTypeStringId -GetTypeStringId: ; 0x02050950 -#if defined(EUROPE) - add r0, r0, #0xcd - add r0, r0, #0x3500 -#elif defined(JAPAN) - add r0, r0, #0x6e - add r0, r0, #0x4800 -#else - add r0, r0, #0xcb - add r0, r0, #0x3500 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bx lr - arm_func_end GetTypeStringId - - arm_func_start GetConversion2ConvertToType -GetConversion2ConvertToType: ; 0x02050964 - ldr r1, _02050970 ; =_020A192C - ldrb r0, [r1, r0] - bx lr - .align 2, 0 -_02050970: .word _020A192C - arm_func_end GetConversion2ConvertToType - - arm_func_start sub_02050974 -sub_02050974: ; 0x02050974 - str r1, [r0] - mov r3, #0 - str r3, [r0, #8] - str r3, [r0, #0xc] - add r1, r1, r2 - str r1, [r0, #4] - bx lr - arm_func_end sub_02050974 - - arm_func_start sub_02050990 -sub_02050990: ; 0x02050990 - str r1, [r0] - mov r3, #0 - str r3, [r0, #8] - str r3, [r0, #0xc] - add r3, r1, r2 - str r3, [r0, #4] - mov r0, r1 - ldr ip, _020509B8 ; =MemZero - mov r1, r2 - bx ip - .align 2, 0 -_020509B8: .word MemZero - arm_func_end sub_02050990 - - arm_func_start sub_020509BC -sub_020509BC: ; 0x020509BC - bx lr - arm_func_end sub_020509BC - - arm_func_start CopyBitsTo -CopyBitsTo: ; 0x020509C0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov ip, #0 - mov r3, #1 - mov r5, ip - mov r4, ip - b _02050A34 -_020509D8: - ldrb r6, [r1] - sub r2, r2, #1 - tst r6, r3, lsl ip - ldrne r7, [r0] - ldrne lr, [r0, #8] - ldrneb r6, [r7] - add ip, ip, #1 - orrne r6, r6, r3, lsl lr - strneb r6, [r7] - ldr lr, [r0, #8] - cmp ip, #8 - add lr, lr, #1 - moveq ip, r5 - addeq r1, r1, #1 - str lr, [r0, #8] - cmp lr, #8 - ldreq lr, [r0] - addeq lr, lr, #1 - streq lr, [r0] - streq r4, [r0, #8] - ldr lr, [r0, #0xc] - add lr, lr, #1 - str lr, [r0, #0xc] -_02050A34: - cmp r2, #0 - bne _020509D8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyBitsTo - - arm_func_start CopyBitsFrom -CopyBitsFrom: ; 0x02050A40 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov lr, #0 - mov ip, lr - mov r3, #1 - mov r6, lr - mov r5, lr - b _02050AC0 -_02050A5C: - cmp lr, #0 - streqb ip, [r1] - ldr r7, [r0] - ldr r4, [r0, #8] - ldrb r7, [r7] - sub r2, r2, #1 - tst r7, r3, lsl r4 - ldrneb r4, [r1] - orrne r4, r4, r3, lsl lr - strneb r4, [r1] - ldr r4, [r0, #8] - add lr, lr, #1 - cmp lr, #8 - add r4, r4, #1 - moveq lr, r6 - addeq r1, r1, #1 - str r4, [r0, #8] - cmp r4, #8 - ldreq r4, [r0] - addeq r4, r4, #1 - streq r4, [r0] - streq r5, [r0, #8] - ldr r4, [r0, #0xc] - add r4, r4, #1 - str r4, [r0, #0xc] -_02050AC0: - cmp r2, #0 - bne _02050A5C - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyBitsFrom - - arm_func_start StoreDefaultTeamData -StoreDefaultTeamData: ; 0x02050ACC - stmdb sp!, {lr} - sub sp, sp, #0x14 -#ifdef JAPAN - ldr r1, _02050E54 ; =0x000004C5 - add r0, sp, #0 -#else - add r0, sp, #0 - mov r1, #0x234 -#endif - bl GetStringFromFileVeneer - ldr r0, _02050B08 ; =TEAM_NAME - add r1, sp, #0 -#ifdef JAPAN - mov r2, #5 -#else - mov r2, #0xa -#endif - bl StrncpyName - ldr r0, _02050B0C ; =TEAM_NAME - mov r1, #0 -#ifdef JAPAN - str r1, [r0, #8] - strb r1, [r0, #0xc] -#else - str r1, [r0, #0xc] - strb r1, [r0, #0x10] -#endif - add sp, sp, #0x14 - ldmia sp!, {pc} - .align 2, 0 -#ifdef JAPAN -_02050E54: .word 0x000004C5 -#endif -_02050B08: .word TEAM_NAME -_02050B0C: .word TEAM_NAME - arm_func_end StoreDefaultTeamData - - arm_func_start GetMainTeamNameWithCheck -GetMainTeamNameWithCheck: ; 0x02050B10 - stmdb sp!, {r4, lr} - sub sp, sp, #0x40 - mov r4, r0 - mov r0, #1 - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - ldrne r0, _02050B70 ; =TEAM_NAME - ldrneb r0, [r0] - cmpne r0, #0 - beq _02050B4C - ldr r1, _02050B74 ; =TEAM_NAME - mov r0, r4 -#ifdef JAPAN - mov r2, #5 -#else - mov r2, #0xa -#endif - bl StrncpySimpleNoPad - b _02050B68 -_02050B4C: - ldr r1, _02050B78 ; =0x00000237 - add r0, sp, #0 - bl GetStringFromFileVeneer - add r1, sp, #0 - mov r0, r4 -#ifdef JAPAN - mov r2, #5 -#else - mov r2, #0xa -#endif - bl StrncpyName -_02050B68: - add sp, sp, #0x40 - ldmia sp!, {r4, pc} - .align 2, 0 -_02050B70: .word TEAM_NAME -_02050B74: .word TEAM_NAME -#ifdef JAPAN -_02050B78: .word 0x000004C8 -#else -_02050B78: .word 0x00000237 -#endif - arm_func_end GetMainTeamNameWithCheck - - arm_func_start GetMainTeamName -GetMainTeamName: ; 0x02050B7C - ldr ip, _02050B8C ; =StrncpySimpleNoPadSafe - ldr r1, _02050B90 ; =TEAM_NAME -#ifdef JAPAN - mov r2, #5 -#else - mov r2, #0xa -#endif - bx ip - .align 2, 0 -_02050B8C: .word StrncpySimpleNoPadSafe -_02050B90: .word TEAM_NAME - arm_func_end GetMainTeamName - - arm_func_start SetMainTeamName -SetMainTeamName: ; 0x02050B94 - ldr r1, _02050BB4 ; =TEAM_NAME - mov r3, #0 -_02050B9C: - ldrb r2, [r0], #1 - strb r2, [r1, r3] - add r3, r3, #1 -#ifdef JAPAN - cmp r3, #5 -#else - cmp r3, #0xa -#endif - blt _02050B9C - bx lr - .align 2, 0 -_02050BB4: .word TEAM_NAME - arm_func_end SetMainTeamName - - arm_func_start GetRankupPoints -GetRankupPoints: ; 0x02050BB8 - stmdb sp!, {r4, lr} - bl GetRank - mov r4, r0 - mov r0, #0x16 - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - beq _02050BE4 - cmp r4, #0xc - bne _02050BF0 - mov r0, #0 - ldmia sp!, {r4, pc} -_02050BE4: - cmp r4, #8 - movhs r0, #0 - ldmhsia sp!, {r4, pc} -_02050BF0: - mov r0, r4 - bl GetRankUpEntry - ldr r1, _02050C0C ; =TEAM_NAME - ldr r2, [r0, #4] -#ifdef JAPAN - ldr r0, [r1, #8] -#else - ldr r0, [r1, #0xc] -#endif - sub r0, r2, r0 - ldmia sp!, {r4, pc} - .align 2, 0 -_02050C0C: .word TEAM_NAME - arm_func_end GetRankupPoints - - arm_func_start sub_02050C10 -sub_02050C10: ; 0x02050C10 -#ifdef JAPAN -#define SUB_02050C10_OFFSET #8 -#else -#define SUB_02050C10_OFFSET #0xc -#endif - stmdb sp!, {r3, lr} - ldr r1, _02050C6C ; =TEAM_NAME - ldr r2, [r1, SUB_02050C10_OFFSET] - add r2, r2, r0 - mov r0, #0x16 - str r2, [r1, SUB_02050C10_OFFSET] - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - beq _02050C4C - ldr r0, _02050C6C ; =TEAM_NAME - ldr r1, _02050C70 ; =0x05F5E0FF - ldr r2, [r0, SUB_02050C10_OFFSET] - cmp r2, r1 - strgt r1, [r0, SUB_02050C10_OFFSET] - ldmia sp!, {r3, pc} -_02050C4C: - mov r0, #7 - bl GetRankUpEntry - ldr r1, _02050C6C ; =TEAM_NAME - ldr r2, [r0, #4] - ldr r0, [r1, SUB_02050C10_OFFSET] - cmp r0, r2 - strgt r2, [r1, SUB_02050C10_OFFSET] - ldmia sp!, {r3, pc} - .align 2, 0 -_02050C6C: .word TEAM_NAME -_02050C70: .word 0x05F5E0FF - arm_func_end sub_02050C10 - - arm_func_start GetRank -GetRank: ; 0x02050C74 - stmdb sp!, {r3, r4, r5, lr} - mov r5, #0 - ldr r4, _02050CCC ; =TEAM_NAME - b _02050CA4 -_02050C84: - mov r0, r5 - bl GetRankUpEntry -#ifdef JAPAN - ldr r1, [r4, #8] -#else - ldr r1, [r4, #0xc] -#endif - ldr r0, [r0, #4] - cmp r1, r0 - blt _02050CAC - add r0, r5, #1 - and r5, r0, #0xff -_02050CA4: - cmp r5, #0xc - blo _02050C84 -_02050CAC: - mov r0, #0x16 - bl GetResolvedPerformanceProgressFlag - cmp r0, #0 - bne _02050CC4 - cmp r5, #8 - movhi r5, #8 -_02050CC4: - mov r0, r5 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02050CCC: .word TEAM_NAME - arm_func_end GetRank - - arm_func_start sub_02050CD0 -sub_02050CD0: ; 0x02050CD0 - stmdb sp!, {r3, lr} - bl GetRank - cmp r0, #8 - movhi r0, #8 - ldmia sp!, {r3, pc} - arm_func_end sub_02050CD0 - - arm_func_start GetRankStorageSize -GetRankStorageSize: ; 0x02050CE4 - stmdb sp!, {r3, lr} - bl GetRank - bl GetRankUpEntry - ldr r0, [r0, #8] - ldmia sp!, {r3, pc} - arm_func_end GetRankStorageSize - - arm_func_start sub_02050CF8 -sub_02050CF8: ; 0x02050CF8 - stmdb sp!, {r3, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #0 - mov r1, r3 - bl sub_02050990 - ldr r1, _02050D70 ; =TEAM_NAME - add r0, sp, #0 -#ifdef JAPAN - mov r2, #0x28 -#else - mov r2, #0x50 -#endif - bl CopyBitsTo - ldr r1, _02050D74 ; =_022AB924 - add r0, sp, #0 - mov r2, #0x20 - bl CopyBitsTo - mov r0, #1 - bl GetResolvedPerformanceProgressFlag - ldr r1, _02050D78 ; =TEAM_NAME - tst r0, #0xff -#ifdef JAPAN - strb r0, [r1, #0xc] -#else - strb r0, [r1, #0x10] -#endif - ldrne r1, _02050D7C ; =ARM9_UNKNOWN_DATA__NA_209E6BC - add r0, sp, #0 - ldreq r1, _02050D80 ; =_0209E6BD - mov r2, #1 - bl CopyBitsTo - add r0, sp, #0 - bl sub_020509BC - ldr r0, [sp, #8] - add sp, sp, #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -_02050D70: .word TEAM_NAME -_02050D74: .word _022AB924 -_02050D78: .word TEAM_NAME -_02050D7C: .word ARM9_UNKNOWN_DATA__NA_209E6BC -_02050D80: .word _0209E6BD - arm_func_end sub_02050CF8 - - arm_func_start sub_02050D84 -sub_02050D84: ; 0x02050D84 - stmdb sp!, {lr} - sub sp, sp, #0x14 - mov r3, r0 - mov r2, r1 - add r0, sp, #4 - mov r1, r3 - bl sub_02050974 - ldr r1, _02050DFC ; =TEAM_NAME - add r0, sp, #4 -#ifdef JAPAN - mov r2, #0x28 -#else - mov r2, #0x50 -#endif - bl CopyBitsFrom - ldr r1, _02050E00 ; =_022AB924 - add r0, sp, #4 - mov r2, #0x20 - bl CopyBitsFrom - add r0, sp, #4 - add r1, sp, #0 - mov r2, #1 - bl CopyBitsFrom - ldrb r0, [sp] - ldr r1, _02050E04 ; =TEAM_NAME - tst r0, #1 - movne r2, #1 - moveq r2, #0 - add r0, sp, #4 -#ifdef JAPAN - strb r2, [r1, #0xc] -#else - strb r2, [r1, #0x10] -#endif - bl sub_020509BC - ldr r0, [sp, #0xc] - add sp, sp, #0x14 - ldmia sp!, {pc} - .align 2, 0 -_02050DFC: .word TEAM_NAME -_02050E00: .word _022AB924 -_02050E04: .word TEAM_NAME - arm_func_end sub_02050D84 - - arm_func_start ResetPlayTimer -ResetPlayTimer: ; 0x02050E08 - mov r1, #0 - strb r1, [r0, #4] - str r1, [r0] - bx lr - arm_func_end ResetPlayTimer - - arm_func_start PlayTimerTick -PlayTimerTick: ; 0x02050E18 - ldrb r1, [r0, #4] - add r2, r1, #1 - and r1, r2, #0xff - strb r2, [r0, #4] - cmp r1, #0x3c - bxlo lr - mov r1, #0 - strb r1, [r0, #4] - ldr r2, [r0] - ldr r1, _02050E50 ; =0x022550FF - cmp r2, r1 - addlo r1, r2, #1 - strlo r1, [r0] - bx lr - .align 2, 0 -_02050E50: .word 0x022550FF - arm_func_end PlayTimerTick - - arm_func_start GetPlayTimeSeconds -GetPlayTimeSeconds: ; 0x02050E54 - ldr r0, [r0] - bx lr - arm_func_end GetPlayTimeSeconds - - arm_func_start sub_02050E5C -sub_02050E5C: ; 0x02050E5C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, r4 - add r1, r5, #4 - mov r2, #6 - bl CopyBitsTo - mov r0, r4 - mov r1, r5 - mov r2, #0x20 - bl CopyBitsTo - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02050E5C - - arm_func_start sub_02050E8C -sub_02050E8C: ; 0x02050E8C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r0, r4 - add r1, r5, #4 - mov r2, #6 - bl CopyBitsFrom - mov r0, r4 - mov r1, r5 - mov r2, #0x20 - bl CopyBitsFrom - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02050E8C - - arm_func_start sub_02050EBC -sub_02050EBC: ; 0x02050EBC - stmdb sp!, {r0, r1, r2, r3} - ldrsh r3, [sp, #2] - ldrsh r0, [sp, #6] - ldrsh r2, [sp] - ldrsh r1, [sp, #4] - add r0, r3, r0 - strh r0, [sp, #2] - ldrsh r0, [sp, #2] - add r1, r2, r1 - strh r1, [sp] - cmp r0, #0x3e8 - subge r0, r0, #0x3e8 - ldrgesh r1, [sp] - strgeh r0, [sp, #2] - addge r0, r1, #1 - strgeh r0, [sp] - ldrh r1, [sp, #2] - ldrh r0, [sp] - orr r0, r0, r1, lsl #16 - add sp, sp, #0x10 - bx lr - arm_func_end sub_02050EBC - - arm_func_start SubFixedPoint -SubFixedPoint: ; 0x02050F10 - stmdb sp!, {r0, r1, r2, r3} - ldrsh r3, [sp, #2] - ldrsh r0, [sp, #6] - ldrsh r2, [sp] - ldrsh r1, [sp, #4] - sub r0, r3, r0 - strh r0, [sp, #2] - ldrsh r0, [sp, #2] - sub r1, r2, r1 - strh r1, [sp] - cmp r0, #0 - addlt r0, r0, #0x3e8 - ldrltsh r1, [sp] - strlth r0, [sp, #2] - sublt r0, r1, #1 - strlth r0, [sp] - ldrsh r0, [sp] - cmp r0, #0 - movlt r0, #0 - strlth r0, [sp, #2] - strlth r0, [sp] - ldrh r1, [sp, #2] - ldrh r0, [sp] - orr r0, r0, r1, lsl #16 - add sp, sp, #0x10 - bx lr - arm_func_end SubFixedPoint - - arm_func_start sub_02050F78 -sub_02050F78: ; 0x02050F78 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3} - sub sp, sp, #4 - ldrsh r1, [sp, #8] - ldrsh r0, [sp, #0xc] - cmp r1, r0 - ldrgth r1, [sp, #0xe] - ldrgth r0, [sp, #0xc] - orrgt r0, r0, r1, lsl #16 - bgt _02050FE8 - ldrlth r1, [sp, #0xa] - ldrlth r0, [sp, #8] - orrlt r0, r0, r1, lsl #16 - blt _02050FE8 - ldrsh r1, [sp, #0xa] - ldrsh r0, [sp, #0xe] - cmp r1, r0 - ldrgth r1, [sp, #0xc] - ldrgth r0, [sp, #0xe] - strgth r1, [sp] - strgth r0, [sp, #2] - ldrleh r1, [sp, #8] - ldrleh r0, [sp, #0xa] - strleh r1, [sp] - strleh r0, [sp, #2] - ldrh r1, [sp, #2] - ldrh r0, [sp] - orr r0, r0, r1, lsl #16 -_02050FE8: - add sp, sp, #4 - ldmia sp!, {r3} - add sp, sp, #0x10 - bx lr - arm_func_end sub_02050F78 - - arm_func_start sub_02050FF8 -sub_02050FF8: ; 0x02050FF8 - stmdb sp!, {r3} - sub sp, sp, #4 - strh r0, [sp] - ldrh r0, [sp] - mov r1, #0 - strh r1, [sp, #2] - orr r0, r0, r1, lsl #16 - add sp, sp, #4 - ldmia sp!, {r3} - bx lr - arm_func_end sub_02050FF8 - - arm_func_start BinToDecFixedPoint -BinToDecFixedPoint: ; 0x02051020 - stmdb sp!, {r3} - sub sp, sp, #4 - ldr r2, [r0, #4] - mov r1, #0x3e8 - mov r0, r2, lsl #0x10 - mov r0, r0, lsr #0x10 - mul r1, r0, r1 - mov r2, r2, lsr #0x10 - mov r0, r1, lsr #0x10 - strh r2, [sp] - strh r0, [sp, #2] - ldrh r1, [sp, #2] - ldrh r0, [sp] - orr r0, r0, r1, lsl #16 - add sp, sp, #4 - ldmia sp!, {r3} - bx lr - arm_func_end BinToDecFixedPoint diff --git a/asm/main_0204EFE0.s b/asm/main_0204EFE0.s new file mode 100644 index 00000000..e965a9fb --- /dev/null +++ b/asm/main_0204EFE0.s @@ -0,0 +1,2810 @@ + .include "asm/macros.inc" + .include "main_0204EFE0.inc" + + .text + + arm_func_start IsNoLossPenaltyDungeon +IsNoLossPenaltyDungeon: ; 0x0204EFE0 + stmdb sp!, {r4, lr} + cmp r0, #0x1a + mov r4, #0 + cmpne r0, #0x79 + beq _0204F000 + cmp r0, #0x7d + beq _0204F008 + b _0204F01C +_0204F000: + mov r4, #1 + b _0204F01C +_0204F008: + mov r0, r4 + mov r1, #0x10 + bl LoadScriptVariableValue + cmp r0, #0 + moveq r4, #1 +_0204F01C: + mov r0, r4 + ldmia sp!, {r4, pc} + arm_func_end IsNoLossPenaltyDungeon + + arm_func_start sub_0204F024 +sub_0204F024: ; 0x0204F024 + ldr r1, _0204F030 ; =PENDING_DUNGEON_ID + strb r0, [r1, #0xe] + bx lr + .align 2, 0 +_0204F030: .word PENDING_DUNGEON_ID + arm_func_end sub_0204F024 + + arm_func_start sub_0204F034 +sub_0204F034: ; 0x0204F034 + stmdb sp!, {r3, lr} + mov r0, #0 + mov r1, #0x28 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x18 + mov r0, r0, asr #0x18 + ldmia sp!, {r3, pc} + arm_func_end sub_0204F034 + + arm_func_start sub_0204F050 +sub_0204F050: ; 0x0204F050 + stmdb sp!, {r3, lr} + mov r0, #0 + mov r1, #0x27 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + mvn r1, #0 + cmp r0, r1 + cmpne r0, #0xd6 + ldmeqia sp!, {r3, pc} + cmp r0, #0xd7 + cmpeq r0, #0xd9 + cmpeq r0, #0xd8 + ldmeqia sp!, {r3, pc} + mov r0, #0 + mov r1, #0x29 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + ldmia sp!, {r3, pc} + arm_func_end sub_0204F050 + + arm_func_start sub_0204F0A0 +sub_0204F0A0: ; 0x0204F0A0 + stmdb sp!, {r3, lr} + mov r0, #0 + mov r1, #0x27 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mvn r1, #0 + cmp r1, r0, asr #16 + mov r0, r0, asr #0x10 + moveq r0, #0xff + ldmeqia sp!, {r3, pc} + cmp r0, #0xd6 + moveq r0, #0xd4 + ldmeqia sp!, {r3, pc} + sub r1, r0, #0xd7 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + cmp r1, #2 + bhi _0204F104 + mov r0, #0 + mov r1, #0x29 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 +_0204F104: + bl DungeonSwapIdxToId + ldmia sp!, {r3, pc} + arm_func_end sub_0204F0A0 + + arm_func_start sub_0204F10C +sub_0204F10C: ; 0x0204F10C + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + mov r1, #0x27 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r1, r0, asr #0x10 + mvn r0, #0 + cmp r1, r0 + cmpne r1, #0xd6 + cmpne r1, #0xd7 + cmpne r1, #0xd8 + cmpne r1, #0xd9 + movne r0, #1 + strneh r1, [r4] + mvneq r0, #0 + streqh r0, [r4] + moveq r0, #0 + ldmia sp!, {r4, pc} + arm_func_end sub_0204F10C + + arm_func_start sub_0204F158 +sub_0204F158: ; 0x0204F158 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + mov r1, #0x27 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + cmp r0, #0xd7 + bne _0204F1AC + mov r0, #0 + mov r1, #0x29 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl DungeonSwapIdxToId + cmp r0, #0xff + beq _0204F1AC + cmp r0, #0xb4 + strlob r0, [r4] + movlo r0, #1 + ldmloia sp!, {r4, pc} +_0204F1AC: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end sub_0204F158 + + arm_func_start sub_0204F1B4 +sub_0204F1B4: ; 0x0204F1B4 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, #0 + mov r1, #0x27 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + cmp r0, #0xd6 + mov r0, #0 + ldmneia sp!, {r4, pc} + mov r1, #0x29 + bl LoadScriptVariableValue + strb r0, [r4] + mov r0, #1 + ldmia sp!, {r4, pc} + arm_func_end sub_0204F1B4 + + arm_func_start sub_0204F1F0 +sub_0204F1F0: ; 0x0204F1F0 + stmdb sp!, {r3, r4, r5, lr} + movs r5, r0 + mov r4, r1 + beq _0204F22C + ldr lr, _0204F23C ; =_022AB5AC + mov ip, #0xe +_0204F208: + ldmia r5!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0204F208 + ldmia r5, {r0, r1} + ldr r2, _0204F240 ; =_022AB4F8 + stmia lr, {r0, r1} + strb r4, [r2, #1] + ldmia sp!, {r3, r4, r5, pc} +_0204F22C: + ldr r0, _0204F240 ; =_022AB4F8 + mov r1, #0 + strb r1, [r0, #1] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0204F23C: .word _022AB5AC +_0204F240: .word _022AB4F8 + arm_func_end sub_0204F1F0 + + arm_func_start sub_0204F244 +sub_0204F244: ; 0x0204F244 + stmdb sp!, {r4, lr} + movs r4, r0 + beq _0204F270 + ldr lr, _0204F27C ; =_022AB5AC + mov ip, #0xe +_0204F258: + ldmia lr!, {r0, r1, r2, r3} + stmia r4!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0204F258 + ldmia lr, {r0, r1} + stmia r4, {r0, r1} +_0204F270: + ldr r0, _0204F280 ; =_022AB4F8 + ldrb r0, [r0, #1] + ldmia sp!, {r4, pc} + .align 2, 0 +_0204F27C: .word _022AB5AC +_0204F280: .word _022AB4F8 + arm_func_end sub_0204F244 + + arm_func_start sub_0204F284 +sub_0204F284: ; 0x0204F284 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #8 + mov sl, r0 + add r0, sp, #0 + mov sb, r1 + bl GetPartyMembers + mov r6, r0 + mov r0, sl + bl GetMaxMembersAllowed + cmp r6, r0 + ble _0204F2C0 + cmp r0, #1 + ldreq r0, _0204F354 ; =0x00000301 + ldrne r0, _0204F358 ; =0x00000101 + b _0204F34C +_0204F2C0: + cmp sb, #0 + beq _0204F2D8 + add r0, r6, #1 + cmp r0, #4 + ldrgt r0, _0204F358 ; =0x00000101 + bgt _0204F34C +_0204F2D8: + mov r7, #0 + mov r8, r7 + add r5, sp, #0 + ldr r4, _0204F35C ; =TEAM_MEMBER_TABLE_PTR + mov fp, #0x44 + b _0204F310 +_0204F2F0: + mov r0, r8, lsl #1 + ldrsh r0, [r5, r0] + ldr r1, [r4] + smlabb r0, r0, fp, r1 + ldrsh r0, [r0, #4] + bl GetBodySize + add r7, r7, r0 + add r8, r8, #1 +_0204F310: + cmp r8, r6 + blt _0204F2F0 + cmp sb, #0 + beq _0204F32C + mov r0, sb + bl GetBodySize + add r7, r7, r0 +_0204F32C: + cmp r7, #6 + movgt r0, #0x81 + bgt _0204F34C + mov r0, sl + bl IsLevelResetDungeon + cmp r0, #0 + ldrne r0, _0204F360 ; =0x00002002 + moveq r0, #0 +_0204F34C: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0204F354: .word 0x00000301 +_0204F358: .word 0x00000101 +_0204F35C: .word TEAM_MEMBER_TABLE_PTR +_0204F360: .word 0x00002002 + arm_func_end sub_0204F284 + + arm_func_start sub_0204F364 +sub_0204F364: ; 0x0204F364 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, #0 + bl GetMaxItemsAllowed + mov r4, r0 + bl GetNbItemsInBag + cmp r4, #0 + ble _0204F39C + cmp r4, r0 + bge _0204F39C + orr r5, r5, #2 + cmp r4, #0 + orreq r5, r5, #0x800 + orrne r5, r5, #0x400 +_0204F39C: + mov r0, r6 + bl IsMoneyAllowed + cmp r0, #0 + bne _0204F3BC + bl GetMoneyCarried + cmp r0, #0 + orrgt r5, r5, #2 + orrgt r5, r5, #0x1000 +_0204F3BC: + mov r0, r5 + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_0204F364 + + arm_func_start CheckMissionRestrictions +CheckMissionRestrictions: ; 0x0204F3C4 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl GetGameMode + cmp r0, #2 + bne _0204F424 + mov r0, r5 + bl DungeonSwapIdToIdx + bl GetDungeonModeSpecial + cmp r0, #2 + bne _0204F424 + add r1, sp, #2 + add r2, sp, #0 + mov r0, r5 + bl sub_0205EE40 + cmp r0, #0 + beq _0204F424 + ldrsh r0, [sp] + cmp r0, #0 + movne r0, #0x21 + ldmneia sp!, {r3, r4, r5, pc} + ldrh r0, [sp, #2] + cmp r0, #0 + movne r0, #0x41 + ldmneia sp!, {r3, r4, r5, pc} +_0204F424: + cmp r5, #0x26 + cmpne r5, #0x29 + cmpne r5, #0x3f + cmpne r5, #0x63 + cmpne r5, #0x64 + cmpne r5, #0x65 + cmpne r5, #0x66 + cmpne r5, #0x67 + cmpne r5, #0x68 + cmpne r5, #0x6b + cmpne r5, #0x6c + cmpne r5, #0x6d + cmpne r5, #0x6e + cmpne r5, #0xae + ldreq r0, _0204F484 ; =0x00004001 + ldmeqia sp!, {r3, r4, r5, pc} + mov r0, r5 + mov r1, #0 + bl sub_0204F284 + mov r4, r0 + mov r0, r5 + bl sub_0204F364 + orr r0, r4, r0 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0204F484: .word 0x00004001 + arm_func_end CheckMissionRestrictions + + arm_func_start sub_0204F488 +sub_0204F488: ; 0x0204F488 + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr} + mov sb, r0 + mov r8, r1 + mov r7, r2 + bl DungeonSwapIdToIdx + mov r5, r0 + mov r0, sb + bl GetMaxReachedFloor + mov r6, r0 + mov r0, r5 + bl GetDungeonMode + mov r4, r0 + cmp r4, #1 + moveq r0, #0x11 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp r6, #1 + bge _0204F4EC + mov r0, r5 + bl sub_0204CEE0 + cmp r0, #0 + bne _0204F4EC + cmp r4, #3 + movne r0, #5 + moveq r0, #9 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} +_0204F4EC: + cmp r8, r6 + movgt r0, #9 + ldmgtia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + cmp sb, #0x26 + cmpne sb, #0x29 + cmpne sb, #0x3f + cmpne sb, #0x63 + cmpne sb, #0x64 + cmpne sb, #0x65 + cmpne sb, #0x66 + cmpne sb, #0x67 + cmpne sb, #0x68 + cmpne sb, #0x6b + cmpne sb, #0x6c + cmpne sb, #0x6d + cmpne sb, #0x6e + cmpne sb, #0xae + ldreq r0, _0204F558 ; =0x00004001 + ldmeqia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + mov r0, sb + mov r1, r7 + bl sub_0204F284 + mov r4, r0 + mov r0, sb + bl sub_0204F364 + orr r0, r4, r0 + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc} + .align 2, 0 +_0204F558: .word 0x00004001 + arm_func_end sub_0204F488 + + arm_func_start TilesetSecondaryTerrainIsChasm +TilesetSecondaryTerrainIsChasm: ; 0x0204F55C + ldr r1, _0204F578 ; =SECONDARY_TERRAIN_TYPES + ldrb r0, [r1, r0] + cmp r0, #2 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr + .align 2, 0 +_0204F578: .word SECONDARY_TERRAIN_TYPES + arm_func_end TilesetSecondaryTerrainIsChasm + + arm_func_start GetNbFloors +GetNbFloors: ; 0x0204F57C + cmp r0, #0xb4 + blo _0204F590 + cmp r0, #0xbd + movls r0, #5 + bxls lr +_0204F590: + cmp r0, #0xbe + moveq r0, #1 + bxeq lr + cmp r0, #0xbf + ldrlo r1, _0204F5B0 ; =DUNGEON_DATA_LIST + movhs r0, #0x30 + ldrlob r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_0204F5B0: .word DUNGEON_DATA_LIST + arm_func_end GetNbFloors + + arm_func_start GetNbFloorsPlusOne +GetNbFloorsPlusOne: ; 0x0204F5B4 + stmdb sp!, {r3, lr} + bl GetNbFloors + add r0, r0, #1 + and r0, r0, #0xff + ldmia sp!, {r3, pc} + arm_func_end GetNbFloorsPlusOne + + arm_func_start GetDungeonGroup +GetDungeonGroup: ; 0x0204F5C8 + cmp r0, #0xb4 + ldrlo r1, _0204F5DC ; =_0209E3A1 + movhs r0, #0x35 + ldrlob r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_0204F5DC: .word _0209E3A1 + arm_func_end GetDungeonGroup + + arm_func_start GetNbPrecedingFloors +GetNbPrecedingFloors: ; 0x0204F5E0 + cmp r0, #0xb4 + ldrlo r1, _0204F5F4 ; =_0209E3A2 + movhs r0, #0 + ldrlob r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_0204F5F4: .word _0209E3A2 + arm_func_end GetNbPrecedingFloors + + arm_func_start GetNbFloorsDungeonGroup +GetNbFloorsDungeonGroup: ; 0x0204F5F8 + cmp r0, #0xb4 + ldrlo r1, _0204F60C ; =_0209E3A3 + movhs r0, #0 + ldrlob r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_0204F60C: .word _0209E3A3 + arm_func_end GetNbFloorsDungeonGroup + + arm_func_start sub_0204F610 +sub_0204F610: ; 0x0204F610 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r4, #0xb4 + movhs r0, #0 + ldmhsia sp!, {r4, pc} + bl GetMaxMembersAllowed + cmp r0, #1 + bne _0204F644 + mov r0, r4 + bl IsRecruitingAllowed + cmp r0, #0 + moveq r0, #1 + ldmeqia sp!, {r4, pc} +_0204F644: + mov r0, #0 + ldmia sp!, {r4, pc} + arm_func_end sub_0204F610 + + arm_func_start DungeonFloorToGroupFloor +DungeonFloorToGroupFloor: ; 0x0204F64C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r4, r0 + ldrb r0, [r5] + cmp r0, #0xb4 + blo _0204F690 + cmp r0, #0xbd + bhi _0204F690 + mov r0, #0x35 + strb r0, [r4] + ldrb r0, [r5] + ldrb r1, [r5, #1] + sub r0, r0, #0xb4 + add r0, r0, r0, lsl #2 + add r0, r1, r0 + strb r0, [r4, #1] + ldmia sp!, {r3, r4, r5, pc} +_0204F690: + cmp r0, #0xbe + bne _0204F6B0 + mov r0, #0x35 + strb r0, [r4] + ldrb r0, [r5, #1] + add r0, r0, #0x32 + strb r0, [r4, #1] + ldmia sp!, {r3, r4, r5, pc} +_0204F6B0: + cmp r0, #0xbf + blo _0204F6D8 + cmp r0, #0xd3 + bhi _0204F6D8 + mov r0, #0x35 + strb r0, [r4] + ldrb r0, [r5, #1] + add r0, r0, #0x33 + strb r0, [r4, #1] + ldmia sp!, {r3, r4, r5, pc} +_0204F6D8: + bl GetDungeonGroup + strb r0, [r4] + ldrb r0, [r5] + bl GetNbPrecedingFloors + ldrb r1, [r5, #1] + add r0, r1, r0 + strb r0, [r4, #1] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DungeonFloorToGroupFloor + + arm_func_start sub_0204F6F8 +sub_0204F6F8: ; 0x0204F6F8 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, r1 + mov r1, r2 + bl sub_0204F77C + cmp r5, #3 + addls pc, pc, r5, lsl #2 + b _0204F770 +_0204F718: ; jump table + b _0204F728 ; case 0 + b _0204F734 ; case 1 + b _0204F74C ; case 2 + b _0204F760 ; case 3 +_0204F728: + bl GetGroundNameId + mov r4, r0 + b _0204F770 +_0204F734: + bl GetGroundNameId +#ifdef JAPAN + add r0, r0, #3 + add r0, r0, #0x100 +#else + ldr r1, _0204F778 ; =0xFFFFFEFD + add r0, r0, r1 +#endif + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + b _0204F770 +_0204F74C: +#if defined(EUROPE) + add r0, r0, #0xbe + add r0, r0, #0x4300 +#elif defined(JAPAN) + add r0, r0, #0x26c + add r0, r0, #0x400 +#else + add r0, r0, #0x3bc + add r0, r0, #0x4000 +#endif + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 + b _0204F770 +_0204F760: +#if defined(EUROPE) + add r0, r0, #0xbd + add r0, r0, #0x4200 +#elif defined(JAPAN) + add r0, r0, #0x6f + add r0, r0, #0x700 +#else + add r0, r0, #0xbb + add r0, r0, #0x4200 +#endif + mov r0, r0, lsl #0x10 + mov r4, r0, lsr #0x10 +_0204F770: + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#ifndef JAPAN +_0204F778: .word 0xFFFFFEFD +#endif + arm_func_end sub_0204F6F8 + + arm_func_start sub_0204F77C +sub_0204F77C: ; 0x0204F77C + stmdb sp!, {r3, r4, r5, lr} + movs r4, r1 + mov r5, r0 + beq _0204F7A0 + cmp r5, #0xae + bne _0204F7A0 + bl GetNbFloorsDungeonGroup + cmp r4, r0 + moveq r5, #0x7f +_0204F7A0: + mov r0, r5 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_0204F77C + + arm_func_start sub_0204F7A8 +sub_0204F7A8: ; 0x0204F7A8 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrb r0, [r4] + cmp r0, #0xb4 + movhs r0, #1 + bhs _0204F808 + bl GetNbFloors + add r1, r0, #1 + ldrb r0, [r4, #1] + and r1, r1, #0xff + cmp r0, r1 + movhs r0, #1 + bhs _0204F808 + add r0, sp, #0 + mov r1, r4 + bl DungeonFloorToGroupFloor + ldrb r2, [sp] + cmp r2, #0x64 + movhs r0, #1 + ldrlo r1, _0204F810 ; =MISSION_FLOOR_RANKS_PTRS + ldrlob r0, [sp, #1] + ldrlo r1, [r1, r2, lsl #2] + ldrlob r0, [r1, r0] +_0204F808: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_0204F810: .word MISSION_FLOOR_RANKS_PTRS + arm_func_end sub_0204F7A8 + + arm_func_start GetMissionRank +GetMissionRank: ; 0x0204F814 + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + ldrb r0, [r4] + cmp r0, #0xb4 + movhs r0, #1 + bhs _0204F880 + bl GetNbFloors + add r1, r0, #1 + ldrb r0, [r4, #1] + and r1, r1, #0xff + cmp r0, r1 + movhs r0, #1 + bhs _0204F880 + add r0, sp, #0 + mov r1, r4 + bl DungeonFloorToGroupFloor + ldrb r2, [sp] + cmp r2, #0x64 + movhs r0, #1 + bhs _0204F880 + ldrb r1, [sp, #1] + ldr r0, _0204F888 ; =MISSION_FLOOR_RANKS_PTRS + cmp r1, #1 + ldr r0, [r0, r2, lsl #2] + movle r1, #2 + ldrb r0, [r0, r1] +_0204F880: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_0204F888: .word MISSION_FLOOR_RANKS_PTRS + arm_func_end GetMissionRank + + arm_func_start GetOutlawLevel +GetOutlawLevel: ; 0x0204F88C + stmdb sp!, {r3, lr} + bl GetMissionRank + ldr r1, _0204F8A4 ; =OUTLAW_LEVEL_TABLE + mov r0, r0, lsl #1 + ldrsh r0, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204F8A4: .word OUTLAW_LEVEL_TABLE + arm_func_end GetOutlawLevel + + arm_func_start GetOutlawLeaderLevel +GetOutlawLeaderLevel: ; 0x0204F8A8 + stmdb sp!, {r3, lr} + bl GetMissionRank + ldr r1, _0204F8C0 ; =OUTLAW_LEVEL_TABLE + mov r0, r0, lsl #1 + ldrsh r0, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204F8C0: .word OUTLAW_LEVEL_TABLE + arm_func_end GetOutlawLeaderLevel + + arm_func_start GetOutlawMinionLevel +GetOutlawMinionLevel: ; 0x0204F8C4 + stmdb sp!, {r3, lr} + bl GetMissionRank + ldr r1, _0204F8DC ; =OUTLAW_MINION_LEVEL_TABLE + mov r0, r0, lsl #1 + ldrsh r0, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204F8DC: .word OUTLAW_MINION_LEVEL_TABLE + arm_func_end GetOutlawMinionLevel + + arm_func_start AddGuestMonster +AddGuestMonster: ; 0x0204F8E0 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #0x3c + add lr, sp, #0x18 + mov r5, r0 + mov r4, r1 + mov r6, r2 + mov ip, #2 +_0204F8FC: + ldmia r6!, {r0, r1, r2, r3} + stmia lr!, {r0, r1, r2, r3} + subs ip, ip, #1 + bne _0204F8FC + ldr r1, [r6] + mov r0, #1 + str r1, [lr] + strb r0, [r5, #0xf] + ldrsh r0, [sp, #0x1c] + bl GetNameString + mov r1, r0 + add r0, sp, #0 + mov r2, #0xa + bl StrncpyName + add r2, sp, #0 + add r1, r5, #0x1c + mov r0, #0x44 + mla r0, r4, r0, r1 + add r1, sp, #0x18 + str r2, [sp, #0x18] + bl GuestMonsterToGroundMonster + add sp, sp, #0x3c + ldmia sp!, {r3, r4, r5, r6, pc} + arm_func_end AddGuestMonster + + arm_func_start GetGroundNameId +GetGroundNameId: ; 0x0204F958 + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r4, #6 + bne _0204F980 + mov r0, #0x1b + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 + bne _0204F99C + ldr r0, _0204F9B0 ; =0x000042B9 + ldmia sp!, {r4, pc} +_0204F980: + cmp r4, #0x15 + bne _0204F99C + mov r0, #0x1c + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 +#ifdef JAPAN + moveq r0, #0x1c4 +#else + ldreq r0, _0204F9B4 ; =0x000042BA +#endif + ldmeqia sp!, {r4, pc} +_0204F99C: +#if defined(EUROPE) + add r0, r4, #0xba + add r0, r0, #0x4100 +#elif defined(JAPAN) + add r0, r4, #0xc2 +#else + add r0, r4, #0x1b8 + add r0, r0, #0x4000 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r4, pc} + .align 2, 0 +#if defined(EUROPE) +_0204F9B0: .word 0x000042BB +_0204F9B4: .word 0x000042BC +#elif defined(JAPAN) +_0204F9B0: .word 0x000001C3 +#else +_0204F9B0: .word 0x000042B9 +_0204F9B4: .word 0x000042BA +#endif + arm_func_end GetGroundNameId + + arm_func_start sub_0204F9B8 +sub_0204F9B8: ; 0x0204F9B8 + ldr ip, _0204F9C4 ; =ResetPlayTimer + ldr r0, _0204F9C8 ; =PLAY_TIME_SECONDS + bx ip + .align 2, 0 +_0204F9C4: .word ResetPlayTimer +_0204F9C8: .word PLAY_TIME_SECONDS + arm_func_end sub_0204F9B8 + + arm_func_start sub_0204F9CC +sub_0204F9CC: ; 0x0204F9CC + ldr ip, _0204F9D8 ; =PlayTimerTick + ldr r0, _0204F9DC ; =PLAY_TIME_SECONDS + bx ip + .align 2, 0 +_0204F9D8: .word PlayTimerTick +_0204F9DC: .word PLAY_TIME_SECONDS + arm_func_end sub_0204F9CC + + arm_func_start sub_0204F9E0 +sub_0204F9E0: ; 0x0204F9E0 + ldr ip, _0204F9EC ; =GetPlayTimeSeconds + ldr r0, _0204F9F0 ; =PLAY_TIME_SECONDS + bx ip + .align 2, 0 +_0204F9EC: .word GetPlayTimeSeconds +_0204F9F0: .word PLAY_TIME_SECONDS + arm_func_end sub_0204F9E0 + + arm_func_start sub_0204F9F4 +sub_0204F9F4: ; 0x0204F9F4 + ldr ip, _0204FA04 ; =sub_02050E5C + mov r1, r0 + ldr r0, _0204FA08 ; =PLAY_TIME_SECONDS + bx ip + .align 2, 0 +_0204FA04: .word sub_02050E5C +_0204FA08: .word PLAY_TIME_SECONDS + arm_func_end sub_0204F9F4 + + arm_func_start sub_0204FA0C +sub_0204FA0C: ; 0x0204FA0C + ldr ip, _0204FA1C ; =sub_02050E8C + mov r1, r0 + ldr r0, _0204FA20 ; =PLAY_TIME_SECONDS + bx ip + .align 2, 0 +_0204FA1C: .word sub_02050E8C +_0204FA20: .word PLAY_TIME_SECONDS + arm_func_end sub_0204FA0C + + arm_func_start SetAdventureLogStructLocation +SetAdventureLogStructLocation: ; 0x0204FA24 + ldr r1, _0204FA34 ; =_022AB69C + ldr r0, _0204FA38 ; =ADVENTURE_LOG_PTR + str r1, [r0] + bx lr + .align 2, 0 +_0204FA34: .word _022AB69C +_0204FA38: .word ADVENTURE_LOG_PTR + arm_func_end SetAdventureLogStructLocation + + arm_func_start SetAdventureLogDungeonFloor +SetAdventureLogDungeonFloor: ; 0x0204FA3C + ldr r1, _0204FA58 ; =ADVENTURE_LOG_PTR + ldrb r2, [r0] + ldr r1, [r1] + strb r2, [r1, #0x278] + ldrb r0, [r0, #1] + strb r0, [r1, #0x279] + bx lr + .align 2, 0 +_0204FA58: .word ADVENTURE_LOG_PTR + arm_func_end SetAdventureLogDungeonFloor + + arm_func_start GetAdventureLogDungeonFloor +GetAdventureLogDungeonFloor: ; 0x0204FA5C + ldr r0, _0204FA6C ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + add r0, r0, #0x278 + bx lr + .align 2, 0 +_0204FA6C: .word ADVENTURE_LOG_PTR + arm_func_end GetAdventureLogDungeonFloor + + arm_func_start ClearAdventureLogStruct +ClearAdventureLogStruct: ; 0x0204FA70 + mov r3, #0 + ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR + mov r0, r3 +_0204FA7C: + ldr r2, [r1] + str r0, [r2, r3, lsl #2] + add r3, r3, #1 + cmp r3, #4 + blt _0204FA7C + ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR + mov r3, #0 + ldr r2, [r1] + str r0, [r2, #0x2c] + ldr r2, [r1] + str r0, [r2, #0x30] + ldr r2, [r1] + str r0, [r2, #0x34] + ldr r2, [r1] + str r0, [r2, #0x28] + ldr r2, [r1] + str r0, [r2, #0x10] + ldr r2, [r1] + str r0, [r2, #0x14] + ldr r2, [r1] + str r0, [r2, #0x18] + ldr r2, [r1] + str r0, [r2, #0x1c] + ldr r2, [r1] + str r0, [r2, #0x20] + ldr r2, [r1] + str r0, [r2, #0x24] + ldr r2, [r1] + str r0, [r2, #0x38] + ldr r2, [r1] + str r0, [r2, #0x3c] + ldr r2, [r1] + str r0, [r2, #0x40] +_0204FB00: + ldr r2, [r1] + add r2, r2, r0, lsl #2 + str r3, [r2, #0x44] + ldr r2, [r1] + add r2, r2, r0, lsl #2 + add r0, r0, #1 + str r3, [r2, #0xd8] + cmp r0, #0x25 + blt _0204FB00 + ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR + mov r2, #0 +_0204FB2C: + ldr r1, [r0] + add r1, r1, r3, lsl #2 + add r3, r3, #1 + str r2, [r1, #0x16c] + cmp r3, #0x11 + blt _0204FB2C + ldr r0, _0204FB98 ; =ADVENTURE_LOG_PTR + mov ip, #0 +_0204FB4C: + ldr r1, [r0] + add r1, r1, r2, lsl #2 + add r2, r2, #1 + str ip, [r1, #0x1b0] + cmp r2, #0x2c + blt _0204FB4C + ldr r1, _0204FB98 ; =ADVENTURE_LOG_PTR + ldr r0, [r1] + str ip, [r0, #0x260] + mov r0, #0x3e8 +_0204FB74: + rsb r2, ip, #5 + mul r3, r2, r0 + ldr r2, [r1] + add r2, r2, ip, lsl #2 + add ip, ip, #1 + str r3, [r2, #0x264] + cmp ip, #5 + blt _0204FB74 + bx lr + .align 2, 0 +_0204FB98: .word ADVENTURE_LOG_PTR + arm_func_end ClearAdventureLogStruct + + arm_func_start SetAdventureLogCompleted +SetAdventureLogCompleted: ; 0x0204FB9C + ldr r1, _0204FBC0 ; =ADVENTURE_LOG_PTR + mov r3, r0, asr #5 + ldr ip, [r1] + and r0, r0, #0x1f + ldr r2, [ip, r3, lsl #2] + mov r1, #1 + orr r0, r2, r1, lsl r0 + str r0, [ip, r3, lsl #2] + bx lr + .align 2, 0 +_0204FBC0: .word ADVENTURE_LOG_PTR + arm_func_end SetAdventureLogCompleted + + arm_func_start IsAdventureLogNotEmpty +IsAdventureLogNotEmpty: ; 0x0204FBC4 + ldr r0, _0204FBF8 ; =ADVENTURE_LOG_PTR + mov r1, #0 + ldr r2, [r0] + b _0204FBE8 +_0204FBD4: + ldr r0, [r2, r1, lsl #2] + cmp r0, #0 + movne r0, #1 + bxne lr + add r1, r1, #1 +_0204FBE8: + cmp r1, #4 + blt _0204FBD4 + mov r0, #0 + bx lr + .align 2, 0 +_0204FBF8: .word ADVENTURE_LOG_PTR + arm_func_end IsAdventureLogNotEmpty + + arm_func_start GetAdventureLogCompleted +GetAdventureLogCompleted: ; 0x0204FBFC + ldr r1, _0204FC24 ; =ADVENTURE_LOG_PTR + mov r2, r0, asr #5 + ldr r1, [r1] + and r3, r0, #0x1f + ldr r0, [r1, r2, lsl #2] + mov r1, #1 + tst r0, r1, lsl r3 + moveq r1, #0 + and r0, r1, #0xff + bx lr + .align 2, 0 +_0204FC24: .word ADVENTURE_LOG_PTR + arm_func_end GetAdventureLogCompleted + + arm_func_start IncrementNbDungeonsCleared +IncrementNbDungeonsCleared: ; 0x0204FC28 + ldr r0, _0204FC64 ; =ADVENTURE_LOG_PTR + ldr r1, _0204FC68 ; =0x000F423F + ldr r3, [r0] + ldr r2, [r3, #0x10] + add r2, r2, #1 + str r2, [r3, #0x10] + ldr r3, [r0] + ldr r2, [r3] + orr r2, r2, #0x10 + str r2, [r3] + ldr r2, [r0] + ldr r0, [r2, #0x10] + cmp r0, r1 + strgt r1, [r2, #0x10] + bx lr + .align 2, 0 +_0204FC64: .word ADVENTURE_LOG_PTR +_0204FC68: .word 0x000F423F + arm_func_end IncrementNbDungeonsCleared + + arm_func_start GetNbDungeonsCleared +GetNbDungeonsCleared: ; 0x0204FC6C + ldr r0, _0204FC7C ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x10] + bx lr + .align 2, 0 +_0204FC7C: .word ADVENTURE_LOG_PTR + arm_func_end GetNbDungeonsCleared + + arm_func_start IncrementNbFriendRescues +IncrementNbFriendRescues: ; 0x0204FC80 + ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR + ldr r1, _0204FCC4 ; =0x000F423F + ldr r3, [r0] + ldr r2, [r3, #0x14] + add r2, r2, #1 + str r2, [r3, #0x14] + ldr r2, [r0] + ldr r0, [r2, #0x14] + cmp r0, r1 + ldr r0, _0204FCC0 ; =ADVENTURE_LOG_PTR + strgt r1, [r2, #0x14] + ldr r1, [r0] + ldr r0, [r1] + orr r0, r0, #0x40 + str r0, [r1] + bx lr + .align 2, 0 +_0204FCC0: .word ADVENTURE_LOG_PTR +_0204FCC4: .word 0x000F423F + arm_func_end IncrementNbFriendRescues + + arm_func_start GetNbFriendRescues +GetNbFriendRescues: ; 0x0204FCC8 + ldr r0, _0204FCD8 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x14] + bx lr + .align 2, 0 +_0204FCD8: .word ADVENTURE_LOG_PTR + arm_func_end GetNbFriendRescues + + arm_func_start IncrementNbEvolutions +IncrementNbEvolutions: ; 0x0204FCDC + ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR + ldr r1, _0204FD20 ; =0x000F423F + ldr r3, [r0] + ldr r2, [r3, #0x18] + add r2, r2, #1 + str r2, [r3, #0x18] + ldr r2, [r0] + ldr r0, [r2, #0x18] + cmp r0, r1 + ldr r0, _0204FD1C ; =ADVENTURE_LOG_PTR + strgt r1, [r2, #0x18] + ldr r1, [r0] + ldr r0, [r1] + orr r0, r0, #0x80 + str r0, [r1] + bx lr + .align 2, 0 +_0204FD1C: .word ADVENTURE_LOG_PTR +_0204FD20: .word 0x000F423F + arm_func_end IncrementNbEvolutions + + arm_func_start GetNbEvolutions +GetNbEvolutions: ; 0x0204FD24 + ldr r0, _0204FD34 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x18] + bx lr + .align 2, 0 +_0204FD34: .word ADVENTURE_LOG_PTR + arm_func_end GetNbEvolutions + + arm_func_start IncrementNbSteals +IncrementNbSteals: ; 0x0204FD38 + bx lr + arm_func_end IncrementNbSteals + + arm_func_start IncrementNbEggsHatched +IncrementNbEggsHatched: ; 0x0204FD3C + ldr r1, _0204FD70 ; =ADVENTURE_LOG_PTR + ldr r0, _0204FD74 ; =0x000F423F + ldr r2, [r1] + ldr r1, [r2, #0x1c] + cmp r1, r0 + addlt r0, r1, #1 + strlt r0, [r2, #0x1c] + ldr r0, _0204FD70 ; =ADVENTURE_LOG_PTR + ldr r1, [r0] + ldr r0, [r1] + orr r0, r0, #0x100 + str r0, [r1] + bx lr + .align 2, 0 +_0204FD70: .word ADVENTURE_LOG_PTR +_0204FD74: .word 0x000F423F + arm_func_end IncrementNbEggsHatched + + arm_func_start GetNbEggsHatched +GetNbEggsHatched: ; 0x0204FD78 + ldr r0, _0204FD88 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x1c] + bx lr + .align 2, 0 +_0204FD88: .word ADVENTURE_LOG_PTR + arm_func_end GetNbEggsHatched + + arm_func_start GetNbPokemonJoined +GetNbPokemonJoined: ; 0x0204FD8C + ldr r0, _0204FD9C ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x2c] + bx lr + .align 2, 0 +_0204FD9C: .word ADVENTURE_LOG_PTR + arm_func_end GetNbPokemonJoined + + arm_func_start GetNbMovesLearned +GetNbMovesLearned: ; 0x0204FDA0 + ldr r0, _0204FDB0 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x34] + bx lr + .align 2, 0 +_0204FDB0: .word ADVENTURE_LOG_PTR + arm_func_end GetNbMovesLearned + + arm_func_start SetVictoriesOnOneFloor +SetVictoriesOnOneFloor: ; 0x0204FDB4 + ldr r1, _0204FDE0 ; =0x000F423F + cmp r0, r1 + movgt r0, r1 + ldr r1, _0204FDE4 ; =ADVENTURE_LOG_PTR + ldr r2, [r1] + str r0, [r2, #0x28] + ldr r1, [r1] + ldr r0, [r1] + orr r0, r0, #0x200 + str r0, [r1] + bx lr + .align 2, 0 +_0204FDE0: .word 0x000F423F +_0204FDE4: .word ADVENTURE_LOG_PTR + arm_func_end SetVictoriesOnOneFloor + + arm_func_start GetVictoriesOnOneFloor +GetVictoriesOnOneFloor: ; 0x0204FDE8 + ldr r0, _0204FDF8 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x28] + bx lr + .align 2, 0 +_0204FDF8: .word ADVENTURE_LOG_PTR + arm_func_end GetVictoriesOnOneFloor + + arm_func_start SetPokemonJoined +SetPokemonJoined: ; 0x0204FDFC + stmdb sp!, {r3, lr} + bl GetDexNumberVeneer + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r3, _0204FE54 ; =ADVENTURE_LOG_PTR + mov r1, r0, asr #4 + ldr lr, [r3] + add r1, r0, r1, lsr #27 + ldr ip, [lr] + mov r2, r0, lsr #0x1f + orr ip, ip, #1 + str ip, [lr] + ldr r3, [r3] + rsb r0, r2, r0, lsl #27 + add lr, r3, #0x44 + mov ip, r1, asr #5 + ldr r3, [lr, ip, lsl #2] + add r0, r2, r0, ror #27 + mov r1, #1 + orr r0, r3, r1, lsl r0 + str r0, [lr, ip, lsl #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204FE54: .word ADVENTURE_LOG_PTR + arm_func_end SetPokemonJoined + + arm_func_start SetPokemonBattled +SetPokemonBattled: ; 0x0204FE58 + stmdb sp!, {r3, lr} + bl GetDexNumberVeneer + cmp r0, #0 + ldmeqia sp!, {r3, pc} + ldr r3, _0204FEB0 ; =ADVENTURE_LOG_PTR + mov r1, r0, asr #4 + ldr lr, [r3] + add r1, r0, r1, lsr #27 + ldr ip, [lr] + mov r2, r0, lsr #0x1f + orr ip, ip, #2 + str ip, [lr] + ldr r3, [r3] + rsb r0, r2, r0, lsl #27 + add lr, r3, #0xd8 + mov ip, r1, asr #5 + ldr r3, [lr, ip, lsl #2] + add r0, r2, r0, ror #27 + mov r1, #1 + orr r0, r3, r1, lsl r0 + str r0, [lr, ip, lsl #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_0204FEB0: .word ADVENTURE_LOG_PTR + arm_func_end SetPokemonBattled + + arm_func_start GetNbPokemonBattled +GetNbPokemonBattled: ; 0x0204FEB4 + ldr r0, _0204FEC4 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x30] + bx lr + .align 2, 0 +_0204FEC4: .word ADVENTURE_LOG_PTR + arm_func_end GetNbPokemonBattled + + arm_func_start IncrementNbBigTreasureWins +IncrementNbBigTreasureWins: ; 0x0204FEC8 + ldr r0, _0204FEE0 ; =ADVENTURE_LOG_PTR + ldr ip, _0204FEE4 ; =SetNbBigTreasureWins + ldr r0, [r0] + ldr r0, [r0, #0x38] + add r0, r0, #1 + bx ip + .align 2, 0 +_0204FEE0: .word ADVENTURE_LOG_PTR +_0204FEE4: .word SetNbBigTreasureWins + arm_func_end IncrementNbBigTreasureWins + + arm_func_start SetNbBigTreasureWins +SetNbBigTreasureWins: ; 0x0204FEE8 + ldr r2, _0204FF18 ; =ADVENTURE_LOG_PTR + ldr r1, _0204FF1C ; =0x000F423F + ldr r3, [r2] + cmp r0, r1 + ldr r2, [r3] + movgt r0, r1 + orr r2, r2, #0x400 + ldr r1, _0204FF18 ; =ADVENTURE_LOG_PTR + str r2, [r3] + ldr r1, [r1] + str r0, [r1, #0x38] + bx lr + .align 2, 0 +_0204FF18: .word ADVENTURE_LOG_PTR +_0204FF1C: .word 0x000F423F + arm_func_end SetNbBigTreasureWins + + arm_func_start GetNbBigTreasureWins +GetNbBigTreasureWins: ; 0x0204FF20 + ldr r0, _0204FF30 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x38] + bx lr + .align 2, 0 +_0204FF30: .word ADVENTURE_LOG_PTR + arm_func_end GetNbBigTreasureWins + + arm_func_start SetNbRecycled +SetNbRecycled: ; 0x0204FF34 + ldr r2, _0204FF64 ; =ADVENTURE_LOG_PTR + ldr r1, _0204FF68 ; =0x000F423F + ldr r3, [r2] + cmp r0, r1 + ldr r2, [r3] + movgt r0, r1 + orr r2, r2, #0x800 + ldr r1, _0204FF64 ; =ADVENTURE_LOG_PTR + str r2, [r3] + ldr r1, [r1] + str r0, [r1, #0x3c] + bx lr + .align 2, 0 +_0204FF64: .word ADVENTURE_LOG_PTR +_0204FF68: .word 0x000F423F + arm_func_end SetNbRecycled + + arm_func_start GetNbRecycled +GetNbRecycled: ; 0x0204FF6C + ldr r0, _0204FF7C ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x3c] + bx lr + .align 2, 0 +_0204FF7C: .word ADVENTURE_LOG_PTR + arm_func_end GetNbRecycled + + arm_func_start IncrementNbSkyGiftsSent +IncrementNbSkyGiftsSent: ; 0x0204FF80 + ldr r0, _0204FF98 ; =ADVENTURE_LOG_PTR + ldr ip, _0204FF9C ; =SetNbSkyGiftsSent + ldr r0, [r0] + ldr r0, [r0, #0x40] + add r0, r0, #1 + bx ip + .align 2, 0 +_0204FF98: .word ADVENTURE_LOG_PTR +_0204FF9C: .word SetNbSkyGiftsSent + arm_func_end IncrementNbSkyGiftsSent + + arm_func_start SetNbSkyGiftsSent +SetNbSkyGiftsSent: ; 0x0204FFA0 + ldr r2, _0204FFD0 ; =ADVENTURE_LOG_PTR + ldr r1, _0204FFD4 ; =0x000F423F + ldr r3, [r2] + cmp r0, r1 + ldr r2, [r3] + movgt r0, r1 + orr r2, r2, #0x1000 + ldr r1, _0204FFD0 ; =ADVENTURE_LOG_PTR + str r2, [r3] + ldr r1, [r1] + str r0, [r1, #0x40] + bx lr + .align 2, 0 +_0204FFD0: .word ADVENTURE_LOG_PTR +_0204FFD4: .word 0x000F423F + arm_func_end SetNbSkyGiftsSent + + arm_func_start GetNbSkyGiftsSent +GetNbSkyGiftsSent: ; 0x0204FFD8 + ldr r0, _0204FFE8 ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x40] + bx lr + .align 2, 0 +_0204FFE8: .word ADVENTURE_LOG_PTR + arm_func_end GetNbSkyGiftsSent + + arm_func_start ComputeSpecialCounters +ComputeSpecialCounters: ; 0x0204FFEC + stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} + mov r4, #0 + mov r8, r4 +_0204FFF8: + mov r0, #0x44 + mul sl, r8, r0 + ldr r0, _0205022C ; =TEAM_MEMBER_TABLE_PTR + ldr r0, [r0] + ldrb r0, [r0, sl] + tst r0, #1 + movne r0, #1 + moveq r0, #0 + tst r0, #0xff + beq _0205009C + mov sb, #0 + mov r7, #1 + ldr r3, _02050230 ; =ADVENTURE_LOG_PTR + ldr ip, _0205022C ; =TEAM_MEMBER_TABLE_PTR + mov fp, sb + mov lr, r7 + mov r2, #6 +_0205003C: + mul r1, sb, r2 + ldr r0, [ip] + add r0, r0, sl + add r5, r0, #0x22 + ldrb r0, [r5, r1] + add r1, r5, r1 + tst r0, #1 + movne r0, r7 + moveq r0, fp + tst r0, #0xff + beq _02050090 + ldrh r0, [r1, #2] + ldr r5, [r3] + mov r1, r0, lsr #5 + add r6, r5, r1, lsl #2 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #27 + ldr r5, [r6, #0x16c] + add r0, r1, r0, ror #27 + orr r0, r5, lr, lsl r0 + str r0, [r6, #0x16c] +_02050090: + add sb, sb, #1 + cmp sb, #4 + blt _0205003C +_0205009C: + ldr r0, _02050234 ; =0x0000022B + add r8, r8, #1 + cmp r8, r0 + blt _0204FFF8 + mov r6, #0 + add r5, r0, #0x258 +_020500B4: + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetDexNumberVeneer + add r6, r6, #1 + cmp r6, r5 + blt _020500B4 + mov r7, #0 + ldr r5, _02050230 ; =ADVENTURE_LOG_PTR + ldr sb, _02050238 ; =0x0000021F + mov r8, r7 + mov r6, #1 +_020500E0: + mov r0, r8, lsl #0x10 + mov r0, r0, lsr #0x10 + bl IsRealMove + cmp r0, #0 + beq _02050120 + mov r0, r8, asr #4 + add r0, r8, r0, lsr #27 + ldr r2, [r5] + mov r0, r0, asr #5 + add r2, r2, r0, lsl #2 + mov r1, r8, lsr #0x1f + rsb r0, r1, r8, lsl #27 + ldr r2, [r2, #0x16c] + add r0, r1, r0, ror #27 + tst r2, r6, lsl r0 + addne r7, r7, #1 +_02050120: + add r8, r8, #1 + cmp r8, sb + blt _020500E0 + cmp r7, #0 + ble _02050150 + ldr r0, _02050230 ; =ADVENTURE_LOG_PTR + ldr r1, [r0] + str r7, [r1, #0x34] + ldr r1, [r0] + ldr r0, [r1] + orr r0, r0, #4 + str r0, [r1] +_02050150: + mov sb, #1 + ldr r5, _02050230 ; =ADVENTURE_LOG_PTR + ldr sl, _0205023C ; =0x00000483 + mov r8, #0 + mov r6, sb +_02050164: + mov r0, sb, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetBaseFormCastformCherrimDeoxys + mov r7, r0 + bl GetDexNumberVeneer + cmp r0, #0 + beq _020501B4 + mov r1, r0, asr #4 + add r1, r0, r1, lsr #27 + ldr r3, [r5] + mov r2, r1, asr #5 + mov r1, r0, lsr #0x1f + add r2, r3, r2, lsl #2 + rsb r0, r1, r0, lsl #27 + ldr r2, [r2, #0x44] + add r0, r1, r0, ror #27 + tst r2, r6, lsl r0 + beq _020501B4 + mov r0, r7 + bl RecruitSpecialPokemonLog +_020501B4: + add sb, sb, #1 + cmp sb, sl + blt _02050164 + ldr r0, _02050230 ; =ADVENTURE_LOG_PTR + mov r2, #1 + ldr r1, [r0] + ldr r3, _02050240 ; =0x000001ED + mov r0, r2 +_020501D4: + mov r5, r2, asr #4 + add r5, r2, r5, lsr #27 + mov sb, r5, asr #5 + mov r6, r2, lsr #0x1f + rsb r5, r6, r2, lsl #27 + add r7, r1, sb, lsl #2 + add r6, r6, r5, ror #27 + add r5, r1, sb, lsl #2 + ldr r7, [r7, #0x44] + ldr r5, [r5, #0xd8] + tst r7, r0, lsl r6 + addne r8, r8, #1 + tst r5, r0, lsl r6 + add r2, r2, #1 + addne r4, r4, #1 + cmp r2, r3 + blt _020501D4 + ldr r0, _02050230 ; =ADVENTURE_LOG_PTR + str r8, [r1, #0x2c] + ldr r0, [r0] + str r4, [r0, #0x30] + ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0205022C: .word TEAM_MEMBER_TABLE_PTR +_02050230: .word ADVENTURE_LOG_PTR +_02050234: .word 0x0000022B +_02050238: .word 0x0000021F +_0205023C: .word 0x00000483 +_02050240: .word 0x000001ED + arm_func_end ComputeSpecialCounters + + arm_func_start RecruitSpecialPokemonLog +RecruitSpecialPokemonLog: ; 0x02050244 + stmdb sp!, {r3, lr} + cmp r0, #0x258 + subge r0, r0, #0x258 + movge r0, r0, lsl #0x10 + ldr r2, _020502AC ; =ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS + mov r3, #0 + movge r0, r0, asr #0x10 +_02050260: + mov r1, r3, lsl #1 + ldrsh r1, [r2, r1] + cmp r1, #0 + ldmeqia sp!, {r3, pc} + cmp r1, #0xc9 + bne _0205028C + cmp r0, #0xc9 + blt _02050294 + cmp r0, #0xe4 + ble _0205029C + b _02050294 +_0205028C: + cmp r1, r0 + beq _0205029C +_02050294: + add r3, r3, #1 + b _02050260 +_0205029C: + add r0, r3, #0x24 + and r0, r0, #0xff + bl SetAdventureLogCompleted + ldmia sp!, {r3, pc} + .align 2, 0 +_020502AC: .word ADVENTURE_LOG_ENCOUNTERS_MONSTER_IDS + arm_func_end RecruitSpecialPokemonLog + + arm_func_start IncrementNbFainted +IncrementNbFainted: ; 0x020502B0 + ldr r1, _020502E4 ; =ADVENTURE_LOG_PTR + ldr r0, _020502E8 ; =0x000F423F + ldr r2, [r1] + ldr r1, [r2, #0x24] + cmp r1, r0 + addlt r0, r1, #1 + strlt r0, [r2, #0x24] + ldr r0, _020502E4 ; =ADVENTURE_LOG_PTR + ldr r1, [r0] + ldr r0, [r1] + orr r0, r0, #0x20 + str r0, [r1] + bx lr + .align 2, 0 +_020502E4: .word ADVENTURE_LOG_PTR +_020502E8: .word 0x000F423F + arm_func_end IncrementNbFainted + + arm_func_start GetNbFainted +GetNbFainted: ; 0x020502EC + ldr r0, _020502FC ; =ADVENTURE_LOG_PTR + ldr r0, [r0] + ldr r0, [r0, #0x24] + bx lr + .align 2, 0 +_020502FC: .word ADVENTURE_LOG_PTR + arm_func_end GetNbFainted + + arm_func_start SetItemAcquired +SetItemAcquired: ; 0x02050300 + stmdb sp!, {r4, r5, r6, lr} + ldrsh r0, [r0, #4] + bl NormalizeTreasureBox + mov r4, r0 + mov r0, r4, lsl #0x10 + mov r0, r0, asr #0x10 + bl IsItemValidVeneer + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + cmp r4, #0x3b + blt _02050380 + cmp r4, #0x41 + bgt _02050380 + sub r0, r4, #0x21 + and r0, r0, #0xff + mov r5, #1 + bl SetAdventureLogCompleted + mov r6, #0x1a + b _02050364 +_0205034C: + and r0, r6, #0xff + bl GetAdventureLogCompleted + cmp r0, #0 + moveq r5, #0 + beq _0205036C + add r6, r6, #1 +_02050364: + cmp r6, #0x20 + ble _0205034C +_0205036C: + cmp r5, #0 + beq _02050380 + mov r0, #0x15 + mov r1, #1 + bl SetResolvedPerformanceProgressFlag +_02050380: + ldr r3, _020503C8 ; =ADVENTURE_LOG_PTR + mov r0, r4, asr #4 + ldr ip, [r3] + add r0, r4, r0, lsr #27 + mov r2, r4, lsr #0x1f + rsb r1, r2, r4, lsl #27 + add lr, ip, #0x1b0 + mov ip, r0, asr #5 + ldr r4, [lr, ip, lsl #2] + add r0, r2, r1, ror #27 + mov r1, #1 + orr r0, r4, r1, lsl r0 + str r0, [lr, ip, lsl #2] + ldr r1, [r3] + ldr r0, [r1] + orr r0, r0, #8 + str r0, [r1] + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_020503C8: .word ADVENTURE_LOG_PTR + arm_func_end SetItemAcquired + + arm_func_start GetNbItemAcquired +GetNbItemAcquired: ; 0x020503CC + stmdb sp!, {r4, lr} + ldr r1, _0205041C ; =ADVENTURE_LOG_PTR + mov r0, #0 + ldr r4, [r1] + mov lr, r0 + mov ip, #1 +_020503E4: + mov r1, lr, asr #4 + add r1, lr, r1, lsr #27 + mov r1, r1, asr #5 + add r3, r4, r1, lsl #2 + mov r2, lr, lsr #0x1f + rsb r1, r2, lr, lsl #27 + ldr r3, [r3, #0x1b0] + add r1, r2, r1, ror #27 + tst r3, ip, lsl r1 + add lr, lr, #1 + addne r0, r0, #1 + cmp lr, #0x580 + blt _020503E4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0205041C: .word ADVENTURE_LOG_PTR + arm_func_end GetNbItemAcquired + + arm_func_start SetChallengeLetterCleared +SetChallengeLetterCleared: ; 0x02050420 + stmdb sp!, {r4, lr} + ldr r3, _020504A0 ; =ADVENTURE_LOG_PTR + mov r2, r0, lsr #0x1f + ldr ip, [r3] + rsb r1, r2, r0, lsl #27 + mov lr, r0, lsr #5 + add r4, ip, #0x260 + ldr ip, [r4, lr, lsl #2] + add r1, r2, r1, ror #27 + mov r0, #1 + orr r1, ip, r0, lsl r1 + str r1, [r4, lr, lsl #2] + ldr r4, [r3] + mov ip, r0 + b _02050488 +_0205045C: + mov r1, r0, asr #4 + add r1, r0, r1, lsr #27 + mov r1, r1, asr #5 + add r3, r4, r1, lsl #2 + mov r2, r0, lsr #0x1f + rsb r1, r2, r0, lsl #27 + ldr r3, [r3, #0x260] + add r1, r2, r1, ror #27 + tst r3, ip, lsl r1 + ldmeqia sp!, {r4, pc} + add r0, r0, #1 +_02050488: + cmp r0, #6 + blt _0205045C + ldr r0, [r4, #4] + orr r0, r0, #4 + str r0, [r4, #4] + ldmia sp!, {r4, pc} + .align 2, 0 +_020504A0: .word ADVENTURE_LOG_PTR + arm_func_end SetChallengeLetterCleared + + arm_func_start GetSentryDutyGamePoints +GetSentryDutyGamePoints: ; 0x020504A4 + ldr r1, _020504B8 ; =ADVENTURE_LOG_PTR + ldr r1, [r1] + add r0, r1, r0, lsl #2 + ldr r0, [r0, #0x264] + bx lr + .align 2, 0 +_020504B8: .word ADVENTURE_LOG_PTR + arm_func_end GetSentryDutyGamePoints + + arm_func_start SetSentryDutyGamePoints +SetSentryDutyGamePoints: ; 0x020504BC + stmdb sp!, {r3, lr} + ldr r1, _02050548 ; =ADVENTURE_LOG_PTR + mov lr, #0 + ldr r2, [r1] + b _020504EC +_020504D0: + add r1, r2, lr, lsl #2 + ldr r1, [r1, #0x264] + cmp r0, r1 + bhi _020504F4 + add r1, lr, #1 + mov r1, r1, lsl #0x10 + mov lr, r1, asr #0x10 +_020504EC: + cmp lr, #5 + blt _020504D0 +_020504F4: + cmp lr, #5 + mvnge r0, #0 + ldmgeia sp!, {r3, pc} + mov ip, #4 + ldr r2, _02050548 ; =ADVENTURE_LOG_PTR + b _02050528 +_0205050C: + ldr r3, [r2] + sub r1, ip, #1 + add ip, r3, ip, lsl #2 + ldr r3, [ip, #0x260] + mov r1, r1, lsl #0x10 + str r3, [ip, #0x264] + mov ip, r1, asr #0x10 +_02050528: + cmp ip, lr + bgt _0205050C + ldr r1, _02050548 ; =ADVENTURE_LOG_PTR + ldr r1, [r1] + add r1, r1, lr, lsl #2 + str r0, [r1, #0x264] + mov r0, lr + ldmia sp!, {r3, pc} + .align 2, 0 +_02050548: .word ADVENTURE_LOG_PTR + arm_func_end SetSentryDutyGamePoints + + arm_func_start CopyLogTo +CopyLogTo: ; 0x0205054C + stmdb sp!, {r4, lr} + mov r4, r0 + bl ComputeSpecialCounters + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x14 + add r1, r1, #0x10 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x14 + add r1, r1, #0x14 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x14 + add r1, r1, #0x18 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x80 + ldr r1, [r1] + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0xe + ldr r1, [r1] + add r1, r1, #0x2c + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0xe + ldr r1, [r1] + add r1, r1, #0x30 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #9 + ldr r1, [r1] + add r1, r1, #0x34 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x28 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x24 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x1c + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x38 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x3c + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x40 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x4a0 + ldr r1, [r1] + add r1, r1, #0x44 + bl CopyBitsTo + mov r0, r4 + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r2, #0x4a0 + ldr r1, [r1] + add r1, r1, #0xd8 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x220 + add r1, r1, #0x16c + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x580 + add r1, r1, #0x1b0 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x20 + add r1, r1, #0x260 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0xa0 + add r1, r1, #0x264 + bl CopyBitsTo + ldr r1, _02050734 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + add r1, r1, #0x278 + bl sub_020515C4 + ldmia sp!, {r4, pc} + .align 2, 0 +_02050734: .word ADVENTURE_LOG_PTR + arm_func_end CopyLogTo + + arm_func_start CopyLogFrom +CopyLogFrom: ; 0x02050738 + stmdb sp!, {r4, lr} + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + mov r4, r0 + add r1, r1, #0x10 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x14 + add r1, r1, #0x14 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x14 + add r1, r1, #0x18 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x80 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0xe + add r1, r1, #0x2c + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0xe + ldr r1, [r1] + add r1, r1, #0x30 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #9 + ldr r1, [r1] + add r1, r1, #0x34 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x28 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x24 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x1c + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x38 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x3c + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x14 + ldr r1, [r1] + add r1, r1, #0x40 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x4a0 + ldr r1, [r1] + add r1, r1, #0x44 + bl CopyBitsFrom + mov r0, r4 + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r2, #0x4a0 + ldr r1, [r1] + add r1, r1, #0xd8 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x220 + add r1, r1, #0x16c + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x580 + add r1, r1, #0x1b0 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0x20 + add r1, r1, #0x260 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + mov r2, #0xa0 + add r1, r1, #0x264 + bl CopyBitsFrom + ldr r1, _02050918 ; =ADVENTURE_LOG_PTR + mov r0, r4 + ldr r1, [r1] + add r1, r1, #0x278 + bl Copy16BitsFrom + ldmia sp!, {r4, pc} + .align 2, 0 +_02050918: .word ADVENTURE_LOG_PTR + arm_func_end CopyLogFrom + + arm_func_start GetAbilityString +GetAbilityString: ; 0x0205091C +#if defined(EUROPE) + add r1, r1, #0x5e0 + add r1, r1, #0x3000 +#elif defined(JAPAN) + add r1, r1, #0x81 + add r1, r1, #0x4800 +#else + add r1, r1, #0xde + add r1, r1, #0x3500 +#endif + mov r1, r1, lsl #0x10 + ldr ip, _02050938 ; =CopyNStringFromId + mov r1, r1, lsr #0x10 + mov r2, #0x50 + bx ip + .align 2, 0 +_02050938: .word CopyNStringFromId + arm_func_end GetAbilityString + + arm_func_start GetAbilityDescStringId +GetAbilityDescStringId: ; 0x0205093C +#if defined(EUROPE) + add r0, r0, #0x25c + add r0, r0, #0x3400 +#elif defined(JAPAN) + add r0, r0, #0xfd + add r0, r0, #0x4800 +#else + add r0, r0, #0x5a + add r0, r0, #0x3600 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + arm_func_end GetAbilityDescStringId + + arm_func_start GetTypeStringId +GetTypeStringId: ; 0x02050950 +#if defined(EUROPE) + add r0, r0, #0xcd + add r0, r0, #0x3500 +#elif defined(JAPAN) + add r0, r0, #0x6e + add r0, r0, #0x4800 +#else + add r0, r0, #0xcb + add r0, r0, #0x3500 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bx lr + arm_func_end GetTypeStringId + + arm_func_start GetConversion2ConvertToType +GetConversion2ConvertToType: ; 0x02050964 + ldr r1, _02050970 ; =_020A192C + ldrb r0, [r1, r0] + bx lr + .align 2, 0 +_02050970: .word _020A192C + arm_func_end GetConversion2ConvertToType + + arm_func_start sub_02050974 +sub_02050974: ; 0x02050974 + str r1, [r0] + mov r3, #0 + str r3, [r0, #8] + str r3, [r0, #0xc] + add r1, r1, r2 + str r1, [r0, #4] + bx lr + arm_func_end sub_02050974 + + arm_func_start sub_02050990 +sub_02050990: ; 0x02050990 + str r1, [r0] + mov r3, #0 + str r3, [r0, #8] + str r3, [r0, #0xc] + add r3, r1, r2 + str r3, [r0, #4] + mov r0, r1 + ldr ip, _020509B8 ; =MemZero + mov r1, r2 + bx ip + .align 2, 0 +_020509B8: .word MemZero + arm_func_end sub_02050990 + + arm_func_start sub_020509BC +sub_020509BC: ; 0x020509BC + bx lr + arm_func_end sub_020509BC + + arm_func_start CopyBitsTo +CopyBitsTo: ; 0x020509C0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov ip, #0 + mov r3, #1 + mov r5, ip + mov r4, ip + b _02050A34 +_020509D8: + ldrb r6, [r1] + sub r2, r2, #1 + tst r6, r3, lsl ip + ldrne r7, [r0] + ldrne lr, [r0, #8] + ldrneb r6, [r7] + add ip, ip, #1 + orrne r6, r6, r3, lsl lr + strneb r6, [r7] + ldr lr, [r0, #8] + cmp ip, #8 + add lr, lr, #1 + moveq ip, r5 + addeq r1, r1, #1 + str lr, [r0, #8] + cmp lr, #8 + ldreq lr, [r0] + addeq lr, lr, #1 + streq lr, [r0] + streq r4, [r0, #8] + ldr lr, [r0, #0xc] + add lr, lr, #1 + str lr, [r0, #0xc] +_02050A34: + cmp r2, #0 + bne _020509D8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CopyBitsTo + + arm_func_start CopyBitsFrom +CopyBitsFrom: ; 0x02050A40 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov lr, #0 + mov ip, lr + mov r3, #1 + mov r6, lr + mov r5, lr + b _02050AC0 +_02050A5C: + cmp lr, #0 + streqb ip, [r1] + ldr r7, [r0] + ldr r4, [r0, #8] + ldrb r7, [r7] + sub r2, r2, #1 + tst r7, r3, lsl r4 + ldrneb r4, [r1] + orrne r4, r4, r3, lsl lr + strneb r4, [r1] + ldr r4, [r0, #8] + add lr, lr, #1 + cmp lr, #8 + add r4, r4, #1 + moveq lr, r6 + addeq r1, r1, #1 + str r4, [r0, #8] + cmp r4, #8 + ldreq r4, [r0] + addeq r4, r4, #1 + streq r4, [r0] + streq r5, [r0, #8] + ldr r4, [r0, #0xc] + add r4, r4, #1 + str r4, [r0, #0xc] +_02050AC0: + cmp r2, #0 + bne _02050A5C + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CopyBitsFrom + + arm_func_start StoreDefaultTeamData +StoreDefaultTeamData: ; 0x02050ACC + stmdb sp!, {lr} + sub sp, sp, #0x14 +#ifdef JAPAN + ldr r1, _02050E54 ; =0x000004C5 + add r0, sp, #0 +#else + add r0, sp, #0 + mov r1, #0x234 +#endif + bl GetStringFromFileVeneer + ldr r0, _02050B08 ; =TEAM_NAME + add r1, sp, #0 +#ifdef JAPAN + mov r2, #5 +#else + mov r2, #0xa +#endif + bl StrncpyName + ldr r0, _02050B0C ; =TEAM_NAME + mov r1, #0 +#ifdef JAPAN + str r1, [r0, #8] + strb r1, [r0, #0xc] +#else + str r1, [r0, #0xc] + strb r1, [r0, #0x10] +#endif + add sp, sp, #0x14 + ldmia sp!, {pc} + .align 2, 0 +#ifdef JAPAN +_02050E54: .word 0x000004C5 +#endif +_02050B08: .word TEAM_NAME +_02050B0C: .word TEAM_NAME + arm_func_end StoreDefaultTeamData + + arm_func_start GetMainTeamNameWithCheck +GetMainTeamNameWithCheck: ; 0x02050B10 + stmdb sp!, {r4, lr} + sub sp, sp, #0x40 + mov r4, r0 + mov r0, #1 + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 + ldrne r0, _02050B70 ; =TEAM_NAME + ldrneb r0, [r0] + cmpne r0, #0 + beq _02050B4C + ldr r1, _02050B74 ; =TEAM_NAME + mov r0, r4 +#ifdef JAPAN + mov r2, #5 +#else + mov r2, #0xa +#endif + bl StrncpySimpleNoPad + b _02050B68 +_02050B4C: + ldr r1, _02050B78 ; =0x00000237 + add r0, sp, #0 + bl GetStringFromFileVeneer + add r1, sp, #0 + mov r0, r4 +#ifdef JAPAN + mov r2, #5 +#else + mov r2, #0xa +#endif + bl StrncpyName +_02050B68: + add sp, sp, #0x40 + ldmia sp!, {r4, pc} + .align 2, 0 +_02050B70: .word TEAM_NAME +_02050B74: .word TEAM_NAME +#ifdef JAPAN +_02050B78: .word 0x000004C8 +#else +_02050B78: .word 0x00000237 +#endif + arm_func_end GetMainTeamNameWithCheck + + arm_func_start GetMainTeamName +GetMainTeamName: ; 0x02050B7C + ldr ip, _02050B8C ; =StrncpySimpleNoPadSafe + ldr r1, _02050B90 ; =TEAM_NAME +#ifdef JAPAN + mov r2, #5 +#else + mov r2, #0xa +#endif + bx ip + .align 2, 0 +_02050B8C: .word StrncpySimpleNoPadSafe +_02050B90: .word TEAM_NAME + arm_func_end GetMainTeamName + + arm_func_start SetMainTeamName +SetMainTeamName: ; 0x02050B94 + ldr r1, _02050BB4 ; =TEAM_NAME + mov r3, #0 +_02050B9C: + ldrb r2, [r0], #1 + strb r2, [r1, r3] + add r3, r3, #1 +#ifdef JAPAN + cmp r3, #5 +#else + cmp r3, #0xa +#endif + blt _02050B9C + bx lr + .align 2, 0 +_02050BB4: .word TEAM_NAME + arm_func_end SetMainTeamName + + arm_func_start GetRankupPoints +GetRankupPoints: ; 0x02050BB8 + stmdb sp!, {r4, lr} + bl GetRank + mov r4, r0 + mov r0, #0x16 + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 + beq _02050BE4 + cmp r4, #0xc + bne _02050BF0 + mov r0, #0 + ldmia sp!, {r4, pc} +_02050BE4: + cmp r4, #8 + movhs r0, #0 + ldmhsia sp!, {r4, pc} +_02050BF0: + mov r0, r4 + bl GetRankUpEntry + ldr r1, _02050C0C ; =TEAM_NAME + ldr r2, [r0, #4] +#ifdef JAPAN + ldr r0, [r1, #8] +#else + ldr r0, [r1, #0xc] +#endif + sub r0, r2, r0 + ldmia sp!, {r4, pc} + .align 2, 0 +_02050C0C: .word TEAM_NAME + arm_func_end GetRankupPoints + + arm_func_start sub_02050C10 +sub_02050C10: ; 0x02050C10 +#ifdef JAPAN +#define SUB_02050C10_OFFSET #8 +#else +#define SUB_02050C10_OFFSET #0xc +#endif + stmdb sp!, {r3, lr} + ldr r1, _02050C6C ; =TEAM_NAME + ldr r2, [r1, SUB_02050C10_OFFSET] + add r2, r2, r0 + mov r0, #0x16 + str r2, [r1, SUB_02050C10_OFFSET] + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 + beq _02050C4C + ldr r0, _02050C6C ; =TEAM_NAME + ldr r1, _02050C70 ; =0x05F5E0FF + ldr r2, [r0, SUB_02050C10_OFFSET] + cmp r2, r1 + strgt r1, [r0, SUB_02050C10_OFFSET] + ldmia sp!, {r3, pc} +_02050C4C: + mov r0, #7 + bl GetRankUpEntry + ldr r1, _02050C6C ; =TEAM_NAME + ldr r2, [r0, #4] + ldr r0, [r1, SUB_02050C10_OFFSET] + cmp r0, r2 + strgt r2, [r1, SUB_02050C10_OFFSET] + ldmia sp!, {r3, pc} + .align 2, 0 +_02050C6C: .word TEAM_NAME +_02050C70: .word 0x05F5E0FF + arm_func_end sub_02050C10 + + arm_func_start GetRank +GetRank: ; 0x02050C74 + stmdb sp!, {r3, r4, r5, lr} + mov r5, #0 + ldr r4, _02050CCC ; =TEAM_NAME + b _02050CA4 +_02050C84: + mov r0, r5 + bl GetRankUpEntry +#ifdef JAPAN + ldr r1, [r4, #8] +#else + ldr r1, [r4, #0xc] +#endif + ldr r0, [r0, #4] + cmp r1, r0 + blt _02050CAC + add r0, r5, #1 + and r5, r0, #0xff +_02050CA4: + cmp r5, #0xc + blo _02050C84 +_02050CAC: + mov r0, #0x16 + bl GetResolvedPerformanceProgressFlag + cmp r0, #0 + bne _02050CC4 + cmp r5, #8 + movhi r5, #8 +_02050CC4: + mov r0, r5 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02050CCC: .word TEAM_NAME + arm_func_end GetRank + + arm_func_start sub_02050CD0 +sub_02050CD0: ; 0x02050CD0 + stmdb sp!, {r3, lr} + bl GetRank + cmp r0, #8 + movhi r0, #8 + ldmia sp!, {r3, pc} + arm_func_end sub_02050CD0 + + arm_func_start GetRankStorageSize +GetRankStorageSize: ; 0x02050CE4 + stmdb sp!, {r3, lr} + bl GetRank + bl GetRankUpEntry + ldr r0, [r0, #8] + ldmia sp!, {r3, pc} + arm_func_end GetRankStorageSize + + arm_func_start sub_02050CF8 +sub_02050CF8: ; 0x02050CF8 + stmdb sp!, {r3, lr} + sub sp, sp, #0x10 + mov r3, r0 + mov r2, r1 + add r0, sp, #0 + mov r1, r3 + bl sub_02050990 + ldr r1, _02050D70 ; =TEAM_NAME + add r0, sp, #0 +#ifdef JAPAN + mov r2, #0x28 +#else + mov r2, #0x50 +#endif + bl CopyBitsTo + ldr r1, _02050D74 ; =_022AB924 + add r0, sp, #0 + mov r2, #0x20 + bl CopyBitsTo + mov r0, #1 + bl GetResolvedPerformanceProgressFlag + ldr r1, _02050D78 ; =TEAM_NAME + tst r0, #0xff +#ifdef JAPAN + strb r0, [r1, #0xc] +#else + strb r0, [r1, #0x10] +#endif + ldrne r1, _02050D7C ; =ARM9_UNKNOWN_DATA__NA_209E6BC + add r0, sp, #0 + ldreq r1, _02050D80 ; =_0209E6BD + mov r2, #1 + bl CopyBitsTo + add r0, sp, #0 + bl sub_020509BC + ldr r0, [sp, #8] + add sp, sp, #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +_02050D70: .word TEAM_NAME +_02050D74: .word _022AB924 +_02050D78: .word TEAM_NAME +_02050D7C: .word ARM9_UNKNOWN_DATA__NA_209E6BC +_02050D80: .word _0209E6BD + arm_func_end sub_02050CF8 + + arm_func_start sub_02050D84 +sub_02050D84: ; 0x02050D84 + stmdb sp!, {lr} + sub sp, sp, #0x14 + mov r3, r0 + mov r2, r1 + add r0, sp, #4 + mov r1, r3 + bl sub_02050974 + ldr r1, _02050DFC ; =TEAM_NAME + add r0, sp, #4 +#ifdef JAPAN + mov r2, #0x28 +#else + mov r2, #0x50 +#endif + bl CopyBitsFrom + ldr r1, _02050E00 ; =_022AB924 + add r0, sp, #4 + mov r2, #0x20 + bl CopyBitsFrom + add r0, sp, #4 + add r1, sp, #0 + mov r2, #1 + bl CopyBitsFrom + ldrb r0, [sp] + ldr r1, _02050E04 ; =TEAM_NAME + tst r0, #1 + movne r2, #1 + moveq r2, #0 + add r0, sp, #4 +#ifdef JAPAN + strb r2, [r1, #0xc] +#else + strb r2, [r1, #0x10] +#endif + bl sub_020509BC + ldr r0, [sp, #0xc] + add sp, sp, #0x14 + ldmia sp!, {pc} + .align 2, 0 +_02050DFC: .word TEAM_NAME +_02050E00: .word _022AB924 +_02050E04: .word TEAM_NAME + arm_func_end sub_02050D84 + + arm_func_start ResetPlayTimer +ResetPlayTimer: ; 0x02050E08 + mov r1, #0 + strb r1, [r0, #4] + str r1, [r0] + bx lr + arm_func_end ResetPlayTimer + + arm_func_start PlayTimerTick +PlayTimerTick: ; 0x02050E18 + ldrb r1, [r0, #4] + add r2, r1, #1 + and r1, r2, #0xff + strb r2, [r0, #4] + cmp r1, #0x3c + bxlo lr + mov r1, #0 + strb r1, [r0, #4] + ldr r2, [r0] + ldr r1, _02050E50 ; =0x022550FF + cmp r2, r1 + addlo r1, r2, #1 + strlo r1, [r0] + bx lr + .align 2, 0 +_02050E50: .word 0x022550FF + arm_func_end PlayTimerTick + + arm_func_start GetPlayTimeSeconds +GetPlayTimeSeconds: ; 0x02050E54 + ldr r0, [r0] + bx lr + arm_func_end GetPlayTimeSeconds + + arm_func_start sub_02050E5C +sub_02050E5C: ; 0x02050E5C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, r4 + add r1, r5, #4 + mov r2, #6 + bl CopyBitsTo + mov r0, r4 + mov r1, r5 + mov r2, #0x20 + bl CopyBitsTo + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02050E5C + + arm_func_start sub_02050E8C +sub_02050E8C: ; 0x02050E8C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r0, r4 + add r1, r5, #4 + mov r2, #6 + bl CopyBitsFrom + mov r0, r4 + mov r1, r5 + mov r2, #0x20 + bl CopyBitsFrom + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02050E8C + + arm_func_start sub_02050EBC +sub_02050EBC: ; 0x02050EBC + stmdb sp!, {r0, r1, r2, r3} + ldrsh r3, [sp, #2] + ldrsh r0, [sp, #6] + ldrsh r2, [sp] + ldrsh r1, [sp, #4] + add r0, r3, r0 + strh r0, [sp, #2] + ldrsh r0, [sp, #2] + add r1, r2, r1 + strh r1, [sp] + cmp r0, #0x3e8 + subge r0, r0, #0x3e8 + ldrgesh r1, [sp] + strgeh r0, [sp, #2] + addge r0, r1, #1 + strgeh r0, [sp] + ldrh r1, [sp, #2] + ldrh r0, [sp] + orr r0, r0, r1, lsl #16 + add sp, sp, #0x10 + bx lr + arm_func_end sub_02050EBC + + arm_func_start SubFixedPoint +SubFixedPoint: ; 0x02050F10 + stmdb sp!, {r0, r1, r2, r3} + ldrsh r3, [sp, #2] + ldrsh r0, [sp, #6] + ldrsh r2, [sp] + ldrsh r1, [sp, #4] + sub r0, r3, r0 + strh r0, [sp, #2] + ldrsh r0, [sp, #2] + sub r1, r2, r1 + strh r1, [sp] + cmp r0, #0 + addlt r0, r0, #0x3e8 + ldrltsh r1, [sp] + strlth r0, [sp, #2] + sublt r0, r1, #1 + strlth r0, [sp] + ldrsh r0, [sp] + cmp r0, #0 + movlt r0, #0 + strlth r0, [sp, #2] + strlth r0, [sp] + ldrh r1, [sp, #2] + ldrh r0, [sp] + orr r0, r0, r1, lsl #16 + add sp, sp, #0x10 + bx lr + arm_func_end SubFixedPoint + + arm_func_start sub_02050F78 +sub_02050F78: ; 0x02050F78 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3} + sub sp, sp, #4 + ldrsh r1, [sp, #8] + ldrsh r0, [sp, #0xc] + cmp r1, r0 + ldrgth r1, [sp, #0xe] + ldrgth r0, [sp, #0xc] + orrgt r0, r0, r1, lsl #16 + bgt _02050FE8 + ldrlth r1, [sp, #0xa] + ldrlth r0, [sp, #8] + orrlt r0, r0, r1, lsl #16 + blt _02050FE8 + ldrsh r1, [sp, #0xa] + ldrsh r0, [sp, #0xe] + cmp r1, r0 + ldrgth r1, [sp, #0xc] + ldrgth r0, [sp, #0xe] + strgth r1, [sp] + strgth r0, [sp, #2] + ldrleh r1, [sp, #8] + ldrleh r0, [sp, #0xa] + strleh r1, [sp] + strleh r0, [sp, #2] + ldrh r1, [sp, #2] + ldrh r0, [sp] + orr r0, r0, r1, lsl #16 +_02050FE8: + add sp, sp, #4 + ldmia sp!, {r3} + add sp, sp, #0x10 + bx lr + arm_func_end sub_02050F78 + + arm_func_start sub_02050FF8 +sub_02050FF8: ; 0x02050FF8 + stmdb sp!, {r3} + sub sp, sp, #4 + strh r0, [sp] + ldrh r0, [sp] + mov r1, #0 + strh r1, [sp, #2] + orr r0, r0, r1, lsl #16 + add sp, sp, #4 + ldmia sp!, {r3} + bx lr + arm_func_end sub_02050FF8 + + arm_func_start BinToDecFixedPoint +BinToDecFixedPoint: ; 0x02051020 + stmdb sp!, {r3} + sub sp, sp, #4 + ldr r2, [r0, #4] + mov r1, #0x3e8 + mov r0, r2, lsl #0x10 + mov r0, r0, lsr #0x10 + mul r1, r0, r1 + mov r2, r2, lsr #0x10 + mov r0, r1, lsr #0x10 + strh r2, [sp] + strh r0, [sp, #2] + ldrh r1, [sp, #2] + ldrh r0, [sp] + orr r0, r0, r1, lsl #16 + add sp, sp, #4 + ldmia sp!, {r3} + bx lr + arm_func_end BinToDecFixedPoint diff --git a/asm/main_rodata_020A2808.s b/asm/main_rodata_020A2808.s index 62ed99ba..b7b2e811 100644 --- a/asm/main_rodata_020A2808.s +++ b/asm/main_rodata_020A2808.s @@ -42,93 +42,95 @@ _020A2894: _020A28A8: .byte 0x78, 0x01, 0xEC, 0x00, 0x34, 0x01, 0x45, 0x01, 0x3A, 0x00, 0x00, 0x00 .byte 0x01, 0x00, 0x1C, 0x00, 0x6E, 0x00, 0x00, 0x00 - .global GUEST_MONSTER_DATA -GUEST_MONSTER_DATA: + + // Guest monsters join the party temporarily for specific dungeons. + .global GUEST_MONSTER_BANETTE +GUEST_MONSTER_BANETTE: .byte 0x00, 0x00, 0x00, 0x00, 0x82, 0x01, 0xDF, 0x00 .byte 0x1B, 0x00, 0x18, 0x00, 0xF9, 0x00, 0x48, 0x01, 0x39, 0x00, 0x0F, 0x00, 0x6E, 0x00, 0x14, 0x00 .byte 0x14, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7D, 0x34, 0x00, 0x00 - .global _020A28E0 -_020A28E0: + .global GUEST_MONSTER_SKORUPI +GUEST_MONSTER_SKORUPI: .byte 0x00, 0x00, 0x00, 0x00 .byte 0xED, 0x01, 0xE0, 0x00, 0x3F, 0x00, 0xC8, 0x00, 0x32, 0x01, 0x00, 0x00, 0x3E, 0x00, 0x0F, 0x00 .byte 0x6E, 0x00, 0x1B, 0x00, 0x18, 0x00, 0x11, 0x00, 0x11, 0x00, 0x00, 0x00, 0xCB, 0x37, 0x00, 0x00 - .global _020A2904 -_020A2904: + .global GUEST_MONSTER_BIDOOF +GUEST_MONSTER_BIDOOF: .byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00 .byte 0x38, 0x00, 0x0E, 0x00, 0x6E, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00 .byte 0x52, 0x15, 0x00, 0x00 - .global _020A2928 -_020A2928: + .global GUEST_MONSTER_SNOVER +GUEST_MONSTER_SNOVER: .byte 0x00, 0x00, 0x00, 0x00, 0xF5, 0x01, 0xDE, 0x00, 0x65, 0x00, 0x61, 0x00 .byte 0x54, 0x00, 0x18, 0x00, 0x40, 0x00, 0x16, 0x00, 0x6E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x15, 0x00 .byte 0x17, 0x00, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00 - .global _020A294C -_020A294C: + .global GUEST_MONSTER_BIDOOF_2 +GUEST_MONSTER_BIDOOF_2: .byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00 .byte 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00, 0x41, 0x00, 0x10, 0x00, 0x6E, 0x00, 0x18, 0x00 .byte 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2A, 0x2D, 0x00, 0x00 - .global _020A2970 -_020A2970: + .global GUEST_MONSTER_GROVYLE +GUEST_MONSTER_GROVYLE: .byte 0x00, 0x00, 0x00, 0x00 .byte 0x19, 0x01, 0xDA, 0x00, 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00 .byte 0x6E, 0x00, 0x45, 0x00, 0x44, 0x00, 0x35, 0x00, 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00 - .global _020A2994 -_020A2994: + .global GUEST_MONSTER_LOUDRED +GUEST_MONSTER_LOUDRED: .byte 0x00, 0x00, 0x00, 0x00, 0x42, 0x01, 0xE1, 0x00, 0xFA, 0x00, 0x2E, 0x00, 0xC3, 0x00, 0xAB, 0x00 .byte 0x54, 0x00, 0x1B, 0x00, 0x6E, 0x00, 0x38, 0x00, 0x2C, 0x00, 0x2D, 0x00, 0x27, 0x00, 0x00, 0x00 .byte 0xE9, 0x3F, 0x01, 0x00 - .global _020A29B8 -_020A29B8: + .global GUEST_MONSTER_DUSKNOIR +GUEST_MONSTER_DUSKNOIR: .byte 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0xE3, 0x00, 0x58, 0x01, 0xC3, 0x01 .byte 0x2F, 0x00, 0x7E, 0x00, 0x82, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x3D, 0x00, 0x39, 0x00, 0x2D, 0x00 .byte 0x35, 0x00, 0x00, 0x00, 0xE7, 0xB6, 0x05, 0x00 - .global _020A29DC -_020A29DC: + .global GUEST_MONSTER_GROVYLE_2 +GUEST_MONSTER_GROVYLE_2: .byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00 .byte 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x45, 0x00 .byte 0x44, 0x00, 0x35, 0x00, 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00 - .global _020A2A00 -_020A2A00: + .global GUEST_MONSTER_CHATOT +GUEST_MONSTER_CHATOT: .byte 0x00, 0x00, 0x00, 0x00 .byte 0xE3, 0x01, 0xDC, 0x00, 0xAE, 0x00, 0x28, 0x00, 0x37, 0x01, 0xFD, 0x01, 0x75, 0x00, 0x24, 0x00 .byte 0x6E, 0x00, 0x3B, 0x00, 0x3C, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1B, 0xE7, 0x05, 0x00 - .global _020A2A24 -_020A2A24: + .global GUEST_MONSTER_SHINY_CELEBI +GUEST_MONSTER_SHINY_CELEBI: .byte 0x00, 0x00, 0x00, 0x00, 0x17, 0x01, 0xDB, 0x00, 0x1A, 0x00, 0x75, 0x00, 0x29, 0x01, 0x5D, 0x00 .byte 0x78, 0x00, 0x2D, 0x00, 0x6E, 0x00, 0x2D, 0x00, 0x2D, 0x00, 0x25, 0x00, 0x26, 0x00, 0x00, 0x00 .byte 0xC1, 0xC0, 0x05, 0x00 - .global _020A2A48 -_020A2A48: + .global GUEST_MONSTER_GROVYLE_3 +GUEST_MONSTER_GROVYLE_3: .byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00, 0x87, 0x00, 0xBE, 0x00 .byte 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x45, 0x00, 0x44, 0x00, 0x35, 0x00 .byte 0x34, 0x00, 0x00, 0x00, 0xB2, 0xB4, 0x07, 0x00 - .global _020A2A6C -_020A2A6C: + .global GUEST_MONSTER_GROVYLE_4 +GUEST_MONSTER_GROVYLE_4: .byte 0x00, 0x00, 0x00, 0x00, 0x19, 0x01, 0xDA, 0x00 .byte 0x87, 0x00, 0xBE, 0x00, 0x50, 0x01, 0x08, 0x00, 0x7D, 0x00, 0x2E, 0x00, 0x6E, 0x00, 0x4A, 0x00 .byte 0x49, 0x00, 0x3A, 0x00, 0x34, 0x00, 0x00, 0x00, 0x82, 0x63, 0x0A, 0x00 - .global _020A2A90 -_020A2A90: + .global GUEST_MONSTER_CRESSELIA +GUEST_MONSTER_CRESSELIA: .byte 0x00, 0x00, 0x00, 0x00 .byte 0x12, 0x02, 0xDD, 0x00, 0xEA, 0x00, 0x38, 0x00, 0x2A, 0x00, 0x51, 0x00, 0x7E, 0x00, 0x2F, 0x00 .byte 0x5E, 0x01, 0x42, 0x00, 0x3F, 0x00, 0x3A, 0x00, 0x4A, 0x00, 0x00, 0x00, 0xA0, 0x86, 0x01, 0x00 - .global _020A2AB4 -_020A2AB4: + .global GUEST_MONSTER_BIDOOF_3 +GUEST_MONSTER_BIDOOF_3: .byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00, 0x2E, 0x01, 0x00, 0x00 .byte 0x41, 0x00, 0x10, 0x00, 0x6E, 0x00, 0x18, 0x00, 0x16, 0x00, 0x16, 0x00, 0x14, 0x00, 0x00, 0x00 .byte 0x2A, 0x2D, 0x00, 0x00 - .global _020A2AD8 -_020A2AD8: + .global GUEST_MONSTER_BIDOOF_4 +GUEST_MONSTER_BIDOOF_4: .byte 0x00, 0x00, 0x00, 0x00, 0xB2, 0x01, 0xD9, 0x00, 0x8B, 0x00, 0xD9, 0x00 .byte 0x2E, 0x01, 0x00, 0x00, 0x38, 0x00, 0x0E, 0x00, 0x6E, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00 .byte 0x14, 0x00, 0x00, 0x00, 0x52, 0x15, 0x00, 0x00 - .global _020A2AFC -_020A2AFC: + .global GUEST_MONSTER_SHAYMIN_LAND +GUEST_MONSTER_SHAYMIN_LAND: .byte 0x00, 0x00, 0x00, 0x00, 0x16, 0x02, 0xE2, 0x00 .byte 0x29, 0x01, 0x49, 0x01, 0x5E, 0x00, 0xD7, 0x01, 0x54, 0x00, 0x37, 0x00, 0x5E, 0x01, 0x40, 0x00 .byte 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0xFB, 0xB7, 0x09, 0x00 - .global _020A2B20 -_020A2B20: + .global GUEST_MONSTER_SNOVER_2 +GUEST_MONSTER_SNOVER_2: .byte 0x00, 0x00, 0x00, 0x00 .byte 0xF5, 0x01, 0xDE, 0x00, 0x65, 0x00, 0x61, 0x00, 0x54, 0x00, 0x18, 0x00, 0x40, 0x00, 0x16, 0x00 .byte 0x6E, 0x00, 0x1E, 0x00, 0x1E, 0x00, 0x15, 0x00, 0x17, 0x00, 0x00, 0x00, 0xFE, 0xD6, 0x00, 0x00 diff --git a/include/common.h b/include/common.h index 9b1fb887..67718665 100644 --- a/include/common.h +++ b/include/common.h @@ -18,7 +18,7 @@ struct ground_move { u8 field_0x1; // Probably padding since it doesn't get initialized u16 id; // 0x2 u8 ginseng; // 0x4: Ginseng boost - u16 field_0x5; // Probably padding since it doesn't get initialized + u8 field_0x5; // Probably padding since it doesn't get initialized }; struct ground_monster { diff --git a/include/dungeon_init.h b/include/dungeon_init.h new file mode 100644 index 00000000..cade1e61 --- /dev/null +++ b/include/dungeon_init.h @@ -0,0 +1,91 @@ +#ifndef PMDSKY_DUNGEON_INIT +#define PMDSKY_DUNGEON_INIT + +#include "common.h" +#include "util.h" + +// Unknown struct included in the dungeon_init struct +struct unk_dungeon_init { + u8 unk0[232]; +}; + +// A struct used to init certain values in the dungeon struct when entering dungeon mode. +// Gets initialized in ground mode. +struct dungeon_init { + u8 id; // 0x0: Copied into dungeon::id + u8 floor; // 0x1: Copied into dungeon::floor + // Copied into dungeon::field_0x74C, might be related to the dungeon being conquered or + // the fixed room overrides. + u16 dungeon_idx; // 0x2 index of the dungeon. The index maps to the id in DUNGEON_SWAP_ID_TABLE + u8 field_0x4; + bool8 nonstory_flag; // 0x5: Copied into dungeon::nonstory_flag + bool8 recruiting_enabled; // 0x6: Copied into dungeon::recruiting_enabled + // 0x7: If true, dungeon::recruiting_enabled gets set to false. Overrides recruiting_enabled. + bool8 force_disable_recruiting; + // 0x8 Pokemon show up in potential recruits, (inferred by assignment from performance progress flag 6) + // Copied into dungeon::field_0x75A + bool8 show_potential_recruits; + // 0x9: Whether team name is shown, (inferred by assignment from performance progress flag 1) + // Copied into dungeon::field_0x75B, but the value is immediately overwritten with TRUE. + bool8 show_team_name; + bool8 send_home_disabled; // 0xA: Copied into dungeon::send_home_disabled + bool8 hidden_land_flag; // 0xB: Copied into dungeon::hidden_land_flag + bool8 skip_faint_animation_flag; // 0xC: Copied into dungeon::skip_faint_animation_flag + // 0xD: Copied into dungeon::dungeon_objective. Read as a signed byte (?). + /* struct dungeon_objective_8 */ u8 dungeon_objective; + s8 field_0xE; + bool8 has_guest_pokemon; // 0xF: If true, a guest pokémon will be added to your team + bool8 send_help_item; // 0x10: If true, you recive an item at the start of the dungeon + bool8 show_rescues_left; // 0x11: If true, you get a message saying how many rescue chances you + // have left + s8 field_0x12; + u8 field_0x13; + // 0x14 + // [EU]0x22DF920 loads this as a word + // [EU]0x22DFBAC loads this as a signed byte + // ??? + u32 field_0x14; // Copied into dungeon::field_0x750 + // 0x18: The dungeon PRNG preseed? Copied into dungeon::prng_preseed_23_bit and + // dungeon::rescue_prng_preseed_23_bit. + u32 prng_preseed_23_bit; + // 0x1C: Array containing the list of quest pokémon that will join the team in the dungeon + // (max 2) + struct ground_monster guest_pokemon[2]; + // 0xA4: Used as a base address at [EU]0x22E0354 and [EU]0x22E03AC. + // It's probably a separate struct. + u8 field_0xA4; + u8 field_0xA5; + u8 field_0xA6; + u8 field_0xA7; + // 0xA8: ID of the item to give to the player if send_help_item is true + /* struct item_id_16 */ u16 help_item; + u8 field_0xAA; + u8 field_0xAB; + // 0xAC: Controls which version of the dungeon to load. Gets copied into + // dungeon::dungeon_game_version_id. Uncertain when the game decides to load the + // Time/Darkness version of dungeons. + enum game_id dungeon_game_version_id; + u32 field_0xB0; + u8 field_0xB4; // Gets set to dungeon::id during dungeon init + u8 field_0xB5; // Gets set to dungeon::floor during dungeon init + u8 field_0xB6; + u8 field_0xB7; + // 0xB8: Used as a base address at [EU]0x22E0ABC. + // It's probably a separate struct. + u8 field_0xB8; // Gets set to dungeon::id during dungeon init + u8 field_0xB9; // Gets set to dungeon::floor during dungeon init + u8 field_0xBA; + u8 field_0xBB; + u32 field_0xBC; + // 0xC0: Used as a base address at [EU]0x22E0A4C + struct unk_dungeon_init field_0xC0; + u8 field_0x1A8; + // Probably padding, these bytes aren't accessed by the funtion that inits this struct + u8 field_0x1A9; + u8 field_0x1AA; + u8 field_0x1AB; +}; + +void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx); + +#endif //PMDSKY_DUNGEON_INIT diff --git a/include/enums.h b/include/enums.h index 1f856a7a..f049e2f4 100644 --- a/include/enums.h +++ b/include/enums.h @@ -1029,6 +1029,226 @@ enum dungeon_id { DUNGEON_DUMMY_0xFF = 255, }; +// Dungeon index. +// This is identical to enum dungeon_id up to ID 212, then there are 8 cases where they differ. +// The 8 remaining entries from 212 onwards aren't in this enum because they haven't been identified yet. +// This enum only has 212 entries, compared to 255 entries in enum dungeon_id. +// See DUNGEON_SWAP_ID_TABLE for the index -> ID mapping. +enum dungeon_idx { + DUNGEON_TEST_DUNGEON_IDX = 0, + DUNGEON_BEACH_CAVE_IDX = 1, + DUNGEON_BEACH_CAVE_PIT_IDX = 2, + DUNGEON_DRENCHED_BLUFF_IDX = 3, + DUNGEON_MT_BRISTLE_IDX = 4, + DUNGEON_MT_BRISTLE_PEAK_IDX = 5, + DUNGEON_WATERFALL_CAVE_IDX = 6, + DUNGEON_APPLE_WOODS_IDX = 7, + DUNGEON_CRAGGY_COAST_IDX = 8, + DUNGEON_SIDE_PATH_IDX = 9, + DUNGEON_MT_HORN_IDX = 10, + DUNGEON_ROCK_PATH_IDX = 11, + DUNGEON_FOGGY_FOREST_IDX = 12, + DUNGEON_FOREST_PATH_IDX = 13, + DUNGEON_STEAM_CAVE_IDX = 14, + DUNGEON_UPPER_STEAM_CAVE_IDX = 15, + DUNGEON_STEAM_CAVE_PEAK_IDX = 16, + DUNGEON_AMP_PLAINS_IDX = 17, + DUNGEON_FAR_AMP_PLAINS_IDX = 18, + DUNGEON_AMP_CLEARING_IDX = 19, + DUNGEON_NORTHERN_DESERT_IDX = 20, + DUNGEON_QUICKSAND_CAVE_IDX = 21, + DUNGEON_QUICKSAND_PIT_IDX = 22, + DUNGEON_UNDERGROUND_LAKE_IDX = 23, + DUNGEON_CRYSTAL_CAVE_IDX = 24, + DUNGEON_CRYSTAL_CROSSING_IDX = 25, + DUNGEON_CRYSTAL_LAKE_IDX = 26, + DUNGEON_CHASM_CAVE_IDX = 27, + DUNGEON_DARK_HILL_IDX = 28, + DUNGEON_SEALED_RUIN_IDX = 29, + DUNGEON_DEEP_SEALED_RUIN_IDX = 30, + DUNGEON_SEALED_RUIN_PIT_IDX = 31, + DUNGEON_DUSK_FOREST_IDX = 32, + DUNGEON_DEEP_DUSK_FOREST_IDX = 33, + DUNGEON_TREESHROUD_FOREST_IDX = 34, + DUNGEON_BRINE_CAVE_IDX = 35, + DUNGEON_LOWER_BRINE_CAVE_IDX = 36, + DUNGEON_BRINE_CAVE_PIT_IDX = 37, + DUNGEON_HIDDEN_LAND_IDX = 38, + DUNGEON_HIDDEN_HIGHLAND_IDX = 39, + DUNGEON_OLD_RUINS_IDX = 40, + DUNGEON_TEMPORAL_TOWER_IDX = 41, + DUNGEON_TEMPORAL_SPIRE_IDX = 42, + DUNGEON_TEMPORAL_PINNACLE_IDX = 43, + DUNGEON_MYSTIFYING_FOREST_IDX = 44, + DUNGEON_MYSTIFYING_FOREST_CLEARING_IDX = 45, + DUNGEON_BLIZZARD_ISLAND_IDX = 46, + DUNGEON_CREVICE_CAVE_IDX = 47, + DUNGEON_LOWER_CREVICE_CAVE_IDX = 48, + DUNGEON_CREVICE_CAVE_PIT_IDX = 49, + DUNGEON_SURROUNDED_SEA_IDX = 50, + DUNGEON_MIRACLE_SEA_IDX = 51, + DUNGEON_DEEP_MIRACLE_SEA_IDX = 52, + DUNGEON_MIRACLE_SEABED_IDX = 53, + DUNGEON_ICE_AEGIS_CAVE_IDX = 54, + DUNGEON_REGICE_CHAMBER_IDX = 55, + DUNGEON_ROCK_AEGIS_CAVE_IDX = 56, + DUNGEON_REGIROCK_CHAMBER_IDX = 57, + DUNGEON_STEEL_AEGIS_CAVE_IDX = 58, + DUNGEON_REGISTEEL_CHAMBER_IDX = 59, + DUNGEON_AEGIS_CAVE_PIT_IDX = 60, + DUNGEON_REGIGIGAS_CHAMBER_IDX = 61, + DUNGEON_MT_TRAVAIL_IDX = 62, + DUNGEON_THE_NIGHTMARE_IDX = 63, + DUNGEON_SPACIAL_RIFT_IDX = 64, + DUNGEON_DEEP_SPACIAL_RIFT_IDX = 65, + DUNGEON_SPACIAL_RIFT_BOTTOM_IDX = 66, + DUNGEON_DARK_CRATER_IDX = 67, + DUNGEON_DEEP_DARK_CRATER_IDX = 68, + DUNGEON_DARK_CRATER_PIT_IDX = 69, + DUNGEON_CONCEALED_RUINS_IDX = 70, + DUNGEON_DEEP_CONCEALED_RUINS_IDX = 71, + DUNGEON_MARINE_RESORT_IDX = 72, + DUNGEON_BOTTOMLESS_SEA_IDX = 73, + DUNGEON_BOTTOMLESS_SEA_DEPTHS_IDX = 74, + DUNGEON_SHIMMER_DESERT_IDX = 75, + DUNGEON_SHIMMER_DESERT_PIT_IDX = 76, + DUNGEON_MT_AVALANCHE_IDX = 77, + DUNGEON_MT_AVALANCHE_PEAK_IDX = 78, + DUNGEON_GIANT_VOLCANO_IDX = 79, + DUNGEON_GIANT_VOLCANO_PEAK_IDX = 80, + DUNGEON_WORLD_ABYSS_IDX = 81, + DUNGEON_WORLD_ABYSS_PIT_IDX = 82, + DUNGEON_SKY_STAIRWAY_IDX = 83, + DUNGEON_SKY_STAIRWAY_APEX_IDX = 84, + DUNGEON_MYSTERY_JUNGLE_IDX = 85, + DUNGEON_DEEP_MYSTERY_JUNGLE_IDX = 86, + DUNGEON_SERENITY_RIVER_IDX = 87, + DUNGEON_LANDSLIDE_CAVE_IDX = 88, + DUNGEON_LUSH_PRAIRIE_IDX = 89, + DUNGEON_TINY_MEADOW_IDX = 90, + DUNGEON_LABYRINTH_CAVE_IDX = 91, + DUNGEON_ORAN_FOREST_IDX = 92, + DUNGEON_LAKE_AFAR_IDX = 93, + DUNGEON_HAPPY_OUTLOOK_IDX = 94, + DUNGEON_MY_MISTRAL_IDX = 95, + DUNGEON_SHIMMER_HILL_IDX = 96, + DUNGEON_LOST_WILDERNESS_IDX = 97, + DUNGEON_MIDNIGHT_FOREST_IDX = 98, + DUNGEON_ZERO_ISLE_NORTH_IDX = 99, + DUNGEON_ZERO_ISLE_EAST_IDX = 100, + DUNGEON_ZERO_ISLE_WEST_IDX = 101, + DUNGEON_ZERO_ISLE_SOUTH_IDX = 102, + DUNGEON_ZERO_ISLE_CENTER_IDX = 103, + DUNGEON_DESTINY_TOWER_IDX = 104, + DUNGEON_DUMMY_0x69_IDX = 105, + DUNGEON_DUMMY_0x6A_IDX = 106, + DUNGEON_OBLIVION_FOREST_IDX = 107, + DUNGEON_TREACHEROUS_WATERS_IDX = 108, + DUNGEON_SOUTHEASTERN_ISLANDS_IDX = 109, + DUNGEON_INFERNO_CAVE_IDX = 110, + DUNGEON_1ST_STATION_PASS_IDX = 111, + DUNGEON_2ND_STATION_PASS_IDX = 112, + DUNGEON_3RD_STATION_PASS_IDX = 113, + DUNGEON_4TH_STATION_PASS_IDX = 114, + DUNGEON_5TH_STATION_PASS_IDX = 115, + DUNGEON_6TH_STATION_PASS_IDX = 116, + DUNGEON_7TH_STATION_PASS_IDX = 117, + DUNGEON_8TH_STATION_PASS_IDX = 118, + DUNGEON_9TH_STATION_PASS_IDX = 119, + DUNGEON_SKY_PEAK_SUMMIT_PASS_IDX = 120, + DUNGEON_5TH_STATION_CLEARING_IDX = 121, + DUNGEON_SKY_PEAK_SUMMIT_IDX = 122, + DUNGEON_STAR_CAVE_SE1_IDX = 123, + DUNGEON_DEEP_STAR_CAVE_IDX = 124, + DUNGEON_DEEP_STAR_CAVE_TEAM_ROGUE_IDX = 125, + DUNGEON_STAR_CAVE_DEPTHS_IDX = 126, + DUNGEON_STAR_CAVE_PIT_IDX = 127, + DUNGEON_MURKY_FOREST_IDX = 128, + DUNGEON_EASTERN_CAVE_IDX = 129, + DUNGEON_FORTUNE_RAVINE_IDX = 130, + DUNGEON_FORTUNE_RAVINE_DEPTHS_IDX = 131, + DUNGEON_FORTUNE_RAVINE_PIT_IDX = 132, + DUNGEON_BARREN_VALLEY_IDX = 133, + DUNGEON_DEEP_BARREN_VALLEY_IDX = 134, + DUNGEON_BARREN_VALLEY_CLEARING_IDX = 135, + DUNGEON_DARK_WASTELAND_IDX = 136, + DUNGEON_TEMPORAL_TOWER_SE5_IDX = 137, + DUNGEON_TEMPORAL_SPIRE_SE5_IDX = 138, + DUNGEON_DUSK_FOREST_SE5_IDX = 139, + DUNGEON_BLACK_SWAMP_IDX = 140, + DUNGEON_SPACIAL_CLIFFS_IDX = 141, + DUNGEON_DARK_ICE_MOUNTAIN_IDX = 142, + DUNGEON_DARK_ICE_MOUNTAIN_PEAK_IDX = 143, + DUNGEON_DARK_ICE_MOUNTAIN_PINNACLE_IDX = 144, + DUNGEON_ICICLE_FOREST_IDX = 145, + DUNGEON_VAST_ICE_MOUNTAIN_IDX = 146, + DUNGEON_VAST_ICE_MOUNTAIN_PEAK_IDX = 147, + DUNGEON_VAST_ICE_MOUNTAIN_PINNACLE_IDX = 148, + DUNGEON_SOUTHERN_JUNGLE_IDX = 149, + DUNGEON_BOULDER_QUARRY_IDX = 150, + DUNGEON_DEEP_BOULDER_QUARRY_IDX = 151, + DUNGEON_BOULDER_QUARRY_CLEARING_IDX = 152, + DUNGEON_RIGHT_CAVE_PATH_IDX = 153, + DUNGEON_LEFT_CAVE_PATH_IDX = 154, + DUNGEON_LIMESTONE_CAVERN_IDX = 155, + DUNGEON_DEEP_LIMESTONE_CAVERN_IDX = 156, + DUNGEON_LIMESTONE_CAVERN_DEPTHS_IDX = 157, + DUNGEON_SPRING_CAVE_IDX = 158, + DUNGEON_UPPER_SPRING_CAVE_HAUNTER_IDX = 159, + DUNGEON_UPPER_SPRING_CAVE_IDX = 160, + DUNGEON_MIDDLE_SPRING_CAVE_IDX = 161, + DUNGEON_LOWER_SPRING_CAVE_IDX = 162, + DUNGEON_SPRING_CAVE_DEPTHS_IDX = 163, + DUNGEON_SPRING_CAVE_PIT_IDX = 164, + DUNGEON_LITTLE_PLAINS_IDX = 165, + DUNGEON_MT_CLEAR_IDX = 166, + DUNGEON_CHALLENGE_RIVER_IDX = 167, + DUNGEON_TRIAL_FOREST_IDX = 168, + DUNGEON_GUIDING_SEA_IDX = 169, + DUNGEON_HIDDEN_SHOPKEEPER_VILLAGE_IDX = 170, + DUNGEON_DUMMY_0xAB_IDX = 171, + DUNGEON_DUMMY_0xAC_IDX = 172, + DUNGEON_DUMMY_0xAD_IDX = 173, + DUNGEON_STAR_CAVE_IDX = 174, + DUNGEON_SHAYMIN_VILLAGE_IDX = 175, + DUNGEON_ARMALDOS_SHELTER_IDX = 176, + DUNGEON_LUMINOUS_SPRING_IDX = 177, + DUNGEON_HOT_SPRING_IDX = 178, + DUNGEON_RESCUE_IDX = 179, + DUNGEON_NORMAL_FLY_MAZE_IDX = 180, + DUNGEON_DARK_FIRE_MAZE_IDX = 181, + DUNGEON_ROCK_WATER_MAZE_IDX = 182, + DUNGEON_GRASS_MAZE_IDX = 183, + DUNGEON_ELEC_STEEL_MAZE_IDX = 184, + DUNGEON_ICE_GROUND_MAZE_IDX = 185, + DUNGEON_FIGHT_PSYCH_MAZE_IDX = 186, + DUNGEON_POISON_BUG_MAZE_IDX = 187, + DUNGEON_DRAGON_MAZE_IDX = 188, + DUNGEON_GHOST_MAZE_IDX = 189, + DUNGEON_EXPLORER_MAZE_IDX = 190, + DUNGEON_FINAL_MAZE_IDX = 191, + DUNGEON_DOJO_0xC0_IDX = 192, + DUNGEON_DOJO_0xC1_IDX = 193, + DUNGEON_DOJO_0xC2_IDX = 194, + DUNGEON_DOJO_0xC3_IDX = 195, + DUNGEON_DOJO_0xC4_IDX = 196, + DUNGEON_DOJO_0xC5_IDX = 197, + DUNGEON_DOJO_0xC6_IDX = 198, + DUNGEON_DOJO_0xC7_IDX = 199, + DUNGEON_DOJO_0xC8_IDX = 200, + DUNGEON_DOJO_0xC9_IDX = 201, + DUNGEON_DOJO_0xCA_IDX = 202, + DUNGEON_DOJO_0xCB_IDX = 203, + DUNGEON_DOJO_0xCC_IDX = 204, + DUNGEON_DOJO_0xCD_IDX = 205, + DUNGEON_DOJO_0xCE_IDX = 206, + DUNGEON_DOJO_0xCF_IDX = 207, + DUNGEON_DOJO_0xD0_IDX = 208, + DUNGEON_DOJO_0xD1_IDX = 209, + DUNGEON_DOJO_0xD2_IDX = 210, + DUNGEON_DOJO_0xD3_IDX = 211 +}; + // Dungeon group ID. // This is more in line with what we would think of as a "whole dungeon". // A single dungeon group might encompass multiple dungeon IDs. @@ -3464,7 +3684,12 @@ enum script_calc_operation { // https://docs.google.com/spreadsheets/d/1NK3wkC8mOCu-tVkxULLkhpgPR-glApiD2v3zp-mdW7w enum performance_progress_flag { - PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3 + PERFORMANCE_PROGRESS_FLAG_SHOW_TEAM_NAME = 1, + PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3, + PERFORMANCE_PROGRESS_FLAG_SHOW_POTENTIAL_RECRUITS = 5, + PERFORMANCE_PROGRESS_FLAG_EVOLUTION_ENABLED = 6, + PERFORMANCE_PROGRESS_FLAG_LEADER_SWITCH_ENABLED = 7, + PERFORMANCE_PROGRESS_FLAG_NO_CHATOT_IN_BRINE_CAVE = 25 }; enum compare_operation { // Taken from pmd-red's FlagJudgeOperation @@ -3511,4 +3736,11 @@ enum far_off_pals_option { FAR_OFF_PALS_LOOK = 1 }; +enum dungeon_mode { + DMODE_CLOSED = 0, // Dungeon is locked and uncleared + DMODE_OPEN = 1, // Dungeon is unlocked and uncleared + DMODE_REQUEST = 2, // Dungeon has been cleared, but cannot be directly accessed + DMODE_OPEN_AND_REQUEST = 3, // Dunegon is unlocked and cleared +}; + #endif //PMDSKY_ENUMS_H diff --git a/main.lsf b/main.lsf index 71d202a9..bd4e3f11 100644 --- a/main.lsf +++ b/main.lsf @@ -98,6 +98,8 @@ Static main Object asm/main_0204DB08.o Object src/main_0204DD80.o Object asm/main_0204DE7C.o + Object src/dungeon_init.o + Object asm/main_0204EFE0.o Object src/number_util.o Object asm/main_02051098.o Object src/main_020512B0.o diff --git a/src/dungeon_init.c b/src/dungeon_init.c new file mode 100644 index 00000000..1c60816e --- /dev/null +++ b/src/dungeon_init.c @@ -0,0 +1,223 @@ +#include "dungeon_init.h" +#include "enums.h" +#include "game_mode.h" +#include "progression.h" +#include "script_variable.h" + +extern u8* GUEST_MONSTER_BANETTE; +extern u8* GUEST_MONSTER_SKORUPI; +extern u8* GUEST_MONSTER_BIDOOF; +extern u8* GUEST_MONSTER_SNOVER; +extern u8* GUEST_MONSTER_BIDOOF_2; +extern u8* GUEST_MONSTER_GROVYLE; +extern u8* GUEST_MONSTER_LOUDRED; +extern u8* GUEST_MONSTER_DUSKNOIR; +extern u8* GUEST_MONSTER_GROVYLE_2; +extern u8* GUEST_MONSTER_CHATOT; +extern u8* GUEST_MONSTER_SHINY_CELEBI; +extern u8* GUEST_MONSTER_GROVYLE_3; +extern u8* GUEST_MONSTER_GROVYLE_4; +extern u8* GUEST_MONSTER_CRESSELIA; +extern u8* GUEST_MONSTER_BIDOOF_3; +extern u8* GUEST_MONSTER_BIDOOF_4; +extern u8* GUEST_MONSTER_SHAYMIN_LAND; +extern u8* GUEST_MONSTER_SNOVER_2; + +extern s32 GetDungeonModeSpecial(s16); +extern s8 IsNoLossPenaltyDungeon(s16); +extern void AddGuestMonster(void*, u8, void*); +extern s8 DungeonSwapIdxToId(s16); + +void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx) +{ + u8 game_mode = GetGameMode(); + dg_init->dungeon_idx = dungeon_idx; + dg_init->id = DungeonSwapIdxToId(dungeon_idx); + dg_init->floor = 1; + dg_init->field_0x12 = -1; + dg_init->dungeon_game_version_id = GAME_SKY; + dg_init->dungeon_objective = 0; + dg_init->field_0xE = -1; + dg_init->field_0x4 = 0; + dg_init->has_guest_pokemon = FALSE; + dg_init->send_help_item = FALSE; + dg_init->show_rescues_left = FALSE; + + if (game_mode != GAME_MODE_NORMAL) { + dg_init->nonstory_flag = FALSE; + dg_init->recruiting_enabled = FALSE; + dg_init->show_potential_recruits = FALSE; + dg_init->show_team_name = FALSE; + } else { + dg_init->nonstory_flag = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_LEADER_SWITCH_ENABLED); + dg_init->recruiting_enabled = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_SHOW_POTENTIAL_RECRUITS); + dg_init->show_potential_recruits = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_EVOLUTION_ENABLED); + dg_init->show_team_name = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_SHOW_TEAM_NAME); + } + + dg_init->send_home_disabled = FALSE; + dg_init->hidden_land_flag = FALSE; + dg_init->force_disable_recruiting = FALSE; + dg_init->skip_faint_animation_flag = FALSE; + + // Init guest Pokemon + for(s32 idx = 0; idx < 2; idx++) { + dg_init->guest_pokemon[idx].is_valid = FALSE; + dg_init->guest_pokemon[idx].id = 0; + } + + // Init GAME_MODE_5 specific values + if (game_mode == GAME_MODE_5) { + dg_init->nonstory_flag = TRUE; + dg_init->recruiting_enabled = FALSE; + dg_init->show_potential_recruits = FALSE; + dg_init->show_team_name = FALSE; + dg_init->hidden_land_flag = FALSE; + dg_init->dungeon_objective = OBJECTIVE_UNK_GAME_MODE_5; + dg_init->field_0x4 = 0; + dg_init->show_rescues_left = FALSE; + switch (dungeon_idx) { + default: + break; + case DUNGEON_HIDDEN_LAND_IDX: + case DUNGEON_HIDDEN_HIGHLAND_IDX: + case DUNGEON_OLD_RUINS_IDX: + case DUNGEON_TEMPORAL_TOWER_IDX: + case DUNGEON_TEMPORAL_SPIRE_IDX: + case DUNGEON_TEMPORAL_PINNACLE_IDX: + dg_init->nonstory_flag = FALSE; + break; + } + return; + } + + // Init values specific to each dungeon mode + switch (GetDungeonModeSpecial(dungeon_idx)) { + case DMODE_OPEN_AND_REQUEST: + dg_init->dungeon_objective = OBJECTIVE_STORY; + break; + case DMODE_OPEN: + bool8 hidden_land; + bool8 force_disable_recruiting; + hidden_land = FALSE; + force_disable_recruiting = FALSE; + dg_init->dungeon_objective = OBJECTIVE_STORY; + dg_init->skip_faint_animation_flag = IsNoLossPenaltyDungeon(dungeon_idx); + + switch (dungeon_idx) { + case DUNGEON_CRAGGY_COAST_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF); + break; + case DUNGEON_SIDE_PATH_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_4); + break; + case DUNGEON_MT_HORN_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_3); + break; + case DUNGEON_ROCK_PATH_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BIDOOF_2); + break; + case DUNGEON_DUSK_FOREST_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE); + break; + case DUNGEON_DEEP_DUSK_FOREST_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_3); + AddGuestMonster(dg_init, 1, &GUEST_MONSTER_SHINY_CELEBI); + break; + case DUNGEON_TREESHROUD_FOREST_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_2); + break; + case DUNGEON_BRINE_CAVE_IDX: + if (GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_NO_CHATOT_IN_BRINE_CAVE) == 0) { + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_CHATOT); + } + break; + case DUNGEON_HIDDEN_LAND_IDX: + case DUNGEON_HIDDEN_HIGHLAND_IDX: + case DUNGEON_OLD_RUINS_IDX: + force_disable_recruiting = TRUE; + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_GROVYLE_4); + break; + case DUNGEON_TEMPORAL_TOWER_IDX: + case DUNGEON_TEMPORAL_SPIRE_IDX: + case DUNGEON_TEMPORAL_PINNACLE_IDX: + hidden_land = TRUE; + break; + case DUNGEON_MT_TRAVAIL_IDX: + case DUNGEON_THE_NIGHTMARE_IDX: + case DUNGEON_SPACIAL_RIFT_IDX: + case DUNGEON_DEEP_SPACIAL_RIFT_IDX: + case DUNGEON_SPACIAL_RIFT_BOTTOM_IDX: + hidden_land = TRUE; + break; + case DUNGEON_DARK_CRATER_IDX: + case DUNGEON_DEEP_DARK_CRATER_IDX: + case DUNGEON_DARK_CRATER_PIT_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_CRESSELIA); + hidden_land = TRUE; + break; + case DUNGEON_1ST_STATION_PASS_IDX: + case DUNGEON_2ND_STATION_PASS_IDX: + case DUNGEON_3RD_STATION_PASS_IDX: + case DUNGEON_4TH_STATION_PASS_IDX: + case DUNGEON_5TH_STATION_PASS_IDX: + case DUNGEON_6TH_STATION_PASS_IDX: + case DUNGEON_7TH_STATION_PASS_IDX: + case DUNGEON_8TH_STATION_PASS_IDX: + case DUNGEON_9TH_STATION_PASS_IDX: + case DUNGEON_SKY_PEAK_SUMMIT_PASS_IDX: + case DUNGEON_5TH_STATION_CLEARING_IDX: + case DUNGEON_SKY_PEAK_SUMMIT_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SHAYMIN_LAND); + break; + case DUNGEON_STAR_CAVE_SE1_IDX: + if (LoadScriptVariableValue(NULL, 0x10) == 0) { + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SNOVER_2); + } + break; + case DUNGEON_DEEP_STAR_CAVE_IDX: + if (LoadScriptVariableValue(NULL, 0x10) == 0) { + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_SNOVER); + } + break; + case DUNGEON_MURKY_FOREST_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_BANETTE); + AddGuestMonster(dg_init, 1, &GUEST_MONSTER_SKORUPI); + break; + + case DUNGEON_BARREN_VALLEY_CLEARING_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_DUSKNOIR); + break; + + case DUNGEON_SPRING_CAVE_PIT_IDX: + AddGuestMonster(dg_init, 0, &GUEST_MONSTER_LOUDRED); + break; + } + + if (hidden_land != FALSE) { + dg_init->hidden_land_flag = TRUE; + } + + if (force_disable_recruiting != FALSE) { + dg_init->force_disable_recruiting = TRUE; + } + break; + case DMODE_REQUEST: + switch (dungeon_idx) { + default: + break; + case DUNGEON_HIDDEN_LAND_IDX: + case DUNGEON_HIDDEN_HIGHLAND_IDX: + case DUNGEON_OLD_RUINS_IDX: + case DUNGEON_TEMPORAL_TOWER_IDX: + case DUNGEON_TEMPORAL_SPIRE_IDX: + case DUNGEON_TEMPORAL_PINNACLE_IDX: + dg_init->hidden_land_flag = TRUE; + break; + } + dg_init->dungeon_objective = OBJECTIVE_NORMAL; + break; + } + dg_init->field_0x4 = 0; + dg_init->show_rescues_left = FALSE; +}