pokecrystal-board/engine/events/dratini.asm

112 lines
1.8 KiB
NASM
Raw Normal View History

GiveDratini:
2023-09-30 10:12:57 -07:00
; if hScriptVar 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.
2023-09-30 10:12:57 -07:00
ldh a, [hScriptVar]
cp $2
ret nc
2018-01-23 14:39:09 -08:00
ld bc, wPartyCount
ld a, [bc]
2015-12-18 17:07:09 -08:00
ld hl, MON_SPECIES
call .GetNthPartyMon
ld a, [bc]
ld c, a
ld de, PARTYMON_STRUCT_LENGTH
.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
2023-09-30 10:12:57 -07:00
ldh a, [hScriptVar]
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 + MOVE_PP
ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
; get the address of the move's PP and update the PP
ld hl, MON_PP - MON_MOVES
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:
; 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.
2018-01-23 14:39:09 -08:00
ld de, wPartyMon1
add hl, de
and a
jr z, .EmptyParty
dec a
ret z
ld de, PARTYMON_STRUCT_LENGTH
.loop
add hl, de
dec a
jr nz, .loop
ret
2015-12-18 17:07:09 -08:00
.EmptyParty:
scf
ret