ref: 6ea15c444e88d048b02cb7150f3b524d33ea5407
dir: /event/dratini.asm/
SpecialDratini: ; 0x8b170 ; if ScriptVar is 0 or 1, change the moveset of the last Dratini in the party. ; 0: give it a special moveset with Extremespeed. ; 1: give it the normal moveset of a level 15 Dratini. ld a, [ScriptVar] cp $2 ret nc ld bc, PartyCount ld a, [bc] ld hl, 0 call GetNthPartyMon ld a, [bc] ld c, a ld de, PartyMon2 - PartyMon1 .CheckForDratini ; start at the end of the party and search backwards for a Dratini ld a, [hl] cp DRATINI jr z, .GiveMoveset ld a, l sub e ld l, a ld a, h sbc d ld h, a dec c jr nz, .CheckForDratini ret .GiveMoveset push hl ld a, [ScriptVar] ld hl, .Movesets ld bc, .Moveset1 - .Moveset0 call AddNTimes ; get address of mon's first move pop de inc de inc de .GiveMoves ld a, [hl] and a ; is the move 00? ret z ; if so, we're done here push hl push de ld [de], a ; give the Pokémon the new move ; get the PP of the new move dec a ld hl, Moves + PlayerMovePP - PlayerMoveStruct ld bc, Move2 - Move1 call AddNTimes ld a, BANK(Moves) call GetFarByte ; get the address of the move's PP and update the PP ld hl, PartyMon1PP - PartyMon1Moves add hl, de ld [hl], a pop de pop hl inc de inc hl jr .GiveMoves .Movesets .Moveset0 ; Dratini does not normally learn Extremespeed. This is a special gift. db WRAP db THUNDER_WAVE db TWISTER db EXTREMESPEED db 0 .Moveset1 ; This is the normal moveset of a level 15 Dratini db WRAP db LEER db THUNDER_WAVE db TWISTER db 0 GetNthPartyMon: ; 0x8b1ce ; inputs: ; hl must be set to 0 before calling this function. ; a must be set to the number of Pokémon in the party. ; outputs: ; returns the address of the last Pokémon in the party in hl. ; sets carry if a is 0. ld de, PartyMon1 add hl, de and a jr z, .EmptyParty dec a ret z ld de, PartyMon2 - PartyMon1 .loop add hl, de dec a jr nz, .loop ret .EmptyParty scf ret ; 8b1e1