mirror of
https://github.com/pret/pokeyellow.git
synced 2026-05-13 22:43:07 -05:00
4606 lines
104 KiB
NASM
Executable File
4606 lines
104 KiB
NASM
Executable File
INCLUDE "charmap.asm"
|
||
INCLUDE "constants.asm"
|
||
|
||
NPC_SPRITES_1 EQU $4
|
||
NPC_SPRITES_2 EQU $5
|
||
|
||
GFX EQU $4
|
||
|
||
PICS_1 EQU $9
|
||
PICS_2 EQU $A
|
||
PICS_3 EQU $B
|
||
PICS_4 EQU $C
|
||
PICS_5 EQU $D
|
||
|
||
|
||
SECTION "home",ROM0
|
||
|
||
INCLUDE "home.asm"
|
||
SECTION "bank01",ROMX,BANK[$01]
|
||
|
||
INCLUDE "data/facing.asm"
|
||
INCLUDE "engine/battle/safari_zone.asm"
|
||
INCLUDE "engine/titlescreen.asm"
|
||
|
||
LoadMonData_: ; 442b (1:442b)
|
||
; Load monster [wWhichPokemon] from list [wMonDataLocation]:
|
||
; 0: partymon
|
||
; 1: enemymon
|
||
; 2: boxmon
|
||
; 3: daycaremon
|
||
; Return monster id at wcf91 and its data at wLoadedMon.
|
||
; Also load base stats at wMonHeader for convenience.
|
||
|
||
ld a, [wDayCareMonSpecies]
|
||
ld [wcf91], a
|
||
ld a, [wMonDataLocation]
|
||
cp DAYCARE_DATA
|
||
jr z, .GetMonHeader
|
||
|
||
ld a, [wWhichPokemon]
|
||
ld e, a
|
||
call GetMonSpecies
|
||
|
||
.GetMonHeader
|
||
ld a, [wcf91]
|
||
ld [wd0b5], a ; input for GetMonHeader
|
||
call GetMonHeader
|
||
|
||
ld hl, wPartyMons
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
ld a, [wMonDataLocation]
|
||
cp ENEMY_PARTY_DATA
|
||
jr c, .getMonEntry
|
||
|
||
ld hl, wEnemyMons
|
||
jr z, .getMonEntry
|
||
|
||
cp 2
|
||
ld hl, wBoxMons
|
||
ld bc, wBoxMon2 - wBoxMon1
|
||
jr z, .getMonEntry
|
||
|
||
ld hl, wDayCareMon
|
||
jr .copyMonData
|
||
|
||
.getMonEntry
|
||
ld a, [wWhichPokemon]
|
||
call AddNTimes
|
||
|
||
.copyMonData
|
||
ld de, wLoadedMon
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
jp CopyData
|
||
|
||
; get species of mon e in list [wMonDataLocation] for LoadMonData
|
||
GetMonSpecies: ; 4478 (1:4478)
|
||
ld hl, wPartySpecies
|
||
ld a, [wMonDataLocation]
|
||
and a
|
||
jr z, .getSpecies
|
||
dec a
|
||
jr z, .enemyParty
|
||
ld hl, wBoxSpecies
|
||
jr .getSpecies
|
||
.enemyParty
|
||
ld hl, wEnemyPartyMons
|
||
.getSpecies
|
||
ld d, 0
|
||
add hl, de
|
||
ld a, [hl]
|
||
ld [wcf91], a
|
||
ret
|
||
|
||
INCLUDE "data/item_prices.asm"
|
||
INCLUDE "text/item_names.asm"
|
||
|
||
UnusedNames: ; 491e (1:491e)
|
||
db "かみなりバッヂ@"
|
||
db "かいがらバッヂ@"
|
||
db "おじぞうバッヂ@"
|
||
db "はやぶさバッヂ@"
|
||
db "ひんやりバッヂ@"
|
||
db "なかよしバッヂ@"
|
||
db "バラバッヂ@"
|
||
db "ひのたまバッヂ@"
|
||
db "ゴールドバッヂ@"
|
||
db "たまご@"
|
||
db "ひよこ@"
|
||
db "ブロンズ@"
|
||
db "シルバー@"
|
||
db "ゴールド@"
|
||
db "プチキャプテン@"
|
||
db "キャプテン@"
|
||
db "プチマスター@"
|
||
db "マスター@"
|
||
db "エクセレント"
|
||
|
||
INCLUDE "engine/overworld/oam.asm"
|
||
|
||
PrintWaitingText: ; 4b89 (1:4b89)
|
||
coord hl, 3, 10
|
||
lb bc, 1, 11
|
||
ld a, [wIsInBattle]
|
||
and a
|
||
jr z, .asm_4b9a
|
||
call TextBoxBorder
|
||
jr .asm_4b9d
|
||
.asm_4b9a
|
||
call CableClub_TextBoxBorder
|
||
.asm_4b9d
|
||
coord hl, 4, 11
|
||
ld de, WaitingText
|
||
call PlaceString
|
||
ld c, 50
|
||
jp DelayFrames
|
||
|
||
WaitingText: ; 4bab (1:4bab)
|
||
db "Waiting...!@"
|
||
|
||
_UpdateSprites: ; 4bb7 (1:4bb7)
|
||
ld h, wSpriteStateData1 / $100
|
||
inc h
|
||
ld a, $e ; (wSpriteStateData2 + $0e) & $ff
|
||
.spriteLoop
|
||
ld l, a
|
||
sub $e
|
||
ld c, a
|
||
ld [H_CURRENTSPRITEOFFSET], a
|
||
ld a, [hl]
|
||
and a
|
||
jr z, .skipSprite ; tests $c2Xe
|
||
push hl
|
||
push de
|
||
push bc
|
||
call .updateCurrentSprite
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
.skipSprite
|
||
ld a, l
|
||
add $10 ; move to next sprite
|
||
cp $e ; test for overflow (back at $0e)
|
||
jr nz, .spriteLoop
|
||
ret
|
||
.updateCurrentSprite ; 4bd7 (1:4bd7)
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
and a
|
||
jp z, UpdatePlayerSprite
|
||
cp $f0 ; pikachu
|
||
jp z, Func_1552
|
||
ld a, [hl]
|
||
|
||
UpdateNonPlayerSprite: ; 4be3 (1:4be3)
|
||
dec a
|
||
swap a
|
||
ld [$ff93], a ; $10 * sprite#
|
||
ld a, [wNPCMovementScriptSpriteOffset] ; some sprite offset?
|
||
ld b, a
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
cp b
|
||
jr nz, .unequal
|
||
jp DoScriptedNPCMovement
|
||
.unequal
|
||
jp UpdateNPCSprite
|
||
|
||
; This detects if the current sprite (whose offset is at H_CURRENTSPRITEOFFSET)
|
||
; is going to collide with another sprite by looping over the other sprites.
|
||
; The current sprite's offset will be labelled with i (e.g. $c1i0).
|
||
; The loop sprite's offset will labelled with j (e.g. $c1j0).
|
||
;
|
||
; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following
|
||
; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c.
|
||
; The reason that 4 is added below to the coordinate is to make it align with a
|
||
; multiple of $10 to make comparisons easier.
|
||
DetectCollisionBetweenSprites: ; 4bf7 (1:4bf7)
|
||
; nop
|
||
|
||
ld h, wSpriteStateData1 / $100
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
ld l, a
|
||
|
||
ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused)
|
||
and a ; is this sprite slot slot used?
|
||
ret z ; return if not used
|
||
|
||
ld a, l
|
||
add 3
|
||
ld l, a
|
||
|
||
ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1)
|
||
call SetSpriteCollisionValues
|
||
|
||
ld a, [hli] ; a = [$C1i4] (Y screen coordinate)
|
||
add 4 ; align with multiple of $10
|
||
|
||
; The effect of the following 3 lines is to
|
||
; add 7 to a if moving south or
|
||
; subtract 7 from a if moving north.
|
||
add b
|
||
and $f0
|
||
or c
|
||
|
||
ld [$ff90], a ; store Y coordinate adjusted for direction of movement
|
||
|
||
ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1)
|
||
call SetSpriteCollisionValues
|
||
ld a, [hl] ; a = [$C1i6] (X screen coordinate)
|
||
|
||
; The effect of the following 3 lines is to
|
||
; add 7 to a if moving east or
|
||
; subtract 7 from a if moving west.
|
||
add b
|
||
and $f0
|
||
or c
|
||
|
||
ld [$ff91], a ; store X coordinate adjusted for direction of movement
|
||
|
||
ld a, l
|
||
add 7
|
||
ld l, a
|
||
|
||
xor a
|
||
ld [hld], a ; zero [$c1id] XXX what's [$c1id] for?
|
||
ld [hld], a ; zero [$c1ic] (directions in which collisions occurred)
|
||
|
||
ld a, [$ff91]
|
||
ld [hld], a ; [$c1ib] = adjusted X coordinate
|
||
ld a, [$ff90]
|
||
ld [hl], a ; [$c1ia] = adjusted Y coordinate
|
||
|
||
xor a ; zero the loop counter
|
||
|
||
.loop
|
||
ld [$ff8f], a ; store loop counter
|
||
swap a
|
||
ld e, a
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
cp e ; does the loop sprite match the current sprite?
|
||
jp z, .next ; go to the next sprite if they match
|
||
|
||
ld d, h
|
||
ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused)
|
||
and a ; is this sprite slot slot used?
|
||
jp z, .next ; go the next sprite if not used
|
||
|
||
inc e
|
||
inc e
|
||
ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen)
|
||
inc a
|
||
jp z, .next ; go the next sprite if offscreen
|
||
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
add 10
|
||
ld l, a
|
||
|
||
inc e
|
||
ld a, [de] ; a = [$c1j3] (delta Y)
|
||
call SetSpriteCollisionValues
|
||
|
||
inc e
|
||
ld a, [de] ; a = [$C1j4] (Y screen coordinate)
|
||
add 4 ; align with multiple of $10
|
||
|
||
; The effect of the following 3 lines is to
|
||
; add 7 to a if moving south or
|
||
; subtract 7 from a if moving north.
|
||
add b
|
||
and $f0
|
||
or c
|
||
|
||
sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j
|
||
|
||
; calculate the absolute value of the difference to get the distance
|
||
jr nc, .noCarry1
|
||
cpl
|
||
inc a
|
||
.noCarry1
|
||
ld [$ff90], a ; store the distance between the two sprites' adjusted Y values
|
||
|
||
; Use the carry flag set by the above subtraction to determine which sprite's
|
||
; Y coordinate is larger. This information is used later to set [$c1ic],
|
||
; which stores which direction the collision occurred in.
|
||
; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2.
|
||
; If sprite i's Y is larger, set lowest 2 bits of c to 10.
|
||
; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01.
|
||
push af
|
||
rl c
|
||
pop af
|
||
ccf
|
||
rl c
|
||
|
||
; If sprite i's delta Y is 0, then b = 7, else b = 9.
|
||
ld b, 7
|
||
ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate)
|
||
and $f
|
||
jr z, .next1
|
||
ld b, 9
|
||
|
||
.next1
|
||
ld a, [$ff90] ; a = distance between adjusted Y coordinates
|
||
sub b
|
||
ld [$ff92], a ; store distance adjusted using sprite i's direction
|
||
ld a, b
|
||
ld [$ff90], a ; store 7 or 9 depending on sprite i's delta Y
|
||
jr c, .checkXDistance
|
||
|
||
; If sprite j's delta Y is 0, then b = 7, else b = 9.
|
||
ld b, 7
|
||
dec e
|
||
ld a, [de] ; a = [$c1j3] (delta Y)
|
||
inc e
|
||
and a
|
||
jr z, .next2
|
||
ld b, 9
|
||
|
||
.next2
|
||
ld a, [$ff92] ; a = distance adjusted using sprite i's direction
|
||
sub b ; adjust distance using sprite j's direction
|
||
jr z, .checkXDistance
|
||
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
|
||
|
||
.checkXDistance
|
||
inc e
|
||
inc l
|
||
ld a, [de] ; a = [$c1j5] (delta X)
|
||
|
||
push bc
|
||
|
||
call SetSpriteCollisionValues
|
||
inc e
|
||
ld a, [de] ; a = [$c1j6] (X screen coordinate)
|
||
|
||
; The effect of the following 3 lines is to
|
||
; add 7 to a if moving east or
|
||
; subtract 7 from a if moving west.
|
||
add b
|
||
and $f0
|
||
or c
|
||
|
||
pop bc
|
||
|
||
sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j
|
||
|
||
; calculate the absolute value of the difference to get the distance
|
||
jr nc, .noCarry2
|
||
cpl
|
||
inc a
|
||
.noCarry2
|
||
ld [$ff91], a ; store the distance between the two sprites' adjusted X values
|
||
|
||
; Use the carry flag set by the above subtraction to determine which sprite's
|
||
; X coordinate is larger. This information is used later to set [$c1ic],
|
||
; which stores which direction the collision occurred in.
|
||
; The following 5 lines set the lowest 2 bits of c.
|
||
; If sprite i's X is larger, set lowest 2 bits of c to 10.
|
||
; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01.
|
||
push af
|
||
rl c
|
||
pop af
|
||
ccf
|
||
rl c
|
||
|
||
; If sprite i's delta X is 0, then b = 7, else b = 9.
|
||
ld b, 7
|
||
ld a, [hl] ; a = [$c1ib] (adjusted X coordinate)
|
||
and $f
|
||
jr z, .next3
|
||
ld b, 9
|
||
|
||
.next3
|
||
ld a, [$ff91] ; a = distance between adjusted X coordinates
|
||
sub b
|
||
ld [$ff92], a ; store distance adjusted using sprite i's direction
|
||
ld a, b
|
||
ld [$ff91], a ; store 7 or 9 depending on sprite i's delta X
|
||
jr c, .collision
|
||
|
||
; If sprite j's delta X is 0, then b = 7, else b = 9.
|
||
ld b, 7
|
||
dec e
|
||
ld a, [de] ; a = [$c1j5] (delta X)
|
||
inc e
|
||
and a
|
||
jr z, .next4
|
||
ld b, 9
|
||
|
||
.next4
|
||
ld a, [$ff92] ; a = distance adjusted using sprite i's direction
|
||
sub b ; adjust distance using sprite j's direction
|
||
jr z, .collision
|
||
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
|
||
|
||
.collision
|
||
ld a, l
|
||
and $f0 ; collision with pikachu?
|
||
jr nz, .asm_4cd9
|
||
xor a
|
||
ld [wd434], a
|
||
ld a, [$ff8f]
|
||
cp $f
|
||
jr nz, .asm_4cd9
|
||
call Func_4d0a
|
||
jr .asm_4cef
|
||
.asm_4cd9
|
||
ld a, [$ff91] ; a = 7 or 9 depending on sprite i's delta X
|
||
ld b, a
|
||
ld a, [$ff90] ; a = 7 or 9 depending on sprite i's delta Y
|
||
inc l
|
||
|
||
; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
|
||
; (note that normally if delta X isn't 0, then delta Y must be 0 and vice versa)
|
||
cp b
|
||
jr c, .next5
|
||
ld b, %1100
|
||
jr .next6
|
||
.next5
|
||
ld b, %0011
|
||
|
||
.next6
|
||
ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis)
|
||
and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above
|
||
or [hl] ; or with existing collision direction bits in [$c1ic]
|
||
ld [hl], a ; store new value
|
||
ld a, c ; useless code because a is overwritten before being used again
|
||
|
||
; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with
|
||
inc l
|
||
inc l
|
||
.asm_4cef
|
||
ld a, [$ff8f] ; a = loop counter
|
||
ld de, SpriteCollisionBitTable
|
||
add a
|
||
add e
|
||
ld e, a
|
||
jr nc, .noCarry3
|
||
inc d
|
||
.noCarry3
|
||
ld a, [de]
|
||
or [hl]
|
||
ld [hli], a
|
||
inc de
|
||
ld a, [de]
|
||
or [hl]
|
||
ld [hl], a
|
||
|
||
.next
|
||
ld a, [$ff8f] ; a = loop counter
|
||
inc a
|
||
cp $10
|
||
jp nz, .loop
|
||
ret
|
||
|
||
; takes delta X or delta Y in a
|
||
; b = delta X/Y
|
||
; c = 0 if delta X/Y is 0
|
||
; c = 7 if delta X/Y is 1
|
||
; c = 9 if delta X/Y is -1
|
||
Func_4d0a: ; 4d0a (1:4d0a)
|
||
ld a, [$ff91]
|
||
ld b, a
|
||
ld a, [$ff90]
|
||
inc l
|
||
cp b
|
||
jr c, .asm_4d17
|
||
ld b, %1100
|
||
jr .asm_4d19
|
||
.asm_4d17
|
||
ld b, %11
|
||
.asm_4d19
|
||
ld a, c
|
||
and b
|
||
ld [wd434], a
|
||
ld a, c
|
||
inc l
|
||
inc l
|
||
ret
|
||
|
||
SetSpriteCollisionValues: ; 4d22 (1:4d22)
|
||
and a
|
||
ld b, 0
|
||
ld c, 0
|
||
jr z, .done
|
||
ld c, 9
|
||
cp -1
|
||
jr z, .ok
|
||
ld c, 7
|
||
ld a, 0
|
||
.ok
|
||
ld b, a
|
||
.done
|
||
ret
|
||
|
||
SpriteCollisionBitTable: ; 4d35 (1:4d35)
|
||
db %00000000,%00000001
|
||
db %00000000,%00000010
|
||
db %00000000,%00000100
|
||
db %00000000,%00001000
|
||
db %00000000,%00010000
|
||
db %00000000,%00100000
|
||
db %00000000,%01000000
|
||
db %00000000,%10000000
|
||
db %00000001,%00000000
|
||
db %00000010,%00000000
|
||
db %00000100,%00000000
|
||
db %00001000,%00000000
|
||
db %00010000,%00000000
|
||
db %00100000,%00000000
|
||
db %01000000,%00000000
|
||
db %10000000,%00000000
|
||
|
||
INCLUDE "engine/overworld/item.asm"
|
||
INCLUDE "engine/overworld/movement.asm"
|
||
|
||
INCLUDE "engine/cable_club.asm"
|
||
|
||
LoadTrainerInfoTextBoxTiles: ; 5b9a (1:5b9a)
|
||
ld de, TrainerInfoTextBoxTileGraphics
|
||
ld hl, vChars2 + $760
|
||
lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10
|
||
jp CopyVideoData
|
||
|
||
INCLUDE "engine/menu/main_menu.asm"
|
||
|
||
INCLUDE "engine/oak_speech.asm"
|
||
|
||
SpecialWarpIn: ; 6042 (1:6042)
|
||
call LoadSpecialWarpData
|
||
predef LoadTilesetHeader
|
||
ld hl,wd732
|
||
bit 2,[hl] ; dungeon warp or fly warp?
|
||
res 2,[hl]
|
||
jr z,.next
|
||
; if dungeon warp or fly warp
|
||
ld a,[wDestinationMap]
|
||
jr .next2
|
||
.next
|
||
bit 1,[hl]
|
||
jr z,.next3
|
||
call EmptyFunc
|
||
.next3
|
||
ld a,0
|
||
.next2
|
||
ld b,a
|
||
ld a,[wd72d]
|
||
and a
|
||
jr nz,.next4
|
||
ld a,b
|
||
.next4
|
||
ld hl,wd732
|
||
bit 4,[hl] ; dungeon warp?
|
||
ret nz
|
||
; if not dungeon warp
|
||
ld [wLastMap],a
|
||
ret
|
||
|
||
; gets the map ID, tile block map view pointer, tileset, and coordinates
|
||
LoadSpecialWarpData: ; 6073 (1:6073)
|
||
ld a, [wd72d]
|
||
cp TRADE_CENTER
|
||
jr nz, .notTradeCenter
|
||
ld hl, TradeCenterSpec1
|
||
ld a, [hSerialConnectionStatus]
|
||
cp USING_INTERNAL_CLOCK ; which gameboy is clocking determines who is on the left and who is on the right
|
||
jr z, .copyWarpData
|
||
ld hl, TradeCenterSpec2
|
||
jr .copyWarpData
|
||
.notTradeCenter
|
||
cp COLOSSEUM
|
||
jr nz, .notColosseum
|
||
ld hl, ColosseumSpec1
|
||
ld a, [hSerialConnectionStatus]
|
||
cp USING_INTERNAL_CLOCK
|
||
jr z, .copyWarpData
|
||
ld hl, ColosseumSpec2
|
||
jr .copyWarpData
|
||
.notColosseum
|
||
ld a, [wd732]
|
||
bit 1, a
|
||
jr nz, .notFirstMap
|
||
bit 2, a
|
||
jr nz, .notFirstMap
|
||
ld hl, FirstMapSpec
|
||
.copyWarpData
|
||
ld de, wCurMap
|
||
ld c, $7
|
||
.copyWarpDataLoop
|
||
ld a, [hli]
|
||
ld [de], a
|
||
inc de
|
||
dec c
|
||
jr nz, .copyWarpDataLoop
|
||
ld a, [hli]
|
||
ld [wCurMapTileset], a
|
||
xor a
|
||
jr .done
|
||
.notFirstMap
|
||
ld a, [wLastMap]
|
||
ld hl, wd732
|
||
bit 4, [hl] ; used dungeon warp (jumped down hole/waterfall)?
|
||
jr nz, .usedDunegonWarp
|
||
bit 6, [hl] ; return to last pokemon center (or player's house)?
|
||
res 6, [hl]
|
||
jr z, .otherDestination
|
||
; return to last pokemon center or player's house
|
||
ld a, [wLastBlackoutMap]
|
||
jr .usedFlyWarp
|
||
.usedDunegonWarp
|
||
ld hl, wd72d
|
||
res 4, [hl]
|
||
ld a, [wDungeonWarpDestinationMap]
|
||
ld b, a
|
||
ld [wCurMap], a
|
||
ld a, [wWhichDungeonWarp]
|
||
ld c, a
|
||
ld hl, DungeonWarpList
|
||
ld de, 0
|
||
ld a, 6
|
||
ld [wDungeonWarpDataEntrySize], a
|
||
.dungeonWarpListLoop
|
||
ld a, [hli]
|
||
cp b
|
||
jr z, .matchedDungeonWarpDestinationMap
|
||
inc hl
|
||
jr .nextDungeonWarp
|
||
.matchedDungeonWarpDestinationMap
|
||
ld a, [hli]
|
||
cp c
|
||
jr z, .matchedDungeonWarpID
|
||
.nextDungeonWarp
|
||
ld a, [wDungeonWarpDataEntrySize]
|
||
add e
|
||
ld e, a
|
||
jr .dungeonWarpListLoop
|
||
.matchedDungeonWarpID
|
||
ld hl, DungeonWarpData
|
||
add hl, de
|
||
jr .copyWarpData2
|
||
.otherDestination
|
||
ld a, [wDestinationMap]
|
||
.usedFlyWarp
|
||
ld b, a
|
||
ld [wCurMap], a
|
||
ld hl, FlyWarpDataPtr
|
||
.flyWarpDataPtrLoop
|
||
ld a, [hli]
|
||
inc hl
|
||
cp b
|
||
jr z, .foundFlyWarpMatch
|
||
inc hl
|
||
inc hl
|
||
jr .flyWarpDataPtrLoop
|
||
.foundFlyWarpMatch
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
.copyWarpData2
|
||
ld de, wCurrentTileBlockMapViewPointer
|
||
ld c, $6
|
||
.copyWarpDataLoop2
|
||
ld a, [hli]
|
||
ld [de], a
|
||
inc de
|
||
dec c
|
||
jr nz, .copyWarpDataLoop2
|
||
xor a ; OVERWORLD
|
||
ld [wCurMapTileset], a
|
||
.done
|
||
ld [wYOffsetSinceLastSpecialWarp], a
|
||
ld [wXOffsetSinceLastSpecialWarp], a
|
||
ld a, $ff ; the player's coordinates have already been updated using a special warp, so don't use any of the normal warps
|
||
ld [wDestinationWarpID], a
|
||
ret
|
||
|
||
INCLUDE "data/special_warps.asm"
|
||
; not IshiharaTeam
|
||
SetDebugTeam: ; 623e (1:623e)
|
||
ld de, DebugTeam
|
||
.loop
|
||
ld a, [de]
|
||
cp $ff
|
||
ret z
|
||
ld [wcf91], a
|
||
inc de
|
||
ld a, [de]
|
||
ld [wCurEnemyLVL], a
|
||
inc de
|
||
call AddPartyMon
|
||
jr .loop
|
||
|
||
DebugTeam: ; 6253 (1:6253)
|
||
db SNORLAX,80
|
||
db PERSIAN,80
|
||
db JIGGLYPUFF,15
|
||
db PIKACHU,5
|
||
db $FF
|
||
|
||
EmptyFunc: ; 64ea (1:64ea)
|
||
ret
|
||
|
||
INCLUDE "engine/menu/naming_screen.asm"
|
||
|
||
INCLUDE "engine/oak_speech2.asm"
|
||
|
||
; subtracts the amount the player paid from their money
|
||
; sets carry flag if there is enough money and unsets carry flag if not
|
||
SubtractAmountPaidFromMoney_: ; 68a6 (1:68a6)
|
||
ld de, wPlayerMoney
|
||
ld hl, hMoney ; total price of items
|
||
ld c, 3 ; length of money in bytes
|
||
call StringCmp
|
||
ret c
|
||
ld de, wPlayerMoney + 2
|
||
ld hl, hMoney + 2 ; total price of items
|
||
ld c, 3 ; length of money in bytes
|
||
predef SubBCDPredef ; subtract total price from money
|
||
ld a, MONEY_BOX
|
||
ld [wTextBoxID], a
|
||
call DisplayTextBoxID ; redraw money text box
|
||
and a
|
||
ret
|
||
|
||
HandleItemListSwapping: ; 68c9 (1:68c9)
|
||
ld a,[wListMenuID]
|
||
cp a,ITEMLISTMENU
|
||
jp nz,DisplayListMenuIDLoop ; only rearrange item list menus
|
||
push hl
|
||
ld hl,wListPointer
|
||
ld a,[hli]
|
||
ld h,[hl]
|
||
ld l,a
|
||
inc hl ; hl = beginning of list entries
|
||
ld a,[wCurrentMenuItem]
|
||
ld b,a
|
||
ld a,[wListScrollOffset]
|
||
add b
|
||
add a
|
||
ld c,a
|
||
ld b,0
|
||
add hl,bc ; hl = address of currently selected item entry
|
||
ld a,[hl]
|
||
pop hl
|
||
inc a
|
||
jp z,DisplayListMenuIDLoop ; ignore attempts to swap the Cancel menu item
|
||
ld a,[wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
|
||
and a ; has the first item to swap already been chosen?
|
||
jr nz,.swapItems
|
||
; if not, set the currently selected item as the first item
|
||
ld a,[wCurrentMenuItem]
|
||
inc a
|
||
ld b,a
|
||
ld a,[wListScrollOffset] ; index of top (visible) menu item within the list
|
||
add b
|
||
ld [wMenuItemToSwap],a ; ID of item chosen for swapping (counts from 1)
|
||
ld c,20
|
||
call DelayFrames
|
||
jp DisplayListMenuIDLoop
|
||
.swapItems
|
||
ld a,[wCurrentMenuItem]
|
||
inc a
|
||
ld b,a
|
||
ld a,[wListScrollOffset]
|
||
add b
|
||
ld b,a
|
||
ld a,[wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
|
||
cp b ; is the currently selected item the same as the first item to swap?
|
||
jp z,DisplayListMenuIDLoop ; ignore attempts to swap an item with itself
|
||
dec a
|
||
ld [wMenuItemToSwap],a ; ID of item chosen for swapping (counts from 1)
|
||
ld c,20
|
||
call DelayFrames
|
||
push hl
|
||
push de
|
||
ld hl,wListPointer
|
||
ld a,[hli]
|
||
ld h,[hl]
|
||
ld l,a
|
||
inc hl ; hl = beginning of list entries
|
||
ld d,h
|
||
ld e,l ; de = beginning of list entries
|
||
ld a,[wCurrentMenuItem]
|
||
ld b,a
|
||
ld a,[wListScrollOffset]
|
||
add b
|
||
add a
|
||
ld c,a
|
||
ld b,0
|
||
add hl,bc ; hl = address of currently selected item entry
|
||
ld a,[wMenuItemToSwap] ; ID of item chosen for swapping (counts from 1)
|
||
add a
|
||
add e
|
||
ld e,a
|
||
jr nc,.noCarry
|
||
inc d
|
||
.noCarry ; de = address of first item to swap
|
||
ld a,[de]
|
||
ld b,a
|
||
ld a,[hli]
|
||
cp b
|
||
jr z,.swapSameItemType
|
||
.swapDifferentItems
|
||
ld [$ff95],a ; [$ff95] = second item ID
|
||
ld a,[hld]
|
||
ld [$ff96],a ; [$ff96] = second item quantity
|
||
ld a,[de]
|
||
ld [hli],a ; put first item ID in second item slot
|
||
inc de
|
||
ld a,[de]
|
||
ld [hl],a ; put first item quantity in second item slot
|
||
ld a,[$ff96]
|
||
ld [de],a ; put second item quantity in first item slot
|
||
dec de
|
||
ld a,[$ff95]
|
||
ld [de],a ; put second item ID in first item slot
|
||
xor a
|
||
ld [wMenuItemToSwap],a ; 0 means no item is currently being swapped
|
||
pop de
|
||
pop hl
|
||
jp DisplayListMenuIDLoop
|
||
.swapSameItemType
|
||
inc de
|
||
ld a,[hl]
|
||
ld b,a
|
||
ld a,[de]
|
||
add b ; a = sum of both item quantities
|
||
cp a,100 ; is the sum too big for one item slot?
|
||
jr c,.combineItemSlots
|
||
; swap enough items from the first slot to max out the second slot if they can't be combined
|
||
sub a,99
|
||
ld [de],a
|
||
ld a,99
|
||
ld [hl],a
|
||
jr .done
|
||
.combineItemSlots
|
||
ld [hl],a ; put the sum in the second item slot
|
||
ld hl,wListPointer
|
||
ld a,[hli]
|
||
ld h,[hl]
|
||
ld l,a
|
||
dec [hl] ; decrease the number of items
|
||
ld a,[hl]
|
||
ld [wListCount],a ; update number of items variable
|
||
cp a,1
|
||
jr nz,.skipSettingMaxMenuItemID
|
||
ld [wMaxMenuItem],a ; if the number of items is only one now, update the max menu item ID
|
||
.skipSettingMaxMenuItemID
|
||
dec de
|
||
ld h,d
|
||
ld l,e
|
||
inc hl
|
||
inc hl ; hl = address of item after first item to swap
|
||
.moveItemsUpLoop ; erase the first item slot and move up all the following item slots to fill the gap
|
||
ld a,[hli]
|
||
ld [de],a
|
||
inc de
|
||
inc a ; reached the $ff terminator?
|
||
jr z,.afterMovingItemsUp
|
||
ld a,[hli]
|
||
ld [de],a
|
||
inc de
|
||
jr .moveItemsUpLoop
|
||
.afterMovingItemsUp
|
||
xor a
|
||
ld [wListScrollOffset],a
|
||
ld [wCurrentMenuItem],a
|
||
.done
|
||
xor a
|
||
ld [wMenuItemToSwap],a ; 0 means no item is currently being swapped
|
||
pop de
|
||
pop hl
|
||
jp DisplayListMenuIDLoop
|
||
|
||
INCLUDE "engine/overworld/pokemart.asm"
|
||
INCLUDE "engine/learn_move.asm"
|
||
INCLUDE "engine/overworld/pokecenter.asm"
|
||
|
||
SetLastBlackoutMap: ; 6ef0 (1:6ef0)
|
||
; Set the map to return to when
|
||
; blacking out or using Teleport or Dig.
|
||
; Safari rest houses don't count.
|
||
|
||
push hl
|
||
ld hl, SafariZoneRestHouses
|
||
ld a, [wCurMap]
|
||
ld b, a
|
||
.loop
|
||
ld a, [hli]
|
||
cp -1
|
||
jr z, .notresthouse
|
||
cp b
|
||
jr nz, .loop
|
||
jr .done
|
||
|
||
.notresthouse
|
||
ld a, [wLastMap]
|
||
ld [wLastBlackoutMap], a
|
||
.done
|
||
pop hl
|
||
ret
|
||
|
||
SafariZoneRestHouses: ; 6f0a (1:6f0a)
|
||
db SAFARI_ZONE_REST_HOUSE_2
|
||
db SAFARI_ZONE_REST_HOUSE_3
|
||
db SAFARI_ZONE_REST_HOUSE_4
|
||
db -1
|
||
|
||
; function that performs initialization for DisplayTextID
|
||
DisplayTextIDInit: ; 6f0e (1:6f0e)
|
||
xor a
|
||
ld [wListMenuID],a
|
||
ld a,[wAutoTextBoxDrawingControl]
|
||
bit 0,a
|
||
jr nz,.skipDrawingTextBoxBorder
|
||
ld a,[hSpriteIndexOrTextID] ; text ID (or sprite ID)
|
||
and a
|
||
jr nz,.notStartMenu
|
||
; if text ID is 0 (i.e. the start menu)
|
||
; Note that the start menu text border is also drawn in the function directly
|
||
; below this, so this seems unnecessary.
|
||
CheckEvent EVENT_GOT_POKEDEX
|
||
; start menu with pokedex
|
||
coord hl, 10, 0
|
||
lb bc, 14, 8
|
||
jr nz,.drawTextBoxBorder
|
||
; start menu without pokedex
|
||
coord hl, 10, 0
|
||
lb bc, 12, 8
|
||
jr .drawTextBoxBorder
|
||
; if text ID is not 0 (i.e. not the start menu) then do a standard dialogue text box
|
||
.notStartMenu
|
||
coord hl, 0, 12
|
||
lb bc, 4, 18
|
||
.drawTextBoxBorder
|
||
call TextBoxBorder
|
||
.skipDrawingTextBoxBorder
|
||
ld hl,wFontLoaded
|
||
set 0,[hl]
|
||
ld hl,wFlags_0xcd60
|
||
bit 4,[hl]
|
||
res 4,[hl]
|
||
jr nz,.skipMovingSprites
|
||
call UpdateSprites
|
||
.skipMovingSprites
|
||
; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite
|
||
; this is done because when you talk to an NPC, they turn to look your way
|
||
; the original direction they were facing must be restored after the dialogue is over
|
||
ld hl,wSpriteStateData1 + $19
|
||
ld c,$0f
|
||
ld de,$0010
|
||
.spriteFacingDirectionCopyLoop
|
||
ld a,[hl]
|
||
inc h
|
||
ld [hl],a
|
||
dec h
|
||
add hl,de
|
||
dec c
|
||
jr nz,.spriteFacingDirectionCopyLoop
|
||
; loop to force all the sprites in the middle of animation to stand still
|
||
; (so that they don't like they're frozen mid-step during the dialogue)
|
||
ld hl,wSpriteStateData1 + 2
|
||
ld de,$0010
|
||
ld c,e
|
||
.spriteStandStillLoop
|
||
ld a,[hl]
|
||
cp a,$ff ; is the sprite visible?
|
||
jr z,.nextSprite
|
||
; if it is visible
|
||
and a,$fc
|
||
ld [hl],a
|
||
.nextSprite
|
||
add hl,de
|
||
dec c
|
||
jr nz,.spriteStandStillLoop
|
||
ld b,vBGMap1 / $100 ; window background address
|
||
call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
|
||
xor a
|
||
ld [hWY],a ; put the window on the screen
|
||
call LoadFontTilePatterns
|
||
ld a,$01
|
||
ld [H_AUTOBGTRANSFERENABLED],a ; enable continuous WRAM to VRAM transfer each V-blank
|
||
ret
|
||
|
||
; function that displays the start menu
|
||
DrawStartMenu: ; 6f80 (1:6f80)
|
||
CheckEvent EVENT_GOT_POKEDEX
|
||
; menu with pokedex
|
||
coord hl, 10, 0
|
||
lb bc, 14, 8
|
||
jr nz,.drawTextBoxBorder
|
||
; shorter menu if the player doesn't have the pokedex
|
||
coord hl, 10, 0
|
||
lb bc, 12, 8
|
||
.drawTextBoxBorder
|
||
call TextBoxBorder
|
||
ld a,D_DOWN | D_UP | START | B_BUTTON | A_BUTTON
|
||
ld [wMenuWatchedKeys],a
|
||
ld a,$02
|
||
ld [wTopMenuItemY],a ; Y position of first menu choice
|
||
ld a,$0b
|
||
ld [wTopMenuItemX],a ; X position of first menu choice
|
||
ld a,[wBattleAndStartSavedMenuItem] ; remembered menu selection from last time
|
||
ld [wCurrentMenuItem],a
|
||
ld [wLastMenuItem],a
|
||
xor a
|
||
ld [wMenuWatchMovingOutOfBounds],a
|
||
ld hl,wd730
|
||
set 6,[hl] ; no pauses between printing each letter
|
||
coord hl, 12, 2
|
||
CheckEvent EVENT_GOT_POKEDEX
|
||
; case for not having pokdex
|
||
ld a,$06
|
||
jr z,.storeMenuItemCount
|
||
; case for having pokedex
|
||
ld de,StartMenuPokedexText
|
||
call PrintStartMenuItem
|
||
ld a,$07
|
||
.storeMenuItemCount
|
||
ld [wMaxMenuItem],a ; number of menu items
|
||
ld de,StartMenuPokemonText
|
||
call PrintStartMenuItem
|
||
ld de,StartMenuItemText
|
||
call PrintStartMenuItem
|
||
ld de,wPlayerName ; player's name
|
||
call PrintStartMenuItem
|
||
ld a,[wd72e]
|
||
bit 6,a ; is the player using the link feature?
|
||
; case for not using link feature
|
||
ld de,StartMenuSaveText
|
||
jr z,.printSaveOrResetText
|
||
; case for using link feature
|
||
ld de,StartMenuResetText
|
||
.printSaveOrResetText
|
||
call PrintStartMenuItem
|
||
ld de,StartMenuOptionText
|
||
call PrintStartMenuItem
|
||
ld de,StartMenuExitText
|
||
call PlaceString
|
||
ld hl,wd730
|
||
res 6,[hl] ; turn pauses between printing letters back on
|
||
ret
|
||
|
||
StartMenuPokedexText: ; 7002 (1:7002)
|
||
db "POKéDEX@"
|
||
|
||
StartMenuPokemonText: ; 700a (1:700a)
|
||
db "#MON@"
|
||
|
||
StartMenuItemText: ; 700f (1:700f)
|
||
db "ITEM@"
|
||
|
||
StartMenuSaveText: ; 7014 (1:7014)
|
||
db "SAVE@"
|
||
|
||
StartMenuResetText: ; 7019 (1:7019)
|
||
db "RESET@"
|
||
|
||
StartMenuExitText: ; 701f (1:701f)
|
||
db "EXIT@"
|
||
|
||
StartMenuOptionText: ; 7024 (1:7024)
|
||
db "OPTION@"
|
||
|
||
PrintStartMenuItem: ; 702b (1:702b)
|
||
push hl
|
||
call PlaceString
|
||
pop hl
|
||
ld de,SCREEN_WIDTH * 2
|
||
add hl,de
|
||
ret
|
||
|
||
INCLUDE "engine/overworld/cable_club_npc.asm"
|
||
|
||
INCLUDE "engine/text_boxes.asm"
|
||
dr $76e7,$778e
|
||
PlayerPC: ; 778e (1:778e)
|
||
dr $778e,$7a0f
|
||
_RemovePokemon: ; 7a0f (1:7a0f)
|
||
dr $7a0f,$7abf
|
||
_DisplayPokedex: ; 7c18 (1:7abf)
|
||
dr $7abf,$8000
|
||
|
||
SECTION "bank03",ROMX,BANK[$03]
|
||
|
||
INCLUDE "engine/joypad.asm"
|
||
|
||
ClearVariablesAfterLoadingMapData: ; c07c (3:407c)
|
||
ld a, $90
|
||
ld [hWY], a
|
||
ld [rWY], a
|
||
xor a
|
||
ld [H_AUTOBGTRANSFERENABLED], a
|
||
ld [wStepCounter], a
|
||
ld [wLoneAttackNo], a ; wGymLeaderNo
|
||
ld [hJoyPressed], a
|
||
ld [hJoyReleased], a
|
||
ld [hJoyHeld], a
|
||
ld [wActionResultOrTookBattleTurn], a
|
||
ld [wUnusedD5A3], a
|
||
ld hl, wCardKeyDoorY
|
||
ld [hli], a
|
||
ld [hl], a
|
||
ld hl, wWhichTrade
|
||
ld bc, $1e
|
||
call FillMemory
|
||
ret
|
||
|
||
; only used for setting bit 2 of wd736 upon entering a new map
|
||
IsPlayerStandingOnWarp: ; c0a6 (3:40a6)
|
||
ld a, [wNumberOfWarps]
|
||
and a
|
||
ret z
|
||
ld c, a
|
||
ld hl, wWarpEntries
|
||
.loop
|
||
ld a, [wYCoord]
|
||
cp [hl]
|
||
jr nz, .nextWarp1
|
||
inc hl
|
||
ld a, [wXCoord]
|
||
cp [hl]
|
||
jr nz, .nextWarp2
|
||
inc hl
|
||
ld a, [hli] ; target warp
|
||
ld [wDestinationWarpID], a
|
||
ld a, [hl] ; target map
|
||
ld [$ff8b], a
|
||
ld hl, wd736
|
||
set 2, [hl] ; standing on warp flag
|
||
ret
|
||
.nextWarp1
|
||
inc hl
|
||
.nextWarp2
|
||
inc hl
|
||
inc hl
|
||
inc hl
|
||
dec c
|
||
jr nz, .loop
|
||
ret
|
||
|
||
CheckForceBikeOrSurf: ; c0d2 (3:40d2)
|
||
ld hl, wd732
|
||
bit 5, [hl]
|
||
ret nz
|
||
ld hl, ForcedBikeOrSurfMaps
|
||
ld a, [wYCoord]
|
||
ld b, a
|
||
ld a, [wXCoord]
|
||
ld c, a
|
||
ld a, [wCurMap]
|
||
ld d, a
|
||
.loop
|
||
ld a, [hli]
|
||
cp $ff
|
||
ret z ;if we reach FF then it's not part of the list
|
||
cp d ;compare to current map
|
||
jr nz, .incorrectMap
|
||
ld a, [hli]
|
||
cp b ;compare y-coord
|
||
jr nz, .incorrectY
|
||
ld a, [hli]
|
||
cp c ;compare x-coord
|
||
jr nz, .loop ; incorrect x-coord, check next item
|
||
ld a, [wCurMap]
|
||
cp SEAFOAM_ISLANDS_4
|
||
ld a, $2
|
||
ld [wSeafoamIslands4CurScript], a
|
||
jr z, .forceSurfing
|
||
ld a, [wCurMap]
|
||
cp SEAFOAM_ISLANDS_5
|
||
ld a, $2
|
||
ld [wSeafoamIslands5CurScript], a
|
||
jr z, .forceSurfing
|
||
;force bike riding
|
||
ld hl, wd732
|
||
set 5, [hl]
|
||
ld a, $1
|
||
ld [wWalkBikeSurfState], a
|
||
ld [wWalkBikeSurfStateCopy], a
|
||
call ForceBikeOrSurf
|
||
ret
|
||
.incorrectMap
|
||
inc hl
|
||
.incorrectY
|
||
inc hl
|
||
jr .loop
|
||
.forceSurfing
|
||
ld a, $2
|
||
ld [wWalkBikeSurfState], a
|
||
ld [wWalkBikeSurfStateCopy], a
|
||
call ForceBikeOrSurf
|
||
ret
|
||
|
||
INCLUDE "data/force_bike_surf.asm"
|
||
|
||
IsPlayerFacingEdgeOfMap: ; c148 (3:4148)
|
||
push hl
|
||
push de
|
||
push bc
|
||
ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction
|
||
srl a
|
||
ld c, a
|
||
ld b, $0
|
||
ld hl, .functionPointerTable
|
||
add hl, bc
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
ld a, [wYCoord]
|
||
ld b, a
|
||
ld a, [wXCoord]
|
||
ld c, a
|
||
ld de, .returnaddress
|
||
push de
|
||
jp [hl]
|
||
.returnaddress
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ret
|
||
|
||
.functionPointerTable
|
||
dw .facingDown
|
||
dw .facingUp
|
||
dw .facingLeft
|
||
dw .facingRight
|
||
|
||
.facingDown
|
||
ld a, [wCurMapHeight]
|
||
add a
|
||
dec a
|
||
cp b
|
||
jr z, .setCarry
|
||
jr .resetCarry
|
||
|
||
.facingUp
|
||
ld a, b
|
||
and a
|
||
jr z, .setCarry
|
||
jr .resetCarry
|
||
|
||
.facingLeft
|
||
ld a, c
|
||
and a
|
||
jr z, .setCarry
|
||
jr .resetCarry
|
||
|
||
.facingRight
|
||
ld a, [wCurMapWidth]
|
||
add a
|
||
dec a
|
||
cp c
|
||
jr z, .setCarry
|
||
jr .resetCarry
|
||
.resetCarry
|
||
and a
|
||
ret
|
||
.setCarry
|
||
scf
|
||
ret
|
||
|
||
IsWarpTileInFrontOfPlayer: ; c197 (3:4197)
|
||
push hl
|
||
push de
|
||
push bc
|
||
call _GetTileAndCoordsInFrontOfPlayer
|
||
ld a, [wCurMap]
|
||
cp SS_ANNE_5
|
||
jr z, .ssAnne5
|
||
ld a, [wSpriteStateData1 + 9] ; player sprite's facing direction
|
||
srl a
|
||
ld c, a
|
||
ld b, 0
|
||
ld hl, .warpTileListPointers
|
||
add hl, bc
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
ld a, [wTileInFrontOfPlayer]
|
||
ld de, $1
|
||
call IsInArray
|
||
.done
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ret
|
||
|
||
.warpTileListPointers: ; c1c0 (3:41c0)
|
||
dw .facingDownWarpTiles
|
||
dw .facingUpWarpTiles
|
||
dw .facingLeftWarpTiles
|
||
dw .facingRightWarpTiles
|
||
|
||
.facingDownWarpTiles
|
||
db $01,$12,$17,$3D,$04,$18,$33,$FF
|
||
|
||
.facingUpWarpTiles
|
||
db $01,$5C,$FF
|
||
|
||
.facingLeftWarpTiles
|
||
db $1A,$4B,$FF
|
||
|
||
.facingRightWarpTiles
|
||
db $0F,$4E,$FF
|
||
|
||
.ssAnne5
|
||
ld a, [wTileInFrontOfPlayer]
|
||
cp $15
|
||
jr nz, .notSSAnne5Warp
|
||
scf
|
||
jr .done
|
||
.notSSAnne5Warp
|
||
and a
|
||
jr .done
|
||
|
||
IsPlayerStandingOnDoorTileOrWarpTile: ; c1e6 (3:41e6)
|
||
push hl
|
||
push de
|
||
push bc
|
||
callba IsPlayerStandingOnDoorTile ; 6:6785
|
||
jr c, .done
|
||
ld a, [wCurMapTileset]
|
||
add a
|
||
ld c, a
|
||
ld b, $0
|
||
ld hl, WarpTileIDPointers
|
||
add hl, bc
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
ld de, $1
|
||
aCoord 8, 9
|
||
call IsInArray
|
||
jr nc, .done
|
||
ld hl, wd736
|
||
res 2, [hl]
|
||
.done
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ret
|
||
|
||
INCLUDE "data/warp_tile_ids.asm"
|
||
|
||
PrintSafariZoneSteps: ; c27b (3:427b)
|
||
ld a, [wCurMap]
|
||
cp SAFARI_ZONE_EAST
|
||
ret c
|
||
cp UNKNOWN_DUNGEON_2
|
||
ret nc
|
||
coord hl, 0, 0
|
||
lb bc, 3, 7
|
||
call TextBoxBorder
|
||
coord hl, 1, 1
|
||
ld de, wSafariSteps
|
||
lb bc, 2, 3
|
||
call PrintNumber
|
||
coord hl, 4, 1
|
||
ld de, SafariSteps
|
||
call PlaceString
|
||
coord hl, 1, 3
|
||
ld de, SafariBallText
|
||
call PlaceString
|
||
ld a, [wNumSafariBalls]
|
||
cp 10
|
||
jr nc, .numSafariBallsTwoDigits
|
||
coord hl, 5, 3
|
||
ld a, " "
|
||
ld [hl], a
|
||
.numSafariBallsTwoDigits
|
||
coord hl, 6, 3
|
||
ld de, wNumSafariBalls
|
||
lb bc, 1, 2
|
||
jp PrintNumber
|
||
|
||
SafariSteps: ; c2c4 (3:42c4)
|
||
db "/500@"
|
||
|
||
SafariBallText: ; c5c9 (3:42c9)
|
||
db "BALL×× @"
|
||
|
||
GetTileAndCoordsInFrontOfPlayer: ; c2d4 (3:42d1)
|
||
call GetPredefRegisters
|
||
|
||
_GetTileAndCoordsInFrontOfPlayer: ; c2d4 (3:42d4)
|
||
ld a, [wYCoord]
|
||
ld d, a
|
||
ld a, [wXCoord]
|
||
ld e, a
|
||
ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
|
||
and a ; cp SPRITE_FACING_DOWN
|
||
jr nz, .notFacingDown
|
||
; facing down
|
||
aCoord 8, 11
|
||
inc d
|
||
jr .storeTile
|
||
.notFacingDown
|
||
cp SPRITE_FACING_UP
|
||
jr nz, .notFacingUp
|
||
; facing up
|
||
aCoord 8, 7
|
||
dec d
|
||
jr .storeTile
|
||
.notFacingUp
|
||
cp SPRITE_FACING_LEFT
|
||
jr nz, .notFacingLeft
|
||
; facing left
|
||
aCoord 6, 9
|
||
dec e
|
||
jr .storeTile
|
||
.notFacingLeft
|
||
cp SPRITE_FACING_RIGHT
|
||
jr nz, .storeTile
|
||
; facing right
|
||
aCoord 10, 9
|
||
inc e
|
||
.storeTile
|
||
ld c, a
|
||
ld [wTileInFrontOfPlayer], a
|
||
ret
|
||
|
||
GetTileTwoStepsInFrontOfPlayer: ; c309 (3:4309)
|
||
xor a
|
||
ld [$ffdb], a
|
||
ld hl, wYCoord
|
||
ld a, [hli]
|
||
ld d, a
|
||
ld e, [hl]
|
||
ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
|
||
and a ; cp SPRITE_FACING_DOWN
|
||
jr nz, .notFacingDown
|
||
; facing down
|
||
ld hl, $ffdb
|
||
set 0, [hl]
|
||
aCoord 8, 13
|
||
inc d
|
||
jr .storeTile
|
||
.notFacingDown
|
||
cp SPRITE_FACING_UP
|
||
jr nz, .notFacingUp
|
||
; facing up
|
||
ld hl, $ffdb
|
||
set 1, [hl]
|
||
aCoord 8, 5
|
||
dec d
|
||
jr .storeTile
|
||
.notFacingUp
|
||
cp SPRITE_FACING_LEFT
|
||
jr nz, .notFacingLeft
|
||
; facing left
|
||
ld hl, $ffdb
|
||
set 2, [hl]
|
||
aCoord 4, 9
|
||
dec e
|
||
jr .storeTile
|
||
.notFacingLeft
|
||
cp SPRITE_FACING_RIGHT
|
||
jr nz, .storeTile
|
||
; facing right
|
||
ld hl, $ffdb
|
||
set 3, [hl]
|
||
aCoord 12, 9
|
||
inc e
|
||
.storeTile
|
||
ld c, a
|
||
ld [wTileInFrontOfBoulderAndBoulderCollisionResult], a
|
||
ld [wTileInFrontOfPlayer], a
|
||
ret
|
||
|
||
CheckForCollisionWhenPushingBoulder: ; c356 (3:4356)
|
||
call GetTileTwoStepsInFrontOfPlayer
|
||
call IsTilePassable
|
||
jr c, .done
|
||
ld hl, TilePairCollisionsLand
|
||
call CheckForTilePairCollisions2
|
||
ld a, $ff
|
||
jr c, .done ; if there is an elevation difference between the current tile and the one two steps ahead
|
||
ld a, [wTileInFrontOfBoulderAndBoulderCollisionResult]
|
||
cp $15 ; stairs tile
|
||
ld a, $ff
|
||
jr z, .done ; if the tile two steps ahead is stairs
|
||
call CheckForBoulderCollisionWithSprites
|
||
.done
|
||
ld [wTileInFrontOfBoulderAndBoulderCollisionResult], a
|
||
ret
|
||
|
||
; sets a to $ff if there is a collision and $00 if there is no collision
|
||
CheckForBoulderCollisionWithSprites: ; c378 (3:4378)
|
||
ld a, [wBoulderSpriteIndex]
|
||
dec a
|
||
swap a
|
||
ld d, 0
|
||
ld e, a
|
||
ld hl, wSpriteStateData2 + $14
|
||
add hl, de
|
||
ld a, [hli] ; map Y position
|
||
ld [$ffdc], a
|
||
ld a, [hl] ; map X position
|
||
ld [$ffdd], a
|
||
ld a, [wNumSprites]
|
||
ld c, a
|
||
ld de, $f
|
||
ld hl, wSpriteStateData2 + $14
|
||
ld a, [$ffdb]
|
||
and $3 ; facing up or down?
|
||
jr z, .pushingHorizontallyLoop
|
||
.pushingVerticallyLoop
|
||
inc hl
|
||
ld a, [$ffdd]
|
||
cp [hl]
|
||
jr nz, .nextSprite1 ; if X coordinates don't match
|
||
dec hl
|
||
ld a, [hli]
|
||
ld b, a
|
||
ld a, [$ffdb]
|
||
rrca
|
||
jr c, .pushingDown
|
||
; pushing up
|
||
ld a, [$ffdc]
|
||
dec a
|
||
jr .compareYCoords
|
||
.pushingDown
|
||
ld a, [$ffdc]
|
||
inc a
|
||
.compareYCoords
|
||
cp b
|
||
jr z, .failure
|
||
.nextSprite1
|
||
dec c
|
||
jr z, .success
|
||
add hl, de
|
||
jr .pushingVerticallyLoop
|
||
.pushingHorizontallyLoop
|
||
ld a, [hli]
|
||
ld b, a
|
||
ld a, [$ffdc]
|
||
cp b
|
||
jr nz, .nextSprite2
|
||
ld b, [hl]
|
||
ld a, [$ffdb]
|
||
bit 2, a
|
||
jr nz, .pushingLeft
|
||
; pushing right
|
||
ld a, [$ffdd]
|
||
inc a
|
||
jr .compareXCoords
|
||
.pushingLeft
|
||
ld a, [$ffdd]
|
||
dec a
|
||
.compareXCoords
|
||
cp b
|
||
jr z, .failure
|
||
.nextSprite2
|
||
dec c
|
||
jr z, .success
|
||
add hl, de
|
||
jr .pushingHorizontallyLoop
|
||
.failure
|
||
ld a, $ff
|
||
ret
|
||
.success
|
||
xor a
|
||
ret
|
||
|
||
ApplyOutOfBattlePoisonDamage: ; c3de (3:43de)
|
||
ld a, [wd730]
|
||
add a
|
||
jp c, .noBlackOut ; no black out if joypad states are being simulated
|
||
ld a, [wd493]
|
||
bit 7, a
|
||
jp nz, .noBlackOut
|
||
ld a, [wd72e]
|
||
bit 6, a
|
||
jp nz, .noBlackOut
|
||
ld a, [wPartyCount]
|
||
and a
|
||
jp z, .noBlackOut
|
||
call IncrementDayCareMonExp
|
||
call Func_c4c7
|
||
ld a, [wStepCounter]
|
||
and $3 ; is the counter a multiple of 4?
|
||
jp nz, .skipPoisonEffectAndSound ; only apply poison damage every fourth step
|
||
ld [wWhichPokemon], a
|
||
ld hl, wPartyMon1Status
|
||
ld de, wPartySpecies
|
||
.applyDamageLoop
|
||
ld a, [hl]
|
||
and (1 << PSN)
|
||
jr z, .nextMon2 ; not poisoned
|
||
dec hl
|
||
dec hl
|
||
ld a, [hld]
|
||
ld b, a
|
||
ld a, [hli]
|
||
or b
|
||
jr z, .nextMon ; already fainted
|
||
; subtract 1 from HP
|
||
ld a, [hl]
|
||
dec a
|
||
ld [hld], a
|
||
inc a
|
||
jr nz, .noBorrow
|
||
; borrow 1 from upper byte of HP
|
||
dec [hl]
|
||
inc hl
|
||
jr .nextMon
|
||
.noBorrow
|
||
ld a, [hli]
|
||
or [hl]
|
||
jr nz, .nextMon ; didn't faint from damage
|
||
; the mon fainted from the damage
|
||
push hl
|
||
inc hl
|
||
inc hl
|
||
ld [hl], a
|
||
ld a, [de]
|
||
ld [wd11e], a
|
||
push de
|
||
ld a, [wWhichPokemon]
|
||
ld hl, wPartyMonNicks
|
||
call GetPartyMonName
|
||
xor a
|
||
ld [wJoyIgnore], a
|
||
call EnableAutoTextBoxDrawing
|
||
ld a, $d0
|
||
ld [hSpriteIndexOrTextID], a
|
||
call DisplayTextID
|
||
callab IsThisPartymonOurPikachu
|
||
jr nc, .curMonNotPlayerPikachu
|
||
ld e, $3
|
||
callab PlayPikachuSoundClip
|
||
calladb_ModifyPikachuHappiness PIKAHAPPY_PSNFNT
|
||
.curMonNotPlayerPikachu
|
||
pop de
|
||
pop hl
|
||
.nextMon
|
||
inc hl
|
||
inc hl
|
||
.nextMon2
|
||
inc de
|
||
ld a, [de]
|
||
inc a
|
||
jr z, .applyDamageLoopDone
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
add hl, bc
|
||
push hl
|
||
ld hl, wWhichPokemon
|
||
inc [hl]
|
||
pop hl
|
||
jr .applyDamageLoop
|
||
.applyDamageLoopDone
|
||
ld hl, wPartyMon1Status
|
||
ld a, [wPartyCount]
|
||
ld d, a
|
||
ld e, 0
|
||
.countPoisonedLoop
|
||
ld a, [hl]
|
||
and (1 << PSN)
|
||
or e
|
||
ld e, a
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
add hl, bc
|
||
dec d
|
||
jr nz, .countPoisonedLoop
|
||
ld a, e
|
||
and a ; are any party members poisoned?
|
||
jr z, .skipPoisonEffectAndSound
|
||
ld b, $2
|
||
predef ChangeBGPalColor0_4Frames ; change BG white to dark grey for 4 frames
|
||
ld a, SFX_POISONED
|
||
call PlaySound
|
||
.skipPoisonEffectAndSound
|
||
predef AnyPartyAlive
|
||
ld a, d
|
||
and a
|
||
jr nz, .noBlackOut
|
||
call EnableAutoTextBoxDrawing
|
||
ld a, $d1
|
||
ld [hSpriteIndexOrTextID], a
|
||
call DisplayTextID
|
||
ld hl, wd72e
|
||
set 5, [hl]
|
||
ld a, $ff
|
||
jr .done
|
||
.noBlackOut
|
||
xor a
|
||
.done
|
||
ld [wOutOfBattleBlackout], a
|
||
ret
|
||
|
||
Func_c4c7: ; c4c7 (3:44c7)
|
||
ld a, [wStepCounter]
|
||
and a
|
||
jr nz, .asm_c4de
|
||
call Random
|
||
and $1
|
||
jr z, .asm_c4de
|
||
calladb_ModifyPikachuHappiness $6
|
||
.asm_c4de
|
||
ld hl, wPikachuMood
|
||
ld a, [hl]
|
||
cp $80
|
||
jr z, .asm_c4ef
|
||
jr c, .asm_c4ea
|
||
dec a
|
||
dec a
|
||
.asm_c4ea
|
||
inc a
|
||
ld [hl], a
|
||
cp $80
|
||
ret nz
|
||
.asm_c4ef
|
||
xor a
|
||
ld [wd49c], a
|
||
ret
|
||
|
||
LoadTilesetHeader: ; c4f4 (3:44f4)
|
||
call GetPredefRegisters
|
||
push hl
|
||
ld d, 0
|
||
ld a, [wCurMapTileset]
|
||
add a
|
||
add a
|
||
ld e, a
|
||
ld hl, Tilesets
|
||
add hl, de
|
||
add hl, de
|
||
add hl, de
|
||
ld de, wTilesetBank
|
||
ld bc, $b
|
||
call CopyData
|
||
ld a, [hl]
|
||
ld [hTilesetType], a
|
||
xor a
|
||
ld [$ffd8], a
|
||
pop hl
|
||
ld a, [wCurMapTileset]
|
||
push hl
|
||
push de
|
||
ld hl, DungeonTilesets
|
||
ld de, $1
|
||
call IsInArray
|
||
pop de
|
||
pop hl
|
||
jr c, .notDungeonTileset
|
||
ld a, [wCurMapTileset]
|
||
ld b, a
|
||
ld a, [hPreviousTileset]
|
||
cp b
|
||
jr z, .done
|
||
.notDungeonTileset
|
||
ld a, [wDestinationWarpID]
|
||
cp $ff
|
||
jr z, .done
|
||
call LoadDestinationWarpPosition
|
||
ld a, [wYCoord]
|
||
and $1
|
||
ld [wYBlockCoord], a
|
||
ld a, [wXCoord]
|
||
and $1
|
||
ld [wXBlockCoord], a
|
||
.done
|
||
ret
|
||
|
||
INCLUDE "data/dungeon_tilesets.asm"
|
||
|
||
INCLUDE "data/tileset_headers.asm"
|
||
|
||
IncrementDayCareMonExp: ; c684 (3:4684)
|
||
ld a, [wDayCareInUse]
|
||
and a
|
||
ret z
|
||
ld hl, wDayCareMonExp + 2
|
||
inc [hl]
|
||
ret nz
|
||
dec hl
|
||
inc [hl]
|
||
ret nz
|
||
dec hl
|
||
inc [hl]
|
||
ld a, [hl]
|
||
cp $50
|
||
ret c
|
||
ld a, $50
|
||
ld [hl], a
|
||
ret
|
||
|
||
INCLUDE "data/hide_show_data.asm"
|
||
|
||
LoadWildData: ; cb62 (3:4b62)
|
||
ld hl,WildDataPointers
|
||
ld a,[wCurMap]
|
||
|
||
; get wild data for current map
|
||
ld c,a
|
||
ld b,0
|
||
add hl,bc
|
||
add hl,bc
|
||
ld a,[hli]
|
||
ld h,[hl]
|
||
ld l,a ; hl now points to wild data for current map
|
||
ld a,[hli]
|
||
ld [wGrassRate],a
|
||
and a
|
||
jr z,.NoGrassData ; if no grass data, skip to surfing data
|
||
push hl
|
||
ld de,wGrassMons ; otherwise, load grass data
|
||
ld bc,$0014
|
||
call CopyData
|
||
pop hl
|
||
ld bc,$0014
|
||
add hl,bc
|
||
.NoGrassData
|
||
ld a,[hli]
|
||
ld [wWaterRate],a
|
||
and a
|
||
ret z ; if no water data, we're done
|
||
ld de,wWaterMons ; otherwise, load surfing data
|
||
ld bc,$0014
|
||
jp CopyData
|
||
|
||
INCLUDE "data/wild_mons.asm"
|
||
|
||
INCLUDE "engine/items/items.asm"
|
||
|
||
DrawBadges: ; e880 (3:6880)
|
||
; Draw 4x2 gym leader faces, with the faces replaced by
|
||
; badges if they are owned. Used in the player status screen.
|
||
|
||
; In Japanese versions, names are displayed above faces.
|
||
; Instead of removing relevant code, the name graphics were erased.
|
||
|
||
; Tile ids for face/badge graphics.
|
||
ld de, wBadgeOrFaceTiles
|
||
ld hl, .FaceBadgeTiles
|
||
ld bc, 8
|
||
call CopyData
|
||
|
||
; Booleans for each badge.
|
||
ld hl, wTempObtainedBadgesBooleans
|
||
ld bc, 8
|
||
xor a
|
||
call FillMemory
|
||
|
||
; Alter these based on owned badges.
|
||
ld de, wTempObtainedBadgesBooleans
|
||
ld hl, wBadgeOrFaceTiles
|
||
ld a, [wObtainedBadges]
|
||
ld b, a
|
||
ld c, 8
|
||
.CheckBadge
|
||
srl b
|
||
jr nc, .NextBadge
|
||
ld a, [hl]
|
||
add 4 ; Badge graphics are after each face
|
||
ld [hl], a
|
||
ld a, 1
|
||
ld [de], a
|
||
.NextBadge
|
||
inc hl
|
||
inc de
|
||
dec c
|
||
jr nz, .CheckBadge
|
||
|
||
; Draw two rows of badges.
|
||
ld hl, wBadgeNumberTile
|
||
ld a, $d8 ; [1]
|
||
ld [hli], a
|
||
ld [hl], $60 ; First name
|
||
|
||
coord hl, 2, 11
|
||
ld de, wTempObtainedBadgesBooleans
|
||
call .DrawBadgeRow
|
||
|
||
coord hl, 2, 14
|
||
ld de, wTempObtainedBadgesBooleans + 4
|
||
; call .DrawBadgeRow
|
||
; ret
|
||
|
||
.DrawBadgeRow ; e8c9 (3:68c9)
|
||
; Draw 4 badges.
|
||
|
||
ld c, 4
|
||
.DrawBadge
|
||
push de
|
||
push hl
|
||
|
||
; Badge no.
|
||
ld a, [wBadgeNumberTile]
|
||
ld [hli], a
|
||
inc a
|
||
ld [wBadgeNumberTile], a
|
||
|
||
; Names aren't printed if the badge is owned.
|
||
ld a, [de]
|
||
and a
|
||
ld a, [wBadgeNameTile]
|
||
jr nz, .SkipName
|
||
call .PlaceTiles
|
||
jr .PlaceBadge
|
||
|
||
.SkipName
|
||
inc a
|
||
inc a
|
||
inc hl
|
||
|
||
.PlaceBadge
|
||
ld [wBadgeNameTile], a
|
||
ld de, SCREEN_WIDTH - 1
|
||
add hl, de
|
||
ld a, [wBadgeOrFaceTiles]
|
||
call .PlaceTiles
|
||
add hl, de
|
||
call .PlaceTiles
|
||
|
||
; Shift badge array back one byte.
|
||
push bc
|
||
ld hl, wBadgeOrFaceTiles + 1
|
||
ld de, wBadgeOrFaceTiles
|
||
ld bc, 8
|
||
call CopyData
|
||
pop bc
|
||
|
||
pop hl
|
||
ld de, 4
|
||
add hl, de
|
||
|
||
pop de
|
||
inc de
|
||
dec c
|
||
jr nz, .DrawBadge
|
||
ret
|
||
|
||
.PlaceTiles
|
||
ld [hli], a
|
||
inc a
|
||
ld [hl], a
|
||
inc a
|
||
ret
|
||
|
||
.FaceBadgeTiles
|
||
db $20, $28, $30, $38, $40, $48, $50, $58
|
||
|
||
GymLeaderFaceAndBadgeTileGraphics: ; e91b (3:691b)
|
||
INCBIN "gfx/badges.2bpp"
|
||
|
||
; replaces a tile block with the one specified in [wNewTileBlockID]
|
||
; and redraws the map view if necessary
|
||
; b = Y
|
||
; c = X
|
||
ReplaceTileBlock: ; ed1b (3:6d1b)
|
||
call GetPredefRegisters
|
||
ld hl, wOverworldMap
|
||
ld a, [wCurMapWidth]
|
||
add $6
|
||
ld e, a
|
||
ld d, $0
|
||
add hl, de
|
||
add hl, de
|
||
add hl, de
|
||
ld e, $3
|
||
add hl, de
|
||
ld e, a
|
||
ld a, b
|
||
and a
|
||
jr z, .addX
|
||
; add width * Y
|
||
.addWidthYTimesLoop
|
||
add hl, de
|
||
dec b
|
||
jr nz, .addWidthYTimesLoop
|
||
.addX
|
||
add hl, bc ; add X
|
||
ld a, [wNewTileBlockID]
|
||
ld [hl], a
|
||
ld a, [wCurrentTileBlockMapViewPointer]
|
||
ld c, a
|
||
ld a, [wCurrentTileBlockMapViewPointer + 1]
|
||
ld b, a
|
||
call CompareHLWithBC
|
||
ret c ; return if the replaced tile block is below the map view in memory
|
||
push hl
|
||
ld l, e
|
||
ld h, $0
|
||
ld e, $6
|
||
ld d, h
|
||
add hl, hl
|
||
add hl, hl
|
||
add hl, de
|
||
add hl, bc
|
||
pop bc
|
||
call CompareHLWithBC
|
||
ret c ; return if the replaced tile block is above the map view in memory
|
||
|
||
RedrawMapView: ; ed59 (3:6d59)
|
||
ld a, [wIsInBattle]
|
||
inc a
|
||
ret z
|
||
ld a, [H_AUTOBGTRANSFERENABLED]
|
||
push af
|
||
ld a, [hTilesetType]
|
||
push af
|
||
xor a
|
||
ld [H_AUTOBGTRANSFERENABLED], a
|
||
ld [hTilesetType], a ; no flower/water BG tile animations
|
||
call LoadCurrentMapView
|
||
call RunDefaultPaletteCommand
|
||
ld hl, wMapViewVRAMPointer
|
||
ld a, [hli]
|
||
ld h, [hl]
|
||
ld l, a
|
||
ld de, -2 * 32
|
||
add hl, de
|
||
ld a, h
|
||
and $3
|
||
or $98
|
||
ld a, l
|
||
ld [wBuffer], a
|
||
ld a, h
|
||
ld [wBuffer + 1], a ; this copy of the address is not used
|
||
ld a, 2
|
||
ld [$ffbe], a
|
||
ld c, 9 ; number of rows of 2x2 tiles (this covers the whole screen)
|
||
.redrawRowLoop
|
||
push bc
|
||
push hl
|
||
push hl
|
||
ld hl, wTileMap - 2 * SCREEN_WIDTH
|
||
ld de, SCREEN_WIDTH
|
||
ld a, [$ffbe]
|
||
.calcWRAMAddrLoop
|
||
add hl, de
|
||
dec a
|
||
jr nz, .calcWRAMAddrLoop
|
||
call CopyToRedrawRowOrColumnSrcTiles
|
||
pop hl
|
||
ld de, $20
|
||
ld a, [$ffbe]
|
||
ld c, a
|
||
.calcVRAMAddrLoop
|
||
add hl, de
|
||
ld a, h
|
||
and $3
|
||
or $98
|
||
dec c
|
||
jr nz, .calcVRAMAddrLoop
|
||
ld [hRedrawRowOrColumnDest + 1], a
|
||
ld a, l
|
||
ld [hRedrawRowOrColumnDest], a
|
||
ld a, REDRAW_ROW
|
||
ld [hRedrawRowOrColumnMode], a
|
||
call DelayFrame
|
||
ld hl, $ffbe
|
||
inc [hl]
|
||
inc [hl]
|
||
pop hl
|
||
pop bc
|
||
dec c
|
||
jr nz, .redrawRowLoop
|
||
pop af
|
||
ld [hTilesetType], a
|
||
pop af
|
||
ld [H_AUTOBGTRANSFERENABLED], a
|
||
ret
|
||
|
||
CompareHLWithBC: ; edcb (3:6dcb)
|
||
ld a, h
|
||
sub b
|
||
ret nz
|
||
ld a, l
|
||
sub c
|
||
ret
|
||
|
||
INCLUDE "engine/overworld/cut.asm"
|
||
|
||
MarkTownVisitedAndLoadMissableObjects: ; ef93 (3:6f93)
|
||
ld a, [wCurMap]
|
||
cp ROUTE_1
|
||
jr nc, .notInTown
|
||
ld c, a
|
||
ld b, FLAG_SET
|
||
ld hl, wTownVisitedFlag ; mark town as visited (for flying)
|
||
predef FlagActionPredef
|
||
.notInTown
|
||
ld hl, MapHSPointers
|
||
ld a, [wCurMap]
|
||
ld b, $0
|
||
ld c, a
|
||
add hl, bc
|
||
add hl, bc
|
||
ld a, [hli] ; load missable objects pointer in hl
|
||
ld h, [hl]
|
||
; fall through
|
||
|
||
; LoadMissableObjects: ; efb2 (3:6fb2)
|
||
; seems to not exist in yellow (predef replaced with something near TryPushingBoulder)
|
||
ld l, a
|
||
push hl
|
||
ld a, l
|
||
sub MapHS00 & $ff ; calculate difference between out pointer and the base pointer
|
||
ld l, a
|
||
ld a, h
|
||
sbc MapHS00 / $100
|
||
ld h, a
|
||
ld a, h
|
||
ld [H_DIVIDEND], a
|
||
ld a, l
|
||
ld [H_DIVIDEND+1], a
|
||
xor a
|
||
ld [H_DIVIDEND+2], a
|
||
ld [H_DIVIDEND+3], a
|
||
ld a, $3
|
||
ld [H_DIVISOR], a
|
||
ld b, $2
|
||
call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours)
|
||
ld a, [wCurMap]
|
||
ld b, a
|
||
ld a, [H_DIVIDEND+3]
|
||
ld c, a ; store global offset in c
|
||
ld de, wMissableObjectList
|
||
pop hl
|
||
.writeMissableObjectsListLoop
|
||
ld a, [hli]
|
||
cp $ff
|
||
jr z, .done ; end of list
|
||
cp b
|
||
jr nz, .done ; not for current map anymore
|
||
ld a, [hli]
|
||
inc hl
|
||
ld [de], a ; write (map-local) sprite ID
|
||
inc de
|
||
ld a, c
|
||
inc c
|
||
ld [de], a ; write (global) missable object index
|
||
inc de
|
||
jr .writeMissableObjectsListLoop
|
||
.done
|
||
ld a, $ff
|
||
ld [de], a ; write sentinel
|
||
ret
|
||
|
||
InitializeMissableObjectsFlags: ; eff1 (3:6ff1)
|
||
ld hl, wMissableObjectFlags
|
||
ld bc, wMissableObjectFlagsEnd - wMissableObjectFlags
|
||
xor a
|
||
call FillMemory ; clear missable objects flags
|
||
ld hl, MapHS00
|
||
xor a
|
||
ld [wMissableObjectCounter], a
|
||
.missableObjectsLoop
|
||
ld a, [hli]
|
||
cp $ff ; end of list
|
||
ret z
|
||
push hl
|
||
inc hl
|
||
ld a, [hl]
|
||
cp Hide
|
||
jr nz, .skip
|
||
ld hl, wMissableObjectFlags
|
||
ld a, [wMissableObjectCounter]
|
||
ld c, a
|
||
ld b, FLAG_SET
|
||
call MissableObjectFlagAction ; set flag if Item is hidden
|
||
.skip
|
||
ld hl, wMissableObjectCounter
|
||
inc [hl]
|
||
pop hl
|
||
inc hl
|
||
inc hl
|
||
jr .missableObjectsLoop
|
||
|
||
; tests if current sprite is a missable object that is hidden/has been removed
|
||
IsObjectHidden: ; f022 (3:7022)
|
||
ld a, [H_CURRENTSPRITEOFFSET]
|
||
swap a
|
||
ld b, a
|
||
ld hl, wMissableObjectList
|
||
.loop
|
||
ld a, [hli]
|
||
cp $ff
|
||
jr z, .notHidden ; not missable -> not hidden
|
||
cp b
|
||
ld a, [hli]
|
||
jr nz, .loop
|
||
ld c, a
|
||
ld b, FLAG_TEST
|
||
ld hl, wMissableObjectFlags
|
||
call MissableObjectFlagAction
|
||
ld a, c
|
||
and a
|
||
jr nz, .hidden
|
||
.notHidden
|
||
xor a
|
||
.hidden
|
||
ld [$ffe5], a
|
||
ret
|
||
|
||
; adds missable object (items, leg. pokemon, etc.) to the map
|
||
; [wMissableObjectIndex]: index of the missable object to be added (global index)
|
||
ShowObject: ; f044 (3:7044)
|
||
ShowObject2:
|
||
ld hl, wMissableObjectFlags
|
||
ld a, [wMissableObjectIndex]
|
||
ld c, a
|
||
ld b, FLAG_RESET
|
||
call MissableObjectFlagAction ; reset "removed" flag
|
||
jp UpdateSprites
|
||
|
||
; removes missable object (items, leg. pokemon, etc.) from the map
|
||
; [wMissableObjectIndex]: index of the missable object to be removed (global index)
|
||
HideObject: ; f053 (3:7053)
|
||
ld hl, wMissableObjectFlags
|
||
ld a, [wMissableObjectIndex]
|
||
ld c, a
|
||
ld b, FLAG_SET
|
||
call MissableObjectFlagAction ; set "removed" flag
|
||
jp UpdateSprites
|
||
|
||
MissableObjectFlagAction: ; f062 (3:7062)
|
||
; identical to FlagAction
|
||
|
||
push hl
|
||
push de
|
||
push bc
|
||
|
||
; bit
|
||
ld a, c
|
||
ld d, a
|
||
and 7
|
||
ld e, a
|
||
|
||
; byte
|
||
ld a, d
|
||
srl a
|
||
srl a
|
||
srl a
|
||
add l
|
||
ld l, a
|
||
jr nc, .ok
|
||
inc h
|
||
.ok
|
||
|
||
; d = 1 << e (bitmask)
|
||
inc e
|
||
ld d, 1
|
||
.shift
|
||
dec e
|
||
jr z, .shifted
|
||
sla d
|
||
jr .shift
|
||
.shifted
|
||
|
||
ld a, b
|
||
and a
|
||
jr z, .reset
|
||
cp 2
|
||
jr z, .read
|
||
|
||
.set
|
||
ld a, [hl]
|
||
ld b, a
|
||
ld a, d
|
||
or b
|
||
ld [hl], a
|
||
jr .done
|
||
|
||
.reset
|
||
ld a, [hl]
|
||
ld b, a
|
||
ld a, d
|
||
xor $ff
|
||
and b
|
||
ld [hl], a
|
||
jr .done
|
||
|
||
.read
|
||
ld a, [hl]
|
||
ld b, a
|
||
ld a, d
|
||
and b
|
||
|
||
.done
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ld c, a
|
||
ret
|
||
|
||
TryPushingBoulder: ; f0a1 (3:70a1)
|
||
ld a, [wd728]
|
||
bit 0, a ; using Strength?
|
||
ret z
|
||
; where LoadMissableObjects predef points to now
|
||
ld a, [wFlags_0xcd60]
|
||
bit 1, a ; has boulder dust animation from previous push played yet?
|
||
ret nz
|
||
xor a
|
||
ld [hSpriteIndexOrTextID], a
|
||
call IsSpriteInFrontOfPlayer
|
||
ld a, [hSpriteIndexOrTextID]
|
||
ld [wBoulderSpriteIndex], a
|
||
and a
|
||
jp z, ResetBoulderPushFlags
|
||
ld hl, wSpriteStateData1 + 1
|
||
ld d, $0
|
||
ld a, [hSpriteIndexOrTextID]
|
||
swap a
|
||
ld e, a
|
||
add hl, de
|
||
res 7, [hl]
|
||
call GetSpriteMovementByte2Pointer
|
||
ld a, [hl]
|
||
cp BOULDER_MOVEMENT_BYTE_2
|
||
jp nz, ResetBoulderPushFlags
|
||
ld hl, wFlags_0xcd60
|
||
bit 6, [hl]
|
||
set 6, [hl] ; indicate that the player has tried pushing
|
||
ret z ; the player must try pushing twice before the boulder will move
|
||
ld a, [hJoyHeld]
|
||
and D_RIGHT | D_LEFT | D_UP | D_DOWN
|
||
ret z
|
||
predef CheckForCollisionWhenPushingBoulder
|
||
ld a, [wTileInFrontOfBoulderAndBoulderCollisionResult]
|
||
and a ; was there a collision?
|
||
jp nz, ResetBoulderPushFlags
|
||
ld a, [hJoyHeld]
|
||
ld b, a
|
||
ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
|
||
cp SPRITE_FACING_UP
|
||
jr z, .pushBoulderUp
|
||
cp SPRITE_FACING_LEFT
|
||
jr z, .pushBoulderLeft
|
||
cp SPRITE_FACING_RIGHT
|
||
jr z, .pushBoulderRight
|
||
.pushBoulderDown
|
||
bit 7, b
|
||
ret z
|
||
ld de, PushBoulderDownMovementData
|
||
jr .done
|
||
.pushBoulderUp
|
||
bit 6, b
|
||
ret z
|
||
ld de, PushBoulderUpMovementData
|
||
jr .done
|
||
.pushBoulderLeft
|
||
bit 5, b
|
||
ret z
|
||
ld de, PushBoulderLeftMovementData
|
||
jr .done
|
||
.pushBoulderRight
|
||
bit 4, b
|
||
ret z
|
||
ld de, PushBoulderRightMovementData
|
||
.done
|
||
call MoveSprite
|
||
ld a, SFX_PUSH_BOULDER
|
||
call PlaySound
|
||
ld hl, wFlags_0xcd60
|
||
set 1, [hl]
|
||
ret
|
||
|
||
PushBoulderUpMovementData: ; f129 (3:7129)
|
||
db NPC_MOVEMENT_UP,$FF
|
||
|
||
PushBoulderDownMovementData: ; f12b (3:712b)
|
||
db NPC_MOVEMENT_DOWN,$FF
|
||
|
||
PushBoulderLeftMovementData: ; f12d (3:712d)
|
||
db NPC_MOVEMENT_LEFT,$FF
|
||
|
||
PushBoulderRightMovementData: ; f12f (3:712f)
|
||
db NPC_MOVEMENT_RIGHT,$FF
|
||
|
||
DoBoulderDustAnimation: ; f131 (3:7131)
|
||
ld a, [wd730]
|
||
bit 0, a
|
||
ret nz
|
||
callab AnimateBoulderDust
|
||
call DiscardButtonPresses
|
||
ld [wJoyIgnore], a
|
||
call ResetBoulderPushFlags
|
||
set 7, [hl]
|
||
ld a, [wBoulderSpriteIndex]
|
||
ld [H_SPRITEINDEX], a
|
||
call GetSpriteMovementByte2Pointer
|
||
ld [hl], $10
|
||
ld a, SFX_CUT
|
||
jp PlaySound
|
||
|
||
ResetBoulderPushFlags: ; f159 (3:7159)
|
||
ld hl, wFlags_0xcd60
|
||
res 1, [hl]
|
||
res 6, [hl]
|
||
ret
|
||
|
||
_AddPartyMon: ; f161 (3:7161)
|
||
; Adds a new mon to the player's or enemy's party.
|
||
; [wMonDataLocation] is used in an unusual way in this function.
|
||
; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
|
||
; If the entire value is 0, then the player is allowed to name the mon.
|
||
ld de, wPartyCount
|
||
ld a, [wMonDataLocation]
|
||
and $f
|
||
jr z, .next
|
||
ld de, wEnemyPartyCount
|
||
.next
|
||
ld a, [de]
|
||
inc a
|
||
cp PARTY_LENGTH + 1
|
||
ret nc ; return if the party is already full
|
||
ld [de], a
|
||
ld a, [de]
|
||
ld [hNewPartyLength], a
|
||
add e
|
||
ld e, a
|
||
jr nc, .noCarry
|
||
inc d
|
||
.noCarry
|
||
ld a, [wcf91]
|
||
ld [de], a ; write species of new mon in party list
|
||
inc de
|
||
ld a, $ff ; terminator
|
||
ld [de], a
|
||
ld hl, wPartyMonOT
|
||
ld a, [wMonDataLocation]
|
||
and $f
|
||
jr z, .next2
|
||
ld hl, wEnemyMonOT
|
||
.next2
|
||
ld a, [hNewPartyLength]
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld d, h
|
||
ld e, l
|
||
ld hl, wPlayerName
|
||
ld bc, NAME_LENGTH
|
||
call CopyData
|
||
ld a, [wMonDataLocation]
|
||
and a
|
||
jr nz, .skipNaming
|
||
ld hl, wPartyMonNicks
|
||
ld a, [hNewPartyLength]
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld a, NAME_MON_SCREEN
|
||
ld [wNamingScreenType], a
|
||
predef AskName
|
||
.skipNaming
|
||
ld hl, wPartyMons
|
||
ld a, [wMonDataLocation]
|
||
and $f
|
||
jr z, .next3
|
||
ld hl, wEnemyMons
|
||
.next3
|
||
ld a, [hNewPartyLength]
|
||
dec a
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
call AddNTimes
|
||
ld e, l
|
||
ld d, h
|
||
push hl
|
||
ld a, [wcf91]
|
||
ld [wd0b5], a
|
||
call GetMonHeader
|
||
ld hl, wMonHeader
|
||
ld a, [hli]
|
||
ld [de], a ; species
|
||
inc de
|
||
pop hl
|
||
push hl
|
||
ld a, [wMonDataLocation]
|
||
and $f
|
||
ld a, $98 ; set enemy trainer mon IVs to fixed average values
|
||
ld b, $88
|
||
jr nz, .next4
|
||
|
||
; If the mon is being added to the player's party, update the pokedex.
|
||
ld a, [wcf91]
|
||
ld [wd11e], a
|
||
push de
|
||
predef IndexToPokedex
|
||
pop de
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld c, a
|
||
ld b, FLAG_TEST
|
||
ld hl, wPokedexOwned
|
||
call FlagAction
|
||
ld a, c ; whether the mon was already flagged as owned
|
||
ld [wUnusedD153], a ; not read
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld c, a
|
||
ld b, FLAG_SET
|
||
push bc
|
||
call FlagAction
|
||
pop bc
|
||
ld hl, wPokedexSeen
|
||
call FlagAction
|
||
|
||
pop hl
|
||
push hl
|
||
|
||
ld a, [wIsInBattle]
|
||
and a ; is this a wild mon caught in battle?
|
||
jr nz, .copyEnemyMonData
|
||
|
||
; Not wild.
|
||
call Random ; generate random IVs
|
||
ld b, a
|
||
call Random
|
||
|
||
.next4
|
||
push bc
|
||
ld bc, wPartyMon1DVs - wPartyMon1
|
||
add hl, bc
|
||
pop bc
|
||
ld [hli], a
|
||
ld [hl], b ; write IVs
|
||
ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1)
|
||
add hl, bc
|
||
ld a, 1
|
||
ld c, a
|
||
xor a
|
||
ld b, a
|
||
call CalcStat ; calc HP stat (set cur Hp to max HP)
|
||
ld a, [H_MULTIPLICAND+1]
|
||
ld [de], a
|
||
inc de
|
||
ld a, [H_MULTIPLICAND+2]
|
||
ld [de], a
|
||
inc de
|
||
xor a
|
||
ld [de], a ; box level
|
||
inc de
|
||
ld [de], a ; status ailments
|
||
inc de
|
||
jr .copyMonTypesAndMoves
|
||
.copyEnemyMonData
|
||
ld bc, wEnemyMon1DVs - wEnemyMon1
|
||
add hl, bc
|
||
ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon
|
||
ld [hli], a
|
||
ld a, [wEnemyMonDVs + 1]
|
||
ld [hl], a
|
||
ld a, [wEnemyMonHP] ; copy HP from cur enemy mon
|
||
ld [de], a
|
||
inc de
|
||
ld a, [wEnemyMonHP+1]
|
||
ld [de], a
|
||
inc de
|
||
xor a
|
||
ld [de], a ; box level
|
||
inc de
|
||
ld a, [wEnemyMonStatus] ; copy status ailments from cur enemy mon
|
||
ld [de], a
|
||
inc de
|
||
.copyMonTypesAndMoves
|
||
ld hl, wMonHTypes
|
||
ld a, [hli] ; type 1
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hli] ; type 2
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hli] ; catch rate (held item in gen 2)
|
||
ld [de], a
|
||
ld a, [wcf91]
|
||
cp KADABRA
|
||
jr nz, .skipGivingTwistedSpoon
|
||
ld a, $60 ; twistedspoon in gen 2
|
||
ld [de], a
|
||
.skipGivingTwistedSpoon
|
||
ld hl, wMonHMoves
|
||
ld a, [hli]
|
||
inc de
|
||
push de
|
||
ld [de], a
|
||
ld a, [hli]
|
||
inc de
|
||
ld [de], a
|
||
ld a, [hli]
|
||
inc de
|
||
ld [de], a
|
||
ld a, [hli]
|
||
inc de
|
||
ld [de], a
|
||
push de
|
||
dec de
|
||
dec de
|
||
dec de
|
||
xor a
|
||
ld [wLearningMovesFromDayCare], a
|
||
predef WriteMonMoves
|
||
pop de
|
||
ld a, [wPlayerID] ; set trainer ID to player ID
|
||
inc de
|
||
ld [de], a
|
||
ld a, [wPlayerID + 1]
|
||
inc de
|
||
ld [de], a
|
||
push de
|
||
ld a, [wCurEnemyLVL]
|
||
ld d, a
|
||
callab CalcExperience
|
||
pop de
|
||
inc de
|
||
ld a, [hExperience] ; write experience
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hExperience + 1]
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hExperience + 2]
|
||
ld [de], a
|
||
xor a
|
||
ld b, NUM_STATS * 2
|
||
.writeEVsLoop ; set all EVs to 0
|
||
inc de
|
||
ld [de], a
|
||
dec b
|
||
jr nz, .writeEVsLoop
|
||
inc de
|
||
inc de
|
||
pop hl
|
||
call AddPartyMon_WriteMovePP
|
||
inc de
|
||
ld a, [wCurEnemyLVL]
|
||
ld [de], a
|
||
inc de
|
||
ld a, [wIsInBattle]
|
||
dec a
|
||
jr nz, .calcFreshStats
|
||
ld hl, wEnemyMonMaxHP
|
||
ld bc, $a
|
||
call CopyData ; copy stats of cur enemy mon
|
||
pop hl
|
||
jr .done
|
||
.calcFreshStats
|
||
pop hl
|
||
ld bc, wPartyMon1HPExp - 1 - wPartyMon1
|
||
add hl, bc
|
||
ld b, $0
|
||
call CalcStats ; calculate fresh set of stats
|
||
.done
|
||
scf
|
||
ret
|
||
|
||
LoadMovePPs: ; f2f9 (3:72f9)
|
||
call GetPredefRegisters
|
||
; fallthrough
|
||
AddPartyMon_WriteMovePP: ; f2fc (3:72fc)
|
||
ld b, NUM_MOVES
|
||
.pploop
|
||
ld a, [hli] ; read move ID
|
||
and a
|
||
jr z, .empty
|
||
dec a
|
||
push hl
|
||
push de
|
||
push bc
|
||
ld hl, Moves
|
||
ld bc, MoveEnd - Moves
|
||
call AddNTimes
|
||
ld de, wcd6d
|
||
ld a, BANK(Moves)
|
||
call FarCopyData
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ld a, [wcd6d + 5] ; PP is byte 5 of move data
|
||
.empty
|
||
inc de
|
||
ld [de], a
|
||
dec b
|
||
jr nz, .pploop ; there are still moves to read
|
||
ret
|
||
|
||
; adds enemy mon [wcf91] (at position [wWhichPokemon] in enemy list) to own party
|
||
; used in the cable club trade center
|
||
_AddEnemyMonToPlayerParty: ; f323 (3:7323)
|
||
ld hl, wPartyCount
|
||
ld a, [hl]
|
||
cp PARTY_LENGTH
|
||
scf
|
||
ret z ; party full, return failure
|
||
inc a
|
||
ld [hl], a ; add 1 to party members
|
||
ld c, a
|
||
ld b, $0
|
||
add hl, bc
|
||
ld a, [wcf91]
|
||
ld [hli], a ; add mon as last list entry
|
||
ld [hl], $ff ; write new sentinel
|
||
ld hl, wPartyMons
|
||
ld a, [wPartyCount]
|
||
dec a
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
call AddNTimes
|
||
ld e, l
|
||
ld d, h
|
||
ld hl, wLoadedMon
|
||
call CopyData ; write new mon's data (from wLoadedMon)
|
||
ld hl, wPartyMonOT
|
||
ld a, [wPartyCount]
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld d, h
|
||
ld e, l
|
||
ld hl, wEnemyMonOT
|
||
ld a, [wWhichPokemon]
|
||
call SkipFixedLengthTextEntries
|
||
ld bc, NAME_LENGTH
|
||
call CopyData ; write new mon's OT name (from an enemy mon)
|
||
ld hl, wPartyMonNicks
|
||
ld a, [wPartyCount]
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld d, h
|
||
ld e, l
|
||
ld hl, wEnemyMonNicks
|
||
ld a, [wWhichPokemon]
|
||
call SkipFixedLengthTextEntries
|
||
ld bc, NAME_LENGTH
|
||
call CopyData ; write new mon's nickname (from an enemy mon)
|
||
ld a, [wcf91]
|
||
ld [wd11e], a
|
||
predef IndexToPokedex
|
||
ld a, [wd11e]
|
||
dec a
|
||
ld c, a
|
||
ld b, FLAG_SET
|
||
ld hl, wPokedexOwned
|
||
push bc
|
||
call FlagAction ; add to owned pokemon
|
||
pop bc
|
||
ld hl, wPokedexSeen
|
||
call FlagAction ; add to seen pokemon
|
||
and a
|
||
ret ; return success
|
||
|
||
_MoveMon: ; f3a4 (3:73a4)
|
||
ld a, [wMoveMonType]
|
||
and a
|
||
jr z, .checkPartyMonSlots
|
||
cp DAYCARE_TO_PARTY
|
||
jr z, .checkPartyMonSlots
|
||
cp PARTY_TO_DAYCARE
|
||
ld hl, wDayCareMon
|
||
jr z, .asm_f3fb
|
||
ld hl, wNumInBox
|
||
ld a, [hl]
|
||
cp MONS_PER_BOX
|
||
jr nz, .partyOrBoxNotFull
|
||
jr .boxFull
|
||
.checkPartyMonSlots
|
||
ld hl, wPartyCount
|
||
ld a, [hl]
|
||
cp PARTY_LENGTH
|
||
jr nz, .partyOrBoxNotFull
|
||
.boxFull
|
||
scf
|
||
ret
|
||
.partyOrBoxNotFull
|
||
inc a
|
||
ld [hl], a ; increment number of mons in party/box
|
||
ld c, a
|
||
ld b, 0
|
||
add hl, bc
|
||
ld a, [wMoveMonType]
|
||
cp DAYCARE_TO_PARTY
|
||
ld a, [wDayCareMon]
|
||
jr z, .asm_f3dc
|
||
ld a, [wcf91]
|
||
.asm_f3dc
|
||
ld [hli], a ; write new mon ID
|
||
ld [hl], $ff ; write new sentinel
|
||
ld a, [wMoveMonType]
|
||
dec a
|
||
ld hl, wPartyMons
|
||
ld bc, wPartyMon2 - wPartyMon1 ; $2c
|
||
ld a, [wPartyCount]
|
||
jr nz, .skipToNewMonEntry
|
||
ld hl, wBoxMons
|
||
ld bc, wBoxMon2 - wBoxMon1 ; $21
|
||
ld a, [wNumInBox]
|
||
.skipToNewMonEntry
|
||
dec a
|
||
call AddNTimes
|
||
.asm_f3fb
|
||
push hl
|
||
ld e, l
|
||
ld d, h
|
||
ld a, [wMoveMonType]
|
||
and a
|
||
ld hl, wBoxMons
|
||
ld bc, wBoxMon2 - wBoxMon1 ; $21
|
||
jr z, .asm_f417
|
||
cp DAYCARE_TO_PARTY
|
||
ld hl, wDayCareMon
|
||
jr z, .asm_f41d
|
||
ld hl, wPartyMons
|
||
ld bc, wPartyMon2 - wPartyMon1 ; $2c
|
||
.asm_f417
|
||
ld a, [wWhichPokemon]
|
||
call AddNTimes
|
||
.asm_f41d
|
||
push hl
|
||
push de
|
||
ld bc, wBoxMon2 - wBoxMon1
|
||
call CopyData
|
||
pop de
|
||
pop hl
|
||
ld a, [wMoveMonType]
|
||
and a
|
||
jr z, .asm_f43a
|
||
cp DAYCARE_TO_PARTY
|
||
jr z, .asm_f43a
|
||
ld bc, wBoxMon2 - wBoxMon1
|
||
add hl, bc
|
||
ld a, [hl]
|
||
inc de
|
||
inc de
|
||
inc de
|
||
ld [de], a
|
||
.asm_f43a
|
||
ld a, [wMoveMonType]
|
||
cp PARTY_TO_DAYCARE
|
||
ld de, wDayCareMonOT
|
||
jr z, .asm_f459
|
||
dec a
|
||
ld hl, wPartyMonOT
|
||
ld a, [wPartyCount]
|
||
jr nz, .asm_f453
|
||
ld hl, wBoxMonOT
|
||
ld a, [wNumInBox]
|
||
.asm_f453
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld d, h
|
||
ld e, l
|
||
.asm_f459
|
||
ld hl, wBoxMonOT
|
||
ld a, [wMoveMonType]
|
||
and a
|
||
jr z, .asm_f46c
|
||
ld hl, wDayCareMonOT
|
||
cp DAYCARE_TO_PARTY
|
||
jr z, .asm_f472
|
||
ld hl, wPartyMonOT
|
||
.asm_f46c
|
||
ld a, [wWhichPokemon]
|
||
call SkipFixedLengthTextEntries
|
||
.asm_f472
|
||
ld bc, NAME_LENGTH
|
||
call CopyData
|
||
ld a, [wMoveMonType]
|
||
cp PARTY_TO_DAYCARE
|
||
ld de, wDayCareMonName
|
||
jr z, .asm_f497
|
||
dec a
|
||
ld hl, wPartyMonNicks
|
||
ld a, [wPartyCount]
|
||
jr nz, .asm_f491
|
||
ld hl, wBoxMonNicks
|
||
ld a, [wNumInBox]
|
||
.asm_f491
|
||
dec a
|
||
call SkipFixedLengthTextEntries
|
||
ld d, h
|
||
ld e, l
|
||
.asm_f497
|
||
ld hl, wBoxMonNicks
|
||
ld a, [wMoveMonType]
|
||
and a
|
||
jr z, .asm_f4aa
|
||
ld hl, wDayCareMonName
|
||
cp DAYCARE_TO_PARTY
|
||
jr z, .asm_f4b0
|
||
ld hl, wPartyMonNicks
|
||
.asm_f4aa
|
||
ld a, [wWhichPokemon]
|
||
call SkipFixedLengthTextEntries
|
||
.asm_f4b0
|
||
ld bc, NAME_LENGTH
|
||
call CopyData
|
||
pop hl
|
||
ld a, [wMoveMonType]
|
||
cp PARTY_TO_BOX
|
||
jr z, .asm_f4ea
|
||
cp PARTY_TO_DAYCARE
|
||
jr z, .asm_f4ea
|
||
push hl
|
||
srl a
|
||
add $2
|
||
ld [wMonDataLocation], a
|
||
call LoadMonData
|
||
callba CalcLevelFromExperience
|
||
ld a, d
|
||
ld [wCurEnemyLVL], a
|
||
pop hl
|
||
ld bc, wBoxMon2 - wBoxMon1
|
||
add hl, bc
|
||
ld [hli], a
|
||
ld d, h
|
||
ld e, l
|
||
ld bc, -18
|
||
add hl, bc
|
||
ld b, $1
|
||
call CalcStats
|
||
.asm_f4ea
|
||
and a
|
||
ret
|
||
|
||
|
||
FlagActionPredef: ; f4ec (3:74ec)
|
||
call GetPredefRegisters
|
||
|
||
FlagAction: ; f4ef (3:74ef)
|
||
; Perform action b on bit c
|
||
; in the bitfield at hl.
|
||
; 0: reset
|
||
; 1: set
|
||
; 2: read
|
||
; Return the result in c.
|
||
|
||
push hl
|
||
push de
|
||
push bc
|
||
|
||
; bit
|
||
ld a, c
|
||
ld d, a
|
||
and 7
|
||
ld e, a
|
||
|
||
; byte
|
||
ld a, d
|
||
srl a
|
||
srl a
|
||
srl a
|
||
add l
|
||
ld l, a
|
||
jr nc, .ok
|
||
inc h
|
||
.ok
|
||
|
||
; d = 1 << e (bitmask)
|
||
inc e
|
||
ld d, 1
|
||
.shift
|
||
dec e
|
||
jr z, .shifted
|
||
sla d
|
||
jr .shift
|
||
.shifted
|
||
|
||
ld a, b
|
||
and a
|
||
jr z, .reset
|
||
cp 2
|
||
jr z, .read
|
||
|
||
.set
|
||
ld b, [hl]
|
||
ld a, d
|
||
or b
|
||
ld [hl], a
|
||
jr .done
|
||
|
||
.reset
|
||
ld b, [hl]
|
||
ld a, d
|
||
xor $ff
|
||
and b
|
||
ld [hl], a
|
||
jr .done
|
||
|
||
.read
|
||
ld b, [hl]
|
||
ld a, d
|
||
and b
|
||
.done
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
ld c, a
|
||
ret
|
||
|
||
HealParty: ; f52b (3:752b)
|
||
; Restore HP and PP.
|
||
|
||
ld hl, wPartySpecies
|
||
ld de, wPartyMon1HP
|
||
.healmon
|
||
ld a, [hli]
|
||
cp $ff
|
||
jr z, .done
|
||
|
||
push hl
|
||
push de
|
||
|
||
ld hl, wPartyMon1Status - wPartyMon1HP
|
||
add hl, de
|
||
xor a
|
||
ld [hl], a
|
||
|
||
push de
|
||
ld b, NUM_MOVES ; A Pokémon has 4 moves
|
||
.pp
|
||
ld hl, wPartyMon1Moves - wPartyMon1HP
|
||
add hl, de
|
||
|
||
ld a, [hl]
|
||
and a
|
||
jr z, .nextmove
|
||
|
||
dec a
|
||
ld hl, wPartyMon1PP - wPartyMon1HP
|
||
add hl, de
|
||
|
||
push hl
|
||
push de
|
||
push bc
|
||
|
||
ld hl, Moves
|
||
ld bc, MoveEnd - Moves
|
||
call AddNTimes
|
||
ld de, wcd6d
|
||
ld a, BANK(Moves)
|
||
call FarCopyData
|
||
ld a, [wcd6d + 5] ; PP is byte 5 of move data
|
||
|
||
pop bc
|
||
pop de
|
||
pop hl
|
||
|
||
inc de
|
||
push bc
|
||
ld b, a
|
||
ld a, [hl]
|
||
and $c0
|
||
add b
|
||
ld [hl], a
|
||
pop bc
|
||
|
||
.nextmove
|
||
dec b
|
||
jr nz, .pp
|
||
pop de
|
||
|
||
ld hl, wPartyMon1MaxHP - wPartyMon1HP
|
||
add hl, de
|
||
ld a, [hli]
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hl]
|
||
ld [de], a
|
||
|
||
pop de
|
||
pop hl
|
||
|
||
push hl
|
||
ld bc, wPartyMon2 - wPartyMon1
|
||
ld h, d
|
||
ld l, e
|
||
add hl, bc
|
||
ld d, h
|
||
ld e, l
|
||
pop hl
|
||
jr .healmon
|
||
|
||
.done
|
||
xor a
|
||
ld [wWhichPokemon], a
|
||
ld [wd11e], a
|
||
|
||
ld a, [wPartyCount]
|
||
ld b, a
|
||
.ppup
|
||
push bc
|
||
call RestoreBonusPP
|
||
pop bc
|
||
ld hl, wWhichPokemon
|
||
inc [hl]
|
||
dec b
|
||
jr nz, .ppup
|
||
ret
|
||
|
||
INCLUDE "engine/bcd.asm"
|
||
|
||
InitPlayerData: ; f6d6 (3:76d6)
|
||
InitPlayerData2:
|
||
|
||
call Random
|
||
ld a, [hRandomSub]
|
||
ld [wPlayerID], a
|
||
|
||
call Random
|
||
ld a, [hRandomAdd]
|
||
ld [wPlayerID + 1], a
|
||
|
||
ld a, $ff
|
||
ld [wUnusedD71B], a
|
||
|
||
ld a, 90 ; initialize happiness to 90
|
||
ld [wPikachuHappiness], a
|
||
ld a, $80
|
||
ld [wPikachuMood], a ; initialize mood
|
||
|
||
ld hl, wPartyCount
|
||
call InitializeEmptyList
|
||
ld hl, wNumInBox
|
||
call InitializeEmptyList
|
||
ld hl, wNumBagItems
|
||
call InitializeEmptyList
|
||
ld hl, wNumBoxItems
|
||
call InitializeEmptyList
|
||
|
||
START_MONEY EQU $3000
|
||
ld hl, wPlayerMoney + 1
|
||
ld a, START_MONEY / $100
|
||
ld [hld], a
|
||
xor a
|
||
ld [hli], a
|
||
inc hl
|
||
ld [hl], a
|
||
|
||
ld [wMonDataLocation], a
|
||
|
||
ld hl, wObtainedBadges
|
||
ld [hli], a
|
||
|
||
ld [hl], a
|
||
|
||
ld hl, wPlayerCoins
|
||
ld [hli], a
|
||
ld [hl], a
|
||
|
||
ld hl, wGameProgressFlags
|
||
ld bc, wGameProgressFlagsEnd - wGameProgressFlags
|
||
call FillMemory ; clear all game progress flags
|
||
|
||
jp InitializeMissableObjectsFlags
|
||
|
||
InitializeEmptyList: ; f730 (3:7730)
|
||
xor a ; count
|
||
ld [hli], a
|
||
dec a ; terminator
|
||
ld [hl], a
|
||
ret
|
||
|
||
GetQuantityOfItemInBag: ; f735 (3:7735)
|
||
; In: b = item ID
|
||
; Out: b = how many of that item are in the bag
|
||
call GetPredefRegisters
|
||
ld hl, wNumBagItems
|
||
.loop
|
||
inc hl
|
||
ld a, [hli]
|
||
cp $ff
|
||
jr z, .notInBag
|
||
cp b
|
||
jr nz, .loop
|
||
ld a, [hl]
|
||
ld b, a
|
||
ret
|
||
.notInBag
|
||
ld b, 0
|
||
ret
|
||
|
||
FindPathToPlayer: ; f74a (3:774a)
|
||
xor a
|
||
ld hl, hFindPathNumSteps
|
||
ld [hli], a ; hFindPathNumSteps
|
||
ld [hli], a ; hFindPathFlags
|
||
ld [hli], a ; hFindPathYProgress
|
||
ld [hl], a ; hFindPathXProgress
|
||
ld hl, wNPCMovementDirections2
|
||
ld de, $0
|
||
.loop
|
||
ld a, [hFindPathYProgress]
|
||
ld b, a
|
||
ld a, [hNPCPlayerYDistance] ; Y distance in steps
|
||
call CalcDifference
|
||
ld d, a
|
||
and a
|
||
jr nz, .asm_f76a
|
||
ld a, [hFindPathFlags]
|
||
set 0, a ; current end of path matches the player's Y coordinate
|
||
ld [hFindPathFlags], a
|
||
.asm_f76a
|
||
ld a, [hFindPathXProgress]
|
||
ld b, a
|
||
ld a, [hNPCPlayerXDistance] ; X distance in steps
|
||
call CalcDifference
|
||
ld e, a
|
||
and a
|
||
jr nz, .asm_f77c
|
||
ld a, [hFindPathFlags]
|
||
set 1, a ; current end of path matches the player's X coordinate
|
||
ld [hFindPathFlags], a
|
||
.asm_f77c
|
||
ld a, [hFindPathFlags]
|
||
cp $3 ; has the end of the path reached the player's position?
|
||
jr z, .done
|
||
; Compare whether the X distance between the player and the current of the path
|
||
; is greater or if the Y distance is. Then, try to reduce whichever is greater.
|
||
ld a, e
|
||
cp d
|
||
jr c, .yDistanceGreater
|
||
; x distance is greater
|
||
ld a, [hNPCPlayerRelativePosFlags]
|
||
bit 1, a
|
||
jr nz, .playerIsLeftOfNPC
|
||
ld d, NPC_MOVEMENT_RIGHT
|
||
jr .next1
|
||
.playerIsLeftOfNPC
|
||
ld d, NPC_MOVEMENT_LEFT
|
||
.next1
|
||
ld a, [hFindPathXProgress]
|
||
add 1
|
||
ld [hFindPathXProgress], a
|
||
jr .storeDirection
|
||
.yDistanceGreater
|
||
ld a, [hNPCPlayerRelativePosFlags]
|
||
bit 0, a
|
||
jr nz, .playerIsAboveNPC
|
||
ld d, NPC_MOVEMENT_DOWN
|
||
jr .next2
|
||
.playerIsAboveNPC
|
||
ld d, NPC_MOVEMENT_UP
|
||
.next2
|
||
ld a, [hFindPathYProgress]
|
||
add 1
|
||
ld [hFindPathYProgress], a
|
||
.storeDirection
|
||
ld a, d
|
||
ld [hli], a
|
||
ld a, [hFindPathNumSteps]
|
||
inc a
|
||
ld [hFindPathNumSteps], a
|
||
jp .loop
|
||
.done
|
||
ld [hl], $ff
|
||
ret
|
||
|
||
CalcPositionOfPlayerRelativeToNPC: ; f7b9 (3:77b9)
|
||
xor a
|
||
ld [hNPCPlayerRelativePosFlags], a
|
||
ld a, [wSpriteStateData1 + 4] ; player's sprite screen Y position in pixels
|
||
ld d, a
|
||
ld a, [wSpriteStateData1 + 6] ; player's sprite screen X position in pixels
|
||
ld e, a
|
||
ld hl, wSpriteStateData1
|
||
ld a, [hNPCSpriteOffset]
|
||
add l
|
||
add $4
|
||
ld l, a
|
||
jr nc, .noCarry
|
||
inc h
|
||
.noCarry
|
||
ld a, d
|
||
ld b, a
|
||
ld a, [hli] ; NPC sprite screen Y position in pixels
|
||
call CalcDifference
|
||
jr nc, .NPCSouthOfOrAlignedWithPlayer
|
||
.NPCNorthOfPlayer
|
||
push hl
|
||
ld hl, hNPCPlayerRelativePosFlags
|
||
bit 0, [hl]
|
||
set 0, [hl]
|
||
pop hl
|
||
jr .divideYDistance
|
||
.NPCSouthOfOrAlignedWithPlayer
|
||
push hl
|
||
ld hl, hNPCPlayerRelativePosFlags
|
||
bit 0, [hl]
|
||
res 0, [hl]
|
||
pop hl
|
||
.divideYDistance
|
||
push hl
|
||
ld hl, hDividend2
|
||
ld [hli], a
|
||
ld a, 16
|
||
ld [hli], a
|
||
call DivideBytes ; divide Y absolute distance by 16
|
||
ld a, [hl] ; quotient
|
||
ld [hNPCPlayerYDistance], a
|
||
pop hl
|
||
inc hl
|
||
ld b, e
|
||
ld a, [hl] ; NPC sprite screen X position in pixels
|
||
call CalcDifference
|
||
jr nc, .NPCEastOfOrAlignedWithPlayer
|
||
.NPCWestOfPlayer
|
||
push hl
|
||
ld hl, hNPCPlayerRelativePosFlags
|
||
bit 1, [hl]
|
||
set 1, [hl]
|
||
pop hl
|
||
jr .divideXDistance
|
||
.NPCEastOfOrAlignedWithPlayer
|
||
push hl
|
||
ld hl, hNPCPlayerRelativePosFlags
|
||
bit 1, [hl]
|
||
res 1, [hl]
|
||
pop hl
|
||
.divideXDistance
|
||
ld [hDividend2], a
|
||
ld a, 16
|
||
ld [hDivisor2], a
|
||
call DivideBytes ; divide X absolute distance by 16
|
||
ld a, [hQuotient2]
|
||
ld [hNPCPlayerXDistance], a
|
||
ld a, [hNPCPlayerRelativePosPerspective]
|
||
and a
|
||
ret z
|
||
ld a, [hNPCPlayerRelativePosFlags]
|
||
cpl
|
||
and $3
|
||
ld [hNPCPlayerRelativePosFlags], a
|
||
ret
|
||
|
||
ConvertNPCMovementDirectionsToJoypadMasks: ; f830 (3:7830)
|
||
ld a, [hNPCMovementDirections2Index]
|
||
ld [wNPCMovementDirections2Index], a
|
||
dec a
|
||
ld de, wSimulatedJoypadStatesEnd
|
||
ld hl, wNPCMovementDirections2
|
||
add l
|
||
ld l, a
|
||
jr nc, .loop
|
||
inc h
|
||
.loop
|
||
ld a, [hld]
|
||
call ConvertNPCMovementDirectionToJoypadMask
|
||
ld [de], a
|
||
inc de
|
||
ld a, [hNPCMovementDirections2Index]
|
||
dec a
|
||
ld [hNPCMovementDirections2Index], a
|
||
jr nz, .loop
|
||
ret
|
||
|
||
ConvertNPCMovementDirectionToJoypadMask: ; f84f (3:784f)
|
||
push hl
|
||
ld b, a
|
||
ld hl, NPCMovementDirectionsToJoypadMasksTable
|
||
.loop
|
||
ld a, [hli]
|
||
cp $ff
|
||
jr z, .done
|
||
cp b
|
||
jr z, .loadJoypadMask
|
||
inc hl
|
||
jr .loop
|
||
.loadJoypadMask
|
||
ld a, [hl]
|
||
.done
|
||
pop hl
|
||
ret
|
||
|
||
NPCMovementDirectionsToJoypadMasksTable: ; f862 (3:7862)
|
||
db NPC_MOVEMENT_UP, D_UP
|
||
db NPC_MOVEMENT_DOWN, D_DOWN
|
||
db NPC_MOVEMENT_LEFT, D_LEFT
|
||
db NPC_MOVEMENT_RIGHT, D_RIGHT
|
||
db $ff
|
||
|
||
; unreferenced
|
||
ret
|
||
|
||
INCLUDE "engine/hp_bar.asm"
|
||
INCLUDE "engine/hidden_object_functions3.asm"
|
||
|
||
SECTION "Graphics", ROMX, BANK[GFX]
|
||
|
||
PokemonLogoJapanGraphics: INCBIN "gfx/pokemon_logo_japan.2bpp"
|
||
FontGraphics: INCBIN "gfx/font.1bpp"
|
||
FontGraphicsEnd:
|
||
ABTiles: INCBIN "gfx/AB.2bpp"
|
||
HpBarAndStatusGraphics: INCBIN "gfx/hp_bar_and_status.2bpp"
|
||
HpBarAndStatusGraphicsEnd:
|
||
BattleHudTiles1: INCBIN "gfx/battle_hud1.1bpp"
|
||
BattleHudTiles2: INCBIN "gfx/battle_hud2.1bpp"
|
||
BattleHudTiles3: INCBIN "gfx/battle_hud3.1bpp"
|
||
NintendoCopyrightLogoGraphics: INCBIN "gfx/copyright.2bpp"
|
||
GamefreakLogoGraphics: INCBIN "gfx/gamefreak.2bpp"
|
||
GamefreakLogoGraphicsEnd:
|
||
NineTile: INCBIN "gfx/9_tile.2bpp"
|
||
TextBoxGraphics: INCBIN "gfx/text_box.2bpp"
|
||
TextBoxGraphicsEnd:
|
||
PokedexTileGraphics: INCBIN "gfx/pokedex.2bpp"
|
||
WorldMapTileGraphics: INCBIN "gfx/town_map.2bpp"
|
||
WorldMapTileGraphicsEnd:
|
||
PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp"
|
||
|
||
dr $11468,$1168a
|
||
PrintStatsBox: ; 1168a (4:568a)
|
||
dr $1168a, $11875
|
||
DrawPartyMenu_: ; 11875 (4:5875)
|
||
dr $11875,$11886
|
||
RedrawPartyMenu_: ; 11886 (4:5886)
|
||
dr $11886,$11a97
|
||
RedPicFront: INCBIN "pic/ytrainer/red.pic"
|
||
ShrinkPic1: INCBIN "pic/trainer/shrink1.pic"
|
||
ShrinkPic2: INCBIN "pic/trainer/shrink2.pic"
|
||
|
||
StartMenu_Pokedex: ; 11c22 (4:5c22)
|
||
dr $11c22,$11c36
|
||
StartMenu_Pokemon: ; 11c36 (4:5c36)
|
||
dr $11c36,$11e98
|
||
ErasePartyMenuCursors: ; 11e98 (4:5e98)
|
||
dr $11e98,$11ead
|
||
StartMenu_Item: ; 11ead (4:5ead)
|
||
dr $11ead,$1200a
|
||
StartMenu_TrainerInfo: ; 1200a (4:600a)
|
||
dr $1200a,$12195
|
||
StartMenu_SaveReset: ; 12195 (4:6195)
|
||
dr $12195,$121a8
|
||
StartMenu_Option: ; 121a8 (4:61a8)
|
||
dr $121a8,$121c5
|
||
SwitchPartyMon: ; 121c5 (4:61c5)
|
||
dr $121c5,$12365
|
||
|
||
|
||
SECTION "NPC Sprites 1", ROMX, BANK[NPC_SPRITES_1]
|
||
|
||
OakAideSprite: INCBIN "gfx/sprites/oak_aide.2bpp"
|
||
RockerSprite: INCBIN "gfx/sprites/rocker.2bpp"
|
||
SwimmerSprite: INCBIN "gfx/sprites/swimmer.2bpp"
|
||
WhitePlayerSprite: INCBIN "gfx/sprites/white_player.2bpp"
|
||
GymHelperSprite: INCBIN "gfx/sprites/gym_helper.2bpp"
|
||
OldPersonSprite: INCBIN "gfx/sprites/old_person.2bpp"
|
||
MartGuySprite: INCBIN "gfx/sprites/mart_guy.2bpp"
|
||
FisherSprite: INCBIN "gfx/sprites/fisher.2bpp"
|
||
OldMediumWomanSprite: INCBIN "gfx/sprites/old_medium_woman.2bpp"
|
||
NurseSprite: INCBIN "gfx/sprites/nurse.2bpp"
|
||
CableClubWomanSprite: INCBIN "gfx/sprites/cable_club_woman.2bpp"
|
||
MrMasterballSprite: INCBIN "gfx/sprites/mr_masterball.2bpp"
|
||
LaprasGiverSprite: INCBIN "gfx/sprites/lapras_giver.2bpp"
|
||
WardenSprite: INCBIN "gfx/sprites/warden.2bpp"
|
||
SsCaptainSprite: INCBIN "gfx/sprites/ss_captain.2bpp"
|
||
Fisher2Sprite: INCBIN "gfx/sprites/fisher2.2bpp"
|
||
BlackbeltSprite: INCBIN "gfx/sprites/blackbelt.2bpp"
|
||
GuardSprite: INCBIN "gfx/sprites/guard.2bpp"
|
||
BallSprite: INCBIN "gfx/sprites/ball.2bpp"
|
||
OmanyteSprite: INCBIN "gfx/sprites/omanyte.2bpp"
|
||
BoulderSprite: INCBIN "gfx/sprites/boulder.2bpp"
|
||
PaperSheetSprite: INCBIN "gfx/sprites/paper_sheet.2bpp"
|
||
BookMapDexSprite: INCBIN "gfx/sprites/book_map_dex.2bpp"
|
||
ClipboardSprite: INCBIN "gfx/sprites/clipboard.2bpp"
|
||
SnorlaxSprite: INCBIN "gfx/sprites/snorlax.2bpp"
|
||
OldAmberSprite: INCBIN "gfx/sprites/old_amber.2bpp"
|
||
LyingOldManSprite: INCBIN "gfx/sprites/lying_old_man.2bpp"
|
||
QuestionMarkSprite: INCBIN "gfx/sprites/question_mark.2bpp"
|
||
|
||
EndOfBattle: ; 13765 (4:7765)
|
||
dr $13765,$1383a
|
||
TryDoWildEncounter: ; 1383a (4:783a)
|
||
dr $1383a,$14000
|
||
|
||
|
||
SECTION "NPC Sprites 2", ROMX, BANK[NPC_SPRITES_2]
|
||
|
||
dr $14000,$1401b
|
||
_InitMapSprites: ; 1401b (5:401b)
|
||
dr $1401b,$140d2
|
||
Func_140d2: ; 140d2 (5:40d2)
|
||
dr $140d2,$143f1
|
||
|
||
RedCyclingSprite: INCBIN "gfx/sprites/cycling.2bpp"
|
||
RedSprite: INCBIN "gfx/sprites/red.2bpp"
|
||
BlueSprite: INCBIN "gfx/sprites/blue.2bpp"
|
||
OakSprite: INCBIN "gfx/sprites/oak.2bpp"
|
||
BugCatcherSprite: INCBIN "gfx/sprites/bug_catcher.2bpp"
|
||
SlowbroSprite: INCBIN "gfx/sprites/slowbro.2bpp"
|
||
LassSprite: INCBIN "gfx/sprites/lass.2bpp"
|
||
BlackHairBoy1Sprite: INCBIN "gfx/sprites/black_hair_boy_1.2bpp"
|
||
LittleGirlSprite: INCBIN "gfx/sprites/little_girl.2bpp"
|
||
BirdSprite: INCBIN "gfx/sprites/bird.2bpp"
|
||
FatBaldGuySprite: INCBIN "gfx/sprites/fat_bald_guy.2bpp"
|
||
GamblerSprite: INCBIN "gfx/sprites/gambler.2bpp"
|
||
BlackHairBoy2Sprite: INCBIN "gfx/sprites/black_hair_boy_2.2bpp"
|
||
GirlSprite: INCBIN "gfx/sprites/girl.2bpp"
|
||
HikerSprite: INCBIN "gfx/sprites/hiker.2bpp"
|
||
FoulardWomanSprite: INCBIN "gfx/sprites/foulard_woman.2bpp"
|
||
GentlemanSprite: INCBIN "gfx/sprites/gentleman.2bpp"
|
||
DaisySprite: INCBIN "gfx/sprites/daisy.2bpp"
|
||
BikerSprite: INCBIN "gfx/sprites/biker.2bpp"
|
||
SailorSprite: INCBIN "gfx/sprites/sailor.2bpp"
|
||
CookSprite: INCBIN "gfx/sprites/cook.2bpp"
|
||
BikeShopGuySprite: INCBIN "gfx/sprites/bike_shop_guy.2bpp"
|
||
MrFujiSprite: INCBIN "gfx/sprites/mr_fuji.2bpp"
|
||
GiovanniSprite: INCBIN "gfx/sprites/giovanni.2bpp"
|
||
RocketSprite: INCBIN "gfx/sprites/rocket.2bpp"
|
||
MediumSprite: INCBIN "gfx/sprites/medium.2bpp"
|
||
WaiterSprite: INCBIN "gfx/sprites/waiter.2bpp"
|
||
ErikaSprite: INCBIN "gfx/sprites/erika.2bpp"
|
||
MomGeishaSprite: INCBIN "gfx/sprites/mom_geisha.2bpp"
|
||
BrunetteGirlSprite: INCBIN "gfx/sprites/brunette_girl.2bpp"
|
||
LanceSprite: INCBIN "gfx/sprites/lance.2bpp"
|
||
MomSprite: INCBIN "gfx/sprites/mom.2bpp"
|
||
BaldingGuySprite: INCBIN "gfx/sprites/balding_guy.2bpp"
|
||
YoungBoySprite: INCBIN "gfx/sprites/young_boy.2bpp"
|
||
GameboyKidSprite: INCBIN "gfx/sprites/gameboy_kid.2bpp"
|
||
ClefairySprite: INCBIN "gfx/sprites/clefairy.2bpp"
|
||
AgathaSprite: INCBIN "gfx/sprites/agatha.2bpp"
|
||
BrunoSprite: INCBIN "gfx/sprites/bruno.2bpp"
|
||
LoreleiSprite: INCBIN "gfx/sprites/lorelei.2bpp"
|
||
SeelSprite: INCBIN "gfx/sprites/seel.2bpp"
|
||
|
||
dr $17c31,$17cb0
|
||
ActivatePC: ; 17cb0 (5:7cb0)
|
||
dr $17cb0,$18000
|
||
|
||
SECTION "bank06",ROMX,BANK[$06]
|
||
dr $18000,$1a4ea
|
||
PlayerStepOutFromDoor: ; 1a4ea (6:64ea)
|
||
dr $1a4ea,$1a527
|
||
_EndNPCMovementScript: ; 1a527 (6:6527)
|
||
dr $1a527,$1a54c
|
||
ProfOakMovementScriptPointerTable: ; 1a54c (6:654c)
|
||
dr $1a54c,$1a622
|
||
PewterMuseumGuyMovementScriptPointerTable: ; 1a622 (6:6622)
|
||
dr $1a622,$1a685
|
||
PewterGymGuyMovementScriptPointerTable: ; 1a685 (6:6685)
|
||
dr $1a685,$1a785
|
||
IsPlayerStandingOnDoorTile: ; 1a785 (6:6785)
|
||
dr $1a785,$1a7f4
|
||
HandleLedges: ; 1a7f4 (6:67f4)
|
||
dr $1a7f4,$1c000
|
||
|
||
SECTION "bank07",ROMX,BANK[$07]
|
||
|
||
dr $1c000,$1c21e
|
||
DoClearSaveDialogue: ; 1c21e (7:421e)
|
||
dr $1c21e,$1e321
|
||
SafariZoneCheck: ; 1e321 (7:6e21)
|
||
dr $1e321,$1e330
|
||
SafariZoneCheckSteps: ; 1e330 (7:6330)
|
||
dr $1e330,$1e385
|
||
PrintSafariGameOverText: ; 1e385 (7:6385)
|
||
dr $1e385,$1e4bf
|
||
CinnabarGymQuiz_1eb0a: ; 1e4bf (7:64bf)
|
||
dr $1e4bf,$20000
|
||
|
||
SECTION "Pics 1", ROMX, BANK[PICS_1]
|
||
|
||
RhydonPicFront: INCBIN "pic/ymon/rhydon.pic"
|
||
RhydonPicBack: INCBIN "pic/monback/rhydonb.pic"
|
||
KangaskhanPicFront: INCBIN "pic/ymon/kangaskhan.pic"
|
||
KangaskhanPicBack: INCBIN "pic/monback/kangaskhanb.pic"
|
||
NidoranMPicFront: INCBIN "pic/ymon/nidoranm.pic"
|
||
NidoranMPicBack: INCBIN "pic/monback/nidoranmb.pic"
|
||
ClefairyPicFront: INCBIN "pic/ymon/clefairy.pic"
|
||
ClefairyPicBack: INCBIN "pic/monback/clefairyb.pic"
|
||
SpearowPicFront: INCBIN "pic/ymon/spearow.pic"
|
||
SpearowPicBack: INCBIN "pic/monback/spearowb.pic"
|
||
VoltorbPicFront: INCBIN "pic/ymon/voltorb.pic"
|
||
VoltorbPicBack: INCBIN "pic/monback/voltorbb.pic"
|
||
NidokingPicFront: INCBIN "pic/ymon/nidoking.pic"
|
||
NidokingPicBack: INCBIN "pic/monback/nidokingb.pic"
|
||
SlowbroPicFront: INCBIN "pic/ymon/slowbro.pic"
|
||
SlowbroPicBack: INCBIN "pic/monback/slowbrob.pic"
|
||
IvysaurPicFront: INCBIN "pic/ymon/ivysaur.pic"
|
||
IvysaurPicBack: INCBIN "pic/monback/ivysaurb.pic"
|
||
ExeggutorPicFront: INCBIN "pic/ymon/exeggutor.pic"
|
||
ExeggutorPicBack: INCBIN "pic/monback/exeggutorb.pic"
|
||
LickitungPicFront: INCBIN "pic/ymon/lickitung.pic"
|
||
LickitungPicBack: INCBIN "pic/monback/lickitungb.pic"
|
||
ExeggcutePicFront: INCBIN "pic/ymon/exeggcute.pic"
|
||
ExeggcutePicBack: INCBIN "pic/monback/exeggcuteb.pic"
|
||
GrimerPicFront: INCBIN "pic/ymon/grimer.pic"
|
||
GrimerPicBack: INCBIN "pic/monback/grimerb.pic"
|
||
GengarPicFront: INCBIN "pic/ymon/gengar.pic"
|
||
GengarPicBack: INCBIN "pic/monback/gengarb.pic"
|
||
NidoranFPicFront: INCBIN "pic/ymon/nidoranf.pic"
|
||
NidoranFPicBack: INCBIN "pic/monback/nidoranfb.pic"
|
||
NidoqueenPicFront: INCBIN "pic/ymon/nidoqueen.pic"
|
||
NidoqueenPicBack: INCBIN "pic/monback/nidoqueenb.pic"
|
||
CubonePicFront: INCBIN "pic/ymon/cubone.pic"
|
||
CubonePicBack: INCBIN "pic/monback/cuboneb.pic"
|
||
RhyhornPicFront: INCBIN "pic/ymon/rhyhorn.pic"
|
||
RhyhornPicBack: INCBIN "pic/monback/rhyhornb.pic"
|
||
LaprasPicFront: INCBIN "pic/ymon/lapras.pic"
|
||
LaprasPicBack: INCBIN "pic/monback/laprasb.pic"
|
||
ArcaninePicFront: INCBIN "pic/ymon/arcanine.pic"
|
||
ArcaninePicBack: INCBIN "pic/monback/arcanineb.pic"
|
||
MewPicFront: INCBIN "pic/ymon/mew.pic"
|
||
MewPicBack: INCBIN "pic/monback/mewb.pic"
|
||
GyaradosPicFront: INCBIN "pic/ymon/gyarados.pic"
|
||
GyaradosPicBack: INCBIN "pic/monback/gyaradosb.pic"
|
||
ShellderPicFront: INCBIN "pic/ymon/shellder.pic"
|
||
ShellderPicBack: INCBIN "pic/monback/shellderb.pic"
|
||
TentacoolPicFront: INCBIN "pic/ymon/tentacool.pic"
|
||
TentacoolPicBack: INCBIN "pic/monback/tentacoolb.pic"
|
||
GastlyPicFront: INCBIN "pic/ymon/gastly.pic"
|
||
GastlyPicBack: INCBIN "pic/monback/gastlyb.pic"
|
||
ScytherPicFront: INCBIN "pic/ymon/scyther.pic"
|
||
ScytherPicBack: INCBIN "pic/monback/scytherb.pic"
|
||
StaryuPicFront: INCBIN "pic/ymon/staryu.pic"
|
||
StaryuPicBack: INCBIN "pic/monback/staryub.pic"
|
||
BlastoisePicFront: INCBIN "pic/ymon/blastoise.pic"
|
||
BlastoisePicBack: INCBIN "pic/monback/blastoiseb.pic"
|
||
PinsirPicFront: INCBIN "pic/ymon/pinsir.pic"
|
||
PinsirPicBack: INCBIN "pic/monback/pinsirb.pic"
|
||
TangelaPicFront: INCBIN "pic/ymon/tangela.pic"
|
||
TangelaPicBack: INCBIN "pic/monback/tangelab.pic"
|
||
|
||
dr $27d20,$27dff
|
||
SaveTrainerName: ; 27dff (9:7dff)
|
||
dr $27dff,$28000
|
||
|
||
SECTION "Pics 2", ROMX, BANK[PICS_2]
|
||
|
||
GrowlithePicFront: INCBIN "pic/ymon/growlithe.pic"
|
||
GrowlithePicBack: INCBIN "pic/monback/growlitheb.pic"
|
||
OnixPicFront: INCBIN "pic/ymon/onix.pic"
|
||
OnixPicBack: INCBIN "pic/monback/onixb.pic"
|
||
FearowPicFront: INCBIN "pic/ymon/fearow.pic"
|
||
FearowPicBack: INCBIN "pic/monback/fearowb.pic"
|
||
PidgeyPicFront: INCBIN "pic/ymon/pidgey.pic"
|
||
PidgeyPicBack: INCBIN "pic/monback/pidgeyb.pic"
|
||
SlowpokePicFront: INCBIN "pic/ymon/slowpoke.pic"
|
||
SlowpokePicBack: INCBIN "pic/monback/slowpokeb.pic"
|
||
KadabraPicFront: INCBIN "pic/ymon/kadabra.pic"
|
||
KadabraPicBack: INCBIN "pic/monback/kadabrab.pic"
|
||
GravelerPicFront: INCBIN "pic/ymon/graveler.pic"
|
||
GravelerPicBack: INCBIN "pic/monback/gravelerb.pic"
|
||
ChanseyPicFront: INCBIN "pic/ymon/chansey.pic"
|
||
ChanseyPicBack: INCBIN "pic/monback/chanseyb.pic"
|
||
MachokePicFront: INCBIN "pic/ymon/machoke.pic"
|
||
MachokePicBack: INCBIN "pic/monback/machokeb.pic"
|
||
MrMimePicFront: INCBIN "pic/ymon/mr.mime.pic"
|
||
MrMimePicBack: INCBIN "pic/monback/mr.mimeb.pic"
|
||
HitmonleePicFront: INCBIN "pic/ymon/hitmonlee.pic"
|
||
HitmonleePicBack: INCBIN "pic/monback/hitmonleeb.pic"
|
||
HitmonchanPicFront: INCBIN "pic/ymon/hitmonchan.pic"
|
||
HitmonchanPicBack: INCBIN "pic/monback/hitmonchanb.pic"
|
||
ArbokPicFront: INCBIN "pic/ymon/arbok.pic"
|
||
ArbokPicBack: INCBIN "pic/monback/arbokb.pic"
|
||
ParasectPicFront: INCBIN "pic/ymon/parasect.pic"
|
||
ParasectPicBack: INCBIN "pic/monback/parasectb.pic"
|
||
PsyduckPicFront: INCBIN "pic/ymon/psyduck.pic"
|
||
PsyduckPicBack: INCBIN "pic/monback/psyduckb.pic"
|
||
DrowzeePicFront: INCBIN "pic/ymon/drowzee.pic"
|
||
DrowzeePicBack: INCBIN "pic/monback/drowzeeb.pic"
|
||
GolemPicFront: INCBIN "pic/ymon/golem.pic"
|
||
GolemPicBack: INCBIN "pic/monback/golemb.pic"
|
||
MagmarPicFront: INCBIN "pic/ymon/magmar.pic"
|
||
MagmarPicBack: INCBIN "pic/monback/magmarb.pic"
|
||
ElectabuzzPicFront: INCBIN "pic/ymon/electabuzz.pic"
|
||
ElectabuzzPicBack: INCBIN "pic/monback/electabuzzb.pic"
|
||
MagnetonPicFront: INCBIN "pic/ymon/magneton.pic"
|
||
MagnetonPicBack: INCBIN "pic/monback/magnetonb.pic"
|
||
KoffingPicFront: INCBIN "pic/ymon/koffing.pic"
|
||
KoffingPicBack: INCBIN "pic/monback/koffingb.pic"
|
||
MankeyPicFront: INCBIN "pic/ymon/mankey.pic"
|
||
MankeyPicBack: INCBIN "pic/monback/mankeyb.pic"
|
||
SeelPicFront: INCBIN "pic/ymon/seel.pic"
|
||
SeelPicBack: INCBIN "pic/monback/seelb.pic"
|
||
DiglettPicFront: INCBIN "pic/ymon/diglett.pic"
|
||
DiglettPicBack: INCBIN "pic/monback/diglettb.pic"
|
||
TaurosPicFront: INCBIN "pic/ymon/tauros.pic"
|
||
TaurosPicBack: INCBIN "pic/monback/taurosb.pic"
|
||
FarfetchdPicFront: INCBIN "pic/ymon/farfetchd.pic"
|
||
FarfetchdPicBack: INCBIN "pic/monback/farfetchdb.pic"
|
||
VenonatPicFront: INCBIN "pic/ymon/venonat.pic"
|
||
VenonatPicBack: INCBIN "pic/monback/venonatb.pic"
|
||
DragonitePicFront: INCBIN "pic/ymon/dragonite.pic"
|
||
DragonitePicBack: INCBIN "pic/monback/dragoniteb.pic"
|
||
DoduoPicFront: INCBIN "pic/ymon/doduo.pic"
|
||
DoduoPicBack: INCBIN "pic/monback/doduob.pic"
|
||
PoliwagPicFront: INCBIN "pic/ymon/poliwag.pic"
|
||
PoliwagPicBack: INCBIN "pic/monback/poliwagb.pic"
|
||
JynxPicFront: INCBIN "pic/ymon/jynx.pic"
|
||
JynxPicBack: INCBIN "pic/monback/jynxb.pic"
|
||
MoltresPicFront: INCBIN "pic/ymon/moltres.pic"
|
||
MoltresPicBack: INCBIN "pic/monback/moltresb.pic"
|
||
|
||
dr $2bd4c,$2c000
|
||
|
||
|
||
SECTION "Pics 3", ROMX, BANK[PICS_3]
|
||
|
||
ArticunoPicFront: INCBIN "pic/ymon/articuno.pic"
|
||
ArticunoPicBack: INCBIN "pic/monback/articunob.pic"
|
||
ZapdosPicFront: INCBIN "pic/ymon/zapdos.pic"
|
||
ZapdosPicBack: INCBIN "pic/monback/zapdosb.pic"
|
||
DittoPicFront: INCBIN "pic/ymon/ditto.pic"
|
||
DittoPicBack: INCBIN "pic/monback/dittob.pic"
|
||
MeowthPicFront: INCBIN "pic/ymon/meowth.pic"
|
||
MeowthPicBack: INCBIN "pic/monback/meowthb.pic"
|
||
KrabbyPicFront: INCBIN "pic/ymon/krabby.pic"
|
||
KrabbyPicBack: INCBIN "pic/monback/krabbyb.pic"
|
||
VulpixPicFront: INCBIN "pic/ymon/vulpix.pic"
|
||
VulpixPicBack: INCBIN "pic/monback/vulpixb.pic"
|
||
NinetalesPicFront: INCBIN "pic/ymon/ninetales.pic"
|
||
NinetalesPicBack: INCBIN "pic/monback/ninetalesb.pic"
|
||
PikachuPicFront: INCBIN "pic/ymon/pikachu.pic"
|
||
PikachuPicBack: INCBIN "pic/monback/pikachub.pic"
|
||
RaichuPicFront: INCBIN "pic/ymon/raichu.pic"
|
||
RaichuPicBack: INCBIN "pic/monback/raichub.pic"
|
||
DratiniPicFront: INCBIN "pic/ymon/dratini.pic"
|
||
DratiniPicBack: INCBIN "pic/monback/dratinib.pic"
|
||
DragonairPicFront: INCBIN "pic/ymon/dragonair.pic"
|
||
DragonairPicBack: INCBIN "pic/monback/dragonairb.pic"
|
||
KabutoPicFront: INCBIN "pic/ymon/kabuto.pic"
|
||
KabutoPicBack: INCBIN "pic/monback/kabutob.pic"
|
||
KabutopsPicFront: INCBIN "pic/ymon/kabutops.pic"
|
||
KabutopsPicBack: INCBIN "pic/monback/kabutopsb.pic"
|
||
HorseaPicFront: INCBIN "pic/ymon/horsea.pic"
|
||
HorseaPicBack: INCBIN "pic/monback/horseab.pic"
|
||
SeadraPicFront: INCBIN "pic/ymon/seadra.pic"
|
||
SeadraPicBack: INCBIN "pic/monback/seadrab.pic"
|
||
SandshrewPicFront: INCBIN "pic/ymon/sandshrew.pic"
|
||
SandshrewPicBack: INCBIN "pic/monback/sandshrewb.pic"
|
||
SandslashPicFront: INCBIN "pic/ymon/sandslash.pic"
|
||
SandslashPicBack: INCBIN "pic/monback/sandslashb.pic"
|
||
OmanytePicFront: INCBIN "pic/ymon/omanyte.pic"
|
||
OmanytePicBack: INCBIN "pic/monback/omanyteb.pic"
|
||
OmastarPicFront: INCBIN "pic/ymon/omastar.pic"
|
||
OmastarPicBack: INCBIN "pic/monback/omastarb.pic"
|
||
JigglypuffPicFront: INCBIN "pic/ymon/jigglypuff.pic"
|
||
JigglypuffPicBack: INCBIN "pic/monback/jigglypuffb.pic"
|
||
WigglytuffPicFront: INCBIN "pic/ymon/wigglytuff.pic"
|
||
WigglytuffPicBack: INCBIN "pic/monback/wigglytuffb.pic"
|
||
EeveePicFront: INCBIN "pic/ymon/eevee.pic"
|
||
EeveePicBack: INCBIN "pic/monback/eeveeb.pic"
|
||
FlareonPicFront: INCBIN "pic/ymon/flareon.pic"
|
||
FlareonPicBack: INCBIN "pic/monback/flareonb.pic"
|
||
JolteonPicFront: INCBIN "pic/ymon/jolteon.pic"
|
||
JolteonPicBack: INCBIN "pic/monback/jolteonb.pic"
|
||
VaporeonPicFront: INCBIN "pic/ymon/vaporeon.pic"
|
||
VaporeonPicBack: INCBIN "pic/monback/vaporeonb.pic"
|
||
MachopPicFront: INCBIN "pic/ymon/machop.pic"
|
||
MachopPicBack: INCBIN "pic/monback/machopb.pic"
|
||
ZubatPicFront: INCBIN "pic/ymon/zubat.pic"
|
||
ZubatPicBack: INCBIN "pic/monback/zubatb.pic"
|
||
EkansPicFront: INCBIN "pic/ymon/ekans.pic"
|
||
EkansPicBack: INCBIN "pic/monback/ekansb.pic"
|
||
ParasPicFront: INCBIN "pic/ymon/paras.pic"
|
||
ParasPicBack: INCBIN "pic/monback/parasb.pic"
|
||
PoliwhirlPicFront: INCBIN "pic/ymon/poliwhirl.pic"
|
||
PoliwhirlPicBack: INCBIN "pic/monback/poliwhirlb.pic"
|
||
PoliwrathPicFront: INCBIN "pic/ymon/poliwrath.pic"
|
||
PoliwrathPicBack: INCBIN "pic/monback/poliwrathb.pic"
|
||
WeedlePicFront: INCBIN "pic/ymon/weedle.pic"
|
||
WeedlePicBack: INCBIN "pic/monback/weedleb.pic"
|
||
KakunaPicFront: INCBIN "pic/ymon/kakuna.pic"
|
||
KakunaPicBack: INCBIN "pic/monback/kakunab.pic"
|
||
BeedrillPicFront: INCBIN "pic/ymon/beedrill.pic"
|
||
BeedrillPicBack: INCBIN "pic/monback/beedrillb.pic"
|
||
|
||
FossilKabutopsPic: INCBIN "pic/ymon/fossilkabutops.pic"
|
||
|
||
dr $2fd25,$2fd42
|
||
CheckIfMoveIsKnown: ; 2fd42 (b:7d42)
|
||
dr $2fd42,$2fd6a
|
||
Func_2fd6a: ; 2fd6a (b:7d6a)
|
||
dr $2fd6a,$30000
|
||
|
||
|
||
SECTION "Pics 4", ROMX, BANK[PICS_4]
|
||
|
||
DodrioPicFront: INCBIN "pic/ymon/dodrio.pic"
|
||
DodrioPicBack: INCBIN "pic/monback/dodriob.pic"
|
||
PrimeapePicFront: INCBIN "pic/ymon/primeape.pic"
|
||
PrimeapePicBack: INCBIN "pic/monback/primeapeb.pic"
|
||
DugtrioPicFront: INCBIN "pic/ymon/dugtrio.pic"
|
||
DugtrioPicBack: INCBIN "pic/monback/dugtriob.pic"
|
||
VenomothPicFront: INCBIN "pic/ymon/venomoth.pic"
|
||
VenomothPicBack: INCBIN "pic/monback/venomothb.pic"
|
||
DewgongPicFront: INCBIN "pic/ymon/dewgong.pic"
|
||
DewgongPicBack: INCBIN "pic/monback/dewgongb.pic"
|
||
CaterpiePicFront: INCBIN "pic/ymon/caterpie.pic"
|
||
CaterpiePicBack: INCBIN "pic/monback/caterpieb.pic"
|
||
MetapodPicFront: INCBIN "pic/ymon/metapod.pic"
|
||
MetapodPicBack: INCBIN "pic/monback/metapodb.pic"
|
||
ButterfreePicFront: INCBIN "pic/ymon/butterfree.pic"
|
||
ButterfreePicBack: INCBIN "pic/monback/butterfreeb.pic"
|
||
MachampPicFront: INCBIN "pic/ymon/machamp.pic"
|
||
MachampPicBack: INCBIN "pic/monback/machampb.pic"
|
||
GolduckPicFront: INCBIN "pic/ymon/golduck.pic"
|
||
GolduckPicBack: INCBIN "pic/monback/golduckb.pic"
|
||
HypnoPicFront: INCBIN "pic/ymon/hypno.pic"
|
||
HypnoPicBack: INCBIN "pic/monback/hypnob.pic"
|
||
GolbatPicFront: INCBIN "pic/ymon/golbat.pic"
|
||
GolbatPicBack: INCBIN "pic/monback/golbatb.pic"
|
||
MewtwoPicFront: INCBIN "pic/ymon/mewtwo.pic"
|
||
MewtwoPicBack: INCBIN "pic/monback/mewtwob.pic"
|
||
SnorlaxPicFront: INCBIN "pic/ymon/snorlax.pic"
|
||
SnorlaxPicBack: INCBIN "pic/monback/snorlaxb.pic"
|
||
MagikarpPicFront: INCBIN "pic/ymon/magikarp.pic"
|
||
MagikarpPicBack: INCBIN "pic/monback/magikarpb.pic"
|
||
MukPicFront: INCBIN "pic/ymon/muk.pic"
|
||
MukPicBack: INCBIN "pic/monback/mukb.pic"
|
||
KinglerPicFront: INCBIN "pic/ymon/kingler.pic"
|
||
KinglerPicBack: INCBIN "pic/monback/kinglerb.pic"
|
||
CloysterPicFront: INCBIN "pic/ymon/cloyster.pic"
|
||
CloysterPicBack: INCBIN "pic/monback/cloysterb.pic"
|
||
ElectrodePicFront: INCBIN "pic/ymon/electrode.pic"
|
||
ElectrodePicBack: INCBIN "pic/monback/electrodeb.pic"
|
||
ClefablePicFront: INCBIN "pic/ymon/clefable.pic"
|
||
ClefablePicBack: INCBIN "pic/monback/clefableb.pic"
|
||
WeezingPicFront: INCBIN "pic/ymon/weezing.pic"
|
||
WeezingPicBack: INCBIN "pic/monback/weezingb.pic"
|
||
PersianPicFront: INCBIN "pic/ymon/persian.pic"
|
||
PersianPicBack: INCBIN "pic/monback/persianb.pic"
|
||
MarowakPicFront: INCBIN "pic/ymon/marowak.pic"
|
||
MarowakPicBack: INCBIN "pic/monback/marowakb.pic"
|
||
HaunterPicFront: INCBIN "pic/ymon/haunter.pic"
|
||
HaunterPicBack: INCBIN "pic/monback/haunterb.pic"
|
||
AbraPicFront: INCBIN "pic/ymon/abra.pic"
|
||
AbraPicBack: INCBIN "pic/monback/abrab.pic"
|
||
AlakazamPicFront: INCBIN "pic/ymon/alakazam.pic"
|
||
AlakazamPicBack: INCBIN "pic/monback/alakazamb.pic"
|
||
PidgeottoPicFront: INCBIN "pic/ymon/pidgeotto.pic"
|
||
PidgeottoPicBack: INCBIN "pic/monback/pidgeottob.pic"
|
||
PidgeotPicFront: INCBIN "pic/ymon/pidgeot.pic"
|
||
PidgeotPicBack: INCBIN "pic/monback/pidgeotb.pic"
|
||
StarmiePicFront: INCBIN "pic/ymon/starmie.pic"
|
||
StarmiePicBack: INCBIN "pic/monback/starmieb.pic"
|
||
|
||
|
||
SECTION "Pics 5", ROMX, BANK[PICS_5]
|
||
|
||
BulbasaurPicFront: INCBIN "pic/ymon/bulbasaur.pic"
|
||
BulbasaurPicBack: INCBIN "pic/monback/bulbasaurb.pic"
|
||
VenusaurPicFront: INCBIN "pic/ymon/venusaur.pic"
|
||
VenusaurPicBack: INCBIN "pic/monback/venusaurb.pic"
|
||
TentacruelPicFront: INCBIN "pic/ymon/tentacruel.pic"
|
||
TentacruelPicBack: INCBIN "pic/monback/tentacruelb.pic"
|
||
GoldeenPicFront: INCBIN "pic/ymon/goldeen.pic"
|
||
GoldeenPicBack: INCBIN "pic/monback/goldeenb.pic"
|
||
SeakingPicFront: INCBIN "pic/ymon/seaking.pic"
|
||
SeakingPicBack: INCBIN "pic/monback/seakingb.pic"
|
||
PonytaPicFront: INCBIN "pic/ymon/ponyta.pic"
|
||
RapidashPicFront: INCBIN "pic/ymon/rapidash.pic"
|
||
PonytaPicBack: INCBIN "pic/monback/ponytab.pic"
|
||
RapidashPicBack: INCBIN "pic/monback/rapidashb.pic"
|
||
RattataPicFront: INCBIN "pic/ymon/rattata.pic"
|
||
RattataPicBack: INCBIN "pic/monback/rattatab.pic"
|
||
RaticatePicFront: INCBIN "pic/ymon/raticate.pic"
|
||
RaticatePicBack: INCBIN "pic/monback/raticateb.pic"
|
||
NidorinoPicFront: INCBIN "pic/ymon/nidorino.pic"
|
||
NidorinoPicBack: INCBIN "pic/monback/nidorinob.pic"
|
||
NidorinaPicFront: INCBIN "pic/ymon/nidorina.pic"
|
||
NidorinaPicBack: INCBIN "pic/monback/nidorinab.pic"
|
||
GeodudePicFront: INCBIN "pic/ymon/geodude.pic"
|
||
GeodudePicBack: INCBIN "pic/monback/geodudeb.pic"
|
||
PorygonPicFront: INCBIN "pic/ymon/porygon.pic"
|
||
PorygonPicBack: INCBIN "pic/monback/porygonb.pic"
|
||
AerodactylPicFront: INCBIN "pic/ymon/aerodactyl.pic"
|
||
AerodactylPicBack: INCBIN "pic/monback/aerodactylb.pic"
|
||
MagnemitePicFront: INCBIN "pic/ymon/magnemite.pic"
|
||
MagnemitePicBack: INCBIN "pic/monback/magnemiteb.pic"
|
||
CharmanderPicFront: INCBIN "pic/ymon/charmander.pic"
|
||
CharmanderPicBack: INCBIN "pic/monback/charmanderb.pic"
|
||
SquirtlePicFront: INCBIN "pic/ymon/squirtle.pic"
|
||
SquirtlePicBack: INCBIN "pic/monback/squirtleb.pic"
|
||
CharmeleonPicFront: INCBIN "pic/ymon/charmeleon.pic"
|
||
CharmeleonPicBack: INCBIN "pic/monback/charmeleonb.pic"
|
||
WartortlePicFront: INCBIN "pic/ymon/wartortle.pic"
|
||
WartortlePicBack: INCBIN "pic/monback/wartortleb.pic"
|
||
CharizardPicFront: INCBIN "pic/ymon/charizard.pic"
|
||
CharizardPicBack: INCBIN "pic/monback/charizardb.pic"
|
||
FossilAerodactylPic: INCBIN "pic/ymon/fossilaerodactyl.pic"
|
||
GhostPic: INCBIN "pic/other/ghost.pic"
|
||
OddishPicFront: INCBIN "pic/ymon/oddish.pic"
|
||
OddishPicBack: INCBIN "pic/monback/oddishb.pic"
|
||
GloomPicFront: INCBIN "pic/ymon/gloom.pic"
|
||
GloomPicBack: INCBIN "pic/monback/gloomb.pic"
|
||
VileplumePicFront: INCBIN "pic/ymon/vileplume.pic"
|
||
VileplumePicBack: INCBIN "pic/monback/vileplumeb.pic"
|
||
BellsproutPicFront: INCBIN "pic/ymon/bellsprout.pic"
|
||
BellsproutPicBack: INCBIN "pic/monback/bellsproutb.pic"
|
||
WeepinbellPicFront: INCBIN "pic/ymon/weepinbell.pic"
|
||
WeepinbellPicBack: INCBIN "pic/monback/weepinbellb.pic"
|
||
VictreebelPicFront: INCBIN "pic/ymon/victreebel.pic"
|
||
VictreebelPicBack: INCBIN "pic/monback/victreebelb.pic"
|
||
|
||
dr $3749e,$38000
|
||
|
||
SECTION "bank0E",ROMX,BANK[$0E]
|
||
|
||
INCLUDE "data/moves.asm"
|
||
BaseStats: INCLUDE "data/base_stats.asm"
|
||
INCLUDE "data/cries.asm"
|
||
dr $3969c,$39893
|
||
TrainerPicAndMoneyPointers: ; 39893 (e:5893)
|
||
dr $39893,$3997e
|
||
TrainerNames: ; 3997e (e:597e)
|
||
dr $3997e,$39b06
|
||
FormatMovesString: ; 39b06 (e:5b06)
|
||
dr $39b06,$39b54
|
||
InitList: ; 39b54 (e:5b54)
|
||
dr $39b54,$39bb6
|
||
ReadTrainer: ; 39bb6 (e:5bb6)
|
||
dr $39bb6,$3a8df
|
||
DrawAllPokeballs: ; 3a8df (e:68df)
|
||
dr $3a8df,$3a9e9
|
||
SetupPlayerAndEnemyPokeballs: ; 3a9e9 (e:69e9)
|
||
dr $3a9e9,$3aa28
|
||
|
||
PokeballTileGraphics:: ; 3aa28 (e:6a28)
|
||
; INCBIN "gfx/pokeball.2bpp"
|
||
;PokeballTileGraphicsEnd:
|
||
dr $3aa28,$3aa68
|
||
|
||
TradingAnimationGraphics:
|
||
INCBIN "gfx/game_boy.norepeat.2bpp"
|
||
INCBIN "gfx/link_cable.2bpp"
|
||
|
||
TradingAnimationGraphics2:
|
||
; Pokeball traveling through the link cable.
|
||
INCBIN "gfx/trade2.2bpp"
|
||
|
||
TryEvolvingMon:
|
||
EvolveTradeMon: ; 3adb8 (e:6db8)
|
||
dr $3adb8,$3b10f
|
||
Func_3b10f: ; 3b01f (e:710f)
|
||
dr $3b10f,$3b1e5
|
||
Pointer_3b1e5: ; 3b1e5 (e:71e5)
|
||
dr $3b1e5,$3c000
|
||
|
||
|
||
SECTION "bank0F",ROMX,BANK[$0F]
|
||
|
||
dr $3c000,$3c04c
|
||
SlidePlayerAndEnemySilhouettesOnScreen: ; 3c04c (f:404c)
|
||
dr $3c04c,$3c127
|
||
StartBattle: ; 3c127 (f:4127)
|
||
dr $3c127,$3cae8
|
||
AnyPartyAlive: ; 3cae8 (f:4ae8)
|
||
dr $3cae8,$3ce1f
|
||
DrawHUDsAndHPBars: ; 3ce1f (f:4e1f)
|
||
dr $3ce1f,$3ceb1
|
||
DrawEnemyHUDAndHPBar: ; 3ceb1 (f:4eb1)
|
||
dr $3ceb1,$3d320
|
||
MoveSelectionMenu: ; 3d320 (f:5320)
|
||
dr $3d320,$3d9ac
|
||
IsGhostBattle: ; 3d9ac (f:59ac)
|
||
dr $3d9ac,$3ddc3
|
||
PrintDoesntAffectText: ; 3ddc3 (f:5dc3)
|
||
dr $3ddc3,$3e5bb
|
||
|
||
AIGetTypeEffectiveness: ; 3e5bb (f:65bb)
|
||
ld a,[W_ENEMYMOVETYPE]
|
||
ld d,a ; d = type of enemy move
|
||
ld hl,wBattleMonType
|
||
ld b,[hl] ; b = type 1 of player's pokemon
|
||
inc hl
|
||
ld c,[hl] ; c = type 2 of player's pokemon
|
||
ld a,$10
|
||
ld [wd11e],a ; initialize [wd11e] to neutral effectiveness
|
||
ld hl,TypeEffects
|
||
.loop
|
||
ld a,[hli]
|
||
cp a,$ff
|
||
ret z
|
||
cp d ; match the type of the move
|
||
jr nz,.nextTypePair1
|
||
ld a,[hli]
|
||
cp b ; match with type 1 of pokemon
|
||
jr z,.done
|
||
cp c ; or match with type 2 of pokemon
|
||
jr z,.done
|
||
jr .nextTypePair2
|
||
.nextTypePair1
|
||
inc hl
|
||
.nextTypePair2
|
||
inc hl
|
||
jr .loop
|
||
|
||
.done
|
||
ld a, [W_TRAINERCLASS]
|
||
cp LORELEI
|
||
jr nz, .ok
|
||
ld a, [wEnemyMonSpecies]
|
||
cp DEWGONG
|
||
jr nz, .ok
|
||
call BattleRandom
|
||
cp $66 ; 40 percent
|
||
ret c
|
||
.ok
|
||
|
||
ld a,[hl]
|
||
ld [wd11e],a ; store damage multiplier
|
||
ret
|
||
|
||
INCLUDE "data/type_effects.asm"
|
||
|
||
MoveHitTest: ; 3e6f1 (f:66f1)
|
||
dr $3e6f1,$3ec87
|
||
LoadEnemyMonData: ; 3ec87 (f:6c87)
|
||
dr $3ec87,$3edb8
|
||
DoBattleTransitionAndInitBattleVariables: ; 3edb8 (f:6db8)
|
||
dr $3edb8,$3eeb3
|
||
QuarterSpeedDueToParalysis: ; 3eeb3 (f:6eb3)
|
||
dr $3eeb3,$3efe7
|
||
LoadHudTilePatterns: ; 3efe7 (f:6fe7)
|
||
dr $3efe7,$3f027
|
||
BattleRandom: ; 3f027 (f:7027)
|
||
dr $3f027,$3f3de
|
||
StatModifierUpEffect: ; 3f3de (f:73de)
|
||
dr $3f3de,$3fb2e
|
||
PrintButItFailedText_: ; 3fb2e (f:7b2e)
|
||
dr $3fb2e,$3fb39
|
||
PrintDidntAffectText: ; 3fb39 (f:7b39)
|
||
dr $3fb39,$3fb49
|
||
PrintMayNotAttackText: ; 3fb49 (f:7b49)
|
||
dr $3fb49,$3fb83
|
||
PlayCurrentMoveAnimation: ; 3fb83 (f:7b83)
|
||
dr $3fb83,$40000
|
||
|
||
SECTION "bank10",ROMX,BANK[$10]
|
||
|
||
dr $40000,$4050b
|
||
Pointer_4050b: ; 4050b (10:450b)
|
||
dr $4050b,$41c70
|
||
DisplayOptionMenu_: ; 41c70 (10:57c0)
|
||
dr $41c70,$44000
|
||
|
||
|
||
SECTION "bank11",ROMX,BANK[$11]
|
||
|
||
dr $44000,$45077
|
||
LoadSpinnerArrowTiles: ; 45077 (11:5077)
|
||
dr $45077,$48000
|
||
|
||
|
||
SECTION "bank12",ROMX,BANK[$12]
|
||
|
||
dr $48000,$4c000
|
||
|
||
|
||
SECTION "bank13",ROMX,BANK[$13]
|
||
|
||
TrainerPics:
|
||
YoungsterPic: INCBIN "pic/trainer/youngster.pic"
|
||
BugCatcherPic: INCBIN "pic/trainer/bugcatcher.pic"
|
||
LassPic: INCBIN "pic/trainer/lass.pic"
|
||
SailorPic: INCBIN "pic/trainer/sailor.pic"
|
||
JrTrainerMPic: INCBIN "pic/trainer/jr.trainerm.pic"
|
||
JrTrainerFPic: INCBIN "pic/trainer/jr.trainerf.pic"
|
||
PokemaniacPic: INCBIN "pic/trainer/pokemaniac.pic"
|
||
SuperNerdPic: INCBIN "pic/trainer/supernerd.pic"
|
||
HikerPic: INCBIN "pic/trainer/hiker.pic"
|
||
BikerPic: INCBIN "pic/trainer/biker.pic"
|
||
BurglarPic: INCBIN "pic/trainer/burglar.pic"
|
||
EngineerPic: INCBIN "pic/trainer/engineer.pic"
|
||
FisherPic: INCBIN "pic/trainer/fisher.pic"
|
||
SwimmerPic: INCBIN "pic/trainer/swimmer.pic"
|
||
CueBallPic: INCBIN "pic/trainer/cueball.pic"
|
||
GamblerPic: INCBIN "pic/trainer/gambler.pic"
|
||
BeautyPic: INCBIN "pic/trainer/beauty.pic"
|
||
PsychicPic: INCBIN "pic/trainer/psychic.pic"
|
||
RockerPic: INCBIN "pic/trainer/rocker.pic"
|
||
JugglerPic: INCBIN "pic/trainer/juggler.pic"
|
||
TamerPic: INCBIN "pic/trainer/tamer.pic"
|
||
BirdKeeperPic: INCBIN "pic/trainer/birdkeeper.pic"
|
||
BlackbeltPic: INCBIN "pic/trainer/blackbelt.pic"
|
||
Rival1Pic: INCBIN "pic/ytrainer/rival1.pic"
|
||
ProfOakPic: INCBIN "pic/trainer/prof.oak.pic"
|
||
ChiefPic:
|
||
ScientistPic: INCBIN "pic/trainer/scientist.pic"
|
||
GiovanniPic: INCBIN "pic/trainer/giovanni.pic"
|
||
RocketPic: INCBIN "pic/trainer/rocket.pic"
|
||
CooltrainerMPic: INCBIN "pic/trainer/cooltrainerm.pic"
|
||
CooltrainerFPic: INCBIN "pic/trainer/cooltrainerf.pic"
|
||
BrunoPic: INCBIN "pic/trainer/bruno.pic"
|
||
BrockPic: INCBIN "pic/ytrainer/brock.pic"
|
||
MistyPic: INCBIN "pic/ytrainer/misty.pic"
|
||
LtSurgePic: INCBIN "pic/trainer/lt.surge.pic"
|
||
ErikaPic: INCBIN "pic/ytrainer/erika.pic"
|
||
KogaPic: INCBIN "pic/trainer/koga.pic"
|
||
BlainePic: INCBIN "pic/trainer/blaine.pic"
|
||
SabrinaPic: INCBIN "pic/trainer/sabrina.pic"
|
||
GentlemanPic: INCBIN "pic/trainer/gentleman.pic"
|
||
Rival2Pic: INCBIN "pic/ytrainer/rival2.pic"
|
||
Rival3Pic: INCBIN "pic/ytrainer/rival3.pic"
|
||
LoreleiPic: INCBIN "pic/trainer/lorelei.pic"
|
||
ChannelerPic: INCBIN "pic/trainer/channeler.pic"
|
||
AgathaPic: INCBIN "pic/trainer/agatha.pic"
|
||
LancePic: INCBIN "pic/trainer/lance.pic"
|
||
JessieJamesPic: INCBIN "pic/ytrainer/jessiejames.pic"
|
||
|
||
dr $4fe79,$50000
|
||
|
||
|
||
SECTION "bank14",ROMX,BANK[$14]
|
||
|
||
dr $50000,$525d8
|
||
PrintCardKeyText: ; 525d8 (14:65d8)
|
||
dr $525d8,$5267d
|
||
CeladonPrizeMenu: ; 5267d (14:667d)
|
||
dr $5267d,$54000
|
||
|
||
SECTION "bank15",ROMX,BANK[$15]
|
||
|
||
dr $54000,$56745
|
||
_GetSpritePosition1: ; 56745 (15:6745)
|
||
dr $56745,$56765
|
||
_GetSpritePosition2: ; 56765 (15:6765)
|
||
dr $56765,$56789
|
||
_SetSpritePosition1: ; 56789 (15:6789)
|
||
dr $56789,$567a9
|
||
_SetSpritePosition2: ; 567a9 (15:67a9)
|
||
dr $567a9,$567cd
|
||
TrainerWalkUpToPlayer: ; 567cd (15:67cd)
|
||
dr $567cd,$58000
|
||
SECTION "bank16",ROMX,BANK[$16]
|
||
|
||
dr $58000,$58d99
|
||
CalcLevelFromExperience: ; 58d99 (16:4d99)
|
||
dr $58d99,$58dc0
|
||
CalcExperience: ; 58dc0 (16:4dc0)
|
||
dr $58dc0,$58e8b
|
||
PrintStatusAilment: ; 58e8b (16:4e8b)
|
||
dr $58e8b,$5c000
|
||
|
||
|
||
SECTION "bank17",ROMX,BANK[$17]
|
||
|
||
dr $5c000,$60000
|
||
|
||
|
||
SECTION "bank18",ROMX,BANK[$18]
|
||
|
||
dr $60000,$64000
|
||
|
||
|
||
SECTION "bank19",ROMX,BANK[$19]
|
||
Overworld_GFX:
|
||
dr $64000,$68000
|
||
|
||
|
||
SECTION "bank1A",ROMX,BANK[$1A]
|
||
|
||
dr $68000,$6c000
|
||
|
||
|
||
SECTION "bank1B",ROMX,BANK[$1B]
|
||
Cemetery_GFX: INCBIN "gfx/tilesets/cemetery.t4.2bpp"
|
||
Cemetery_Block: INCBIN "gfx/blocksets/cemetery.bst"
|
||
Cavern_GFX: INCBIN "gfx/tilesets/cavern.t14.2bpp"
|
||
Cavern_Block: INCBIN "gfx/blocksets/cavern.bst"
|
||
Lobby_GFX: INCBIN "gfx/tilesets/lobby.t2.2bpp"
|
||
Lobby_Block: INCBIN "gfx/blocksets/lobby.bst"
|
||
Ship_GFX: INCBIN "gfx/tilesets/ship.t6.2bpp"
|
||
Ship_Block: INCBIN "gfx/blocksets/ship.bst"
|
||
Lab_GFX: INCBIN "gfx/tilesets/lab.t4.2bpp"
|
||
Lab_Block: INCBIN "gfx/blocksets/lab.bst"
|
||
Club_GFX: INCBIN "gfx/tilesets/club.t5.2bpp"
|
||
Club_Block: INCBIN "gfx/blocksets/club.bst"
|
||
Underground_GFX: INCBIN "gfx/tilesets/underground.t7.2bpp"
|
||
Underground_Block: INCBIN "gfx/blocksets/underground.bst"
|
||
|
||
|
||
SECTION "bank1C",ROMX,BANK[$1C]
|
||
|
||
INCLUDE "engine/gamefreak.asm"
|
||
INCLUDE "engine/hall_of_fame.asm"
|
||
INCLUDE "engine/overworld/healing_machine.asm"
|
||
INCLUDE "engine/overworld/player_animations.asm"
|
||
INCLUDE "engine/battle/ghost_marowak_anim.asm"
|
||
INCLUDE "engine/battle/battle_transitions.asm"
|
||
INCLUDE "engine/town_map.asm"
|
||
INCLUDE "engine/mon_party_sprites.asm"
|
||
INCLUDE "engine/in_game_trades.asm"
|
||
INCLUDE "engine/palettes.asm"
|
||
INCLUDE "engine/save.asm"
|
||
|
||
|
||
SECTION "bank1D",ROMX,BANK[$1D]
|
||
|
||
dr $74000,$7405c
|
||
HiddenItemNear: ; 7405c (1d:405c)
|
||
dr $7405c,$74726
|
||
VendingMachineMenu: ; 74726 (1d:4726)
|
||
dr $74726,$78000
|
||
|
||
SECTION "bank1E",ROMX,BANK[$1E]
|
||
|
||
dr $78000,$78757
|
||
AnimationTileset2: ; 78757 (1e:4757)
|
||
dr $78757,$79816
|
||
HideSubstituteShowMonAnim: ; 79816 (1e:5816)
|
||
dr $79816,$798b2
|
||
ReshowSubstituteAnim: ; 798b2 (1e:58b2)
|
||
dr $798b2,$798c8
|
||
AnimationTransformMon: ; 798c8 (1e:58c8)
|
||
dr $798c8,$798d4
|
||
ChangeMonPic: ; 798d4 (1e:58d4)
|
||
dr $798d4,$7a037
|
||
AnimCut: ; 7a037 (1e:6037)
|
||
dr $7a037,$7a0fb
|
||
AnimateBoulderDust: ; 7a0fb (1e:60fb)
|
||
dr $7a0fb,$7a19a
|
||
|
||
RedFishingTilesFront: INCBIN "gfx/red_fishing_tile_front.2bpp"
|
||
RedFishingTilesBack: INCBIN "gfx/red_fishing_tile_back.2bpp"
|
||
RedFishingTilesSide: INCBIN "gfx/red_fishing_tile_side.2bpp"
|
||
RedFishingRodTiles: INCBIN "gfx/red_fishingrod_tiles.2bpp"
|
||
|
||
dr $7a22a,$7c000
|
||
|
||
SECTION "bank20",ROMX,BANK[$20]
|
||
|
||
dr $80000,$80f14
|
||
|
||
SurfingPikachu1Graphics: INCBIN "gfx/surfing_pikachu_1.t4.2bpp"
|
||
Func_82bd4: ; 82bd4 (20:6bd4)
|
||
dr $82bd4,$84000
|
||
|
||
|
||
SECTION "bank21",ROMX,BANK[$21]
|
||
PikachuCry1: ; 84000 (21:4000)
|
||
dw (PikachuCry1_End - PikachuCry1) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_1.pcm"
|
||
PikachuCry1_End:
|
||
|
||
db $77 ; unused
|
||
; Game Freak might have made a slight error, because all of
|
||
; the pcm data has one trailing byte that is never processed.
|
||
|
||
PikachuCry2: ; 8491a (21:491a)
|
||
dw (PikachuCry2_End - PikachuCry2) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_2.pcm"
|
||
PikachuCry2_End:
|
||
|
||
db $77 ; unused
|
||
|
||
PikachuCry3: ; 84fdc (21:4fdc)
|
||
dw (PikachuCry3_End - PikachuCry3) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_3.pcm"
|
||
PikachuCry3_End:
|
||
|
||
db $03 ; unused
|
||
|
||
PikachuCry4: ; 859ee (21:59ee)
|
||
dw (PikachuCry4_End - PikachuCry4) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_4.pcm"
|
||
PikachuCry4_End:
|
||
|
||
db $e0 ; unused
|
||
|
||
|
||
SECTION "bank22",ROMX,BANK[$22]
|
||
PikachuCry5: ; 88000 (22:4000)
|
||
dw (PikachuCry5_End - PikachuCry5) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_5.pcm"
|
||
PikachuCry5_End:
|
||
|
||
db $77 ; unused
|
||
|
||
PikachuCry6: ; 89042 (22:5042)
|
||
dw (PikachuCry6_End - PikachuCry6) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_6.pcm"
|
||
PikachuCry6_End:
|
||
|
||
db $77 ; unused
|
||
|
||
PikachuCry7: ; 8a254 (22:6254)
|
||
dw (PikachuCry7_End - PikachuCry7) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_7.pcm"
|
||
PikachuCry7_End:
|
||
|
||
db $ff ; unused
|
||
|
||
|
||
SECTION "bank23",ROMX,BANK[$23]
|
||
PikachuCry8: ; 8c000 (23:4000)
|
||
dw (PikachuCry8_End - PikachuCry8) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_8.pcm"
|
||
PikachuCry8_End:
|
||
|
||
db $f7 ; unused
|
||
|
||
PikachuCry9: ; 8d0ca (23:50ca)
|
||
dw (PikachuCry9_End - PikachuCry9) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_9.pcm"
|
||
PikachuCry9_End:
|
||
|
||
db $f3 ; unused
|
||
|
||
PikachuCry10: ; 8de0c (23:5e0c)
|
||
dw (PikachuCry10_End - PikachuCry10) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_10.pcm"
|
||
PikachuCry10_End:
|
||
|
||
db $ff ; unused
|
||
|
||
|
||
SECTION "bank24",ROMX,BANK[$24]
|
||
PikachuCry11: ; 90000 (24:4000)
|
||
dw (PikachuCry11_End - PikachuCry11) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_11.pcm"
|
||
PikachuCry11_End:
|
||
|
||
db $77 ; unused
|
||
|
||
PikachuCry12: ; 90722 (24:4772)
|
||
dw (PikachuCry12_End - PikachuCry12) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_12.pcm"
|
||
PikachuCry12_End:
|
||
|
||
db $ff ; unused
|
||
|
||
PikachuCry13: ; 914a4 (24:54a4)
|
||
dw (PikachuCry13_End - PikachuCry13) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_13.pcm"
|
||
PikachuCry13_End:
|
||
|
||
db $f0 ; unused
|
||
|
||
|
||
SECTION "bank25",ROMX,BANK[$25]
|
||
PikachuCry14: ; 94000 (25:4000)
|
||
dw (PikachuCry14_End - PikachuCry14) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_14.pcm"
|
||
PikachuCry14_End:
|
||
|
||
db $fc ; unused
|
||
|
||
PikachuCry15: ; 9589a (25:589a)
|
||
dw (PikachuCry15_End - PikachuCry15) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_15.pcm"
|
||
PikachuCry15_End:
|
||
|
||
db $77 ; unused
|
||
|
||
SECTION "bank2f",ROMX[$5000],BANK[$2F]
|
||
|
||
dr $bd000,$bf450
|
||
Func_bf450: ; bf450 (2f:7450)
|
||
dr $bf450,$c0000
|
||
|
||
SECTION "bank30",ROMX,BANK[$30]
|
||
|
||
dr $c0000,$c4000
|
||
|
||
|
||
SECTION "bank31",ROMX,BANK[$31]
|
||
PikachuCry16: ; c4000 (31:4000)
|
||
dw (PikachuCry16_End - PikachuCry16) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_16.pcm"
|
||
PikachuCry16_End:
|
||
|
||
db $e7 ; unused
|
||
|
||
PikachuCry18: ; c549a (31:549a)
|
||
dw (PikachuCry18_End - PikachuCry18) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_18.pcm"
|
||
PikachuCry18_End:
|
||
|
||
db $00 ; unused
|
||
|
||
PikachuCry22: ; c63a4 (31:63a4)
|
||
dw (PikachuCry22_End - PikachuCry22) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_22.pcm"
|
||
PikachuCry22_End:
|
||
|
||
db $7e ; unused
|
||
|
||
|
||
SECTION "bank32",ROMX,BANK[$32]
|
||
PikachuCry20: ; c8000 (32:4000)
|
||
dw (PikachuCry20_End - PikachuCry20) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_20.pcm"
|
||
PikachuCry20_End:
|
||
|
||
db $07 ; unused
|
||
|
||
PikachuCry21: ; ca002 (32:6002)
|
||
dw (PikachuCry21_End - PikachuCry21) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_21.pcm"
|
||
PikachuCry21_End:
|
||
|
||
db $ff ; unused
|
||
|
||
|
||
SECTION "bank33",ROMX,BANK[$33]
|
||
PikachuCry19: ; cc000 (33:4000)
|
||
dw (PikachuCry19_End - PikachuCry19) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_19.pcm"
|
||
PikachuCry19_End:
|
||
|
||
db $06 ; unused
|
||
|
||
PikachuCry24: ; cd632 (33:5632)
|
||
dw (PikachuCry24_End - PikachuCry24) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_24.pcm"
|
||
PikachuCry24_End:
|
||
|
||
db $e0 ; unused
|
||
|
||
PikachuCry26: ; cf25c (33:725c)
|
||
dw (PikachuCry26_End - PikachuCry26) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_26.pcm"
|
||
PikachuCry26_End:
|
||
|
||
|
||
SECTION "bank34",ROMX,BANK[$34]
|
||
PikachuCry17: ; d0000 (34:4000)
|
||
dw (PikachuCry17_End - PikachuCry17) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_17.pcm"
|
||
PikachuCry17_End:
|
||
|
||
db $00 ; unused
|
||
|
||
PikachuCry23: ; d0862 (34:4862)
|
||
dw (PikachuCry23_End - PikachuCry23) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_23.pcm"
|
||
PikachuCry23_End:
|
||
|
||
db $00 ; unused
|
||
|
||
PikachuCry25: ; d173c (34:573c)
|
||
dw (PikachuCry25_End - PikachuCry25) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_25.pcm"
|
||
PikachuCry25_End:
|
||
|
||
db $03 ; unused
|
||
|
||
|
||
SECTION "bank35",ROMX,BANK[$35]
|
||
PikachuCry27: ; d4000 (35:4000)
|
||
dw (PikachuCry27_End - PikachuCry27) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_27.pcm"
|
||
PikachuCry27_End:
|
||
|
||
db $ff ; unused
|
||
|
||
PikachuCry28: ; d4b5a (35:4b5a)
|
||
dw (PikachuCry28_End - PikachuCry28) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_28.pcm"
|
||
PikachuCry28_End:
|
||
|
||
db $1b ; unused
|
||
|
||
PikachuCry29: ; d5da4 (35:5da4)
|
||
dw (PikachuCry29_End - PikachuCry29) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_29.pcm"
|
||
PikachuCry29_End:
|
||
|
||
db $87 ; unused
|
||
|
||
PikachuCry30: ; d69ce (35:69ce)
|
||
dw (PikachuCry30_End - PikachuCry30) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_30.pcm"
|
||
PikachuCry30_End:
|
||
|
||
db $00 ; unused
|
||
|
||
PikachuCry31: ; d6e80 (35:6ea0)
|
||
dw (PikachuCry31_End - PikachuCry31) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_31.pcm"
|
||
PikachuCry31_End:
|
||
|
||
|
||
SECTION "bank36",ROMX,BANK[$36]
|
||
PikachuCry32: ; d8000 (36:4000)
|
||
dw (PikachuCry32_End - PikachuCry32) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_32.pcm"
|
||
PikachuCry32_End:
|
||
|
||
db $ff ; unused
|
||
|
||
PikachuCry33: ; d858a (36:458a)
|
||
dw (PikachuCry33_End - PikachuCry33) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_33.pcm"
|
||
PikachuCry33_End:
|
||
|
||
db $1f ; unused
|
||
|
||
PikachuCry34: ; d923c (36:523c)
|
||
dw (PikachuCry34_End - PikachuCry34) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_34.pcm"
|
||
PikachuCry34_End:
|
||
|
||
db $01 ; unused
|
||
|
||
PikachuCry41: ; da746 (36:6746)
|
||
dw (PikachuCry41_End - PikachuCry41) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_41.pcm"
|
||
PikachuCry41_End:
|
||
|
||
db $9b ; unused
|
||
|
||
|
||
SECTION "bank37",ROMX,BANK[$37]
|
||
PikachuCry35: ; dc000 (37:4000)
|
||
dw (PikachuCry35_End - PikachuCry35) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_35.pcm"
|
||
PikachuCry35_End:
|
||
|
||
db $00 ; unused
|
||
|
||
PikachuCry36: ; dd22a (37:5d2a)
|
||
dw (PikachuCry36_End - PikachuCry36) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_36.pcm"
|
||
PikachuCry36_End:
|
||
|
||
db $01 ; unused
|
||
|
||
PikachuCry39: ; dee0c (37:6e0c)
|
||
dw (PikachuCry39_End - PikachuCry39) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_39.pcm"
|
||
PikachuCry39_End:
|
||
|
||
db $0f ; unused
|
||
|
||
|
||
SECTION "bank38",ROMX,BANK[$38]
|
||
PikachuCry37: ; e0000 (38:4000)
|
||
dw (PikachuCry37_End - PikachuCry37) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_37.pcm"
|
||
PikachuCry37_End:
|
||
|
||
db $3f ; unused
|
||
|
||
PikachuCry38: ; e0dfa (38:4dfa)
|
||
dw (PikachuCry38_End - PikachuCry38) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_38.pcm"
|
||
PikachuCry38_End:
|
||
|
||
db $ff ; unused
|
||
|
||
PikachuCry40: ; e1a64 (38:5a64)
|
||
dw (PikachuCry40_End - PikachuCry40) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_40.pcm"
|
||
PikachuCry40_End:
|
||
|
||
db $ff ; unused
|
||
|
||
PikachuCry42: ; e2976 (38:6976)
|
||
dw (PikachuCry42_End - PikachuCry42) - 2 ; length of pcm data
|
||
INCBIN "audio/pikachu_cries/pikachu_cry_42.pcm"
|
||
PikachuCry42_End:
|
||
|
||
|
||
SECTION "bank39",ROMX,BANK[$39]
|
||
|
||
dr $e4000,$e8000
|
||
|
||
|
||
SECTION "bank3A",ROMX,BANK[$3A]
|
||
MonsterNames: ; e8000 (3a:4000)
|
||
dr $e8000,$e8a5e
|
||
Func_e8a5e: ; e8a5e (3a:4a5e)
|
||
dr $e8a5e,$e8d35
|
||
Func_e8d35:: ; e8d35 (3a:4d35)
|
||
dr $e8d35,$e8e79
|
||
Func_e8e79: ; e8e79 (3a:4e79)
|
||
dr $e8e79,$e928a
|
||
SurfingPikachu2Graphics: INCBIN "gfx/surfing_pikachu_2.2bpp"
|
||
dr $e988a,$e9bfa
|
||
|
||
SurfingPikachu3Graphics: INCBIN "gfx/surfing_pikachu_3.t1.2bpp"
|
||
|
||
dr $ea3ea,$eaa02
|
||
FreezeEnemyTrainerSprite: ; eaa02 (3a:6a02)
|
||
dr $eaa02,$ec000
|
||
|
||
SECTION "bank3C",ROMX,BANK[$3C]
|
||
|
||
INCLUDE "engine/bank3c/main.asm"
|
||
|
||
SECTION "bank3D",ROMX,BANK[$3D]
|
||
|
||
INCLUDE "engine/bank3d/main.asm"
|
||
|
||
SECTION "bank3E",ROMX,BANK[$3E]
|
||
|
||
dr $f8000,$fa35a
|
||
|
||
YellowIntroGraphics: INCBIN "gfx/yellow_intro.2bpp"
|
||
|
||
dr $fbb5a,$fc000
|
||
|
||
SECTION "bank3F",ROMX,BANK[$3F]
|
||
|
||
INCLUDE "engine/bank3f/main.asm"
|