diff options
-rw-r--r-- | asm/overworld.s | 18 | ||||
-rw-r--r-- | asm/tileset_anims.s | 667 | ||||
-rw-r--r-- | include/bg.h | 4 | ||||
-rw-r--r-- | include/gba/defines.h | 3 | ||||
-rw-r--r-- | include/tileset_anims.h | 9 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/bg.c | 395 | ||||
-rw-r--r-- | src/tileset_anims.c | 248 | ||||
-rw-r--r-- | sym_bss.txt | 22 | ||||
-rw-r--r-- | sym_ewram.txt | 3 |
10 files changed, 324 insertions, 1047 deletions
diff --git a/asm/overworld.s b/asm/overworld.s index 56c253477..b2bce4b48 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -701,7 +701,7 @@ mapdata_load_assets_to_gpu_and_full_redraw: @ 8055148 ldr r0, [r4] bl apply_map_tileset1_tileset2_palette bl DrawWholeMapView - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations pop {r4} pop {r0} bx r0 @@ -1732,7 +1732,7 @@ _080558D4: adds r4, 0x1 cmp r4, 0xC ble _080558D4 - bl sub_806FFB0 + bl InitSecondaryTilesetAnimation bl UpdateLocationHistoryForRoamer bl RoamerMove bl sub_8110920 @@ -3392,7 +3392,7 @@ sub_8056578: @ 8056578 bl UpdateCameraPanning bl BuildOamBuffer bl UpdatePaletteFade - bl sub_806FFBC + bl UpdateTilesetAnimations bl DoScheduledBgTilemapCopiesToVram pop {r0} bx r0 @@ -4051,7 +4051,7 @@ _08056B30: bl DrawWholeMapView b _08056B62 _08056B36: - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations b _08056B62 _08056B3C: ldr r0, _08056B54 @ =gWirelessCommType @@ -4193,7 +4193,7 @@ _08056C6C: bl DrawWholeMapView b _08056CCA _08056C72: - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations b _08056CCA _08056C78: bl sub_80561B4 @@ -4382,7 +4382,7 @@ _08056E0C: bl DrawWholeMapView b _08056E3E _08056E12: - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations b _08056E3E _08056E18: ldr r0, _08056E30 @ =gWirelessCommType @@ -5093,7 +5093,7 @@ _08057404: bl DrawWholeMapView b _08057412 _0805740A: - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations bl sub_815A540 _08057412: ldrb r0, [r4] @@ -5176,7 +5176,7 @@ _080574B8: bl UpdateCameraPanning bl BuildOamBuffer bl UpdatePaletteFade - bl sub_806FFBC + bl UpdateTilesetAnimations bl DoScheduledBgTilemapCopiesToVram cmp r4, 0 beq _080574E0 @@ -5442,7 +5442,7 @@ _0805770C: bl DrawWholeMapView b _0805772A _08057712: - bl cur_mapheader_run_tileset_funcs_after_some_cpuset + bl InitTilesetAnimations ldr r2, _08057734 @ =gPaletteFade ldrb r1, [r2, 0x8] movs r0, 0x7F diff --git a/asm/tileset_anims.s b/asm/tileset_anims.s deleted file mode 100644 index 693962d39..000000000 --- a/asm/tileset_anims.s +++ /dev/null @@ -1,667 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start ResetTilesetAnimBuffer -ResetTilesetAnimBuffer: @ 806FED8 - push {lr} - sub sp, 0x4 - ldr r1, _0806FEF8 @ =gUnknown_3000FAC - movs r0, 0 - strb r0, [r1] - movs r0, 0 - str r0, [sp] - ldr r1, _0806FEFC @ =gUnknown_2037108 - ldr r2, _0806FF00 @ =0x0500003c - mov r0, sp - bl CpuSet - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0806FEF8: .4byte gUnknown_3000FAC -_0806FEFC: .4byte gUnknown_2037108 -_0806FF00: .4byte 0x0500003c - thumb_func_end ResetTilesetAnimBuffer - - thumb_func_start AppendTilesetAnimToBuffer -AppendTilesetAnimToBuffer: @ 806FF04 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - lsls r2, 16 - lsrs r6, r2, 16 - ldr r3, _0806FF4C @ =gUnknown_3000FAC - ldrb r0, [r3] - cmp r0, 0x13 - bhi _0806FF44 - ldr r2, _0806FF50 @ =gUnknown_2037108 - adds r1, r0, 0 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - str r4, [r0] - ldrb r1, [r3] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r1, r2, 0x4 - adds r0, r1 - str r5, [r0] - ldrb r1, [r3] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r6, [r0, 0x8] - ldrb r0, [r3] - adds r0, 0x1 - strb r0, [r3] -_0806FF44: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806FF4C: .4byte gUnknown_3000FAC -_0806FF50: .4byte gUnknown_2037108 - thumb_func_end AppendTilesetAnimToBuffer - - thumb_func_start TransferTilesetAnimsBuffer -TransferTilesetAnimsBuffer: @ 806FF54 - push {r4-r6,lr} - movs r3, 0 - ldr r4, _0806FF90 @ =gUnknown_3000FAC - adds r6, r4, 0 - ldrb r0, [r4] - cmp r3, r0 - bge _0806FF86 - ldr r2, _0806FF94 @ =0x040000d4 - ldr r1, _0806FF98 @ =gUnknown_2037108 - movs r5, 0x80 - lsls r5, 24 -_0806FF6A: - ldr r0, [r1] - str r0, [r2] - ldr r0, [r1, 0x4] - str r0, [r2, 0x4] - ldrh r0, [r1, 0x8] - lsrs r0, 1 - orrs r0, r5 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - adds r1, 0xC - adds r3, 0x1 - ldrb r0, [r4] - cmp r3, r0 - blt _0806FF6A -_0806FF86: - movs r0, 0 - strb r0, [r6] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0806FF90: .4byte gUnknown_3000FAC -_0806FF94: .4byte 0x040000d4 -_0806FF98: .4byte gUnknown_2037108 - thumb_func_end TransferTilesetAnimsBuffer - - thumb_func_start cur_mapheader_run_tileset_funcs_after_some_cpuset -cur_mapheader_run_tileset_funcs_after_some_cpuset: @ 806FF9C - push {lr} - bl ResetTilesetAnimBuffer - bl cur_mapheader_run_tileset1_func - bl cur_mapheader_run_tileset2_func - pop {r0} - bx r0 - thumb_func_end cur_mapheader_run_tileset_funcs_after_some_cpuset - - thumb_func_start sub_806FFB0 -sub_806FFB0: @ 806FFB0 - push {lr} - bl cur_mapheader_run_tileset2_func - pop {r0} - bx r0 - thumb_func_end sub_806FFB0 - - thumb_func_start sub_806FFBC -sub_806FFBC: @ 806FFBC - push {r4,lr} - bl ResetTilesetAnimBuffer - ldr r2, _08070014 @ =sPrimaryTilesetCBCounter - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - ldr r1, _08070018 @ =sPrimaryTilesetCBBufferSize - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1] - cmp r0, r1 - bcc _0806FFDA - movs r0, 0 - strh r0, [r2] -_0806FFDA: - ldr r4, _0807001C @ =sSecondaryTilesetCBCounter - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - ldr r1, _08070020 @ =sSecondaryTilesetCBBufferSize - lsls r0, 16 - lsrs r0, 16 - ldrh r1, [r1] - cmp r0, r1 - bcc _0806FFF2 - movs r0, 0 - strh r0, [r4] -_0806FFF2: - ldr r0, _08070024 @ =sPrimaryTilesetCB - ldr r1, [r0] - cmp r1, 0 - beq _08070000 - ldrh r0, [r2] - bl _call_via_r1 -_08070000: - ldr r0, _08070028 @ =sSecondaryTilesetCB - ldr r1, [r0] - cmp r1, 0 - beq _0807000E - ldrh r0, [r4] - bl _call_via_r1 -_0807000E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08070014: .4byte sPrimaryTilesetCBCounter -_08070018: .4byte sPrimaryTilesetCBBufferSize -_0807001C: .4byte sSecondaryTilesetCBCounter -_08070020: .4byte sSecondaryTilesetCBBufferSize -_08070024: .4byte sPrimaryTilesetCB -_08070028: .4byte sSecondaryTilesetCB - thumb_func_end sub_806FFBC - - thumb_func_start cur_mapheader_run_tileset1_func -cur_mapheader_run_tileset1_func: @ 807002C - push {lr} - ldr r0, _08070058 @ =sPrimaryTilesetCBCounter - movs r1, 0 - strh r1, [r0] - ldr r0, _0807005C @ =sPrimaryTilesetCBBufferSize - strh r1, [r0] - ldr r1, _08070060 @ =sPrimaryTilesetCB - movs r0, 0 - str r0, [r1] - ldr r0, _08070064 @ =gMapHeader - ldr r0, [r0] - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _08070052 - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _08070052 - bl _call_via_r0 -_08070052: - pop {r0} - bx r0 - .align 2, 0 -_08070058: .4byte sPrimaryTilesetCBCounter -_0807005C: .4byte sPrimaryTilesetCBBufferSize -_08070060: .4byte sPrimaryTilesetCB -_08070064: .4byte gMapHeader - thumb_func_end cur_mapheader_run_tileset1_func - - thumb_func_start cur_mapheader_run_tileset2_func -cur_mapheader_run_tileset2_func: @ 8070068 - push {lr} - ldr r0, _08070094 @ =sSecondaryTilesetCBCounter - movs r1, 0 - strh r1, [r0] - ldr r0, _08070098 @ =sSecondaryTilesetCBBufferSize - strh r1, [r0] - ldr r1, _0807009C @ =sSecondaryTilesetCB - movs r0, 0 - str r0, [r1] - ldr r0, _080700A0 @ =gMapHeader - ldr r0, [r0] - ldr r0, [r0, 0x14] - cmp r0, 0 - beq _0807008E - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _0807008E - bl _call_via_r0 -_0807008E: - pop {r0} - bx r0 - .align 2, 0 -_08070094: .4byte sSecondaryTilesetCBCounter -_08070098: .4byte sSecondaryTilesetCBBufferSize -_0807009C: .4byte sSecondaryTilesetCB -_080700A0: .4byte gMapHeader - thumb_func_end cur_mapheader_run_tileset2_func - - thumb_func_start sub_80700A4 -sub_80700A4: @ 80700A4 - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r4, _080700C8 @ =gUnknown_83A7660 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 14 - adds r0, r4 - ldr r0, [r0] - ldr r1, _080700CC @ =0x06003f80 - movs r2, 0x80 - bl AppendTilesetAnimToBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080700C8: .4byte gUnknown_83A7660 -_080700CC: .4byte 0x06003f80 - thumb_func_end sub_80700A4 - - thumb_func_start sub_80700D0 -sub_80700D0: @ 80700D0 - push {lr} - lsls r0, 16 - ldr r2, _080700F0 @ =gUnknown_83AA654 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 14 - adds r1, r2 - ldr r0, [r1] - ldr r1, _080700F4 @ =0x06003400 - movs r2, 0xC0 - lsls r2, 3 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_080700F0: .4byte gUnknown_83AA654 -_080700F4: .4byte 0x06003400 - thumb_func_end sub_80700D0 - - thumb_func_start sub_80700F8 -sub_80700F8: @ 80700F8 - push {lr} - lsls r0, 16 - ldr r2, _08070118 @ =gUnknown_83AB874 - movs r1, 0xE0 - lsls r1, 11 - ands r1, r0 - lsrs r1, 14 - adds r1, r2 - ldr r0, [r1] - ldr r1, _0807011C @ =0x06003a00 - movs r2, 0x90 - lsls r2, 2 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_08070118: .4byte gUnknown_83AB874 -_0807011C: .4byte 0x06003a00 - thumb_func_end sub_80700F8 - - thumb_func_start sub_8070120 -sub_8070120: @ 8070120 - push {r4-r6,lr} - lsls r5, r0, 16 - lsrs r6, r5, 16 - movs r0, 0x7 - ands r0, r6 - cmp r0, 0 - bne _08070134 - lsrs r0, r5, 19 - bl sub_80700F8 -_08070134: - movs r4, 0xF - ands r4, r6 - cmp r4, 0x1 - bne _08070142 - lsrs r0, r5, 20 - bl sub_80700D0 -_08070142: - cmp r4, 0x2 - bne _0807014C - lsrs r0, r5, 20 - bl sub_80700A4 -_0807014C: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8070120 - - thumb_func_start sub_8070154 -sub_8070154: @ 8070154 - ldr r1, _0807016C @ =sPrimaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _08070170 @ =sPrimaryTilesetCBBufferSize - movs r2, 0xA0 - lsls r2, 2 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08070174 @ =sPrimaryTilesetCB - ldr r0, _08070178 @ =sub_8070120 - str r0, [r1] - bx lr - .align 2, 0 -_0807016C: .4byte sPrimaryTilesetCBCounter -_08070170: .4byte sPrimaryTilesetCBBufferSize -_08070174: .4byte sPrimaryTilesetCB -_08070178: .4byte sub_8070120 - thumb_func_end sub_8070154 - - thumb_func_start sub_807017C -sub_807017C: @ 807017C - push {r4,lr} - lsls r0, 16 - lsrs r0, 16 - ldr r4, _080701A4 @ =gUnknown_83ABDB4 - movs r1, 0x5 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 14 - adds r0, r4 - ldr r0, [r0] - ldr r1, _080701A8 @ =0x06005d00 - movs r2, 0x80 - lsls r2, 1 - bl AppendTilesetAnimToBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080701A4: .4byte gUnknown_83ABDB4 -_080701A8: .4byte 0x06005d00 - thumb_func_end sub_807017C - - thumb_func_start sub_80701AC -sub_80701AC: @ 80701AC - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - movs r1, 0xC - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _080701D0 - adds r0, r4, 0 - movs r1, 0xC - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - bl sub_807017C -_080701D0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80701AC - - thumb_func_start sub_80701D8 -sub_80701D8: @ 80701D8 - ldr r1, _080701EC @ =sSecondaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _080701F0 @ =sSecondaryTilesetCBBufferSize - movs r0, 0x78 - strh r0, [r1] - ldr r1, _080701F4 @ =sSecondaryTilesetCB - ldr r0, _080701F8 @ =sub_80701AC - str r0, [r1] - bx lr - .align 2, 0 -_080701EC: .4byte sSecondaryTilesetCBCounter -_080701F0: .4byte sSecondaryTilesetCBBufferSize -_080701F4: .4byte sSecondaryTilesetCB -_080701F8: .4byte sub_80701AC - thumb_func_end sub_80701D8 - - thumb_func_start sub_80701FC -sub_80701FC: @ 80701FC - push {lr} - lsls r0, 16 - ldr r2, _0807021C @ =gUnknown_83AC1E8 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 14 - adds r1, r2 - ldr r0, [r1] - ldr r1, _08070220 @ =0x06007a00 - movs r2, 0x80 - lsls r2, 1 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_0807021C: .4byte gUnknown_83AC1E8 -_08070220: .4byte 0x06007a00 - thumb_func_end sub_80701FC - - thumb_func_start sub_8070224 -sub_8070224: @ 8070224 - push {r4,lr} - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 - movs r1, 0xA - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _08070248 - adds r0, r4, 0 - movs r1, 0xA - bl __udivsi3 - lsls r0, 16 - lsrs r0, 16 - bl sub_80701FC -_08070248: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8070224 - - thumb_func_start sub_8070250 -sub_8070250: @ 8070250 - ldr r1, _08070264 @ =sSecondaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _08070268 @ =sSecondaryTilesetCBBufferSize - movs r0, 0xA0 - strh r0, [r1] - ldr r1, _0807026C @ =sSecondaryTilesetCB - ldr r0, _08070270 @ =sub_8070224 - str r0, [r1] - bx lr - .align 2, 0 -_08070264: .4byte sSecondaryTilesetCBCounter -_08070268: .4byte sSecondaryTilesetCBBufferSize -_0807026C: .4byte sSecondaryTilesetCB -_08070270: .4byte sub_8070224 - thumb_func_end sub_8070250 - - thumb_func_start sub_8070274 -sub_8070274: @ 8070274 - push {lr} - lsls r0, 16 - ldr r2, _08070294 @ =gUnknown_83AC5F8 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - lsrs r1, 14 - adds r1, r2 - ldr r0, [r1] - ldr r1, _08070298 @ =0x06007000 - movs r2, 0x80 - lsls r2, 1 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_08070294: .4byte gUnknown_83AC5F8 -_08070298: .4byte 0x06007000 - thumb_func_end sub_8070274 - - thumb_func_start sub_807029C -sub_807029C: @ 807029C - push {lr} - lsls r1, r0, 16 - movs r0, 0xF0 - lsls r0, 12 - ands r0, r1 - cmp r0, 0 - bne _080702B0 - lsrs r0, r1, 20 - bl sub_8070274 -_080702B0: - pop {r0} - bx r0 - thumb_func_end sub_807029C - - thumb_func_start sub_80702B4 -sub_80702B4: @ 80702B4 - ldr r1, _080702CC @ =sSecondaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _080702D0 @ =sSecondaryTilesetCBBufferSize - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _080702D4 @ =sSecondaryTilesetCB - ldr r0, _080702D8 @ =sub_807029C - str r0, [r1] - bx lr - .align 2, 0 -_080702CC: .4byte sSecondaryTilesetCBCounter -_080702D0: .4byte sSecondaryTilesetCBBufferSize -_080702D4: .4byte sSecondaryTilesetCB -_080702D8: .4byte sub_807029C - thumb_func_end sub_80702B4 - - thumb_func_start sub_80702DC -sub_80702DC: @ 80702DC - push {lr} - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - ands r0, r1 - ldr r1, _080702FC @ =gUnknown_83AC7C8 - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - ldr r1, _08070300 @ =0x06006e00 - movs r2, 0xE0 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_080702FC: .4byte gUnknown_83AC7C8 -_08070300: .4byte 0x06006e00 - thumb_func_end sub_80702DC - - thumb_func_start sub_8070304 -sub_8070304: @ 8070304 - push {lr} - lsls r2, r0, 16 - lsrs r0, r2, 16 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08070318 - lsrs r0, r2, 17 - bl sub_80702DC -_08070318: - pop {r0} - bx r0 - thumb_func_end sub_8070304 - - thumb_func_start sub_807031C -sub_807031C: @ 807031C - ldr r1, _08070330 @ =sSecondaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _08070334 @ =sSecondaryTilesetCBBufferSize - movs r0, 0xF0 - strh r0, [r1] - ldr r1, _08070338 @ =sSecondaryTilesetCB - ldr r0, _0807033C @ =sub_8070304 - str r0, [r1] - bx lr - .align 2, 0 -_08070330: .4byte sSecondaryTilesetCBCounter -_08070334: .4byte sSecondaryTilesetCBBufferSize -_08070338: .4byte sSecondaryTilesetCB -_0807033C: .4byte sub_8070304 - thumb_func_end sub_807031C - - thumb_func_start sub_8070340 -sub_8070340: @ 8070340 - push {lr} - lsls r0, 16 - movs r1, 0xC0 - lsls r1, 10 - ands r1, r0 - ldr r0, _08070360 @ =gUnknown_83AC950 - lsrs r1, 14 - adds r1, r0 - ldr r0, [r1] - ldr r1, _08070364 @ =0x06005c60 - movs r2, 0x80 - bl AppendTilesetAnimToBuffer - pop {r0} - bx r0 - .align 2, 0 -_08070360: .4byte gUnknown_83AC950 -_08070364: .4byte 0x06005c60 - thumb_func_end sub_8070340 - - thumb_func_start sub_8070368 -sub_8070368: @ 8070368 - push {lr} - lsls r1, r0, 16 - movs r0, 0xF0 - lsls r0, 12 - ands r0, r1 - cmp r0, 0 - bne _0807037C - lsrs r0, r1, 20 - bl sub_8070340 -_0807037C: - pop {r0} - bx r0 - thumb_func_end sub_8070368 - - thumb_func_start sub_8070380 -sub_8070380: @ 8070380 - ldr r1, _08070398 @ =sSecondaryTilesetCBCounter - movs r0, 0 - strh r0, [r1] - ldr r1, _0807039C @ =sSecondaryTilesetCBBufferSize - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _080703A0 @ =sSecondaryTilesetCB - ldr r0, _080703A4 @ =sub_8070368 - str r0, [r1] - bx lr - .align 2, 0 -_08070398: .4byte sSecondaryTilesetCBCounter -_0807039C: .4byte sSecondaryTilesetCBBufferSize -_080703A0: .4byte sSecondaryTilesetCB -_080703A4: .4byte sub_8070368 - thumb_func_end sub_8070380 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/bg.h b/include/bg.h index 40c51167f..0d6b0e171 100644 --- a/include/bg.h +++ b/include/bg.h @@ -90,14 +90,14 @@ void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset); void CopyBgTilemapBufferToVram(u8 bg); void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height); void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette); -void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2); +void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, s16 tileOffset, s16 palette2); void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height); void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette); void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta); u16 GetBgMetricTextMode(u8 bg, u8 whichMetric); u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric); u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight); -void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2); +void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2); u32 GetBgType(u8 bg); bool32 IsInvalidBg32(u8 bg); bool32 IsTileMapOutsideWram(u8 bg); diff --git a/include/gba/defines.h b/include/gba/defines.h index 5489f9e14..3932a8542 100644 --- a/include/gba/defines.h +++ b/include/gba/defines.h @@ -62,6 +62,9 @@ #define TILE_SIZE_4BPP 32 #define TILE_SIZE_8BPP 64 +#define TILE_OFFSET_4BPP(n) ((n) * TILE_SIZE_4BPP) +#define TILE_OFFSET_8BPP(n) ((n) * TILE_SIZE_8BPP) + #define TOTAL_OBJ_TILE_COUNT 1024 #define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10)) diff --git a/include/tileset_anims.h b/include/tileset_anims.h new file mode 100644 index 000000000..0e515f044 --- /dev/null +++ b/include/tileset_anims.h @@ -0,0 +1,9 @@ +#ifndef GUARD_TILESET_ANIMS_H +#define GUARD_TILESET_ANIMS_H + +void InitTilesetAnimations(void); +void InitSecondaryTilesetAnimation(void); +void UpdateTilesetAnimations(void); +void TransferTilesetAnimsBuffer(void); + +#endif // GUARD_TILESET_ANIMS_H diff --git a/ld_script.txt b/ld_script.txt index 08aecb323..752feb6a1 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -107,7 +107,7 @@ SECTIONS { src/coord_event_weather.o(.text); asm/field_tasks.o(.text); asm/start_menu.o(.text); - asm/tileset_anims.o(.text); + src/tileset_anims.o(.text); asm/palette.o(.text); src/sound.o(.text); asm/battle_anim.o(.text); @@ -1024,295 +1024,49 @@ void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u { CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); } -// Skipping for now, it probably uses structs passed by value -/* -void CopyRectToBgTilemapBufferRect(u8 bg, void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) -{ - u16 attribute; - u16 mode; - u16 mode2; - void* srcCopy; - u16 destX16; - u16 destY16; +void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset) +{ + u16 screenWidth, screenHeight, screenSize; + u16 var; + const void *srcPtr; + u16 i, j; - if (IsInvalidBg32(bg) == FALSE && IsTileMapOutsideWram(bg) == FALSE) + if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) { - attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - mode = GetBgMetricTextMode(bg, 0x1) * 0x20; - mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20; + screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); + screenWidth = GetBgMetricTextMode(bg, 0x1) * 0x20; + screenHeight = GetBgMetricTextMode(bg, 0x2) * 0x20; switch (GetBgType(bg)) { - case 0: - srcCopy = src; - for (destY16 = destY; destY16 < (destY + rectHeight); destY16++) + case 0: + srcPtr = src + ((srcY * srcWidth) + srcX) * 2; + for (i = destX; i < (destX + rectWidth); i++) + { + for (j = srcHeight; j < (srcHeight + destY); j++) { - for (destX16 = destX; destX16 < (destX + rectWidth); destX16++) - { - CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2); - } + u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight); + CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), rectHeight, palette1, tileOffset); + srcPtr += 2; } - break; - case 1: - srcCopy = src; - mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + rectHeight); destY16++) + srcPtr += (srcWidth - destY) * 2; + } + break; + case 1: + srcPtr = src + ((srcY * srcWidth) + srcX); + var = GetBgMetricAffineMode(bg, 0x1); + for (i = destX; i < (destX + rectWidth); i++) + { + for (j = srcHeight; j < (srcHeight + destY); j++) { - for (destX16 = destX; destX16 < (destX + rectWidth); destX16++) - { - CopyTileMapEntry(&((u16*)srcCopy)[(srcY * rectWidth) + srcX], &((u16*)sGpuBgConfigs2[bg].tilemap)[GetTileMapIndexFromCoords(destX16, destY16, attribute, mode, mode2)], palette1, tileOffset, palette2); - } + *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + palette1; + srcPtr++; } - break; + srcPtr += (srcWidth - destY); + } + break; } } -}*/ -NAKED -void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8 srcWidth, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette1, u16 tileOffset, u16 palette2) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x40\n\ - str r1, [sp, #0x8]\n\ - ldr r1, [sp, #0x60]\n\ - ldr r4, [sp, #0x68]\n\ - ldr r5, [sp, #0x6C]\n\ - ldr r6, [sp, #0x70]\n\ - ldr r7, [sp, #0x74]\n\ - mov r8, r7\n\ - ldr r7, [sp, #0x78]\n\ - mov r9, r7\n\ - ldr r7, [sp, #0x7C]\n\ - mov r10, r7\n\ - ldr r7, [sp, #0x80]\n\ - mov r12, r7\n\ - lsl r0, #24\n\ - lsr r0, #24\n\ - str r0, [sp, #0x4]\n\ - lsl r2, #24\n\ - lsr r2, #24\n\ - str r2, [sp, #0xC]\n\ - lsl r3, #24\n\ - lsr r3, #24\n\ - str r3, [sp, #0x10]\n\ - lsl r1, #24\n\ - lsr r7, r1, #24\n\ - lsl r4, #24\n\ - lsr r4, #24\n\ - str r4, [sp, #0x14]\n\ - lsl r5, #24\n\ - lsr r5, #24\n\ - lsl r6, #24\n\ - lsr r6, #24\n\ - str r6, [sp, #0x18]\n\ - mov r0, r8\n\ - lsl r0, #24\n\ - lsr r4, r0, #24\n\ - mov r1, r9\n\ - lsl r1, #24\n\ - lsr r1, #24\n\ - str r1, [sp, #0x1C]\n\ - mov r2, r10\n\ - lsl r2, #16\n\ - lsr r2, #16\n\ - str r2, [sp, #0x20]\n\ - mov r0, r12\n\ - lsl r0, #16\n\ - lsr r0, #16\n\ - str r0, [sp, #0x24]\n\ - ldr r0, [sp, #0x4]\n\ - bl IsInvalidBg32\n\ - cmp r0, #0\n\ - beq _08002592\n\ - b _080026EE\n\ -_08002592:\n\ - ldr r0, [sp, #0x4]\n\ - bl IsTileMapOutsideWram\n\ - cmp r0, #0\n\ - beq _0800259E\n\ - b _080026EE\n\ -_0800259E:\n\ - ldr r0, [sp, #0x4]\n\ - mov r1, #0x4\n\ - bl GetBgControlAttribute\n\ - lsl r0, #16\n\ - lsr r0, #16\n\ - str r0, [sp, #0x30]\n\ - ldr r0, [sp, #0x4]\n\ - mov r1, #0x1\n\ - bl GetBgMetricTextMode\n\ - lsl r0, #21\n\ - lsr r0, #16\n\ - str r0, [sp, #0x28]\n\ - ldr r0, [sp, #0x4]\n\ - mov r1, #0x2\n\ - bl GetBgMetricTextMode\n\ - lsl r0, #21\n\ - lsr r0, #16\n\ - str r0, [sp, #0x2C]\n\ - ldr r0, [sp, #0x4]\n\ - bl GetBgType\n\ - cmp r0, #0\n\ - beq _080025D8\n\ - cmp r0, #0x1\n\ - beq _08002674\n\ - b _080026EE\n\ -_080025D8:\n\ - ldr r1, [sp, #0x10]\n\ - add r0, r1, #0\n\ - mul r0, r7\n\ - ldr r2, [sp, #0xC]\n\ - add r0, r2\n\ - lsl r0, #1\n\ - ldr r1, [sp, #0x8]\n\ - add r6, r1, r0\n\ - add r0, r5, r4\n\ - cmp r5, r0\n\ - blt _080025F0\n\ - b _080026EE\n\ -_080025F0:\n\ - ldr r2, [sp, #0x18]\n\ - sub r2, r7, r2\n\ - str r2, [sp, #0x34]\n\ - str r0, [sp, #0x38]\n\ -_080025F8:\n\ - ldr r4, [sp, #0x14]\n\ - ldr r7, [sp, #0x18]\n\ - add r0, r4, r7\n\ - add r1, r5, #0x1\n\ - str r1, [sp, #0x3C]\n\ - cmp r4, r0\n\ - bge _0800265A\n\ - ldr r2, [sp, #0x4]\n\ - lsl r0, r2, #4\n\ - ldr r1, =sGpuBgConfigs2+4\n\ - add r0, r1\n\ - mov r10, r0\n\ - ldr r7, [sp, #0x20]\n\ - lsl r7, #16\n\ - mov r9, r7\n\ - ldr r1, [sp, #0x24]\n\ - lsl r0, r1, #16\n\ - asr r0, #16\n\ - mov r8, r0\n\ -_0800261E:\n\ - ldr r2, [sp, #0x2C]\n\ - str r2, [sp]\n\ - add r0, r4, #0\n\ - add r1, r5, #0\n\ - ldr r2, [sp, #0x30]\n\ - ldr r3, [sp, #0x28]\n\ - bl GetTileMapIndexFromCoords\n\ - lsl r0, #16\n\ - lsr r0, #15\n\ - mov r7, r10\n\ - ldr r1, [r7]\n\ - add r1, r0\n\ - mov r0, r8\n\ - str r0, [sp]\n\ - add r0, r6, #0\n\ - ldr r2, [sp, #0x1C]\n\ - mov r7, r9\n\ - asr r3, r7, #16\n\ - bl CopyTileMapEntry\n\ - add r6, #0x2\n\ - add r0, r4, #0x1\n\ - lsl r0, #16\n\ - lsr r4, r0, #16\n\ - ldr r1, [sp, #0x14]\n\ - ldr r2, [sp, #0x18]\n\ - add r0, r1, r2\n\ - cmp r4, r0\n\ - blt _0800261E\n\ -_0800265A:\n\ - ldr r5, [sp, #0x34]\n\ - lsl r0, r5, #1\n\ - add r6, r0\n\ - ldr r7, [sp, #0x3C]\n\ - lsl r0, r7, #16\n\ - lsr r5, r0, #16\n\ - ldr r0, [sp, #0x38]\n\ - cmp r5, r0\n\ - blt _080025F8\n\ - b _080026EE\n\ - .pool\n\ -_08002674:\n\ - ldr r1, [sp, #0x10]\n\ - add r0, r1, #0\n\ - mul r0, r7\n\ - ldr r2, [sp, #0xC]\n\ - add r0, r2\n\ - ldr r1, [sp, #0x8]\n\ - add r6, r1, r0\n\ - ldr r0, [sp, #0x4]\n\ - mov r1, #0x1\n\ - bl GetBgMetricAffineMode\n\ - lsl r0, #16\n\ - lsr r0, #16\n\ - mov r9, r0\n\ - add r0, r5, r4\n\ - cmp r5, r0\n\ - bge _080026EE\n\ - ldr r2, [sp, #0x18]\n\ - sub r2, r7, r2\n\ - str r2, [sp, #0x34]\n\ - str r0, [sp, #0x38]\n\ - ldr r7, =sGpuBgConfigs2+4\n\ - mov r10, r7\n\ - ldr r0, [sp, #0x4]\n\ - lsl r0, #4\n\ - mov r8, r0\n\ -_080026A8:\n\ - ldr r4, [sp, #0x14]\n\ - ldr r1, [sp, #0x18]\n\ - add r0, r4, r1\n\ - add r2, r5, #0x1\n\ - str r2, [sp, #0x3C]\n\ - cmp r4, r0\n\ - bge _080026DE\n\ - mov r3, r8\n\ - add r3, r10\n\ - mov r7, r9\n\ - mul r7, r5\n\ - mov r12, r7\n\ - add r2, r0, #0\n\ -_080026C2:\n\ - ldr r1, [r3]\n\ - mov r5, r12\n\ - add r0, r5, r4\n\ - add r1, r0\n\ - ldrb r0, [r6]\n\ - ldr r7, [sp, #0x20]\n\ - add r0, r7\n\ - strb r0, [r1]\n\ - add r6, #0x1\n\ - add r0, r4, #0x1\n\ - lsl r0, #16\n\ - lsr r4, r0, #16\n\ - cmp r4, r2\n\ - blt _080026C2\n\ -_080026DE:\n\ - ldr r0, [sp, #0x34]\n\ - add r6, r0\n\ - ldr r1, [sp, #0x3C]\n\ - lsl r0, r1, #16\n\ - lsr r5, r0, #16\n\ - ldr r2, [sp, #0x38]\n\ - cmp r5, r2\n\ - blt _080026A8\n\ -_080026EE:\n\ - add sp, #0x40\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n"); } void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height) @@ -1494,78 +1248,29 @@ u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 return (y * 0x20) + x; } -#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate -void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2) +void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2) { - u16 test; + u16 var; + + if (palette1 == 16) + goto CASE_16; switch (palette1) { - default: - if (palette1 > 0x10 || palette1 < 0) - test = *src + tileOffset + (palette2 << 12); - else - test = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); - break; - case 0x10: - test = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF); - break; + case 0 ... 16: + var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); + break; + CASE_16: + var = *dest; + var &= 0xFC00; + var += palette2 << 12; + var |= (*src + tileOffset) & 0x3FF; + break; + default: + var = *src + tileOffset + (palette2 << 12); + break; } - - *dest = test; + *dest = var; } -#else -NAKED -void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2) -{ - asm("push {r4-r6,lr}\n\ - add r4, r0, #0\n\ - add r6, r1, #0\n\ - ldr r5, [sp, #0x10]\n\ - cmp r2, #0x10\n\ - beq _08002B14\n\ - cmp r2, #0x10\n\ - bgt _08002B34\n\ - cmp r2, #0\n\ - blt _08002B34\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - ldr r3, =0x00000fff\n\ - add r1, r3, #0\n\ - and r0, r1\n\ - add r1, r2, r5\n\ - lsl r1, #12\n\ - b _08002B3A\n\ - .pool\n\ -_08002B14:\n\ - ldrh r1, [r6]\n\ - mov r0, #0xFC\n\ - lsl r0, #8\n\ - and r1, r0\n\ - lsl r2, r5, #12\n\ - add r2, r1, r2\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - ldr r3, =0x000003ff\n\ - add r1, r3, #0\n\ - and r0, r1\n\ - orr r0, r2\n\ - b _08002B3C\n\ - .pool\n\ -_08002B34:\n\ - ldrh r0, [r4]\n\ - add r0, r3\n\ - lsl r1, r5, #12\n\ -_08002B3A:\n\ - add r0, r1\n\ -_08002B3C:\n\ - lsl r0, #16\n\ - lsr r1, r0, #16\n\ - strh r1, [r6]\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n"); -} -#endif // NONMATCHING u32 GetBgType(u8 bg) { diff --git a/src/tileset_anims.c b/src/tileset_anims.c new file mode 100644 index 000000000..30f390512 --- /dev/null +++ b/src/tileset_anims.c @@ -0,0 +1,248 @@ +#include "global.h" +#include "graphics.h" +#include "palette.h" +#include "util.h" +#include "battle_transition.h" +#include "task.h" +#include "fieldmap.h" + +static EWRAM_DATA struct { + const u16 *src; + u16 *dest; + u16 size; +} sTilesetDMA3TransferBuffer[20] = {0}; + +static u8 sTilesetDMA3TransferBufferSize; +static u16 sPrimaryTilesetAnimCounter; +static u16 sPrimaryTilesetAnimCounterMax; +static u16 sSecondaryTilesetAnimCounter; +static u16 sSecondaryTilesetAnimCounterMax; +static void (*sPrimaryTilesetAnimCallback)(u16); +static void (*sSecondaryTilesetAnimCallback)(u16); + +static void _InitPrimaryTilesetAnimation(void); +static void _InitSecondaryTilesetAnimation(void); + +extern const u16 *const gUnknown_83A7660[]; +extern const u16 *const gUnknown_83AA654[]; +extern const u16 *const gUnknown_83AB874[]; +extern const u16 *const gUnknown_83ABDB4[]; +extern const u16 *const gUnknown_83AC1E8[]; +extern const u16 *const gUnknown_83AC5F8[]; +extern const u16 *const gUnknown_83AC7C8[]; +extern const u16 *const gUnknown_83AC950[]; + +static void ResetTilesetAnimBuffer(void) +{ + sTilesetDMA3TransferBufferSize = 0; + CpuFill32(0, sTilesetDMA3TransferBuffer, sizeof sTilesetDMA3TransferBuffer); +} + +static void AppendTilesetAnimToBuffer(const u16 *src, u16 *dest, u16 size) +{ + if (sTilesetDMA3TransferBufferSize < 20) + { + sTilesetDMA3TransferBuffer[sTilesetDMA3TransferBufferSize].src = src; + sTilesetDMA3TransferBuffer[sTilesetDMA3TransferBufferSize].dest = dest; + sTilesetDMA3TransferBuffer[sTilesetDMA3TransferBufferSize].size = size; + sTilesetDMA3TransferBufferSize++; + } +} + +void TransferTilesetAnimsBuffer(void) +{ + int i; + + for (i = 0; i < sTilesetDMA3TransferBufferSize; i++) + DmaCopy16(3, sTilesetDMA3TransferBuffer[i].src, sTilesetDMA3TransferBuffer[i].dest, sTilesetDMA3TransferBuffer[i].size); + + sTilesetDMA3TransferBufferSize = 0; +} + +void InitTilesetAnimations(void) +{ + ResetTilesetAnimBuffer(); + _InitPrimaryTilesetAnimation(); + _InitSecondaryTilesetAnimation(); +} + +void InitSecondaryTilesetAnimation(void) +{ + _InitSecondaryTilesetAnimation(); +} + +void UpdateTilesetAnimations(void) +{ + ResetTilesetAnimBuffer(); + if (++sPrimaryTilesetAnimCounter >= sPrimaryTilesetAnimCounterMax) + sPrimaryTilesetAnimCounter = 0; + if (++sSecondaryTilesetAnimCounter >= sSecondaryTilesetAnimCounterMax) + sSecondaryTilesetAnimCounter = 0; + + if (sPrimaryTilesetAnimCallback) + sPrimaryTilesetAnimCallback(sPrimaryTilesetAnimCounter); + if (sSecondaryTilesetAnimCallback) + sSecondaryTilesetAnimCallback(sSecondaryTilesetAnimCounter); +} + +static void _InitPrimaryTilesetAnimation(void) +{ + sPrimaryTilesetAnimCounter = 0; + sPrimaryTilesetAnimCounterMax = 0; + sPrimaryTilesetAnimCallback = NULL; + if (gMapHeader.mapData->primaryTileset && gMapHeader.mapData->primaryTileset->callback) + gMapHeader.mapData->primaryTileset->callback(); +} + +static void _InitSecondaryTilesetAnimation(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 0; + sSecondaryTilesetAnimCallback = NULL; + if (gMapHeader.mapData->secondaryTileset && gMapHeader.mapData->secondaryTileset->callback) + gMapHeader.mapData->secondaryTileset->callback(); +} + +static void sub_80700A4(u16 timer) +{ + const u16 *const *ptr = gUnknown_83A7660; + u16 i = timer % 5; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(508)), 0x80); +} + +static void sub_80700D0(u16 timer) +{ + const u16 *const *ptr = gUnknown_83AA654; + u16 i = timer % 8; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(416)), 0x600); +} + +static void sub_80700F8(u16 timer) +{ + const u16 *const *ptr = gUnknown_83AB874; + u16 i = timer % 8; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(464)), 0x240); +} + +static void sub_8070120(u16 timer) +{ + if (timer % 8 == 0) + sub_80700F8(timer >> 3); + if (timer % 16 == 1) + sub_80700D0(timer >> 4); + if (timer % 16 == 2) + sub_80700A4(timer >> 4); +} + +void sub_8070154(void) +{ + sPrimaryTilesetAnimCounter = 0; + sPrimaryTilesetAnimCounterMax = 640; + sPrimaryTilesetAnimCallback = sub_8070120; +} + +static void sub_807017C(u16 timer) +{ + const u16 *const *ptr = gUnknown_83ABDB4; + u16 i = timer % 5; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(744)), 0x100); +} + +static void sub_80701AC(u16 timer) +{ + if (timer % 12 == 0) + sub_807017C(timer / 12); +} + +void sub_80701D8(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 120; + sSecondaryTilesetAnimCallback = sub_80701AC; +} + +static void sub_80701FC(u16 timer) +{ + const u16 *const *ptr = gUnknown_83AC1E8; + u16 i = timer % 4; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(976)), 0x100); +} + +static void sub_8070224(u16 timer) +{ + if (timer % 10 == 0) + sub_80701FC(timer / 10); +} + +void sub_8070250(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 160; + sSecondaryTilesetAnimCallback = sub_8070224; +} + +static void sub_8070274(u16 timer) +{ + const u16 *const *ptr = gUnknown_83AC5F8; + u16 i = timer % 4; + + AppendTilesetAnimToBuffer(ptr[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(896)), 0x100); +} + +static void sub_807029C(u16 timer) +{ + if (timer % 16 == 0) + sub_8070274(timer >> 4); +} + +void sub_80702B4(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 256; + sSecondaryTilesetAnimCallback = sub_807029C; +} + +static void sub_80702DC(u16 timer) +{ + u16 i = timer % 2; + + AppendTilesetAnimToBuffer(gUnknown_83AC7C8[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(880)), 0xE0); +} + +static void sub_8070304(u16 timer) +{ + if (timer % 2 == 0) + sub_80702DC(timer >> 1); +} + +void sub_807031C(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 240; + sSecondaryTilesetAnimCallback = sub_8070304; +} + +static void sub_8070340(u16 timer) +{ + u16 i = timer % 4; + + AppendTilesetAnimToBuffer(gUnknown_83AC950[i], (u16 *)(BG_VRAM + TILE_OFFSET_4BPP(739)), 0x80); +} + +static void sub_8070368(u16 timer) +{ + if (timer % 16 == 0) + sub_8070340(timer >> 4); +} + +void sub_8070380(void) +{ + sSecondaryTilesetAnimCounter = 0; + sSecondaryTilesetAnimCounterMax = 256; + sSecondaryTilesetAnimCallback = sub_8070368; +} diff --git a/sym_bss.txt b/sym_bss.txt index 7c0bdf1a1..22b6dfdc8 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -104,27 +104,7 @@ gUnknown_3000FA8: @ 3000FA8 gUnknown_3000FA9: @ 3000FA9 .space 0x3 -gUnknown_3000FAC: @ 3000FAC - .space 0x2 - -sPrimaryTilesetCBCounter: @ 3000FAE - .space 0x2 - -sPrimaryTilesetCBBufferSize: @ 3000FB0 - .space 0x2 - -sSecondaryTilesetCBCounter: @ 3000FB2 - .space 0x2 - -sSecondaryTilesetCBBufferSize: @ 3000FB4 - .space 0x4 - -sPrimaryTilesetCB: @ 3000FB8 - .space 0x4 - -sSecondaryTilesetCB: @ 3000FBC - .space 0x4 - + .include "src/tileset_anims.o" .include "src/sound.o" .align 2 diff --git a/sym_ewram.txt b/sym_ewram.txt index 865957a6b..3229c3c40 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -673,8 +673,7 @@ gUnknown_2037101: @ 2037101 gUnknown_2037104: @ 2037104 .space 0x4 -gUnknown_2037108: @ 2037108 - .space 0xF0 + .include "src/tileset_anims.o" gPlttBufferUnfaded: @ 20371F8 .space 0x400 |