From 2fa48009037ea772b40b6a8598b3794ab91b57ef Mon Sep 17 00:00:00 2001 From: slaw-22 <> Date: Thu, 1 Jan 2026 11:15:51 +0000 Subject: [PATCH] Decomp more dungeon initialisation funcs --- asm/include/main_0204DE7C.inc | 1 - asm/include/main_02058F24.inc | 492 +++---- asm/include/main_0206A750.inc | 102 ++ asm/main_0204DE7C.s | 63 - asm/main_02058F24.s | 2589 --------------------------------- asm/main_0206A750.s | 2559 ++++++++++++++++++++++++++++++++ include/dungeon_init.h | 9 +- include/dungeon_init_2.h | 7 + main.lsf | 2 + src/dungeon_init.c | 40 + src/dungeon_init_2.c | 22 + 11 files changed, 2941 insertions(+), 2945 deletions(-) create mode 100644 asm/include/main_0206A750.inc create mode 100644 asm/main_0206A750.s create mode 100644 include/dungeon_init_2.h create mode 100644 src/dungeon_init_2.c diff --git a/asm/include/main_0204DE7C.inc b/asm/include/main_0204DE7C.inc index 3a9160ff..556aa0f1 100644 --- a/asm/include/main_0204DE7C.inc +++ b/asm/include/main_0204DE7C.inc @@ -40,7 +40,6 @@ .public sub_020509BC .public sub_0205633C .public sub_02056360 -.public sub_0205B77C .public sub_0205BB7C .public sub_0205BD14 .public sub_0205F00C diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index b71e72ec..f5c0fc7f 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -1,4 +1,205 @@ #pragma once +.public ARM9_UNKNOWN_TABLE__NA_20A68BC +.public AURA_BOW_STAT_BOOST +.public AllocateTemp1024ByteBufferFromPool +.public BulkItemToItem +.public CAFE_MISSION_REWARD_TYPE_WEIGHTS +.public CanEvolve +.public CloseCollectionMenu +.public ClosePortraitBox +.public Copy16BitsFrom +.public CopyBitsFrom +.public CopyBitsTo +.public CopyFrameTypeOption +.public CopyMovesetFrom +.public CopyMovesetTo +.public CopyNStringFromId +.public CreateCollectionMenu +.public CreatePortraitBox +.public DEFAULT_MISSION_REWARD_TYPE_WEIGHTS +.public DEF_SCARF_STAT_BOOST +.public DEMO_TEAMS +.public Debug_GetDebugFlag +.public Debug_Print0 +.public DexNumbersEqual +.public DirectoryFileMngr_ExtractAllDirectoryFiles +.public DirectoryFileMngr_OpenDirectoryFile +.public DrawTextInWindow +.public DungeonGoesUp +.public DungeonSwapIdToIdx +.public ENTITIES +.public EVENTS +.public EnableAllLearnableIqSkills +.public EnqueueRender3dTiling +.public ExplorersOfSkyMain +.public FemaleToMaleForm +.public FindItemInInventory +.public GetAbility +.public GetAbilityDescStringId +.public GetActiveRosterIndex +.public GetActiveTeamMember +.public GetAdventureLogDungeonFloor +.public GetBaseForm +.public GetBaseFormBurmyWormadamShellosGastrodonCherrim +.public GetBodySize +.public GetCategoryString +.public GetDebugSpecialEpisodeNumber +.public GetDungeonMode +.public GetEvoParameters +.public GetExclusiveItem +.public GetFirstMatchingMemberIdx +.public GetHero +.public GetHeroMemberIdx +.public GetHpBoostFromExclusiveItems +.public GetIqGroup +.public GetIqSkillStringId +.public GetLanguageType +.public GetLearnableIqSkills +.public GetLvlUpEntry +.public GetMainCharacter1 +.public GetMainCharacter1MemberIdx +.public GetMainCharacter2 +.public GetMainCharacter2MemberIdx +.public GetMainCharacter3 +.public GetMainCharacter3MemberIdx +.public GetMainTeamNameWithCheck +.public GetMaxItemsAllowed +.public GetMaxMembersAllowed +.public GetMaxReachedFloor +.public GetMaxRescueAttempts +.public GetMonsterGenderVeneer +.public GetNameRaw +.public GetNameString +.public GetNbFloors +.public GetPartner +.public GetPartnerMemberIdx +.public GetPartyMembers +.public GetRank +.public GetResolvedPerformanceProgressFlag +.public GetScenarioBalance +.public GetSecondFormIfValid +.public GetSpecialEpisodeType +.public GetStringFromFileVeneer +.public GetTeamMember +.public GetType +.public GetTypeStringId +.public GlobalProgressAlloc +.public HandleSir0TranslationVeneer +.public HasMonsterBeenAttackedInDungeons +.public IQ_GROUP_SKILLS +.public IQ_SKILLS +.public ITEM_DELIVERY_TABLE +.public InitKaomadoStream +.public InitOptionsVeneer +.public InitPreprocessorArgs +.public InitScriptVariableValues +.public InitSpecialEpisodeHero +.public InitWanTable +.public IqSkillFlagTest +.public IsAuraBow +.public IsCollectionMenuActive +.public IsForbiddenFloor +.public IsInvalidForMission +.public IsItemAvailableInDungeonGroup +.public IsItemInBag +.public IsItemInTimeDarkness +.public IsItemInTreasureBoxes +.public IsItemValidVeneer +.public IsMonsterOnTeam +.public IsMonsterValid +.public IsMovesetValid +.public IsMovesetValidInTimeDarkness +.public IsSpecialEpisodeBeaten +.public IsSpecialEpisodeOpen +.public IsStorableItem +.public IsStoryBeforePoint +.public IsThrownItem +.public IsValidTargetItem +.public JOB_MENU_ITEMS_1 +.public JOB_MENU_ITEMS_10 +.public JOB_MENU_ITEMS_11 +.public JOB_MENU_ITEMS_12 +.public JOB_MENU_ITEMS_13 +.public JOB_MENU_ITEMS_2 +.public JOB_MENU_ITEMS_3 +.public JOB_MENU_ITEMS_4 +.public JOB_MENU_ITEMS_5 +.public JOB_MENU_ITEMS_6 +.public JOB_MENU_ITEMS_7 +.public JOB_MENU_ITEMS_8 +.public JOB_MENU_ITEMS_9 +.public JOB_WINDOW_PARAMS_1 +.public JOB_WINDOW_PARAMS_2 +.public JoinedAtRangeCheck2 +.public KeyWaitInit +.public LoadFileFromRom +.public LoadOverlay +.public LoadScriptVariableValue +.public LoadTblTalk +.public LoadWazaP +.public MISSION_BANNED_MONSTERS +.public MISSION_BANNED_STORY_MONSTERS +.public MISSION_DELIVER_LIST_PTR +.public MISSION_DUNGEON_UNLOCK_TABLE +.public MISSION_MENU_STRING_IDS_1 +.public MISSION_MENU_STRING_IDS_2 +.public MISSION_RANK_POINTS +.public MISSION_STRING_IDS +.public MISSION_VALIDATION_FUNCTION_LIST +.public MUNCH_BELT_STAT_BOOST +.public MainGame +.public MemAlloc +.public MemFree +.public MemZero +.public MemcpySimple +.public MemsetSimple +.public MissionToWonderMailPassword +.public MultiplyByFixedPoint +.public NO_SEND_ITEM_TABLE +.public NoteLoadBase +.public NoteSaveBase +.public OUTLAW_MISSION_REWARD_TYPE_WEIGHTS +.public OverlayIsLoaded +.public POWER_BAND_STAT_BOOST +.public PlaySeVolumeWrapper +.public PreprocessString +.public PreprocessStringFromId +.public RANK_STRING_PTR_TABLE +.public REMOTE_STRING_PTR_TABLE +.public Rand16Bit +.public RandInt +.public RandIntSafe +.public RandRangeSafe +.public ReadSaveHeader +.public RemoveFirstUnequippedItemOfType +.public RetrieveFromItemList2 +.public SPECIAL_BAND_STAT_BOOST +.public STATUS_NAME_STRING_IDS +.public SaveScriptVariableValue +.public SetAdventureLogStructLocation +.public SetBothScreensWindowsColor +.public SetCollectionMenuField0x1B2 +.public SetGameMode +.public SetPokemonJoined +.public SetQuestionMarks +.public SetScenarioProgressScriptVar +.public SetSpecialEpisodeOpen +.public SetSpecialEpisodeType +.public ShowPortraitInPortraitBox +.public StrcpyName +.public StringFromId +.public StrncmpSimple +.public StrncpyName +.public StrncpySimple +.public StrncpySimpleNoPadSafe +.public TACTIC_NAME_STRING_IDS +.public TEAM_MEMBER_TABLE_PTR +.public UnloadFile +.public UnloadOverlay +.public UpdateWindow +.public WAN_TABLE +.public ZINC_BAND_STAT_BOOST +.public ZeroInitScriptVariable .public _020A1870 .public _020A18FC .public _020A1904 @@ -79,17 +280,6 @@ .public _020A937C .public _020A9394 .public _020A93B4 -.public _020A94BC -.public _020A94C6 -.public _020A94D2 -.public _020A9E80 -.public _020A9EE0 -.public _020A9F34 -.public _020A9F48 -.public _020A9F5C -.public _020A9F70 -.public _020A9F84 -.public _020A9F98 .public _020AFC70 .public _020B0A54 .public _020B0AD8 @@ -119,13 +309,6 @@ .public _020B0B3F .public _020B0B44 .public _020B0B48 -.public _020B0B4C -.public _020B0B5C -.public _020B0B60 -.public _020B0B6C -.public _020B0B70 -.public _020B0B74 -.public _020B1290 .public _022B57BC .public _022B57C0 .public _022B580C @@ -133,195 +316,8 @@ .public _022B6F10 .public _022B7310 .public _022B7320 -.public _022B7331 -.public _022B7334 -.public _022B7340 -.public _022B734C -.public _022B7A30 -.public _022B8330 -.public _022B9130 .public _s32_div_f -.public AllocateTemp1024ByteBufferFromPool -.public ARM9_UNKNOWN_TABLE__NA_20A68BC -.public AURA_BOW_STAT_BOOST -.public BulkItemToItem -.public CAFE_MISSION_REWARD_TYPE_WEIGHTS -.public CanEvolve -.public CloseCollectionMenu -.public ClosePortraitBox -.public Copy16BitsFrom -.public CopyBitsFrom -.public CopyBitsTo -.public CopyMovesetFrom -.public CopyMovesetTo -.public CopyNStringFromId -.public CosAbs4096 -.public CreateCollectionMenu -.public CreatePortraitBox -.public Debug_GetDebugFlag -.public Debug_Print0 -.public DEF_SCARF_STAT_BOOST -.public DEFAULT_MISSION_REWARD_TYPE_WEIGHTS -.public DelayWteFree -.public DeleteWanTableEntryVeneer -.public DEMO_TEAMS -.public DexNumbersEqual -.public DirectoryFileMngr_ExtractAllDirectoryFiles -.public DirectoryFileMngr_OpenDirectoryFile -.public DrawTextInWindow -.public DRIVER_WORK -.public DseBgm_StopAll -.public DseBgm_SysSetupNoteList -.public DseDriver_StartMainThread -.public DseDriver_StartTickTimer -.public DseMem_Clear -.public DseMem_Quit -.public DseSe_StopAll -.public DseSe_SysReset -.public DseSequence_PauseList -.public DseSwd_SysInit -.public DseSwd_SysQuit -.public DseVoice_ResetAll -.public DseVoice_ResetHW -.public DUNGEON_SWAP_ID_TABLE -.public DungeonGoesUp -.public EnableAllLearnableIqSkills -.public EnqueueRender3dTiling -.public ENTITIES -.public EVENTS -.public ExplorersOfSkyMain -.public FemaleToMaleForm -.public FindItemInInventory -.public GetAbility -.public GetAbilityDescStringId -.public GetActiveRosterIndex -.public GetActiveTeamMember -.public GetAdventureLogDungeonFloor -.public GetBaseForm -.public GetBaseFormBurmyWormadamShellosGastrodonCherrim -.public GetBodySize -.public GetCategoryString -.public GetDebugSpecialEpisodeNumber -.public GetDungeonMode -.public GetEvoParameters -.public GetExclusiveItem -.public GetExecuteSpecialEpisodeType -.public GetFirstMatchingMemberIdx -.public GetHero -.public GetHeroMemberIdx -.public GetHpBoostFromExclusiveItems -.public GetIqGroup -.public GetIqSkillStringId -.public GetLanguageType -.public GetLearnableIqSkills -.public GetLvlUpEntry -.public GetMainCharacter1 -.public GetMainCharacter1MemberIdx -.public GetMainCharacter2 -.public GetMainCharacter2MemberIdx -.public GetMainCharacter3 -.public GetMainCharacter3MemberIdx -.public GetMainTeamNameWithCheck -.public GetMaxItemsAllowed -.public GetMaxMembersAllowed -.public GetMaxReachedFloor -.public GetMaxRescueAttempts -.public GetMonsterGenderVeneer -.public GetNameRaw -.public GetNameString -.public GetNbFloors -.public GetPartner -.public GetPartnerMemberIdx -.public GetPartyMembers -.public GetResolvedPerformanceProgressFlag -.public GetRank -.public GetScenarioBalance -.public GetSecondFormIfValid -.public GetSpecialEpisodeType -.public GetStringFromFileVeneer -.public GetTeamMember -.public GetType -.public GetTypeStringId -.public GlobalProgressAlloc -.public HandleSir0TranslationVeneer -.public HasMonsterBeenAttackedInDungeons -.public InitAnimationControlWithSet__0201C0B0 -.public InitKaomadoStream -.public InitPreprocessorArgs -.public InitScriptVariableValues -.public InitSpecialEpisodeHero -.public InitWanTable -.public IQ_GROUP_SKILLS -.public IQ_SKILLS -.public IqSkillFlagTest -.public IsAuraBow -.public IsCollectionMenuActive -.public IsForbiddenFloor -.public IsInvalidForMission -.public IsItemAvailableInDungeonGroup -.public IsItemInBag -.public IsItemInTimeDarkness -.public IsItemInTreasureBoxes -.public IsItemValidVeneer -.public IsMonsterOnTeam -.public IsMonsterValid -.public IsMovesetValid -.public IsMovesetValidInTimeDarkness -.public IsSpecialEpisodeBeaten -.public IsSpecialEpisodeOpen -.public IsStorableItem -.public IsStoryBeforePoint -.public IsThrownItem -.public IsValidTargetItem -.public ITEM_DELIVERY_TABLE -.public JOB_MENU_ITEMS_1 -.public JOB_MENU_ITEMS_10 -.public JOB_MENU_ITEMS_11 -.public JOB_MENU_ITEMS_12 -.public JOB_MENU_ITEMS_13 -.public JOB_MENU_ITEMS_2 -.public JOB_MENU_ITEMS_3 -.public JOB_MENU_ITEMS_4 -.public JOB_MENU_ITEMS_5 -.public JOB_MENU_ITEMS_6 -.public JOB_MENU_ITEMS_7 -.public JOB_MENU_ITEMS_8 -.public JOB_MENU_ITEMS_9 -.public JOB_WINDOW_PARAMS_1 -.public JOB_WINDOW_PARAMS_2 -.public JoinedAtRangeCheck2 -.public KeyWaitInit -.public LoadFileFromRom -.public LoadOverlay -.public LoadScriptVariableValue -.public LoadTblTalk -.public LoadWanTableEntry -.public LoadWazaP -.public LoadWteFromRom -.public MainGame -.public MAP_MARKER_PLACEMENTS -.public MemAlloc -.public MemcpySimple -.public MemFree .public memset -.public MemsetSimple -.public MemZero -.public MISSION_BANNED_MONSTERS -.public MISSION_BANNED_STORY_MONSTERS -.public MISSION_DELIVER_LIST_PTR -.public MISSION_DUNGEON_UNLOCK_TABLE -.public MISSION_MENU_STRING_IDS_1 -.public MISSION_MENU_STRING_IDS_2 -.public MISSION_RANK_POINTS -.public MISSION_STRING_IDS -.public MISSION_VALIDATION_FUNCTION_LIST -.public MissionToWonderMailPassword -.public MultiplyByFixedPoint -.public MUNCH_BELT_STAT_BOOST -.public NO_SEND_ITEM_TABLE -.public NoteLoadBase -.public NoteSaveBase -.public OUTLAW_MISSION_REWARD_TYPE_WEIGHTS .public ov00_022BE0C8 .public ov01_02337B3C .public ov01_02337B68 @@ -335,51 +331,11 @@ .public ov03_0233CDC8 .public ov03_0233CDD8 .public ov03_0233CDE4 -.public ov10_022C2340 -.public ov10_022C23B0 -.public ov10_022C23EC -.public ov10_022C2450 -.public ov10_022C24DC .public ov11_022E82CC .public ov11_022E96E4 -.public OverlayIsLoaded -.public PlaySeVolumeWrapper -.public POWER_BAND_STAT_BOOST -.public PreprocessString -.public PreprocessStringFromId -.public Rand16Bit -.public RandInt -.public RandIntSafe -.public RandRangeSafe -.public RANK_STRING_PTR_TABLE -.public ReadSaveHeader -.public REMOTE_STRING_PTR_TABLE -.public RemoveFirstUnequippedItemOfType -.public RetrieveFromItemList2 -.public SaveScriptVariableValue -.public SetAdventureLogStructLocation -.public SetAnimationForAnimationControl -.public SetBothScreensWindowsColor -.public SetCollectionMenuField0x1B2 -.public SetPokemonJoined -.public SetQuestionMarks -.public SetScenarioProgressScriptVar -.public SetSpecialEpisodeOpen -.public SetSpecialEpisodeType -.public SetSpriteIdForAnimationControl -.public ShowPortraitInPortraitBox -.public SinAbs4096 -.public SPECIAL_BAND_STAT_BOOST -.public STATUS_NAME_STRING_IDS .public strcat .public strcpy -.public StrcpyName -.public StringFromId .public strncat -.public StrncmpSimple -.public StrncpyName -.public StrncpySimple -.public StrncpySimpleNoPadSafe .public sub_02001AB0 .public sub_020022C4 .public sub_020022D0 @@ -411,26 +367,13 @@ .public sub_02014B74 .public sub_02014C20 .public sub_0201BB3C -.public sub_0201CF5C -.public sub_0201D12C .public sub_0201D7A8 -.public sub_0201D9C8 .public sub_0201DD90 -.public sub_0201DF38 -.public sub_0201E020 .public sub_0201E050 -.public sub_0201E12C .public sub_0201E380 -.public sub_0201E7D8 .public sub_0201F208 -.public sub_0201F248 -.public sub_0201F2AC -.public sub_0201F324 -.public sub_0201F348 -.public sub_0201F36C .public sub_020205E4 .public sub_020205F8 -.public sub_02024934 .public sub_020251F0 .public sub_02025304_JP .public sub_0202568C @@ -480,14 +423,8 @@ .public sub_02048C3C .public sub_0204A198 .public sub_0204A1A4 -.public InitOptionsVeneer -.public CopyFrameTypeOption -.public SetGameMode .public sub_0204D018 .public sub_0204E210 -.public sub_0204E6FC -.public sub_0204E770 -.public sub_0204E780 .public sub_0204F1B4 .public sub_0204F7A8 .public sub_0204F9B8 @@ -523,31 +460,4 @@ .public sub_02056E04 .public sub_020584F8 .public sub_02058C30 -.public sub_0206DC78 -.public sub_0206F6FC -.public sub_0206F774 -.public sub_0206F9A4 -.public sub_02070124 -.public sub_02070148 -.public sub_02070158 -.public sub_02070188 -.public sub_020701B0 -.public sub_02070EA0 -.public sub_02070F4C -.public sub_020729A4 -.public sub_02075600 -.public sub_020756E8 -.public sub_0207A7EC -.public sub_0207A8F4 -.public sub_0207AD54 -.public sub_0207AEF4 -.public sub_0207AFF0 -.public TACTIC_NAME_STRING_IDS -.public TEAM_MEMBER_TABLE_PTR -.public UnloadFile -.public UnloadOverlay -.public UpdateWindow .public vsprintf -.public WAN_TABLE -.public ZINC_BAND_STAT_BOOST -.public ZeroInitScriptVariable diff --git a/asm/include/main_0206A750.inc b/asm/include/main_0206A750.inc new file mode 100644 index 00000000..e0738fdf --- /dev/null +++ b/asm/include/main_0206A750.inc @@ -0,0 +1,102 @@ +#pragma once +.public CosAbs4096 +.public DRIVER_WORK +.public DUNGEON_SWAP_ID_TABLE +.public Debug_Print0 +.public DelayWteFree +.public DeleteWanTableEntryVeneer +.public DseBgm_StopAll +.public DseBgm_SysSetupNoteList +.public DseDriver_StartMainThread +.public DseDriver_StartTickTimer +.public DseMem_Clear +.public DseMem_Quit +.public DseSe_StopAll +.public DseSe_SysReset +.public DseSequence_PauseList +.public DseSwd_SysInit +.public DseSwd_SysQuit +.public DseVoice_ResetAll +.public DseVoice_ResetHW +.public GetDungeonMode +.public GetExecuteSpecialEpisodeType +.public InitAnimationControlWithSet__0201C0B0 +.public LoadScriptVariableValue +.public LoadWanTableEntry +.public LoadWteFromRom +.public MAP_MARKER_PLACEMENTS +.public MemAlloc +.public MemFree +.public MemZero +.public MultiplyByFixedPoint +.public Rand16Bit +.public SetAnimationForAnimationControl +.public SetSpriteIdForAnimationControl +.public SinAbs4096 +.public WAN_TABLE +.public _020A94BC +.public _020A94C6 +.public _020A94D2 +.public _020A9E80 +.public _020A9EE0 +.public _020A9F34 +.public _020A9F48 +.public _020A9F5C +.public _020A9F70 +.public _020A9F84 +.public _020A9F98 +.public _020B0B4C +.public _020B0B5C +.public _020B0B60 +.public _020B0B6C +.public _020B0B70 +.public _020B0B74 +.public _020B1290 +.public _022B7331 +.public _022B7334 +.public _022B7340 +.public _022B734C +.public _022B7A30 +.public _022B8330 +.public _022B9130 +.public _s32_div_f +.public ov10_022C2340 +.public ov10_022C23B0 +.public ov10_022C23EC +.public ov10_022C2450 +.public ov10_022C24DC +.public sub_0201CF5C +.public sub_0201D12C +.public sub_0201D9C8 +.public sub_0201DF38 +.public sub_0201E020 +.public sub_0201E12C +.public sub_0201E7D8 +.public sub_0201F248 +.public sub_0201F2AC +.public sub_0201F324 +.public sub_0201F348 +.public sub_0201F36C +.public sub_02024934 +.public sub_0204E6FC +.public sub_0204E770 +.public sub_0204E780 +.public sub_0206DC78 +.public sub_0206F6FC +.public sub_0206F774 +.public sub_0206F9A4 +.public sub_02070124 +.public sub_02070148 +.public sub_02070158 +.public sub_02070188 +.public sub_020701B0 +.public sub_02070EA0 +.public sub_02070F4C +.public sub_020729A4 +.public sub_02075600 +.public sub_020756E8 +.public sub_0207A7EC +.public sub_0207A8F4 +.public sub_0207AD54 +.public sub_0207AEF4 +.public sub_0207AFF0 diff --git a/asm/main_0204DE7C.s b/asm/main_0204DE7C.s index 237229b9..b4f725bb 100644 --- a/asm/main_0204DE7C.s +++ b/asm/main_0204DE7C.s @@ -903,66 +903,3 @@ SetEnterDungeon: ; 0x0204E94C _0204E96C: .word PENDING_DUNGEON_ID _0204E970: .word _022AB4F8 arm_func_end SetEnterDungeon - - arm_func_start sub_0204E974 -sub_0204E974: ; 0x0204E974 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl sub_0205B77C - ldr r2, _0204EA4C ; =PENDING_DUNGEON_ID - mov r1, #2 - mov r4, r0 - strb r1, [r2, #0xd] - sub r0, r1, #3 - strb r0, [r2, #0xe] - mov r0, #0xd6 - strh r0, [r2, #2] - ldr r0, _0204EA50 ; =_022AB510 - mov r1, r5 - strb r5, [r2, #0x12] - bl sub_0205BB7C - ldr r0, _0204EA54 ; =_022AB5A8 - mov r1, r5 - bl sub_0205BD14 - ldr r1, _0204EA4C ; =PENDING_DUNGEON_ID - mov r2, #0 - strb r2, [r1, #0xf] - strb r2, [r1, #0x10] - strb r2, [r1, #4] - mov r0, #7 - strb r2, [r1, #0x11] - bl GetResolvedPerformanceProgressFlag - ldr r1, _0204EA4C ; =PENDING_DUNGEON_ID - mov r2, #0 - strb r0, [r1, #5] - mov r0, #6 - strb r2, [r1, #6] - bl GetResolvedPerformanceProgressFlag - ldr r1, _0204EA4C ; =PENDING_DUNGEON_ID - strb r0, [r1, #8] - mov r0, #1 - bl GetResolvedPerformanceProgressFlag - ldr r1, _0204EA4C ; =PENDING_DUNGEON_ID - mov r2, #0 - strb r0, [r1, #9] - strb r2, [r1, #0xa] - strb r2, [r1, #0xb] - strb r2, [r1, #7] - strb r2, [r1, #0xc] - ldrb r0, [r4, #4] - add r0, r0, #0xda - and r0, r0, #0xff - cmp r0, #5 - strlsb r2, [r1, #5] - movls r0, #1 - strlsb r0, [r1, #7] - ldr r0, _0204EA58 ; =_022AB4F8 - mov r1, #1 - strb r1, [r0] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0204EA4C: .word PENDING_DUNGEON_ID -_0204EA50: .word _022AB510 -_0204EA54: .word _022AB5A8 -_0204EA58: .word _022AB4F8 - arm_func_end sub_0204E974 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index 193b2db6..69703f97 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -21391,2592 +21391,3 @@ _0206A70C: mov r0, #1 ldmia sp!, {r4, pc} arm_func_end sub_0206A628 - - arm_func_start DungeonSwapIdToIdx -DungeonSwapIdToIdx: ; 0x0206A714 - mov ip, #0 - ldr r3, _0206A74C ; =DUNGEON_SWAP_ID_TABLE - b _0206A73C -_0206A720: - mov r1, ip, lsl #0x10 - ldrb r2, [r3, r1, asr #16] - mov r1, r1, asr #0x10 - cmp r2, r0 - moveq r0, r1 - bxeq lr - add ip, ip, #1 -_0206A73C: - cmp ip, #0xd5 - blt _0206A720 - mvn r0, #0 - bx lr - .align 2, 0 -_0206A74C: .word DUNGEON_SWAP_ID_TABLE - arm_func_end DungeonSwapIdToIdx - - arm_func_start DungeonSwapIdxToId -DungeonSwapIdxToId: ; 0x0206A750 - mvn r1, #0 - cmp r0, r1 - ldrne r1, _0206A768 ; =DUNGEON_SWAP_ID_TABLE - moveq r0, #0xff - ldrneb r0, [r1, r0] - bx lr - .align 2, 0 -_0206A768: .word DUNGEON_SWAP_ID_TABLE - arm_func_end DungeonSwapIdxToId - - arm_func_start GetDungeonModeSpecial -GetDungeonModeSpecial: ; 0x0206A76C - stmdb sp!, {r3, lr} - cmp r0, #0xd6 - moveq r0, #4 - ldmeqia sp!, {r3, pc} - cmp r0, #0xb4 - blt _0206A790 - cmp r0, #0xd3 - movle r0, #3 - ldmleia sp!, {r3, pc} -_0206A790: - cmp r0, #0xd7 - moveq r0, #2 - ldmeqia sp!, {r3, pc} - cmp r0, #0xd8 - moveq r0, #3 - ldmeqia sp!, {r3, pc} - bl GetDungeonMode - cmp r0, #1 - moveq r0, #1 - ldmeqia sp!, {r3, pc} - sub r0, r0, #2 - cmp r0, #1 - movls r0, #2 - movhi r0, #1 - ldmia sp!, {r3, pc} - arm_func_end GetDungeonModeSpecial - - arm_func_start sub_0206A7CC -sub_0206A7CC: ; 0x0206A7CC - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r4, #0x3e8 - bne _0206A7F4 - mov r0, #0 - mov r1, #0x20 - bl LoadScriptVariableValue - mov r0, r0, lsl #0x10 - mov r4, r0, asr #0x10 - b _0206A82C -_0206A7F4: - ldr r0, _0206A848 ; =0x000003E9 - cmp r4, r0 - bne _0206A82C - bl sub_0204E6FC - cmp r0, #2 - bne _0206A814 - bl sub_0204E780 - b _0206A818 -_0206A814: - bl sub_0204E770 -_0206A818: - cmp r0, #0xff - addne r0, r0, #1 - mvneq r4, #0 - movne r0, r0, lsl #0x10 - movne r4, r0, asr #0x10 -_0206A82C: - cmp r4, #0xd1 - bne _0206A840 - bl GetExecuteSpecialEpisodeType - cmp r0, #4 - moveq r4, #0xd2 -_0206A840: - mov r0, r4 - ldmia sp!, {r4, pc} - .align 2, 0 -_0206A848: .word 0x000003E9 - arm_func_end sub_0206A7CC - - arm_func_start sub_0206A84C -sub_0206A84C: ; 0x0206A84C - cmp r0, #0xb4 - addlo r0, r0, #1 - movlo r0, r0, lsl #0x10 - movlo r0, r0, asr #0x10 - bxlo lr - blo _0206A870 - cmp r0, #0xd3 - movls r0, #0xb8 - bxls lr -_0206A870: - mvn r0, #0 - bx lr - arm_func_end sub_0206A84C - - arm_func_start sub_0206A878 -sub_0206A878: ; 0x0206A878 - stmdb sp!, {r3, lr} - bl sub_0206A7CC - mvn r1, #0 - cmp r0, r1 - ldrne r1, _0206A89C ; =MAP_MARKER_PLACEMENTS - movne r0, r0, lsl #3 - ldrnesh r1, [r1, r0] - mov r0, r1 - ldmia sp!, {r3, pc} - .align 2, 0 -_0206A89C: .word MAP_MARKER_PLACEMENTS - arm_func_end sub_0206A878 - - arm_func_start sub_0206A8A0 -sub_0206A8A0: ; 0x0206A8A0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - bl sub_0206A7CC - mov r5, r0 - mov r0, r4 - bl sub_0206A7CC - mvn r1, #0 - cmp r5, r1 - mov r4, r0 - ldrne r0, _0206A908 ; =_020A94D2 - movne r2, r5, lsl #3 - ldrnesh r0, [r0, r2] - cmpne r0, r1 - movne r5, r0 - mvn r0, #0 - cmp r4, r0 - ldrne r1, _0206A908 ; =_020A94D2 - movne r2, r4, lsl #3 - ldrnesh r1, [r1, r2] - cmpne r1, r0 - movne r4, r1 - cmp r5, r4 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0206A908: .word _020A94D2 - arm_func_end sub_0206A8A0 - - arm_func_start sub_0206A90C -sub_0206A90C: ; 0x0206A90C -#ifdef EUROPE -#define SUB_0206A90C_WORD_OFFSET 2 -#else -#define SUB_0206A90C_WORD_OFFSET 0 -#endif - stmdb sp!, {r3, lr} - bl sub_0206A7CC - mvn r1, #0 - cmp r0, r1 -#ifdef JAPAN - moveq r0, #0x47 - ldmeqia sp!, {r3, pc} - cmp r0, #0 - moveq r0, #0x40 -#else - ldreq r0, _0206A964 ; =0x0000403A - ldmeqia sp!, {r3, pc} - cmp r0, #0 - ldreq r0, _0206A968 ; =0x00004033 -#endif - ldmeqia sp!, {r3, pc} - cmp r0, #1 - blt _0206A950 - cmp r0, #0xb4 - bgt _0206A950 - sub r0, r0, #1 - and r0, r0, #0xff - bl sub_02024934 - ldmia sp!, {r3, pc} -_0206A950: -#ifdef JAPAN - sub r0, r0, #0x74 -#else - add r0, r0, #0x7f + SUB_0206A90C_WORD_OFFSET - add r0, r0, #0x3f00 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - ldmia sp!, {r3, pc} - .align 2, 0 -#ifndef JAPAN -_0206A964: .word 0x0000403A + SUB_0206A90C_WORD_OFFSET -_0206A968: .word 0x00004033 + SUB_0206A90C_WORD_OFFSET -#endif - arm_func_end sub_0206A90C - - arm_func_start sub_0206A96C -sub_0206A96C: ; 0x0206A96C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r1 - mov r4, r2 - bl sub_0206A7CC - mvn r2, #0 - cmp r0, r2 - moveq r0, r2 - ldmeqia sp!, {r3, r4, r5, pc} - ldr r1, _0206A9D8 ; =MAP_MARKER_PLACEMENTS - cmp r5, r2 - add r3, r1, r0, lsl #3 - ldrnesh r1, [r3] - cmpne r1, r5 - movne r0, r2 - ldmneia sp!, {r3, r4, r5, pc} - ldrsh r2, [r3, #2] - cmp r2, r0 - mvnne r1, #0 - cmpne r2, r1 - ldrne r1, _0206A9D8 ; =MAP_MARKER_PLACEMENTS - movne r0, r2 - addne r3, r1, r2, lsl #3 - ldrsh r1, [r3, #4] - str r1, [r4] - ldrsh r1, [r3, #6] - str r1, [r4, #4] - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0206A9D8: .word MAP_MARKER_PLACEMENTS - arm_func_end sub_0206A96C - - arm_func_start sub_0206A9DC -sub_0206A9DC: ; 0x0206A9DC - stmdb sp!, {r4, lr} - bl GetExecuteSpecialEpisodeType - mov r4, r0 - cmp r4, #4 - bne _0206AA24 - mov r0, #0x3e8 - bl sub_0206A7CC - ldr r1, _0206AA34 ; =MAP_MARKER_PLACEMENTS - mov r0, r0, lsl #3 - ldrsh r0, [r1, r0] - ldr r1, _0206AA38 ; =0xFFFFFED2 - add r1, r0, r1 - mov r1, r1, lsl #0x10 - mov r1, r1, asr #0x10 - mov r1, r1, lsl #0x10 - mov r1, r1, lsr #0x10 - cmp r1, #1 - ldmlsia sp!, {r4, pc} -_0206AA24: - ldr r0, _0206AA3C ; =_020A94C6 - mov r1, r4, lsl #1 - ldrsh r0, [r0, r1] - ldmia sp!, {r4, pc} - .align 2, 0 -_0206AA34: .word MAP_MARKER_PLACEMENTS -#if defined(EUROPE) -_0206AA38: .word 0xFFFFFEC6 -#elif defined(JAPAN) -_0206AA38: .word 0xFFFFFECD -#else -_0206AA38: .word 0xFFFFFED2 -#endif -_0206AA3C: .word _020A94C6 - arm_func_end sub_0206A9DC - - arm_func_start sub_0206AA40 -sub_0206AA40: ; 0x0206AA40 - stmdb sp!, {r3, lr} - bl GetExecuteSpecialEpisodeType - ldr r1, _0206AA58 ; =_020A94BC - mov r0, r0, lsl #1 - ldrsh r0, [r1, r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_0206AA58: .word _020A94BC - arm_func_end sub_0206AA40 - - arm_func_start sub_0206AA5C -sub_0206AA5C: ; 0x0206AA5C - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} - mov r5, r0 - mov r0, #0x40 - mov r1, #1 - bl MemAlloc - ldr r2, _0206AB90 ; =_020B0B4C - mov r1, #0x40 - str r0, [r2, #8] - bl MemZero - ldr r0, _0206AB90 ; =_020B0B4C - mov r1, #0x20 - ldr r4, [r0, #8] - add r0, r4, #4 - bl MemZero - mov r1, #0 - str r1, [r4, #0x20] - ldr r0, _0206AB90 ; =_020B0B4C - strh r1, [r4, #0x1c] - ldr r1, [r0, #8] - str r5, [r1] - ldr r2, [r0, #8] - ldr r0, [r2] - cmp r0, #1 - bne _0206AB3C - ldr r0, _0206AB94 ; =0x00001F64 - mov r1, #6 - add r4, r2, #4 - bl MemAlloc - ldr r1, _0206AB94 ; =0x00001F64 - mov r5, r0 - bl MemZero - mov r8, #0x58 - mov sl, #0 - mvn r7, #0 - mov r6, r8 -_0206AAE8: - mul sb, sl, r6 - mov r1, r8 - add r0, r5, sb - bl MemZero - add sl, sl, #1 - strh r7, [r5, sb] - cmp sl, #0x50 - blt _0206AAE8 - add r0, r5, #0x1000 - ldr r2, _0206AB90 ; =_020B0B4C - str r4, [r0, #0xf5c] - ldr r0, [r2, #8] - mov r1, #5 - str r5, [r0, #0x28] - ldr r0, [r2, #8] - add r0, r0, #4 - bl sub_0206BBE0 - ldr r1, _0206AB90 ; =_020B0B4C - ldr r1, [r1, #8] - str r0, [r1, #0x24] - b _0206AB5C -_0206AB3C: - cmp r0, #2 - bne _0206AB5C - add r0, r2, #4 - mov r1, #4 - bl sub_0206BBE0 - ldr r1, _0206AB90 ; =_020B0B4C - ldr r1, [r1, #8] - str r0, [r1, #0x24] -_0206AB5C: - ldr r1, _0206AB90 ; =_020B0B4C - mov r3, #0 - ldr r2, [r1, #8] - mov r0, #0x80 - str r3, [r2, #0x2c] - ldr r2, [r1, #8] - strb r3, [r2, #0x30] - ldr r2, [r1, #8] - str r3, [r2, #0x34] - ldr r1, [r1, #8] - strb r3, [r1, #0x31] - bl ov10_022C2340 - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} - .align 2, 0 -_0206AB90: .word _020B0B4C -_0206AB94: .word 0x00001F64 - arm_func_end sub_0206AA5C - - arm_func_start sub_0206AB98 -sub_0206AB98: ; 0x0206AB98 - ldr r0, _0206ABAC ; =_020B0B4C - mov r1, #1 - ldr r0, [r0, #8] - strb r1, [r0, #0x30] - bx lr - .align 2, 0 -_0206ABAC: .word _020B0B4C - arm_func_end sub_0206AB98 - - arm_func_start sub_0206ABB0 -sub_0206ABB0: ; 0x0206ABB0 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #0x18 - ldr r0, _0206AD28 ; =_020B0B4C - ldr r4, [r0, #8] - cmp r4, #0 - ldrneb r0, [r4, #0x30] - cmpne r0, #0 - beq _0206AD1C - ldr r0, [r4] - ldr r1, _0206AD2C ; =_020B0B5C - cmp r0, #1 - movne r5, #1 - moveq r5, #0 - ldr r1, [r1, r5, lsl #3] - add r0, sp, #8 - mov r2, #6 - bl LoadWteFromRom - ldr r0, _0206AD30 ; =_020B0B60 - mov r1, #0 - ldr r0, [r0, r5, lsl #3] - bl sub_0201DF38 - str r0, [r4, #0x14] - mov r2, #0 - ldr r1, [r4, #0x20] - add r0, sp, #8 - mov r3, r2 - bl sub_0201E12C - add r0, sp, #8 - bl DelayWteFree - ldr r1, [r4, #0x20] - add r0, sp, #0x10 - str r1, [r4, #0x18] - ldr r2, [r4, #0x20] - ldr r1, _0206AD34 ; =_020A9F34 - add r2, r2, #0x8000 - str r2, [r4, #0x20] - mov r2, #6 - bl LoadWteFromRom - ldr r0, _0206AD38 ; =_020A9F48 - mov r1, #0 - bl sub_0201DF38 - str r0, [r4, #4] - ldr r1, [r4, #0x20] - add r0, sp, #0x10 - mov r2, #1 - mov r3, #0 - bl sub_0201E12C - add r0, sp, #0x10 - bl DelayWteFree - ldr r1, [r4, #0x20] - add r0, sp, #0x10 - str r1, [r4, #8] - ldr r2, [r4, #0x20] - ldr r1, _0206AD3C ; =_020A9F5C - add r2, r2, #0x2000 - str r2, [r4, #0x20] - mov r2, #6 - bl LoadWteFromRom - ldr r0, _0206AD40 ; =_020A9F70 - mov r1, #0 - bl sub_0201DF38 - str r0, [r4, #0xc] - ldr r1, [r4, #0x20] - add r0, sp, #0x10 - mov r2, #2 - mov r3, #0 - bl sub_0201E12C - add r0, sp, #0x10 - bl DelayWteFree - ldr r0, [r4, #0x20] - mov r2, #0 - str r0, [r4, #0x10] - ldr r1, [r4, #0x20] - ldr r0, _0206AD44 ; =WAN_TABLE - add r1, r1, #0x4000 - str r1, [r4, #0x20] - ldr r0, [r0] - ldr r1, _0206AD48 ; =_020A9F84 - bl LoadWanTableEntry - strh r0, [r4, #0x1c] - mov r3, #1 - str r3, [sp] - mov r2, #0 - str r2, [sp, #4] - ldrsh r0, [r4, #0x1c] - mov r1, #0x2c0 - bl sub_0201D9C8 - ldr r0, _0206AD28 ; =_020B0B4C - mov r1, #0 - ldr r0, [r0, #8] - strb r1, [r0, #0x30] -_0206AD1C: - mov r0, #1 - add sp, sp, #0x18 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_0206AD28: .word _020B0B4C -_0206AD2C: .word _020B0B5C -_0206AD30: .word _020B0B60 -_0206AD34: .word _020A9F34 -_0206AD38: .word _020A9F48 -_0206AD3C: .word _020A9F5C -_0206AD40: .word _020A9F70 -_0206AD44: .word WAN_TABLE -_0206AD48: .word _020A9F84 - arm_func_end sub_0206ABB0 - - arm_func_start sub_0206AD4C -sub_0206AD4C: ; 0x0206AD4C - ldr r0, _0206AD7C ; =_020B0B4C - ldr r0, [r0, #8] - cmp r0, #0 - beq _0206AD74 - ldrb r0, [r0, #0x31] - cmp r0, #0 - moveq r0, #1 - movne r0, #0 - and r0, r0, #0xff - bx lr -_0206AD74: - mov r0, #0 - bx lr - .align 2, 0 -_0206AD7C: .word _020B0B4C - arm_func_end sub_0206AD4C - - arm_func_start sub_0206AD80 -sub_0206AD80: ; 0x0206AD80 - ldr r0, _0206AD9C ; =_020B0B4C - ldr r1, [r0, #8] - cmp r1, #0 - ldrne r0, [r1, #0x34] - addne r0, r0, #1 - strne r0, [r1, #0x34] - bx lr - .align 2, 0 -_0206AD9C: .word _020B0B4C - arm_func_end sub_0206AD80 - - arm_func_start sub_0206ADA0 -sub_0206ADA0: ; 0x0206ADA0 - ldr r1, _0206ADB4 ; =_020B0B4C - ldr r1, [r1, #8] - cmp r1, #0 - strne r0, [r1, #0x38] - bx lr - .align 2, 0 -_0206ADB4: .word _020B0B4C - arm_func_end sub_0206ADA0 - - arm_func_start sub_0206ADB8 -sub_0206ADB8: ; 0x0206ADB8 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x4c - ldr r0, _0206B9BC ; =_020B0B4C - ldr r0, [r0, #8] - cmp r0, #0 - moveq r0, #0 - beq _0206B9B4 - bl ov10_022C23EC - ldr r0, _0206B9BC ; =_020B0B4C - ldr r8, [r0, #8] - ldrb r0, [r8, #0x30] - cmp r0, #0 - bne _0206B9B0 - ldr r0, [r8, #0x2c] - cmp r0, #0 - beq _0206AE00 - cmp r0, #1 - b _0206B99C -_0206AE00: - ldr r0, [r8, #0x38] - cmp r0, #0 - subgt r0, r0, #1 - strgt r0, [r8, #0x38] - bgt _0206B99C - ldr r0, [r8] - cmp r0, #1 - bne _0206B678 - ldr r7, [r8, #0x24] - ldr sb, [r8, #0x28] - ldr r0, [r7, #0xc] - cmp r0, #0 - beq _0206AE48 - cmp r0, #1 - beq _0206AF78 - cmp r0, #2 - beq _0206B1D4 - b _0206B670 -_0206AE48: - ldr r1, [r7, #0x2d4] - mov r0, #0xc0 - ldr fp, [r7, #0x2d8] - mov r6, #0 - bl _s32_div_f - mov sb, r0, lsl #8 - mov r0, #0x14000 - rsb r0, r0, #0 - str r0, [sp, #0x2c] - b _0206AF50 -_0206AE70: - mul r0, r6, sb - ands r5, r6, #1 - movne r4, #0x14000 - ldr r1, _0206B9BC ; =_020B0B4C - ldreq r4, [sp, #0x2c] - str r0, [sp, #0x18] - ldr r1, [r1, #4] - rsb r0, r4, #0 - bl _s32_div_f - str r0, [sp, #0x1c] - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0xe0 - str r0, [sp, #8] - mov r0, #0x58 - mul sl, r6, r0 - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - str r0, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - ldr r0, [r7] - ldr r3, [sp, #0x18] - mov r1, fp - add r0, r0, sl - mov r2, r4 - bl sub_0206BC3C - cmp r5, #0 - movne r0, #0 - moveq r0, #0x10000 - add r2, r4, r0 - ldr r5, [r7, #4] - ldr r0, [sp, #0x1c] - ldr r3, [sp, #0x18] - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x70 - str r0, [sp, #8] - mov r0, #3 - str r0, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - add r0, r5, sl - mov r1, fp - bl sub_0206BD04 - ldrsh r0, [r5, sl] - bl sub_0201F324 - ldrsh r1, [r0, #0x1a] - add r6, r6, #1 - add r1, r1, r1, lsr #31 - mov r1, r1, asr #1 - strh r1, [r0, #8] - mov r1, #0 - strh r1, [r0, #0xa] -_0206AF50: - ldr r0, [r7, #0x2d4] - cmp r6, r0 - blt _0206AE70 - ldr r0, _0206B9BC ; =_020B0B4C - ldr r0, [r0, #4] - str r0, [r7, #8] - ldr r0, [r7, #0xc] - add r0, r0, #1 - str r0, [r7, #0xc] - b _0206B670 -_0206AF78: - mov r4, #0 - mov fp, #0x58 - b _0206B04C -_0206AF84: - mul r5, r4, fp - ldr r6, [r7] - add sl, r6, r5 - ldr r1, [sl, #8] - ldr r0, [sl, #0x18] - add r0, r1, r0 - str r0, [sl, #8] - ldr r1, [sl, #0xc] - ldr r0, [sl, #0x1c] - add r0, r1, r0 - str r0, [sl, #0xc] - ldrsh r0, [r6, r5] - bl sub_0201F324 - ldr r2, [sl, #8] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0] - ldrsh r0, [r6, r5] - bl sub_0201F324 - ldr r2, [sl, #0xc] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0, #2] - ldr r6, [r7, #4] - add sl, r6, r5 - ldr r1, [sl, #8] - ldr r0, [sl, #0x18] - add r0, r1, r0 - str r0, [sl, #8] - ldr r1, [sl, #0xc] - ldr r0, [sl, #0x1c] - add r0, r1, r0 - str r0, [sl, #0xc] - ldrsh r0, [r6, r5] - bl sub_0201F324 - ldr r2, [sl, #8] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0] - ldrsh r0, [r6, r5] - bl sub_0201F324 - ldr r2, [sl, #0xc] - add r4, r4, #1 - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0, #2] -_0206B04C: - ldr r0, [r7, #0x2d4] - cmp r4, r0 - blt _0206AF84 - ldr r0, [r7, #8] - cmp r0, #0 - bne _0206B0E0 - mov r6, #0 - mov fp, r6 - b _0206B0D0 -_0206B070: - mov r0, #0x58 - mul r4, r6, r0 - ldr r5, [r7] - ldrsh r0, [r5, r4] - add sl, r5, r4 - bl sub_0201F324 - str fp, [sl, #8] - str fp, [sl, #0x18] - str fp, [sl, #0x1c] - ldrsh r0, [r5, r4] - bl sub_0201F324 - ldr r2, [sl, #8] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0] - ldrsh r0, [r5, r4] - bl sub_0201F324 - ldr r2, [sl, #0xc] - add r6, r6, #1 - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0, #2] -_0206B0D0: - ldr r0, [r7, #0x2d4] - cmp r6, r0 - blt _0206B070 - b _0206B0E8 -_0206B0E0: - sub r0, r0, #1 - str r0, [r7, #8] -_0206B0E8: - ldr r0, [r7, #4] - ldr r0, [r0, #8] - cmp r0, #0x11000 - ble _0206B670 - add r0, sb, #0x1000 - ldr r5, [r0, #0xf5c] - mov r1, #0x8000 - str r1, [r0, #0xb8c] - mov r1, #0x6000 - str r1, [r0, #0xb90] - bl sub_0201F36C - add r1, sb, #0x1b00 - strh r0, [r1, #0x84] - ldrsh r0, [r1, #0x84] - bl sub_0201F324 - mov r4, r0 - mov r2, #0 - strb r2, [r4, #0x3c] - mov r1, #0x80 - strh r1, [r4, #0x2a] - add r3, sb, #0x1000 - ldr sl, [r3, #0xb8c] - mov r6, #2 - mov r1, sl, asr #7 - add r1, sl, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r4] - ldr r3, [r3, #0xb90] - mov r1, r3, asr #7 - add r1, r3, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r4, #2] - str r6, [sp] - str r2, [sp, #4] - ldr r1, [r5, #8] - ldr r3, [r5, #0xc] - bl sub_0201E7D8 - ldrsh r0, [r4, #0x1a] - mov r5, #0 - mov r1, #0x28 - add r0, r0, r0, lsr #31 - mov r0, r0, asr #1 - strh r0, [r4, #8] - ldrsh r2, [r4, #0x1c] - add r3, sb, #0x1000 - mov r0, #0x1000 - add r2, r2, r2, lsr #31 - mov r2, r2, asr #1 - strh r2, [r4, #0xa] - strh r5, [r4, #0x10] - strh r5, [r4, #0x12] - str r1, [r3, #0xbd4] - bl _s32_div_f - add r1, sb, #0x1b00 - strh r0, [r1, #0xcc] - ldr r0, [r7, #0xc] - add r0, r0, #1 - str r0, [r7, #0xc] - b _0206B670 -_0206B1D4: - add r0, sb, #0x1b00 - ldrsh r3, [r0, #0x84] - add r0, sb, #0x1000 - add r1, sb, #0x384 - mvn r2, #0 - cmp r3, r2 - add r6, r1, #0x1800 - ldr r7, [r0, #0xf5c] - beq _0206B2D4 - ldrsh r0, [r6] - bl sub_0201F324 - ldr r1, [r6, #4] - mov r5, r0 - cmp r1, #2 - ldrh r4, [r5, #0x10] - bge _0206B298 - ldr r0, [r6, #0x4c] - add r1, r0, #1 - str r1, [r6, #0x4c] - ldr r0, [r6, #0x50] - cmp r1, r0 - ble _0206B298 - ldr r0, [r6, #4] - add r0, r0, #1 - str r0, [r6, #4] - cmp r0, #2 - bne _0206B278 - ldr r1, [r6, #0x50] - mov r0, #0xc00 - bl _s32_div_f - strh r0, [r6, #0x48] - add r0, sb, #0x1000 - mov r1, #1 - str r1, [r0, #0xbf0] - mov r1, #8 - str r1, [r0, #0xbe8] - ldr r1, [r0, #0xbec] - str r1, [r0, #0xbe0] - ldr r1, [r0, #0xbf0] - str r1, [r0, #0xbe4] - b _0206B290 -_0206B278: - cmp r0, #1 - bne _0206B290 - ldr r1, [r6, #0x50] - mov r0, #0xc00 - bl _s32_div_f - strh r0, [r6, #0x48] -_0206B290: - mov r0, #0 - str r0, [r6, #0x4c] -_0206B298: - ldrsh r0, [r6, #0x48] - ldr r1, [r6, #4] - cmp r1, #1 - subeq r4, r4, r0 - beq _0206B2C8 - cmp r1, #2 - add r4, r4, r0 - bne _0206B2C8 - add r0, r0, #0x20 - cmp r4, #0x4000 - strh r0, [r6, #0x48] - movge r4, #0x4000 -_0206B2C8: - strh r4, [r5, #0x10] - ldrh r0, [r5, #0x10] - strh r0, [r5, #0x12] -_0206B2D4: - add r0, sb, #0x1000 - ldr r1, [r0, #0xbf4] - cmp r1, #0 - beq _0206B2F0 - cmp r1, #1 - beq _0206B3C4 - b _0206B670 -_0206B2F0: - mov r5, #0 - mov r2, #1 - str r5, [r0, #0xbdc] - mov r1, #0x10 - str r2, [r0, #0xbe0] - str r1, [r0, #0xbec] - str r1, [r0, #0xbe8] - mov r1, #8 - str r1, [r0, #0xbf0] - rsb r1, r2, #0x3e8 - str r1, [r0, #0xbe4] - ldr r4, [r0, #0xf5c] - add r0, sb, #0x3f8 - add fp, r0, #0x1800 -_0206B328: - mov r0, #0x7c - mla r6, r5, r0, fp - mov r0, r6 - bl InitAnimationControlWithSet__0201C0B0 - ldrsh r1, [r4, #0x18] - mov r0, r6 - bl SetSpriteIdForAnimationControl - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - mov r0, #1 - str r0, [sp, #8] - mov r0, #0 - str r0, [sp, #0xc] - mov r0, #0xc - mul r1, r5, r0 - ldr r0, _0206B9C0 ; =_020A9EE0 - mov r2, #0 - add sl, r0, r1 - ldr r1, [r0, r1] - mov r0, r6 - mov r3, #0x2c0 - bl SetAnimationForAnimationControl - ldr r1, [sl, #4] - mov r0, r6 - strh r1, [r6, #0x1c] - ldr r2, [sl, #8] - mov r1, #0 - strh r2, [r6, #0x1e] - bl sub_0201D12C - add r5, r5, #1 - cmp r5, #7 - blt _0206B328 - add r0, sb, #0x1000 - mov r1, #1 - strb r1, [r0, #0xf60] - ldr r1, [r0, #0xbf4] - add r1, r1, #1 - str r1, [r0, #0xbf4] -_0206B3C4: - add r0, sb, #0x1000 - ldr r2, [r0, #0xbe0] - add r1, r2, #1 - str r1, [r0, #0xbe0] - ldr r0, [r0, #0xbec] - cmp r2, r0 - ble _0206B54C - bl Rand16Bit - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #31 - add r0, r1, r0, ror #31 - add r4, r0, #3 - ldr r0, _0206B9C4 ; =0x000001FF - mov r5, #0 - add r0, r0, #0xe00 - str r0, [sp, #0x34] - b _0206B51C -_0206B408: - bl Rand16Bit - bl Rand16Bit - ldr r1, _0206B9BC ; =_020B0B4C - ldr r2, [r1, #0xc] - ldr r1, _0206B9C4 ; =0x000001FF - and r0, r0, r1 - add r0, r2, r0 - str r0, [sp, #0x14] - bl Rand16Bit - ldr r1, _0206B9BC ; =_020B0B4C - and r0, r0, #0xf - ldr r1, [r1] - add fp, r1, r0 - bl Rand16Bit - ldr r1, [r7] - ldr r1, [r1] - ldr r1, [r1, #4] - sub r1, r1, #1 - bl _s32_div_f - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - bl Rand16Bit - mov r1, #0xd0 - bl _s32_div_f - add sl, r1, #0x10 - bl Rand16Bit - str sl, [sp] - str r6, [sp, #4] - mov r1, #0 - str r1, [sp, #8] - ldr r1, [sp, #0x34] - mov r2, #0x8000 - and sl, r0, r1 - mov r0, sb - mov r1, r7 - mov r3, #0x6000 - bl sub_0206BDF4 - movs r6, r0 - beq _0206B510 - ldrsh r0, [r6] - bl sub_0201F324 - ldrsh r2, [r0, #0x1a] - mov r1, r6 - add r2, r2, r2, lsr #31 - mov r2, r2, asr #1 - strh r2, [r0, #8] - ldrsh r2, [r0, #0x1c] - add r2, r2, r2, lsr #31 - mov r2, r2, asr #1 - strh r2, [r0, #0xa] - mov r2, #0x800 - strh r2, [r0, #0x10] - strh r2, [r0, #0x12] - ldr r0, _0206B9C8 ; =sub_0206BFA8 - bl ov10_022C2450 - mov r0, #0x8000 - str r0, [r6, #0x30] - mov r0, #0x6000 - str r0, [r6, #0x34] - mov r0, #0 - str r0, [r6, #0x24] - str sl, [r6, #0x20] - ldr r0, [sp, #0x14] - str fp, [r6, #0x38] - str r0, [r6, #0x3c] -_0206B510: - cmp r6, #0 - beq _0206B524 - add r5, r5, #1 -_0206B51C: - cmp r5, r4 - blt _0206B408 -_0206B524: - bl Rand16Bit - add r2, sb, #0x1000 - mov r1, r0, lsr #0x1f - rsb r0, r1, r0, lsl #29 - ldr r3, [r2, #0xbe8] - add r0, r1, r0, ror #29 - add r0, r3, r0 - str r0, [r2, #0xbec] - mov r0, #0 - str r0, [r2, #0xbe0] -_0206B54C: - add r0, sb, #0x1000 - ldr r1, [r0, #0xbe4] - add r1, r1, #1 - str r1, [r0, #0xbe4] - ldr r0, [r0, #0xbf0] - cmp r1, r0 - ble _0206B670 - bl Rand16Bit - ldr r1, _0206B9CC ; =0x00000FFF - mov r4, #0 - and r0, r0, r1 - mov r5, r0, lsl #0x10 - sub fp, r1, #0xe00 -_0206B580: - bl Rand16Bit - ldr r1, [r7] - ldr r1, [r1] - ldr r1, [r1, #4] - sub r1, r1, #1 - bl _s32_div_f - add r0, r1, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 - bl Rand16Bit - mov r1, #0xd0 - bl _s32_div_f - add sl, r1, #0x10 - bl Rand16Bit - str sl, [sp] - and sl, r0, fp - str r6, [sp, #4] - mov r1, #0 - str r1, [sp, #8] - mov r0, sb - mov r1, r7 - mov r2, #0x8000 - mov r3, #0x6000 - bl sub_0206BDF4 - movs r6, r0 - beq _0206B658 - ldrsh r0, [r6] - bl sub_0201F324 - mov r1, #0 - strh r1, [r0, #0x12] - mov r2, r1 - ldr r1, _0206B9D0 ; =0x00005555 - strh r2, [r0, #0x10] - mul r1, r4, r1 - add r0, r1, r5, lsr #16 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - str r0, [r6, #0x20] - mov r0, r4, lsl #1 - str r0, [r6, #0x40] - ldr r0, [r6, #0x20] - bl CosAbs4096 - add r1, sl, #0x300 - bl MultiplyByFixedPoint - str r0, [r6, #0x18] - ldr r0, [r6, #0x20] - bl SinAbs4096 - add r1, sl, #0x300 - rsb r0, r0, #0 - bl MultiplyByFixedPoint - str r0, [r6, #0x1c] - ldr r0, _0206B9D4 ; =sub_0206BEAC - mov r1, r6 - bl ov10_022C2450 -_0206B658: - add r4, r4, #1 - cmp r4, #3 - blt _0206B580 - add r0, sb, #0x1000 - mov r1, #0 - str r1, [r0, #0xbe4] -_0206B670: - mov r4, #0 - b _0206B990 -_0206B678: - cmp r0, #2 - bne _0206B990 - ldr r5, [r8, #0x24] - ldr r0, [r5, #0xc] - cmp r0, #0 - beq _0206B6A4 - cmp r0, #1 - beq _0206B838 - cmp r0, #2 - beq _0206B984 - b _0206B98C -_0206B6A4: - ldr r0, _0206B9D8 ; =_020A9E80 - add r4, sp, #0x3c - ldmia r0, {r0, r1, r2, r3} - stmia r4, {r0, r1, r2, r3} - ldr r0, [r5, #0x2d8] - mov r6, #0 - str r0, [sp, #0x20] - mov r0, #0x14000 - rsb r0, r0, #0 - str r0, [sp, #0x30] - mov r0, r0, asr #0x11 - str r0, [sp, #0x38] - b _0206B810 -_0206B6D8: - add r0, sp, #0x3c - ldr r0, [r0, r6, lsl #2] - tst r6, #1 - mov r0, r0, lsl #8 - add r0, r0, #0x800 - movne sb, #0x2000 - moveq sb, #0 - str r0, [sp, #0x24] - cmp r6, #2 - movlt r0, #1 - movge r0, #0 - ands r4, r0, #0xff - ldreq r0, [sp, #0x38] - ldr r1, _0206B9BC ; =_020B0B4C - muleq r0, sb, r0 - moveq sb, r0 - cmp r4, #0 - ldrne sl, [sp, #0x30] - ldr r1, [r1, #4] - moveq sl, #0x14000 - rsb r0, sl, #0 - bl _s32_div_f - str r0, [sp, #0x28] - mov r0, #0x58 - mul r7, r6, r0 - mov r0, r6, lsl #0x10 - mov r1, r0, asr #0x10 - ldr fp, [r5] - ldr r0, [sp, #0x28] - ldr r3, [sp, #0x24] - str r0, [sp] - mov r0, #0 - str r0, [sp, #4] - mov r0, #0xe0 - str r0, [sp, #8] - str r1, [sp, #0xc] - mov r0, #1 - str r0, [sp, #0x10] - ldr r1, [sp, #0x20] - add r0, fp, r7 - add r2, sl, sb - bl sub_0206BC3C - ldrsh r0, [fp, r7] - bl sub_0201F324 - ldrsh r1, [r0, #0x1c] - cmp r1, #0x28 - moveq r3, #3 - beq _0206B7A4 - cmp r1, #0x20 - moveq r3, #2 - movne r3, #1 -_0206B7A4: - cmp r4, #0 - movne r0, #0x10000 - moveq r0, #0 - add r0, sl, r0 - add r2, r0, sb - ldr r4, [r5, #4] - ldr r0, [sp, #0x28] - add r1, r1, r1, lsr #31 - str r0, [sp] - mov r0, r3, lsl #0x10 - mov sb, r0, asr #0x10 - ldr r0, [sp, #0x24] - mov r1, r1, asr #1 - add r3, r0, r1, lsl #8 - mov r0, #0 - str r0, [sp, #4] - mov r0, #0x70 - str r0, [sp, #8] - str sb, [sp, #0xc] - mov r0, #0 - str r0, [sp, #0x10] - ldr r1, [sp, #0x20] - add r0, r4, r7 - bl sub_0206BD04 - ldrsh r0, [r4, r7] - bl sub_0201F324 - add r6, r6, #1 -_0206B810: - ldr r0, [r5, #0x2d4] - cmp r6, r0 - blt _0206B6D8 - ldr r0, _0206B9BC ; =_020B0B4C - ldr r0, [r0, #4] - str r0, [r5, #8] - ldr r0, [r5, #0xc] - add r0, r0, #1 - str r0, [r5, #0xc] - b _0206B98C -_0206B838: - mov sb, #0 - mov r6, #1 - mov fp, sb - b _0206B95C -_0206B848: - mov r0, #0x58 - mul sl, sb, r0 - ldr r0, [r5] - add r4, r0, sl - ldr r0, [r4, #4] - cmp r0, #0 - bne _0206B8F8 - ldr r1, [r4, #8] - ldr r0, [r4, #0x18] - add r0, r1, r0 - str r0, [r4, #8] - ldr r1, [r4, #0xc] - ldr r0, [r4, #0x1c] - add r0, r1, r0 - str r0, [r4, #0xc] - ldr r1, [r4, #0x18] - cmp r1, #0 - ble _0206B8A0 - ldr r0, [r4, #8] - cmp r0, #0 - stmgeib r4, {r6, fp} - bge _0206B8C0 -_0206B8A0: - cmp r1, #0 - bge _0206B8C0 - ldr r0, [r4, #8] - cmp r0, #0 - movle r0, #0 - strle r0, [r4, #8] - movle r0, #1 - strle r0, [r4, #4] -_0206B8C0: - ldrsh r0, [r4] - bl sub_0201F324 - ldr r2, [r4, #8] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0] - ldrsh r0, [r4] - bl sub_0201F324 - ldr r2, [r4, #0xc] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0, #2] -_0206B8F8: - ldr r4, [r5, #4] - add r7, r4, sl - ldr r1, [r7, #8] - ldr r0, [r7, #0x18] - add r0, r1, r0 - str r0, [r7, #8] - ldr r1, [r7, #0xc] - ldr r0, [r7, #0x1c] - add r0, r1, r0 - str r0, [r7, #0xc] - ldrsh r0, [r4, sl] - bl sub_0201F324 - ldr r2, [r7, #8] - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0] - ldrsh r0, [r4, sl] - bl sub_0201F324 - ldr r2, [r7, #0xc] - add sb, sb, #1 - mov r1, r2, asr #7 - add r1, r2, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r0, #2] -_0206B95C: - ldr r0, [r5, #0x2d4] - cmp sb, r0 - blt _0206B848 - ldr r0, [r5, #4] - ldr r0, [r0, #8] - cmp r0, #0x11000 - ldrgt r0, [r5, #0xc] - addgt r0, r0, #1 - strgt r0, [r5, #0xc] - b _0206B98C -_0206B984: - mov r4, #1 - b _0206B990 -_0206B98C: - mov r4, #0 -_0206B990: - cmp r4, #0 - movne r0, #1 - strneb r0, [r8, #0x31] -_0206B99C: - ldr r0, _0206B9BC ; =_020B0B4C - ldr r1, [r0, #8] - ldr r0, [r1, #0x3c] - add r0, r0, #1 - str r0, [r1, #0x3c] -_0206B9B0: - mov r0, #1 -_0206B9B4: - add sp, sp, #0x4c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_0206B9BC: .word _020B0B4C -_0206B9C0: .word _020A9EE0 -_0206B9C4: .word 0x000001FF -_0206B9C8: .word sub_0206BFA8 -_0206B9CC: .word 0x00000FFF -_0206B9D0: .word 0x00005555 -_0206B9D4: .word sub_0206BEAC -_0206B9D8: .word _020A9E80 - arm_func_end sub_0206ADB8 - - arm_func_start sub_0206B9DC -sub_0206B9DC: ; 0x0206B9DC - stmdb sp!, {r4, r5, r6, lr} - ldr r0, _0206BA58 ; =_020B0B4C - ldr r1, [r0, #8] - cmp r1, #0 - moveq r0, #0 - ldmeqia sp!, {r4, r5, r6, pc} - ldrb r0, [r1, #0x30] - cmp r0, #0 - bne _0206BA50 - ldr r0, [r1, #0x2c] - cmp r0, #0 - beq _0206BA14 - cmp r0, #1 - b _0206BA50 -_0206BA14: - ldr r1, [r1, #0x28] - cmp r1, #0 - addne r0, r1, #0x1000 - ldrneb r0, [r0, #0xf60] - cmpne r0, #0 - beq _0206BA50 - add r0, r1, #0x3f8 - mov r6, #0 - add r5, r0, #0x1800 - mov r4, #0x7c -_0206BA3C: - mla r0, r6, r4, r5 - bl sub_0201CF5C - add r6, r6, #1 - cmp r6, #7 - blt _0206BA3C -_0206BA50: - mov r0, #1 - ldmia sp!, {r4, r5, r6, pc} - .align 2, 0 -_0206BA58: .word _020B0B4C - arm_func_end sub_0206B9DC - - arm_func_start sub_0206BA5C -sub_0206BA5C: ; 0x0206BA5C - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r0, _0206BB8C ; =_020B0B4C - ldr r0, [r0, #8] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - bl ov10_022C23B0 - ldr r0, _0206BB8C ; =_020B0B4C - ldr r5, [r0, #8] - cmp r5, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - ldr r7, [r5, #0x24] - cmp r7, #0 - beq _0206BAE8 - mov r6, #0 - mov r4, #0x58 - b _0206BABC -_0206BA9C: - mul r8, r6, r4 - ldr r0, [r7] - add r0, r0, r8 - bl sub_0206BB94 - ldr r0, [r7, #4] - add r0, r0, r8 - bl sub_0206BB94 - add r6, r6, #1 -_0206BABC: - ldr r0, [r7, #0x2d4] - cmp r6, r0 - blt _0206BA9C - ldr r0, [r7] - bl MemFree - ldr r0, [r7, #4] - bl MemFree - ldr r0, [r5, #0x24] - bl MemFree - mov r0, #0 - str r0, [r5, #0x24] -_0206BAE8: - ldr r0, _0206BB8C ; =_020B0B4C - ldr r5, [r0, #8] - ldr r0, [r5, #0x28] - cmp r0, #0 - beq _0206BB3C - mov r6, #0 - mov r4, #0x58 -_0206BB04: - ldr r0, [r5, #0x28] - mla r0, r6, r4, r0 - bl sub_0206BB94 - add r6, r6, #1 - cmp r6, #0x50 - blt _0206BB04 - ldr r0, [r5, #0x28] - add r0, r0, #0x384 - add r0, r0, #0x1800 - bl sub_0206BB94 - ldr r0, [r5, #0x28] - bl MemFree - mov r0, #0 - str r0, [r5, #0x28] -_0206BB3C: - ldr r0, _0206BB8C ; =_020B0B4C - ldr r4, [r0, #8] - add r0, r4, #0x14 - bl sub_0201E020 - add r0, r4, #4 - bl sub_0201E020 - add r0, r4, #0xc - bl sub_0201E020 - ldr r0, _0206BB90 ; =WAN_TABLE - ldrsh r1, [r4, #0x1c] - ldr r0, [r0] - bl DeleteWanTableEntryVeneer - ldr r0, _0206BB8C ; =_020B0B4C - ldr r0, [r0, #8] - bl MemFree - ldr r0, _0206BB8C ; =_020B0B4C - mov r1, #0 - str r1, [r0, #8] - bl sub_0201F248 - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_0206BB8C: .word _020B0B4C -_0206BB90: .word WAN_TABLE - arm_func_end sub_0206BA5C - - arm_func_start sub_0206BB94 -sub_0206BB94: ; 0x0206BB94 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrsh r1, [r4] - mvn r0, #0 - cmp r1, r0 - ldmeqia sp!, {r4, pc} - cmp r1, #0 - bne _0206BBBC - ldr r0, _0206BBDC ; =_020A9F98 - bl Debug_Print0 -_0206BBBC: - ldrsh r0, [r4] - bl sub_0201F2AC - mov r0, r4 - mov r1, #0x58 - bl MemZero - mvn r0, #0 - strh r0, [r4] - ldmia sp!, {r4, pc} - .align 2, 0 -_0206BBDC: .word _020A9F98 - arm_func_end sub_0206BB94 - - arm_func_start sub_0206BBE0 -sub_0206BBE0: ; 0x0206BBE0 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0x2dc - mov r1, #6 - bl MemAlloc - mov r1, #0x2dc - mov r4, r0 - bl MemZero - mov r0, #0x58 - mul r5, r6, r0 - mov r0, r5 - str r7, [r4, #0x2d8] - mov r1, #6 - bl MemAlloc - str r0, [r4] - mov r0, r5 - mov r1, #6 - bl MemAlloc - str r0, [r4, #4] - mov r0, r4 - str r6, [r4, #0x2d4] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0206BBE0 - - arm_func_start sub_0206BC3C -sub_0206BC3C: ; 0x0206BC3C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - mov r4, r1 - mov r1, #0x58 - mov r5, r0 - mov r7, r2 - mov r6, r3 - bl MemZero - mvn r0, #0 - strh r0, [r5] - bl sub_0201F36C - strh r0, [r5] - ldrsh r1, [r5] - mvn r0, #0 - cmp r1, r0 - beq _0206BCF8 - str r7, [r5, #8] - ldr r1, [sp, #0x20] - str r6, [r5, #0xc] - ldr r0, [sp, #0x24] - str r1, [r5, #0x18] - str r0, [r5, #0x1c] - ldrsh r0, [r5] - bl sub_0201F324 - mov r1, #0 - ldr r2, [sp, #0x28] - strb r1, [r0, #0x3c] - strh r2, [r0, #0x2a] - ldr ip, [r5, #8] - ldrsh r3, [sp, #0x30] - mov r2, ip, asr #7 - add r2, ip, r2, lsr #24 - mov r2, r2, asr #8 - strh r2, [r0] - ldr r5, [r5, #0xc] - mov r3, r3, lsl #0x14 - mov r2, r5, asr #7 - add r2, r5, r2, lsr #24 - mov r2, r2, asr #8 - strh r2, [r0, #2] - str r1, [sp] - mov r1, r3, asr #0x10 - str r1, [sp, #4] - ldrsh r2, [sp, #0x2c] - ldr r1, [r4, #0x10] - ldr r3, [r4, #0x14] - bl sub_0201E7D8 -_0206BCF8: - mov r0, #0 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0206BC3C - - arm_func_start sub_0206BD04 -sub_0206BD04: ; 0x0206BD04 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #8 - mov r5, r1 - mov r1, #0x58 - mov r6, r0 - mov r7, r2 - mov r4, r3 - bl MemZero - mvn r0, #0 - strh r0, [r6] - bl sub_0201F36C - strh r0, [r6] - ldrsh r1, [r6] - mvn r0, #0 - cmp r1, r0 - moveq r0, #0 - beq _0206BDEC - str r7, [r6, #8] - ldr r1, [sp, #0x20] - str r4, [r6, #0xc] - ldr r0, [sp, #0x24] - str r1, [r6, #0x18] - str r0, [r6, #0x1c] - ldrsh r0, [r6] - bl sub_0201F324 - mov r4, r0 - mov r2, #0 - strb r2, [r4, #0x3c] - ldr r1, [sp, #0x28] - ldrsh r2, [sp, #0x30] - strh r1, [r4, #0x2a] - ldr r3, [r6, #8] - mov r2, r2, lsl #0x14 - mov r1, r3, asr #7 - add r1, r3, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r4] - ldr r3, [r6, #0xc] - mov r1, r3, asr #7 - add r1, r3, r1, lsr #24 - mov r1, r1, asr #8 - strh r1, [r4, #2] - mov r1, #1 - str r1, [sp] - mov r1, r2, asr #0x10 - str r1, [sp, #4] - ldrsh r2, [sp, #0x2c] - ldmia r5, {r1, r3} - bl sub_0201E7D8 - ldrsh r1, [r4, #0x1a] - mov r0, #1 - add r1, r1, r1, lsr #31 - mov r1, r1, asr #1 - strh r1, [r4, #8] - ldrsh r1, [r4, #0x1c] - add r1, r1, r1, lsr #31 - mov r1, r1, asr #1 - strh r1, [r4, #0xa] -_0206BDEC: - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_0206BD04 - - arm_func_start sub_0206BDF4 -sub_0206BDF4: ; 0x0206BDF4 - stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} - sub sp, sp, #0x14 - mov ip, #0 - mov r4, r0 - mov r8, ip - mov r0, ip - mov r5, #0x58 - mvn r6, #0 - b _0206BE48 -_0206BE18: - cmp ip, #0x50 - movge ip, r0 - mul r7, ip, r5 - ldrsh r7, [r4, r7] - cmp r7, r6 - beq _0206BE54 - add r7, r8, #1 - add lr, ip, #1 - mov ip, r7, lsl #0x10 - mov lr, lr, lsl #0x10 - mov r8, ip, asr #0x10 - mov ip, lr, asr #0x10 -_0206BE48: - cmp r8, #0x50 - blt _0206BE18 - mvn ip, #0 -_0206BE54: - cmp ip, #0 - movlt r0, #0 - blt _0206BEA4 - mov r0, #0x58 - mla r6, ip, r0, r4 - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - ldr r5, [sp, #0x30] - ldrsh r0, [sp, #0x34] - str r5, [sp, #8] - ldrsh r5, [sp, #0x38] - str r0, [sp, #0xc] - mov r0, r6 - str r5, [sp, #0x10] - bl sub_0206BD04 - cmp r0, #0 - moveq r0, #0 - movne r0, r6 - strne r4, [r6, #0x54] -_0206BEA4: - add sp, sp, #0x14 - ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} - arm_func_end sub_0206BDF4 - - arm_func_start sub_0206BEAC -sub_0206BEAC: ; 0x0206BEAC - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - ldr r4, [r6, #4] - ldrsh r0, [r4] - bl sub_0201F324 - ldr r1, [r4, #0x40] - mov r5, r0 - cmp r1, #0 - ble _0206BEEC - ldrsh r0, [r4] - mov r1, #0 - bl sub_0201F348 - ldr r0, [r4, #0x40] - sub r0, r0, #1 - str r0, [r4, #0x40] - ldmia sp!, {r4, r5, r6, pc} -_0206BEEC: - ldrh r0, [r5, #0x10] - cmp r0, #0x1000 - beq _0206BF10 - add r0, r0, #0x100 - cmp r0, #0x1000 - movge r0, #0x1000 - strh r0, [r5, #0x12] - ldrh r0, [r5, #0x12] - strh r0, [r5, #0x10] -_0206BF10: - ldrsh r0, [r4] - mov r1, #1 - bl sub_0201F348 - ldr r2, [r4, #8] - ldr r1, [r4, #0x18] - mvn r0, #0x3f - add r1, r2, r1 - str r1, [r4, #8] - ldr r2, [r4, #0xc] - ldr r1, [r4, #0x1c] - add r1, r2, r1 - str r1, [r4, #0xc] - ldrsh r1, [r5] - cmp r1, r0 - blt _0206BF68 - cmp r1, #0x140 - bgt _0206BF68 - ldrsh r1, [r5, #2] - cmp r1, r0 - blt _0206BF68 - cmp r1, #0x100 - ble _0206BF7C -_0206BF68: - mov r0, r4 - bl sub_0206BB94 - mov r0, r6 - bl ov10_022C24DC - ldmia sp!, {r4, r5, r6, pc} -_0206BF7C: - ldr r1, [r4, #8] - mov r0, r1, asr #7 - add r0, r1, r0, lsr #24 - mov r0, r0, asr #8 - strh r0, [r5] - ldr r1, [r4, #0xc] - mov r0, r1, asr #7 - add r0, r1, r0, lsr #24 - mov r0, r0, asr #8 - strh r0, [r5, #2] - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_0206BEAC - - arm_func_start sub_0206BFA8 -sub_0206BFA8: ; 0x0206BFA8 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r6, r0 - ldr r4, [r6, #4] - ldrsh r0, [r4] - bl sub_0201F324 - mov r5, r0 - ldr r0, [r4, #0x20] - bl CosAbs4096 - ldr r1, [r4, #0x24] - bl MultiplyByFixedPoint - ldr r1, [r4, #0x30] - add r7, r1, r0 - ldr r0, [r4, #0x20] - bl SinAbs4096 - ldr r1, [r4, #0x24] - rsb r0, r0, #0 - bl MultiplyByFixedPoint - ldr r2, [r4, #0x34] - ldr r1, _0206C0D4 ; =0x00000FFF - add r0, r2, r0 - str r7, [r4, #8] - str r0, [r4, #0xc] - ldr r2, [r4, #0x20] - ldr r0, [r4, #0x38] - add r2, r2, r0 - and r0, r2, r1 - str r0, [r4, #0x20] - ldr r1, [r4, #0x24] - ldr r0, [r4, #0x3c] - add r0, r1, r0 - str r0, [r4, #0x24] - ldrh r0, [r5, #0x10] - cmp r0, #0x1000 - addlo r0, r0, #0x80 - strloh r0, [r5, #0x10] - ldrloh r0, [r5, #0x12] - addlo r0, r0, #0x80 - strloh r0, [r5, #0x12] - ldr r1, [r4, #0x3c] - mvn r0, #0x3f - add r1, r1, #8 - str r1, [r4, #0x3c] - ldrsh r1, [r5] - cmp r1, r0 - blt _0206C078 - cmp r1, #0x140 - bgt _0206C078 - ldrsh r1, [r5, #2] - cmp r1, r0 - blt _0206C078 - cmp r1, #0x140 - ble _0206C08C -_0206C078: - mov r0, r4 - bl sub_0206BB94 - mov r0, r6 - bl ov10_022C24DC - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_0206C08C: - ldr r0, [r4, #0x38] - cmp r0, #0 - ldr r0, [r4, #0x20] - movlt r0, r0, lsl #4 - movge r0, r0, lsl #4 - rsbge r0, r0, #0x10000 - strh r0, [r5, #0x28] - ldr r1, [r4, #8] - mov r0, r1, asr #7 - add r0, r1, r0, lsr #24 - mov r0, r0, asr #8 - strh r0, [r5] - ldr r1, [r4, #0xc] - mov r0, r1, asr #7 - add r0, r1, r0, lsr #24 - mov r0, r0, asr #8 - strh r0, [r5, #2] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0206C0D4: .word 0x00000FFF - arm_func_end sub_0206BFA8 - - arm_func_start sub_0206C0D8 -sub_0206C0D8: ; 0x0206C0D8 - ldr r1, _0206C0E8 ; =_020B0B6C - ldrsh r1, [r1] - strh r1, [r0] - bx lr - .align 2, 0 -_0206C0E8: .word _020B0B6C - arm_func_end sub_0206C0D8 - - arm_func_start sub_0206C0EC -sub_0206C0EC: ; 0x0206C0EC - ldr r1, _0206C0F8 ; =_020B0B6C - strh r0, [r1] - bx lr - .align 2, 0 -_0206C0F8: .word _020B0B6C - arm_func_end sub_0206C0EC - - arm_func_start sub_0206C0FC -sub_0206C0FC: ; 0x0206C0FC - ldr r1, _0206C10C ; =_020B0B70 - ldrsh r1, [r1, #2] - strh r1, [r0] - bx lr - .align 2, 0 -_0206C10C: .word _020B0B70 - arm_func_end sub_0206C0FC - - arm_func_start sub_0206C110 -sub_0206C110: ; 0x0206C110 - ldr r1, _0206C11C ; =_020B0B70 - strh r0, [r1, #2] - bx lr - .align 2, 0 -_0206C11C: .word _020B0B70 - arm_func_end sub_0206C110 - - arm_func_start sub_0206C120 -sub_0206C120: ; 0x0206C120 - ldr r1, _0206C130 ; =_020B0B70 - ldrsh r1, [r1] - strh r1, [r0] - bx lr - .align 2, 0 -_0206C130: .word _020B0B70 - arm_func_end sub_0206C120 - - arm_func_start sub_0206C134 -sub_0206C134: ; 0x0206C134 - ldr r1, _0206C140 ; =_020B0B70 - strh r0, [r1] - bx lr - .align 2, 0 -_0206C140: .word _020B0B70 - arm_func_end sub_0206C134 - - arm_func_start sub_0206C144 -sub_0206C144: ; 0x0206C144 - ldr r3, _0206C160 ; =_020B0B74 - mov r2, #8 -_0206C14C: - ldrb r1, [r3], #1 - subs r2, r2, #1 - strb r1, [r0], #1 - bne _0206C14C - bx lr - .align 2, 0 -_0206C160: .word _020B0B74 - arm_func_end sub_0206C144 - - arm_func_start sub_0206C164 -sub_0206C164: ; 0x0206C164 - ldr r3, _0206C180 ; =_020B0B74 - mov r2, #8 -_0206C16C: - ldrb r1, [r0], #1 - subs r2, r2, #1 - strb r1, [r3], #1 - bne _0206C16C - bx lr - .align 2, 0 -_0206C180: .word _020B0B74 - arm_func_end sub_0206C164 - - arm_func_start sub_0206C184 -sub_0206C184: ; 0x0206C184 - ldr ip, _0206C198 ; =sub_0207A7EC - mov r0, #0 - mov r2, r1 - sub r1, r0, #1 - bx ip - .align 2, 0 -_0206C198: .word sub_0207A7EC - arm_func_end sub_0206C184 - - arm_func_start sub_0206C19C -sub_0206C19C: ; 0x0206C19C - stmdb sp!, {r4, lr} - mov r4, r1 - mov r0, #0 - mov r2, r4 - sub r1, r0, #1 - bl sub_0207A8F4 - mov r0, r4 - ldmia sp!, {r4, pc} - arm_func_end sub_0206C19C - - arm_func_start sub_0206C1BC -sub_0206C1BC: ; 0x0206C1BC - bx lr - arm_func_end sub_0206C1BC - - arm_func_start DseDriver_LoadDefaultSettings -DseDriver_LoadDefaultSettings: ; 0x0206C1C0 - stmdb sp!, {r4, lr} - ldr r1, _0206C248 ; =DRIVER_WORK - mov r2, #1 - movs r4, r0 - strb r2, [r1, #0x3d] - subeq r0, r2, #0x100 - ldmeqia sp!, {r4, pc} - mov r1, #0x40 - bl DseMem_Clear - mov r0, #0 - str r0, [r4, #4] - str r0, [r4, #8] - str r0, [r4, #0xc] - mov r1, #8 - strb r1, [r4, #0x10] - strb r0, [r4, #0x11] - strh r0, [r4, #0x14] - mov r1, #0xf - strh r1, [r4, #0x16] - mov r1, #0x14 - strb r1, [r4, #0x12] - mov r1, #4 - strh r1, [r4, #0x18] - ldr r2, _0206C24C ; =_0206C184 - strh r1, [r4, #0x1a] - ldr r1, _0206C250 ; =_0206C19C - str r2, [r4, #0x1c] - str r1, [r4, #0x20] - ldr r1, _0206C254 ; =sub_0206C1BC - str r0, [r4, #0x24] - str r1, [r4, #0x28] - str r1, [r4, #0x2c] - str r0, [r4, #0x30] - ldmia sp!, {r4, pc} - .align 2, 0 -_0206C248: .word DRIVER_WORK -_0206C24C: .word sub_0206C184 -_0206C250: .word sub_0206C19C -_0206C254: .word sub_0206C1BC - arm_func_end DseDriver_LoadDefaultSettings - - arm_func_start DseDriver_IsSettingsValid -DseDriver_IsSettingsValid: ; 0x0206C258 - stmdb sp!, {r3, r4, r5, lr} - movs r4, r0 - bne _0206C27C - mov r1, #0 - mov r2, r1 - mvn r0, #0x17 - bl Dse_SetError - mov r0, #2 - ldmia sp!, {r3, r4, r5, pc} -_0206C27C: - tst r4, #3 - beq _0206C29C - mov r1, #0 - mov r2, r1 - mvn r0, #0x17 - bl Dse_SetError - mov r0, #2 - ldmia sp!, {r3, r4, r5, pc} -_0206C29C: - ldr r0, [r4, #8] - mov r5, #0 - cmp r0, #0 - beq _0206C2B4 - tst r0, #0xf - beq _0206C2B8 -_0206C2B4: - orr r5, r5, #4 -_0206C2B8: - ldr r0, [r4, #0xc] - cmp r0, #0 - beq _0206C2CC - tst r0, #0xf - beq _0206C2D0 -_0206C2CC: - orr r5, r5, #8 -_0206C2D0: - ldrb r0, [r4, #0x11] - ldrb r1, [r4, #0x10] - cmp r0, #0 - cmpne r0, #1 - orrne r5, r5, #0x100 - cmp r1, #4 - ldrb r0, [r4, #0x12] - orrlo r5, r5, #0x200 - cmp r0, r1 - ldrsh r1, [r4, #0x14] - orrls r5, r5, #0x400 - ldrsh r0, [r4, #0x16] - cmp r1, #0 - orrne r5, r5, #0x4000 - cmp r0, #0x10 - orrge r5, r5, #0x8000 - cmp r1, r0 - orrgt r5, r5, #0xc000 - cmp r5, #0 - beq _0206C330 - mov r1, r5 - mvn r0, #0x17 - mov r2, #0 - bl Dse_SetError -_0206C330: - mov r0, r5 - str r5, [r4] - ldmia sp!, {r3, r4, r5, pc} - arm_func_end DseDriver_IsSettingsValid - - arm_func_start DseDriver_ConfigureHeap -DseDriver_ConfigureHeap: ; 0x0206C33C - stmdb sp!, {r3, lr} - cmp r0, #0 - strne r1, [r0, #8] - strne r2, [r0, #0xc] - movne r0, #0 - ldmneia sp!, {r3, pc} - mov r1, #0 - mov r2, r1 - mvn r0, #0x17 - bl Dse_SetError - mvn r0, #0x17 - ldmia sp!, {r3, pc} - arm_func_end DseDriver_ConfigureHeap - - arm_func_start sub_0206C36C -sub_0206C36C: ; 0x0206C36C - stmdb sp!, {r3, lr} - cmp r0, #0 - strneb r1, [r0, #0x11] - strneb r2, [r0, #0x10] - movne r0, #0 - ldmneia sp!, {r3, pc} - mov r1, #0 - mov r2, r1 - mvn r0, #0x17 - bl Dse_SetError - mvn r0, #0x17 - ldmia sp!, {r3, pc} - arm_func_end sub_0206C36C - - arm_func_start sub_0206C39C -sub_0206C39C: ; 0x0206C39C - stmdb sp!, {r3, lr} - cmp r0, #0 - bne _0206C3C0 - mov r1, #0 - mov r2, r1 - mvn r0, #0x17 - bl Dse_SetError - mvn r0, #0x17 - ldmia sp!, {r3, pc} -_0206C3C0: - cmp r1, #0 - movlt r1, #0 - cmp r2, #0 - strh r1, [r0, #0x14] - movlt r2, #0xf - strh r2, [r0, #0x16] - mov r0, #0 - ldmia sp!, {r3, pc} - arm_func_end sub_0206C39C - - arm_func_start DseDriver_Init -DseDriver_Init: ; 0x0206C3E0 - stmdb sp!, {r4, lr} - ldr r1, _0206C5F8 ; =DRIVER_WORK - mov r4, r0 - ldrsb r1, [r1] - cmp r1, #1 - bne _0206C410 - mov r1, #0 - mov r2, r1 - mvn r0, #0xbf - bl Dse_SetError - mvn r0, #0xbf - ldmia sp!, {r4, pc} -_0206C410: - bl DseDriver_IsSettingsValid - movs r1, r0 - beq _0206C430 - mvn r0, #0x1d - mov r2, #0 - bl Dse_SetError - mvn r0, #0x1d - ldmia sp!, {r4, pc} -_0206C430: - bl sub_0207AD54 - mov r0, #0 - mov r1, r0 - bl sub_0207AEF4 - bl sub_0207AFF0 - ldr r0, _0206C5F8 ; =DRIVER_WORK - mov r3, #0 - strh r3, [r0, #2] - str r3, [r0, #4] - str r3, [r0, #0x10] - mov r2, #0xff - mov r1, #1 - strb r2, [r0, #0x3c] - strb r1, [r0, #0x3d] - rsb r1, r1, #0x1000 - strh r1, [r0, #0x3e] - str r3, [r0, #0x2c] - ldrb r1, [r4, #0x11] - cmp r1, #0 - ldreq r2, _0206C5FC ; =0x00002710 - moveq r1, #0x64 - ldrne r2, _0206C600 ; =0x0000414B - movne r1, #0x3c - strh r2, [r0, #0x28] - str r1, [r0, #0x30] - ldr r2, _0206C604 ; =0x00BC614E - ldr r1, _0206C5F8 ; =DRIVER_WORK - ldr r0, _0206C608 ; =_022B8330 - str r2, [r1, #0x34] - ldrb r1, [r4, #0x11] - strb r1, [r0, #0xdd8] - bl sub_0206C814 - ldr r1, _0206C5F8 ; =DRIVER_WORK - mov r0, #1 - strb r0, [r1, #0x38] - mov r3, #2 - ldr r2, _0206C60C ; =_020B1290 - ldr r0, _0206C608 ; =_022B8330 - strb r3, [r1, #0x39] - str r2, [r0, #0xed4] - mov r2, #0 - str r2, [r1, #0x71c] - str r2, [r1, #0x720] - str r2, [r1, #0x724] - str r2, [r1, #0x728] - ldrb r1, [r4, #0x10] - ldr ip, _0206C610 ; =DRIVER_WORK - mov r3, r2 - strb r1, [r0, #0xd10] -_0206C4F4: - add r2, r2, #1 - strb r3, [ip, #0x674] - cmp r2, #0x80 - add ip, ip, #1 - blt _0206C4F4 - ldr ip, _0206C5F8 ; =DRIVER_WORK - mov r0, #0x64 - strb r0, [ip, #0x67b] - mov r0, #0x7f - strb r0, [ip, #0x67f] - mov r0, #0x40 - strb r0, [ip, #0x67e] - add r0, r4, #0x28 - ldr lr, _0206C614 ; =_022B734C - ldmia r0, {r0, r1, r2} - stmia lr, {r0, r1, r2} - ldrsh ip, [ip, #0x28] - ldr r1, _0206C608 ; =_022B8330 - mov r2, #1 - str r3, [r1, #0xec8] - str r2, [r1, #0xecc] - str r3, [r1, #0xebc] - ldr r0, _0206C618 ; =_022B9130 - str r3, [r1, #0xec0] - sub r2, r2, #2 - strh r2, [r0, #0xc4] - strh ip, [r0, #0xc6] - strb r3, [r1, #0xed0] - ldr r0, [r4, #8] - ldr r1, [r4, #0xc] - add r2, r4, #0x1c - bl DseMem_Init - ldrsh r0, [r4, #0x16] - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - bl DseVoice_ResetHW - bl DseVoice_ResetAll - bl sub_02070124 - bl sub_02075600 - bl sub_020729A4 - ldr r1, _0206C61C ; =_022B7331 - mov r2, #1 - mov r0, #0x7f -_0206C5A4: - add r2, r2, #1 - strb r0, [r1, #0x40] - cmp r2, #0x10 - add r1, r1, #1 - blt _0206C5A4 - ldr r0, _0206C5F8 ; =DRIVER_WORK - mov r1, #0 - strb r1, [r0, #0x40] - bl DseDriver_StartMainThread - ldrb r0, [r4, #0x12] - bl DseSwd_SysInit - ldr r0, _0206C5F8 ; =DRIVER_WORK - mov r1, #1 - strb r1, [r0] - mov r1, #0 - strb r1, [r0, #1] - ldrh r0, [r4, #0x18] - ldrh r1, [r4, #0x1a] - bl DseSe_SysReset - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0206C5F8: .word DRIVER_WORK -_0206C5FC: .word 0x00002710 -_0206C600: .word 0x0000414B -_0206C604: .word 0x00BC614E -_0206C608: .word _022B8330 -_0206C60C: .word _020B1290 -_0206C610: .word DRIVER_WORK -_0206C614: .word _022B734C -_0206C618: .word _022B9130 -_0206C61C: .word _022B7331 - arm_func_end DseDriver_Init - - arm_func_start sub_0206C620 -sub_0206C620: ; 0x0206C620 - stmdb sp!, {r3, lr} - ldr r0, _0206C684 ; =DRIVER_WORK - ldrsb r0, [r0] - cmp r0, #0 - mvneq r0, #0xc0 - ldmeqia sp!, {r3, pc} - bl DseSwd_SysQuit - mov r0, #0 - bl sub_0206C7F4 - bl sub_020756E8 - bl sub_02070158 - bl sub_02070148 - bl sub_02070EA0 - bl DseVoice_ResetAll - bl DseMem_Quit - bl sub_0206C814 - ldr r1, _0206C684 ; =DRIVER_WORK - mov r0, #0 - strb r0, [r1] - strb r0, [r1, #1] - str r0, [r1, #0x2c] - str r0, [r1, #4] - str r0, [r1, #0x10] - strh r0, [r1, #2] - ldmia sp!, {r3, pc} - .align 2, 0 -_0206C684: .word DRIVER_WORK - arm_func_end sub_0206C620 - - arm_func_start sub_0206C688 -sub_0206C688: ; 0x0206C688 - stmdb sp!, {r3, lr} - ldr r0, _0206C6B8 ; =DRIVER_WORK - ldrsb r1, [r0] - cmp r1, #0 - ldrnesb r0, [r0, #1] - ldmneia sp!, {r3, pc} - mov r1, #0 - mov r2, r1 - mvn r0, #0xc0 - bl Dse_SetError - mvn r0, #0xc0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0206C6B8: .word DRIVER_WORK - arm_func_end sub_0206C688 - - arm_func_start sub_0206C6BC -sub_0206C6BC: ; 0x0206C6BC - stmdb sp!, {r3, lr} - ldr r0, _0206C750 ; =DRIVER_WORK - ldrsb r1, [r0] - cmp r1, #0 - bne _0206C6E8 - mov r1, #0 - mov r2, r1 - mvn r0, #0xc0 - bl Dse_SetError - mvn r0, #0xc0 - ldmia sp!, {r3, pc} -_0206C6E8: - ldrsb r1, [r0, #1] - cmp r1, #1 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - mov r1, #1 - strb r1, [r0, #1] - bl sub_02070F4C - ldr r0, _0206C750 ; =DRIVER_WORK - mov r1, #0 - ldr r0, [r0, #0x664] - bl DseSequence_PauseList - ldr r0, _0206C750 ; =DRIVER_WORK - mov r1, #0 - ldr r0, [r0, #0x668] - bl DseSequence_PauseList - mov r0, #0 - bl sub_0206F6FC - mov r0, #0 - bl sub_02070188 - mov r0, #0 - bl DseVoice_ResetHW - ldr r0, _0206C750 ; =DRIVER_WORK - mov r1, #2 - strb r1, [r0, #0x38] - mov r0, #0 - ldmia sp!, {r3, pc} - .align 2, 0 -_0206C750: .word DRIVER_WORK - arm_func_end sub_0206C6BC - - arm_func_start sub_0206C754 -sub_0206C754: ; 0x0206C754 - stmdb sp!, {r4, lr} - ldr r1, _0206C7F0 ; =DRIVER_WORK - mov r4, r0 - ldrsb r0, [r1, #1] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r4, pc} - mov r2, #1 - strb r2, [r1, #0x38] - ldrh r0, [r1, #0x3e] - mov r1, r4 - tst r0, #0xf - ldr r0, _0206C7F0 ; =DRIVER_WORK - moveq r2, #0 - mov r2, r2, lsl #0x18 - ldr r0, [r0, #0x664] - mov r2, r2, asr #0x18 - bl sub_0206DC78 - ldr r0, _0206C7F0 ; =DRIVER_WORK - ldrh r0, [r0, #0x3e] - tst r0, #0xf0 - movne r1, #1 - ldr r0, _0206C7F0 ; =DRIVER_WORK - moveq r1, #0 - mov r2, r1, lsl #0x18 - ldr r0, [r0, #0x668] - mov r1, r4 - mov r2, r2, asr #0x18 - bl sub_0206DC78 - mov r0, r4 - bl sub_0206F774 - mov r0, r4 - bl sub_020701B0 - ldr r0, _0206C7F0 ; =DRIVER_WORK - mov r1, #0 - strb r1, [r0, #1] - bl DseDriver_StartTickTimer - mov r0, #0 - ldmia sp!, {r4, pc} - .align 2, 0 -_0206C7F0: .word DRIVER_WORK - arm_func_end sub_0206C754 - - arm_func_start sub_0206C7F4 -sub_0206C7F4: ; 0x0206C7F4 - stmdb sp!, {r4, lr} - mov r4, r0 - bl DseBgm_StopAll - mov r0, r4 - bl DseSe_StopAll - mov r0, r4 - bl sub_0206F9A4 - ldmia sp!, {r4, pc} - arm_func_end sub_0206C7F4 - - arm_func_start sub_0206C814 -sub_0206C814: ; 0x0206C814 - ldr r1, _0206C848 ; =DRIVER_WORK - mov r2, #0 - str r2, [r1, #0x654] - str r2, [r1, #0x658] - ldr r0, _0206C84C ; =_022B8330 - str r2, [r1, #0x65c] - str r2, [r0, #0xddc] - str r2, [r1, #0x660] - str r2, [r1, #0x664] - str r2, [r1, #0x668] - ldr ip, _0206C850 ; =DseBgm_SysSetupNoteList - str r2, [r1, #0x66c] - bx ip - .align 2, 0 -_0206C848: .word DRIVER_WORK -_0206C84C: .word _022B8330 -_0206C850: .word DseBgm_SysSetupNoteList - arm_func_end sub_0206C814 - - arm_func_start Dse_SetError -Dse_SetError: ; 0x0206C854 - stmdb sp!, {r3, lr} - ldr r3, _0206C880 ; =DRIVER_WORK - stmib r3, {r0, r1, r2} - ldr ip, [r3, #0x1c] - cmp ip, #0 - ldmeqia sp!, {r3, pc} - mov r1, #0 - ldr r2, _0206C884 ; =_022B7334 - mov r3, r1 - blx ip - ldmia sp!, {r3, pc} - .align 2, 0 -_0206C880: .word DRIVER_WORK -_0206C884: .word _022B7334 - arm_func_end Dse_SetError - - arm_func_start Dse_SetError2 -Dse_SetError2: ; 0x0206C888 - stmdb sp!, {r3, lr} - ldr r3, _0206C8BC ; =DRIVER_WORK - str r0, [r3, #0x10] - str r1, [r3, #0x14] - str r2, [r3, #0x18] - ldr ip, [r3, #0x20] - cmp ip, #0 - ldmeqia sp!, {r3, pc} - mov r1, #0 - ldr r2, _0206C8C0 ; =_022B7340 - mov r3, r1 - blx ip - ldmia sp!, {r3, pc} - .align 2, 0 -_0206C8BC: .word DRIVER_WORK -_0206C8C0: .word _022B7340 - arm_func_end Dse_SetError2 - -; https://decomp.me/scratch/C4osO - arm_func_start DseUtil_ByteSwap32 -DseUtil_ByteSwap32: ; 0x0206C8C4 - mov r3, r0, lsr #0x18 - mov r2, r0, lsr #8 - mov r1, r0, lsl #8 - mov r0, r0, lsl #0x18 - and r3, r3, #0xff - and r2, r2, #0xff00 - orr r2, r3, r2 - and r1, r1, #0xff0000 - orr r1, r2, r1 - and r0, r0, #0xff000000 - orr r0, r1, r0 - bx lr - arm_func_end DseUtil_ByteSwap32 - - arm_func_start DseUtil_GetRandomNumber -DseUtil_GetRandomNumber: ; 0x0206C8F4 - ldr r1, _0206C914 ; =DRIVER_WORK - ldr r0, _0206C918 ; =0x00007FFF - ldr r2, [r1, #0x34] - eor r2, r2, r2, lsl #17 - eor r2, r2, r2, asr #15 - str r2, [r1, #0x34] - and r0, r2, r0 - bx lr - .align 2, 0 -_0206C914: .word DRIVER_WORK -_0206C918: .word 0x00007FFF - arm_func_end DseUtil_GetRandomNumber - -; https://decomp.me/scratch/KrgBG - arm_func_start DseMem_Init -DseMem_Init: ; 0x0206C91C - mov ip, r1 - tst r0, #0xf - bicne r0, r0, #0xf - ldr r1, _0206C980 ; =DRIVER_WORK - addne r0, r0, #0x10 - subne ip, ip, #0x10 - add r3, r0, ip - str r0, [r1, #0x6f4] - str r3, [r1, #0x6f8] - str ip, [r1, #0x6fc] - ldr r3, _0206C984 ; =0x74647373 - mov r1, #0x82 - str r3, [r0] - strb r1, [r0, #4] - mov r3, #0 - strb r3, [r0, #5] - add r1, r0, #0x10 - str r1, [r0, #8] - str r3, [r0, #0xc] - strb r3, [r0, #6] - ldr r3, _0206C988 ; =_022B7A30 - ldmia r2, {r0, r1, r2} - stmia r3, {r0, r1, r2} - mov r0, ip - bx lr - .align 2, 0 -_0206C980: .word DRIVER_WORK -_0206C984: .word 0x74647373 -_0206C988: .word _022B7A30 - arm_func_end DseMem_Init diff --git a/asm/main_0206A750.s b/asm/main_0206A750.s new file mode 100644 index 00000000..2663bff9 --- /dev/null +++ b/asm/main_0206A750.s @@ -0,0 +1,2559 @@ + .include "asm/macros.inc" + .include "main_0206A750.inc" + + .text + + arm_func_start GetDungeonModeSpecial +GetDungeonModeSpecial: ; 0x0206A76C + stmdb sp!, {r3, lr} + cmp r0, #0xd6 + moveq r0, #4 + ldmeqia sp!, {r3, pc} + cmp r0, #0xb4 + blt _0206A790 + cmp r0, #0xd3 + movle r0, #3 + ldmleia sp!, {r3, pc} +_0206A790: + cmp r0, #0xd7 + moveq r0, #2 + ldmeqia sp!, {r3, pc} + cmp r0, #0xd8 + moveq r0, #3 + ldmeqia sp!, {r3, pc} + bl GetDungeonMode + cmp r0, #1 + moveq r0, #1 + ldmeqia sp!, {r3, pc} + sub r0, r0, #2 + cmp r0, #1 + movls r0, #2 + movhi r0, #1 + ldmia sp!, {r3, pc} + arm_func_end GetDungeonModeSpecial + + arm_func_start sub_0206A7CC +sub_0206A7CC: ; 0x0206A7CC + stmdb sp!, {r4, lr} + mov r4, r0 + cmp r4, #0x3e8 + bne _0206A7F4 + mov r0, #0 + mov r1, #0x20 + bl LoadScriptVariableValue + mov r0, r0, lsl #0x10 + mov r4, r0, asr #0x10 + b _0206A82C +_0206A7F4: + ldr r0, _0206A848 ; =0x000003E9 + cmp r4, r0 + bne _0206A82C + bl sub_0204E6FC + cmp r0, #2 + bne _0206A814 + bl sub_0204E780 + b _0206A818 +_0206A814: + bl sub_0204E770 +_0206A818: + cmp r0, #0xff + addne r0, r0, #1 + mvneq r4, #0 + movne r0, r0, lsl #0x10 + movne r4, r0, asr #0x10 +_0206A82C: + cmp r4, #0xd1 + bne _0206A840 + bl GetExecuteSpecialEpisodeType + cmp r0, #4 + moveq r4, #0xd2 +_0206A840: + mov r0, r4 + ldmia sp!, {r4, pc} + .align 2, 0 +_0206A848: .word 0x000003E9 + arm_func_end sub_0206A7CC + + arm_func_start sub_0206A84C +sub_0206A84C: ; 0x0206A84C + cmp r0, #0xb4 + addlo r0, r0, #1 + movlo r0, r0, lsl #0x10 + movlo r0, r0, asr #0x10 + bxlo lr + blo _0206A870 + cmp r0, #0xd3 + movls r0, #0xb8 + bxls lr +_0206A870: + mvn r0, #0 + bx lr + arm_func_end sub_0206A84C + + arm_func_start sub_0206A878 +sub_0206A878: ; 0x0206A878 + stmdb sp!, {r3, lr} + bl sub_0206A7CC + mvn r1, #0 + cmp r0, r1 + ldrne r1, _0206A89C ; =MAP_MARKER_PLACEMENTS + movne r0, r0, lsl #3 + ldrnesh r1, [r1, r0] + mov r0, r1 + ldmia sp!, {r3, pc} + .align 2, 0 +_0206A89C: .word MAP_MARKER_PLACEMENTS + arm_func_end sub_0206A878 + + arm_func_start sub_0206A8A0 +sub_0206A8A0: ; 0x0206A8A0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + bl sub_0206A7CC + mov r5, r0 + mov r0, r4 + bl sub_0206A7CC + mvn r1, #0 + cmp r5, r1 + mov r4, r0 + ldrne r0, _0206A908 ; =_020A94D2 + movne r2, r5, lsl #3 + ldrnesh r0, [r0, r2] + cmpne r0, r1 + movne r5, r0 + mvn r0, #0 + cmp r4, r0 + ldrne r1, _0206A908 ; =_020A94D2 + movne r2, r4, lsl #3 + ldrnesh r1, [r1, r2] + cmpne r1, r0 + movne r4, r1 + cmp r5, r4 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0206A908: .word _020A94D2 + arm_func_end sub_0206A8A0 + + arm_func_start sub_0206A90C +sub_0206A90C: ; 0x0206A90C +#ifdef EUROPE +#define SUB_0206A90C_WORD_OFFSET 2 +#else +#define SUB_0206A90C_WORD_OFFSET 0 +#endif + stmdb sp!, {r3, lr} + bl sub_0206A7CC + mvn r1, #0 + cmp r0, r1 +#ifdef JAPAN + moveq r0, #0x47 + ldmeqia sp!, {r3, pc} + cmp r0, #0 + moveq r0, #0x40 +#else + ldreq r0, _0206A964 ; =0x0000403A + ldmeqia sp!, {r3, pc} + cmp r0, #0 + ldreq r0, _0206A968 ; =0x00004033 +#endif + ldmeqia sp!, {r3, pc} + cmp r0, #1 + blt _0206A950 + cmp r0, #0xb4 + bgt _0206A950 + sub r0, r0, #1 + and r0, r0, #0xff + bl sub_02024934 + ldmia sp!, {r3, pc} +_0206A950: +#ifdef JAPAN + sub r0, r0, #0x74 +#else + add r0, r0, #0x7f + SUB_0206A90C_WORD_OFFSET + add r0, r0, #0x3f00 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + ldmia sp!, {r3, pc} + .align 2, 0 +#ifndef JAPAN +_0206A964: .word 0x0000403A + SUB_0206A90C_WORD_OFFSET +_0206A968: .word 0x00004033 + SUB_0206A90C_WORD_OFFSET +#endif + arm_func_end sub_0206A90C + + arm_func_start sub_0206A96C +sub_0206A96C: ; 0x0206A96C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r1 + mov r4, r2 + bl sub_0206A7CC + mvn r2, #0 + cmp r0, r2 + moveq r0, r2 + ldmeqia sp!, {r3, r4, r5, pc} + ldr r1, _0206A9D8 ; =MAP_MARKER_PLACEMENTS + cmp r5, r2 + add r3, r1, r0, lsl #3 + ldrnesh r1, [r3] + cmpne r1, r5 + movne r0, r2 + ldmneia sp!, {r3, r4, r5, pc} + ldrsh r2, [r3, #2] + cmp r2, r0 + mvnne r1, #0 + cmpne r2, r1 + ldrne r1, _0206A9D8 ; =MAP_MARKER_PLACEMENTS + movne r0, r2 + addne r3, r1, r2, lsl #3 + ldrsh r1, [r3, #4] + str r1, [r4] + ldrsh r1, [r3, #6] + str r1, [r4, #4] + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0206A9D8: .word MAP_MARKER_PLACEMENTS + arm_func_end sub_0206A96C + + arm_func_start sub_0206A9DC +sub_0206A9DC: ; 0x0206A9DC + stmdb sp!, {r4, lr} + bl GetExecuteSpecialEpisodeType + mov r4, r0 + cmp r4, #4 + bne _0206AA24 + mov r0, #0x3e8 + bl sub_0206A7CC + ldr r1, _0206AA34 ; =MAP_MARKER_PLACEMENTS + mov r0, r0, lsl #3 + ldrsh r0, [r1, r0] + ldr r1, _0206AA38 ; =0xFFFFFED2 + add r1, r0, r1 + mov r1, r1, lsl #0x10 + mov r1, r1, asr #0x10 + mov r1, r1, lsl #0x10 + mov r1, r1, lsr #0x10 + cmp r1, #1 + ldmlsia sp!, {r4, pc} +_0206AA24: + ldr r0, _0206AA3C ; =_020A94C6 + mov r1, r4, lsl #1 + ldrsh r0, [r0, r1] + ldmia sp!, {r4, pc} + .align 2, 0 +_0206AA34: .word MAP_MARKER_PLACEMENTS +#if defined(EUROPE) +_0206AA38: .word 0xFFFFFEC6 +#elif defined(JAPAN) +_0206AA38: .word 0xFFFFFECD +#else +_0206AA38: .word 0xFFFFFED2 +#endif +_0206AA3C: .word _020A94C6 + arm_func_end sub_0206A9DC + + arm_func_start sub_0206AA40 +sub_0206AA40: ; 0x0206AA40 + stmdb sp!, {r3, lr} + bl GetExecuteSpecialEpisodeType + ldr r1, _0206AA58 ; =_020A94BC + mov r0, r0, lsl #1 + ldrsh r0, [r1, r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_0206AA58: .word _020A94BC + arm_func_end sub_0206AA40 + + arm_func_start sub_0206AA5C +sub_0206AA5C: ; 0x0206AA5C + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, lr} + mov r5, r0 + mov r0, #0x40 + mov r1, #1 + bl MemAlloc + ldr r2, _0206AB90 ; =_020B0B4C + mov r1, #0x40 + str r0, [r2, #8] + bl MemZero + ldr r0, _0206AB90 ; =_020B0B4C + mov r1, #0x20 + ldr r4, [r0, #8] + add r0, r4, #4 + bl MemZero + mov r1, #0 + str r1, [r4, #0x20] + ldr r0, _0206AB90 ; =_020B0B4C + strh r1, [r4, #0x1c] + ldr r1, [r0, #8] + str r5, [r1] + ldr r2, [r0, #8] + ldr r0, [r2] + cmp r0, #1 + bne _0206AB3C + ldr r0, _0206AB94 ; =0x00001F64 + mov r1, #6 + add r4, r2, #4 + bl MemAlloc + ldr r1, _0206AB94 ; =0x00001F64 + mov r5, r0 + bl MemZero + mov r8, #0x58 + mov sl, #0 + mvn r7, #0 + mov r6, r8 +_0206AAE8: + mul sb, sl, r6 + mov r1, r8 + add r0, r5, sb + bl MemZero + add sl, sl, #1 + strh r7, [r5, sb] + cmp sl, #0x50 + blt _0206AAE8 + add r0, r5, #0x1000 + ldr r2, _0206AB90 ; =_020B0B4C + str r4, [r0, #0xf5c] + ldr r0, [r2, #8] + mov r1, #5 + str r5, [r0, #0x28] + ldr r0, [r2, #8] + add r0, r0, #4 + bl sub_0206BBE0 + ldr r1, _0206AB90 ; =_020B0B4C + ldr r1, [r1, #8] + str r0, [r1, #0x24] + b _0206AB5C +_0206AB3C: + cmp r0, #2 + bne _0206AB5C + add r0, r2, #4 + mov r1, #4 + bl sub_0206BBE0 + ldr r1, _0206AB90 ; =_020B0B4C + ldr r1, [r1, #8] + str r0, [r1, #0x24] +_0206AB5C: + ldr r1, _0206AB90 ; =_020B0B4C + mov r3, #0 + ldr r2, [r1, #8] + mov r0, #0x80 + str r3, [r2, #0x2c] + ldr r2, [r1, #8] + strb r3, [r2, #0x30] + ldr r2, [r1, #8] + str r3, [r2, #0x34] + ldr r1, [r1, #8] + strb r3, [r1, #0x31] + bl ov10_022C2340 + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, pc} + .align 2, 0 +_0206AB90: .word _020B0B4C +_0206AB94: .word 0x00001F64 + arm_func_end sub_0206AA5C + + arm_func_start sub_0206AB98 +sub_0206AB98: ; 0x0206AB98 + ldr r0, _0206ABAC ; =_020B0B4C + mov r1, #1 + ldr r0, [r0, #8] + strb r1, [r0, #0x30] + bx lr + .align 2, 0 +_0206ABAC: .word _020B0B4C + arm_func_end sub_0206AB98 + + arm_func_start sub_0206ABB0 +sub_0206ABB0: ; 0x0206ABB0 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #0x18 + ldr r0, _0206AD28 ; =_020B0B4C + ldr r4, [r0, #8] + cmp r4, #0 + ldrneb r0, [r4, #0x30] + cmpne r0, #0 + beq _0206AD1C + ldr r0, [r4] + ldr r1, _0206AD2C ; =_020B0B5C + cmp r0, #1 + movne r5, #1 + moveq r5, #0 + ldr r1, [r1, r5, lsl #3] + add r0, sp, #8 + mov r2, #6 + bl LoadWteFromRom + ldr r0, _0206AD30 ; =_020B0B60 + mov r1, #0 + ldr r0, [r0, r5, lsl #3] + bl sub_0201DF38 + str r0, [r4, #0x14] + mov r2, #0 + ldr r1, [r4, #0x20] + add r0, sp, #8 + mov r3, r2 + bl sub_0201E12C + add r0, sp, #8 + bl DelayWteFree + ldr r1, [r4, #0x20] + add r0, sp, #0x10 + str r1, [r4, #0x18] + ldr r2, [r4, #0x20] + ldr r1, _0206AD34 ; =_020A9F34 + add r2, r2, #0x8000 + str r2, [r4, #0x20] + mov r2, #6 + bl LoadWteFromRom + ldr r0, _0206AD38 ; =_020A9F48 + mov r1, #0 + bl sub_0201DF38 + str r0, [r4, #4] + ldr r1, [r4, #0x20] + add r0, sp, #0x10 + mov r2, #1 + mov r3, #0 + bl sub_0201E12C + add r0, sp, #0x10 + bl DelayWteFree + ldr r1, [r4, #0x20] + add r0, sp, #0x10 + str r1, [r4, #8] + ldr r2, [r4, #0x20] + ldr r1, _0206AD3C ; =_020A9F5C + add r2, r2, #0x2000 + str r2, [r4, #0x20] + mov r2, #6 + bl LoadWteFromRom + ldr r0, _0206AD40 ; =_020A9F70 + mov r1, #0 + bl sub_0201DF38 + str r0, [r4, #0xc] + ldr r1, [r4, #0x20] + add r0, sp, #0x10 + mov r2, #2 + mov r3, #0 + bl sub_0201E12C + add r0, sp, #0x10 + bl DelayWteFree + ldr r0, [r4, #0x20] + mov r2, #0 + str r0, [r4, #0x10] + ldr r1, [r4, #0x20] + ldr r0, _0206AD44 ; =WAN_TABLE + add r1, r1, #0x4000 + str r1, [r4, #0x20] + ldr r0, [r0] + ldr r1, _0206AD48 ; =_020A9F84 + bl LoadWanTableEntry + strh r0, [r4, #0x1c] + mov r3, #1 + str r3, [sp] + mov r2, #0 + str r2, [sp, #4] + ldrsh r0, [r4, #0x1c] + mov r1, #0x2c0 + bl sub_0201D9C8 + ldr r0, _0206AD28 ; =_020B0B4C + mov r1, #0 + ldr r0, [r0, #8] + strb r1, [r0, #0x30] +_0206AD1C: + mov r0, #1 + add sp, sp, #0x18 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_0206AD28: .word _020B0B4C +_0206AD2C: .word _020B0B5C +_0206AD30: .word _020B0B60 +_0206AD34: .word _020A9F34 +_0206AD38: .word _020A9F48 +_0206AD3C: .word _020A9F5C +_0206AD40: .word _020A9F70 +_0206AD44: .word WAN_TABLE +_0206AD48: .word _020A9F84 + arm_func_end sub_0206ABB0 + + arm_func_start sub_0206AD4C +sub_0206AD4C: ; 0x0206AD4C + ldr r0, _0206AD7C ; =_020B0B4C + ldr r0, [r0, #8] + cmp r0, #0 + beq _0206AD74 + ldrb r0, [r0, #0x31] + cmp r0, #0 + moveq r0, #1 + movne r0, #0 + and r0, r0, #0xff + bx lr +_0206AD74: + mov r0, #0 + bx lr + .align 2, 0 +_0206AD7C: .word _020B0B4C + arm_func_end sub_0206AD4C + + arm_func_start sub_0206AD80 +sub_0206AD80: ; 0x0206AD80 + ldr r0, _0206AD9C ; =_020B0B4C + ldr r1, [r0, #8] + cmp r1, #0 + ldrne r0, [r1, #0x34] + addne r0, r0, #1 + strne r0, [r1, #0x34] + bx lr + .align 2, 0 +_0206AD9C: .word _020B0B4C + arm_func_end sub_0206AD80 + + arm_func_start sub_0206ADA0 +sub_0206ADA0: ; 0x0206ADA0 + ldr r1, _0206ADB4 ; =_020B0B4C + ldr r1, [r1, #8] + cmp r1, #0 + strne r0, [r1, #0x38] + bx lr + .align 2, 0 +_0206ADB4: .word _020B0B4C + arm_func_end sub_0206ADA0 + + arm_func_start sub_0206ADB8 +sub_0206ADB8: ; 0x0206ADB8 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x4c + ldr r0, _0206B9BC ; =_020B0B4C + ldr r0, [r0, #8] + cmp r0, #0 + moveq r0, #0 + beq _0206B9B4 + bl ov10_022C23EC + ldr r0, _0206B9BC ; =_020B0B4C + ldr r8, [r0, #8] + ldrb r0, [r8, #0x30] + cmp r0, #0 + bne _0206B9B0 + ldr r0, [r8, #0x2c] + cmp r0, #0 + beq _0206AE00 + cmp r0, #1 + b _0206B99C +_0206AE00: + ldr r0, [r8, #0x38] + cmp r0, #0 + subgt r0, r0, #1 + strgt r0, [r8, #0x38] + bgt _0206B99C + ldr r0, [r8] + cmp r0, #1 + bne _0206B678 + ldr r7, [r8, #0x24] + ldr sb, [r8, #0x28] + ldr r0, [r7, #0xc] + cmp r0, #0 + beq _0206AE48 + cmp r0, #1 + beq _0206AF78 + cmp r0, #2 + beq _0206B1D4 + b _0206B670 +_0206AE48: + ldr r1, [r7, #0x2d4] + mov r0, #0xc0 + ldr fp, [r7, #0x2d8] + mov r6, #0 + bl _s32_div_f + mov sb, r0, lsl #8 + mov r0, #0x14000 + rsb r0, r0, #0 + str r0, [sp, #0x2c] + b _0206AF50 +_0206AE70: + mul r0, r6, sb + ands r5, r6, #1 + movne r4, #0x14000 + ldr r1, _0206B9BC ; =_020B0B4C + ldreq r4, [sp, #0x2c] + str r0, [sp, #0x18] + ldr r1, [r1, #4] + rsb r0, r4, #0 + bl _s32_div_f + str r0, [sp, #0x1c] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0xe0 + str r0, [sp, #8] + mov r0, #0x58 + mul sl, r6, r0 + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + str r0, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + ldr r0, [r7] + ldr r3, [sp, #0x18] + mov r1, fp + add r0, r0, sl + mov r2, r4 + bl sub_0206BC3C + cmp r5, #0 + movne r0, #0 + moveq r0, #0x10000 + add r2, r4, r0 + ldr r5, [r7, #4] + ldr r0, [sp, #0x1c] + ldr r3, [sp, #0x18] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x70 + str r0, [sp, #8] + mov r0, #3 + str r0, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + add r0, r5, sl + mov r1, fp + bl sub_0206BD04 + ldrsh r0, [r5, sl] + bl sub_0201F324 + ldrsh r1, [r0, #0x1a] + add r6, r6, #1 + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + strh r1, [r0, #8] + mov r1, #0 + strh r1, [r0, #0xa] +_0206AF50: + ldr r0, [r7, #0x2d4] + cmp r6, r0 + blt _0206AE70 + ldr r0, _0206B9BC ; =_020B0B4C + ldr r0, [r0, #4] + str r0, [r7, #8] + ldr r0, [r7, #0xc] + add r0, r0, #1 + str r0, [r7, #0xc] + b _0206B670 +_0206AF78: + mov r4, #0 + mov fp, #0x58 + b _0206B04C +_0206AF84: + mul r5, r4, fp + ldr r6, [r7] + add sl, r6, r5 + ldr r1, [sl, #8] + ldr r0, [sl, #0x18] + add r0, r1, r0 + str r0, [sl, #8] + ldr r1, [sl, #0xc] + ldr r0, [sl, #0x1c] + add r0, r1, r0 + str r0, [sl, #0xc] + ldrsh r0, [r6, r5] + bl sub_0201F324 + ldr r2, [sl, #8] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0] + ldrsh r0, [r6, r5] + bl sub_0201F324 + ldr r2, [sl, #0xc] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0, #2] + ldr r6, [r7, #4] + add sl, r6, r5 + ldr r1, [sl, #8] + ldr r0, [sl, #0x18] + add r0, r1, r0 + str r0, [sl, #8] + ldr r1, [sl, #0xc] + ldr r0, [sl, #0x1c] + add r0, r1, r0 + str r0, [sl, #0xc] + ldrsh r0, [r6, r5] + bl sub_0201F324 + ldr r2, [sl, #8] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0] + ldrsh r0, [r6, r5] + bl sub_0201F324 + ldr r2, [sl, #0xc] + add r4, r4, #1 + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0, #2] +_0206B04C: + ldr r0, [r7, #0x2d4] + cmp r4, r0 + blt _0206AF84 + ldr r0, [r7, #8] + cmp r0, #0 + bne _0206B0E0 + mov r6, #0 + mov fp, r6 + b _0206B0D0 +_0206B070: + mov r0, #0x58 + mul r4, r6, r0 + ldr r5, [r7] + ldrsh r0, [r5, r4] + add sl, r5, r4 + bl sub_0201F324 + str fp, [sl, #8] + str fp, [sl, #0x18] + str fp, [sl, #0x1c] + ldrsh r0, [r5, r4] + bl sub_0201F324 + ldr r2, [sl, #8] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0] + ldrsh r0, [r5, r4] + bl sub_0201F324 + ldr r2, [sl, #0xc] + add r6, r6, #1 + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0, #2] +_0206B0D0: + ldr r0, [r7, #0x2d4] + cmp r6, r0 + blt _0206B070 + b _0206B0E8 +_0206B0E0: + sub r0, r0, #1 + str r0, [r7, #8] +_0206B0E8: + ldr r0, [r7, #4] + ldr r0, [r0, #8] + cmp r0, #0x11000 + ble _0206B670 + add r0, sb, #0x1000 + ldr r5, [r0, #0xf5c] + mov r1, #0x8000 + str r1, [r0, #0xb8c] + mov r1, #0x6000 + str r1, [r0, #0xb90] + bl sub_0201F36C + add r1, sb, #0x1b00 + strh r0, [r1, #0x84] + ldrsh r0, [r1, #0x84] + bl sub_0201F324 + mov r4, r0 + mov r2, #0 + strb r2, [r4, #0x3c] + mov r1, #0x80 + strh r1, [r4, #0x2a] + add r3, sb, #0x1000 + ldr sl, [r3, #0xb8c] + mov r6, #2 + mov r1, sl, asr #7 + add r1, sl, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r4] + ldr r3, [r3, #0xb90] + mov r1, r3, asr #7 + add r1, r3, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r4, #2] + str r6, [sp] + str r2, [sp, #4] + ldr r1, [r5, #8] + ldr r3, [r5, #0xc] + bl sub_0201E7D8 + ldrsh r0, [r4, #0x1a] + mov r5, #0 + mov r1, #0x28 + add r0, r0, r0, lsr #31 + mov r0, r0, asr #1 + strh r0, [r4, #8] + ldrsh r2, [r4, #0x1c] + add r3, sb, #0x1000 + mov r0, #0x1000 + add r2, r2, r2, lsr #31 + mov r2, r2, asr #1 + strh r2, [r4, #0xa] + strh r5, [r4, #0x10] + strh r5, [r4, #0x12] + str r1, [r3, #0xbd4] + bl _s32_div_f + add r1, sb, #0x1b00 + strh r0, [r1, #0xcc] + ldr r0, [r7, #0xc] + add r0, r0, #1 + str r0, [r7, #0xc] + b _0206B670 +_0206B1D4: + add r0, sb, #0x1b00 + ldrsh r3, [r0, #0x84] + add r0, sb, #0x1000 + add r1, sb, #0x384 + mvn r2, #0 + cmp r3, r2 + add r6, r1, #0x1800 + ldr r7, [r0, #0xf5c] + beq _0206B2D4 + ldrsh r0, [r6] + bl sub_0201F324 + ldr r1, [r6, #4] + mov r5, r0 + cmp r1, #2 + ldrh r4, [r5, #0x10] + bge _0206B298 + ldr r0, [r6, #0x4c] + add r1, r0, #1 + str r1, [r6, #0x4c] + ldr r0, [r6, #0x50] + cmp r1, r0 + ble _0206B298 + ldr r0, [r6, #4] + add r0, r0, #1 + str r0, [r6, #4] + cmp r0, #2 + bne _0206B278 + ldr r1, [r6, #0x50] + mov r0, #0xc00 + bl _s32_div_f + strh r0, [r6, #0x48] + add r0, sb, #0x1000 + mov r1, #1 + str r1, [r0, #0xbf0] + mov r1, #8 + str r1, [r0, #0xbe8] + ldr r1, [r0, #0xbec] + str r1, [r0, #0xbe0] + ldr r1, [r0, #0xbf0] + str r1, [r0, #0xbe4] + b _0206B290 +_0206B278: + cmp r0, #1 + bne _0206B290 + ldr r1, [r6, #0x50] + mov r0, #0xc00 + bl _s32_div_f + strh r0, [r6, #0x48] +_0206B290: + mov r0, #0 + str r0, [r6, #0x4c] +_0206B298: + ldrsh r0, [r6, #0x48] + ldr r1, [r6, #4] + cmp r1, #1 + subeq r4, r4, r0 + beq _0206B2C8 + cmp r1, #2 + add r4, r4, r0 + bne _0206B2C8 + add r0, r0, #0x20 + cmp r4, #0x4000 + strh r0, [r6, #0x48] + movge r4, #0x4000 +_0206B2C8: + strh r4, [r5, #0x10] + ldrh r0, [r5, #0x10] + strh r0, [r5, #0x12] +_0206B2D4: + add r0, sb, #0x1000 + ldr r1, [r0, #0xbf4] + cmp r1, #0 + beq _0206B2F0 + cmp r1, #1 + beq _0206B3C4 + b _0206B670 +_0206B2F0: + mov r5, #0 + mov r2, #1 + str r5, [r0, #0xbdc] + mov r1, #0x10 + str r2, [r0, #0xbe0] + str r1, [r0, #0xbec] + str r1, [r0, #0xbe8] + mov r1, #8 + str r1, [r0, #0xbf0] + rsb r1, r2, #0x3e8 + str r1, [r0, #0xbe4] + ldr r4, [r0, #0xf5c] + add r0, sb, #0x3f8 + add fp, r0, #0x1800 +_0206B328: + mov r0, #0x7c + mla r6, r5, r0, fp + mov r0, r6 + bl InitAnimationControlWithSet__0201C0B0 + ldrsh r1, [r4, #0x18] + mov r0, r6 + bl SetSpriteIdForAnimationControl + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + mov r0, #1 + str r0, [sp, #8] + mov r0, #0 + str r0, [sp, #0xc] + mov r0, #0xc + mul r1, r5, r0 + ldr r0, _0206B9C0 ; =_020A9EE0 + mov r2, #0 + add sl, r0, r1 + ldr r1, [r0, r1] + mov r0, r6 + mov r3, #0x2c0 + bl SetAnimationForAnimationControl + ldr r1, [sl, #4] + mov r0, r6 + strh r1, [r6, #0x1c] + ldr r2, [sl, #8] + mov r1, #0 + strh r2, [r6, #0x1e] + bl sub_0201D12C + add r5, r5, #1 + cmp r5, #7 + blt _0206B328 + add r0, sb, #0x1000 + mov r1, #1 + strb r1, [r0, #0xf60] + ldr r1, [r0, #0xbf4] + add r1, r1, #1 + str r1, [r0, #0xbf4] +_0206B3C4: + add r0, sb, #0x1000 + ldr r2, [r0, #0xbe0] + add r1, r2, #1 + str r1, [r0, #0xbe0] + ldr r0, [r0, #0xbec] + cmp r2, r0 + ble _0206B54C + bl Rand16Bit + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #31 + add r0, r1, r0, ror #31 + add r4, r0, #3 + ldr r0, _0206B9C4 ; =0x000001FF + mov r5, #0 + add r0, r0, #0xe00 + str r0, [sp, #0x34] + b _0206B51C +_0206B408: + bl Rand16Bit + bl Rand16Bit + ldr r1, _0206B9BC ; =_020B0B4C + ldr r2, [r1, #0xc] + ldr r1, _0206B9C4 ; =0x000001FF + and r0, r0, r1 + add r0, r2, r0 + str r0, [sp, #0x14] + bl Rand16Bit + ldr r1, _0206B9BC ; =_020B0B4C + and r0, r0, #0xf + ldr r1, [r1] + add fp, r1, r0 + bl Rand16Bit + ldr r1, [r7] + ldr r1, [r1] + ldr r1, [r1, #4] + sub r1, r1, #1 + bl _s32_div_f + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + bl Rand16Bit + mov r1, #0xd0 + bl _s32_div_f + add sl, r1, #0x10 + bl Rand16Bit + str sl, [sp] + str r6, [sp, #4] + mov r1, #0 + str r1, [sp, #8] + ldr r1, [sp, #0x34] + mov r2, #0x8000 + and sl, r0, r1 + mov r0, sb + mov r1, r7 + mov r3, #0x6000 + bl sub_0206BDF4 + movs r6, r0 + beq _0206B510 + ldrsh r0, [r6] + bl sub_0201F324 + ldrsh r2, [r0, #0x1a] + mov r1, r6 + add r2, r2, r2, lsr #31 + mov r2, r2, asr #1 + strh r2, [r0, #8] + ldrsh r2, [r0, #0x1c] + add r2, r2, r2, lsr #31 + mov r2, r2, asr #1 + strh r2, [r0, #0xa] + mov r2, #0x800 + strh r2, [r0, #0x10] + strh r2, [r0, #0x12] + ldr r0, _0206B9C8 ; =sub_0206BFA8 + bl ov10_022C2450 + mov r0, #0x8000 + str r0, [r6, #0x30] + mov r0, #0x6000 + str r0, [r6, #0x34] + mov r0, #0 + str r0, [r6, #0x24] + str sl, [r6, #0x20] + ldr r0, [sp, #0x14] + str fp, [r6, #0x38] + str r0, [r6, #0x3c] +_0206B510: + cmp r6, #0 + beq _0206B524 + add r5, r5, #1 +_0206B51C: + cmp r5, r4 + blt _0206B408 +_0206B524: + bl Rand16Bit + add r2, sb, #0x1000 + mov r1, r0, lsr #0x1f + rsb r0, r1, r0, lsl #29 + ldr r3, [r2, #0xbe8] + add r0, r1, r0, ror #29 + add r0, r3, r0 + str r0, [r2, #0xbec] + mov r0, #0 + str r0, [r2, #0xbe0] +_0206B54C: + add r0, sb, #0x1000 + ldr r1, [r0, #0xbe4] + add r1, r1, #1 + str r1, [r0, #0xbe4] + ldr r0, [r0, #0xbf0] + cmp r1, r0 + ble _0206B670 + bl Rand16Bit + ldr r1, _0206B9CC ; =0x00000FFF + mov r4, #0 + and r0, r0, r1 + mov r5, r0, lsl #0x10 + sub fp, r1, #0xe00 +_0206B580: + bl Rand16Bit + ldr r1, [r7] + ldr r1, [r1] + ldr r1, [r1, #4] + sub r1, r1, #1 + bl _s32_div_f + add r0, r1, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 + bl Rand16Bit + mov r1, #0xd0 + bl _s32_div_f + add sl, r1, #0x10 + bl Rand16Bit + str sl, [sp] + and sl, r0, fp + str r6, [sp, #4] + mov r1, #0 + str r1, [sp, #8] + mov r0, sb + mov r1, r7 + mov r2, #0x8000 + mov r3, #0x6000 + bl sub_0206BDF4 + movs r6, r0 + beq _0206B658 + ldrsh r0, [r6] + bl sub_0201F324 + mov r1, #0 + strh r1, [r0, #0x12] + mov r2, r1 + ldr r1, _0206B9D0 ; =0x00005555 + strh r2, [r0, #0x10] + mul r1, r4, r1 + add r0, r1, r5, lsr #16 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [r6, #0x20] + mov r0, r4, lsl #1 + str r0, [r6, #0x40] + ldr r0, [r6, #0x20] + bl CosAbs4096 + add r1, sl, #0x300 + bl MultiplyByFixedPoint + str r0, [r6, #0x18] + ldr r0, [r6, #0x20] + bl SinAbs4096 + add r1, sl, #0x300 + rsb r0, r0, #0 + bl MultiplyByFixedPoint + str r0, [r6, #0x1c] + ldr r0, _0206B9D4 ; =sub_0206BEAC + mov r1, r6 + bl ov10_022C2450 +_0206B658: + add r4, r4, #1 + cmp r4, #3 + blt _0206B580 + add r0, sb, #0x1000 + mov r1, #0 + str r1, [r0, #0xbe4] +_0206B670: + mov r4, #0 + b _0206B990 +_0206B678: + cmp r0, #2 + bne _0206B990 + ldr r5, [r8, #0x24] + ldr r0, [r5, #0xc] + cmp r0, #0 + beq _0206B6A4 + cmp r0, #1 + beq _0206B838 + cmp r0, #2 + beq _0206B984 + b _0206B98C +_0206B6A4: + ldr r0, _0206B9D8 ; =_020A9E80 + add r4, sp, #0x3c + ldmia r0, {r0, r1, r2, r3} + stmia r4, {r0, r1, r2, r3} + ldr r0, [r5, #0x2d8] + mov r6, #0 + str r0, [sp, #0x20] + mov r0, #0x14000 + rsb r0, r0, #0 + str r0, [sp, #0x30] + mov r0, r0, asr #0x11 + str r0, [sp, #0x38] + b _0206B810 +_0206B6D8: + add r0, sp, #0x3c + ldr r0, [r0, r6, lsl #2] + tst r6, #1 + mov r0, r0, lsl #8 + add r0, r0, #0x800 + movne sb, #0x2000 + moveq sb, #0 + str r0, [sp, #0x24] + cmp r6, #2 + movlt r0, #1 + movge r0, #0 + ands r4, r0, #0xff + ldreq r0, [sp, #0x38] + ldr r1, _0206B9BC ; =_020B0B4C + muleq r0, sb, r0 + moveq sb, r0 + cmp r4, #0 + ldrne sl, [sp, #0x30] + ldr r1, [r1, #4] + moveq sl, #0x14000 + rsb r0, sl, #0 + bl _s32_div_f + str r0, [sp, #0x28] + mov r0, #0x58 + mul r7, r6, r0 + mov r0, r6, lsl #0x10 + mov r1, r0, asr #0x10 + ldr fp, [r5] + ldr r0, [sp, #0x28] + ldr r3, [sp, #0x24] + str r0, [sp] + mov r0, #0 + str r0, [sp, #4] + mov r0, #0xe0 + str r0, [sp, #8] + str r1, [sp, #0xc] + mov r0, #1 + str r0, [sp, #0x10] + ldr r1, [sp, #0x20] + add r0, fp, r7 + add r2, sl, sb + bl sub_0206BC3C + ldrsh r0, [fp, r7] + bl sub_0201F324 + ldrsh r1, [r0, #0x1c] + cmp r1, #0x28 + moveq r3, #3 + beq _0206B7A4 + cmp r1, #0x20 + moveq r3, #2 + movne r3, #1 +_0206B7A4: + cmp r4, #0 + movne r0, #0x10000 + moveq r0, #0 + add r0, sl, r0 + add r2, r0, sb + ldr r4, [r5, #4] + ldr r0, [sp, #0x28] + add r1, r1, r1, lsr #31 + str r0, [sp] + mov r0, r3, lsl #0x10 + mov sb, r0, asr #0x10 + ldr r0, [sp, #0x24] + mov r1, r1, asr #1 + add r3, r0, r1, lsl #8 + mov r0, #0 + str r0, [sp, #4] + mov r0, #0x70 + str r0, [sp, #8] + str sb, [sp, #0xc] + mov r0, #0 + str r0, [sp, #0x10] + ldr r1, [sp, #0x20] + add r0, r4, r7 + bl sub_0206BD04 + ldrsh r0, [r4, r7] + bl sub_0201F324 + add r6, r6, #1 +_0206B810: + ldr r0, [r5, #0x2d4] + cmp r6, r0 + blt _0206B6D8 + ldr r0, _0206B9BC ; =_020B0B4C + ldr r0, [r0, #4] + str r0, [r5, #8] + ldr r0, [r5, #0xc] + add r0, r0, #1 + str r0, [r5, #0xc] + b _0206B98C +_0206B838: + mov sb, #0 + mov r6, #1 + mov fp, sb + b _0206B95C +_0206B848: + mov r0, #0x58 + mul sl, sb, r0 + ldr r0, [r5] + add r4, r0, sl + ldr r0, [r4, #4] + cmp r0, #0 + bne _0206B8F8 + ldr r1, [r4, #8] + ldr r0, [r4, #0x18] + add r0, r1, r0 + str r0, [r4, #8] + ldr r1, [r4, #0xc] + ldr r0, [r4, #0x1c] + add r0, r1, r0 + str r0, [r4, #0xc] + ldr r1, [r4, #0x18] + cmp r1, #0 + ble _0206B8A0 + ldr r0, [r4, #8] + cmp r0, #0 + stmgeib r4, {r6, fp} + bge _0206B8C0 +_0206B8A0: + cmp r1, #0 + bge _0206B8C0 + ldr r0, [r4, #8] + cmp r0, #0 + movle r0, #0 + strle r0, [r4, #8] + movle r0, #1 + strle r0, [r4, #4] +_0206B8C0: + ldrsh r0, [r4] + bl sub_0201F324 + ldr r2, [r4, #8] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0] + ldrsh r0, [r4] + bl sub_0201F324 + ldr r2, [r4, #0xc] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0, #2] +_0206B8F8: + ldr r4, [r5, #4] + add r7, r4, sl + ldr r1, [r7, #8] + ldr r0, [r7, #0x18] + add r0, r1, r0 + str r0, [r7, #8] + ldr r1, [r7, #0xc] + ldr r0, [r7, #0x1c] + add r0, r1, r0 + str r0, [r7, #0xc] + ldrsh r0, [r4, sl] + bl sub_0201F324 + ldr r2, [r7, #8] + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0] + ldrsh r0, [r4, sl] + bl sub_0201F324 + ldr r2, [r7, #0xc] + add sb, sb, #1 + mov r1, r2, asr #7 + add r1, r2, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r0, #2] +_0206B95C: + ldr r0, [r5, #0x2d4] + cmp sb, r0 + blt _0206B848 + ldr r0, [r5, #4] + ldr r0, [r0, #8] + cmp r0, #0x11000 + ldrgt r0, [r5, #0xc] + addgt r0, r0, #1 + strgt r0, [r5, #0xc] + b _0206B98C +_0206B984: + mov r4, #1 + b _0206B990 +_0206B98C: + mov r4, #0 +_0206B990: + cmp r4, #0 + movne r0, #1 + strneb r0, [r8, #0x31] +_0206B99C: + ldr r0, _0206B9BC ; =_020B0B4C + ldr r1, [r0, #8] + ldr r0, [r1, #0x3c] + add r0, r0, #1 + str r0, [r1, #0x3c] +_0206B9B0: + mov r0, #1 +_0206B9B4: + add sp, sp, #0x4c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_0206B9BC: .word _020B0B4C +_0206B9C0: .word _020A9EE0 +_0206B9C4: .word 0x000001FF +_0206B9C8: .word sub_0206BFA8 +_0206B9CC: .word 0x00000FFF +_0206B9D0: .word 0x00005555 +_0206B9D4: .word sub_0206BEAC +_0206B9D8: .word _020A9E80 + arm_func_end sub_0206ADB8 + + arm_func_start sub_0206B9DC +sub_0206B9DC: ; 0x0206B9DC + stmdb sp!, {r4, r5, r6, lr} + ldr r0, _0206BA58 ; =_020B0B4C + ldr r1, [r0, #8] + cmp r1, #0 + moveq r0, #0 + ldmeqia sp!, {r4, r5, r6, pc} + ldrb r0, [r1, #0x30] + cmp r0, #0 + bne _0206BA50 + ldr r0, [r1, #0x2c] + cmp r0, #0 + beq _0206BA14 + cmp r0, #1 + b _0206BA50 +_0206BA14: + ldr r1, [r1, #0x28] + cmp r1, #0 + addne r0, r1, #0x1000 + ldrneb r0, [r0, #0xf60] + cmpne r0, #0 + beq _0206BA50 + add r0, r1, #0x3f8 + mov r6, #0 + add r5, r0, #0x1800 + mov r4, #0x7c +_0206BA3C: + mla r0, r6, r4, r5 + bl sub_0201CF5C + add r6, r6, #1 + cmp r6, #7 + blt _0206BA3C +_0206BA50: + mov r0, #1 + ldmia sp!, {r4, r5, r6, pc} + .align 2, 0 +_0206BA58: .word _020B0B4C + arm_func_end sub_0206B9DC + + arm_func_start sub_0206BA5C +sub_0206BA5C: ; 0x0206BA5C + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r0, _0206BB8C ; =_020B0B4C + ldr r0, [r0, #8] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + bl ov10_022C23B0 + ldr r0, _0206BB8C ; =_020B0B4C + ldr r5, [r0, #8] + cmp r5, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + ldr r7, [r5, #0x24] + cmp r7, #0 + beq _0206BAE8 + mov r6, #0 + mov r4, #0x58 + b _0206BABC +_0206BA9C: + mul r8, r6, r4 + ldr r0, [r7] + add r0, r0, r8 + bl sub_0206BB94 + ldr r0, [r7, #4] + add r0, r0, r8 + bl sub_0206BB94 + add r6, r6, #1 +_0206BABC: + ldr r0, [r7, #0x2d4] + cmp r6, r0 + blt _0206BA9C + ldr r0, [r7] + bl MemFree + ldr r0, [r7, #4] + bl MemFree + ldr r0, [r5, #0x24] + bl MemFree + mov r0, #0 + str r0, [r5, #0x24] +_0206BAE8: + ldr r0, _0206BB8C ; =_020B0B4C + ldr r5, [r0, #8] + ldr r0, [r5, #0x28] + cmp r0, #0 + beq _0206BB3C + mov r6, #0 + mov r4, #0x58 +_0206BB04: + ldr r0, [r5, #0x28] + mla r0, r6, r4, r0 + bl sub_0206BB94 + add r6, r6, #1 + cmp r6, #0x50 + blt _0206BB04 + ldr r0, [r5, #0x28] + add r0, r0, #0x384 + add r0, r0, #0x1800 + bl sub_0206BB94 + ldr r0, [r5, #0x28] + bl MemFree + mov r0, #0 + str r0, [r5, #0x28] +_0206BB3C: + ldr r0, _0206BB8C ; =_020B0B4C + ldr r4, [r0, #8] + add r0, r4, #0x14 + bl sub_0201E020 + add r0, r4, #4 + bl sub_0201E020 + add r0, r4, #0xc + bl sub_0201E020 + ldr r0, _0206BB90 ; =WAN_TABLE + ldrsh r1, [r4, #0x1c] + ldr r0, [r0] + bl DeleteWanTableEntryVeneer + ldr r0, _0206BB8C ; =_020B0B4C + ldr r0, [r0, #8] + bl MemFree + ldr r0, _0206BB8C ; =_020B0B4C + mov r1, #0 + str r1, [r0, #8] + bl sub_0201F248 + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_0206BB8C: .word _020B0B4C +_0206BB90: .word WAN_TABLE + arm_func_end sub_0206BA5C + + arm_func_start sub_0206BB94 +sub_0206BB94: ; 0x0206BB94 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrsh r1, [r4] + mvn r0, #0 + cmp r1, r0 + ldmeqia sp!, {r4, pc} + cmp r1, #0 + bne _0206BBBC + ldr r0, _0206BBDC ; =_020A9F98 + bl Debug_Print0 +_0206BBBC: + ldrsh r0, [r4] + bl sub_0201F2AC + mov r0, r4 + mov r1, #0x58 + bl MemZero + mvn r0, #0 + strh r0, [r4] + ldmia sp!, {r4, pc} + .align 2, 0 +_0206BBDC: .word _020A9F98 + arm_func_end sub_0206BB94 + + arm_func_start sub_0206BBE0 +sub_0206BBE0: ; 0x0206BBE0 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r0, #0x2dc + mov r1, #6 + bl MemAlloc + mov r1, #0x2dc + mov r4, r0 + bl MemZero + mov r0, #0x58 + mul r5, r6, r0 + mov r0, r5 + str r7, [r4, #0x2d8] + mov r1, #6 + bl MemAlloc + str r0, [r4] + mov r0, r5 + mov r1, #6 + bl MemAlloc + str r0, [r4, #4] + mov r0, r4 + str r6, [r4, #0x2d4] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_0206BBE0 + + arm_func_start sub_0206BC3C +sub_0206BC3C: ; 0x0206BC3C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + mov r4, r1 + mov r1, #0x58 + mov r5, r0 + mov r7, r2 + mov r6, r3 + bl MemZero + mvn r0, #0 + strh r0, [r5] + bl sub_0201F36C + strh r0, [r5] + ldrsh r1, [r5] + mvn r0, #0 + cmp r1, r0 + beq _0206BCF8 + str r7, [r5, #8] + ldr r1, [sp, #0x20] + str r6, [r5, #0xc] + ldr r0, [sp, #0x24] + str r1, [r5, #0x18] + str r0, [r5, #0x1c] + ldrsh r0, [r5] + bl sub_0201F324 + mov r1, #0 + ldr r2, [sp, #0x28] + strb r1, [r0, #0x3c] + strh r2, [r0, #0x2a] + ldr ip, [r5, #8] + ldrsh r3, [sp, #0x30] + mov r2, ip, asr #7 + add r2, ip, r2, lsr #24 + mov r2, r2, asr #8 + strh r2, [r0] + ldr r5, [r5, #0xc] + mov r3, r3, lsl #0x14 + mov r2, r5, asr #7 + add r2, r5, r2, lsr #24 + mov r2, r2, asr #8 + strh r2, [r0, #2] + str r1, [sp] + mov r1, r3, asr #0x10 + str r1, [sp, #4] + ldrsh r2, [sp, #0x2c] + ldr r1, [r4, #0x10] + ldr r3, [r4, #0x14] + bl sub_0201E7D8 +_0206BCF8: + mov r0, #0 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_0206BC3C + + arm_func_start sub_0206BD04 +sub_0206BD04: ; 0x0206BD04 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + sub sp, sp, #8 + mov r5, r1 + mov r1, #0x58 + mov r6, r0 + mov r7, r2 + mov r4, r3 + bl MemZero + mvn r0, #0 + strh r0, [r6] + bl sub_0201F36C + strh r0, [r6] + ldrsh r1, [r6] + mvn r0, #0 + cmp r1, r0 + moveq r0, #0 + beq _0206BDEC + str r7, [r6, #8] + ldr r1, [sp, #0x20] + str r4, [r6, #0xc] + ldr r0, [sp, #0x24] + str r1, [r6, #0x18] + str r0, [r6, #0x1c] + ldrsh r0, [r6] + bl sub_0201F324 + mov r4, r0 + mov r2, #0 + strb r2, [r4, #0x3c] + ldr r1, [sp, #0x28] + ldrsh r2, [sp, #0x30] + strh r1, [r4, #0x2a] + ldr r3, [r6, #8] + mov r2, r2, lsl #0x14 + mov r1, r3, asr #7 + add r1, r3, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r4] + ldr r3, [r6, #0xc] + mov r1, r3, asr #7 + add r1, r3, r1, lsr #24 + mov r1, r1, asr #8 + strh r1, [r4, #2] + mov r1, #1 + str r1, [sp] + mov r1, r2, asr #0x10 + str r1, [sp, #4] + ldrsh r2, [sp, #0x2c] + ldmia r5, {r1, r3} + bl sub_0201E7D8 + ldrsh r1, [r4, #0x1a] + mov r0, #1 + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + strh r1, [r4, #8] + ldrsh r1, [r4, #0x1c] + add r1, r1, r1, lsr #31 + mov r1, r1, asr #1 + strh r1, [r4, #0xa] +_0206BDEC: + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_0206BD04 + + arm_func_start sub_0206BDF4 +sub_0206BDF4: ; 0x0206BDF4 + stmdb sp!, {r3, r4, r5, r6, r7, r8, lr} + sub sp, sp, #0x14 + mov ip, #0 + mov r4, r0 + mov r8, ip + mov r0, ip + mov r5, #0x58 + mvn r6, #0 + b _0206BE48 +_0206BE18: + cmp ip, #0x50 + movge ip, r0 + mul r7, ip, r5 + ldrsh r7, [r4, r7] + cmp r7, r6 + beq _0206BE54 + add r7, r8, #1 + add lr, ip, #1 + mov ip, r7, lsl #0x10 + mov lr, lr, lsl #0x10 + mov r8, ip, asr #0x10 + mov ip, lr, asr #0x10 +_0206BE48: + cmp r8, #0x50 + blt _0206BE18 + mvn ip, #0 +_0206BE54: + cmp ip, #0 + movlt r0, #0 + blt _0206BEA4 + mov r0, #0x58 + mla r6, ip, r0, r4 + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + ldr r5, [sp, #0x30] + ldrsh r0, [sp, #0x34] + str r5, [sp, #8] + ldrsh r5, [sp, #0x38] + str r0, [sp, #0xc] + mov r0, r6 + str r5, [sp, #0x10] + bl sub_0206BD04 + cmp r0, #0 + moveq r0, #0 + movne r0, r6 + strne r4, [r6, #0x54] +_0206BEA4: + add sp, sp, #0x14 + ldmia sp!, {r3, r4, r5, r6, r7, r8, pc} + arm_func_end sub_0206BDF4 + + arm_func_start sub_0206BEAC +sub_0206BEAC: ; 0x0206BEAC + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + ldr r4, [r6, #4] + ldrsh r0, [r4] + bl sub_0201F324 + ldr r1, [r4, #0x40] + mov r5, r0 + cmp r1, #0 + ble _0206BEEC + ldrsh r0, [r4] + mov r1, #0 + bl sub_0201F348 + ldr r0, [r4, #0x40] + sub r0, r0, #1 + str r0, [r4, #0x40] + ldmia sp!, {r4, r5, r6, pc} +_0206BEEC: + ldrh r0, [r5, #0x10] + cmp r0, #0x1000 + beq _0206BF10 + add r0, r0, #0x100 + cmp r0, #0x1000 + movge r0, #0x1000 + strh r0, [r5, #0x12] + ldrh r0, [r5, #0x12] + strh r0, [r5, #0x10] +_0206BF10: + ldrsh r0, [r4] + mov r1, #1 + bl sub_0201F348 + ldr r2, [r4, #8] + ldr r1, [r4, #0x18] + mvn r0, #0x3f + add r1, r2, r1 + str r1, [r4, #8] + ldr r2, [r4, #0xc] + ldr r1, [r4, #0x1c] + add r1, r2, r1 + str r1, [r4, #0xc] + ldrsh r1, [r5] + cmp r1, r0 + blt _0206BF68 + cmp r1, #0x140 + bgt _0206BF68 + ldrsh r1, [r5, #2] + cmp r1, r0 + blt _0206BF68 + cmp r1, #0x100 + ble _0206BF7C +_0206BF68: + mov r0, r4 + bl sub_0206BB94 + mov r0, r6 + bl ov10_022C24DC + ldmia sp!, {r4, r5, r6, pc} +_0206BF7C: + ldr r1, [r4, #8] + mov r0, r1, asr #7 + add r0, r1, r0, lsr #24 + mov r0, r0, asr #8 + strh r0, [r5] + ldr r1, [r4, #0xc] + mov r0, r1, asr #7 + add r0, r1, r0, lsr #24 + mov r0, r0, asr #8 + strh r0, [r5, #2] + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_0206BEAC + + arm_func_start sub_0206BFA8 +sub_0206BFA8: ; 0x0206BFA8 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r6, r0 + ldr r4, [r6, #4] + ldrsh r0, [r4] + bl sub_0201F324 + mov r5, r0 + ldr r0, [r4, #0x20] + bl CosAbs4096 + ldr r1, [r4, #0x24] + bl MultiplyByFixedPoint + ldr r1, [r4, #0x30] + add r7, r1, r0 + ldr r0, [r4, #0x20] + bl SinAbs4096 + ldr r1, [r4, #0x24] + rsb r0, r0, #0 + bl MultiplyByFixedPoint + ldr r2, [r4, #0x34] + ldr r1, _0206C0D4 ; =0x00000FFF + add r0, r2, r0 + str r7, [r4, #8] + str r0, [r4, #0xc] + ldr r2, [r4, #0x20] + ldr r0, [r4, #0x38] + add r2, r2, r0 + and r0, r2, r1 + str r0, [r4, #0x20] + ldr r1, [r4, #0x24] + ldr r0, [r4, #0x3c] + add r0, r1, r0 + str r0, [r4, #0x24] + ldrh r0, [r5, #0x10] + cmp r0, #0x1000 + addlo r0, r0, #0x80 + strloh r0, [r5, #0x10] + ldrloh r0, [r5, #0x12] + addlo r0, r0, #0x80 + strloh r0, [r5, #0x12] + ldr r1, [r4, #0x3c] + mvn r0, #0x3f + add r1, r1, #8 + str r1, [r4, #0x3c] + ldrsh r1, [r5] + cmp r1, r0 + blt _0206C078 + cmp r1, #0x140 + bgt _0206C078 + ldrsh r1, [r5, #2] + cmp r1, r0 + blt _0206C078 + cmp r1, #0x140 + ble _0206C08C +_0206C078: + mov r0, r4 + bl sub_0206BB94 + mov r0, r6 + bl ov10_022C24DC + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_0206C08C: + ldr r0, [r4, #0x38] + cmp r0, #0 + ldr r0, [r4, #0x20] + movlt r0, r0, lsl #4 + movge r0, r0, lsl #4 + rsbge r0, r0, #0x10000 + strh r0, [r5, #0x28] + ldr r1, [r4, #8] + mov r0, r1, asr #7 + add r0, r1, r0, lsr #24 + mov r0, r0, asr #8 + strh r0, [r5] + ldr r1, [r4, #0xc] + mov r0, r1, asr #7 + add r0, r1, r0, lsr #24 + mov r0, r0, asr #8 + strh r0, [r5, #2] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_0206C0D4: .word 0x00000FFF + arm_func_end sub_0206BFA8 + + arm_func_start sub_0206C0D8 +sub_0206C0D8: ; 0x0206C0D8 + ldr r1, _0206C0E8 ; =_020B0B6C + ldrsh r1, [r1] + strh r1, [r0] + bx lr + .align 2, 0 +_0206C0E8: .word _020B0B6C + arm_func_end sub_0206C0D8 + + arm_func_start sub_0206C0EC +sub_0206C0EC: ; 0x0206C0EC + ldr r1, _0206C0F8 ; =_020B0B6C + strh r0, [r1] + bx lr + .align 2, 0 +_0206C0F8: .word _020B0B6C + arm_func_end sub_0206C0EC + + arm_func_start sub_0206C0FC +sub_0206C0FC: ; 0x0206C0FC + ldr r1, _0206C10C ; =_020B0B70 + ldrsh r1, [r1, #2] + strh r1, [r0] + bx lr + .align 2, 0 +_0206C10C: .word _020B0B70 + arm_func_end sub_0206C0FC + + arm_func_start sub_0206C110 +sub_0206C110: ; 0x0206C110 + ldr r1, _0206C11C ; =_020B0B70 + strh r0, [r1, #2] + bx lr + .align 2, 0 +_0206C11C: .word _020B0B70 + arm_func_end sub_0206C110 + + arm_func_start sub_0206C120 +sub_0206C120: ; 0x0206C120 + ldr r1, _0206C130 ; =_020B0B70 + ldrsh r1, [r1] + strh r1, [r0] + bx lr + .align 2, 0 +_0206C130: .word _020B0B70 + arm_func_end sub_0206C120 + + arm_func_start sub_0206C134 +sub_0206C134: ; 0x0206C134 + ldr r1, _0206C140 ; =_020B0B70 + strh r0, [r1] + bx lr + .align 2, 0 +_0206C140: .word _020B0B70 + arm_func_end sub_0206C134 + + arm_func_start sub_0206C144 +sub_0206C144: ; 0x0206C144 + ldr r3, _0206C160 ; =_020B0B74 + mov r2, #8 +_0206C14C: + ldrb r1, [r3], #1 + subs r2, r2, #1 + strb r1, [r0], #1 + bne _0206C14C + bx lr + .align 2, 0 +_0206C160: .word _020B0B74 + arm_func_end sub_0206C144 + + arm_func_start sub_0206C164 +sub_0206C164: ; 0x0206C164 + ldr r3, _0206C180 ; =_020B0B74 + mov r2, #8 +_0206C16C: + ldrb r1, [r0], #1 + subs r2, r2, #1 + strb r1, [r3], #1 + bne _0206C16C + bx lr + .align 2, 0 +_0206C180: .word _020B0B74 + arm_func_end sub_0206C164 + + arm_func_start sub_0206C184 +sub_0206C184: ; 0x0206C184 + ldr ip, _0206C198 ; =sub_0207A7EC + mov r0, #0 + mov r2, r1 + sub r1, r0, #1 + bx ip + .align 2, 0 +_0206C198: .word sub_0207A7EC + arm_func_end sub_0206C184 + + arm_func_start sub_0206C19C +sub_0206C19C: ; 0x0206C19C + stmdb sp!, {r4, lr} + mov r4, r1 + mov r0, #0 + mov r2, r4 + sub r1, r0, #1 + bl sub_0207A8F4 + mov r0, r4 + ldmia sp!, {r4, pc} + arm_func_end sub_0206C19C + + arm_func_start sub_0206C1BC +sub_0206C1BC: ; 0x0206C1BC + bx lr + arm_func_end sub_0206C1BC + + arm_func_start DseDriver_LoadDefaultSettings +DseDriver_LoadDefaultSettings: ; 0x0206C1C0 + stmdb sp!, {r4, lr} + ldr r1, _0206C248 ; =DRIVER_WORK + mov r2, #1 + movs r4, r0 + strb r2, [r1, #0x3d] + subeq r0, r2, #0x100 + ldmeqia sp!, {r4, pc} + mov r1, #0x40 + bl DseMem_Clear + mov r0, #0 + str r0, [r4, #4] + str r0, [r4, #8] + str r0, [r4, #0xc] + mov r1, #8 + strb r1, [r4, #0x10] + strb r0, [r4, #0x11] + strh r0, [r4, #0x14] + mov r1, #0xf + strh r1, [r4, #0x16] + mov r1, #0x14 + strb r1, [r4, #0x12] + mov r1, #4 + strh r1, [r4, #0x18] + ldr r2, _0206C24C ; =_0206C184 + strh r1, [r4, #0x1a] + ldr r1, _0206C250 ; =_0206C19C + str r2, [r4, #0x1c] + str r1, [r4, #0x20] + ldr r1, _0206C254 ; =sub_0206C1BC + str r0, [r4, #0x24] + str r1, [r4, #0x28] + str r1, [r4, #0x2c] + str r0, [r4, #0x30] + ldmia sp!, {r4, pc} + .align 2, 0 +_0206C248: .word DRIVER_WORK +_0206C24C: .word sub_0206C184 +_0206C250: .word sub_0206C19C +_0206C254: .word sub_0206C1BC + arm_func_end DseDriver_LoadDefaultSettings + + arm_func_start DseDriver_IsSettingsValid +DseDriver_IsSettingsValid: ; 0x0206C258 + stmdb sp!, {r3, r4, r5, lr} + movs r4, r0 + bne _0206C27C + mov r1, #0 + mov r2, r1 + mvn r0, #0x17 + bl Dse_SetError + mov r0, #2 + ldmia sp!, {r3, r4, r5, pc} +_0206C27C: + tst r4, #3 + beq _0206C29C + mov r1, #0 + mov r2, r1 + mvn r0, #0x17 + bl Dse_SetError + mov r0, #2 + ldmia sp!, {r3, r4, r5, pc} +_0206C29C: + ldr r0, [r4, #8] + mov r5, #0 + cmp r0, #0 + beq _0206C2B4 + tst r0, #0xf + beq _0206C2B8 +_0206C2B4: + orr r5, r5, #4 +_0206C2B8: + ldr r0, [r4, #0xc] + cmp r0, #0 + beq _0206C2CC + tst r0, #0xf + beq _0206C2D0 +_0206C2CC: + orr r5, r5, #8 +_0206C2D0: + ldrb r0, [r4, #0x11] + ldrb r1, [r4, #0x10] + cmp r0, #0 + cmpne r0, #1 + orrne r5, r5, #0x100 + cmp r1, #4 + ldrb r0, [r4, #0x12] + orrlo r5, r5, #0x200 + cmp r0, r1 + ldrsh r1, [r4, #0x14] + orrls r5, r5, #0x400 + ldrsh r0, [r4, #0x16] + cmp r1, #0 + orrne r5, r5, #0x4000 + cmp r0, #0x10 + orrge r5, r5, #0x8000 + cmp r1, r0 + orrgt r5, r5, #0xc000 + cmp r5, #0 + beq _0206C330 + mov r1, r5 + mvn r0, #0x17 + mov r2, #0 + bl Dse_SetError +_0206C330: + mov r0, r5 + str r5, [r4] + ldmia sp!, {r3, r4, r5, pc} + arm_func_end DseDriver_IsSettingsValid + + arm_func_start DseDriver_ConfigureHeap +DseDriver_ConfigureHeap: ; 0x0206C33C + stmdb sp!, {r3, lr} + cmp r0, #0 + strne r1, [r0, #8] + strne r2, [r0, #0xc] + movne r0, #0 + ldmneia sp!, {r3, pc} + mov r1, #0 + mov r2, r1 + mvn r0, #0x17 + bl Dse_SetError + mvn r0, #0x17 + ldmia sp!, {r3, pc} + arm_func_end DseDriver_ConfigureHeap + + arm_func_start sub_0206C36C +sub_0206C36C: ; 0x0206C36C + stmdb sp!, {r3, lr} + cmp r0, #0 + strneb r1, [r0, #0x11] + strneb r2, [r0, #0x10] + movne r0, #0 + ldmneia sp!, {r3, pc} + mov r1, #0 + mov r2, r1 + mvn r0, #0x17 + bl Dse_SetError + mvn r0, #0x17 + ldmia sp!, {r3, pc} + arm_func_end sub_0206C36C + + arm_func_start sub_0206C39C +sub_0206C39C: ; 0x0206C39C + stmdb sp!, {r3, lr} + cmp r0, #0 + bne _0206C3C0 + mov r1, #0 + mov r2, r1 + mvn r0, #0x17 + bl Dse_SetError + mvn r0, #0x17 + ldmia sp!, {r3, pc} +_0206C3C0: + cmp r1, #0 + movlt r1, #0 + cmp r2, #0 + strh r1, [r0, #0x14] + movlt r2, #0xf + strh r2, [r0, #0x16] + mov r0, #0 + ldmia sp!, {r3, pc} + arm_func_end sub_0206C39C + + arm_func_start DseDriver_Init +DseDriver_Init: ; 0x0206C3E0 + stmdb sp!, {r4, lr} + ldr r1, _0206C5F8 ; =DRIVER_WORK + mov r4, r0 + ldrsb r1, [r1] + cmp r1, #1 + bne _0206C410 + mov r1, #0 + mov r2, r1 + mvn r0, #0xbf + bl Dse_SetError + mvn r0, #0xbf + ldmia sp!, {r4, pc} +_0206C410: + bl DseDriver_IsSettingsValid + movs r1, r0 + beq _0206C430 + mvn r0, #0x1d + mov r2, #0 + bl Dse_SetError + mvn r0, #0x1d + ldmia sp!, {r4, pc} +_0206C430: + bl sub_0207AD54 + mov r0, #0 + mov r1, r0 + bl sub_0207AEF4 + bl sub_0207AFF0 + ldr r0, _0206C5F8 ; =DRIVER_WORK + mov r3, #0 + strh r3, [r0, #2] + str r3, [r0, #4] + str r3, [r0, #0x10] + mov r2, #0xff + mov r1, #1 + strb r2, [r0, #0x3c] + strb r1, [r0, #0x3d] + rsb r1, r1, #0x1000 + strh r1, [r0, #0x3e] + str r3, [r0, #0x2c] + ldrb r1, [r4, #0x11] + cmp r1, #0 + ldreq r2, _0206C5FC ; =0x00002710 + moveq r1, #0x64 + ldrne r2, _0206C600 ; =0x0000414B + movne r1, #0x3c + strh r2, [r0, #0x28] + str r1, [r0, #0x30] + ldr r2, _0206C604 ; =0x00BC614E + ldr r1, _0206C5F8 ; =DRIVER_WORK + ldr r0, _0206C608 ; =_022B8330 + str r2, [r1, #0x34] + ldrb r1, [r4, #0x11] + strb r1, [r0, #0xdd8] + bl sub_0206C814 + ldr r1, _0206C5F8 ; =DRIVER_WORK + mov r0, #1 + strb r0, [r1, #0x38] + mov r3, #2 + ldr r2, _0206C60C ; =_020B1290 + ldr r0, _0206C608 ; =_022B8330 + strb r3, [r1, #0x39] + str r2, [r0, #0xed4] + mov r2, #0 + str r2, [r1, #0x71c] + str r2, [r1, #0x720] + str r2, [r1, #0x724] + str r2, [r1, #0x728] + ldrb r1, [r4, #0x10] + ldr ip, _0206C610 ; =DRIVER_WORK + mov r3, r2 + strb r1, [r0, #0xd10] +_0206C4F4: + add r2, r2, #1 + strb r3, [ip, #0x674] + cmp r2, #0x80 + add ip, ip, #1 + blt _0206C4F4 + ldr ip, _0206C5F8 ; =DRIVER_WORK + mov r0, #0x64 + strb r0, [ip, #0x67b] + mov r0, #0x7f + strb r0, [ip, #0x67f] + mov r0, #0x40 + strb r0, [ip, #0x67e] + add r0, r4, #0x28 + ldr lr, _0206C614 ; =_022B734C + ldmia r0, {r0, r1, r2} + stmia lr, {r0, r1, r2} + ldrsh ip, [ip, #0x28] + ldr r1, _0206C608 ; =_022B8330 + mov r2, #1 + str r3, [r1, #0xec8] + str r2, [r1, #0xecc] + str r3, [r1, #0xebc] + ldr r0, _0206C618 ; =_022B9130 + str r3, [r1, #0xec0] + sub r2, r2, #2 + strh r2, [r0, #0xc4] + strh ip, [r0, #0xc6] + strb r3, [r1, #0xed0] + ldr r0, [r4, #8] + ldr r1, [r4, #0xc] + add r2, r4, #0x1c + bl DseMem_Init + ldrsh r0, [r4, #0x16] + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, asr #0x10 + bl DseVoice_ResetHW + bl DseVoice_ResetAll + bl sub_02070124 + bl sub_02075600 + bl sub_020729A4 + ldr r1, _0206C61C ; =_022B7331 + mov r2, #1 + mov r0, #0x7f +_0206C5A4: + add r2, r2, #1 + strb r0, [r1, #0x40] + cmp r2, #0x10 + add r1, r1, #1 + blt _0206C5A4 + ldr r0, _0206C5F8 ; =DRIVER_WORK + mov r1, #0 + strb r1, [r0, #0x40] + bl DseDriver_StartMainThread + ldrb r0, [r4, #0x12] + bl DseSwd_SysInit + ldr r0, _0206C5F8 ; =DRIVER_WORK + mov r1, #1 + strb r1, [r0] + mov r1, #0 + strb r1, [r0, #1] + ldrh r0, [r4, #0x18] + ldrh r1, [r4, #0x1a] + bl DseSe_SysReset + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0206C5F8: .word DRIVER_WORK +_0206C5FC: .word 0x00002710 +_0206C600: .word 0x0000414B +_0206C604: .word 0x00BC614E +_0206C608: .word _022B8330 +_0206C60C: .word _020B1290 +_0206C610: .word DRIVER_WORK +_0206C614: .word _022B734C +_0206C618: .word _022B9130 +_0206C61C: .word _022B7331 + arm_func_end DseDriver_Init + + arm_func_start sub_0206C620 +sub_0206C620: ; 0x0206C620 + stmdb sp!, {r3, lr} + ldr r0, _0206C684 ; =DRIVER_WORK + ldrsb r0, [r0] + cmp r0, #0 + mvneq r0, #0xc0 + ldmeqia sp!, {r3, pc} + bl DseSwd_SysQuit + mov r0, #0 + bl sub_0206C7F4 + bl sub_020756E8 + bl sub_02070158 + bl sub_02070148 + bl sub_02070EA0 + bl DseVoice_ResetAll + bl DseMem_Quit + bl sub_0206C814 + ldr r1, _0206C684 ; =DRIVER_WORK + mov r0, #0 + strb r0, [r1] + strb r0, [r1, #1] + str r0, [r1, #0x2c] + str r0, [r1, #4] + str r0, [r1, #0x10] + strh r0, [r1, #2] + ldmia sp!, {r3, pc} + .align 2, 0 +_0206C684: .word DRIVER_WORK + arm_func_end sub_0206C620 + + arm_func_start sub_0206C688 +sub_0206C688: ; 0x0206C688 + stmdb sp!, {r3, lr} + ldr r0, _0206C6B8 ; =DRIVER_WORK + ldrsb r1, [r0] + cmp r1, #0 + ldrnesb r0, [r0, #1] + ldmneia sp!, {r3, pc} + mov r1, #0 + mov r2, r1 + mvn r0, #0xc0 + bl Dse_SetError + mvn r0, #0xc0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0206C6B8: .word DRIVER_WORK + arm_func_end sub_0206C688 + + arm_func_start sub_0206C6BC +sub_0206C6BC: ; 0x0206C6BC + stmdb sp!, {r3, lr} + ldr r0, _0206C750 ; =DRIVER_WORK + ldrsb r1, [r0] + cmp r1, #0 + bne _0206C6E8 + mov r1, #0 + mov r2, r1 + mvn r0, #0xc0 + bl Dse_SetError + mvn r0, #0xc0 + ldmia sp!, {r3, pc} +_0206C6E8: + ldrsb r1, [r0, #1] + cmp r1, #1 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + mov r1, #1 + strb r1, [r0, #1] + bl sub_02070F4C + ldr r0, _0206C750 ; =DRIVER_WORK + mov r1, #0 + ldr r0, [r0, #0x664] + bl DseSequence_PauseList + ldr r0, _0206C750 ; =DRIVER_WORK + mov r1, #0 + ldr r0, [r0, #0x668] + bl DseSequence_PauseList + mov r0, #0 + bl sub_0206F6FC + mov r0, #0 + bl sub_02070188 + mov r0, #0 + bl DseVoice_ResetHW + ldr r0, _0206C750 ; =DRIVER_WORK + mov r1, #2 + strb r1, [r0, #0x38] + mov r0, #0 + ldmia sp!, {r3, pc} + .align 2, 0 +_0206C750: .word DRIVER_WORK + arm_func_end sub_0206C6BC + + arm_func_start sub_0206C754 +sub_0206C754: ; 0x0206C754 + stmdb sp!, {r4, lr} + ldr r1, _0206C7F0 ; =DRIVER_WORK + mov r4, r0 + ldrsb r0, [r1, #1] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r4, pc} + mov r2, #1 + strb r2, [r1, #0x38] + ldrh r0, [r1, #0x3e] + mov r1, r4 + tst r0, #0xf + ldr r0, _0206C7F0 ; =DRIVER_WORK + moveq r2, #0 + mov r2, r2, lsl #0x18 + ldr r0, [r0, #0x664] + mov r2, r2, asr #0x18 + bl sub_0206DC78 + ldr r0, _0206C7F0 ; =DRIVER_WORK + ldrh r0, [r0, #0x3e] + tst r0, #0xf0 + movne r1, #1 + ldr r0, _0206C7F0 ; =DRIVER_WORK + moveq r1, #0 + mov r2, r1, lsl #0x18 + ldr r0, [r0, #0x668] + mov r1, r4 + mov r2, r2, asr #0x18 + bl sub_0206DC78 + mov r0, r4 + bl sub_0206F774 + mov r0, r4 + bl sub_020701B0 + ldr r0, _0206C7F0 ; =DRIVER_WORK + mov r1, #0 + strb r1, [r0, #1] + bl DseDriver_StartTickTimer + mov r0, #0 + ldmia sp!, {r4, pc} + .align 2, 0 +_0206C7F0: .word DRIVER_WORK + arm_func_end sub_0206C754 + + arm_func_start sub_0206C7F4 +sub_0206C7F4: ; 0x0206C7F4 + stmdb sp!, {r4, lr} + mov r4, r0 + bl DseBgm_StopAll + mov r0, r4 + bl DseSe_StopAll + mov r0, r4 + bl sub_0206F9A4 + ldmia sp!, {r4, pc} + arm_func_end sub_0206C7F4 + + arm_func_start sub_0206C814 +sub_0206C814: ; 0x0206C814 + ldr r1, _0206C848 ; =DRIVER_WORK + mov r2, #0 + str r2, [r1, #0x654] + str r2, [r1, #0x658] + ldr r0, _0206C84C ; =_022B8330 + str r2, [r1, #0x65c] + str r2, [r0, #0xddc] + str r2, [r1, #0x660] + str r2, [r1, #0x664] + str r2, [r1, #0x668] + ldr ip, _0206C850 ; =DseBgm_SysSetupNoteList + str r2, [r1, #0x66c] + bx ip + .align 2, 0 +_0206C848: .word DRIVER_WORK +_0206C84C: .word _022B8330 +_0206C850: .word DseBgm_SysSetupNoteList + arm_func_end sub_0206C814 + + arm_func_start Dse_SetError +Dse_SetError: ; 0x0206C854 + stmdb sp!, {r3, lr} + ldr r3, _0206C880 ; =DRIVER_WORK + stmib r3, {r0, r1, r2} + ldr ip, [r3, #0x1c] + cmp ip, #0 + ldmeqia sp!, {r3, pc} + mov r1, #0 + ldr r2, _0206C884 ; =_022B7334 + mov r3, r1 + blx ip + ldmia sp!, {r3, pc} + .align 2, 0 +_0206C880: .word DRIVER_WORK +_0206C884: .word _022B7334 + arm_func_end Dse_SetError + + arm_func_start Dse_SetError2 +Dse_SetError2: ; 0x0206C888 + stmdb sp!, {r3, lr} + ldr r3, _0206C8BC ; =DRIVER_WORK + str r0, [r3, #0x10] + str r1, [r3, #0x14] + str r2, [r3, #0x18] + ldr ip, [r3, #0x20] + cmp ip, #0 + ldmeqia sp!, {r3, pc} + mov r1, #0 + ldr r2, _0206C8C0 ; =_022B7340 + mov r3, r1 + blx ip + ldmia sp!, {r3, pc} + .align 2, 0 +_0206C8BC: .word DRIVER_WORK +_0206C8C0: .word _022B7340 + arm_func_end Dse_SetError2 + +; https://decomp.me/scratch/C4osO + arm_func_start DseUtil_ByteSwap32 +DseUtil_ByteSwap32: ; 0x0206C8C4 + mov r3, r0, lsr #0x18 + mov r2, r0, lsr #8 + mov r1, r0, lsl #8 + mov r0, r0, lsl #0x18 + and r3, r3, #0xff + and r2, r2, #0xff00 + orr r2, r3, r2 + and r1, r1, #0xff0000 + orr r1, r2, r1 + and r0, r0, #0xff000000 + orr r0, r1, r0 + bx lr + arm_func_end DseUtil_ByteSwap32 + + arm_func_start DseUtil_GetRandomNumber +DseUtil_GetRandomNumber: ; 0x0206C8F4 + ldr r1, _0206C914 ; =DRIVER_WORK + ldr r0, _0206C918 ; =0x00007FFF + ldr r2, [r1, #0x34] + eor r2, r2, r2, lsl #17 + eor r2, r2, r2, asr #15 + str r2, [r1, #0x34] + and r0, r2, r0 + bx lr + .align 2, 0 +_0206C914: .word DRIVER_WORK +_0206C918: .word 0x00007FFF + arm_func_end DseUtil_GetRandomNumber + +; https://decomp.me/scratch/KrgBG + arm_func_start DseMem_Init +DseMem_Init: ; 0x0206C91C + mov ip, r1 + tst r0, #0xf + bicne r0, r0, #0xf + ldr r1, _0206C980 ; =DRIVER_WORK + addne r0, r0, #0x10 + subne ip, ip, #0x10 + add r3, r0, ip + str r0, [r1, #0x6f4] + str r3, [r1, #0x6f8] + str ip, [r1, #0x6fc] + ldr r3, _0206C984 ; =0x74647373 + mov r1, #0x82 + str r3, [r0] + strb r1, [r0, #4] + mov r3, #0 + strb r3, [r0, #5] + add r1, r0, #0x10 + str r1, [r0, #8] + str r3, [r0, #0xc] + strb r3, [r0, #6] + ldr r3, _0206C988 ; =_022B7A30 + ldmia r2, {r0, r1, r2} + stmia r3, {r0, r1, r2} + mov r0, ip + bx lr + .align 2, 0 +_0206C980: .word DRIVER_WORK +_0206C984: .word 0x74647373 +_0206C988: .word _022B7A30 + arm_func_end DseMem_Init diff --git a/include/dungeon_init.h b/include/dungeon_init.h index cade1e61..b4c3fac3 100644 --- a/include/dungeon_init.h +++ b/include/dungeon_init.h @@ -4,6 +4,12 @@ #include "common.h" #include "util.h" +// Unknown struct used during dungeon initialisation +struct unk { + u8 padding[4]; + u8 unk4; +}; + // Unknown struct included in the dungeon_init struct struct unk_dungeon_init { u8 unk0[232]; @@ -32,7 +38,7 @@ struct dungeon_init { 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; + 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 @@ -86,6 +92,7 @@ struct dungeon_init { u8 field_0x1AB; }; +void sub_0204E974(s8 arg0); void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx); #endif //PMDSKY_DUNGEON_INIT diff --git a/include/dungeon_init_2.h b/include/dungeon_init_2.h new file mode 100644 index 00000000..9d0239b2 --- /dev/null +++ b/include/dungeon_init_2.h @@ -0,0 +1,7 @@ +#ifndef PMDSKY_MAIN_DUNGEON_INIT_2 +#define PMDSKY_MAIN_DUNGEON_INIT_2 + +s16 DungeonSwapIdToIdx(s16 id); +s16 DungeonSwapIdxToId(s16 idx); + +#endif //PMDSKY_MAIN_DUNGEON_INIT_2 diff --git a/main.lsf b/main.lsf index e7167b54..f800f40c 100644 --- a/main.lsf +++ b/main.lsf @@ -139,6 +139,8 @@ Static main Object asm/main_02058E8C.o Object src/pokemon.o Object asm/main_02058F24.o + Object src/dungeon_init_2.o + Object asm/main_0206A750.o Object src/main_0206C98C.o Object asm/main_0206C9BC.o Object lib/DSE/src/main_02071A98.o diff --git a/src/dungeon_init.c b/src/dungeon_init.c index 1c60816e..6eb42fca 100644 --- a/src/dungeon_init.c +++ b/src/dungeon_init.c @@ -4,6 +4,10 @@ #include "progression.h" #include "script_variable.h" +extern s8 _022AB4F8; +extern u8 _022AB510; +extern u8 _022AB5A8; +extern struct dungeon_init PENDING_DUNGEON_ID; extern u8* GUEST_MONSTER_BANETTE; extern u8* GUEST_MONSTER_SKORUPI; extern u8* GUEST_MONSTER_BIDOOF; @@ -23,11 +27,47 @@ extern u8* GUEST_MONSTER_BIDOOF_4; extern u8* GUEST_MONSTER_SHAYMIN_LAND; extern u8* GUEST_MONSTER_SNOVER_2; +struct unk* sub_0205B77C(); +void sub_0205BB7C(void*, s8); +void sub_0205BD14(void*, s8); extern s32 GetDungeonModeSpecial(s16); extern s8 IsNoLossPenaltyDungeon(s16); extern void AddGuestMonster(void*, u8, void*); extern s8 DungeonSwapIdxToId(s16); +// Appears to be initialising a dungeon for a special case not +// handled by InitDungeonInit +void sub_0204E974(s8 arg0) { + struct unk* unk0; + + unk0 = sub_0205B77C(); + PENDING_DUNGEON_ID.dungeon_objective = 2; + PENDING_DUNGEON_ID.field_0xE = -1; + // Dungeon index 0xD6 maps to dungeon ID 0 in DUNGEON_SWAP_ID_TABLE + PENDING_DUNGEON_ID.dungeon_idx = 0xD6; + PENDING_DUNGEON_ID.field_0x12 = arg0; + sub_0205BB7C(&_022AB510, arg0); + sub_0205BD14(&_022AB5A8, arg0); + PENDING_DUNGEON_ID.has_guest_pokemon = FALSE; + PENDING_DUNGEON_ID.send_help_item = FALSE; + PENDING_DUNGEON_ID.field_0x4 = 0; + PENDING_DUNGEON_ID.show_rescues_left = FALSE; + PENDING_DUNGEON_ID.nonstory_flag = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_LEADER_SWITCH_ENABLED); + PENDING_DUNGEON_ID.recruiting_enabled = FALSE; + PENDING_DUNGEON_ID.show_potential_recruits = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_EVOLUTION_ENABLED); + PENDING_DUNGEON_ID.show_team_name = GetResolvedPerformanceProgressFlag(PERFORMANCE_PROGRESS_FLAG_SHOW_TEAM_NAME); + PENDING_DUNGEON_ID.send_home_disabled = FALSE; + PENDING_DUNGEON_ID.hidden_land_flag = FALSE; + PENDING_DUNGEON_ID.force_disable_recruiting = FALSE; + PENDING_DUNGEON_ID.skip_faint_animation_flag = FALSE; + // 0xDA is very close to the size of DUNGEON_SWAP_ID_TABLE, which has 0xDB entries + if ((u32) (u8) (unk0->unk4 + 0xDA) <= 5) { + PENDING_DUNGEON_ID.nonstory_flag = FALSE; + PENDING_DUNGEON_ID.force_disable_recruiting = TRUE; + } + _022AB4F8 = 1; +} + void InitDungeonInit(struct dungeon_init* dg_init, s16 dungeon_idx) { u8 game_mode = GetGameMode(); diff --git a/src/dungeon_init_2.c b/src/dungeon_init_2.c new file mode 100644 index 00000000..59beef1e --- /dev/null +++ b/src/dungeon_init_2.c @@ -0,0 +1,22 @@ +#include "dungeon_init_2.h" +#include "enums.h" + +extern u8 DUNGEON_SWAP_ID_TABLE[]; + +s16 DungeonSwapIdToIdx(s16 id) +{ + for(s32 i = 0; i < 0xD5; i++) { + if (DUNGEON_SWAP_ID_TABLE[(s16)i] == id) { + return i; + } + } + return ~0u; +} + +s16 DungeonSwapIdxToId(s16 idx) { + if (idx == -1) { + return DUNGEON_DUMMY_0xFF; + } else { + return DUNGEON_SWAP_ID_TABLE[idx]; + } +}