mirror of https://github.com/pret/pokecrystal.git
move dratini special into event/dratini.asm
This commit is contained in:
parent
7cef3b76de
commit
48bab16ea4
|
@ -0,0 +1,112 @@
|
|||
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
|
||||
|
111
main.asm
111
main.asm
|
@ -61400,116 +61400,7 @@ Function8b154: ; 8b154
|
|||
|
||||
INCBIN "baserom.gbc", $8b15e, $8b170 - $8b15e
|
||||
|
||||
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
|
||||
INCLUDE "event/dratini.asm"
|
||||
|
||||
Function8b1e1: ; 8b1e1
|
||||
ld de, $71ed
|
||||
|
|
Loading…
Reference in New Issue