summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/overworld.s18
-rw-r--r--asm/tileset_anims.s667
-rw-r--r--include/bg.h4
-rw-r--r--include/gba/defines.h3
-rw-r--r--include/tileset_anims.h9
-rw-r--r--ld_script.txt2
-rw-r--r--src/bg.c395
-rw-r--r--src/tileset_anims.c248
-rw-r--r--sym_bss.txt22
-rw-r--r--sym_ewram.txt3
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);
diff --git a/src/bg.c b/src/bg.c
index 18cb4ec05..33a462707 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -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