mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
Add code for the Extremespeed Dratini.
This commit is contained in:
parent
572370fb45
commit
93902a38bd
2
Makefile
2
Makefile
@ -4,7 +4,7 @@ TEXTFILES =
|
||||
|
||||
all: pokecrystal.gbc
|
||||
|
||||
pokecrystal.o: pokecrystal.asm main.tx constants.asm ${TEXTFILES}
|
||||
pokecrystal.o: pokecrystal.asm main.tx constants.asm wram.asm ${TEXTFILES}
|
||||
rgbasm -o pokecrystal.o pokecrystal.asm
|
||||
|
||||
.asm.tx:
|
||||
|
158
main.asm
158
main.asm
@ -1,5 +1,40 @@
|
||||
SECTION "bank0",HOME
|
||||
INCBIN "baserom.gbc",$0,$4000
|
||||
INCBIN "baserom.gbc",$0,$304d
|
||||
|
||||
GetFarByte: ; 0x304d
|
||||
; retrieve a single byte from a:hl, and return it in a.
|
||||
; bankswitch to new bank
|
||||
ld [$ff00+$8b], a
|
||||
ld a, [$ff00+$9d]
|
||||
push af
|
||||
ld a, [$ff00+$8b]
|
||||
rst $10
|
||||
|
||||
; get byte from new bank
|
||||
ld a, [hl]
|
||||
ld [$ff00+$8b], a
|
||||
|
||||
; bankswitch to previous bank
|
||||
pop af
|
||||
rst $10
|
||||
|
||||
; return retrieved value in a
|
||||
ld a, [$ff00+$8b]
|
||||
ret
|
||||
|
||||
INCBIN "baserom.gbc",$305d,$30fe-$305d
|
||||
|
||||
AddNTimes ; 0x30fe
|
||||
and a
|
||||
ret z
|
||||
.loop
|
||||
add hl, bc
|
||||
dec a
|
||||
jr nz, .loop
|
||||
ret
|
||||
; 0x3105
|
||||
|
||||
INCBIN "baserom.gbc",$3105,$4000-$3105
|
||||
SECTION "bank1",DATA,BANK[$1]
|
||||
INCBIN "baserom.gbc",$4000,$4000
|
||||
SECTION "bank2",DATA,BANK[$2]
|
||||
@ -156,7 +191,7 @@ SpecialsPointers: ; 0xc029
|
||||
dbw $13,$70bc
|
||||
dbw $22,$6f6b
|
||||
dbw $22,$6fd4
|
||||
dbw $22,$7170
|
||||
dbw BANK(SpecialDratini),SpecialDratini
|
||||
dbw $04,$5485
|
||||
dbw $12,$66e8
|
||||
dbw $12,$6711
|
||||
@ -3135,6 +3170,7 @@ Moves: ; 0x41afb
|
||||
; characteristics of each move
|
||||
; animation, effect, power, type, accuracy, PP, XXX something else
|
||||
db POUND,$00,40,NORMAL,$ff,35,$00
|
||||
Move1:
|
||||
db KARATE_CHOP,$00,50,FIGHTING,$ff,25,$00
|
||||
db DOUBLESLAP,$1d,15,NORMAL,$d8,10,$00
|
||||
db COMET_PUNCH,$1d,18,NORMAL,$d8,15,$00
|
||||
@ -3681,8 +3717,124 @@ SECTION "bank20",DATA,BANK[$20]
|
||||
INCBIN "baserom.gbc",$80000,$4000
|
||||
SECTION "bank21",DATA,BANK[$21]
|
||||
INCBIN "baserom.gbc",$84000,$4000
|
||||
|
||||
SECTION "bank22",DATA,BANK[$22]
|
||||
INCBIN "baserom.gbc",$88000,$4000
|
||||
INCBIN "baserom.gbc",$88000,$3170
|
||||
|
||||
SpecialDratini: ; 0x8b170
|
||||
; if $c2dd 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, [$c2dd]
|
||||
cp $2
|
||||
ret nc
|
||||
ld bc, TeamCount
|
||||
ld a, [bc]
|
||||
ld hl, 0
|
||||
call GetNthTeamMon
|
||||
ld a, [bc]
|
||||
ld c, a
|
||||
ld de, TeamMon2 - TeamMon1
|
||||
.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, [$c2dd]
|
||||
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 + 5
|
||||
ld bc, Move1 - Moves
|
||||
call AddNTimes
|
||||
ld a, BANK(Moves)
|
||||
call GetFarByte
|
||||
|
||||
; get the address of the move's PP and update the PP
|
||||
ld hl, TeamMon1PP - TeamMon1Moves
|
||||
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
|
||||
|
||||
|
||||
GetNthTeamMon: ; 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, TeamMon1
|
||||
add hl, de
|
||||
and a
|
||||
jr z, .EmptyParty
|
||||
dec a
|
||||
ret z
|
||||
ld de, TeamMon2 - TeamMon1
|
||||
.loop
|
||||
add hl, de
|
||||
dec a
|
||||
jr nz, .loop
|
||||
ret
|
||||
.EmptyParty
|
||||
scf
|
||||
ret
|
||||
|
||||
INCBIN "baserom.gbc",$8b1e1,$8c000-$8b1e1
|
||||
|
||||
SECTION "bank23",DATA,BANK[$23]
|
||||
INCBIN "baserom.gbc",$8C000,$4000
|
||||
SECTION "bank24",DATA,BANK[$24]
|
||||
|
@ -1,2 +1,3 @@
|
||||
INCLUDE "wram.asm"
|
||||
INCLUDE "constants.asm"
|
||||
INCLUDE "main.tx"
|
||||
|
67
wram.asm
Normal file
67
wram.asm
Normal file
@ -0,0 +1,67 @@
|
||||
SECTION "PlayerTeam",BSS[$dcd7]
|
||||
|
||||
TeamCount: ; 0xdcd7
|
||||
ds 1 ; number of Pokémon in party
|
||||
TeamSpecies: ; 0xdcd8
|
||||
ds 6 ; species of each Pokémon in party
|
||||
; 0xdcde
|
||||
; XXX what is this
|
||||
ds 1
|
||||
|
||||
TeamMon1:
|
||||
TeamMon1Species: ; 0xdcdf
|
||||
ds 1
|
||||
TeamMon1Item: ; 0xdce0
|
||||
ds 1
|
||||
TeamMon1Moves: ; 0xdce1
|
||||
ds 4
|
||||
TeamMon1ID: ; 0xdce5
|
||||
ds 2
|
||||
TeamMon1Exp: ; 0xdce7
|
||||
ds 3
|
||||
TeamMon1HPExp: ; 0xdcea
|
||||
ds 2
|
||||
TeamMon1AtkExp: ; 0xdcec
|
||||
ds 2
|
||||
TeamMon1DefExp: ; 0xdcee
|
||||
ds 2
|
||||
TeamMon1SpdExp: ; 0xdcf0
|
||||
ds 2
|
||||
TeamMon1SpclExp: ; 0xdcf2
|
||||
ds 2
|
||||
TeamMon1DVs: ; 0xdcf4
|
||||
ds 2 ; Atk/Def/Spd/Spcl, HP is the high bits of these four nybbles
|
||||
TeamMon1PP: ; 0xdcf6
|
||||
ds 4
|
||||
TeamMon1Happiness: ; 0xdcfa
|
||||
ds 1
|
||||
TeamMon1PokerusStatus: ; 0xdcfb
|
||||
ds 1
|
||||
TeamMon1SeerModifier: ; 0xdcfc
|
||||
ds 2
|
||||
TeamMon1Level: ; 0xdcfe
|
||||
ds 1
|
||||
TeamMon1Status: ; 0xdcff
|
||||
ds 1
|
||||
|
||||
; 0xdd00
|
||||
; XXX what is this
|
||||
ds 1
|
||||
|
||||
TeamMon1CurHP: ; 0xdd01
|
||||
ds 2
|
||||
TeamMon1MaxHP: ; 0xdd03
|
||||
ds 2
|
||||
TeamMon1Atk: ; 0xdd05
|
||||
ds 2
|
||||
TeamMon1Def: ; 0xdd07
|
||||
ds 2
|
||||
TeamMon1Spd: ; 0xdd09
|
||||
ds 2
|
||||
TeamMon1SpclAtk: ; 0xdd0b
|
||||
ds 2
|
||||
TeamMon1SpclDef: ; 0xdd0d
|
||||
ds 2
|
||||
|
||||
TeamMon2: ; 0xdd00
|
||||
ds 5 * (TeamMon2 - TeamMon1)
|
Loading…
Reference in New Issue
Block a user