ClearAnimatedObjects: ; 8d174 ld hl, $c508 ; 23:5174 ld bc, $c1 ; 23:5177 .loop ld [hl], $0 ; 23:517a inc hl ; 23:517c dec bc ; 23:517d ld a, c ; 23:517e or b ; 23:517f jr nz, .loop ; 23:5180 ret ; 23:5182 PlayAnimatedObjectationsAndDelayFrame: ; 8d182 call PlayAnimatedObjectations ; 23:5183 call $32e ; DelayFrame ; 23:5186 ret ; 23:5189 PlayAnimatedObjectations: ; 8d189 push hl ; 23:518a push de ; 23:518b push bc ; 23:518c push af ; 23:518d ld a, $0 ; 23:518e ld [$c5bd], a ; 23:5190 call DoNextFrameForAllSprites ; 23:5193 pop af ; 23:5196 pop bc ; 23:5197 pop de ; 23:5198 pop hl ; 23:5199 ret ; 23:519a DoNextFrameForAllSprites: ; 8d19b ld hl, $c51c ; 23:519b ld e, $a ; 23:519e .loop ld a, [hl] ; 23:51a0 and a ; 23:51a1 jr z, .skip_capacity_check ; 23:51a2 ld c, l ; 23:51a4 ld b, h ; 23:51a5 push hl ; 23:51a6 push de ; 23:51a7 call DoAnimFrame ; 23:51a8 call UpdateAnimFrame ; 23:51ab pop de ; 23:51ae pop hl ; 23:51af jr c, .cancel ; 23:51b0 .skip_capacity_check ld bc, $10 ; 23:51b2 add hl, bc ; 23:51b5 dec e ; 23:51b6 jr nz, .loop ; 23:51b7 ld a, [$c5bd] ; 23:51b9 ld l, a ; 23:51bc ld h, $c3 ; 23:51bd .loop2 ld a, l ; 23:51bf cp $a0 ; 23:51c0 jr nc, .cancel ; 23:51c2 xor a ; 23:51c4 ld [hli], a ; 23:51c5 jr .loop2 ; 23:51c6 .cancel ret ; 23:51c8 DoNextFrameForFirst16Sprites: ; 8d1c9 ld hl, $c51c ; 23:51c9 ld e, $a ; 23:51cc .loop ld a, [hl] ; 23:51ce and a ; 23:51cf jr z, .skip_capacity_check ; 23:51d0 ld c, l ; 23:51d2 ld b, h ; 23:51d3 push hl ; 23:51d4 push de ; 23:51d5 call DoAnimFrame ; 23:51d6 call UpdateAnimFrame ; 23:51d9 pop de ; 23:51dc pop hl ; 23:51dd jr c, .cancel ; 23:51de .skip_capacity_check ld bc, $10 ; 23:51e0 add hl, bc ; 23:51e3 dec e ; 23:51e4 jr nz, .loop ; 23:51e5 ld a, [$c5bd] ; 23:51e7 ld l, a ; 23:51ea ld h, $c3 ; 23:51eb .loop2 ld a, l ; 23:51ed cp $40 ; 23:51ee jr nc, .cancel ; 23:51f0 xor a ; 23:51f2 ld [hli], a ; 23:51f3 jr .loop2 ; 23:51f4 .cancel ret ; 23:51f6 _InitSpriteAnimStruct:: ; 8d1f7 push de ; 23:51f7 push af ; 23:51f8 ld hl, $c51c ; 23:51f9 ld e, $a ; 23:51fc .loop ld a, [hl] ; 23:51fe and a ; 23:51ff jr z, .found ; 23:5200 ld bc, $10 ; 23:5202 add hl, bc ; 23:5205 dec e ; 23:5206 jr nz, .loop ; 23:5207 pop af ; 23:5209 pop de ; 23:520a scf ; 23:520b ret ; 23:520c .found ; 8d20d ld c, l ; 23:520d ld b, h ; 23:520e ld hl, $c5bc ; 23:520f inc [hl] ; 23:5212 ld a, [hl] ; 23:5213 and a ; 23:5214 jr nz, .initialized ; 23:5215 inc [hl] ; 23:5217 .initialized pop af ; 23:5218 ld e, a ; 23:5219 ld d, $0 ; 23:521a ld hl, AnimatedObjectSeqData ; 23:521c add hl, de ; 23:521f add hl, de ; 23:5220 add hl, de ; 23:5221 ld e, l ; 23:5222 ld d, h ; 23:5223 ld hl, $0 ; 23:5224 add hl, bc ; 23:5227 ld a, [$c5bc] ; 23:5228 ld [hli], a ; 23:522b ld a, [de] ; 23:522c ld [hli], a ; 23:522d inc de ; 23:522e ld a, [de] ; 23:522f ld [hli], a ; 23:5230 inc de ; 23:5231 ld a, [de] ; 23:5232 call GetAnimatedObjectVTile ; 23:5233 ld [hli], a ; 23:5236 pop de ; 23:5237 ld hl, $4 ; 23:5238 add hl, bc ; 23:523b ld a, e ; 23:523c ld [hli], a ; 23:523d ld a, d ; 23:523e ld [hli], a ; 23:523f xor a ; 23:5240 ld [hli], a ; 23:5241 ld [hli], a ; 23:5242 xor a ; 23:5243 ld [hli], a ; 23:5244 ld [hli], a ; 23:5245 dec a ; 23:5246 ld [hli], a ; 23:5247 xor a ; 23:5248 ld [hli], a ; 23:5249 ld [hli], a ; 23:524a ld [hli], a ; 23:524b ld [hli], a ; 23:524c ld [hl], a ; 23:524d ld a, c ; 23:524e ld [$c5c0], a ; 23:524f ld a, b ; 23:5252 ld [$c5c1], a ; 23:5253 ret ; 23:5256 DeinitializeSprite: ; 8d257 ld hl, $0 ; 23:5257 add hl, bc ; 23:525a ld [hl], $0 ; 23:525b ret ; 23:525d UpdateAnimFrame: ; 8d25e call InitAnimatedObjectBuffer ; 23:525e call GetAnimatedObjectFrame ; 23:5261 cp $fd ; 23:5264 jr z, .done ; 23:5266 cp $fc ; 23:5268 jr z, .delete ; 23:526a call GetFrameOAMPointer ; 23:526c ld a, [$c5c2] ; 23:526f add [hl] ; 23:5272 ld [$c5c2], a ; 23:5273 inc hl ; 23:5276 ld a, [hli] ; 23:5277 ld h, [hl] ; 23:5278 ld l, a ; 23:5279 push bc ; 23:527a ld a, [$c5bd] ; 23:527b ld e, a ; 23:527e ld d, $c3 ; 23:527f ld a, [hli] ; 23:5281 ld c, a ; 23:5282 .loop ld a, [$c5c4] ; 23:5283 ld b, a ; 23:5286 ld a, [$c5c6] ; 23:5287 add b ; 23:528a ld b, a ; 23:528b ld a, [$c5c7] ; 23:528c add b ; 23:528f ld b, a ; 23:5290 call AddOrSubtractX ; 23:5291 add b ; 23:5294 ld [de], a ; 23:5295 inc hl ; 23:5296 inc de ; 23:5297 ld a, [$c5c3] ; 23:5298 ld b, a ; 23:529b ld a, [$c5c5] ; 23:529c add b ; 23:529f ld b, a ; 23:52a0 ld a, [$c5c8] ; 23:52a1 add b ; 23:52a4 ld b, a ; 23:52a5 call AddOrSubtractY ; 23:52a6 add b ; 23:52a9 ld [de], a ; 23:52aa inc hl ; 23:52ab inc de ; 23:52ac ld a, [$c5c2] ; 23:52ad add [hl] ; 23:52b0 ld [de], a ; 23:52b1 inc hl ; 23:52b2 inc de ; 23:52b3 call GetSpriteOAMAttr ; 23:52b4 ld [de], a ; 23:52b7 inc hl ; 23:52b8 inc de ; 23:52b9 ld a, e ; 23:52ba ld [$c5bd], a ; 23:52bb cp $a0 ; 23:52be jr nc, reached_the_end ; 23:52c0 dec c ; 23:52c2 jr nz, .loop ; 23:52c3 pop bc ; 23:52c5 jr .done ; 23:52c6 .delete call DeinitializeSprite ; 23:52c8 .done and a ; 23:52cb ret ; 23:52cc reached_the_end pop bc ; 23:52cd scf ; 23:52ce ret ; 23:52cf AddOrSubtractX: ; 8d2d0 push hl ; 23:52d0 ld a, [hl] ; 23:52d1 ld hl, $c5c0 ; 23:52d2 bit 6, [hl] ; 23:52d5 jr z, .ok ; 23:52d7 add a, $8 ; 23:52d9 xor $ff ; 23:52db inc a ; 23:52dd .ok pop hl ; 23:52de ret ; 23:52df AddOrSubtractY: ; 8d2e0 push hl ; 23:52e0 ld a, [hl] ; 23:52e1 ld hl, $c5c0 ; 23:52e2 bit 5, [hl] ; 23:52e5 jr z, .ok ; 23:52e7 add a, $8 ; 23:52e9 xor $ff ; 23:52eb inc a ; 23:52ed .ok pop hl ; 23:52ee ret ; 23:52ef GetSpriteOAMAttr: ; 8d2f0 ld a, [$c5c0] ; 23:52f0 ld b, a ; 23:52f3 ld a, [hl] ; 23:52f4 xor b ; 23:52f5 and $e0 ; 23:52f6 ld b, a ; 23:52f8 ld a, [hl] ; 23:52f9 and $1f ; 23:52fa or b ; 23:52fc ret ; 23:52fd InitAnimatedObjectBuffer: ; 8d2fe xor a ; 23:52fe ld [$c5c0], a ; 23:52ff ld hl, $3 ; 23:5302 add hl, bc ; 23:5305 ld a, [hli] ; 23:5306 ld [$c5c2], a ; 23:5307 ld a, [hli] ; 23:530a ld [$c5c3], a ; 23:530b ld a, [hli] ; 23:530e ld [$c5c4], a ; 23:530f ld a, [hli] ; 23:5312 ld [$c5c5], a ; 23:5313 ld a, [hli] ; 23:5316 ld [$c5c6], a ; 23:5317 ret ; 23:531a GetAnimatedObjectVTile: ; 8d31b push hl ; 23:531b push bc ; 23:531c ld hl, $c508 ; 23:531d ld b, a ; 23:5320 ld c, $a ; 23:5321 .loop ld a, [hli] ; 23:5323 cp b ; 23:5324 jr z, .ok ; 23:5325 inc hl ; 23:5327 dec c ; 23:5328 jr nz, .loop ; 23:5329 xor a ; 23:532b jr .done ; 23:532c .ok ld a, [hl] ; 23:532e .done pop bc ; 23:532f pop hl ; 23:5330 ret ; 23:5331 Function8d332: ; 8d332 ld hl, $1 ; 23:5332 add hl, bc ; 23:5335 ld [hl], a ; 23:5336 ld hl, $8 ; 23:5337 add hl, bc ; 23:533a ld [hl], $0 ; 23:533b ld hl, $a ; 23:533d add hl, bc ; 23:5340 ld [hl], $ff ; 23:5341 ret ; 23:5343 GetAnimatedObjectFrame: ; 8d344 .loop ld hl, $8 ; 23:5344 add hl, bc ; 23:5347 ld a, [hl] ; 23:5348 and a ; 23:5349 jr z, .next_frame ; 23:534a dec [hl] ; 23:534c call .GetPointer ; 23:534d ld a, [hli] ; 23:5350 push af ; 23:5351 jr .okay ; 23:5352 .next_frame ld hl, $a ; 23:5354 add hl, bc ; 23:5357 inc [hl] ; 23:5358 call .GetPointer ; 23:5359 ld a, [hli] ; 23:535c cp $fe ; 23:535d jr z, .restart ; 23:535f cp $ff ; 23:5361 jr z, .repeat_last ; 23:5363 push af ; 23:5365 ld a, [hl] ; 23:5366 push hl ; 23:5367 and $3f ; 23:5368 ld hl, $9 ; 23:536a add hl, bc ; 23:536d add [hl] ; 23:536e ld hl, $8 ; 23:536f add hl, bc ; 23:5372 ld [hl], a ; 23:5373 pop hl ; 23:5374 .okay ld a, [hl] ; 23:5375 and $c0 ; 23:5376 srl a ; 23:5378 ld [$c5c0], a ; 23:537a pop af ; 23:537d ret ; 23:537e .repeat_last ; 8d37f xor a ; 23:537f ld hl, $8 ; 23:5380 add hl, bc ; 23:5383 ld [hl], a ; 23:5384 ld hl, $a ; 23:5385 add hl, bc ; 23:5388 dec [hl] ; 23:5389 dec [hl] ; 23:538a jr .loop ; 23:538b .restart xor a ; 23:538d ld hl, $8 ; 23:538e add hl, bc ; 23:5391 ld [hl], a ; 23:5392 dec a ; 23:5393 ld hl, $a ; 23:5394 add hl, bc ; 23:5397 ld [hl], a ; 23:5398 jr .loop ; 23:5399 .GetPointer ld hl, $1 ; 23:539b add hl, bc ; 23:539e ld e, [hl] ; 23:539f ld d, $0 ; 23:53a0 ld hl, AnimatedObjectFrameData ; 23:53a2 add hl, de ; 23:53a5 add hl, de ; 23:53a6 ld e, [hl] ; 23:53a7 inc hl ; 23:53a8 ld d, [hl] ; 23:53a9 ld hl, $a ; 23:53aa add hl, bc ; 23:53ad ld l, [hl] ; 23:53ae ld h, $0 ; 23:53af add hl, hl ; 23:53b1 add hl, de ; 23:53b2 ret ; 23:53b3 GetFrameOAMPointer: ; 8d3b4 ld e, a ; 23:53b4 ld d, $0 ; 23:53b5 ld hl, AnimatedObjectOAMData ; 23:53b7 add hl, de ; 23:53ba add hl, de ; 23:53bb add hl, de ; 23:53bc ret ; 23:53bd BrokenGetStdGraphics: ; 8d3be push hl ; 23:53be ld l, a ; 23:53bf ld h, $0 ; 23:53c0 add hl, hl ; 23:53c2 add hl, hl ; 23:53c3 ld de, $6666 ; 23:53c4 add hl, de ; 23:53c7 ld c, [hl] ; 23:53c8 inc hl ; 23:53c9 ld b, [hl] ; 23:53ca inc hl ; 23:53cb ld e, [hl] ; 23:53cc inc hl ; 23:53cd ld d, [hl] ; 23:53ce pop hl ; 23:53cf push bc ; 23:53d0 call $dfe ; Request2bpp ; 23:53d1 pop bc ; 23:53d4 ret ; 23:53d5 AnimatedObjectSeqData: ; 8d3d6 db $01, $01, $00 db $04, $04, $00 db $05, $05, $00 db $06, $06, $00 db $07, $07, $00 db $08, $08, $00 db $09, $09, $01 db $0a, $09, $01 db $0b, $0a, $01 db $0d, $0b, $01 db $10, $0c, $01 db $12, $0d, $02 db $13, $0e, $02 db $14, $0f, $02 db $15, $0e, $02 db $16, $10, $00 db $0d, $11, $01 db $10, $12, $01 db $09, $13, $01 db $0b, $14, $01 db $1a, $15, $05 db $1c, $16, $06 db $1d, $17, $06 db $1e, $18, $06 db $1f, $19, $07 db $20, $1a, $07 db $22, $1b, $07 db $1a, $1c, $05 db $23, $00, $00 db $24, $1d, $08 db $24, $1e, $08 db $24, $1f, $08 db $25, $20, $00 db $27, $00, $00 db $28, $21, $00 db $29, $22, $00 db $2a, $22, $00 db $2b, $23, $00 db $2c, $24, $00 db $2d, $00, $00 db $2f, $25, $00 db $30, $00, $00 db $2f, $27, $00 db $31, $00, $00 db $36, $29, $00 db $37, $00, $00 db $32, $23, $00 INCLUDE "engine/sprite_anims.asm" INCLUDE "data/sprite_engine.asm" Sprites_Cosine: add a, $10 ; 23:668a Sprites_Sine: and $3f ; 23:668c cp $20 ; 23:668e jr nc, .negative ; 23:6690 call .ApplySineWave ; 23:6692 ld a, h ; 23:6695 ret ; 23:6696 .negative and $1f ; 23:6697 call .ApplySineWave ; 23:6699 ld a, h ; 23:669c xor $ff ; 23:669d inc a ; 23:669f ret ; 23:66a0 .ApplySineWave: ld e, a ; 23:66a1 ld a, d ; 23:66a2 ld d, $0 ; 23:66a3 ld hl, .sinewave ; 23:66a5 add hl, de ; 23:66a8 add hl, de ; 23:66a9 ld e, [hl] ; 23:66aa inc hl ; 23:66ab ld d, [hl] ; 23:66ac ld hl, $0 ; 23:66ad .multiply srl a ; 23:66b0 jr nc, .even ; 23:66b2 add hl, de ; 23:66b4 .even sla e ; 23:66b5 rl d ; 23:66b7 and a ; 23:66b9 jr nz, .multiply ; 23:66ba ret ; 23:66bc .sinewave ; 8e75d sine_wave $100 AnimateEndOfExpBar: ldh a, [$ffe9] ; 23:66fd ld de, EndOfExpBarGFX ; 23:66ff and a ; 23:6702 jr z, .got_gfx ; 23:6703 ld de, SGBEndOfExpBarGFX ; 23:6705 .got_gfx ld hl, VTiles0 tile $00 ; 23:6708 lb bc, BANK(EndOfExpBarGFX), 1 ; 23:670b call $dfe ; Request2bpp ; 23:670e ld c, $8 ; 23:6711 ld d, $0 ; 23:6713 .loop push bc ; 23:6715 call .AnimateFrame ; 23:6716 call $32e ; DelayFrame ; 23:6719 pop bc ; 23:671c inc d ; 23:671d inc d ; 23:671e dec c ; 23:671f jr nz, .loop ; 23:6720 call $30ff ; ClearSprites ; 23:6722 ret ; 23:6725 .AnimateFrame ld hl, $c300 ; 23:6726 ld c, $8 ; 23:6729 .anim_loop ld a, c ; 23:672b and a ; 23:672c ret z ; 23:672d dec c ; 23:672e ld a, c ; 23:672f sla a ; 23:6730 sla a ; 23:6732 sla a ; 23:6734 push af ; 23:6736 push de ; 23:6737 push hl ; 23:6738 call Sprites_Sine ; 23:6739 pop hl ; 23:673c pop de ; 23:673d add a, $68 ; 23:673e ld [hli], a ; 23:6740 pop af ; 23:6741 push de ; 23:6742 push hl ; 23:6743 call Sprites_Cosine ; 23:6744 pop hl ; 23:6747 pop de ; 23:6748 add a, $54 ; 23:6749 ld [hli], a ; 23:674b ld a, $0 ; 23:674c ld [hli], a ; 23:674e ld a, $6 ; 23:674f ld [hli], a ; 23:6751 jr .anim_loop ; 23:6752 EndOfExpBarGFX: dr $8e754, $8e764 SGBEndOfExpBarGFX: dr $8e764, $8e774 ClearAnimatedObjects2 push hl ; 23:6774 push de ; 23:6775 push bc ; 23:6776 push af ; 23:6777 ld hl, $c508 ; 23:6778 ld bc, $c1 ; 23:677b .loop ld [hl], $0 ; 23:677e inc hl ; 23:6780 dec bc ; 23:6781 ld a, c ; 23:6782 or b ; 23:6783 jr nz, .loop ; 23:6784 pop af ; 23:6786 pop bc ; 23:6787 pop de ; 23:6788 pop hl ; 23:6789 ret ; 23:678a ; 8e78a