mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
23f9b5d21e
This eliminates the need for arbitrary move labels like Move2 and Move1 that don't have anything to do with their respective moves.
113 lines
1.8 KiB
NASM
113 lines
1.8 KiB
NASM
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 + 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, 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
|
|
|