diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2017-02-04 21:47:11 -0600 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2017-02-04 19:47:11 -0800 |
commit | 2afc20150b1cf5e9bcc8008c0323ac57af353718 (patch) | |
tree | bdc26fa8435b11ddb3aae11f282a45a3385b5a39 | |
parent | 27dc855202a2531914c83d15d5a9c3745c0ca88a (diff) |
decompile more of field_map_obj (#231)
* decompile more code
* decompile more of field_map_obj
* decompile more of field_map_obj
-rw-r--r-- | asm/field_map_obj.s | 2481 | ||||
-rw-r--r-- | data/field_map_obj.s | 13 | ||||
-rw-r--r-- | include/asm.inc.h | 6 | ||||
-rw-r--r-- | include/field_map_obj.h | 2 | ||||
-rw-r--r-- | include/field_player_avatar.h | 4 | ||||
-rw-r--r-- | include/global.fieldmap.h | 13 | ||||
-rw-r--r-- | include/sprite.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/field_map_obj.c | 865 | ||||
-rw-r--r-- | src/field_map_obj_helpers.c | 2 | ||||
-rw-r--r-- | src/field_player_avatar.c | 2 | ||||
-rw-r--r-- | src/fieldmap.c | 7 | ||||
-rw-r--r-- | src/pokemon_2.c | 3 | ||||
-rw-r--r-- | src/sprite.c | 4 |
14 files changed, 878 insertions, 2531 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index b50b6f2d1..d54b57fed 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -6,2487 +6,6 @@ .text - thumb_func_start sub_805B75C -sub_805B75C: @ 805B75C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - lsls r2, 16 - lsrs r2, 16 - mov r10, r2 - movs r7, 0 - ldr r2, _0805B900 @ =gLinkPlayerMapObjects -_0805B77E: - lsls r0, r7, 2 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - beq _0805B790 - ldrb r1, [r1, 0x2] - cmp r8, r1 - bne _0805B790 - b _0805B8EE -_0805B790: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x3 - bls _0805B77E - mov r1, r8 - lsls r0, r1, 3 - add r0, r8 - lsls r0, 2 - ldr r1, _0805B904 @ =gMapObjects - adds r6, r0, r1 - movs r0, 0 - str r0, [sp, 0x20] - ldrb r0, [r6, 0x5] - bl GetFieldObjectGraphicsInfo - adds r5, r0, 0 - ldrh r2, [r5, 0x6] - ldr r1, _0805B908 @ =0xffff0000 - add r4, sp, 0x18 - ldr r0, [r4, 0x4] - ands r0, r1 - orrs r0, r2 - str r0, [r4, 0x4] - ldrb r0, [r6, 0x5] - ldrb r1, [r6, 0x6] - add r3, sp, 0x20 - mov r2, sp - bl MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex - str r4, [sp, 0xC] - mov r0, sp - ldr r2, _0805B90C @ =0x0000ffff - adds r4, r2, 0 - strh r4, [r0, 0x2] - ldrb r1, [r5, 0xC] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0805B7EA - ldrh r0, [r5, 0x2] - lsls r1, 28 - lsrs r1, 28 - bl npc_load_two_palettes__no_record -_0805B7EA: - ldrb r0, [r5, 0xC] - lsls r1, r0, 28 - lsrs r0, r1, 28 - cmp r0, 0x9 - bls _0805B7FC - ldrh r0, [r5, 0x2] - lsrs r1, 28 - bl npc_load_two_palettes__and_record -_0805B7FC: - mov r0, sp - strh r4, [r0, 0x2] - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x40 - beq _0805B8EE - lsls r0, r7, 4 - adds r0, r7 - lsls r0, 2 - ldr r1, _0805B910 @ =gSprites - adds r4, r0, r1 - mov r1, r9 - lsls r0, r1, 16 - asrs r0, 16 - ldrh r2, [r6, 0x10] - adds r0, r2 - lsls r0, 16 - asrs r0, 16 - mov r2, r10 - lsls r1, r2, 16 - asrs r1, 16 - ldrh r2, [r6, 0x12] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - bl sub_8060388 - ldrh r0, [r5, 0x8] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r1, r4, 0 - adds r1, 0x28 - strb r0, [r1] - ldrh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r2, r4, 0 - adds r2, 0x29 - strb r0, [r2] - ldrh r0, [r4, 0x20] - adds r0, 0x8 - strh r0, [r4, 0x20] - ldrh r1, [r4, 0x22] - adds r1, 0x10 - movs r0, 0 - ldrsb r0, [r2, r0] - adds r0, r1 - strh r0, [r4, 0x22] - ldr r0, [r5, 0x1C] - str r0, [r4, 0xC] - ldrb r0, [r6, 0x6] - cmp r0, 0xB - bne _0805B88A - mov r0, r8 - adds r1, r7, 0 - bl SetPlayerAvatarFieldObjectIdAndObjectId - bl sub_8126B54 - strb r0, [r6, 0x1B] -_0805B88A: - ldr r1, [sp, 0x20] - cmp r1, 0 - beq _0805B896 - adds r0, r4, 0 - bl SetSubspriteTables -_0805B896: - ldrb r1, [r5, 0xC] - lsls r1, 28 - lsrs r1, 24 - ldrb r2, [r4, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - mov r0, r8 - strh r0, [r4, 0x2E] - strb r7, [r6, 0x4] - ldrb r0, [r6, 0x1] - lsls r0, 27 - cmp r0, 0 - blt _0805B8DC - ldrb r0, [r6, 0x6] - cmp r0, 0xB - beq _0805B8DC - ldrb r0, [r6, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl FieldObjectDirectionToImageAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim -_0805B8DC: - adds r0, r6, 0 - bl sub_805B914 - ldrb r0, [r6, 0xB] - lsrs r0, 4 - adds r1, r4, 0 - movs r2, 0x1 - bl SetObjectSubpriorityByZCoord -_0805B8EE: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805B900: .4byte gLinkPlayerMapObjects -_0805B904: .4byte gMapObjects -_0805B908: .4byte 0xffff0000 -_0805B90C: .4byte 0x0000ffff -_0805B910: .4byte gSprites - thumb_func_end sub_805B75C - - thumb_func_start sub_805B914 -sub_805B914: @ 805B914 - push {lr} - ldrb r2, [r0] - movs r3, 0x3 - negs r3, r3 - adds r1, r3, 0 - ands r1, r2 - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - ldrb r2, [r0, 0x2] - movs r1, 0x41 - negs r1, r1 - ands r1, r2 - ands r1, r3 - movs r2, 0x5 - negs r2, r2 - ands r1, r2 - subs r2, 0x4 - ands r1, r2 - subs r2, 0x8 - ands r1, r2 - subs r2, 0x10 - ands r1, r2 - strb r1, [r0, 0x2] - bl FieldObjectClearAnim - pop {r0} - bx r0 - thumb_func_end sub_805B914 - - thumb_func_start SetPlayerAvatarFieldObjectIdAndObjectId -SetPlayerAvatarFieldObjectIdAndObjectId: @ 805B94C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0805B978 @ =gPlayerAvatar - strb r0, [r5, 0x5] - strb r1, [r5, 0x4] - ldr r1, _0805B97C @ =gMapObjects - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - adds r4, r1 - ldrb r0, [r4, 0x5] - bl GetPlayerAvatarGenderByGraphicsId - strb r0, [r5, 0x7] - ldrb r0, [r4, 0x5] - movs r1, 0x20 - bl SetPlayerAvatarExtraStateTransition - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805B978: .4byte gPlayerAvatar -_0805B97C: .4byte gMapObjects - thumb_func_end SetPlayerAvatarFieldObjectIdAndObjectId - - thumb_func_start sub_805B980 -sub_805B980: @ 805B980 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - mov r0, r8 - bl GetFieldObjectGraphicsInfo - adds r5, r0, 0 - ldrb r1, [r6, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BA7C @ =gSprites - adds r4, r0, r1 - ldrb r1, [r5, 0xC] - movs r7, 0xF - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - bne _0805B9B8 - ldrh r0, [r5, 0x2] - lsls r1, 28 - lsrs r1, 28 - bl pal_patch_for_npc -_0805B9B8: - ldrb r1, [r5, 0xC] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0xA - bne _0805B9CC - ldrh r0, [r5, 0x2] - lsls r1, 28 - lsrs r1, 28 - bl npc_load_two_palettes__and_record -_0805B9CC: - ldr r0, [r5, 0x10] - ldrb r2, [r0, 0x1] - lsrs r2, 6 - lsls r2, 6 - ldrb r3, [r4, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, 0x1] - ldr r0, [r5, 0x10] - ldrb r0, [r0, 0x3] - lsrs r0, 6 - lsls r0, 6 - ldrb r2, [r4, 0x3] - ands r1, r2 - orrs r1, r0 - strb r1, [r4, 0x3] - ldr r0, [r5, 0x1C] - str r0, [r4, 0xC] - ldr r0, [r5, 0x18] - str r0, [r4, 0x8] - ldr r0, [r5, 0x14] - str r0, [r4, 0x18] - ldrb r1, [r5, 0xC] - lsls r1, 28 - lsrs r1, 24 - ldrb r2, [r4, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, 0x5] - ldrb r1, [r5, 0xC] - lsls r1, 25 - lsrs r1, 31 - lsls r1, 4 - ldrb r2, [r6, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x1] - mov r0, r8 - strb r0, [r6, 0x5] - movs r1, 0x10 - ldrsh r0, [r6, r1] - movs r2, 0x12 - ldrsh r1, [r6, r2] - adds r2, r4, 0 - adds r2, 0x20 - adds r3, r4, 0 - adds r3, 0x22 - bl sub_80603CC - ldrh r0, [r5, 0x8] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r1, r4, 0 - adds r1, 0x28 - strb r0, [r1] - ldrh r0, [r5, 0xA] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r2, r4, 0 - adds r2, 0x29 - strb r0, [r2] - ldrh r0, [r4, 0x20] - adds r0, 0x8 - strh r0, [r4, 0x20] - ldrh r1, [r4, 0x22] - adds r1, 0x10 - movs r0, 0 - ldrsb r0, [r2, r0] - adds r0, r1 - strh r0, [r4, 0x22] - ldrb r0, [r6, 0x1] - lsrs r0, 7 - cmp r0, 0 - beq _0805BA72 - bl CameraObjectReset1 -_0805BA72: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805BA7C: .4byte gSprites - thumb_func_end sub_805B980 - - thumb_func_start unref_sub_805BA80 -unref_sub_805BA80: @ 805BA80 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BAB4 - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BABC @ =gMapObjects - adds r0, r1 - adds r1, r4, 0 - bl sub_805B980 -_0805BAB4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805BABC: .4byte gMapObjects - thumb_func_end unref_sub_805BA80 - - thumb_func_start FieldObjectTurn -FieldObjectTurn: @ 805BAC0 - push {r4-r6,lr} - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - bl FieldObjectSetDirection - ldrb r0, [r6, 0x1] - lsls r0, 27 - cmp r0, 0 - blt _0805BB06 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r5, _0805BB0C @ =gSprites - adds r4, r5 - ldrb r0, [r6, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl FieldObjectDirectionToImageAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - ldrb r1, [r6, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0 - bl SeekSpriteAnim -_0805BB06: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805BB0C: .4byte gSprites - thumb_func_end FieldObjectTurn - - thumb_func_start FieldObjectTurnByLocalIdAndMap -FieldObjectTurnByLocalIdAndMap: @ 805BB10 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BB44 - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BB4C @ =gMapObjects - adds r0, r1 - adds r1, r4, 0 - bl FieldObjectTurn -_0805BB44: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805BB4C: .4byte gMapObjects - thumb_func_end FieldObjectTurnByLocalIdAndMap - - thumb_func_start unref_sub_805BB50 -unref_sub_805BB50: @ 805BB50 - push {lr} - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r0, 0x5] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _0805BB6C @ =gMapObjects - adds r0, r2 - bl FieldObjectTurn - pop {r0} - bx r0 - .align 2, 0 -_0805BB6C: .4byte gMapObjects - thumb_func_end unref_sub_805BB50 - - thumb_func_start get_berry_tree_graphics -get_berry_tree_graphics: @ 805BB70 - push {r4-r7,lr} - adds r5, r0, 0 - adds r7, r1, 0 - ldrb r0, [r5, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5, 0x1] - adds r4, r7, 0 - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - ldrb r0, [r5, 0x1D] - bl GetStageByBerryTreeId - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0 - beq _0805BBFC - ldrb r1, [r5, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - ldrb r1, [r4] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrb r0, [r5, 0x1D] - bl GetBerryTypeByBerryTreeId - subs r0, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - subs r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r4, 0x2B - bls _0805BBC4 - movs r4, 0 -_0805BBC4: - ldr r0, _0805BC04 @ =gBerryTreeGraphicsIdTablePointers - lsls r4, 2 - adds r0, r4, r0 - ldr r0, [r0] - adds r0, r6 - ldrb r1, [r0] - adds r0, r5, 0 - bl sub_805B980 - ldr r0, _0805BC08 @ =gBerryTreePicTablePointers - adds r0, r4, r0 - ldr r0, [r0] - str r0, [r7, 0xC] - ldr r0, _0805BC0C @ =gBerryTreePaletteSlotTablePointers - adds r4, r0 - ldr r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r1, 4 - ldrb r2, [r7, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r1 - strb r0, [r7, 0x5] - adds r0, r7, 0 - adds r1, r6, 0 - bl StartSpriteAnim -_0805BBFC: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805BC04: .4byte gBerryTreeGraphicsIdTablePointers -_0805BC08: .4byte gBerryTreePicTablePointers -_0805BC0C: .4byte gBerryTreePaletteSlotTablePointers - thumb_func_end get_berry_tree_graphics - - thumb_func_start GetFieldObjectGraphicsInfo -GetFieldObjectGraphicsInfo: @ 805BC10 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xEF - bls _0805BC28 - adds r0, r1, 0 - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl VarGetFieldObjectGraphicsId - adds r1, r0, 0 -_0805BC28: - cmp r1, 0xD9 - bls _0805BC2E - movs r1, 0x5 -_0805BC2E: - ldr r0, _0805BC3C @ =gMapObjectGraphicsInfoPointers - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] - pop {r1} - bx r1 - .align 2, 0 -_0805BC3C: .4byte gMapObjectGraphicsInfoPointers - thumb_func_end GetFieldObjectGraphicsInfo - - thumb_func_start FieldObjectHandleDynamicGraphicsId -FieldObjectHandleDynamicGraphicsId: @ 805BC40 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0x5] - cmp r0, 0xEF - bls _0805BC56 - adds r0, 0x10 - lsls r0, 24 - lsrs r0, 24 - bl VarGetFieldObjectGraphicsId - strb r0, [r4, 0x5] -_0805BC56: - pop {r4} - pop {r0} - bx r0 - thumb_func_end FieldObjectHandleDynamicGraphicsId - - thumb_func_start npc_by_local_id_and_map_set_field_1_bit_x20 -npc_by_local_id_and_map_set_field_1_bit_x20: @ 805BC5C - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BC9E - ldr r2, _0805BCA8 @ =gMapObjects - mov r0, sp - ldrb r0, [r0] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r0, 0x1 - adds r2, r4, 0 - ands r2, r0 - lsls r2, 5 - ldrb r3, [r1, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1, 0x1] -_0805BC9E: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805BCA8: .4byte gMapObjects - thumb_func_end npc_by_local_id_and_map_set_field_1_bit_x20 - - thumb_func_start FieldObjectGetLocalIdAndMap -FieldObjectGetLocalIdAndMap: @ 805BCAC - push {r4,lr} - ldrb r4, [r0, 0x8] - strb r4, [r1] - ldrb r1, [r0, 0x9] - strb r1, [r2] - ldrb r0, [r0, 0xA] - strb r0, [r3] - pop {r4} - pop {r0} - bx r0 - thumb_func_end FieldObjectGetLocalIdAndMap - - thumb_func_start sub_805BCC0 -sub_805BCC0: @ 805BCC0 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl GetFieldObjectIdByXY - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x10 - beq _0805BCE8 - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BCEC @ =gMapObjects - adds r0, r1 - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_0805BCE8: - pop {r0} - bx r0 - .align 2, 0 -_0805BCEC: .4byte gMapObjects - thumb_func_end sub_805BCC0 - - thumb_func_start sub_805BCF0 -sub_805BCF0: @ 805BCF0 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r4, r3, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BD36 - mov r0, sp - ldrb r0, [r0] - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - ldr r0, _0805BD40 @ =gMapObjects - adds r2, r0 - ldrb r1, [r2, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BD44 @ =gSprites - adds r0, r1 - ldrb r1, [r2, 0x3] - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2, 0x3] - adds r0, 0x43 - strb r4, [r0] -_0805BD36: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805BD40: .4byte gMapObjects -_0805BD44: .4byte gSprites - thumb_func_end sub_805BCF0 - - thumb_func_start sub_805BD48 -sub_805BD48: @ 805BD48 - push {lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BD84 - mov r0, sp - ldrb r0, [r0] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0805BD8C @ =gMapObjects - adds r1, r0 - ldrb r2, [r1, 0x3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x3] - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] -_0805BD84: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0805BD8C: .4byte gMapObjects - thumb_func_end sub_805BD48 - - thumb_func_start sub_805BD90 -sub_805BD90: @ 805BD90 - push {r4,r5,lr} - sub sp, 0x4 - ldr r4, [sp, 0x10] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 16 - lsrs r5, r3, 16 - lsls r4, 16 - lsrs r4, 16 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805BDD4 - ldr r2, _0805BDDC @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r1, [r0, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805BDE0 @ =gSprites - adds r0, r1 - strh r5, [r0, 0x24] - strh r4, [r0, 0x26] -_0805BDD4: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805BDDC: .4byte gMapObjects -_0805BDE0: .4byte gSprites - thumb_func_end sub_805BD90 - - thumb_func_start gpu_pal_allocator_reset__manage_upper_four -gpu_pal_allocator_reset__manage_upper_four: @ 805BDE4 - push {lr} - bl FreeAllSpritePalettes - ldr r1, _0805BDF4 @ =gReservedSpritePaletteCount - movs r0, 0xC - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0805BDF4: .4byte gReservedSpritePaletteCount - thumb_func_end gpu_pal_allocator_reset__manage_upper_four - - thumb_func_start sub_805BDF8 -sub_805BDF8: @ 805BDF8 - push {lr} - lsls r0, 16 - lsrs r0, 16 - bl FindFieldObjectPaletteIndexByTag - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _0805BE1C @ =0x000011ff - cmp r1, r0 - beq _0805BE16 - lsls r0, r1, 3 - ldr r1, _0805BE20 @ =gUnknown_0837377C - adds r0, r1 - bl sub_805BE58 -_0805BE16: - pop {r0} - bx r0 - .align 2, 0 -_0805BE1C: .4byte 0x000011ff -_0805BE20: .4byte gUnknown_0837377C - thumb_func_end sub_805BDF8 - - thumb_func_start unref_sub_805BE24 -unref_sub_805BE24: @ 805BE24 - push {r4-r6,lr} - adds r5, r0, 0 - movs r4, 0 - ldrh r0, [r5] - ldr r1, _0805BE54 @ =0x000011ff - cmp r0, r1 - beq _0805BE4E - adds r6, r1, 0 -_0805BE34: - lsls r0, r4, 1 - adds r0, r5 - ldrh r0, [r0] - bl sub_805BDF8 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r0, r4, 1 - adds r0, r5 - ldrh r0, [r0] - cmp r0, r6 - bne _0805BE34 -_0805BE4E: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0805BE54: .4byte 0x000011ff - thumb_func_end unref_sub_805BE24 - - thumb_func_start sub_805BE58 -sub_805BE58: @ 805BE58 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x4] - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - bne _0805BE76 - adds r0, r4, 0 - bl LoadSpritePalette - lsls r0, 24 - lsrs r0, 24 - b _0805BE78 -_0805BE76: - movs r0, 0xFF -_0805BE78: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_805BE58 - - thumb_func_start pal_patch_for_npc -pal_patch_for_npc: @ 805BE80 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 24 - lsrs r4, 24 - bl FindFieldObjectPaletteIndexByTag - lsls r0, 24 - ldr r1, _0805BEB4 @ =gUnknown_0837377C - lsrs r0, 21 - adds r0, r1 - ldr r0, [r0] - lsls r4, 20 - movs r1, 0x80 - lsls r1, 17 - adds r4, r1 - lsrs r4, 16 - adds r1, r4, 0 - movs r2, 0x20 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805BEB4: .4byte gUnknown_0837377C - thumb_func_end pal_patch_for_npc - - thumb_func_start pal_patch_for_npc_range -pal_patch_for_npc_range: @ 805BEB8 - push {r4-r6,lr} - adds r5, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - lsls r2, 24 - lsrs r6, r2, 24 - cmp r4, r6 - bcs _0805BEDC -_0805BEC8: - ldrh r0, [r5] - adds r1, r4, 0 - bl pal_patch_for_npc - adds r5, 0x2 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r6 - bcc _0805BEC8 -_0805BEDC: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end pal_patch_for_npc_range - - thumb_func_start FindFieldObjectPaletteIndexByTag -FindFieldObjectPaletteIndexByTag: @ 805BEE4 - push {r4-r6,lr} - lsls r0, 16 - lsrs r5, r0, 16 - movs r2, 0 - ldr r0, _0805BF0C @ =gUnknown_0837377C - ldrh r1, [r0, 0x4] - ldr r3, _0805BF10 @ =0x000011ff - adds r4, r0, 0 - cmp r1, r3 - beq _0805BF24 - adds r6, r4, 0 - adds r1, r3, 0 -_0805BEFC: - lsls r0, r2, 3 - adds r0, r6 - ldrh r0, [r0, 0x4] - cmp r0, r5 - bne _0805BF14 - adds r0, r2, 0 - b _0805BF26 - .align 2, 0 -_0805BF0C: .4byte gUnknown_0837377C -_0805BF10: .4byte 0x000011ff -_0805BF14: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - lsls r0, r2, 3 - adds r0, r4 - ldrh r0, [r0, 0x4] - cmp r0, r1 - bne _0805BEFC -_0805BF24: - movs r0, 0xFF -_0805BF26: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end FindFieldObjectPaletteIndexByTag - - thumb_func_start npc_load_two_palettes__no_record -npc_load_two_palettes__no_record: @ 805BF2C - push {r4-r6,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r5, r1, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl pal_patch_for_npc - movs r3, 0 - ldr r1, _0805BF74 @ =gUnknown_08373874 - ldrh r0, [r1] - ldr r2, _0805BF78 @ =0x000011ff - cmp r0, r2 - beq _0805BF94 - ldr r0, _0805BF7C @ =gUnknown_0830FD14 - adds r5, r0 - adds r6, r2, 0 -_0805BF50: - lsls r2, r3, 3 - adds r0, r2, r1 - ldrh r0, [r0] - cmp r0, r4 - bne _0805BF84 - adds r1, 0x4 - adds r1, r2, r1 - ldr r0, _0805BF80 @ =gUnknown_030005A4 - ldrb r0, [r0] - ldr r1, [r1] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldrb r1, [r5] - bl pal_patch_for_npc - b _0805BF94 - .align 2, 0 -_0805BF74: .4byte gUnknown_08373874 -_0805BF78: .4byte 0x000011ff -_0805BF7C: .4byte gUnknown_0830FD14 -_0805BF80: .4byte gUnknown_030005A4 -_0805BF84: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 3 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r6 - bne _0805BF50 -_0805BF94: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end npc_load_two_palettes__no_record - - thumb_func_start npc_load_two_palettes__and_record -npc_load_two_palettes__and_record: @ 805BF9C - push {r4-r6,lr} - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r5, r1, 24 - ldr r0, _0805BFE8 @ =gUnknown_030005A6 - strh r4, [r0] - adds r0, r4, 0 - adds r1, r5, 0 - bl pal_patch_for_npc - movs r3, 0 - ldr r1, _0805BFEC @ =gUnknown_083738E4 - ldrh r0, [r1] - ldr r2, _0805BFF0 @ =0x000011ff - cmp r0, r2 - beq _0805C00C - ldr r0, _0805BFF4 @ =gUnknown_0830FD14 - adds r5, r0 - adds r6, r2, 0 -_0805BFC4: - lsls r2, r3, 3 - adds r0, r2, r1 - ldrh r0, [r0] - cmp r0, r4 - bne _0805BFFC - adds r1, 0x4 - adds r1, r2, r1 - ldr r0, _0805BFF8 @ =gUnknown_030005A4 - ldrb r0, [r0] - ldr r1, [r1] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - ldrb r1, [r5] - bl pal_patch_for_npc - b _0805C00C - .align 2, 0 -_0805BFE8: .4byte gUnknown_030005A6 -_0805BFEC: .4byte gUnknown_083738E4 -_0805BFF0: .4byte 0x000011ff -_0805BFF4: .4byte gUnknown_0830FD14 -_0805BFF8: .4byte gUnknown_030005A4 -_0805BFFC: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 3 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r6 - bne _0805BFC4 -_0805C00C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end npc_load_two_palettes__and_record - - thumb_func_start unref_sub_805C014 -unref_sub_805C014: @ 805C014 - push {r4,lr} - ldrh r3, [r0, 0x10] - strh r3, [r0, 0x14] - ldrh r4, [r0, 0x12] - strh r4, [r0, 0x16] - lsls r1, 16 - asrs r1, 16 - adds r1, r3 - strh r1, [r0, 0x10] - lsls r2, 16 - asrs r2, 16 - adds r2, r4 - strh r2, [r0, 0x12] - pop {r4} - pop {r0} - bx r0 - thumb_func_end unref_sub_805C014 - - thumb_func_start npc_coords_shift -npc_coords_shift: @ 805C034 - ldrh r3, [r0, 0x10] - strh r3, [r0, 0x14] - ldrh r3, [r0, 0x12] - strh r3, [r0, 0x16] - strh r1, [r0, 0x10] - strh r2, [r0, 0x12] - bx lr - thumb_func_end npc_coords_shift - - thumb_func_start npc_coords_set -npc_coords_set: @ 805C044 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - strh r1, [r0, 0x14] - strh r2, [r0, 0x16] - strh r1, [r0, 0x10] - strh r2, [r0, 0x12] - bx lr - thumb_func_end npc_coords_set - - thumb_func_start sub_805C058 -sub_805C058: @ 805C058 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - adds r4, r1, 0 - adds r5, r2, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - ldrb r1, [r6, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805C0F4 @ =gSprites - adds r7, r0, r1 - ldrb r0, [r6, 0x5] - bl GetFieldObjectGraphicsInfo - mov r8, r0 - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl npc_coords_set - movs r1, 0x10 - ldrsh r0, [r6, r1] - movs r2, 0x12 - ldrsh r1, [r6, r2] - adds r2, r7, 0 - adds r2, 0x20 - adds r3, r7, 0 - adds r3, 0x22 - bl sub_80603CC - mov r1, r8 - ldrh r0, [r1, 0x8] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r1, r7, 0 - adds r1, 0x28 - strb r0, [r1] - mov r2, r8 - ldrh r0, [r2, 0xA] - lsls r0, 16 - asrs r0, 17 - negs r0, r0 - adds r2, r7, 0 - adds r2, 0x29 - strb r0, [r2] - ldrh r0, [r7, 0x20] - adds r0, 0x8 - strh r0, [r7, 0x20] - ldrh r1, [r7, 0x22] - adds r1, 0x10 - movs r0, 0 - ldrsb r0, [r2, r0] - adds r0, r1 - strh r0, [r7, 0x22] - adds r0, r6, 0 - bl sub_805B914 - ldrb r0, [r6, 0x1] - lsrs r0, 7 - cmp r0, 0 - beq _0805C0EA - bl CameraObjectReset1 -_0805C0EA: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0805C0F4: .4byte gSprites - thumb_func_end sub_805C058 - - thumb_func_start sub_805C0F8 -sub_805C0F8: @ 805C0F8 - push {r4,r5,lr} - sub sp, 0x4 - ldr r4, [sp, 0x10] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 16 - lsrs r5, r3, 16 - lsls r4, 16 - lsrs r4, 16 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805C140 - lsls r1, r5, 16 - lsls r2, r4, 16 - mov r0, sp - ldrb r3, [r0] - lsls r0, r3, 3 - adds r0, r3 - lsls r0, 2 - ldr r3, _0805C148 @ =gMapObjects - adds r0, r3 - movs r3, 0xE0 - lsls r3, 11 - adds r1, r3 - asrs r1, 16 - adds r2, r3 - asrs r2, 16 - bl sub_805C058 -_0805C140: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805C148: .4byte gMapObjects - thumb_func_end sub_805C0F8 - - thumb_func_start npc_coords_shift_still -npc_coords_shift_still: @ 805C14C - push {lr} - movs r2, 0x10 - ldrsh r1, [r0, r2] - movs r3, 0x12 - ldrsh r2, [r0, r3] - bl npc_coords_shift - pop {r0} - bx r0 - thumb_func_end npc_coords_shift_still - - thumb_func_start UpdateFieldObjectCoordsForCameraUpdate -UpdateFieldObjectCoordsForCameraUpdate: @ 805C160 - push {r4,r5,lr} - ldr r2, _0805C1C0 @ =gUnknown_0202E844 - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0805C1B8 - movs r3, 0 - ldr r5, _0805C1C4 @ =gMapObjects - movs r0, 0x4 - ldrsh r4, [r2, r0] - movs r0, 0x8 - ldrsh r1, [r2, r0] -_0805C17A: - lsls r0, r3, 3 - adds r0, r3 - lsls r0, 2 - adds r2, r0, r5 - ldrb r0, [r2] - lsls r0, 31 - cmp r0, 0 - beq _0805C1AE - ldrh r0, [r2, 0xC] - subs r0, r4 - strh r0, [r2, 0xC] - ldrh r0, [r2, 0xE] - subs r0, r1 - strh r0, [r2, 0xE] - ldrh r0, [r2, 0x10] - subs r0, r4 - strh r0, [r2, 0x10] - ldrh r0, [r2, 0x12] - subs r0, r1 - strh r0, [r2, 0x12] - ldrh r0, [r2, 0x14] - subs r0, r4 - strh r0, [r2, 0x14] - ldrh r0, [r2, 0x16] - subs r0, r1 - strh r0, [r2, 0x16] -_0805C1AE: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0xF - bls _0805C17A -_0805C1B8: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805C1C0: .4byte gUnknown_0202E844 -_0805C1C4: .4byte gMapObjects - thumb_func_end UpdateFieldObjectCoordsForCameraUpdate - - thumb_func_start GetFieldObjectIdByXYZ -GetFieldObjectIdByXYZ: @ 805C1C8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - lsrs r7, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 24 - lsrs r5, r2, 24 - movs r4, 0 - ldr r0, _0805C214 @ =gMapObjects - mov r8, r0 -_0805C1E0: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - mov r2, r8 - adds r1, r0, r2 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _0805C218 - movs r2, 0x10 - ldrsh r0, [r1, r2] - cmp r0, r7 - bne _0805C218 - movs r2, 0x12 - ldrsh r0, [r1, r2] - cmp r0, r6 - bne _0805C218 - adds r0, r1, 0 - adds r1, r5, 0 - bl FieldObjectDoesZCoordMatch - lsls r0, 24 - cmp r0, 0 - beq _0805C218 - adds r0, r4, 0 - b _0805C224 - .align 2, 0 -_0805C214: .4byte gMapObjects -_0805C218: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _0805C1E0 - movs r0, 0x10 -_0805C224: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GetFieldObjectIdByXYZ - - thumb_func_start FieldObjectDoesZCoordMatch -FieldObjectDoesZCoordMatch: @ 805C230 - push {lr} - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r0, 0xB] - movs r0, 0xF - ands r0, r2 - cmp r0, 0 - beq _0805C250 - cmp r1, 0 - beq _0805C250 - lsls r0, r2, 28 - lsrs r0, 28 - cmp r0, r1 - beq _0805C250 - movs r0, 0 - b _0805C252 -_0805C250: - movs r0, 0x1 -_0805C252: - pop {r1} - bx r1 - thumb_func_end FieldObjectDoesZCoordMatch - - thumb_func_start UpdateFieldObjectsForCameraUpdate -UpdateFieldObjectsForCameraUpdate: @ 805C258 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - bl UpdateFieldObjectCoordsForCameraUpdate - lsls r4, 16 - asrs r4, 16 - lsls r5, 16 - asrs r5, 16 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_805B55C - bl RemoveFieldObjectsOutsideView - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end UpdateFieldObjectsForCameraUpdate - - thumb_func_start AddCameraObject -AddCameraObject: @ 805C284 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0805C2C0 @ =gSpriteTemplate_830FD24 - movs r1, 0 - movs r2, 0 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805C2C4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r2, 0x3E - adds r2, r1 - mov r12, r2 - ldrb r2, [r2] - movs r3, 0x4 - orrs r2, r3 - mov r3, r12 - strb r2, [r3] - strh r4, [r1, 0x2E] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805C2C0: .4byte gSpriteTemplate_830FD24 -_0805C2C4: .4byte gSprites - thumb_func_end AddCameraObject - - thumb_func_start ObjectCB_CameraObject -ObjectCB_CameraObject: @ 805C2C8 - push {r4,r5,lr} - sub sp, 0xC - mov r2, sp - ldr r1, _0805C2EC @ =gUnknown_0830FD3C - ldm r1!, {r3-r5} - stm r2!, {r3-r5} - movs r2, 0x30 - ldrsh r1, [r0, r2] - lsls r1, 2 - add r1, sp - ldr r1, [r1] - bl _call_via_r1 - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805C2EC: .4byte gUnknown_0830FD3C - thumb_func_end ObjectCB_CameraObject - - thumb_func_start CameraObject_0 -CameraObject_0: @ 805C2F0 - push {lr} - ldr r3, _0805C328 @ =gSprites - movs r1, 0x2E - ldrsh r2, [r0, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r1, [r1, 0x20] - strh r1, [r0, 0x20] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r1, [r1, 0x22] - strh r1, [r0, 0x22] - adds r3, r0, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r3] - movs r1, 0x1 - strh r1, [r0, 0x30] - bl CameraObject_1 - pop {r0} - bx r0 - .align 2, 0 -_0805C328: .4byte gSprites - thumb_func_end CameraObject_0 - - thumb_func_start CameraObject_1 -CameraObject_1: @ 805C32C - push {r4,r5,lr} - ldr r3, _0805C360 @ =gSprites - movs r1, 0x2E - ldrsh r2, [r0, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r3 - ldrh r3, [r1, 0x22] - ldrh r2, [r0, 0x20] - ldrh r4, [r1, 0x20] - movs r5, 0x20 - ldrsh r1, [r1, r5] - subs r1, r2 - strh r1, [r0, 0x32] - ldrh r2, [r0, 0x22] - lsls r1, r3, 16 - asrs r1, 16 - subs r1, r2 - strh r1, [r0, 0x34] - strh r4, [r0, 0x20] - strh r3, [r0, 0x22] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0805C360: .4byte gSprites - thumb_func_end CameraObject_1 - - thumb_func_start CameraObject_2 -CameraObject_2: @ 805C364 - push {r4,lr} - ldr r4, _0805C390 @ =gSprites - movs r1, 0x2E - ldrsh r2, [r0, r1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x20] - movs r3, 0 - strh r1, [r0, 0x20] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r4 - ldrh r1, [r1, 0x22] - strh r1, [r0, 0x22] - strh r3, [r0, 0x32] - strh r3, [r0, 0x34] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805C390: .4byte gSprites - thumb_func_end CameraObject_2 - - thumb_func_start FindCameraObject -FindCameraObject: @ 805C394 - push {r4,r5,lr} - movs r3, 0 - ldr r4, _0805C3C0 @ =gSprites - adds r5, r4, 0 - adds r5, 0x1C -_0805C39E: - lsls r0, r3, 4 - adds r0, r3 - lsls r1, r0, 2 - adds r2, r1, r4 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - beq _0805C3C8 - adds r0, r1, r5 - ldr r1, [r0] - ldr r0, _0805C3C4 @ =ObjectCB_CameraObject - cmp r1, r0 - bne _0805C3C8 - adds r0, r2, 0 - b _0805C3D4 - .align 2, 0 -_0805C3C0: .4byte gSprites -_0805C3C4: .4byte ObjectCB_CameraObject -_0805C3C8: - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x3F - bls _0805C39E - movs r0, 0 -_0805C3D4: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FindCameraObject - - thumb_func_start CameraObjectReset1 -CameraObjectReset1: @ 805C3DC - push {lr} - bl FindCameraObject - adds r2, r0, 0 - cmp r2, 0 - beq _0805C3F4 - movs r0, 0 - strh r0, [r2, 0x30] - ldr r1, [r2, 0x1C] - adds r0, r2, 0 - bl _call_via_r1 -_0805C3F4: - pop {r0} - bx r0 - thumb_func_end CameraObjectReset1 - - thumb_func_start CameraObjectSetFollowedObjectId -CameraObjectSetFollowedObjectId: @ 805C3F8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl FindCameraObject - cmp r0, 0 - beq _0805C40C - strh r4, [r0, 0x2E] - bl CameraObjectReset1 -_0805C40C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end CameraObjectSetFollowedObjectId - - thumb_func_start CameraObjectGetFollowedObjectId -CameraObjectGetFollowedObjectId: @ 805C414 - push {lr} - bl FindCameraObject - cmp r0, 0 - beq _0805C426 - ldrh r0, [r0, 0x2E] - lsls r0, 24 - lsrs r0, 24 - b _0805C428 -_0805C426: - movs r0, 0x40 -_0805C428: - pop {r1} - bx r1 - thumb_func_end CameraObjectGetFollowedObjectId - - thumb_func_start CameraObjectReset2 -CameraObjectReset2: @ 805C42C - push {lr} - bl FindCameraObject - movs r1, 0x2 - strh r1, [r0, 0x30] - pop {r0} - bx r0 - thumb_func_end CameraObjectReset2 - - thumb_func_start unref_sub_805C43C -unref_sub_805C43C: @ 805C43C - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r12, r0 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 16 - lsrs r6, r2, 16 - lsls r3, 24 - lsrs r7, r3, 24 - movs r5, 0 - ldr r1, _0805C484 @ =gSprites -_0805C456: - lsls r0, r5, 4 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _0805C488 - adds r0, r4, 0 - mov r1, r12 - movs r2, 0x44 - bl memcpy - mov r0, r8 - strh r0, [r4, 0x20] - strh r6, [r4, 0x22] - adds r0, r4, 0 - adds r0, 0x43 - strb r7, [r0] - b _0805C492 - .align 2, 0 -_0805C484: .4byte gSprites -_0805C488: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x3F - bls _0805C456 -_0805C492: - adds r0, r5, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end unref_sub_805C43C - - thumb_func_start obj_unfreeze -obj_unfreeze: @ 805C4A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r12, r0 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - lsls r2, 16 - lsrs r6, r2, 16 - lsls r3, 24 - lsrs r7, r3, 24 - movs r5, 0x3F - ldr r3, _0805C4F4 @ =gSprites - movs r2, 0x1 - negs r2, r2 -_0805C4BE: - lsls r0, r5, 16 - asrs r1, r0, 16 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, r0, r3 - adds r0, r4, 0 - adds r0, 0x3E - ldrb r0, [r0] - lsls r0, 31 - cmp r0, 0 - bne _0805C4F8 - adds r0, r4, 0 - mov r1, r12 - movs r2, 0x44 - bl memcpy - mov r0, r8 - strh r0, [r4, 0x20] - strh r6, [r4, 0x22] - adds r0, r4, 0 - adds r0, 0x43 - strb r7, [r0] - lsls r0, r5, 24 - lsrs r0, 24 - b _0805C506 - .align 2, 0 -_0805C4F4: .4byte gSprites -_0805C4F8: - subs r0, r1, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - asrs r0, 16 - cmp r0, r2 - bgt _0805C4BE - movs r0, 0x40 -_0805C506: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end obj_unfreeze - - thumb_func_start FieldObjectSetDirection -FieldObjectSetDirection: @ 805C510 - push {r4,lr} - adds r3, r0, 0 - lsls r1, 24 - lsrs r2, r1, 24 - adds r4, r2, 0 - ldrb r0, [r3, 0x18] - lsls r0, 28 - lsrs r0, 28 - adds r1, r3, 0 - adds r1, 0x20 - strb r0, [r1] - ldrb r0, [r3, 0x1] - lsls r0, 30 - cmp r0, 0 - blt _0805C540 - movs r0, 0xF - adds r1, r2, 0 - ands r1, r0 - ldrb r2, [r3, 0x18] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, 0x18] -_0805C540: - lsls r2, r4, 4 - ldrb r1, [r3, 0x18] - movs r0, 0xF - ands r0, r1 - orrs r0, r2 - strb r0, [r3, 0x18] - pop {r4} - pop {r0} - bx r0 - thumb_func_end FieldObjectSetDirection - - thumb_func_start GetFieldObjectScriptPointerByLocalIdAndMap -GetFieldObjectScriptPointerByLocalIdAndMap: @ 805C554 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - bl GetFieldObjectTemplateByLocalIdAndMap - ldr r0, [r0, 0x10] - pop {r1} - bx r1 - thumb_func_end GetFieldObjectScriptPointerByLocalIdAndMap - - thumb_func_start GetFieldObjectScriptPointerByFieldObjectId -GetFieldObjectScriptPointerByFieldObjectId: @ 805C56C - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0805C58C @ =gMapObjects - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - ldrb r0, [r2, 0x8] - ldrb r1, [r2, 0x9] - ldrb r2, [r2, 0xA] - bl GetFieldObjectScriptPointerByLocalIdAndMap - pop {r1} - bx r1 - .align 2, 0 -_0805C58C: .4byte gMapObjects - thumb_func_end GetFieldObjectScriptPointerByFieldObjectId - - thumb_func_start GetFieldObjectFlagIdByLocalIdAndMap -GetFieldObjectFlagIdByLocalIdAndMap: @ 805C590 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - bl GetFieldObjectTemplateByLocalIdAndMap - ldrh r0, [r0, 0x14] - pop {r1} - bx r1 - thumb_func_end GetFieldObjectFlagIdByLocalIdAndMap - - thumb_func_start GetFieldObjectFlagIdByFieldObjectId -GetFieldObjectFlagIdByFieldObjectId: @ 805C5A8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0805C5CC @ =gMapObjects - lsls r2, r0, 3 - adds r2, r0 - lsls r2, 2 - adds r2, r1 - ldrb r0, [r2, 0x8] - ldrb r1, [r2, 0x9] - ldrb r2, [r2, 0xA] - bl GetFieldObjectFlagIdByLocalIdAndMap - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_0805C5CC: .4byte gMapObjects - thumb_func_end GetFieldObjectFlagIdByFieldObjectId - - thumb_func_start unref_sub_805C5D0 -unref_sub_805C5D0: @ 805C5D0 - push {lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805C604 - ldr r2, _0805C600 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x7] - b _0805C606 - .align 2, 0 -_0805C600: .4byte gMapObjects -_0805C604: - movs r0, 0xFF -_0805C606: - add sp, 0x4 - pop {r1} - bx r1 - thumb_func_end unref_sub_805C5D0 - - thumb_func_start unref_sub_805C60C -unref_sub_805C60C: @ 805C60C - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805C620 @ =gMapObjects - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x7] - bx lr - .align 2, 0 -_0805C620: .4byte gMapObjects - thumb_func_end unref_sub_805C60C - - thumb_func_start unref_sub_805C624 -unref_sub_805C624: @ 805C624 - push {lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805C658 - ldr r2, _0805C654 @ =gMapObjects - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1D] - b _0805C65A - .align 2, 0 -_0805C654: .4byte gMapObjects -_0805C658: - movs r0, 0xFF -_0805C65A: - add sp, 0x4 - pop {r1} - bx r1 - thumb_func_end unref_sub_805C624 - - thumb_func_start FieldObjectGetBerryTreeId -FieldObjectGetBerryTreeId: @ 805C660 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0805C674 @ =gMapObjects - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x1D] - bx lr - .align 2, 0 -_0805C674: .4byte gMapObjects - thumb_func_end FieldObjectGetBerryTreeId - - thumb_func_start GetFieldObjectTemplateByLocalIdAndMap -GetFieldObjectTemplateByLocalIdAndMap: @ 805C678 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r3, r1, 24 - lsls r2, 24 - lsrs r2, 24 - ldr r1, _0805C6A4 @ =gSaveBlock1 - movs r0, 0x5 - ldrsb r0, [r1, r0] - cmp r0, r3 - bne _0805C6AC - movs r0, 0x4 - ldrsb r0, [r1, r0] - cmp r0, r2 - bne _0805C6AC - movs r0, 0xC2 - lsls r0, 4 - adds r1, r0 - ldr r0, _0805C6A8 @ =gMapHeader - ldr r0, [r0, 0x4] - b _0805C6B8 - .align 2, 0 -_0805C6A4: .4byte gSaveBlock1 -_0805C6A8: .4byte gMapHeader -_0805C6AC: - adds r0, r2, 0 - adds r1, r3, 0 - bl get_mapheader_by_bank_and_number - ldr r0, [r0, 0x4] - ldr r1, [r0, 0x4] -_0805C6B8: - ldrb r2, [r0] - adds r0, r4, 0 - bl FindFieldObjectTemplateInArrayByLocalId - pop {r4} - pop {r1} - bx r1 - thumb_func_end GetFieldObjectTemplateByLocalIdAndMap - - thumb_func_start FindFieldObjectTemplateInArrayByLocalId -FindFieldObjectTemplateInArrayByLocalId: @ 805C6C8 - push {r4,r5,lr} - adds r5, r1, 0 - lsls r0, 24 - lsrs r4, r0, 24 - lsls r2, 24 - lsrs r2, 24 - movs r1, 0 - cmp r1, r2 - bcs _0805C6F6 -_0805C6DA: - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r3, r0, r5 - ldrb r0, [r3] - cmp r0, r4 - bne _0805C6EC - adds r0, r3, 0 - b _0805C6F8 -_0805C6EC: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, r2 - bcc _0805C6DA -_0805C6F6: - movs r0, 0 -_0805C6F8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FindFieldObjectTemplateInArrayByLocalId - - thumb_func_start sub_805C700 -sub_805C700: @ 805C700 - push {r4,r5,lr} - adds r2, r0, 0 - ldrb r1, [r2, 0x9] - ldr r4, _0805C720 @ =gSaveBlock1 - movs r0, 0x5 - ldrsb r0, [r4, r0] - adds r5, r4, 0 - cmp r1, r0 - bne _0805C74A - ldrb r1, [r2, 0xA] - movs r0, 0x4 - ldrsb r0, [r5, r0] - cmp r1, r0 - beq _0805C72E - b _0805C74A - .align 2, 0 -_0805C720: .4byte gSaveBlock1 -_0805C724: - movs r1, 0xC2 - lsls r1, 4 - adds r0, r5, r1 - adds r0, r2, r0 - b _0805C74C -_0805C72E: - movs r3, 0 - ldrb r0, [r2, 0x8] - movs r2, 0xC2 - lsls r2, 4 - adds r1, r4, r2 - movs r2, 0 -_0805C73A: - ldrb r4, [r1] - cmp r0, r4 - beq _0805C724 - adds r1, 0x18 - adds r2, 0x18 - adds r3, 0x1 - cmp r3, 0x3F - ble _0805C73A -_0805C74A: - movs r0, 0 -_0805C74C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805C700 - - thumb_func_start sub_805C754 -sub_805C754: @ 805C754 - push {r4,lr} - adds r4, r0, 0 - bl sub_805C700 - adds r1, r0, 0 - cmp r1, 0 - beq _0805C76E - ldrh r0, [r4, 0x10] - subs r0, 0x7 - strh r0, [r1, 0x4] - ldrh r0, [r4, 0x12] - subs r0, 0x7 - strh r0, [r1, 0x6] -_0805C76E: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_805C754 - - thumb_func_start sub_805C774 -sub_805C774: @ 805C774 - push {r4,lr} - lsls r1, 24 - lsrs r4, r1, 24 - bl sub_805C700 - cmp r0, 0 - beq _0805C784 - strb r4, [r0, 0x9] -_0805C784: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_805C774 - - thumb_func_start sub_805C78C -sub_805C78C: @ 805C78C - push {lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - lsls r0, 24 - cmp r0, 0 - bne _0805C7BA - mov r0, sp - ldrb r1, [r0] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0805C7C0 @ =gMapObjects - adds r0, r1 - bl sub_805C754 -_0805C7BA: - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0805C7C0: .4byte gMapObjects - thumb_func_end sub_805C78C - - thumb_func_start sub_805C7C4 -sub_805C7C4: @ 805C7C4 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl gpu_pal_allocator_reset__manage_upper_four - ldr r1, _0805C7F4 @ =gUnknown_030005A6 - ldr r2, _0805C7F8 @ =0x000011ff - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _0805C7FC @ =gUnknown_030005A4 - strb r4, [r0] - ldr r1, _0805C800 @ =gUnknown_0837399C - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - movs r2, 0xA - bl pal_patch_for_npc_range - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0805C7F4: .4byte gUnknown_030005A6 -_0805C7F8: .4byte 0x000011ff -_0805C7FC: .4byte gUnknown_030005A4 -_0805C800: .4byte gUnknown_0837399C - thumb_func_end sub_805C7C4 - - thumb_func_start npc_paltag_by_palslot -npc_paltag_by_palslot: @ 805C804 - push {r4-r6,lr} - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x9 - bhi _0805C840 - ldr r1, _0805C820 @ =gUnknown_0837399C - ldr r0, _0805C824 @ =gUnknown_030005A4 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - lsls r0, r2, 1 - b _0805C834 - .align 2, 0 -_0805C820: .4byte gUnknown_0837399C -_0805C824: .4byte gUnknown_030005A4 -_0805C828: - adds r1, r4, 0x4 - adds r1, r2, r1 - ldr r0, _0805C83C @ =gUnknown_030005A4 - ldrb r0, [r0] - ldr r1, [r1] - lsls r0, 1 -_0805C834: - adds r0, r1 - ldrh r0, [r0] - b _0805C872 - .align 2, 0 -_0805C83C: .4byte gUnknown_030005A4 -_0805C840: - movs r3, 0 - ldr r0, _0805C878 @ =gUnknown_083738E4 - ldrh r1, [r0] - ldr r2, _0805C87C @ =0x000011ff - adds r4, r0, 0 - cmp r1, r2 - beq _0805C870 - adds r6, r4, 0 - ldr r0, _0805C880 @ =gUnknown_030005A6 - ldrh r1, [r0] - adds r5, r2, 0 -_0805C856: - lsls r2, r3, 3 - adds r0, r2, r6 - ldrh r0, [r0] - cmp r0, r1 - beq _0805C828 - adds r0, r3, 0x1 - lsls r0, 24 - lsrs r3, r0, 24 - lsls r0, r3, 3 - adds r0, r4 - ldrh r0, [r0] - cmp r0, r5 - bne _0805C856 -_0805C870: - ldr r0, _0805C87C @ =0x000011ff -_0805C872: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0805C878: .4byte gUnknown_083738E4 -_0805C87C: .4byte 0x000011ff -_0805C880: .4byte gUnknown_030005A6 - thumb_func_end npc_paltag_by_palslot - - thumb_func_start sub_805C884 -sub_805C884: @ 805C884 - push {lr} - adds r1, r0, 0 - movs r0, 0x2E - ldrsh r2, [r1, r0] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _0805C8A0 @ =gMapObjects - adds r0, r2 - ldr r2, _0805C8A4 @ =sub_805C8A8 - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805C8A0: .4byte gMapObjects -_0805C8A4: .4byte sub_805C8A8 - thumb_func_end sub_805C884 - - thumb_func_start sub_805C8A8 -sub_805C8A8: @ 805C8A8 - movs r0, 0 - bx lr - thumb_func_end sub_805C8A8 - - thumb_func_start sub_805C8AC -sub_805C8AC: @ 805C8AC - push {lr} - adds r1, r0, 0 - movs r0, 0x2E - ldrsh r2, [r1, r0] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _0805C8C8 @ =gMapObjects - adds r0, r2 - ldr r2, _0805C8CC @ =sub_805C8D0 - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805C8C8: .4byte gMapObjects -_0805C8CC: .4byte sub_805C8D0 - thumb_func_end sub_805C8AC - - thumb_func_start sub_805C8D0 -sub_805C8D0: @ 805C8D0 - push {r4,lr} - ldr r3, _0805C8EC @ =gUnknown_08375224 - movs r4, 0x30 - ldrsh r2, [r1, r4] - lsls r2, 2 - adds r2, r3 - ldr r2, [r2] - bl _call_via_r2 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805C8EC: .4byte gUnknown_08375224 - thumb_func_end sub_805C8D0 - - thumb_func_start sub_805C8F0 -sub_805C8F0: @ 805C8F0 - push {r4,lr} - adds r4, r1, 0 - bl npc_reset - movs r0, 0x1 - strh r0, [r4, 0x30] - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_805C8F0 - - thumb_func_start sub_805C904 -sub_805C904: @ 805C904 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionAnimId - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetRegularAnim - movs r0, 0x2 - strh r0, [r5, 0x30] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805C904 - thumb_func_start sub_805C930 sub_805C930: @ 805C930 push {r4-r6,lr} diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 9ff432961..ef39f3df6 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -3,19 +3,6 @@ .section .rodata -gUnknown_0830FD14:: @ 830FD14 - .byte 1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0 - - .align 2 -gSpriteTemplate_830FD24:: @ 830FD24 - spr_template 0, 0xFFFF, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject - - .align 2 -gUnknown_0830FD3C:: @ 830FD3C - .4byte CameraObject_0 - .4byte CameraObject_1 - .4byte CameraObject_2 - @ 830FD48 .include "data/graphics/field_objects/map_object_graphics.inc" diff --git a/include/asm.inc.h b/include/asm.inc.h index 53b2f1cb8..8189914fa 100644 --- a/include/asm.inc.h +++ b/include/asm.inc.h @@ -63,7 +63,7 @@ void sub_805B710(u16 i, u16 i1); void sub_805B980(struct MapObject *, u8); void FieldObjectTurn(struct MapObject *, u8); void FieldObjectTurnByLocalIdAndMap(u8, u8, u8, u8); -struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8); +const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8); void npc_by_local_id_and_map_set_field_1_bit_x20(u8, u8, u8, u8); void FieldObjectGetLocalIdAndMap(struct MapObject *, u8 *, u8 *, u8 *); void sub_805BCF0(u8, u8, u8, u8); @@ -73,7 +73,7 @@ void gpu_pal_allocator_reset__manage_upper_four(void); void npc_coords_shift(struct MapObject *pObject, s16 x, s16 y); void sub_805C0F8(u8, u8, u8, s16, s16); void npc_coords_shift_still(struct MapObject *pObject); -u8 GetFieldObjectIdByXYZ(u16, u16, int); +u8 GetFieldObjectIdByXYZ(u16, u16, u8); void UpdateFieldObjectsForCameraUpdate(s16, s16); u8 AddCameraObject(u8); u8 * GetFieldObjectScriptPointerByFieldObjectId(u8); @@ -81,7 +81,7 @@ u8 FieldObjectGetBerryTreeId(u8); void sub_805C754(struct MapObject *pObject); void sub_805C774(struct MapObject *, u8); void sub_805C78C(u8, u8, u8); -void sub_805C7C4(int i); +void sub_805C7C4(u8 i); u8 FieldObjectDirectionToImageAnimId(u8); u8 get_go_image_anim_num(u8 unk_19); u8 sub_805FD98(u8); diff --git a/include/field_map_obj.h b/include/field_map_obj.h index c31b0fc2a..dfc41d38b 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -6,6 +6,6 @@ void sub_805C058(struct MapObject *mapObject, s16 a, s16 b); void FieldObjectSetDirection(struct MapObject *pObject, u8 unk_18); void MoveCoords(u8 direction, s16 *x, s16 *y); -void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u32 (*d8)(void)); +void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u32 (*d8)()); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index c273efb8b..3efca3af7 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -68,14 +68,14 @@ void sub_80597E8(void); void sub_80597F4(void); u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 a, u8 b); u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); -// GetPlayerAvatarGenderByGraphicsId +u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerSurfingNorth(void); bool8 IsPlayerFacingSurfableFishableWater(void); // ClearPlayerAvatarInfo void SetPlayerAvatarStateMask(u8 a); u8 GetPlayerAvatarGraphicsIdByCurrentState(void); -// SetPlayerAvatarExtraStateTransition +void SetPlayerAvatarExtraStateTransition(u8 a, u8 b); void InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d); // sub_8059B88 // sub_8059BF4 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index e3ec39ed1..3c6f4cf4e 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -78,7 +78,7 @@ struct MapObjectTemplate /*0x0C*/ u16 unkC; /*0x0E*/ u16 unkE; /*0x10*/ u8 *script; - /*0x14*/ u16 unk14; + /*0x14*/ u16 flagId; /*0x16*/ u8 filler_16[2]; }; /*size = 0x18*/ @@ -294,9 +294,9 @@ struct MapObjectGraphicsInfo /*0x0D*/ u8 tracks; /*0x10*/ struct OamData *oam; /*0x14*/ struct SubspriteTable *subspriteTables; - /*0x18*/ union AnimCmd **anims; + /*0x18*/ const union AnimCmd *const *anims; /*0x1C*/ struct SpriteFrameImage *images; - /*0x20*/ union AffineAnimCmd **affineAnims; + /*0x20*/ const union AffineAnimCmd *const *affineAnims; }; #define PLAYER_AVATAR_FLAG_ON_FOOT (1 << 0) @@ -354,6 +354,13 @@ struct PlayerAvatar /* 0x202E858 */ // TODO: rest of struct }; +struct Camera +{ + bool8 field_0:1; + s32 x; + s32 y; +}; + extern struct MapObject gMapObjects[]; extern u8 gSelectedMapObject; extern struct MapHeader gMapHeader; diff --git a/include/sprite.h b/include/sprite.h index 4e3074ebb..42620c9e9 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -147,7 +147,7 @@ struct Sprite { /*0x00*/ struct OamData oam; /*0x08*/ const union AnimCmd *const *anims; - /*0x0C*/ struct SpriteFrameImage *images; + /*0x0C*/ const struct SpriteFrameImage *images; /*0x10*/ const union AffineAnimCmd *const *affineAnims; /*0x14*/ const struct SpriteTemplate *template; /*0x18*/ const struct SubspriteTable *subspriteTables; @@ -200,6 +200,10 @@ struct Sprite /*0x43*/ u8 subpriority; }; +extern const struct OamData gDummyOamData; +extern const union AnimCmd *const gDummySpriteAnimTable[]; +extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; + extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; diff --git a/ld_script.txt b/ld_script.txt index a72ffc452..4e364d6bc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -316,6 +316,7 @@ SECTIONS { data/field_door.o(.rodata); src/field_player_avatar.o(.rodata); data/field_player_avatar.o(.rodata); + src/field_map_obj.o(.rodata); data/field_map_obj.o(.rodata); src/field_ground_effect.o(.rodata); data/field_ground_effect.o(.rodata); diff --git a/src/field_map_obj.c b/src/field_map_obj.c index bd57e7abe..e56ea9787 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -1,7 +1,10 @@ #include "global.h" #include "asm.h" +#include "berry.h" #include "event_data.h" #include "field_map_obj.h" +#include "field_player_avatar.h" +#include "palette.h" #include "rom4.h" #include "sprite.h" @@ -9,10 +12,13 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36] extern void strange_npc_table_clear(void); extern void ClearPlayerAvatarInfo(void); -extern void npc_load_two_palettes__no_record(); -extern void npc_load_two_palettes__and_record(); +extern void npc_load_two_palettes__no_record(u16, u8); +extern void npc_load_two_palettes__and_record(u16, u8); extern void sub_8060388(s16, s16, s16 *, s16 *); extern void sub_80634D0(); +extern void pal_patch_for_npc(u16, u16); +extern void sub_80603CC(); +extern void CameraObjectReset1(void); void sub_805AAB0(void); u8 GetFieldObjectIdByLocalId(u8); @@ -20,17 +26,37 @@ u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8); u8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *); void FieldObjectHandleDynamicGraphicsId(); void RemoveFieldObjectInternal(struct MapObject *); -u16 GetFieldObjectFlagIdByFieldObjectId(); +u16 GetFieldObjectFlagIdByFieldObjectId(u8); void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate *sprTemplate, struct SubspriteTable **subspriteTables); -struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(); +struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8); void GetFieldObjectMovingCameraOffset(s16 *, s16 *); -void sub_805BDF8(); +void sub_805BDF8(u16); +u8 sub_805BE58(const struct SpritePalette *); +u8 FindFieldObjectPaletteIndexByTag(u16); -extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; +struct PairedPalettes +{ + u16 tag; + u16 *data; +}; +extern struct LinkPlayerMapObject gLinkPlayerMapObjects[]; +extern u8 gReservedSpritePaletteCount; +extern struct Camera gUnknown_0202E844; +extern u8 gUnknown_030005A4; +extern u16 gUnknown_030005A6; extern const u8 gUnknown_0836DBBC[]; extern const u8 gUnknown_0836DC09[]; extern void (*const gUnknown_0836DA88[])(struct Sprite *); +extern const u8 *const gBerryTreeGraphicsIdTablePointers[]; +extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[]; +extern const u8 *const gBerryTreePaletteSlotTablePointers[]; +extern const struct MapObjectGraphicsInfo *const gMapObjectGraphicsInfoPointers[]; +extern const struct SpritePalette gUnknown_0837377C[]; +extern const struct PairedPalettes gUnknown_08373874[]; +extern const struct PairedPalettes gUnknown_083738E4[]; +extern const struct SpriteTemplate gSpriteTemplate_830FD24; +extern const u16 *const gUnknown_0837399C[]; void npc_clear_ids_and_state(struct MapObject *mapObj) { @@ -364,7 +390,7 @@ u8 sub_805ADDC(u8 localId) { struct MapObjectTemplate *template = &gSaveBlock1.mapObjectTemplates[i]; - if (template->localId == localId && !FlagGet(template->unk14)) + if (template->localId == localId && !FlagGet(template->flagId)) return InitFieldObjectStateFromTemplate(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup); } return 16; @@ -409,7 +435,7 @@ void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) void RemoveFieldObjectInternal(struct MapObject *mapObject) { struct SpriteFrameImage image; - struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); image.size = gfxInfo->size; gSprites[mapObject->spriteId].images = ℑ @@ -431,7 +457,7 @@ u8 sub_805AFCC(struct MapObjectTemplate *mapObjTemplate, struct SpriteTemplate * { u8 mapObjectId; u8 spriteId; - struct MapObjectGraphicsInfo *gfxInfo; + const struct MapObjectGraphicsInfo *gfxInfo; struct MapObject *mapObject; struct Sprite *sprite; @@ -482,7 +508,7 @@ u8 SpawnFieldObject(struct MapObjectTemplate *mapObjTemplate, u8 b, u8 c, s16 d, struct SpriteTemplate spriteTemplate; struct SubspriteTable *subspriteTables = NULL; struct SpriteFrameImage spriteFrameImage; - struct MapObjectGraphicsInfo *gfxInfo; + const struct MapObjectGraphicsInfo *gfxInfo; u8 mapObjectId; gfxInfo = GetFieldObjectGraphicsInfo(mapObjTemplate->graphicsId); @@ -542,7 +568,7 @@ u8 show_sprite(u8 a, u8 b, u8 c) void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, struct SubspriteTable **subspriteTables) { - struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); sprTemplate->tileTag = gfxInfo->tileTag; sprTemplate->paletteTag = gfxInfo->paletteTag1; @@ -588,7 +614,7 @@ extern void InitObjectPriorityByZCoord(); u8 sub_805B410(u8 a, u8 b, s16 c, s16 d, u8 e, u8 f) { - struct MapObjectGraphicsInfo *gfxInfo; + const struct MapObjectGraphicsInfo *gfxInfo; struct SpriteTemplate spriteTemplate; struct SubspriteTable *subspriteTables; u8 spriteId; @@ -648,7 +674,7 @@ void sub_805B55C(s16 a, s16 b) s16 bar = template->y + 7; if (r10 <= bar && spC >= bar && r9 <= foo && sp8 >= foo - && !FlagGet(template->unk14)) + && !FlagGet(template->flagId)) SpawnFieldObject(template, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, a, b); } } @@ -696,7 +722,7 @@ void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject) RemoveFieldObject(mapObject); } -void sub_805B75C(int, s16, s16); +void sub_805B75C(u8, s16, s16); void sub_805B710(u16 a, u16 b) { @@ -710,3 +736,814 @@ void sub_805B710(u16 a, u16 b) } sub_805AAB0(); } + +extern void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8); +extern void sub_805B914(struct MapObject *); + +void sub_805B75C(u8 a, s16 b, s16 c) +{ + struct SpriteTemplate sp0; + struct SpriteFrameImage sp18; + struct SubspriteTable *subspriteTables; + const struct MapObjectGraphicsInfo *gfxInfo; + struct MapObject *mapObject; + u8 spriteId; + + #define i spriteId + for (i = 0; i < 4; i++) + { + if (gLinkPlayerMapObjects[i].active && a == gLinkPlayerMapObjects[i].mapObjId) + return; + } + #undef i + + mapObject = &gMapObjects[a]; + asm("":::"r5"); + subspriteTables = NULL; + gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + sp18.size = gfxInfo->size; + MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObject->graphicsId, mapObject->animPattern, &sp0, &subspriteTables); + sp0.images = &sp18; + *(u16 *)&sp0.paletteTag = 0xFFFF; + if (gfxInfo->paletteSlot == 0) + npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (gfxInfo->paletteSlot > 9) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + *(u16 *)&sp0.paletteTag = 0xFFFF; + spriteId = CreateSprite(&sp0, 0, 0, 0); + if (spriteId != 64) + { + struct Sprite *sprite = &gSprites[spriteId]; + + sub_8060388(b + mapObject->coords2.x, c + mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + sprite->images = gfxInfo->images; + if (mapObject->animPattern == 11) + { + SetPlayerAvatarFieldObjectIdAndObjectId(a, spriteId); + mapObject->mapobj_unk_1B = sub_8126B54(); + } + if (subspriteTables != NULL) + SetSubspriteTables(sprite, subspriteTables); + sprite->oam.paletteNum = gfxInfo->paletteSlot; + sprite->coordOffsetEnabled = TRUE; + sprite->data0 = a; + mapObject->spriteId = spriteId; + if (!mapObject->mapobj_bit_12 && mapObject->animPattern != 11) + StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); + sub_805B914(mapObject); + SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1); + } +} + +void sub_805B914(struct MapObject *mapObject) +{ + mapObject->mapobj_bit_1 = FALSE; + mapObject->mapobj_bit_2 = TRUE; + mapObject->mapobj_bit_22 = FALSE; + mapObject->mapobj_bit_17 = FALSE; + mapObject->mapobj_bit_18 = FALSE; + mapObject->mapobj_bit_19 = FALSE; + mapObject->mapobj_bit_20 = FALSE; + mapObject->mapobj_bit_21 = FALSE; + FieldObjectClearAnim(mapObject); +} + +void SetPlayerAvatarFieldObjectIdAndObjectId(u8 mapObjectId, u8 spriteId) +{ + gPlayerAvatar.mapObjectId = mapObjectId; + gPlayerAvatar.spriteId = spriteId; + gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gMapObjects[mapObjectId].graphicsId); + SetPlayerAvatarExtraStateTransition(gMapObjects[mapObjectId].graphicsId, 0x20); +} + +void sub_805B980(struct MapObject *mapObject, u8 graphicsId) +{ + const struct MapObjectGraphicsInfo *gfxInfo; + struct Sprite *sprite; + + gfxInfo = GetFieldObjectGraphicsInfo(graphicsId); + sprite = &gSprites[mapObject->spriteId]; + if (gfxInfo->paletteSlot == 0) + pal_patch_for_npc(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + if (gfxInfo->paletteSlot == 10) + npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + sprite->oam.shape = gfxInfo->oam->shape; + sprite->oam.size = gfxInfo->oam->size; + sprite->images = gfxInfo->images; + sprite->anims = gfxInfo->anims; + sprite->subspriteTables = gfxInfo->subspriteTables; + sprite->oam.paletteNum = gfxInfo->paletteSlot; + mapObject->mapobj_bit_12 = gfxInfo->inanimate; + mapObject->graphicsId = graphicsId; + sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + if (mapObject->mapobj_bit_15) + CameraObjectReset1(); +} + +void unref_sub_805BA80(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + sub_805B980(&gMapObjects[mapObjectId], graphicsId); +} + +void FieldObjectTurn(struct MapObject *mapObject, u8 direction) +{ + FieldObjectSetDirection(mapObject, direction); + if (!mapObject->mapobj_bit_12) + { + StartSpriteAnim(&gSprites[mapObject->spriteId], FieldObjectDirectionToImageAnimId(mapObject->mapobj_unk_18)); + SeekSpriteAnim(&gSprites[mapObject->spriteId], 0); + } +} + +void FieldObjectTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + FieldObjectTurn(&gMapObjects[mapObjectId], direction); +} + +void unref_TurnPlayer(struct PlayerAvatar *player, u8 direction) +{ + FieldObjectTurn(&gMapObjects[player->mapObjectId], direction); +} + +void get_berry_tree_graphics(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 treeStage; + u8 treeId; + + mapObject->mapobj_bit_13 = TRUE; + sprite->invisible = TRUE; + treeStage = GetStageByBerryTreeId(mapObject->trainerRange_berryTreeId); + if (treeStage != 0) + { + mapObject->mapobj_bit_13 = FALSE; + sprite->invisible = FALSE; + treeId = GetBerryTypeByBerryTreeId(mapObject->trainerRange_berryTreeId) - 1; + treeStage--; + if (treeId > 0x2B) + treeId = 0; + sub_805B980(mapObject, gBerryTreeGraphicsIdTablePointers[treeId][treeStage]); + sprite->images = gBerryTreePicTablePointers[treeId]; + sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[treeId][treeStage]; + StartSpriteAnim(sprite, treeStage); + } +} + +const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId) +{ + if (graphicsId > 0xEF) + graphicsId = VarGetFieldObjectGraphicsId(graphicsId + 16); + if (graphicsId > 0xD9) + graphicsId = 5; + return gMapObjectGraphicsInfoPointers[graphicsId]; +} + +void FieldObjectHandleDynamicGraphicsId(struct MapObject *mapObject) +{ + if (mapObject->graphicsId > 0xEF) + mapObject->graphicsId = VarGetFieldObjectGraphicsId(mapObject->graphicsId + 16); +} + +void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGroup, u8 d) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + gMapObjects[mapObjectId].mapobj_bit_13 = d; +} + +void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup) +{ + *localId = mapObject->localId; + *mapNum = mapObject->mapNum; + *mapGroup = mapObject->mapGroup; +} + +void sub_805BCC0(s16 x, s16 y) +{ + u8 mapObjectId; + struct MapObject *mapObject; + + mapObjectId = GetFieldObjectIdByXY(x, y); + if (mapObjectId != 16) + { + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_2 = TRUE; + } +} + +void sub_805BCF0(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority) +{ + u8 mapObjectId; + struct MapObject *mapObject; + struct Sprite *sprite; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + mapObject = &gMapObjects[mapObjectId]; + sprite = &gSprites[mapObject->spriteId]; + mapObject->mapobj_bit_26 = TRUE; + sprite->subpriority = subpriority; + } +} + +void sub_805BD48(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + struct MapObject *mapObject; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + mapObject = &gMapObjects[mapObjectId]; + mapObject->mapobj_bit_26 = FALSE; + mapObject->mapobj_bit_2 = TRUE; + } +} + +void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +{ + u8 mapObjectId; + struct Sprite *sprite; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + sprite = &gSprites[gMapObjects[mapObjectId].spriteId]; + sprite->pos2.x = x; + sprite->pos2.y = y; + } +} + +void gpu_pal_allocator_reset__manage_upper_four(void) +{ + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 12; +} + +void sub_805BDF8(u16 tag) +{ + u16 paletteIndex = FindFieldObjectPaletteIndexByTag(tag); + + if (paletteIndex != 0x11FF) //always happens. FindFieldObjectPaletteIndexByTag returns u8 + sub_805BE58(&gUnknown_0837377C[paletteIndex]); +} + +void unref_sub_805BE24(u16 *arr) +{ + u8 i; + + for (i = 0; arr[i] != 0x11FF; i++) + sub_805BDF8(arr[i]); +} + +u8 sub_805BE58(const struct SpritePalette *palette) +{ + if (IndexOfSpritePaletteTag(palette->tag) != 0xFF) + return 0xFF; + else + return LoadSpritePalette(palette); +} + +void pal_patch_for_npc(u16 a, u16 b) +{ + u8 var = b; + u8 paletteIndex = FindFieldObjectPaletteIndexByTag(a); + + LoadPalette(gUnknown_0837377C[paletteIndex].data, var * 16 + 0x100, 0x20); +} + +void pal_patch_for_npc_range(const u16 *arr, u8 b, u8 c) +{ + for (; b < c; arr++, b++) + pal_patch_for_npc(*arr, b); +} + +u8 FindFieldObjectPaletteIndexByTag(u16 tag) +{ + u8 i; + + for (i = 0; gUnknown_0837377C[i].tag != 0x11FF; i++) + { + if (gUnknown_0837377C[i].tag == tag) + return i; + } + return 0xFF; +} + +const u8 gUnknown_0830FD14[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; + +void npc_load_two_palettes__no_record(u16 a, u8 b) +{ + u8 i; + + pal_patch_for_npc(a, b); + for (i = 0; gUnknown_08373874[i].tag != 0x11FF; i++) + { + if (gUnknown_08373874[i].tag == a) + { + pal_patch_for_npc(gUnknown_08373874[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); + break; + } + } +} + +void npc_load_two_palettes__and_record(u16 a, u8 b) +{ + u8 i; + + gUnknown_030005A6 = a; + pal_patch_for_npc(a, b); + for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + { + if (gUnknown_083738E4[i].tag == a) + { + pal_patch_for_npc(gUnknown_083738E4[i].data[gUnknown_030005A4], gUnknown_0830FD14[b]); + break; + } + } +} + +void unref_sub_805C014(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = mapObject->coords2.x; + mapObject->coords3.y = mapObject->coords2.y; + mapObject->coords2.x += x; + mapObject->coords2.y += y; +} + +void npc_coords_shift(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = mapObject->coords2.x; + mapObject->coords3.y = mapObject->coords2.y; + mapObject->coords2.x = x; + mapObject->coords2.y = y; +} + +void npc_coords_set(struct MapObject *mapObject, s16 x, s16 y) +{ + mapObject->coords3.x = x; + mapObject->coords3.y = y; + mapObject->coords2.x = x; + mapObject->coords2.y = y; +} + +void sub_805C058(struct MapObject *mapObject, s16 x, s16 y) +{ + struct Sprite *sprite = &gSprites[mapObject->spriteId]; + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + + npc_coords_set(mapObject, x, y); + sub_80603CC(mapObject->coords2.x, mapObject->coords2.y, &sprite->pos1.x, &sprite->pos1.y); + sprite->centerToCornerVecX = -(gfxInfo->width >> 1); + sprite->centerToCornerVecY = -(gfxInfo->height >> 1); + sprite->pos1.x += 8; + sprite->pos1.y += 16 + sprite->centerToCornerVecY; + sub_805B914(mapObject); + if (mapObject->mapobj_bit_15) + CameraObjectReset1(); +} + +void sub_805C0F8(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + { + x += 7; + y += 7; + sub_805C058(&gMapObjects[mapObjectId], x, y); + } +} + +void npc_coords_shift_still(struct MapObject *mapObject) +{ + npc_coords_shift(mapObject, mapObject->coords2.x, mapObject->coords2.y); +} + +void UpdateFieldObjectCoordsForCameraUpdate(void) +{ + u8 i; + s16 deltaX; + s16 deltaY; + +#ifndef NONMATCHING + asm(""::"r"(i)); //makes the compiler store i in r3 +#endif + + if (gUnknown_0202E844.field_0) + { + for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++) + { + struct MapObject *mapObject = &gMapObjects[i]; + + if (mapObject->active) + { + mapObject->coords1.x -= deltaX; + mapObject->coords1.y -= deltaY; + mapObject->coords2.x -= deltaX; + mapObject->coords2.y -= deltaY; + mapObject->coords3.x -= deltaX; + mapObject->coords3.y -= deltaY; + } + } + } +} + +bool8 FieldObjectDoesZCoordMatch(struct MapObject *, u8); + +u8 GetFieldObjectIdByXYZ(u16 x, u16 y, u8 z) +{ + u8 i; + + for (i = 0; i < 16; i++) + { + if (gMapObjects[i].active && gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y + && FieldObjectDoesZCoordMatch(&gMapObjects[i], z)) + return i; + } + return 16; +} + +bool8 FieldObjectDoesZCoordMatch(struct MapObject *mapObject, u8 z) +{ + if (mapObject->mapobj_unk_0B_0 != 0 && z != 0 + && mapObject->mapobj_unk_0B_0 != z) + return FALSE; + else + return TRUE; +} + +void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y) +{ + UpdateFieldObjectCoordsForCameraUpdate(); + sub_805B55C(x, y); + RemoveFieldObjectsOutsideView(); +} + +void ObjectCB_CameraObject(struct Sprite *sprite); +const struct SpriteTemplate gSpriteTemplate_830FD24 = +{ + .tileTag = 0, + .paletteTag = 0xFFFF, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = ObjectCB_CameraObject, +}; + +u8 AddCameraObject(u8 a) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_830FD24, 0, 0, 4); + + gSprites[spriteId].invisible = TRUE; + gSprites[spriteId].data0 = a; + return spriteId; +} + +void CameraObject_0(struct Sprite *); +void CameraObject_1(struct Sprite *); +void CameraObject_2(struct Sprite *); + +void ObjectCB_CameraObject(struct Sprite *sprite) +{ + void (*const cameraObjectFuncs[])(struct Sprite *) = + { + CameraObject_0, + CameraObject_1, + CameraObject_2, + }; + + cameraObjectFuncs[sprite->data1](sprite); +} + +void CameraObject_0(struct Sprite *sprite) +{ + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->invisible = TRUE; + sprite->data1 = 1; + CameraObject_1(sprite); +} + +void CameraObject_1(struct Sprite *sprite) +{ + s16 x = gSprites[sprite->data0].pos1.x; + s16 y = gSprites[sprite->data0].pos1.y; + + sprite->data2 = x - sprite->pos1.x; + sprite->data3 = y - sprite->pos1.y; + sprite->pos1.x = x; + sprite->pos1.y = y; +} + +void CameraObject_2(struct Sprite *sprite) +{ + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->data2 = 0; + sprite->data3 = 0; +} + +struct Sprite *FindCameraObject(void) +{ + u8 i; + + for (i = 0; i < 64; i++) + { + if (gSprites[i].inUse && gSprites[i].callback == ObjectCB_CameraObject) + return &gSprites[i]; + } + return NULL; +} + +void CameraObjectReset1(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite != NULL) + { + cameraSprite->data1 = 0; + cameraSprite->callback(cameraSprite); + } +} + +void CameraObjectSetFollowedObjectId(u8 state) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite != NULL) + { + cameraSprite->data0 = state; + CameraObjectReset1(); + } +} + +u8 CameraObjectGetFollowedObjectId(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + if (cameraSprite == NULL) + return 64; + else + return cameraSprite->data0; +} + +void CameraObjectReset2(void) +{ + struct Sprite *cameraSprite = FindCameraObject(); + + cameraSprite->data1 = 2; +} + +u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) +{ + u8 i; + + for (i = 0; i < 64; i++) + { + if (!gSprites[i].inUse) + { + gSprites[i] = *src; + gSprites[i].pos1.x = x; + gSprites[i].pos1.y = y; + gSprites[i].subpriority = subpriority; + break; + } + } + return i; +} + +u8 obj_unfreeze(struct Sprite *src, s16 x, s16 y, u8 subpriority) +{ + s16 i; + + for (i = 63; i > -1; i--) + { + if (!gSprites[i].inUse) + { + gSprites[i] = *src; + gSprites[i].pos1.x = x; + gSprites[i].pos1.y = y; + gSprites[i].subpriority = subpriority; + return i; + } + } + return 64; +} + +void FieldObjectSetDirection(struct MapObject *mapObject, u8 direction) +{ + mapObject->mapobj_unk_20 = mapObject->mapobj_unk_18; + if (!mapObject->mapobj_bit_9) + { + s8 _direction = direction; //needed for the asm to match + mapObject->mapobj_unk_18 = _direction; + } + mapObject->placeholder18 = direction; +} + +u8 *GetFieldObjectScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + + return template->script; +} + +u8 *GetFieldObjectScriptPointerByFieldObjectId(u8 mapObjectId) +{ + return GetFieldObjectScriptPointerByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); +} + +u16 GetFieldObjectFlagIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + struct MapObjectTemplate *template = GetFieldObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); + + return template->flagId; +} + +u16 GetFieldObjectFlagIdByFieldObjectId(u8 mapObjectId) +{ + return GetFieldObjectFlagIdByLocalIdAndMap(gMapObjects[mapObjectId].localId, gMapObjects[mapObjectId].mapNum, gMapObjects[mapObjectId].mapGroup); +} + +u8 unref_sub_805C5D0(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + return 0xFF; + else + return gMapObjects[mapObjectId].trainerType; +} + +u8 unref_sub_805C60C(u8 mapObjectId) +{ + return gMapObjects[mapObjectId].trainerType; +} + +u8 unref_sub_805C624(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + return 0xFF; + else + return gMapObjects[mapObjectId].trainerRange_berryTreeId; +} + +u8 FieldObjectGetBerryTreeId(u8 mapObjectId) +{ + return gMapObjects[mapObjectId].trainerRange_berryTreeId; +} + +struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8, struct MapObjectTemplate *, u8); + +struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +{ + if (gSaveBlock1.location.mapNum == mapNum && gSaveBlock1.location.mapGroup == mapGroup) + return FindFieldObjectTemplateInArrayByLocalId(localId, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount); + else + { + struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum); + + return FindFieldObjectTemplateInArrayByLocalId(localId, mapHeader->events->mapObjects, mapHeader->events->mapObjectCount); + } +} + +struct MapObjectTemplate *FindFieldObjectTemplateInArrayByLocalId(u8 localId, struct MapObjectTemplate *templates, u8 count) +{ + u8 i; + + for (i = 0; i < count; i++) + { + if (templates[i].localId == localId) + return &templates[i]; + } + return NULL; +} + +struct MapObjectTemplate *sub_805C700(struct MapObject *mapObject) +{ + s32 i; + + if (mapObject->mapNum != gSaveBlock1.location.mapNum + || mapObject->mapGroup != gSaveBlock1.location.mapGroup) + return NULL; + + for (i = 0; i < 64; i++) + { + if (mapObject->localId == gSaveBlock1.mapObjectTemplates[i].localId) + return &gSaveBlock1.mapObjectTemplates[i]; + } + return NULL; +} + +void sub_805C754(struct MapObject *mapObject) +{ + struct MapObjectTemplate *template = sub_805C700(mapObject); + + if (template != NULL) + { + template->x = mapObject->coords2.x - 7; + template->y = mapObject->coords2.y - 7; + } +} + +void sub_805C774(struct MapObject *mapObject, u8 movementType) +{ + struct MapObjectTemplate *template = sub_805C700(mapObject); + + if (template != NULL) + template->movementType = movementType; +} + +void sub_805C78C(u8 localId, u8 mapNum, u8 mapGroup) +{ + u8 mapObjectId; + + if (!TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId)) + sub_805C754(&gMapObjects[mapObjectId]); +} + +void sub_805C7C4(u8 a) +{ + gpu_pal_allocator_reset__manage_upper_four(); + gUnknown_030005A6 = 0x11FF; + gUnknown_030005A4 = a; + pal_patch_for_npc_range(gUnknown_0837399C[gUnknown_030005A4], 0, 10); +} + +u16 npc_paltag_by_palslot(u8 a) +{ + u8 i; + + if (a < 10) + return gUnknown_0837399C[gUnknown_030005A4][a]; + + for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + { + if (gUnknown_083738E4[i].tag == gUnknown_030005A6) + { + return gUnknown_083738E4[i].data[gUnknown_030005A4]; + } + } + return 0x11FF; +} + +u32 sub_805C8A8(void); + +void sub_805C884(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8A8); +} + +u32 sub_805C8A8(void) +{ + return 0; +} + +u32 sub_805C8D0(struct MapObject *, struct Sprite *); + +void sub_805C8AC(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8D0); +} + +extern u8 (*const gUnknown_08375224[])(); + +u32 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375224[sprite->data1](mapObject, sprite); +} + +void npc_reset(); + +u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject); + sprite->data1 = 1; + return 1; +} + +extern void FieldObjectSetRegularAnim(); + +u8 sub_805C904(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c index 815a5aabd..afc3c680c 100644 --- a/src/field_map_obj_helpers.c +++ b/src/field_map_obj_helpers.c @@ -311,7 +311,7 @@ void DoShadowFieldEffect(struct MapObject *mapObject) void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite) { - struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); + const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId); gUnknown_0202FF84[0] = sprite->pos1.x; gUnknown_0202FF84[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2; gUnknown_0202FF84[2] = 151; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index e4c3b78c9..51a2d8089 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1185,7 +1185,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) playerMapObjTemplate.unkC = 0; playerMapObjTemplate.unkE = 0; playerMapObjTemplate.script = NULL; - playerMapObjTemplate.unk14 = 0; + playerMapObjTemplate.flagId = 0; mapObjectId = SpawnSpecialFieldObject(&playerMapObjTemplate); mapObject = &gMapObjects[mapObjectId]; mapObject->mapobj_bit_16 = 1; diff --git a/src/fieldmap.c b/src/fieldmap.c index f3794f286..7a24897c4 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -16,13 +16,6 @@ extern void sub_8056670(); extern void UpdateTVScreensOnMap(); extern void sub_80538F0(u8 mapGroup, u8 mapNum); -struct Camera -{ - bool8 field_0:1; - s32 x; - s32 y; -}; - struct ConnectionFlags { u8 south:1; diff --git a/src/pokemon_2.c b/src/pokemon_2.c index c591e893a..9030fe096 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -249,8 +249,7 @@ void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) { gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; gUnknown_02024E8C.paletteTag = species; - //Don't know why the compiler says this is incompatible - gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; + gUnknown_02024E8C.anims = (const union AnimCmd *const *)gSpriteAnimTable_81E7C64; //Why do I have to cast this? } void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) diff --git a/src/sprite.c b/src/sprite.c index 43ee5696b..409c66cfa 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -58,7 +58,7 @@ static void ResetOamMatrices(void); static void ResetSprite(struct Sprite *sprite); static s16 AllocSpriteTiles(u16 tileCount); u8 SpriteTileAllocBitmapOp(u16 bit, u8 op); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, struct SpriteFrameImage *images); +static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); static void ResetAllSprites(void); static void BeginAnim(struct Sprite *sprite); static void ContinueAnim(struct Sprite *sprite); @@ -829,7 +829,7 @@ void ProcessSpriteCopyRequests(void) } } -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, struct SpriteFrameImage *images) +static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) { if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { |