From b68e76d80ca96594814bdfd461045d3d1a29c983 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Fri, 18 Jul 2025 23:36:27 -0400 Subject: [PATCH 1/3] An assortment of functions Started with just LoadMonsterSprite, and then did some ones that were nearby in the assembly. --- asm/include/main_02051098.inc | 68 +- asm/include/main_02051788.inc | 53 + asm/include/overlay_29_022F73EC.inc | 15 + ...9_022F7388.inc => overlay_29_022F7768.inc} | 9 - asm/main_02051098.s | 1425 ----------------- asm/main_02051788.s | 1413 ++++++++++++++++ asm/overlay_29_022F73EC.s | 208 +++ ...ay_29_022F7388.s => overlay_29_022F7768.s} | 339 +--- include/main_02051760.h | 6 + include/overlay_29_022F7364.h | 2 + include/overlay_29_022F73B4.h | 6 + include/overlay_29_022F7654.h | 7 + main.lsf | 7 +- src/main_02051760.c | 7 + src/overlay_29_022F7364.c | 11 + src/overlay_29_022F73B4.c | 11 + src/overlay_29_022F7654.c | 22 + 17 files changed, 1776 insertions(+), 1833 deletions(-) create mode 100644 asm/include/main_02051788.inc create mode 100644 asm/include/overlay_29_022F73EC.inc rename asm/include/{overlay_29_022F7388.inc => overlay_29_022F7768.inc} (87%) create mode 100644 asm/main_02051788.s create mode 100644 asm/overlay_29_022F73EC.s rename asm/{overlay_29_022F7388.s => overlay_29_022F7768.s} (84%) create mode 100644 include/main_02051760.h create mode 100644 include/overlay_29_022F73B4.h create mode 100644 include/overlay_29_022F7654.h create mode 100644 src/main_02051760.c create mode 100644 src/overlay_29_022F73B4.c create mode 100644 src/overlay_29_022F7654.c diff --git a/asm/include/main_02051098.inc b/asm/include/main_02051098.inc index 2a909eb0..f07dd47a 100644 --- a/asm/include/main_02051098.inc +++ b/asm/include/main_02051098.inc @@ -1,70 +1,18 @@ #pragma once +.public CopyBitsFrom +.public CopyBitsTo +.public DUNGEON_RESTRICTIONS +.public DungeonFloorToGroupFloor +.public GetItemIdFromList +.public GetNbFloorsPlusOne +.public MISSION_FLOORS_FORBIDDEN +.public RandIntSafe .public _020A0C68 .public _020A0C69 .public _020A0C6A .public _020A0C6C .public _020A0C6E .public _020A1864 -.public _020A20B1 -.public _020A2D09 -.public _020A31B8 -.public _020A31D4 -.public _020A31E4 -.public _020A31F4 -.public _020A31FC -.public _020A3200 -.public _020A45C8_JP .public _020AFF7C .public _020AFF80 .public _020AFF88 -.public _020B09B0 -.public _020B09C0 -.public _s32_div_f -.public AllocateTemp1024ByteBufferFromPool -.public ARM9_UNKNOWN_PTR__NA_20A2C84 -.public ARM9_UNKNOWN_TABLE__NA_20A20B0 -.public ArrayCopy32 -.public ArrayFill32 -.public BAG_CAPACITY_TABLE -.public BAG_CAPACITY_TABLE_SPECIAL_EPISODES -.public CopyBitsFrom -.public CopyBitsTo -.public DecompressAtNormalVeneer -.public DUNGEON_RESTRICTIONS -.public DungeonFloorToGroupFloor -.public GetAtSize -.public GetBaseForm -.public GetItemIdFromList -.public GetNbFloorsPlusOne -.public LoadFileFromRom -.public LoadM2nAndN2m -.public MemAlloc -.public MemFree -.public MemZero -.public MISSION_FLOORS_FORBIDDEN -.public MONSTER_DATA_TABLE_PTR -.public MONSTER_SPRITE_DATA -.public RandIntSafe -.public RANK_UP_TABLE -.public StringFromId -.public strncpy -.public sub_0200302C -.public sub_020030FC -.public sub_0200A124 -.public sub_0200A158 -.public sub_0200A184 -.public sub_0200A478 -.public sub_0200A4C4 -.public sub_0200A504 -.public sub_0200A510 -.public sub_0200A590 -.public sub_0200B2C4 -.public sub_0200B314 -.public sub_0200B330 -.public sub_0200B340 -.public sub_0200B3C0 -.public sub_0200B3D4 -.public sub_0200B3FC -.public UnloadFile -.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -.public vsprintf diff --git a/asm/include/main_02051788.inc b/asm/include/main_02051788.inc new file mode 100644 index 00000000..00891dca --- /dev/null +++ b/asm/include/main_02051788.inc @@ -0,0 +1,53 @@ +#pragma once +.public ARM9_UNKNOWN_PTR__NA_20A2C84 +.public ARM9_UNKNOWN_TABLE__NA_20A20B0 +.public AllocateTemp1024ByteBufferFromPool +.public ArrayCopy32 +.public ArrayFill32 +.public BAG_CAPACITY_TABLE +.public BAG_CAPACITY_TABLE_SPECIAL_EPISODES +.public DecompressAtNormalVeneer +.public GetAtSize +.public GetBaseForm +.public LoadFileFromRom +.public LoadM2nAndN2m +.public MONSTER_DATA_TABLE_PTR +.public MONSTER_SPRITE_DATA +.public MemAlloc +.public MemFree +.public MemZero +.public RANK_UP_TABLE +.public StringFromId +.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE +.public UnloadFile +.public _020A20B1 +.public _020A2D09 +.public _020A31B8 +.public _020A31D4 +.public _020A31E4 +.public _020A31F4 +.public _020A31FC +.public _020A3200 +.public _020A45C8_JP +.public _020B09B0 +.public _020B09C0 +.public _s32_div_f +.public strncpy +.public sub_0200302C +.public sub_020030FC +.public sub_0200A124 +.public sub_0200A158 +.public sub_0200A184 +.public sub_0200A478 +.public sub_0200A4C4 +.public sub_0200A504 +.public sub_0200A510 +.public sub_0200A590 +.public sub_0200B2C4 +.public sub_0200B314 +.public sub_0200B330 +.public sub_0200B340 +.public sub_0200B3C0 +.public sub_0200B3D4 +.public sub_0200B3FC +.public vsprintf diff --git a/asm/include/overlay_29_022F73EC.inc b/asm/include/overlay_29_022F73EC.inc new file mode 100644 index 00000000..7062ff89 --- /dev/null +++ b/asm/include/overlay_29_022F73EC.inc @@ -0,0 +1,15 @@ +#pragma once +.public DUNGEON_PTR +.public DirectoryFileMngr_GetDirectoryFileSize +.public FloorNumberIsEven +.public GendersEqualNotGenderless +.public GetMonsterGender +.public GetSpriteFileSize +.public GetSpriteIndex__020526EC +.public IsShaymin +.public LoadWanTableEntryFromPack +.public LoadWanTableEntryFromPackUseProvidedMemory +.public MemAlloc +.public ReplaceWanFromBinFile +.public WAN_TABLE +.public ov29_0237C9B0 diff --git a/asm/include/overlay_29_022F7388.inc b/asm/include/overlay_29_022F7768.inc similarity index 87% rename from asm/include/overlay_29_022F7388.inc rename to asm/include/overlay_29_022F7768.inc index b5a96378..bf21afdd 100644 --- a/asm/include/overlay_29_022F7388.inc +++ b/asm/include/overlay_29_022F7768.inc @@ -7,7 +7,6 @@ .public DUNGEON_PTR .public DeleteWanTableEntryVeneer .public DetermineMonsterShadow -.public DirectoryFileMngr_GetDirectoryFileSize .public DiscoverMinimap .public DisplayMessage .public DisplayMessage2 @@ -16,18 +15,14 @@ .public EndFrozenClassStatus .public EntityIsValid__022F7364 .public FreeOtherWrappedMonsters -.public GendersEqualNotGenderless .public GetActiveTeamMember .public GetBodySize .public GetForcedLossReason .public GetLeader .public GetLvlUpEntry .public GetMinimapDataE447 -.public GetMonsterGender .public GetMonsterName .public GetNumberOfAttacks -.public GetSpriteFileSize -.public GetSpriteIndex__020526EC .public GetStatBoostsForMonsterSummary .public GetTile .public GetTileAtEntity @@ -42,14 +37,10 @@ .public JoinedAtRangeCheck .public JoinedAtRangeCheck2 .public LEADER_PTR -.public LoadWanTableEntryFromPack -.public LoadWanTableEntryFromPackUseProvidedMemory -.public MemAlloc .public MemFree .public OpenMessageLog .public PopulateActiveMonsterPtrs .public RemoveHolderForItemInBag -.public ReplaceWanFromBinFile .public RevertGiratinaAndShaymin .public SetForcedLossReason .public SetMissionTargetEnemyDefeated diff --git a/asm/main_02051098.s b/asm/main_02051098.s index b5c95a00..3627308d 100644 --- a/asm/main_02051098.s +++ b/asm/main_02051098.s @@ -607,1428 +607,3 @@ _02051758: mov r0, #0 bx lr arm_func_end IsSkyExclusiveDungeon - - arm_func_start JoinedAtRangeCheck2 -JoinedAtRangeCheck2: ; 0x02051760 - cmp r0, #0xd7 - beq _02051778 - cmp r0, #0xec - blo _02051780 - cmp r0, #0xf0 - bhi _02051780 -_02051778: - mov r0, #1 - bx lr -_02051780: - mov r0, #0 - bx lr - arm_func_end JoinedAtRangeCheck2 - - arm_func_start sub_02051788 -sub_02051788: ; 0x02051788 - ldr r1, _02051794 ; =_020A20B1 - ldrb r0, [r1, r0, lsl #1] - bx lr - .align 2, 0 -_02051794: .word _020A20B1 - arm_func_end sub_02051788 - - arm_func_start sub_02051798 -sub_02051798: ; 0x02051798 - mov ip, #0 - ldr r2, _020517D0 ; =ARM9_UNKNOWN_TABLE__NA_20A20B0 - b _020517C0 -_020517A4: - add r1, r2, ip, lsl #1 - ldrb r1, [r1, #1] - mov r3, ip, lsl #1 - cmp r0, r1 - ldreqb r0, [r2, r3] - bxeq lr - add ip, ip, #1 -_020517C0: - cmp ip, #0x100 - blt _020517A4 - mov r0, #0xff - bx lr - .align 2, 0 -_020517D0: .word ARM9_UNKNOWN_TABLE__NA_20A20B0 - arm_func_end sub_02051798 - - arm_func_start GetBagCapacity -GetBagCapacity: ; 0x020517D4 - ldr r1, _020517E0 ; =BAG_CAPACITY_TABLE - ldr r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_020517E0: .word BAG_CAPACITY_TABLE - arm_func_end GetBagCapacity - - arm_func_start GetBagCapacitySpecialEpisode -GetBagCapacitySpecialEpisode: ; 0x020517E4 - ldr r1, _020517F0 ; =BAG_CAPACITY_TABLE_SPECIAL_EPISODES - ldr r0, [r1, r0, lsl #2] - bx lr - .align 2, 0 -_020517F0: .word BAG_CAPACITY_TABLE_SPECIAL_EPISODES - arm_func_end GetBagCapacitySpecialEpisode - - arm_func_start GetRankUpEntry -GetRankUpEntry: ; 0x020517F4 - ldr r1, _02051800 ; =RANK_UP_TABLE - add r0, r1, r0, lsl #4 - bx lr - .align 2, 0 -_02051800: .word RANK_UP_TABLE - arm_func_end GetRankUpEntry - - arm_func_start sub_02051804 -sub_02051804: ; 0x02051804 - stmdb sp!, {r4, lr} - add ip, r0, #0x100 - ldrsh r4, [ip, #0x40] - mov ip, #0x14 - ldr lr, [sp, #8] - smlabb r4, r4, ip, r0 - cmp lr, #1 - moveq r1, #0 - stmeqia r4, {r1, r2} - streq r1, [r4, #8] - strne r3, [r4] - strne r2, [r4, #4] - strne r1, [r4, #8] - ldrneh r1, [sp, #0xc] - str lr, [r4, #0xc] - add r0, r0, #0x100 - str r1, [r4, #0x10] - ldrsh r1, [r0, #0x40] - add r1, r1, #1 - strh r1, [r0, #0x40] - ldmia sp!, {r4, pc} - arm_func_end sub_02051804 - - arm_func_start sub_02051858 -sub_02051858: ; 0x02051858 - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r0, #0x1c - mov r1, #0 - mov r5, r2 - mov r4, r3 - bl MemAlloc - str r0, [r7, #8] - str r6, [r7, #0xc] - mov r0, #1 - strb r0, [r7, #0x16] - str r5, [r7] - str r4, [r7, #4] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end sub_02051858 - - arm_func_start sub_02051894 -sub_02051894: ; 0x02051894 - stmdb sp!, {r4, lr} - mov r4, r0 - ldrb r0, [r4, #0x16] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - ldr r0, [r4, #8] - bl MemFree - mov r0, #0 - strb r0, [r4, #0x16] - ldmia sp!, {r4, pc} - arm_func_end sub_02051894 - - arm_func_start sub_020518BC -sub_020518BC: ; 0x020518BC - stmdb sp!, {r3, r4, lr} - sub sp, sp, #4 - mov r4, r0 - cmp r2, #0 - mov r0, #0 - bne _02051934 - cmp r1, #1 - bne _02051904 - ldr r1, _020519B0 ; =0x06018000 - ldr r2, _020519B4 ; =0x0400001C - str r1, [r4, #0x10] - str r0, [sp] - ldr r0, [r4, #8] - sub r3, r1, #0x9000 - mov r1, #1 - bl sub_0200B2C4 - mov r0, #1 - b _02051990 -_02051904: - cmp r1, #0 - bne _02051990 - ldr r1, _020519B8 ; =0x06010000 - ldr r2, _020519BC ; =0x04000018 - str r1, [r4, #0x10] - str r0, [sp] - ldr r0, [r4, #8] - sub r3, r1, #0x2000 - mov r1, #1 - bl sub_0200B2C4 - mov r0, #1 - b _02051990 -_02051934: - cmp r1, #1 - bne _02051964 - ldr r1, _020519C0 ; =0x06218000 - ldr r2, _020519C4 ; =0x0400101C - str r1, [r4, #0x10] - str r0, [sp] - ldr r0, [r4, #8] - sub r3, r1, #0x9000 - mov r1, #1 - bl sub_0200B2C4 - mov r0, #1 - b _02051990 -_02051964: - cmp r1, #0 - bne _02051990 - ldr r1, _020519C8 ; =0x06210000 - ldr r2, _020519CC ; =0x04001018 - str r1, [r4, #0x10] - str r0, [sp] - ldr r0, [r4, #8] - sub r3, r1, #0x2000 - mov r1, #1 - bl sub_0200B2C4 - mov r0, #1 -_02051990: - cmp r0, #0 - beq _020519A8 - ldr r0, [r4, #8] - bl sub_0200B3D4 - ldr r0, [r4, #8] - bl sub_0200B330 -_020519A8: - add sp, sp, #4 - ldmia sp!, {r3, r4, pc} - .align 2, 0 -_020519B0: .word 0x06018000 -_020519B4: .word 0x0400001C -_020519B8: .word 0x06010000 -_020519BC: .word 0x04000018 -_020519C0: .word 0x06218000 -_020519C4: .word 0x0400101C -_020519C8: .word 0x06210000 -_020519CC: .word 0x04001018 - arm_func_end sub_020518BC - - arm_func_start sub_020519D0 -sub_020519D0: ; 0x020519D0 - stmdb sp!, {r3, lr} - mov r0, #0x21c - mov r1, #0 - bl MemAlloc - ldr r2, _02051B3C ; =_020B09B0 - mov r1, #0x21c - str r0, [r2] - bl MemZero - mov r1, #0 - ldr r0, _02051B3C ; =_020B09B0 - str r1, [sp] - ldr r0, [r0] - mov r2, #0x100 - add r0, r0, #0x1a4 - mov r3, #0x5000000 - bl sub_0200A124 - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #0 - ldr r1, [r0] - mov r3, #0x100 - str r2, [sp] - add r0, r1, #0x1cc - add r1, r1, #0x1a4 - bl sub_0200A478 - mov r1, #0 - str r1, [sp] - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #0x100 - ldr r0, [r0] - ldr r3, _02051B40 ; =0x05000400 - add r0, r0, #0x1b8 - bl sub_0200A124 - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #0 - ldr r1, [r0] - mov r3, #0x100 - str r2, [sp] - add r0, r1, #0x1f4 - add r1, r1, #0x1b8 - bl sub_0200A478 - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #0 - ldr r0, [r0] - mov r3, r2 - add r1, r0, #0x1cc - bl sub_02051858 - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #1 - ldr r1, [r0] - mov r3, #0 - add r0, r1, #0x18 - add r1, r1, #0x1cc - bl sub_02051858 - ldr r0, _02051B3C ; =_020B09B0 - mov r1, #0 - ldr r0, [r0] - mov r2, r1 - bl sub_020518BC - ldr r0, _02051B3C ; =_020B09B0 - mov r1, #1 - ldr r0, [r0] - mov r2, #0 - add r0, r0, #0x18 - bl sub_020518BC - ldr r0, _02051B3C ; =_020B09B0 - ldr r1, [r0] - add r0, r1, #0x30 - add r1, r1, #0x1f4 - mov r2, #0 - mov r3, #1 - bl sub_02051858 - ldr r0, _02051B3C ; =_020B09B0 - mov r2, #1 - ldr r1, [r0] - mov r3, r2 - add r0, r1, #0x48 - add r1, r1, #0x1f4 - bl sub_02051858 - ldr r0, _02051B3C ; =_020B09B0 - mov r1, #0 - ldr r0, [r0] - mov r2, #1 - add r0, r0, #0x30 - bl sub_020518BC - ldr r0, _02051B3C ; =_020B09B0 - mov r1, #1 - ldr r0, [r0] - mov r2, r1 - add r0, r0, #0x48 - bl sub_020518BC - ldmia sp!, {r3, pc} - .align 2, 0 -_02051B3C: .word _020B09B0 -_02051B40: .word 0x05000400 - arm_func_end sub_020519D0 - - arm_func_start sub_02051B44 -sub_02051B44: ; 0x02051B44 - stmdb sp!, {r3, lr} - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - bl sub_02051894 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x18 - bl sub_02051894 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #8] - bl sub_0200B314 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x20] - bl sub_0200B314 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x30 - bl sub_02051894 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x48 - bl sub_02051894 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_0200B314 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x50] - bl sub_0200B314 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1cc - bl sub_0200A4C4 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1f4 - bl sub_0200A4C4 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1a4 - bl sub_0200A158 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1b8 - bl sub_0200A158 - ldr r0, _02051C20 ; =_020B09B0 - ldr r0, [r0] - bl MemFree - ldr r0, _02051C20 ; =_020B09B0 - mov r1, #0 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02051C20: .word _020B09B0 - arm_func_end sub_02051B44 - - arm_func_start sub_02051C24 -sub_02051C24: ; 0x02051C24 - stmdb sp!, {r4, r5, r6, r7, r8, lr} - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - cmp r0, #0 - ldmeqia sp!, {r4, r5, r6, r7, r8, pc} - mov r0, #8 - bl sub_0200302C - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #8] - bl sub_0200B340 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x38] - bl sub_0200B340 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x20] - bl sub_0200B340 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - ldr r0, [r0, #0x50] - bl sub_0200B340 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1cc - bl sub_0200A510 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1f4 - bl sub_0200A510 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1a4 - bl sub_0200A184 - ldr r0, _02051D64 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1b8 - bl sub_0200A184 - ldr r0, _02051D64 ; =_020B09B0 - mov r6, #0 - ldr r0, [r0] - mov r8, r6 - add r4, r0, #0x60 - add r0, r4, #0x100 - ldrsh r5, [r0, #0x40] - mov r7, #0x14 - b _02051D3C -_02051CE4: - smlabb r2, r6, r7, r4 - ldr r0, [r2, #4] - cmp r0, #0 - beq _02051D20 - ldr r1, [r2, #0xc] - cmp r1, #0 - bne _02051D10 - ldr r1, [r2, #8] - ldr r2, [r2] - bl ArrayCopy32 - b _02051D30 -_02051D10: - cmp r1, #1 - bne _02051D30 - bl MemFree - b _02051D30 -_02051D20: - ldr r1, [r2, #8] - ldr r2, [r2] - mov r0, r8 - bl ArrayFill32 -_02051D30: - add r0, r6, #1 - mov r0, r0, lsl #0x10 - mov r6, r0, asr #0x10 -_02051D3C: - cmp r6, r5 - blt _02051CE4 - ldr r0, _02051D64 ; =_020B09B0 - mov r2, #0 - ldr r1, [r0] - mov r0, #8 - add r1, r1, #0x100 - strh r2, [r1, #0xa0] - bl sub_020030FC - ldmia sp!, {r4, r5, r6, r7, r8, pc} - .align 2, 0 -_02051D64: .word _020B09B0 - arm_func_end sub_02051C24 - - arm_func_start sub_02051D68 -sub_02051D68: ; 0x02051D68 - ldr r2, _02051D84 ; =_020B09B0 - mov r1, #0x28 - ldr r2, [r2] - ldr ip, _02051D88 ; =sub_0200A504 - add r2, r2, #0x1cc - mla r0, r1, r0, r2 - bx ip - .align 2, 0 -_02051D84: .word _020B09B0 -_02051D88: .word sub_0200A504 - arm_func_end sub_02051D68 - - arm_func_start sub_02051D8C -sub_02051D8C: ; 0x02051D8C - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr ip, _02051DCC ; =_020B09B0 - str r1, [sp, #4] - ldr ip, [ip] - ldr lr, [sp, #0x10] - mov r1, #0x30 - mla ip, lr, r1, ip - mov r1, #0x18 - mla r1, r3, r1, ip - str r0, [sp] - ldr r0, [r1, #8] - add r1, sp, #0 - bl sub_0200B3FC - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051DCC: .word _020B09B0 - arm_func_end sub_02051D8C - - arm_func_start sub_02051DD0 -sub_02051DD0: ; 0x02051DD0 - stmdb sp!, {r3, lr} - ldr r3, _02051DF8 ; =_020B09B0 - mov r2, #0x30 - ldr ip, [r3] - mov r3, #0x18 - mla r2, r1, r2, ip - mla r1, r0, r3, r2 - ldr r0, [r1, #8] - bl sub_0200B3D4 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051DF8: .word _020B09B0 - arm_func_end sub_02051DD0 - - arm_func_start sub_02051DFC -sub_02051DFC: ; 0x02051DFC - ldr r3, _02051E1C ; =_020B09B0 - mov r2, #0x30 - ldr ip, [r3] - mov r3, #0x18 - mla r2, r1, r2, ip - mla r1, r0, r3, r2 - ldr r0, [r1, #8] - bx lr - .align 2, 0 -_02051E1C: .word _020B09B0 - arm_func_end sub_02051DFC - - arm_func_start sub_02051E20 -sub_02051E20: ; 0x02051E20 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - ldr ip, _02051E5C ; =_020B09B0 - str r1, [sp, #4] - ldr ip, [ip] - mov r1, #0x30 - mla ip, r3, r1, ip - mov r1, #0x18 - mla r1, r2, r1, ip - str r0, [sp] - ldr r0, [r1, #8] - add r1, sp, #0 - bl sub_0200B3C0 - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051E5C: .word _020B09B0 - arm_func_end sub_02051E20 - - arm_func_start sub_02051E60 -sub_02051E60: ; 0x02051E60 - stmdb sp!, {r3, lr} - ldr r3, _02051E88 ; =_020B09B0 - mov r2, #0x30 - ldr ip, [r3] - mov r3, #0x18 - mla r2, r1, r2, ip - mla r1, r0, r3, r2 - ldr r0, [r1, #8] - bl sub_0200B330 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051E88: .word _020B09B0 - arm_func_end sub_02051E60 - - arm_func_start GetBgRegionArea -GetBgRegionArea: ; 0x02051E8C - stmdb sp!, {r3, lr} - ldr ip, _02051EB4 ; =_020B09B0 - mov r3, #0x30 - ldr lr, [ip] - mov ip, #0x18 - mla r3, r2, r3, lr - mla r2, r1, ip, r3 - ldr r1, [r2, #0x10] - add r0, r1, r0 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051EB4: .word _020B09B0 - arm_func_end GetBgRegionArea - - arm_func_start sub_02051EB8 -sub_02051EB8: ; 0x02051EB8 - ldr r2, _02051ED0 ; =_020B09B0 - mov r1, #0x14 - ldr r2, [r2] - add r2, r2, #0x1a4 - mla r0, r1, r0, r2 - bx lr - .align 2, 0 -_02051ED0: .word _020B09B0 - arm_func_end sub_02051EB8 - - arm_func_start sub_02051ED4 -sub_02051ED4: ; 0x02051ED4 - ldr r2, _02051EEC ; =_020B09B0 - mov r1, #0x28 - ldr r2, [r2] - add r2, r2, #0x1cc - mla r0, r1, r0, r2 - bx lr - .align 2, 0 -_02051EEC: .word _020B09B0 - arm_func_end sub_02051ED4 - - arm_func_start sub_02051EF0 -sub_02051EF0: ; 0x02051EF0 - stmdb sp!, {r3, lr} - cmp r3, #0 - beq _02051F4C - ldrb lr, [r0] - mov ip, #0xff - ldrb lr, [r3, lr, lsl #2] - mul lr, r2, lr - mov lr, lr, lsr #8 - strb lr, [sp] - ldrb lr, [r0, #1] - add lr, r3, lr, lsl #2 - ldrb lr, [lr, #1] - mul lr, r2, lr - mov lr, lr, lsr #8 - strb lr, [sp, #1] - ldrb r0, [r0, #2] - add r0, r3, r0, lsl #2 - ldrb r0, [r0, #2] - mul r0, r2, r0 - mov r0, r0, lsr #8 - strb r0, [sp, #2] - strb ip, [sp, #3] - b _02051F84 -_02051F4C: - ldrb ip, [r0] - mov r3, #0xff - mul lr, ip, r2 - mov ip, lr, lsr #8 - strb ip, [sp] - ldrb ip, [r0, #1] - mul lr, ip, r2 - mov ip, lr, lsr #8 - strb ip, [sp, #1] - ldrb r0, [r0, #2] - mul r2, r0, r2 - mov r0, r2, lsr #8 - strb r0, [sp, #2] - strb r3, [sp, #3] -_02051F84: - ldr r0, _02051FB0 ; =_020B09B0 - mov r1, r1, lsl #0x10 - ldr r0, [r0] - ldr r2, [sp, #8] - add r3, r0, #0x1cc - mov r0, #0x28 - mla r0, r2, r0, r3 - add r2, sp, #0 - mov r1, r1, lsr #0x10 - bl sub_0200A590 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051FB0: .word _020B09B0 - arm_func_end sub_02051EF0 - - arm_func_start sub_02051FB4 -sub_02051FB4: ; 0x02051FB4 - stmdb sp!, {r3, lr} - sub sp, sp, #8 - str r3, [sp] - mov r3, #0 - str r3, [sp, #4] - ldr ip, _02051FEC ; =_020B09B0 - mov r3, r2 - mov r2, r1 - ldr ip, [ip] - mov r1, r0 - add r0, ip, #0x60 - bl sub_02051804 - add sp, sp, #8 - ldmia sp!, {r3, pc} - .align 2, 0 -_02051FEC: .word _020B09B0 - arm_func_end sub_02051FB4 - - arm_func_start sub_02051FF0 -sub_02051FF0: ; 0x02051FF0 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r3, r0 - mov r5, r1 - add r0, sp, #0 - mov r1, r3 - bl LoadFileFromRom - ldr r0, [sp] - bl GetAtSize - mov r4, r0 - cmp r4, #0 - ldrle r0, [sp] - strle r0, [r5] - ldrle r4, [sp, #4] - ble _02052054 - mov r1, #0 - bl MemAlloc - mov r1, r4 - ldr r2, [sp] - mov r4, r0 - bl DecompressAtNormalVeneer - str r4, [r5] - add r0, sp, #0 - ldr r4, [r4, #0xc] - bl UnloadFile -_02052054: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02051FF0 - - arm_func_start sub_02052060 -sub_02052060: ; 0x02052060 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - ldr r4, _020522E4 ; =_020B09B0 - mov sl, r1 - ldr r7, [sp, #0x54] - ldr r4, [r4] - mov r1, #0x30 - mla r4, r7, r1, r4 - ldr fp, [sp, #0x50] - mov r1, #0x18 - mla r4, fp, r1, r4 - mov sb, r2 - add r1, sp, #0x28 - mov r2, #0xf - mov r8, r3 - ldr r5, [r4, #0x10] - bl sub_02051FF0 - mov r3, r0 - ldr r4, [sp, #0x28] - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - ldr r0, _020522E4 ; =_020B09B0 - ldr r2, [r4, #8] - ldr r0, [r0] - add r1, r5, sl - add r2, r4, r2 - add r0, r0, #0x60 - bl sub_02051804 - mov r0, #1 - str r0, [sp] - mov r1, #0 - ldr r0, _020522E4 ; =_020B09B0 - str r1, [sp, #4] - ldr r0, [r0] - mov r2, r4 - mov r3, r1 - add r0, r0, #0x60 - bl sub_02051804 - ldr r1, [sp, #0x28] - rsb r0, sb, #0x20 - mov r0, r0, lsl #0x10 - ldr r1, [r1, #0x10] - str r0, [sp, #0x18] - add r0, r4, r1 - str r0, [sp, #0xc] - mov r5, #0 - b _020521CC -_02052120: - mov r6, #0 - mov r0, r6 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - mov r1, sb, lsl #0x10 - add r0, r0, sb, lsl #6 - str r0, [sp, #0x10] - mov r0, r1, asr #0x10 - str r0, [sp, #0x14] -_02052144: - ldr r0, [sp, #0x10] - mov r1, r6, lsl #1 - ldrh r1, [r1, r0] - ldr r2, _020522E8 ; =0x00000FFF - mov r0, r6, lsl #0x10 - and r2, r1, r2 - mov r2, r2, lsl #0x10 - mov r1, r1, lsl #4 - mov r2, r2, lsr #0x10 - add r1, r8, r1, lsr #16 - add r2, r2, sl, lsr #5 - mov r1, r1, lsl #0x1c - mov r2, r2, lsl #0x10 - mov r1, r1, lsr #0x10 - orr r1, r1, r2, lsr #16 - mov r1, r1, lsl #0x10 - mov r2, r1, lsr #0x10 - ldr r1, [sp, #0x14] - mov r0, r0, asr #0x10 - str r7, [sp] - mov r3, fp - bl sub_02051D8C - ldr r0, [sp, #8] - add r6, r6, #1 - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - str r0, [sp, #8] - cmp r0, #0x20 - blo _02052144 - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - add sb, sb, #1 -_020521CC: - ldr r0, [sp, #0x18] - cmp r5, r0, lsr #16 - blo _02052120 - mov r0, fp - mov r1, r7 - bl sub_02051E60 - ldr r0, [sp, #0x28] - ldr r3, _020522EC ; =ARM9_UNKNOWN_PTR__NA_20A2C84 - ldr r0, [r0] - add r2, sp, #0x1c - add r5, r4, r0 - mov r4, #0 - mov r1, #4 -_02052200: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052200 - mov r0, #0x28 - mul r6, r7, r0 - b _020522B0 -_0205221C: - add r3, sp, #0x1c - add r2, sp, #0x20 - mov r1, #4 -_02052228: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052228 - ldrb r0, [r5] - add r3, sp, #0x20 - add r2, sp, #0x24 - strb r0, [sp, #0x20] - ldrb r0, [r5, #1] - mov r1, #4 - strb r0, [sp, #0x21] - ldrb r0, [r5, #2] - strb r0, [sp, #0x22] - ldrb r0, [r5, #3] - strb r0, [sp, #0x23] -_02052264: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052264 - add r0, r4, r8, lsl #4 - cmp r0, #0x100 - bge _020522C8 - ldr r1, _020522E4 ; =_020B09B0 - mov r0, r0, lsl #0x10 - ldr r1, [r1] - mov r0, r0, asr #0x10 - add r3, r1, #0x1cc - mov r1, r0, lsl #0x10 - add r2, sp, #0x24 - add r0, r3, r6 - mov r1, r1, lsr #0x10 - bl sub_0200A590 - add r4, r4, #1 - add r5, r5, #4 -_020522B0: - ldr r0, [sp, #0x28] - ldr r1, [r0, #4] - mov r0, r1, asr #1 - add r0, r1, r0, lsr #30 - cmp r4, r0, asr #2 - blt _0205221C -_020522C8: - ldr r0, _020522E4 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1cc - add r0, r0, r6 - bl sub_0200A504 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020522E4: .word _020B09B0 -_020522E8: .word 0x00000FFF -_020522EC: .word ARM9_UNKNOWN_PTR__NA_20A2C84 - arm_func_end sub_02052060 - - arm_func_start sub_020522F0 -sub_020522F0: ; 0x020522F0 - stmdb sp!, {r4, lr} - mov r4, r1 - bl sub_02051FF0 - str r0, [r4, #8] - ldr r1, [r4] - ldr r0, [r1, #8] - add r0, r1, r0 - str r0, [r4, #4] - ldr r0, [r4] - ldr r0, [r0, #0x10] - add r0, r1, r0 - str r0, [r4, #0xc] - ldr r0, [r4] - ldr r0, [r0] - add r0, r1, r0 - str r0, [r4, #0x10] - ldmia sp!, {r4, pc} - arm_func_end sub_020522F0 - - arm_func_start sub_02052334 -sub_02052334: ; 0x02052334 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - bl MemFree - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - arm_func_end sub_02052334 - - arm_func_start LoadMonsterMd -LoadMonsterMd: ; 0x02052358 - stmdb sp!, {r3, lr} - ldr r0, _02052388 ; =_020B09C0 - ldr r1, _0205238C ; =_020A31B8 - mov r2, #0 - bl LoadFileFromRom - bl LoadM2nAndN2m - ldr r0, _02052390 ; =MONSTER_DATA_TABLE_PTR - ldr r1, [r0, #0xc] -#ifdef EUROPE - str r1, [r0, #8] -#else - str r1, [r0, #4] -#endif - add r1, r1, #8 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02052388: .word _020B09C0 -_0205238C: .word _020A31B8 -_02052390: .word MONSTER_DATA_TABLE_PTR - arm_func_end LoadMonsterMd - - arm_func_start GetNameRaw -GetNameRaw: ; 0x02052394 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - mov r0, r4 - mov r2, #0x14 - bl strncpy - ldmia sp!, {r4, pc} - arm_func_end GetNameRaw - - arm_func_start GetName -GetName: ; 0x020523D0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, r1 - mov r1, #0x258 - mov r4, r2 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r3, r0 - mov r0, r5 - mov r2, r4 - ldr r1, _02052414 ; =_020A31D4 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02052414: .word _020A31D4 - arm_func_end GetName - - arm_func_start SprintfStatic__02052418 -SprintfStatic__02052418: ; 0x02052418 - stmdb sp!, {r0, r1, r2, r3} - stmdb sp!, {r3, lr} - add r2, sp, #0xc - bic r2, r2, #3 - ldr r1, [sp, #0xc] - add r2, r2, #4 - bl vsprintf - ldmia sp!, {r3, lr} - add sp, sp, #0x10 - bx lr - arm_func_end SprintfStatic__02052418 - - arm_func_start GetNameWithGender -GetNameWithGender: ; 0x02052440 -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} -#else - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 -#endif - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r1, #0x258 - mov r4, r2 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldr r2, _020524F4 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - mov r3, r0 - smlabb r0, r5, r1, r2 - ldrb r0, [r0, #0x12] - cmp r0, #3 - cmpne r5, #0x1d - cmpne r5, #0x20 - bne _020524B0 - ldr r1, _020524F8 ; =_020A31D4 - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, pc} -#else - b _020524EC -#endif -_020524B0: - cmp r0, #2 - bne _020524D4 - ldr r1, _020524FC ; =_020A31E4 -#ifdef JAPAN - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 - ldmia sp!, {r4, r5, r6, pc} -_020524D4: - ldr r1, _02052838_JP ; =_020A45C8_JP - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 - ldmia sp!, {r4, r5, r6, pc} -#else - mov r5, #0xbe - mov r0, r6 - mov r2, r4 - str r5, [sp] - bl SprintfStatic__02052418 - b _020524EC -_020524D4: - ldr r1, _020524FC ; =_020A31E4 - mov r5, #0xbd - mov r0, r6 - mov r2, r4 - str r5, [sp] - bl SprintfStatic__02052418 -_020524EC: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} -#endif - .align 2, 0 -_020524F4: .word MONSTER_DATA_TABLE_PTR -_020524F8: .word _020A31D4 -_020524FC: .word _020A31E4 -#ifdef JAPAN -_02052838_JP: .word _020A45C8_JP -#endif - arm_func_end GetNameWithGender - - arm_func_start GetSpeciesString -GetSpeciesString: ; 0x02052500 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl GetBaseForm - cmp r0, #0xc9 - bne _02052684 - cmp r4, #0xca - moveq r4, #1 - beq _02052660 - cmp r4, #0xcb - moveq r4, #2 - beq _02052660 - cmp r4, #0xcc - moveq r4, #3 - beq _02052660 - cmp r4, #0xcd - moveq r4, #4 - beq _02052660 - cmp r4, #0xce - moveq r4, #5 - beq _02052660 - cmp r4, #0xcf - moveq r4, #6 - beq _02052660 - cmp r4, #0xd0 - moveq r4, #7 - beq _02052660 - cmp r4, #0xd1 - moveq r4, #8 - beq _02052660 - cmp r4, #0xd2 - moveq r4, #9 - beq _02052660 - cmp r4, #0xd3 - moveq r4, #0xa - beq _02052660 - cmp r4, #0xd4 - moveq r4, #0xb - beq _02052660 - cmp r4, #0xd5 - moveq r4, #0xc - beq _02052660 - cmp r4, #0xd6 - moveq r4, #0xd - beq _02052660 - cmp r4, #0xd7 - moveq r4, #0xe - beq _02052660 - cmp r4, #0xd8 - moveq r4, #0xf - beq _02052660 - cmp r4, #0xd9 - moveq r4, #0x10 - beq _02052660 - cmp r4, #0xda - moveq r4, #0x11 - beq _02052660 - cmp r4, #0xdb - moveq r4, #0x12 - beq _02052660 - cmp r4, #0xdc - moveq r4, #0x13 - beq _02052660 - cmp r4, #0xdd - moveq r4, #0x14 - beq _02052660 - cmp r4, #0xde - moveq r4, #0x15 - beq _02052660 - cmp r4, #0xdf - moveq r4, #0x16 - beq _02052660 - cmp r4, #0xe0 - moveq r4, #0x17 - beq _02052660 - cmp r4, #0xe1 - moveq r4, #0x18 - beq _02052660 - cmp r4, #0xe2 - moveq r4, #0x19 - beq _02052660 - cmp r4, #0xe3 - moveq r4, #0x1a - beq _02052660 - cmp r4, #0xe4 - moveq r4, #0x1b - movne r4, #0 -_02052660: - ldr r0, _020526B8 ; =0x000022E8 - bl StringFromId - ldr r1, _020526BC ; =UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE - mov r2, r0 - ldr r3, [r1, r4, lsl #2] - ldr r1, _020526C0 ; =_020A31F4 - mov r0, r5 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} -_02052684: - mov r0, r4 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r2, r0 - ldr r1, _020526C4 ; =_020A31FC - mov r0, r5 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#if defined(EUROPE) -_020526B8: .word 0x000022EA -#elif defined(JAPAN) -_020526B8: .word 0x00001659 -#else -_020526B8: .word 0x000022E8 -#endif -_020526BC: .word UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -_020526C0: .word _020A31F4 -_020526C4: .word _020A31FC - arm_func_end GetSpeciesString - - arm_func_start GetNameString -GetNameString: ; 0x020526C8 - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldmia sp!, {r3, pc} - arm_func_end GetNameString - - arm_func_start GetSpriteIndex__020526EC -GetSpriteIndex__020526EC: ; 0x020526EC - ldr r2, _02052704 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_02052704: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__020526EC - - arm_func_start GetSpriteIndex__02052708 -GetSpriteIndex__02052708: ; 0x02052708 - ldr r2, _02052720 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_02052720: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__02052708 - - arm_func_start GetSpriteIndex__02052724 -GetSpriteIndex__02052724: ; 0x02052724 - ldr r2, _0205273C ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrh r0, [r0, #0x10] - bx lr - .align 2, 0 -_0205273C: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpriteIndex__02052724 - - arm_func_start GetDexNumber -GetDexNumber: ; 0x02052740 - ldr r2, _02052758 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #4] - bx lr - .align 2, 0 -_02052758: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetDexNumber - - arm_func_start GetCategoryString -GetCategoryString: ; 0x0205275C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - bl AllocateTemp1024ByteBufferFromPool - mov r4, r0 - mov r0, r5 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x79 - add r0, r0, #0x2400 -#elif defined(JAPAN) - add r0, r1, #0x1a40 -#else - add r0, r1, #0x77 - add r0, r0, #0x2400 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r2, r0 - ldr r1, _020527A4 ; =_020A3200 - mov r0, r4 - bl SprintfStatic__02052418 - mov r0, r4 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_020527A4: .word _020A3200 - arm_func_end GetCategoryString - - arm_func_start GetMonsterGender -GetMonsterGender: ; 0x020527A8 - ldr r2, _020527C0 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x12] - bx lr - .align 2, 0 -_020527C0: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetMonsterGender - - arm_func_start GetBodySize -GetBodySize: ; 0x020527C4 - ldr r2, _020527DC ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x13] - bx lr - .align 2, 0 -_020527DC: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetBodySize - - arm_func_start GetSpriteSize -GetSpriteSize: ; 0x020527E0 - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - mov r0, r1, lsl #0x10 - ldr r2, _02052818 ; =MONSTER_SPRITE_DATA - mov r0, r0, asr #0x10 - ldrb r0, [r2, r0, lsl #1] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - cmp r0, #6 - movls r0, #6 - ldrhib r0, [r2, r1, lsl #1] - ldmia sp!, {r3, pc} - .align 2, 0 -_02052818: .word MONSTER_SPRITE_DATA - arm_func_end GetSpriteSize - - arm_func_start GetSpriteFileSize -GetSpriteFileSize: ; 0x0205281C - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - ldr r0, _02052838 ; =_020A2D09 - ldrb r0, [r0, r1, lsl #1] - mov r0, r0, lsl #9 - ldmia sp!, {r3, pc} - .align 2, 0 -_02052838: .word _020A2D09 - arm_func_end GetSpriteFileSize - - arm_func_start GetShadowSize -GetShadowSize: ; 0x0205283C - ldr r2, _02052854 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrb r0, [r0, #0x2e] - bx lr - .align 2, 0 -_02052854: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetShadowSize - - arm_func_start GetSpeedStatus -GetSpeedStatus: ; 0x02052858 - ldr r2, _02052870 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - smlabb r0, r0, r1, r2 - ldrsh r0, [r0, #6] - bx lr - .align 2, 0 -_02052870: .word MONSTER_DATA_TABLE_PTR - arm_func_end GetSpeedStatus diff --git a/asm/main_02051788.s b/asm/main_02051788.s new file mode 100644 index 00000000..1804dea7 --- /dev/null +++ b/asm/main_02051788.s @@ -0,0 +1,1413 @@ + .include "asm/macros.inc" + .include "main_02051788.inc" + + .text + + arm_func_start sub_02051788 +sub_02051788: ; 0x02051788 + ldr r1, _02051794 ; =_020A20B1 + ldrb r0, [r1, r0, lsl #1] + bx lr + .align 2, 0 +_02051794: .word _020A20B1 + arm_func_end sub_02051788 + + arm_func_start sub_02051798 +sub_02051798: ; 0x02051798 + mov ip, #0 + ldr r2, _020517D0 ; =ARM9_UNKNOWN_TABLE__NA_20A20B0 + b _020517C0 +_020517A4: + add r1, r2, ip, lsl #1 + ldrb r1, [r1, #1] + mov r3, ip, lsl #1 + cmp r0, r1 + ldreqb r0, [r2, r3] + bxeq lr + add ip, ip, #1 +_020517C0: + cmp ip, #0x100 + blt _020517A4 + mov r0, #0xff + bx lr + .align 2, 0 +_020517D0: .word ARM9_UNKNOWN_TABLE__NA_20A20B0 + arm_func_end sub_02051798 + + arm_func_start GetBagCapacity +GetBagCapacity: ; 0x020517D4 + ldr r1, _020517E0 ; =BAG_CAPACITY_TABLE + ldr r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_020517E0: .word BAG_CAPACITY_TABLE + arm_func_end GetBagCapacity + + arm_func_start GetBagCapacitySpecialEpisode +GetBagCapacitySpecialEpisode: ; 0x020517E4 + ldr r1, _020517F0 ; =BAG_CAPACITY_TABLE_SPECIAL_EPISODES + ldr r0, [r1, r0, lsl #2] + bx lr + .align 2, 0 +_020517F0: .word BAG_CAPACITY_TABLE_SPECIAL_EPISODES + arm_func_end GetBagCapacitySpecialEpisode + + arm_func_start GetRankUpEntry +GetRankUpEntry: ; 0x020517F4 + ldr r1, _02051800 ; =RANK_UP_TABLE + add r0, r1, r0, lsl #4 + bx lr + .align 2, 0 +_02051800: .word RANK_UP_TABLE + arm_func_end GetRankUpEntry + + arm_func_start sub_02051804 +sub_02051804: ; 0x02051804 + stmdb sp!, {r4, lr} + add ip, r0, #0x100 + ldrsh r4, [ip, #0x40] + mov ip, #0x14 + ldr lr, [sp, #8] + smlabb r4, r4, ip, r0 + cmp lr, #1 + moveq r1, #0 + stmeqia r4, {r1, r2} + streq r1, [r4, #8] + strne r3, [r4] + strne r2, [r4, #4] + strne r1, [r4, #8] + ldrneh r1, [sp, #0xc] + str lr, [r4, #0xc] + add r0, r0, #0x100 + str r1, [r4, #0x10] + ldrsh r1, [r0, #0x40] + add r1, r1, #1 + strh r1, [r0, #0x40] + ldmia sp!, {r4, pc} + arm_func_end sub_02051804 + + arm_func_start sub_02051858 +sub_02051858: ; 0x02051858 + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r0, #0x1c + mov r1, #0 + mov r5, r2 + mov r4, r3 + bl MemAlloc + str r0, [r7, #8] + str r6, [r7, #0xc] + mov r0, #1 + strb r0, [r7, #0x16] + str r5, [r7] + str r4, [r7, #4] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end sub_02051858 + + arm_func_start sub_02051894 +sub_02051894: ; 0x02051894 + stmdb sp!, {r4, lr} + mov r4, r0 + ldrb r0, [r4, #0x16] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + ldr r0, [r4, #8] + bl MemFree + mov r0, #0 + strb r0, [r4, #0x16] + ldmia sp!, {r4, pc} + arm_func_end sub_02051894 + + arm_func_start sub_020518BC +sub_020518BC: ; 0x020518BC + stmdb sp!, {r3, r4, lr} + sub sp, sp, #4 + mov r4, r0 + cmp r2, #0 + mov r0, #0 + bne _02051934 + cmp r1, #1 + bne _02051904 + ldr r1, _020519B0 ; =0x06018000 + ldr r2, _020519B4 ; =0x0400001C + str r1, [r4, #0x10] + str r0, [sp] + ldr r0, [r4, #8] + sub r3, r1, #0x9000 + mov r1, #1 + bl sub_0200B2C4 + mov r0, #1 + b _02051990 +_02051904: + cmp r1, #0 + bne _02051990 + ldr r1, _020519B8 ; =0x06010000 + ldr r2, _020519BC ; =0x04000018 + str r1, [r4, #0x10] + str r0, [sp] + ldr r0, [r4, #8] + sub r3, r1, #0x2000 + mov r1, #1 + bl sub_0200B2C4 + mov r0, #1 + b _02051990 +_02051934: + cmp r1, #1 + bne _02051964 + ldr r1, _020519C0 ; =0x06218000 + ldr r2, _020519C4 ; =0x0400101C + str r1, [r4, #0x10] + str r0, [sp] + ldr r0, [r4, #8] + sub r3, r1, #0x9000 + mov r1, #1 + bl sub_0200B2C4 + mov r0, #1 + b _02051990 +_02051964: + cmp r1, #0 + bne _02051990 + ldr r1, _020519C8 ; =0x06210000 + ldr r2, _020519CC ; =0x04001018 + str r1, [r4, #0x10] + str r0, [sp] + ldr r0, [r4, #8] + sub r3, r1, #0x2000 + mov r1, #1 + bl sub_0200B2C4 + mov r0, #1 +_02051990: + cmp r0, #0 + beq _020519A8 + ldr r0, [r4, #8] + bl sub_0200B3D4 + ldr r0, [r4, #8] + bl sub_0200B330 +_020519A8: + add sp, sp, #4 + ldmia sp!, {r3, r4, pc} + .align 2, 0 +_020519B0: .word 0x06018000 +_020519B4: .word 0x0400001C +_020519B8: .word 0x06010000 +_020519BC: .word 0x04000018 +_020519C0: .word 0x06218000 +_020519C4: .word 0x0400101C +_020519C8: .word 0x06210000 +_020519CC: .word 0x04001018 + arm_func_end sub_020518BC + + arm_func_start sub_020519D0 +sub_020519D0: ; 0x020519D0 + stmdb sp!, {r3, lr} + mov r0, #0x21c + mov r1, #0 + bl MemAlloc + ldr r2, _02051B3C ; =_020B09B0 + mov r1, #0x21c + str r0, [r2] + bl MemZero + mov r1, #0 + ldr r0, _02051B3C ; =_020B09B0 + str r1, [sp] + ldr r0, [r0] + mov r2, #0x100 + add r0, r0, #0x1a4 + mov r3, #0x5000000 + bl sub_0200A124 + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #0 + ldr r1, [r0] + mov r3, #0x100 + str r2, [sp] + add r0, r1, #0x1cc + add r1, r1, #0x1a4 + bl sub_0200A478 + mov r1, #0 + str r1, [sp] + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #0x100 + ldr r0, [r0] + ldr r3, _02051B40 ; =0x05000400 + add r0, r0, #0x1b8 + bl sub_0200A124 + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #0 + ldr r1, [r0] + mov r3, #0x100 + str r2, [sp] + add r0, r1, #0x1f4 + add r1, r1, #0x1b8 + bl sub_0200A478 + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #0 + ldr r0, [r0] + mov r3, r2 + add r1, r0, #0x1cc + bl sub_02051858 + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #1 + ldr r1, [r0] + mov r3, #0 + add r0, r1, #0x18 + add r1, r1, #0x1cc + bl sub_02051858 + ldr r0, _02051B3C ; =_020B09B0 + mov r1, #0 + ldr r0, [r0] + mov r2, r1 + bl sub_020518BC + ldr r0, _02051B3C ; =_020B09B0 + mov r1, #1 + ldr r0, [r0] + mov r2, #0 + add r0, r0, #0x18 + bl sub_020518BC + ldr r0, _02051B3C ; =_020B09B0 + ldr r1, [r0] + add r0, r1, #0x30 + add r1, r1, #0x1f4 + mov r2, #0 + mov r3, #1 + bl sub_02051858 + ldr r0, _02051B3C ; =_020B09B0 + mov r2, #1 + ldr r1, [r0] + mov r3, r2 + add r0, r1, #0x48 + add r1, r1, #0x1f4 + bl sub_02051858 + ldr r0, _02051B3C ; =_020B09B0 + mov r1, #0 + ldr r0, [r0] + mov r2, #1 + add r0, r0, #0x30 + bl sub_020518BC + ldr r0, _02051B3C ; =_020B09B0 + mov r1, #1 + ldr r0, [r0] + mov r2, r1 + add r0, r0, #0x48 + bl sub_020518BC + ldmia sp!, {r3, pc} + .align 2, 0 +_02051B3C: .word _020B09B0 +_02051B40: .word 0x05000400 + arm_func_end sub_020519D0 + + arm_func_start sub_02051B44 +sub_02051B44: ; 0x02051B44 + stmdb sp!, {r3, lr} + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + bl sub_02051894 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x18 + bl sub_02051894 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #8] + bl sub_0200B314 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x20] + bl sub_0200B314 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x30 + bl sub_02051894 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x48 + bl sub_02051894 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x38] + bl sub_0200B314 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x50] + bl sub_0200B314 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1cc + bl sub_0200A4C4 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1f4 + bl sub_0200A4C4 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1a4 + bl sub_0200A158 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1b8 + bl sub_0200A158 + ldr r0, _02051C20 ; =_020B09B0 + ldr r0, [r0] + bl MemFree + ldr r0, _02051C20 ; =_020B09B0 + mov r1, #0 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02051C20: .word _020B09B0 + arm_func_end sub_02051B44 + + arm_func_start sub_02051C24 +sub_02051C24: ; 0x02051C24 + stmdb sp!, {r4, r5, r6, r7, r8, lr} + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + cmp r0, #0 + ldmeqia sp!, {r4, r5, r6, r7, r8, pc} + mov r0, #8 + bl sub_0200302C + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #8] + bl sub_0200B340 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x38] + bl sub_0200B340 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x20] + bl sub_0200B340 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + ldr r0, [r0, #0x50] + bl sub_0200B340 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1cc + bl sub_0200A510 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1f4 + bl sub_0200A510 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1a4 + bl sub_0200A184 + ldr r0, _02051D64 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1b8 + bl sub_0200A184 + ldr r0, _02051D64 ; =_020B09B0 + mov r6, #0 + ldr r0, [r0] + mov r8, r6 + add r4, r0, #0x60 + add r0, r4, #0x100 + ldrsh r5, [r0, #0x40] + mov r7, #0x14 + b _02051D3C +_02051CE4: + smlabb r2, r6, r7, r4 + ldr r0, [r2, #4] + cmp r0, #0 + beq _02051D20 + ldr r1, [r2, #0xc] + cmp r1, #0 + bne _02051D10 + ldr r1, [r2, #8] + ldr r2, [r2] + bl ArrayCopy32 + b _02051D30 +_02051D10: + cmp r1, #1 + bne _02051D30 + bl MemFree + b _02051D30 +_02051D20: + ldr r1, [r2, #8] + ldr r2, [r2] + mov r0, r8 + bl ArrayFill32 +_02051D30: + add r0, r6, #1 + mov r0, r0, lsl #0x10 + mov r6, r0, asr #0x10 +_02051D3C: + cmp r6, r5 + blt _02051CE4 + ldr r0, _02051D64 ; =_020B09B0 + mov r2, #0 + ldr r1, [r0] + mov r0, #8 + add r1, r1, #0x100 + strh r2, [r1, #0xa0] + bl sub_020030FC + ldmia sp!, {r4, r5, r6, r7, r8, pc} + .align 2, 0 +_02051D64: .word _020B09B0 + arm_func_end sub_02051C24 + + arm_func_start sub_02051D68 +sub_02051D68: ; 0x02051D68 + ldr r2, _02051D84 ; =_020B09B0 + mov r1, #0x28 + ldr r2, [r2] + ldr ip, _02051D88 ; =sub_0200A504 + add r2, r2, #0x1cc + mla r0, r1, r0, r2 + bx ip + .align 2, 0 +_02051D84: .word _020B09B0 +_02051D88: .word sub_0200A504 + arm_func_end sub_02051D68 + + arm_func_start sub_02051D8C +sub_02051D8C: ; 0x02051D8C + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr ip, _02051DCC ; =_020B09B0 + str r1, [sp, #4] + ldr ip, [ip] + ldr lr, [sp, #0x10] + mov r1, #0x30 + mla ip, lr, r1, ip + mov r1, #0x18 + mla r1, r3, r1, ip + str r0, [sp] + ldr r0, [r1, #8] + add r1, sp, #0 + bl sub_0200B3FC + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051DCC: .word _020B09B0 + arm_func_end sub_02051D8C + + arm_func_start sub_02051DD0 +sub_02051DD0: ; 0x02051DD0 + stmdb sp!, {r3, lr} + ldr r3, _02051DF8 ; =_020B09B0 + mov r2, #0x30 + ldr ip, [r3] + mov r3, #0x18 + mla r2, r1, r2, ip + mla r1, r0, r3, r2 + ldr r0, [r1, #8] + bl sub_0200B3D4 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051DF8: .word _020B09B0 + arm_func_end sub_02051DD0 + + arm_func_start sub_02051DFC +sub_02051DFC: ; 0x02051DFC + ldr r3, _02051E1C ; =_020B09B0 + mov r2, #0x30 + ldr ip, [r3] + mov r3, #0x18 + mla r2, r1, r2, ip + mla r1, r0, r3, r2 + ldr r0, [r1, #8] + bx lr + .align 2, 0 +_02051E1C: .word _020B09B0 + arm_func_end sub_02051DFC + + arm_func_start sub_02051E20 +sub_02051E20: ; 0x02051E20 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + ldr ip, _02051E5C ; =_020B09B0 + str r1, [sp, #4] + ldr ip, [ip] + mov r1, #0x30 + mla ip, r3, r1, ip + mov r1, #0x18 + mla r1, r2, r1, ip + str r0, [sp] + ldr r0, [r1, #8] + add r1, sp, #0 + bl sub_0200B3C0 + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051E5C: .word _020B09B0 + arm_func_end sub_02051E20 + + arm_func_start sub_02051E60 +sub_02051E60: ; 0x02051E60 + stmdb sp!, {r3, lr} + ldr r3, _02051E88 ; =_020B09B0 + mov r2, #0x30 + ldr ip, [r3] + mov r3, #0x18 + mla r2, r1, r2, ip + mla r1, r0, r3, r2 + ldr r0, [r1, #8] + bl sub_0200B330 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051E88: .word _020B09B0 + arm_func_end sub_02051E60 + + arm_func_start GetBgRegionArea +GetBgRegionArea: ; 0x02051E8C + stmdb sp!, {r3, lr} + ldr ip, _02051EB4 ; =_020B09B0 + mov r3, #0x30 + ldr lr, [ip] + mov ip, #0x18 + mla r3, r2, r3, lr + mla r2, r1, ip, r3 + ldr r1, [r2, #0x10] + add r0, r1, r0 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051EB4: .word _020B09B0 + arm_func_end GetBgRegionArea + + arm_func_start sub_02051EB8 +sub_02051EB8: ; 0x02051EB8 + ldr r2, _02051ED0 ; =_020B09B0 + mov r1, #0x14 + ldr r2, [r2] + add r2, r2, #0x1a4 + mla r0, r1, r0, r2 + bx lr + .align 2, 0 +_02051ED0: .word _020B09B0 + arm_func_end sub_02051EB8 + + arm_func_start sub_02051ED4 +sub_02051ED4: ; 0x02051ED4 + ldr r2, _02051EEC ; =_020B09B0 + mov r1, #0x28 + ldr r2, [r2] + add r2, r2, #0x1cc + mla r0, r1, r0, r2 + bx lr + .align 2, 0 +_02051EEC: .word _020B09B0 + arm_func_end sub_02051ED4 + + arm_func_start sub_02051EF0 +sub_02051EF0: ; 0x02051EF0 + stmdb sp!, {r3, lr} + cmp r3, #0 + beq _02051F4C + ldrb lr, [r0] + mov ip, #0xff + ldrb lr, [r3, lr, lsl #2] + mul lr, r2, lr + mov lr, lr, lsr #8 + strb lr, [sp] + ldrb lr, [r0, #1] + add lr, r3, lr, lsl #2 + ldrb lr, [lr, #1] + mul lr, r2, lr + mov lr, lr, lsr #8 + strb lr, [sp, #1] + ldrb r0, [r0, #2] + add r0, r3, r0, lsl #2 + ldrb r0, [r0, #2] + mul r0, r2, r0 + mov r0, r0, lsr #8 + strb r0, [sp, #2] + strb ip, [sp, #3] + b _02051F84 +_02051F4C: + ldrb ip, [r0] + mov r3, #0xff + mul lr, ip, r2 + mov ip, lr, lsr #8 + strb ip, [sp] + ldrb ip, [r0, #1] + mul lr, ip, r2 + mov ip, lr, lsr #8 + strb ip, [sp, #1] + ldrb r0, [r0, #2] + mul r2, r0, r2 + mov r0, r2, lsr #8 + strb r0, [sp, #2] + strb r3, [sp, #3] +_02051F84: + ldr r0, _02051FB0 ; =_020B09B0 + mov r1, r1, lsl #0x10 + ldr r0, [r0] + ldr r2, [sp, #8] + add r3, r0, #0x1cc + mov r0, #0x28 + mla r0, r2, r0, r3 + add r2, sp, #0 + mov r1, r1, lsr #0x10 + bl sub_0200A590 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051FB0: .word _020B09B0 + arm_func_end sub_02051EF0 + + arm_func_start sub_02051FB4 +sub_02051FB4: ; 0x02051FB4 + stmdb sp!, {r3, lr} + sub sp, sp, #8 + str r3, [sp] + mov r3, #0 + str r3, [sp, #4] + ldr ip, _02051FEC ; =_020B09B0 + mov r3, r2 + mov r2, r1 + ldr ip, [ip] + mov r1, r0 + add r0, ip, #0x60 + bl sub_02051804 + add sp, sp, #8 + ldmia sp!, {r3, pc} + .align 2, 0 +_02051FEC: .word _020B09B0 + arm_func_end sub_02051FB4 + + arm_func_start sub_02051FF0 +sub_02051FF0: ; 0x02051FF0 + stmdb sp!, {r3, r4, r5, lr} + sub sp, sp, #8 + mov r3, r0 + mov r5, r1 + add r0, sp, #0 + mov r1, r3 + bl LoadFileFromRom + ldr r0, [sp] + bl GetAtSize + mov r4, r0 + cmp r4, #0 + ldrle r0, [sp] + strle r0, [r5] + ldrle r4, [sp, #4] + ble _02052054 + mov r1, #0 + bl MemAlloc + mov r1, r4 + ldr r2, [sp] + mov r4, r0 + bl DecompressAtNormalVeneer + str r4, [r5] + add r0, sp, #0 + ldr r4, [r4, #0xc] + bl UnloadFile +_02052054: + mov r0, r4 + add sp, sp, #8 + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02051FF0 + + arm_func_start sub_02052060 +sub_02052060: ; 0x02052060 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + ldr r4, _020522E4 ; =_020B09B0 + mov sl, r1 + ldr r7, [sp, #0x54] + ldr r4, [r4] + mov r1, #0x30 + mla r4, r7, r1, r4 + ldr fp, [sp, #0x50] + mov r1, #0x18 + mla r4, fp, r1, r4 + mov sb, r2 + add r1, sp, #0x28 + mov r2, #0xf + mov r8, r3 + ldr r5, [r4, #0x10] + bl sub_02051FF0 + mov r3, r0 + ldr r4, [sp, #0x28] + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + ldr r0, _020522E4 ; =_020B09B0 + ldr r2, [r4, #8] + ldr r0, [r0] + add r1, r5, sl + add r2, r4, r2 + add r0, r0, #0x60 + bl sub_02051804 + mov r0, #1 + str r0, [sp] + mov r1, #0 + ldr r0, _020522E4 ; =_020B09B0 + str r1, [sp, #4] + ldr r0, [r0] + mov r2, r4 + mov r3, r1 + add r0, r0, #0x60 + bl sub_02051804 + ldr r1, [sp, #0x28] + rsb r0, sb, #0x20 + mov r0, r0, lsl #0x10 + ldr r1, [r1, #0x10] + str r0, [sp, #0x18] + add r0, r4, r1 + str r0, [sp, #0xc] + mov r5, #0 + b _020521CC +_02052120: + mov r6, #0 + mov r0, r6 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + mov r1, sb, lsl #0x10 + add r0, r0, sb, lsl #6 + str r0, [sp, #0x10] + mov r0, r1, asr #0x10 + str r0, [sp, #0x14] +_02052144: + ldr r0, [sp, #0x10] + mov r1, r6, lsl #1 + ldrh r1, [r1, r0] + ldr r2, _020522E8 ; =0x00000FFF + mov r0, r6, lsl #0x10 + and r2, r1, r2 + mov r2, r2, lsl #0x10 + mov r1, r1, lsl #4 + mov r2, r2, lsr #0x10 + add r1, r8, r1, lsr #16 + add r2, r2, sl, lsr #5 + mov r1, r1, lsl #0x1c + mov r2, r2, lsl #0x10 + mov r1, r1, lsr #0x10 + orr r1, r1, r2, lsr #16 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x10 + ldr r1, [sp, #0x14] + mov r0, r0, asr #0x10 + str r7, [sp] + mov r3, fp + bl sub_02051D8C + ldr r0, [sp, #8] + add r6, r6, #1 + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [sp, #8] + cmp r0, #0x20 + blo _02052144 + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + add sb, sb, #1 +_020521CC: + ldr r0, [sp, #0x18] + cmp r5, r0, lsr #16 + blo _02052120 + mov r0, fp + mov r1, r7 + bl sub_02051E60 + ldr r0, [sp, #0x28] + ldr r3, _020522EC ; =ARM9_UNKNOWN_PTR__NA_20A2C84 + ldr r0, [r0] + add r2, sp, #0x1c + add r5, r4, r0 + mov r4, #0 + mov r1, #4 +_02052200: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052200 + mov r0, #0x28 + mul r6, r7, r0 + b _020522B0 +_0205221C: + add r3, sp, #0x1c + add r2, sp, #0x20 + mov r1, #4 +_02052228: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052228 + ldrb r0, [r5] + add r3, sp, #0x20 + add r2, sp, #0x24 + strb r0, [sp, #0x20] + ldrb r0, [r5, #1] + mov r1, #4 + strb r0, [sp, #0x21] + ldrb r0, [r5, #2] + strb r0, [sp, #0x22] + ldrb r0, [r5, #3] + strb r0, [sp, #0x23] +_02052264: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052264 + add r0, r4, r8, lsl #4 + cmp r0, #0x100 + bge _020522C8 + ldr r1, _020522E4 ; =_020B09B0 + mov r0, r0, lsl #0x10 + ldr r1, [r1] + mov r0, r0, asr #0x10 + add r3, r1, #0x1cc + mov r1, r0, lsl #0x10 + add r2, sp, #0x24 + add r0, r3, r6 + mov r1, r1, lsr #0x10 + bl sub_0200A590 + add r4, r4, #1 + add r5, r5, #4 +_020522B0: + ldr r0, [sp, #0x28] + ldr r1, [r0, #4] + mov r0, r1, asr #1 + add r0, r1, r0, lsr #30 + cmp r4, r0, asr #2 + blt _0205221C +_020522C8: + ldr r0, _020522E4 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1cc + add r0, r0, r6 + bl sub_0200A504 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020522E4: .word _020B09B0 +_020522E8: .word 0x00000FFF +_020522EC: .word ARM9_UNKNOWN_PTR__NA_20A2C84 + arm_func_end sub_02052060 + + arm_func_start sub_020522F0 +sub_020522F0: ; 0x020522F0 + stmdb sp!, {r4, lr} + mov r4, r1 + bl sub_02051FF0 + str r0, [r4, #8] + ldr r1, [r4] + ldr r0, [r1, #8] + add r0, r1, r0 + str r0, [r4, #4] + ldr r0, [r4] + ldr r0, [r0, #0x10] + add r0, r1, r0 + str r0, [r4, #0xc] + ldr r0, [r4] + ldr r0, [r0] + add r0, r1, r0 + str r0, [r4, #0x10] + ldmia sp!, {r4, pc} + arm_func_end sub_020522F0 + + arm_func_start sub_02052334 +sub_02052334: ; 0x02052334 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + bl MemFree + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + arm_func_end sub_02052334 + + arm_func_start LoadMonsterMd +LoadMonsterMd: ; 0x02052358 + stmdb sp!, {r3, lr} + ldr r0, _02052388 ; =_020B09C0 + ldr r1, _0205238C ; =_020A31B8 + mov r2, #0 + bl LoadFileFromRom + bl LoadM2nAndN2m + ldr r0, _02052390 ; =MONSTER_DATA_TABLE_PTR + ldr r1, [r0, #0xc] +#ifdef EUROPE + str r1, [r0, #8] +#else + str r1, [r0, #4] +#endif + add r1, r1, #8 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02052388: .word _020B09C0 +_0205238C: .word _020A31B8 +_02052390: .word MONSTER_DATA_TABLE_PTR + arm_func_end LoadMonsterMd + + arm_func_start GetNameRaw +GetNameRaw: ; 0x02052394 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + mov r0, r4 + mov r2, #0x14 + bl strncpy + ldmia sp!, {r4, pc} + arm_func_end GetNameRaw + + arm_func_start GetName +GetName: ; 0x020523D0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, r1 + mov r1, #0x258 + mov r4, r2 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r3, r0 + mov r0, r5 + mov r2, r4 + ldr r1, _02052414 ; =_020A31D4 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02052414: .word _020A31D4 + arm_func_end GetName + + arm_func_start SprintfStatic__02052418 +SprintfStatic__02052418: ; 0x02052418 + stmdb sp!, {r0, r1, r2, r3} + stmdb sp!, {r3, lr} + add r2, sp, #0xc + bic r2, r2, #3 + ldr r1, [sp, #0xc] + add r2, r2, #4 + bl vsprintf + ldmia sp!, {r3, lr} + add sp, sp, #0x10 + bx lr + arm_func_end SprintfStatic__02052418 + + arm_func_start GetNameWithGender +GetNameWithGender: ; 0x02052440 +#ifdef JAPAN + stmdb sp!, {r4, r5, r6, lr} +#else + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 +#endif + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r1, #0x258 + mov r4, r2 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldr r2, _020524F4 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + mov r3, r0 + smlabb r0, r5, r1, r2 + ldrb r0, [r0, #0x12] + cmp r0, #3 + cmpne r5, #0x1d + cmpne r5, #0x20 + bne _020524B0 + ldr r1, _020524F8 ; =_020A31D4 + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 +#ifdef JAPAN + ldmia sp!, {r4, r5, r6, pc} +#else + b _020524EC +#endif +_020524B0: + cmp r0, #2 + bne _020524D4 + ldr r1, _020524FC ; =_020A31E4 +#ifdef JAPAN + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 + ldmia sp!, {r4, r5, r6, pc} +_020524D4: + ldr r1, _02052838_JP ; =_020A45C8_JP + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 + ldmia sp!, {r4, r5, r6, pc} +#else + mov r5, #0xbe + mov r0, r6 + mov r2, r4 + str r5, [sp] + bl SprintfStatic__02052418 + b _020524EC +_020524D4: + ldr r1, _020524FC ; =_020A31E4 + mov r5, #0xbd + mov r0, r6 + mov r2, r4 + str r5, [sp] + bl SprintfStatic__02052418 +_020524EC: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} +#endif + .align 2, 0 +_020524F4: .word MONSTER_DATA_TABLE_PTR +_020524F8: .word _020A31D4 +_020524FC: .word _020A31E4 +#ifdef JAPAN +_02052838_JP: .word _020A45C8_JP +#endif + arm_func_end GetNameWithGender + + arm_func_start GetSpeciesString +GetSpeciesString: ; 0x02052500 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl GetBaseForm + cmp r0, #0xc9 + bne _02052684 + cmp r4, #0xca + moveq r4, #1 + beq _02052660 + cmp r4, #0xcb + moveq r4, #2 + beq _02052660 + cmp r4, #0xcc + moveq r4, #3 + beq _02052660 + cmp r4, #0xcd + moveq r4, #4 + beq _02052660 + cmp r4, #0xce + moveq r4, #5 + beq _02052660 + cmp r4, #0xcf + moveq r4, #6 + beq _02052660 + cmp r4, #0xd0 + moveq r4, #7 + beq _02052660 + cmp r4, #0xd1 + moveq r4, #8 + beq _02052660 + cmp r4, #0xd2 + moveq r4, #9 + beq _02052660 + cmp r4, #0xd3 + moveq r4, #0xa + beq _02052660 + cmp r4, #0xd4 + moveq r4, #0xb + beq _02052660 + cmp r4, #0xd5 + moveq r4, #0xc + beq _02052660 + cmp r4, #0xd6 + moveq r4, #0xd + beq _02052660 + cmp r4, #0xd7 + moveq r4, #0xe + beq _02052660 + cmp r4, #0xd8 + moveq r4, #0xf + beq _02052660 + cmp r4, #0xd9 + moveq r4, #0x10 + beq _02052660 + cmp r4, #0xda + moveq r4, #0x11 + beq _02052660 + cmp r4, #0xdb + moveq r4, #0x12 + beq _02052660 + cmp r4, #0xdc + moveq r4, #0x13 + beq _02052660 + cmp r4, #0xdd + moveq r4, #0x14 + beq _02052660 + cmp r4, #0xde + moveq r4, #0x15 + beq _02052660 + cmp r4, #0xdf + moveq r4, #0x16 + beq _02052660 + cmp r4, #0xe0 + moveq r4, #0x17 + beq _02052660 + cmp r4, #0xe1 + moveq r4, #0x18 + beq _02052660 + cmp r4, #0xe2 + moveq r4, #0x19 + beq _02052660 + cmp r4, #0xe3 + moveq r4, #0x1a + beq _02052660 + cmp r4, #0xe4 + moveq r4, #0x1b + movne r4, #0 +_02052660: + ldr r0, _020526B8 ; =0x000022E8 + bl StringFromId + ldr r1, _020526BC ; =UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE + mov r2, r0 + ldr r3, [r1, r4, lsl #2] + ldr r1, _020526C0 ; =_020A31F4 + mov r0, r5 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} +_02052684: + mov r0, r4 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r2, r0 + ldr r1, _020526C4 ; =_020A31FC + mov r0, r5 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#if defined(EUROPE) +_020526B8: .word 0x000022EA +#elif defined(JAPAN) +_020526B8: .word 0x00001659 +#else +_020526B8: .word 0x000022E8 +#endif +_020526BC: .word UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE +_020526C0: .word _020A31F4 +_020526C4: .word _020A31FC + arm_func_end GetSpeciesString + + arm_func_start GetNameString +GetNameString: ; 0x020526C8 + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldmia sp!, {r3, pc} + arm_func_end GetNameString + + arm_func_start GetSpriteIndex__020526EC +GetSpriteIndex__020526EC: ; 0x020526EC + ldr r2, _02052704 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrh r0, [r0, #0x10] + bx lr + .align 2, 0 +_02052704: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetSpriteIndex__020526EC + + arm_func_start GetSpriteIndex__02052708 +GetSpriteIndex__02052708: ; 0x02052708 + ldr r2, _02052720 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrh r0, [r0, #0x10] + bx lr + .align 2, 0 +_02052720: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetSpriteIndex__02052708 + + arm_func_start GetSpriteIndex__02052724 +GetSpriteIndex__02052724: ; 0x02052724 + ldr r2, _0205273C ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrh r0, [r0, #0x10] + bx lr + .align 2, 0 +_0205273C: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetSpriteIndex__02052724 + + arm_func_start GetDexNumber +GetDexNumber: ; 0x02052740 + ldr r2, _02052758 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrsh r0, [r0, #4] + bx lr + .align 2, 0 +_02052758: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetDexNumber + + arm_func_start GetCategoryString +GetCategoryString: ; 0x0205275C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + bl AllocateTemp1024ByteBufferFromPool + mov r4, r0 + mov r0, r5 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x79 + add r0, r0, #0x2400 +#elif defined(JAPAN) + add r0, r1, #0x1a40 +#else + add r0, r1, #0x77 + add r0, r0, #0x2400 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r2, r0 + ldr r1, _020527A4 ; =_020A3200 + mov r0, r4 + bl SprintfStatic__02052418 + mov r0, r4 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_020527A4: .word _020A3200 + arm_func_end GetCategoryString + + arm_func_start GetMonsterGender +GetMonsterGender: ; 0x020527A8 + ldr r2, _020527C0 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrb r0, [r0, #0x12] + bx lr + .align 2, 0 +_020527C0: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetMonsterGender + + arm_func_start GetBodySize +GetBodySize: ; 0x020527C4 + ldr r2, _020527DC ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrb r0, [r0, #0x13] + bx lr + .align 2, 0 +_020527DC: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetBodySize + + arm_func_start GetSpriteSize +GetSpriteSize: ; 0x020527E0 + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f + mov r0, r1, lsl #0x10 + ldr r2, _02052818 ; =MONSTER_SPRITE_DATA + mov r0, r0, asr #0x10 + ldrb r0, [r2, r0, lsl #1] + cmp r0, #0 + moveq r0, #0 + ldmeqia sp!, {r3, pc} + cmp r0, #6 + movls r0, #6 + ldrhib r0, [r2, r1, lsl #1] + ldmia sp!, {r3, pc} + .align 2, 0 +_02052818: .word MONSTER_SPRITE_DATA + arm_func_end GetSpriteSize + + arm_func_start GetSpriteFileSize +GetSpriteFileSize: ; 0x0205281C + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f + ldr r0, _02052838 ; =_020A2D09 + ldrb r0, [r0, r1, lsl #1] + mov r0, r0, lsl #9 + ldmia sp!, {r3, pc} + .align 2, 0 +_02052838: .word _020A2D09 + arm_func_end GetSpriteFileSize + + arm_func_start GetShadowSize +GetShadowSize: ; 0x0205283C + ldr r2, _02052854 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrb r0, [r0, #0x2e] + bx lr + .align 2, 0 +_02052854: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetShadowSize + + arm_func_start GetSpeedStatus +GetSpeedStatus: ; 0x02052858 + ldr r2, _02052870 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + smlabb r0, r0, r1, r2 + ldrsh r0, [r0, #6] + bx lr + .align 2, 0 +_02052870: .word MONSTER_DATA_TABLE_PTR + arm_func_end GetSpeedStatus diff --git a/asm/overlay_29_022F73EC.s b/asm/overlay_29_022F73EC.s new file mode 100644 index 00000000..992ab3a4 --- /dev/null +++ b/asm/overlay_29_022F73EC.s @@ -0,0 +1,208 @@ + .include "asm/macros.inc" + .include "overlay_29_022F73EC.inc" + + .text + + arm_func_start GetKecleonIdToSpawnByFloor +GetKecleonIdToSpawnByFloor: ; 0x022F73EC + stmdb sp!, {r3, lr} + bl FloorNumberIsEven + cmp r0, #0 + ldrne r0, _022F7404 ; =0x000003D7 + ldreq r0, _022F7408 ; =0x0000017F + ldmia sp!, {r3, pc} + .align 2, 0 +_022F7404: .word 0x000003D7 +_022F7408: .word 0x0000017F + arm_func_end GetKecleonIdToSpawnByFloor + + arm_func_start StoreSpriteFileIndexBothGenders +StoreSpriteFileIndexBothGenders: ; 0x022F740C + stmdb sp!, {r3, r4, r5, r6, r7, lr} + ldr r2, _022F74D0 ; =DUNGEON_PTR + mov r7, r0 + ldr r2, [r2] + mov r6, r1 +#ifdef JAPAN + add r1, r2, #0x870 + add r5, r1, #0x19000 +#else + add r1, r2, #0x114 + add r5, r1, #0x19800 +#endif + bl GetSpriteIndex__020526EC + mov r4, r0 + mov r1, r7, lsl #1 + mov r0, r7 + strh r6, [r5, r1] + bl GetMonsterGender + cmp r0, #3 + ldmeqia sp!, {r3, r4, r5, r6, r7, pc} + cmp r7, #0x258 + bge _022F7490 + add r6, r7, #0x258 + mov r1, r6, lsl #0x10 + mov r0, r7 + mov r1, r1, asr #0x10 + bl GendersEqualNotGenderless + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetSpriteIndex__020526EC + cmp r4, r0 + moveq r0, r7, lsl #1 + ldreqsh r1, [r5, r0] + moveq r0, r6, lsl #1 + streqh r1, [r5, r0] + ldmia sp!, {r3, r4, r5, r6, r7, pc} +_022F7490: + sub r6, r7, #0x258 + mov r1, r6, lsl #0x10 + mov r0, r7 + mov r1, r1, asr #0x10 + bl GendersEqualNotGenderless + cmp r0, #0 + ldmneia sp!, {r3, r4, r5, r6, r7, pc} + mov r0, r6, lsl #0x10 + mov r0, r0, asr #0x10 + bl GetSpriteIndex__020526EC + cmp r4, r0 + moveq r0, r7, lsl #1 + ldreqsh r1, [r5, r0] + moveq r0, r6, lsl #1 + streqh r1, [r5, r0] + ldmia sp!, {r3, r4, r5, r6, r7, pc} + .align 2, 0 +_022F74D0: .word DUNGEON_PTR + arm_func_end StoreSpriteFileIndexBothGenders + + arm_func_start LoadMonsterSpriteInner +LoadMonsterSpriteInner: ; 0x022F74D4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r1, _022F75C4 ; =DUNGEON_PTR + mov r6, r0 +#ifdef JAPAN + ldr r1, [r1] + add r1, r1, r6, lsl #1 + add r1, r1, #0x19800 + ldrsh r1, [r1, #0x70] +#else + ldr r2, [r1] + ldr r1, _022F75C8 ; =0x00019914 + add r2, r2, r6, lsl #1 + ldrsh r1, [r2, r1] +#endif + cmp r1, #0 + bne _022F75BC + bl GetSpriteIndex__020526EC + mov r4, r0 + mov r0, r6 + bl IsShaymin + cmp r0, #0 + beq _022F756C + mov r0, r6 + bl IsShaymin + cmp r0, #0 + mov r0, r6 + movne r5, #0 + bl GetSpriteFileSize + mov r1, #0 + bl MemAlloc + ldr r2, _022F75CC ; =ov29_0237C9B0 + mov r1, #1 + str r0, [r2, r5, lsl #2] + str r1, [sp] + ldr r0, _022F75D0 ; =WAN_TABLE + ldr r3, [r2, r5, lsl #2] + ldr r0, [r0] + mov r2, r4 + mov r1, #0 + bl LoadWanTableEntryFromPackUseProvidedMemory + mov r1, r0 + mov r0, r6 + bl StoreSpriteFileIndexBothGenders + b _022F7598 +_022F756C: + mov r1, #1 + ldr r0, _022F75D0 ; =WAN_TABLE + str r1, [sp] + mov r1, #0 + ldr r0, [r0] + mov r2, r4 + mov r3, r1 + bl LoadWanTableEntryFromPack + mov r1, r0 + mov r0, r6 + bl StoreSpriteFileIndexBothGenders +_022F7598: + mov r1, r4 + mov r0, #0 + bl DirectoryFileMngr_GetDirectoryFileSize + ldr r1, _022F75C4 ; =DUNGEON_PTR + ldr r1, [r1] + add r1, r1, #0x2c000 +#ifdef JAPAN + ldr r2, [r1, #0xa68] + add r0, r2, r0 + str r0, [r1, #0xa68] +#else + ldr r2, [r1, #0xb0c] + add r0, r2, r0 + str r0, [r1, #0xb0c] +#endif +_022F75BC: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_022F75C4: .word DUNGEON_PTR +#ifndef JAPAN +_022F75C8: .word 0x00019914 +#endif +_022F75CC: .word ov29_0237C9B0 +_022F75D0: .word WAN_TABLE + arm_func_end LoadMonsterSpriteInner + + arm_func_start SwapMonsterWanFileIndex +SwapMonsterWanFileIndex: ; 0x022F75D4 + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 + ldr r2, _022F764C ; =DUNGEON_PTR + mov r5, r1 + ldr r1, [r2] + mov r6, r0 +#ifdef JAPAN + add r1, r1, #0x870 + mov r0, r5 + add r4, r1, #0x19000 +#else + add r1, r1, #0x114 + mov r0, r5 + add r4, r1, #0x19800 +#endif + bl GetSpriteIndex__020526EC + mov r1, #1 + str r1, [sp] + mov r1, r6, lsl #1 + ldr r2, _022F7650 ; =WAN_TABLE + mov r3, r0 + ldrsh r1, [r4, r1] + ldr r0, [r2] + mov r2, #0 + bl ReplaceWanFromBinFile + mov r1, r0 + mov r0, r5 + bl StoreSpriteFileIndexBothGenders + mov r3, r6, lsl #1 + ldrsh r2, [r4, r3] + mov r1, r5, lsl #1 + mov r0, #0 + strh r2, [r4, r1] + strh r0, [r4, r3] + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} + .align 2, 0 +_022F764C: .word DUNGEON_PTR +_022F7650: .word WAN_TABLE + arm_func_end SwapMonsterWanFileIndex diff --git a/asm/overlay_29_022F7388.s b/asm/overlay_29_022F7768.s similarity index 84% rename from asm/overlay_29_022F7388.s rename to asm/overlay_29_022F7768.s index 6e519eca..fa904891 100644 --- a/asm/overlay_29_022F7388.s +++ b/asm/overlay_29_022F7768.s @@ -1,345 +1,8 @@ .include "asm/macros.inc" - .include "overlay_29_022F7388.inc" + .include "overlay_29_022F7768.inc" .text - arm_func_start DungeonGetSpriteIndex -DungeonGetSpriteIndex: ; 0x022F7388 -#ifdef JAPAN - ldr r1, _022F73A0 ; =DUNGEON_PTR - ldr r1, [r1] - add r0, r1, r0, lsl #1 - add r0, r0, #0x19800 - ldrsh r0, [r0, #0x70] -#else - ldr r2, _022F73A0 ; =DUNGEON_PTR - ldr r1, _022F73A4 ; =0x00019914 - ldr r2, [r2] - add r0, r2, r0, lsl #1 - ldrsh r0, [r0, r1] -#endif - bx lr - .align 2, 0 -_022F73A0: .word DUNGEON_PTR -#ifndef JAPAN -_022F73A4: .word 0x00019914 -#endif - arm_func_end DungeonGetSpriteIndex - - arm_func_start JoinedAtRangeCheck2Veneer -JoinedAtRangeCheck2Veneer: ; 0x022F73A8 - ldr ip, _022F73B0 ; =JoinedAtRangeCheck2 - bx ip - .align 2, 0 -_022F73B0: .word JoinedAtRangeCheck2 - arm_func_end JoinedAtRangeCheck2Veneer - - arm_func_start FloorNumberIsEven -FloorNumberIsEven: ; 0x022F73B4 - ldr r0, _022F73E8 ; =DUNGEON_PTR - ldr r1, [r0] - ldrb r0, [r1, #0x748] - cmp r0, #0x5b - ldreqb r0, [r1, #0x749] - cmpeq r0, #0xa - moveq r0, #0 - bxeq lr - ldrb r0, [r1, #0x749] - tst r0, #1 - moveq r0, #1 - movne r0, #0 - bx lr - .align 2, 0 -_022F73E8: .word DUNGEON_PTR - arm_func_end FloorNumberIsEven - - arm_func_start GetKecleonIdToSpawnByFloor -GetKecleonIdToSpawnByFloor: ; 0x022F73EC - stmdb sp!, {r3, lr} - bl FloorNumberIsEven - cmp r0, #0 - ldrne r0, _022F7404 ; =0x000003D7 - ldreq r0, _022F7408 ; =0x0000017F - ldmia sp!, {r3, pc} - .align 2, 0 -_022F7404: .word 0x000003D7 -_022F7408: .word 0x0000017F - arm_func_end GetKecleonIdToSpawnByFloor - - arm_func_start StoreSpriteFileIndexBothGenders -StoreSpriteFileIndexBothGenders: ; 0x022F740C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - ldr r2, _022F74D0 ; =DUNGEON_PTR - mov r7, r0 - ldr r2, [r2] - mov r6, r1 -#ifdef JAPAN - add r1, r2, #0x870 - add r5, r1, #0x19000 -#else - add r1, r2, #0x114 - add r5, r1, #0x19800 -#endif - bl GetSpriteIndex__020526EC - mov r4, r0 - mov r1, r7, lsl #1 - mov r0, r7 - strh r6, [r5, r1] - bl GetMonsterGender - cmp r0, #3 - ldmeqia sp!, {r3, r4, r5, r6, r7, pc} - cmp r7, #0x258 - bge _022F7490 - add r6, r7, #0x258 - mov r1, r6, lsl #0x10 - mov r0, r7 - mov r1, r1, asr #0x10 - bl GendersEqualNotGenderless - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetSpriteIndex__020526EC - cmp r4, r0 - moveq r0, r7, lsl #1 - ldreqsh r1, [r5, r0] - moveq r0, r6, lsl #1 - streqh r1, [r5, r0] - ldmia sp!, {r3, r4, r5, r6, r7, pc} -_022F7490: - sub r6, r7, #0x258 - mov r1, r6, lsl #0x10 - mov r0, r7 - mov r1, r1, asr #0x10 - bl GendersEqualNotGenderless - cmp r0, #0 - ldmneia sp!, {r3, r4, r5, r6, r7, pc} - mov r0, r6, lsl #0x10 - mov r0, r0, asr #0x10 - bl GetSpriteIndex__020526EC - cmp r4, r0 - moveq r0, r7, lsl #1 - ldreqsh r1, [r5, r0] - moveq r0, r6, lsl #1 - streqh r1, [r5, r0] - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_022F74D0: .word DUNGEON_PTR - arm_func_end StoreSpriteFileIndexBothGenders - - arm_func_start LoadMonsterSpriteInner -LoadMonsterSpriteInner: ; 0x022F74D4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r1, _022F75C4 ; =DUNGEON_PTR - mov r6, r0 -#ifdef JAPAN - ldr r1, [r1] - add r1, r1, r6, lsl #1 - add r1, r1, #0x19800 - ldrsh r1, [r1, #0x70] -#else - ldr r2, [r1] - ldr r1, _022F75C8 ; =0x00019914 - add r2, r2, r6, lsl #1 - ldrsh r1, [r2, r1] -#endif - cmp r1, #0 - bne _022F75BC - bl GetSpriteIndex__020526EC - mov r4, r0 - mov r0, r6 - bl IsShaymin - cmp r0, #0 - beq _022F756C - mov r0, r6 - bl IsShaymin - cmp r0, #0 - mov r0, r6 - movne r5, #0 - bl GetSpriteFileSize - mov r1, #0 - bl MemAlloc - ldr r2, _022F75CC ; =ov29_0237C9B0 - mov r1, #1 - str r0, [r2, r5, lsl #2] - str r1, [sp] - ldr r0, _022F75D0 ; =WAN_TABLE - ldr r3, [r2, r5, lsl #2] - ldr r0, [r0] - mov r2, r4 - mov r1, #0 - bl LoadWanTableEntryFromPackUseProvidedMemory - mov r1, r0 - mov r0, r6 - bl StoreSpriteFileIndexBothGenders - b _022F7598 -_022F756C: - mov r1, #1 - ldr r0, _022F75D0 ; =WAN_TABLE - str r1, [sp] - mov r1, #0 - ldr r0, [r0] - mov r2, r4 - mov r3, r1 - bl LoadWanTableEntryFromPack - mov r1, r0 - mov r0, r6 - bl StoreSpriteFileIndexBothGenders -_022F7598: - mov r1, r4 - mov r0, #0 - bl DirectoryFileMngr_GetDirectoryFileSize - ldr r1, _022F75C4 ; =DUNGEON_PTR - ldr r1, [r1] - add r1, r1, #0x2c000 -#ifdef JAPAN - ldr r2, [r1, #0xa68] - add r0, r2, r0 - str r0, [r1, #0xa68] -#else - ldr r2, [r1, #0xb0c] - add r0, r2, r0 - str r0, [r1, #0xb0c] -#endif -_022F75BC: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_022F75C4: .word DUNGEON_PTR -#ifndef JAPAN -_022F75C8: .word 0x00019914 -#endif -_022F75CC: .word ov29_0237C9B0 -_022F75D0: .word WAN_TABLE - arm_func_end LoadMonsterSpriteInner - - arm_func_start SwapMonsterWanFileIndex -SwapMonsterWanFileIndex: ; 0x022F75D4 - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 - ldr r2, _022F764C ; =DUNGEON_PTR - mov r5, r1 - ldr r1, [r2] - mov r6, r0 -#ifdef JAPAN - add r1, r1, #0x870 - mov r0, r5 - add r4, r1, #0x19000 -#else - add r1, r1, #0x114 - mov r0, r5 - add r4, r1, #0x19800 -#endif - bl GetSpriteIndex__020526EC - mov r1, #1 - str r1, [sp] - mov r1, r6, lsl #1 - ldr r2, _022F7650 ; =WAN_TABLE - mov r3, r0 - ldrsh r1, [r4, r1] - ldr r0, [r2] - mov r2, #0 - bl ReplaceWanFromBinFile - mov r1, r0 - mov r0, r5 - bl StoreSpriteFileIndexBothGenders - mov r3, r6, lsl #1 - ldrsh r2, [r4, r3] - mov r1, r5, lsl #1 - mov r0, #0 - strh r2, [r4, r1] - strh r0, [r4, r3] - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} - .align 2, 0 -_022F764C: .word DUNGEON_PTR -_022F7650: .word WAN_TABLE - arm_func_end SwapMonsterWanFileIndex - - arm_func_start LoadMonsterSprite -LoadMonsterSprite: ; 0x022F7654 - stmdb sp!, {r4, lr} - mov r4, r0 - cmp r1, #0 - bne _022F769C - ldr r0, _022F7748 ; =0xFFFFFE5E - add r0, r4, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #3 - bhi _022F769C - ldr r0, _022F774C ; =DUNGEON_PTR - ldr r0, [r0] -#ifdef JAPAN - add r0, r0, #0x3d00 - ldrsh r0, [r0, #0x96] -#else - add r0, r0, #0x3e00 - ldrsh r0, [r0, #0x3a] -#endif - bl LoadMonsterSpriteInner - ldmia sp!, {r4, pc} -_022F769C: - mov r0, r4 - bl LoadMonsterSpriteInner - ldr r1, _022F7750 ; =0x0000017B - cmp r4, r1 - cmpne r4, #0x17c - addne r0, r1, #2 - cmpne r4, r0 - addne r0, r1, #3 - cmpne r4, r0 - beq _022F76E4 - ldr r0, _022F7754 ; =0xFFFFFC2D - add r0, r4, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #3 - bhi _022F7704 -_022F76E4: - ldr r0, _022F7750 ; =0x0000017B - bl LoadMonsterSpriteInner - mov r0, #0x17c - bl LoadMonsterSpriteInner - ldr r0, _022F7758 ; =0x0000017D - bl LoadMonsterSpriteInner - ldr r0, _022F775C ; =0x0000017E - bl LoadMonsterSpriteInner -_022F7704: - cmp r4, #0x1cc - ldrne r0, _022F7760 ; =0x000001CD - cmpne r4, r0 - beq _022F7734 - ldr r0, _022F7764 ; =0xFFFFFBDC - add r0, r4, r0 - mov r0, r0, lsl #0x10 - mov r0, r0, asr #0x10 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - cmp r0, #1 - ldmhiia sp!, {r4, pc} -_022F7734: - mov r0, #0x1cc - bl LoadMonsterSpriteInner - ldr r0, _022F7760 ; =0x000001CD - bl LoadMonsterSpriteInner - ldmia sp!, {r4, pc} - .align 2, 0 -_022F7748: .word 0xFFFFFE5E -_022F774C: .word DUNGEON_PTR -_022F7750: .word 0x0000017B -_022F7754: .word 0xFFFFFC2D -_022F7758: .word 0x0000017D -_022F775C: .word 0x0000017E -_022F7760: .word 0x000001CD -_022F7764: .word 0xFFFFFBDC - arm_func_end LoadMonsterSprite - arm_func_start DeleteMonsterSpriteFile DeleteMonsterSpriteFile: ; 0x022F7768 stmdb sp!, {r3, r4, r5, lr} diff --git a/include/main_02051760.h b/include/main_02051760.h new file mode 100644 index 00000000..13c79ac3 --- /dev/null +++ b/include/main_02051760.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_02051760_H +#define PMDSKY_MAIN_02051760_H + +u32 JoinedAtRangeCheck2(u8 joined_at); + +#endif //PMDSKY_MAIN_02051760_H diff --git a/include/overlay_29_022F7364.h b/include/overlay_29_022F7364.h index afe17448..befda0cc 100644 --- a/include/overlay_29_022F7364.h +++ b/include/overlay_29_022F7364.h @@ -5,5 +5,7 @@ // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__022F7364(struct entity *entity); +s16 DungeonGetSpriteIndex(s16 monster_id); +u32 JoinedAtRangeCheck2Veneer(u8 joined_at); #endif //PMDSKY_OVERLAY_29_022F7364_H diff --git a/include/overlay_29_022F73B4.h b/include/overlay_29_022F73B4.h new file mode 100644 index 00000000..7b24fa3c --- /dev/null +++ b/include/overlay_29_022F73B4.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_OVERLAY_29_022F73B4_H +#define PMDSKY_OVERLAY_29_022F73B4_H + +u32 FloorNumberIsEven(); + +#endif //PMDSKY_OVERLAY_29_022F73B4_H diff --git a/include/overlay_29_022F7654.h b/include/overlay_29_022F7654.h new file mode 100644 index 00000000..90faf2f9 --- /dev/null +++ b/include/overlay_29_022F7654.h @@ -0,0 +1,7 @@ +#ifndef PMDSKY_OVERLAY_29_022F7654_H +#define PMDSKY_OVERLAY_29_022F7654_H +#include "enums.h" + +void LoadMonsterSprite(s16 monster_id, u8 skip_deoxys_check); + +#endif //PMDSKY_OVERLAY_29_022F7654_H diff --git a/main.lsf b/main.lsf index d891e526..84465553 100644 --- a/main.lsf +++ b/main.lsf @@ -57,6 +57,8 @@ Static main Object asm/main_0204B018.o Object src/number_util.o Object asm/main_02051098.o + Object src/main_02051760.o + Object asm/main_02051788.o Object src/main_02052874.o Object asm/main_02052890.o Object src/main_02052950.o @@ -330,7 +332,10 @@ Overlay OVY_29 Object src/overlay_29_022F62A8.o Object asm/overlay_29_022F62CC.o Object src/overlay_29_022F7364.o - Object asm/overlay_29_022F7388.o + Object src/overlay_29_022F73B4.o + Object asm/overlay_29_022F73EC.o + Object src/overlay_29_022F7654.o + Object asm/overlay_29_022F7768.o Object src/dungeon_misc.o Object asm/overlay_29_022F9194.o Object src/overlay_29_022F9720.o diff --git a/src/main_02051760.c b/src/main_02051760.c new file mode 100644 index 00000000..bef2f5bb --- /dev/null +++ b/src/main_02051760.c @@ -0,0 +1,7 @@ +#include "main_02051760.h" +#include "enums.h" + +u32 JoinedAtRangeCheck2(u8 joined_at) { + return joined_at == DUNGEON_BEACH || (joined_at >= DUNGEON_DUMMY_0xEC && DUNGEON_DUMMY_0xF0 >= joined_at); +} + diff --git a/src/overlay_29_022F7364.c b/src/overlay_29_022F7364.c index 42629658..63427d17 100644 --- a/src/overlay_29_022F7364.c +++ b/src/overlay_29_022F7364.c @@ -1,4 +1,6 @@ #include "overlay_29_022F7364.h" +#include "dungeon.h" +#include "main_02051760.h" bool8 EntityIsValid__022F7364(struct entity *entity) { @@ -7,3 +9,12 @@ bool8 EntityIsValid__022F7364(struct entity *entity) return entity->type != ENTITY_NOTHING; } + +extern struct dungeon *DUNGEON_PTR[]; +s16 DungeonGetSpriteIndex(s16 monster_id) { + return DUNGEON_PTR[0]->sprite_indexes[monster_id]; +} + +u32 JoinedAtRangeCheck2Veneer(u8 joined_at) { + return JoinedAtRangeCheck2(joined_at); +} diff --git a/src/overlay_29_022F73B4.c b/src/overlay_29_022F73B4.c new file mode 100644 index 00000000..09779c2d --- /dev/null +++ b/src/overlay_29_022F73B4.c @@ -0,0 +1,11 @@ +#include "overlay_29_022F73B4.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR[]; + +// This is supposed to be a bool. Trying to put it as a u8 makes it not match. +u32 FloorNumberIsEven() { + struct dungeon *dungeon = DUNGEON_PTR[0]; + if (dungeon->id == DUNGEON_LABYRINTH_CAVE && dungeon->floor == 10) return 0; + return (dungeon->floor & 1) == 0; +} diff --git a/src/overlay_29_022F7654.c b/src/overlay_29_022F7654.c new file mode 100644 index 00000000..dcbd5fc7 --- /dev/null +++ b/src/overlay_29_022F7654.c @@ -0,0 +1,22 @@ +#include "overlay_29_022F7654.h" +#include "dungeon.h" + +extern struct dungeon *DUNGEON_PTR[]; +extern void LoadMonsterSpriteInner(s16 monster_id); +void LoadMonsterSprite(s16 monster_id, u8 skip_deoxys_check) +{ + if (!skip_deoxys_check && (u16)(s16)(monster_id - MONSTER_DEOXYS_NORMAL) <= 3) LoadMonsterSpriteInner((s16)DUNGEON_PTR[0]->deoxys_floor_id); + else { + LoadMonsterSpriteInner(monster_id); + if (monster_id == MONSTER_CASTFORM_NORMAL || monster_id == MONSTER_CASTFORM_SNOWY || monster_id == MONSTER_CASTFORM_SUNNY || monster_id == MONSTER_CASTFORM_RAINY || 3 >= (u16)(s16)(monster_id - MONSTER_CASTFORM_NORMAL_SECONDARY)) { + LoadMonsterSpriteInner(MONSTER_CASTFORM_NORMAL); + LoadMonsterSpriteInner(MONSTER_CASTFORM_SNOWY); + LoadMonsterSpriteInner(MONSTER_CASTFORM_SUNNY); + LoadMonsterSpriteInner(MONSTER_CASTFORM_RAINY); + } + if (monster_id == MONSTER_CHERRIM_OVERCAST || monster_id == MONSTER_CHERRIM_SUNSHINE || (u16)(s16)(monster_id - MONSTER_CHERRIM_OVERCAST_SECONDARY) <= 1) { + LoadMonsterSpriteInner(MONSTER_CHERRIM_OVERCAST); + LoadMonsterSpriteInner(MONSTER_CHERRIM_SUNSHINE); + } + } +} From 9296aecb9b9349bd2c564e7d81b045a3a85c3190 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Fri, 18 Jul 2025 23:49:04 -0400 Subject: [PATCH 2/3] Switched from u32 to bool32 where needed --- include/main_02051760.h | 4 +++- include/overlay_29_022F7364.h | 3 ++- src/main_02051760.c | 3 ++- src/overlay_29_022F7364.c | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/include/main_02051760.h b/include/main_02051760.h index 13c79ac3..56b725d4 100644 --- a/include/main_02051760.h +++ b/include/main_02051760.h @@ -1,6 +1,8 @@ #ifndef PMDSKY_MAIN_02051760_H #define PMDSKY_MAIN_02051760_H -u32 JoinedAtRangeCheck2(u8 joined_at); +#include "util.h" + +bool32 JoinedAtRangeCheck2(u8 joined_at); #endif //PMDSKY_MAIN_02051760_H diff --git a/include/overlay_29_022F7364.h b/include/overlay_29_022F7364.h index befda0cc..cd41fe04 100644 --- a/include/overlay_29_022F7364.h +++ b/include/overlay_29_022F7364.h @@ -2,10 +2,11 @@ #define PMDSKY_OVERLAY_29_022F7364_H #include "dungeon_mode.h" +#include "util.h" // Checks if an entity pointer points to a valid entity (not entity type 0, which represents no entity). bool8 EntityIsValid__022F7364(struct entity *entity); s16 DungeonGetSpriteIndex(s16 monster_id); -u32 JoinedAtRangeCheck2Veneer(u8 joined_at); +bool32 JoinedAtRangeCheck2Veneer(u8 joined_at); #endif //PMDSKY_OVERLAY_29_022F7364_H diff --git a/src/main_02051760.c b/src/main_02051760.c index bef2f5bb..194c8cd7 100644 --- a/src/main_02051760.c +++ b/src/main_02051760.c @@ -1,7 +1,8 @@ #include "main_02051760.h" #include "enums.h" +#include "util.h" -u32 JoinedAtRangeCheck2(u8 joined_at) { +bool32 JoinedAtRangeCheck2(u8 joined_at) { return joined_at == DUNGEON_BEACH || (joined_at >= DUNGEON_DUMMY_0xEC && DUNGEON_DUMMY_0xF0 >= joined_at); } diff --git a/src/overlay_29_022F7364.c b/src/overlay_29_022F7364.c index 63427d17..e5f481b3 100644 --- a/src/overlay_29_022F7364.c +++ b/src/overlay_29_022F7364.c @@ -1,5 +1,6 @@ #include "overlay_29_022F7364.h" #include "dungeon.h" +#include "util.h" #include "main_02051760.h" bool8 EntityIsValid__022F7364(struct entity *entity) @@ -15,6 +16,6 @@ s16 DungeonGetSpriteIndex(s16 monster_id) { return DUNGEON_PTR[0]->sprite_indexes[monster_id]; } -u32 JoinedAtRangeCheck2Veneer(u8 joined_at) { +bool32 JoinedAtRangeCheck2Veneer(u8 joined_at) { return JoinedAtRangeCheck2(joined_at); } From 18792de53c2fb9232479b060659669302168b185 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Fri, 18 Jul 2025 23:52:09 -0400 Subject: [PATCH 3/3] Switched FloorNumberIsEven from u32 to bool32 --- include/overlay_29_022F73B4.h | 4 +++- src/overlay_29_022F73B4.c | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/overlay_29_022F73B4.h b/include/overlay_29_022F73B4.h index 7b24fa3c..b47b8313 100644 --- a/include/overlay_29_022F73B4.h +++ b/include/overlay_29_022F73B4.h @@ -1,6 +1,8 @@ #ifndef PMDSKY_OVERLAY_29_022F73B4_H #define PMDSKY_OVERLAY_29_022F73B4_H -u32 FloorNumberIsEven(); +#include "util.h" + +bool32 FloorNumberIsEven(); #endif //PMDSKY_OVERLAY_29_022F73B4_H diff --git a/src/overlay_29_022F73B4.c b/src/overlay_29_022F73B4.c index 09779c2d..6da53405 100644 --- a/src/overlay_29_022F73B4.c +++ b/src/overlay_29_022F73B4.c @@ -1,10 +1,10 @@ #include "overlay_29_022F73B4.h" #include "dungeon.h" +#include "util.h" extern struct dungeon *DUNGEON_PTR[]; -// This is supposed to be a bool. Trying to put it as a u8 makes it not match. -u32 FloorNumberIsEven() { +bool32 FloorNumberIsEven() { struct dungeon *dungeon = DUNGEON_PTR[0]; if (dungeon->id == DUNGEON_LABYRINTH_CAVE && dungeon->floor == 10) return 0; return (dungeon->floor & 1) == 0;