DoAnimFrame: ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID add hl, bc ld e, [hl] ld d, 0 ld hl, .Jumptable add hl, de add hl, de ld a, [hli] ld h, [hl] ld l, a jp hl .Jumptable: ; entries correspond to SPRITE_ANIM_SEQ_* constants dw .Null dw .PartyMon dw .PartyMonSwitch dw .PartyMonSelected dw .GSTitleTrail dw .NamingScreenCursor dw .GameFreakLogo dw .GSGameFreakLogoStar dw .GSGameFreakLogoSparkle dw .SlotsGolem dw .SlotsChansey dw .SlotsChanseyEgg dw .MailCursor dw .UnusedCursor dw .DummyGameCursor dw .PokegearArrow dw .TradePokeBall dw .TradeTubeBulge dw .TrademonInTube dw .RevealNewMon dw .RadioTuningKnob dw .CutLeaves dw .FlyFrom dw .FlyLeaf dw .FlyTo dw .GSIntroHoOhLugia dw .EZChatCursor dw .MobileTradeSentPulse dw .MobileTradeOTPulse dw .IntroSuicune dw .IntroPichuWooper dw .Celebi dw .IntroUnown dw .IntroUnownF dw .IntroSuicuneAway .Null: ret .PartyMon ld a, [wMenuCursorY] ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc cp [hl] jr z, .PartyMonSwitch ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], 8 * 2 ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], 0 ret .PartyMonSwitch ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], 8 * 3 ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] ld d, a inc [hl] and $f ret nz ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld e, [hl] ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld a, d and $10 ; bit 4 jr z, .load_zero ld a, e and a jr z, .load_minus_two cp $1 jr z, .load_minus_one .load_zero xor a ld [hl], a ret .load_minus_one ld a, -1 ld [hl], a ret .load_minus_two ld a, -2 ld [hl], a ret .PartyMonSelected ld a, [wMenuCursorY] ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc cp [hl] jr z, .three_offset_right ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], 8 * 2 ret .three_offset_right ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], 8 * 3 ret .GSTitleTrail call .AnonymousJumptable jp hl ; Anonymous dw (see .AnonymousJumptable) dw .four_zero dw .four_one .four_zero call .IncrementJumptableIndex ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc and $3 ld [hl], a inc [hl] swap a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], a .four_one ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld a, [hl] cp $a4 jr nc, .asm_8d356 ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc add $4 ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc inc [hl] ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] sla a sla a ld d, 2 ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] add 3 ld [hl], a call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ret .asm_8d356 call DeinitializeSprite ret .GSIntroHoOhLugia ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] inc a ld [hl], a ld d, 2 call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ret .NamingScreenCursor callfar NamingScreen_AnimateCursor ret .MailCursor callfar ComposeMail_AnimateCursor ret .GameFreakLogo callfar GameFreakLogoSpriteAnim ret .GSGameFreakLogoStar ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] and a jr z, .asm_8d3ba dec [hl] dec [hl] ld d, a and $1f jr nz, .asm_8d395 ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc dec [hl] .asm_8d395 ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld a, [hl] push af push de call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a pop de pop af call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc add [hl] ld [hl], a ret .asm_8d3ba ld a, 1 ld [wIntroSceneFrameCounter], a call DeinitializeSprite ret .GSGameFreakLogoSparkle ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hli] or [hl] jr z, .asm_8d41e ld hl, SPRITEANIMSTRUCT_VAR4 add hl, bc ld d, [hl] ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld a, [hl] push af push de call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a pop de pop af call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld e, [hl] inc hl ld d, [hl] ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc ld a, [hli] ld h, [hl] ld l, a add hl, de ld e, l ld d, h ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc ld [hl], e inc hl ld [hl], d ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, -$10 add hl, de ld e, l ld d, h ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], e inc hl ld [hl], d ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld a, [hl] xor $20 ld [hl], a ret .asm_8d41e call DeinitializeSprite ret .SlotsGolem: callfar Slots_AnimateGolem ret .SlotsChansey: callfar Slots_AnimateChansey ld hl, wcf64 ld a, [hl] cp $2 ret nz ld [hl], $3 ld a, SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY_2 call _ReinitSpriteAnimFrame ret .SlotsChanseyEgg: ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld a, [hl] dec [hl] ld e, a and $1 jr z, .move_vertical ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld a, [hl] cp 15 * 8 jr c, .move_right call DeinitializeSprite ld a, $4 ld [wcf64], a ld de, SFX_PLACE_PUZZLE_PIECE_DOWN call PlaySFX ret .move_right inc [hl] .move_vertical ld a, e ld d, 32 call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ret .UnusedCursor callfar ret_e00ed ret .PokegearArrow callfar AnimatePokegearModeIndicatorArrow ret .DummyGameCursor callfar DummyGame_InterpretJoypad_AnimateCursor ret .TradePokeBall call .AnonymousJumptable jp hl ; Anonymous dw (see .AnonymousJumptable) dw .TradePokeBall_zero dw .TradePokeBall_one dw .TradePokeBall_two dw .TradePokeBall_three dw .TradePokeBall_four dw .TradePokeBall_five .TradePokeBall_zero ld a, SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL_WOBBLE call _ReinitSpriteAnimFrame ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld [hl], $2 ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $20 ret .TradePokeBall_two ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] and a jr z, .asm_8d4af dec [hl] ret .asm_8d4af call .IncrementJumptableIndex ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $40 .TradePokeBall_three ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] cp 48 jr c, .asm_8d4cd dec [hl] ld d, 40 call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ret .asm_8d4cd ld de, SFX_GOT_SAFARI_BALLS call PlaySFX jr .TradePokeBall_five .TradePokeBall_one ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld [hl], $4 ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $30 ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld [hl], $24 ret .TradePokeBall_four ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] and a jr z, .asm_8d51c ld d, a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] call Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc inc [hl] ld a, [hl] and $3f ret nz ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld [hl], $20 ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] sub $c ld [hl], a ld de, SFX_SWITCH_POKEMON call PlaySFX ret .asm_8d51c xor a ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a call .IncrementJumptableIndex ret .TradePokeBall_five call DeinitializeSprite ret .TradeTubeBulge ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld a, [hl] inc [hl] inc [hl] cp $b0 jr nc, .delete and $3 ret nz ld de, SFX_POKEBALLS_PLACED_ON_TABLE call PlaySFX ret .delete call DeinitializeSprite ret .TrademonInTube callfar TradeAnim_AnimateTrademonInTube ret .RevealNewMon: ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] cp $80 jr nc, .finish_EggShell ld d, a add $8 ld [hl], a ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld a, [hl] xor $20 ld [hl], a push af push de call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a pop de pop af call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .finish_EggShell call DeinitializeSprite ret .RadioTuningKnob: callfar AnimateTuningKnob ret .CutLeaves ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld e, [hl] inc hl ld d, [hl] ld hl, $80 add hl, de ld e, l ld d, h ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld [hl], e inc hl ld [hl], d ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] inc [hl] inc [hl] inc [hl] push af push de call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a pop de pop af call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .FlyFrom: ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc ld a, [hl] and a ret z ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] inc [hl] cp $40 ret c ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc dec [hl] dec [hl] ld hl, SPRITEANIMSTRUCT_VAR4 add hl, bc ld a, [hl] ld d, a cp $40 jr nc, .skip add $8 ld [hl], a .skip ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc ld a, [hl] inc [hl] call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .FlyLeaf: ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ld a, [hl] cp -9 * 8 jr nc, .delete_leaf inc [hl] inc [hl] ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc dec [hl] ld d, $40 ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] inc [hl] call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .delete_leaf call DeinitializeSprite ret .FlyTo: ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc ld a, [hl] cp 10 * 8 + 4 ret z ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc inc [hl] inc [hl] ld hl, SPRITEANIMSTRUCT_VAR4 add hl, bc ld a, [hl] ld d, a and a jr z, .asm_8d621 sub $2 ld [hl], a .asm_8d621 ld hl, SPRITEANIMSTRUCT_VAR3 add hl, bc ld a, [hl] inc [hl] call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .MobileTradeSentPulse farcall Function108bc7 ret .MobileTradeOTPulse farcall Function108be0 ret .IntroSuicune ld a, [wIntroSceneTimer] and a jr nz, .asm_8d645 ret .asm_8d645 ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], $0 ld hl, SPRITEANIMSTRUCT_VAR2 add hl, bc ld a, [hl] add 2 ld [hl], a xor $ff inc a ld d, 32 call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a ld a, SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_2 call _ReinitSpriteAnimFrame ret .IntroPichuWooper ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] cp 20 jr nc, .asm_8d67f add 2 ld [hl], a xor $ff inc a ld d, 32 call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a .asm_8d67f ret .IntroUnown ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld d, [hl] inc [hl] inc [hl] inc [hl] ld hl, SPRITEANIMSTRUCT_VAR1 add hl, bc ld a, [hl] push af push de call .Sprites_Sine ld hl, SPRITEANIMSTRUCT_YOFFSET add hl, bc ld [hl], a pop de pop af call .Sprites_Cosine ld hl, SPRITEANIMSTRUCT_XOFFSET add hl, bc ld [hl], a ret .IntroUnownF ld a, [wcf64] cp $40 ret nz ld a, SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F_2 call _ReinitSpriteAnimFrame ret .IntroSuicuneAway ld hl, SPRITEANIMSTRUCT_YCOORD add hl, bc ld a, [hl] add $10 ld [hl], a ret .EZChatCursor farcall AnimateEZChatCursor ret .Celebi farcall UpdateCelebiPosition ret .AnonymousJumptable: ld hl, sp+0 ld e, [hl] inc hl ld d, [hl] inc de ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc ld l, [hl] ld h, 0 add hl, hl add hl, de ld a, [hli] ld h, [hl] ld l, a ret .IncrementJumptableIndex: ld hl, SPRITEANIMSTRUCT_JUMPTABLE_INDEX add hl, bc inc [hl] ret .Sprites_Sine: call Sprites_Sine ret .Sprites_Cosine: call Sprites_Cosine ret