mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
Pull a lot of engine out of main.asm
This commit is contained in:
parent
ea3ba4cde3
commit
15427f5320
110 changed files with 39093 additions and 38990 deletions
|
@ -515,7 +515,7 @@ Unknown_213c4: ; 213c4 (8:53c4)
|
|||
db $00,$00,$00,$80
|
||||
|
||||
|
||||
INCLUDE "menu/pc.asm"
|
||||
INCLUDE "engine/menu/bills_pc.asm"
|
||||
|
||||
INCLUDE "audio/engine_2.asm"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
MonOverworldData: ; 7190d (1c:590d)
|
||||
MonPartyData: ; 7190d (1c:590d)
|
||||
dn SPRITE_GRASS, SPRITE_GRASS ;Bulbasaur/Ivysaur
|
||||
dn SPRITE_GRASS, SPRITE_MON ;Venusaur/Charmander
|
||||
dn SPRITE_MON, SPRITE_MON ;Charmeleon/Charizard
|
||||
|
|
263
engine/HoF_room_pc.asm
Executable file
263
engine/HoF_room_pc.asm
Executable file
|
@ -0,0 +1,263 @@
|
|||
HallOfFameComputer: ; 7405c (1d:405c)
|
||||
callba AnimateHallOfFame
|
||||
call ClearScreen
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
call DisableLCD
|
||||
ld hl, $8800
|
||||
ld bc, $400
|
||||
call Func_74171
|
||||
ld hl, $9600
|
||||
ld bc, $100
|
||||
call Func_74171
|
||||
ld hl, $97e0
|
||||
ld bc, $10
|
||||
ld a, $ff
|
||||
call FillMemory
|
||||
ld hl, wTileMap
|
||||
call Func_7417b
|
||||
FuncCoord 0, 14 ; $c4b8
|
||||
ld hl, Coord
|
||||
call Func_7417b
|
||||
ld a, $c0
|
||||
ld [rBGP], a ; $ff47
|
||||
call EnableLCD
|
||||
ld a, $ff
|
||||
call PlaySoundWaitForCurrent
|
||||
ld c, BANK(Music_Credits)
|
||||
ld a, MUSIC_CREDITS
|
||||
call PlayMusic
|
||||
ld c, $80
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld [$cd3e], a
|
||||
jp Credits
|
||||
|
||||
Func_740ba: ; 740ba (1d:40ba)
|
||||
ld hl, DataTable_74160 ; $4160
|
||||
ld b, $4
|
||||
.asm_740bf
|
||||
ld a, [hli]
|
||||
ld [rBGP], a ; $ff47
|
||||
ld c, $5
|
||||
call DelayFrames
|
||||
dec b
|
||||
jr nz, .asm_740bf
|
||||
ret
|
||||
|
||||
DisplayCreditsMon: ; 740cb (1d:40cb)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call SaveScreenTilesToBuffer1
|
||||
call FillMiddleOfScreenWithWhite
|
||||
|
||||
; display the next monster from CreditsMons
|
||||
ld hl,$CD3E
|
||||
ld c,[hl] ; how many monsters have we displayed so far?
|
||||
inc [hl]
|
||||
ld b,0
|
||||
ld hl,CreditsMons
|
||||
add hl,bc ; go that far in the list of monsters and get the next one
|
||||
ld a,[hl]
|
||||
ld [$CF91],a
|
||||
ld [$D0B5],a
|
||||
FuncCoord 8, 6 ; $c420
|
||||
ld hl,Coord
|
||||
call GetMonHeader
|
||||
call LoadFrontSpriteByMonIndex
|
||||
ld hl,$980C
|
||||
call Func_74164
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call LoadScreenTilesFromBuffer1
|
||||
ld hl,$9800
|
||||
call Func_74164
|
||||
ld a,$A7
|
||||
ld [$FF4B],a
|
||||
ld hl,$9C00
|
||||
call Func_74164
|
||||
call FillMiddleOfScreenWithWhite
|
||||
ld a,$FC
|
||||
ld [$FF47],a
|
||||
ld bc,7
|
||||
.next
|
||||
call Func_74140
|
||||
dec c
|
||||
jr nz,.next
|
||||
ld c,$14
|
||||
.next2
|
||||
call Func_74140
|
||||
ld a,[$FF4B]
|
||||
sub 8
|
||||
ld [$FF4B],a
|
||||
dec c
|
||||
jr nz,.next2
|
||||
xor a
|
||||
ld [$FFB0],a
|
||||
ld a,$C0
|
||||
ld [$FF47],a
|
||||
ret
|
||||
|
||||
INCLUDE "data/credit_mons.asm"
|
||||
|
||||
Func_74140: ; 74140 (1d:4140)
|
||||
ld h, b
|
||||
ld l, $20
|
||||
call Func_74152
|
||||
ld h, $0
|
||||
ld l, $70
|
||||
call Func_74152
|
||||
ld a, b
|
||||
add $8
|
||||
ld b, a
|
||||
ret
|
||||
|
||||
Func_74152: ; 74152 (1d:4152)
|
||||
ld a, [$ff44]
|
||||
cp l
|
||||
jr nz, Func_74152
|
||||
ld a, h
|
||||
ld [rSCX], a ; $ff43
|
||||
.asm_7415a
|
||||
ld a, [$ff44]
|
||||
cp h
|
||||
jr z, .asm_7415a
|
||||
ret
|
||||
|
||||
DataTable_74160: ; 74160 (1d:4160)
|
||||
db $C0,$D0,$E0,$F0
|
||||
|
||||
Func_74164: ; 74164 (1d:4164)
|
||||
ld a, l
|
||||
ld [H_AUTOBGTRANSFERDEST], a ; $ffbc
|
||||
ld a, h
|
||||
ld [$ffbd], a
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
jp Delay3
|
||||
|
||||
Func_74171: ; 74171 (1d:4171)
|
||||
ld [hl], $0
|
||||
inc hl
|
||||
inc hl
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, Func_74171
|
||||
ret
|
||||
|
||||
Func_7417b: ; 7417b (1d:417b)
|
||||
ld bc, $50
|
||||
ld a, $7e
|
||||
jp FillMemory
|
||||
|
||||
FillMiddleOfScreenWithWhite: ; 74183 (1d:4183)
|
||||
FuncCoord 0, 4 ; $c3f0
|
||||
ld hl, Coord
|
||||
ld bc, $c8 ; 10 rows of 20 tiles each
|
||||
ld a, $7f ; blank white tile
|
||||
jp FillMemory
|
||||
|
||||
Credits: ; 7418e (1d:418e)
|
||||
ld de, CreditsOrder ; $4243
|
||||
push de
|
||||
.asm_74192
|
||||
pop de
|
||||
FuncCoord 9, 6 ; $c421
|
||||
ld hl, Coord
|
||||
push hl
|
||||
call FillMiddleOfScreenWithWhite
|
||||
pop hl
|
||||
.asm_7419b
|
||||
ld a, [de]
|
||||
inc de
|
||||
push de
|
||||
cp $ff
|
||||
jr z, .asm_741d5
|
||||
cp $fe
|
||||
jr z, .asm_741dc
|
||||
cp $fd
|
||||
jr z, .asm_741e6
|
||||
cp $fc
|
||||
jr z, .asm_741ed
|
||||
cp $fb
|
||||
jr z, .asm_741f4
|
||||
cp $fa
|
||||
jr z, .showTheEnd
|
||||
push hl
|
||||
push hl
|
||||
ld hl, CreditsTextPointers ; $42c3
|
||||
add a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld c, a
|
||||
ld b, $ff
|
||||
pop hl
|
||||
add hl, bc
|
||||
call PlaceString
|
||||
pop hl
|
||||
ld bc, $28
|
||||
add hl, bc
|
||||
pop de
|
||||
jr .asm_7419b
|
||||
.asm_741d5
|
||||
call Func_740ba
|
||||
ld c, $5a
|
||||
jr .asm_741de
|
||||
.asm_741dc
|
||||
ld c, $6e
|
||||
.asm_741de
|
||||
call DelayFrames
|
||||
call DisplayCreditsMon
|
||||
jr .asm_74192
|
||||
.asm_741e6
|
||||
call Func_740ba
|
||||
ld c, $78
|
||||
jr .asm_741ef
|
||||
.asm_741ed
|
||||
ld c, $8c
|
||||
.asm_741ef
|
||||
call DelayFrames
|
||||
jr .asm_74192
|
||||
.asm_741f4
|
||||
push de
|
||||
callba LoadCopyrightTiles
|
||||
pop de
|
||||
pop de
|
||||
jr .asm_7419b
|
||||
.showTheEnd
|
||||
ld c, $10
|
||||
call DelayFrames
|
||||
call FillMiddleOfScreenWithWhite
|
||||
pop de
|
||||
ld de, TheEndGfx
|
||||
ld hl, $9600
|
||||
ld bc, (BANK(TheEndGfx) << 8) + $0a
|
||||
call CopyVideoData
|
||||
FuncCoord 4, 8 ; $c444
|
||||
ld hl, Coord
|
||||
ld de, UnnamedText_74229 ; $4229
|
||||
call PlaceString
|
||||
FuncCoord 4, 9 ; $c458
|
||||
ld hl, Coord
|
||||
inc de
|
||||
call PlaceString
|
||||
jp Func_740ba
|
||||
|
||||
UnnamedText_74229: ; 74229 (1d:4229)
|
||||
db $60," ",$62," ",$64," ",$64," ",$66," ",$68,"@"
|
||||
db $61," ",$63," ",$65," ",$65," ",$67," ",$69,"@"
|
||||
|
||||
INCLUDE "data/credits_order.asm"
|
||||
|
||||
INCLUDE "text/credits_text.asm"
|
||||
|
||||
TheEndGfx: ; 7473e (1d:473e) ; 473E (473F on blue)
|
||||
INCBIN "gfx/theend.w40.interleave.2bpp"
|
105
engine/battle/1.asm
Executable file
105
engine/battle/1.asm
Executable file
|
@ -0,0 +1,105 @@
|
|||
DrainHPEffect_: ; 783f (1:783f)
|
||||
ld hl, W_DAMAGE ; $d0d7
|
||||
ld a, [hl]
|
||||
srl a ; divide damage by 2
|
||||
ld [hli], a
|
||||
ld a, [hl]
|
||||
rr a
|
||||
ld [hld], a
|
||||
or [hl]
|
||||
jr nz, .asm_784f
|
||||
inc hl
|
||||
inc [hl]
|
||||
.asm_784f
|
||||
ld hl, W_PLAYERMONCURHP ; $d015
|
||||
ld de, W_PLAYERMONMAXHP ; $d023
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jp z, Func_7861
|
||||
ld hl, W_ENEMYMONCURHP ; $cfe6
|
||||
ld de, W_ENEMYMONMAXHP ; $cff4
|
||||
|
||||
Func_7861: ; 7861 (1:7861)
|
||||
ld bc, wHPBarOldHP+1
|
||||
ld a, [hli]
|
||||
ld [bc], a
|
||||
ld a, [hl]
|
||||
dec bc
|
||||
ld [bc], a
|
||||
ld a, [de]
|
||||
dec bc
|
||||
ld [bc], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
dec bc
|
||||
ld [bc], a
|
||||
ld a, [$d0d8]
|
||||
ld b, [hl]
|
||||
add b
|
||||
ld [hld], a
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, [W_DAMAGE] ; $d0d7
|
||||
ld b, [hl]
|
||||
adc b
|
||||
ld [hli], a
|
||||
ld [wHPBarNewHP+1], a
|
||||
jr c, .asm_7890
|
||||
ld a, [hld]
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
dec de
|
||||
sub b
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
inc de
|
||||
sbc b
|
||||
jr nc, .asm_789c
|
||||
.asm_7890
|
||||
ld a, [de]
|
||||
ld [hld], a
|
||||
ld [wHPBarNewHP], a
|
||||
dec de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
ld [wHPBarNewHP+1], a
|
||||
inc de
|
||||
.asm_789c
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
FuncCoord 10, 9 ; $c45e
|
||||
ld hl, Coord
|
||||
ld a, $1
|
||||
jr z, .asm_78aa
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
xor a
|
||||
.asm_78aa
|
||||
ld [wListMenuID], a ; $cf94
|
||||
ld a, $48
|
||||
call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d))
|
||||
ld a, $0
|
||||
call Predef ; indirect jump to Func_3cd60 (3cd60 (f:4d60))
|
||||
ld a, $49
|
||||
call Predef ; indirect jump to Func_3cdec (3cdec (f:4dec))
|
||||
callab ReadPlayerMonCurHPAndStatus
|
||||
ld hl, SuckedHealthText ; $78dc
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
ld a, [W_PLAYERMOVEEFFECT] ; $cfd3
|
||||
jr z, .asm_78d2
|
||||
ld a, [W_ENEMYMOVEEFFECT] ; $cfcd
|
||||
.asm_78d2
|
||||
cp DREAM_EATER_EFFECT
|
||||
jr nz, .asm_78d9
|
||||
ld hl, DreamWasEatenText
|
||||
.asm_78d9
|
||||
jp PrintText
|
||||
|
||||
SuckedHealthText: ; 78dc (1:78dc)
|
||||
TX_FAR _SuckedHealthText
|
||||
db "@"
|
||||
|
||||
DreamWasEatenText: ; 78e1 (1:78e1)
|
||||
TX_FAR _DreamWasEatenText
|
||||
db "@"
|
94
engine/battle/14.asm
Executable file
94
engine/battle/14.asm
Executable file
|
@ -0,0 +1,94 @@
|
|||
Func_525af: ; 525af (14:65af)
|
||||
ld a, [$ffd7]
|
||||
ld [$d0d4], a
|
||||
xor a
|
||||
ld [$cd6a], a
|
||||
ld [$cf0b], a
|
||||
ld hl, $cc2b
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld [$d05e], a
|
||||
ld [W_PLAYERMONID], a
|
||||
ld [W_PLAYERMONSALIVEFLAGS], a
|
||||
ld [wPlayerMonNumber], a ; $cc2f
|
||||
ld [$d078], a
|
||||
ld [$d35d], a
|
||||
ld hl, $cf1d
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld hl, $ccd3
|
||||
ld b, $3c
|
||||
.asm_525e1
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_525e1
|
||||
inc a
|
||||
ld [$ccd9], a
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp SAFARI_ZONE_EAST
|
||||
jr c, .asm_525f9
|
||||
cp SAFARI_ZONE_REST_HOUSE_1
|
||||
jr nc, .asm_525f9
|
||||
ld a, $2
|
||||
ld [W_BATTLETYPE], a ; $d05a
|
||||
.asm_525f9
|
||||
ld hl, PlayBattleMusic
|
||||
ld b, BANK(PlayBattleMusic)
|
||||
jp Bankswitch
|
||||
|
||||
ParalyzeEffect_: ; 52601 (14:6601)
|
||||
ld hl, W_ENEMYMONSTATUS ; $cfe9
|
||||
ld de, W_PLAYERMOVETYPE ; $cfd5
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jp z, .asm_52613
|
||||
ld hl, W_PLAYERMONSTATUS ; $d018
|
||||
ld de, W_ENEMYMOVETYPE ; $cfcf
|
||||
|
||||
.asm_52613
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr nz, .asm_52659
|
||||
ld a, [de]
|
||||
cp EVASION_DOWN1_EFFECT
|
||||
jr nz, .asm_5262a
|
||||
ld b, h
|
||||
ld c, l
|
||||
inc bc
|
||||
ld a, [bc]
|
||||
cp $4
|
||||
jr z, .asm_52666
|
||||
inc bc
|
||||
ld a, [bc]
|
||||
cp $4
|
||||
jr z, .asm_52666
|
||||
.asm_5262a
|
||||
push hl
|
||||
callab MoveHitTest
|
||||
pop hl
|
||||
ld a, [W_MOVEMISSED] ; $d05f
|
||||
and a
|
||||
jr nz, .asm_52659
|
||||
set 6, [hl]
|
||||
callab Func_3ed27
|
||||
ld c, $1e
|
||||
call DelayFrames
|
||||
callab Func_3fba8
|
||||
ld hl, PrintMayNotAttackText
|
||||
ld b, BANK(PrintMayNotAttackText)
|
||||
jp Bankswitch
|
||||
.asm_52659
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, PrintDidntAffectText
|
||||
ld b, BANK(PrintDidntAffectText)
|
||||
jp Bankswitch
|
||||
.asm_52666
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, PrintDoesntAffectText
|
||||
ld b, BANK(PrintDoesntAffectText)
|
||||
jp Bankswitch
|
366
engine/battle/15.asm
Executable file
366
engine/battle/15.asm
Executable file
|
@ -0,0 +1,366 @@
|
|||
GainExperience: ; 5524f (15:524f)
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $4
|
||||
ret z
|
||||
call Func_5546c
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
xor a
|
||||
ld [wWhichPokemon], a ; $cf92
|
||||
|
||||
Func_5525f: ; 5525f (15:525f)
|
||||
inc hl
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jp z, Func_55436
|
||||
push hl
|
||||
ld hl, W_PLAYERMONSALIVEFLAGS
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld c, a
|
||||
ld b, $2
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
ld a, c
|
||||
and a
|
||||
pop hl
|
||||
jp z, Func_55436
|
||||
ld de, $10
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, $d002
|
||||
ld c, $5
|
||||
.asm_55285
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
add b
|
||||
ld [de], a
|
||||
jr nc, .asm_5529a
|
||||
dec de
|
||||
ld a, [de]
|
||||
inc a
|
||||
jr z, .asm_55295
|
||||
ld [de], a
|
||||
inc de
|
||||
jr .asm_5529a
|
||||
.asm_55295
|
||||
ld a, $ff
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [de], a
|
||||
.asm_5529a
|
||||
dec c
|
||||
jr z, .asm_552a1
|
||||
inc de
|
||||
inc de
|
||||
jr .asm_55285
|
||||
.asm_552a1
|
||||
xor a
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld [$ff97], a
|
||||
ld a, [$d008]
|
||||
ld [$ff98], a
|
||||
ld a, [W_ENEMYMONLEVEL] ; $cff3
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
call Multiply
|
||||
ld a, $7
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld hl, $fff2
|
||||
add hl, de
|
||||
ld b, [hl]
|
||||
inc hl
|
||||
ld a, [wPlayerID] ; $d359
|
||||
cp b
|
||||
jr nz, .asm_552d1
|
||||
ld b, [hl]
|
||||
ld a, [wPlayerID + 1] ; $d35a
|
||||
cp b
|
||||
ld a, $0
|
||||
jr z, .asm_552d6
|
||||
.asm_552d1
|
||||
call Func_5549f
|
||||
ld a, $1
|
||||
.asm_552d6
|
||||
ld [$cf4d], a
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
dec a
|
||||
call nz, Func_5549f
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
ld b, [hl]
|
||||
ld a, [$ff98]
|
||||
ld [$cf4c], a
|
||||
add b
|
||||
ld [hld], a
|
||||
ld b, [hl]
|
||||
ld a, [$ff97]
|
||||
ld [$cf4b], a
|
||||
adc b
|
||||
ld [hl], a
|
||||
jr nc, .asm_552f8
|
||||
dec hl
|
||||
inc [hl]
|
||||
inc hl
|
||||
.asm_552f8
|
||||
inc hl
|
||||
push hl
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, W_PARTYMON1 ; $d164
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$d0b5], a
|
||||
call GetMonHeader
|
||||
ld d, $64
|
||||
callab CalcExperience
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld b, a
|
||||
ld a, [$ff97]
|
||||
ld c, a
|
||||
ld a, [$ff98]
|
||||
ld d, a
|
||||
pop hl
|
||||
ld a, [hld]
|
||||
sub d
|
||||
ld a, [hld]
|
||||
sbc c
|
||||
ld a, [hl]
|
||||
sbc b
|
||||
jr c, .asm_5532e
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
ld a, c
|
||||
ld [hli], a
|
||||
ld a, d
|
||||
ld [hld], a
|
||||
dec hl
|
||||
.asm_5532e
|
||||
push hl
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call GetPartyMonName
|
||||
ld hl, GainedText
|
||||
call PrintText
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
call LoadMonData
|
||||
pop hl
|
||||
ld bc, $13
|
||||
add hl, bc
|
||||
push hl
|
||||
callba Func_58f43
|
||||
pop hl
|
||||
ld a, [hl]
|
||||
cp d
|
||||
jp z, Func_55436
|
||||
ld a, [W_CURENEMYLVL] ; $d127
|
||||
push af
|
||||
push hl
|
||||
ld a, d
|
||||
ld [W_CURENEMYLVL], a ; $d127
|
||||
ld [hl], a
|
||||
ld bc, $ffdf
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$d0b5], a
|
||||
ld [$d11e], a
|
||||
call GetMonHeader
|
||||
ld bc, $23
|
||||
add hl, bc
|
||||
push hl
|
||||
ld a, [hld]
|
||||
ld c, a
|
||||
ld b, [hl]
|
||||
push bc
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld bc, $ffee
|
||||
add hl, bc
|
||||
ld b, $1
|
||||
call CalcStats
|
||||
pop bc
|
||||
pop hl
|
||||
ld a, [hld]
|
||||
sub c
|
||||
ld c, a
|
||||
ld a, [hl]
|
||||
sbc b
|
||||
ld b, a
|
||||
ld de, $ffe0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
add c
|
||||
ld [hld], a
|
||||
ld a, [hl]
|
||||
adc b
|
||||
ld [hl], a
|
||||
ld a, [wPlayerMonNumber] ; $cc2f
|
||||
ld b, a
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
cp b
|
||||
jr nz, .asm_553f7
|
||||
ld de, W_PLAYERMONCURHP ; $d015
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld bc, $1f
|
||||
add hl, bc
|
||||
push hl
|
||||
ld de, W_PLAYERMONLEVEL ; $d022
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
pop hl
|
||||
ld a, [W_PLAYERBATTSTATUS3] ; $d064
|
||||
bit 3, a
|
||||
jr nz, .asm_553c8
|
||||
ld de, $cd0f
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
.asm_553c8
|
||||
xor a
|
||||
ld [$d11e], a
|
||||
callab Func_3ed99
|
||||
callab Func_3ed1a
|
||||
callab Func_3ee19
|
||||
callab Func_3cd60
|
||||
callab Func_3ee94
|
||||
call SaveScreenTilesToBuffer1
|
||||
.asm_553f7
|
||||
ld hl, GrewLevelText
|
||||
call PrintText
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
call LoadMonData
|
||||
ld d, $1
|
||||
callab PrintStatsBox
|
||||
call WaitForTextScrollButtonPress
|
||||
call LoadScreenTilesFromBuffer1
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
ld a, [$d0b5]
|
||||
ld [$d11e], a
|
||||
ld a, $1a
|
||||
call Predef ; indirect jump to Func_3af5b (3af5b (e:6f5b))
|
||||
ld hl, $ccd3
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld c, a
|
||||
ld b, $1
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
pop hl
|
||||
pop af
|
||||
ld [W_CURENEMYLVL], a ; $d127
|
||||
|
||||
Func_55436: ; 55436 (15:5436)
|
||||
ld a, [W_NUMINPARTY] ; $d163
|
||||
ld b, a
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
inc a
|
||||
cp b
|
||||
jr z, .asm_55450
|
||||
ld [wWhichPokemon], a ; $cf92
|
||||
ld bc, $2c
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
call AddNTimes
|
||||
jp Func_5525f
|
||||
.asm_55450
|
||||
ld hl, W_PLAYERMONSALIVEFLAGS
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld a, [wPlayerMonNumber] ; $cc2f
|
||||
ld c, a
|
||||
ld b, $1
|
||||
push bc
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
ld hl, $ccf5
|
||||
xor a
|
||||
ld [hl], a
|
||||
pop bc
|
||||
ld a, $10
|
||||
jp Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
|
||||
Func_5546c: ; 5546c (15:546c)
|
||||
ld a, [W_PLAYERMONSALIVEFLAGS]
|
||||
ld b, a
|
||||
xor a
|
||||
ld c, $8
|
||||
ld d, $0
|
||||
.asm_55475
|
||||
xor a
|
||||
srl b
|
||||
adc d
|
||||
ld d, a
|
||||
dec c
|
||||
jr nz, .asm_55475
|
||||
cp $2
|
||||
ret c
|
||||
ld [$d11e], a
|
||||
ld hl, $d002
|
||||
ld c, $7
|
||||
.asm_55488
|
||||
xor a
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld a, [hl]
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [$d11e]
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
ld b, $2
|
||||
call Divide
|
||||
ld a, [$ff98]
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_55488
|
||||
ret
|
||||
|
||||
Func_5549f: ; 5549f (15:549f)
|
||||
ld a, [$ff97]
|
||||
ld b, a
|
||||
ld a, [$ff98]
|
||||
ld c, a
|
||||
srl b
|
||||
rr c
|
||||
add c
|
||||
ld [$ff98], a
|
||||
ld a, [$ff97]
|
||||
adc b
|
||||
ld [$ff97], a
|
||||
ret
|
||||
|
||||
GainedText: ; 554b2 (15:54b2)
|
||||
TX_FAR _GainedText
|
||||
db $08 ; asm
|
||||
ld a, [$cc5b]
|
||||
ld hl, WithExpAllText
|
||||
and a
|
||||
ret nz
|
||||
ld hl, ExpPointsText
|
||||
ld a, [$cf4d]
|
||||
and a
|
||||
ret z
|
||||
ld hl, BoostedText
|
||||
ret
|
||||
|
||||
WithExpAllText: ; 554cb (15:54cb)
|
||||
TX_FAR _WithExpAllText
|
||||
db $08 ; asm
|
||||
ld hl, ExpPointsText
|
||||
ret
|
||||
|
||||
BoostedText: ; 554d4 (15:54d4)
|
||||
TX_FAR _BoostedText
|
||||
|
||||
ExpPointsText: ; 554d8 (15:54d8)
|
||||
TX_FAR _ExpPointsText
|
||||
db "@"
|
||||
|
||||
GrewLevelText: ; 554dd (15:54dd)
|
||||
TX_FAR _GrewLevelText
|
||||
db $0b
|
||||
db "@"
|
238
engine/battle/16.asm
Executable file
238
engine/battle/16.asm
Executable file
|
@ -0,0 +1,238 @@
|
|||
PrintBeginningBattleText: ; 58d99 (16:4d99)
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
dec a
|
||||
jr nz, .trainerBattle
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp POKEMONTOWER_3
|
||||
jr c, .notPokemonTower
|
||||
cp LAVENDER_HOUSE_1
|
||||
jr c, .pokemonTower
|
||||
.notPokemonTower
|
||||
ld a, [W_ENEMYMONID]
|
||||
call PlayCry
|
||||
ld hl, WildMonAppearedText
|
||||
ld a, [W_MOVEMISSED] ; $d05f
|
||||
and a
|
||||
jr z, .notFishing
|
||||
ld hl, HookedMonAttackedText
|
||||
.notFishing
|
||||
jr .wildBattle
|
||||
.trainerBattle
|
||||
call .playSFX
|
||||
ld c, $14
|
||||
call DelayFrames
|
||||
ld hl, TrainerWantsToFightText
|
||||
.wildBattle
|
||||
push hl
|
||||
callab DrawAllPokeballs
|
||||
pop hl
|
||||
call PrintText
|
||||
jr .done
|
||||
.pokemonTower
|
||||
ld b, SILPH_SCOPE
|
||||
call IsItemInBag
|
||||
ld a, [W_ENEMYMONID]
|
||||
ld [$cf91], a
|
||||
cp MAROWAK
|
||||
jr z, .isMarowak
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .noSilphScope
|
||||
callab Func_3eb01
|
||||
jr .notPokemonTower
|
||||
.noSilphScope
|
||||
ld hl, EnemyAppearedText
|
||||
call PrintText
|
||||
ld hl, GhostCantBeIDdText
|
||||
call PrintText
|
||||
jr .done
|
||||
.isMarowak
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .noSilphScope
|
||||
ld hl, EnemyAppearedText
|
||||
call PrintText
|
||||
ld hl, UnveiledGhostText
|
||||
call PrintText
|
||||
callab Func_3eb01
|
||||
callab Func_708ca
|
||||
ld hl, WildMonAppearedText
|
||||
call PrintText
|
||||
|
||||
.playSFX
|
||||
xor a
|
||||
ld [$c0f1], a
|
||||
ld a, $80
|
||||
ld [$c0f2], a
|
||||
ld a, (SFX_08_77 - SFX_Headers_08) / 3
|
||||
call PlaySound
|
||||
jp WaitForSoundToFinish
|
||||
.done
|
||||
ret
|
||||
|
||||
WildMonAppearedText: ; 58e3b (16:4e3b)
|
||||
TX_FAR _WildMonAppearedText
|
||||
db "@"
|
||||
|
||||
HookedMonAttackedText: ; 58e40 (16:4e40)
|
||||
TX_FAR _HookedMonAttackedText
|
||||
db "@"
|
||||
|
||||
EnemyAppearedText: ; 58e45 (16:4e45)
|
||||
TX_FAR _EnemyAppearedText
|
||||
db "@"
|
||||
|
||||
TrainerWantsToFightText: ; 58e4a (16:4e4a)
|
||||
TX_FAR _TrainerWantsToFightText
|
||||
db "@"
|
||||
|
||||
UnveiledGhostText: ; 58e4f (16:4e4f)
|
||||
TX_FAR _UnveiledGhostText
|
||||
db "@"
|
||||
|
||||
GhostCantBeIDdText: ; 58e54 (16:4e54)
|
||||
TX_FAR _GhostCantBeIDdText
|
||||
db "@"
|
||||
|
||||
SendOutMon: ; 58e59 (16:4e59)
|
||||
ld hl, W_ENEMYMONCURHP ; $cfe6
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
ld hl, GoText
|
||||
jr z, .printText
|
||||
xor a
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld hl, W_ENEMYMONCURHP ; $cfe6
|
||||
ld a, [hli]
|
||||
ld [$cce3], a
|
||||
ld [$ff97], a
|
||||
ld a, [hl]
|
||||
ld [$cce4], a
|
||||
ld [$ff98], a
|
||||
ld a, $19
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
call Multiply
|
||||
ld hl, W_ENEMYMONMAXHP ; $cff4
|
||||
ld a, [hli]
|
||||
ld b, [hl]
|
||||
srl a
|
||||
rr b
|
||||
srl a
|
||||
rr b
|
||||
ld a, b
|
||||
ld b, $4
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
call Divide
|
||||
ld a, [$ff98]
|
||||
ld hl, GoText
|
||||
cp $46
|
||||
jr nc, .printText
|
||||
ld hl, DoItText
|
||||
cp $28
|
||||
jr nc, .printText
|
||||
ld hl, GetmText
|
||||
cp $a
|
||||
jr nc, .printText
|
||||
ld hl, EnemysWeakText
|
||||
.printText
|
||||
jp PrintText
|
||||
|
||||
GoText: ; 58eae (16:4eae)
|
||||
TX_FAR _GoText
|
||||
db $08 ; asm
|
||||
jr PrintPlayerMon1Text
|
||||
|
||||
DoItText: ; 58eb5 (16:4eb5)
|
||||
TX_FAR _DoItText
|
||||
db $08 ; asm
|
||||
jr PrintPlayerMon1Text
|
||||
|
||||
GetmText: ; 58ebc (16:4ebc)
|
||||
TX_FAR _GetmText
|
||||
db $08 ; asm
|
||||
jr PrintPlayerMon1Text
|
||||
|
||||
EnemysWeakText: ; 58ec3 (16:4ec3)
|
||||
TX_FAR _EnemysWeakText
|
||||
db $08 ; asm
|
||||
|
||||
PrintPlayerMon1Text:
|
||||
ld hl, PlayerMon1Text
|
||||
ret
|
||||
|
||||
PlayerMon1Text: ; 58ecc (16:4ecc)
|
||||
TX_FAR _PlayerMon1Text
|
||||
db "@"
|
||||
|
||||
RetreatMon: ; 58ed1 (16:4ed1)
|
||||
ld hl, PlayerMon2Text
|
||||
jp PrintText
|
||||
|
||||
PlayerMon2Text: ; 58ed7 (16:4ed7)
|
||||
TX_FAR _PlayerMon2Text
|
||||
db $08 ; asm
|
||||
push de
|
||||
push bc
|
||||
ld hl, $cfe7
|
||||
ld de, $cce4
|
||||
ld b, [hl]
|
||||
dec hl
|
||||
ld a, [de]
|
||||
sub b
|
||||
ld [$ff98], a
|
||||
dec de
|
||||
ld b, [hl]
|
||||
ld a, [de]
|
||||
sbc b
|
||||
ld [$ff97], a
|
||||
ld a, $19
|
||||
ld [H_POWEROFTEN], a
|
||||
call Multiply
|
||||
ld hl, W_ENEMYMONMAXHP
|
||||
ld a, [hli]
|
||||
ld b, [hl]
|
||||
srl a
|
||||
rr b
|
||||
srl a
|
||||
rr b
|
||||
ld a, b
|
||||
ld b, $4
|
||||
ld [H_POWEROFTEN], a
|
||||
call Divide
|
||||
pop bc
|
||||
pop de
|
||||
ld a, [$ff98]
|
||||
ld hl, EnoughText
|
||||
and a
|
||||
ret z
|
||||
ld hl, ComeBackText
|
||||
cp $1e
|
||||
ret c
|
||||
ld hl, OKExclamationText
|
||||
cp $46
|
||||
ret c
|
||||
ld hl, GoodText
|
||||
ret
|
||||
|
||||
EnoughText: ; 58f25 (16:4f25)
|
||||
TX_FAR _EnoughText
|
||||
db $08 ; asm
|
||||
jr PrintComeBackText
|
||||
|
||||
OKExclamationText: ; 58f2c (16:4f2c)
|
||||
TX_FAR _OKExclamationText
|
||||
db $08 ; asm
|
||||
jr PrintComeBackText
|
||||
|
||||
GoodText: ; 58f33 (16:4f33)
|
||||
TX_FAR _GoodText
|
||||
db $08 ; asm
|
||||
jr PrintComeBackText
|
||||
|
||||
PrintComeBackText: ; 58f3a (16:4f3a)
|
||||
ld hl, ComeBackText
|
||||
ret
|
||||
|
||||
ComeBackText: ; 58f3e (16:4f3e)
|
||||
TX_FAR _ComeBackText
|
||||
db "@"
|
40
engine/battle/1a.asm
Executable file
40
engine/battle/1a.asm
Executable file
|
@ -0,0 +1,40 @@
|
|||
DecrementPP: ; 68000 (1a:4000)
|
||||
; after using a move, decrement pp in battle and (if not transformed?) in party
|
||||
ld a, [de]
|
||||
cp a, STRUGGLE
|
||||
ret z ; if the pokemon is using "struggle", there's nothing to do
|
||||
; we don't decrement PP for "struggle"
|
||||
ld hl, W_PLAYERBATTSTATUS1
|
||||
ld a, [hli] ; load the W_PLAYERBATTSTATUS1 pokemon status flags and increment hl to load the
|
||||
; W_PLAYERBATTSTATUS2 status flags later
|
||||
and a, 7 ; check to see if bits 0, 1, or 2 are set
|
||||
ret nz ; if any of these statuses are true, don't decrement PP
|
||||
bit 6, [hl] ; check 6th bit status flag on W_PLAYERBATTSTATUS2
|
||||
ret nz ; and return if it is set
|
||||
ld hl, $D02D ; PP of first move (in battle)
|
||||
call .DecrementPP
|
||||
|
||||
ld a, [$D064] ; load pokemon status bits?
|
||||
bit 3, a ; XXX transform status?
|
||||
ret nz ; If it is, return. Pokemon Red stores the "current pokemon's" PP
|
||||
; separately from the "Pokemon in your party's" PP. This is
|
||||
; duplication -- in all cases *other* than Pokemon with Transform.
|
||||
; Normally, this means we have to go on and make the same
|
||||
; modification to the "party's pokemon" PP that we made to the
|
||||
; "current pokemon's" PP. But, if we're dealing with a Transformed
|
||||
; Pokemon, it has separate PP for the move set that it copied from
|
||||
; its opponent, which is *not* the same as its real PP as part of your
|
||||
; party. So we return, and don't do that part.
|
||||
|
||||
ld hl, $D188 ; PP of first move (in party)
|
||||
ld a, [$CC2F] ; which mon in party is active
|
||||
ld bc, $2C ; XXX probably size of party pokemon's data structure
|
||||
call AddNTimes ; calculate address of the mon to modify
|
||||
.DecrementPP
|
||||
ld a, [$CC2E] ; which move (0, 1, 2, 3) did we use?
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl ,bc ; calculate the address in memory of the PP we need to decrement
|
||||
; based on the move chosen.
|
||||
dec [hl] ; Decrement PP
|
||||
ret
|
911
engine/battle/1c.asm
Executable file
911
engine/battle/1c.asm
Executable file
|
@ -0,0 +1,911 @@
|
|||
Func_708ca: ; 708ca (1c:48ca)
|
||||
ld a, $e4
|
||||
ld [rOBP1], a ; $ff49
|
||||
call Func_7092a
|
||||
FuncCoord 12, 0 ; $c3ac
|
||||
ld hl, Coord
|
||||
ld bc, $707
|
||||
call ClearScreenArea
|
||||
call Delay3
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, $91
|
||||
ld [$cee9], a
|
||||
ld a, $1
|
||||
ld [H_WHOSETURN], a ; $fff3
|
||||
callab Func_79793
|
||||
ld d, $80
|
||||
call Func_704f3
|
||||
.asm_708f6
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
ld a, [rOBP1] ; $ff49
|
||||
sla a
|
||||
sla a
|
||||
ld [rOBP1], a ; $ff49
|
||||
jr nz, .asm_708f6
|
||||
call CleanLCD_OAM
|
||||
call Func_7092a
|
||||
ld b, $e4
|
||||
.asm_7090d
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
ld a, [rOBP1] ; $ff49
|
||||
srl b
|
||||
rra
|
||||
srl b
|
||||
rra
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld a, b
|
||||
and a
|
||||
jr nz, .asm_7090d
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
jp CleanLCD_OAM
|
||||
|
||||
Func_7092a: ; 7092a (1c:492a)
|
||||
ld de, $9000
|
||||
ld hl, $8000
|
||||
ld bc, $31
|
||||
call CopyVideoData
|
||||
ld a, $10
|
||||
ld [W_BASECOORDY], a ; $d082
|
||||
ld a, $70
|
||||
ld [W_BASECOORDX], a ; $d081
|
||||
ld hl, wOAMBuffer
|
||||
ld bc, $606
|
||||
ld d, $8
|
||||
.asm_70948
|
||||
push bc
|
||||
ld a, [W_BASECOORDY] ; $d082
|
||||
ld e, a
|
||||
.asm_7094d
|
||||
ld a, e
|
||||
add $8
|
||||
ld e, a
|
||||
ld [hli], a
|
||||
ld a, [W_BASECOORDX] ; $d081
|
||||
ld [hli], a
|
||||
ld a, d
|
||||
ld [hli], a
|
||||
ld a, $10
|
||||
ld [hli], a
|
||||
inc d
|
||||
dec c
|
||||
jr nz, .asm_7094d
|
||||
inc d
|
||||
ld a, [W_BASECOORDX] ; $d081
|
||||
add $8
|
||||
ld [W_BASECOORDX], a ; $d081
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .asm_70948
|
||||
ret
|
||||
|
||||
Func_7096d: ; 7096d (1c:496d)
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
xor a
|
||||
ld [$ffb0], a
|
||||
dec a
|
||||
ld [$cfcb], a
|
||||
call DelayFrame
|
||||
ld hl, $c102
|
||||
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld de, $10
|
||||
.asm_70989
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jr z, .asm_7098f
|
||||
inc b
|
||||
.asm_7098f
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_70989
|
||||
ld hl, $c310
|
||||
ld c, $9
|
||||
.asm_70998
|
||||
ld a, b
|
||||
swap a
|
||||
cp l
|
||||
jr z, .asm_709a9
|
||||
push hl
|
||||
push bc
|
||||
ld bc, $10
|
||||
xor a
|
||||
call FillMemory
|
||||
pop bc
|
||||
pop hl
|
||||
.asm_709a9
|
||||
ld de, $10
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_70998
|
||||
call Delay3
|
||||
call LoadBattleTransitionTile
|
||||
ld bc, $0
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $4
|
||||
jr z, .asm_709c9
|
||||
call Func_709e2
|
||||
call Func_709ef
|
||||
call Func_70a19
|
||||
.asm_709c9
|
||||
ld hl, PointerTable_709d2 ; $49d2
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp [hl]
|
||||
|
||||
PointerTable_709d2: ; 709d2 (1c:49d2)
|
||||
dw Func_70d24
|
||||
dw Func_70a72
|
||||
dw Func_70ce4
|
||||
dw Func_70a72
|
||||
dw Func_70cb4
|
||||
dw Func_70b7f
|
||||
dw Func_70c7e
|
||||
dw Func_70bca
|
||||
|
||||
Func_709e2: ; 709e2 (1c:49e2)
|
||||
ld a, [W_CUROPPONENT] ; $d059
|
||||
cp $c8
|
||||
jr nc, .asm_709ec
|
||||
res 0, c
|
||||
ret
|
||||
.asm_709ec
|
||||
set 0, c
|
||||
ret
|
||||
|
||||
Func_709ef: ; 709ef (1c:49ef)
|
||||
ld hl, W_PARTYMON1_HP ; $d16c
|
||||
.asm_709f2
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jr nz, .asm_709fc
|
||||
ld de, $2b
|
||||
add hl, de
|
||||
jr .asm_709f2
|
||||
.asm_709fc
|
||||
ld de, $1f
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
add $3
|
||||
ld e, a
|
||||
ld a, [W_CURENEMYLVL] ; $d127
|
||||
sub e
|
||||
jr nc, .asm_70a12
|
||||
res 1, c
|
||||
ld a, $1
|
||||
ld [$cd47], a
|
||||
ret
|
||||
.asm_70a12
|
||||
set 1, c
|
||||
xor a
|
||||
ld [$cd47], a
|
||||
ret
|
||||
|
||||
Func_70a19: ; 70a19 (1c:4a19)
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
ld e, a
|
||||
ld hl, MapIDList_70a3f ; $4a3f
|
||||
.asm_70a20
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_70a2b
|
||||
cp e
|
||||
jr nz, .asm_70a20
|
||||
.asm_70a28
|
||||
set 2, c
|
||||
ret
|
||||
.asm_70a2b
|
||||
ld hl, MapIDList_70a44 ; $4a44
|
||||
.asm_70a2e
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_70a3c
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
cp e
|
||||
jr c, .asm_70a2e
|
||||
ld a, e
|
||||
cp d
|
||||
jr nc, .asm_70a28
|
||||
.asm_70a3c
|
||||
res 2, c
|
||||
ret
|
||||
|
||||
; Func_70a19 checks if W_CURMAP is equal to one of these maps
|
||||
MapIDList_70a3f: ; 70a3f (1c:4a3f)
|
||||
db VIRIDIAN_FOREST
|
||||
db ROCK_TUNNEL_1
|
||||
db SEAFOAM_ISLANDS_1
|
||||
db ROCK_TUNNEL_2
|
||||
db $FF
|
||||
|
||||
; Func_70a19 checks if W_CURMAP is in between or equal to each pair of maps
|
||||
MapIDList_70a44: ; 70a44 (1c:4a44)
|
||||
; all MT_MOON maps
|
||||
db MT_MOON_1
|
||||
db MT_MOON_3
|
||||
|
||||
; all SS_ANNE maps, VICTORY_ROAD_1, LANCES_ROOM, and HALL_OF_FAME
|
||||
db SS_ANNE_1
|
||||
db HALL_OF_FAME
|
||||
|
||||
; all POKEMONTOWER maps and Lavender Town buildings
|
||||
db LAVENDER_POKECENTER
|
||||
db LAVENDER_HOUSE_2
|
||||
|
||||
; all SILPH_CO, MANSION, SAFARI_ZONE, and UNKNOWN_DUNGEON maps,
|
||||
; except for SILPH_CO_1F
|
||||
db SILPH_CO_2F
|
||||
db UNKNOWN_DUNGEON_1
|
||||
db $FF
|
||||
|
||||
LoadBattleTransitionTile: ; 70a4d (1c:4a4d)
|
||||
ld hl, $8ff0
|
||||
ld de, BattleTransitionTile ; $4a59
|
||||
ld bc, (BANK(BattleTransitionTile) << 8) + $01
|
||||
jp CopyVideoData
|
||||
|
||||
BattleTransitionTile: ; 70a59 (1c:4a59)
|
||||
INCBIN "gfx/battle_transition.2bpp"
|
||||
|
||||
Func_70a69: ; 70a69 (1c:4a69)
|
||||
ld a, $ff
|
||||
ld [rBGP], a ; $ff47
|
||||
ld [rOBP0], a ; $ff48
|
||||
ld [rOBP1], a ; $ff49
|
||||
ret
|
||||
|
||||
Func_70a72: ; 70a72 (1c:4a72)
|
||||
ld a, [$cd47]
|
||||
and a
|
||||
jr z, .asm_70a7d
|
||||
call Func_70aaa
|
||||
jr .asm_70a9f
|
||||
.asm_70a7d
|
||||
FuncCoord 10, 10 ; $c472
|
||||
ld hl, Coord
|
||||
ld a, $3
|
||||
ld [$d09f], a
|
||||
ld a, l
|
||||
ld [$d09b], a
|
||||
ld a, h
|
||||
ld [$d09a], a
|
||||
ld b, $78
|
||||
.asm_70a8f
|
||||
ld c, $3
|
||||
.asm_70a91
|
||||
push bc
|
||||
call Func_70af9
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70a91
|
||||
call DelayFrame
|
||||
dec b
|
||||
jr nz, .asm_70a8f
|
||||
.asm_70a9f
|
||||
call Func_70a69
|
||||
xor a
|
||||
ld [$d09b], a
|
||||
ld [$d09a], a
|
||||
ret
|
||||
|
||||
Func_70aaa: ; 70aaa (1c:4aaa)
|
||||
ld a, $7
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld hl, wTileMap
|
||||
ld c, $11
|
||||
ld de, $14
|
||||
call Func_70ae0
|
||||
inc c
|
||||
jr .asm_70ac3
|
||||
.asm_70abd
|
||||
ld de, $14
|
||||
call Func_70ae0
|
||||
.asm_70ac3
|
||||
inc c
|
||||
ld de, $1
|
||||
call Func_70ae0
|
||||
dec c
|
||||
dec c
|
||||
ld de, $ffec
|
||||
call Func_70ae0
|
||||
inc c
|
||||
ld de, rIE ; $ffff
|
||||
call Func_70ae0
|
||||
dec c
|
||||
dec c
|
||||
ld a, c
|
||||
and a
|
||||
jr nz, .asm_70abd
|
||||
ret
|
||||
|
||||
Func_70ae0: ; 70ae0 (1c:4ae0)
|
||||
push bc
|
||||
.asm_70ae1
|
||||
ld [hl], $ff
|
||||
add hl, de
|
||||
push bc
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
dec a
|
||||
jr nz, .asm_70af0
|
||||
call Func_70d19
|
||||
ld a, $7
|
||||
.asm_70af0
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70ae1
|
||||
pop bc
|
||||
ret
|
||||
|
||||
Func_70af9: ; 70af9 (1c:4af9)
|
||||
ld bc, $ffec
|
||||
ld de, $14
|
||||
ld a, [$d09b]
|
||||
ld l, a
|
||||
ld a, [$d09a]
|
||||
ld h, a
|
||||
ld a, [$d09f]
|
||||
cp $0
|
||||
jr z, .asm_70b25
|
||||
cp $1
|
||||
jr z, .asm_70b2f
|
||||
cp $2
|
||||
jr z, .asm_70b39
|
||||
cp $3
|
||||
jr z, .asm_70b43
|
||||
.asm_70b1a
|
||||
ld [hl], $ff
|
||||
.asm_70b1c
|
||||
ld a, l
|
||||
ld [$d09b], a
|
||||
ld a, h
|
||||
ld [$d09a], a
|
||||
ret
|
||||
.asm_70b25
|
||||
dec hl
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jr nz, .asm_70b4d
|
||||
inc hl
|
||||
add hl, bc
|
||||
jr .asm_70b1a
|
||||
.asm_70b2f
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jr nz, .asm_70b4d
|
||||
add hl, bc
|
||||
dec hl
|
||||
jr .asm_70b1a
|
||||
.asm_70b39
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jr nz, .asm_70b4d
|
||||
dec hl
|
||||
add hl, de
|
||||
jr .asm_70b1a
|
||||
.asm_70b43
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jr nz, .asm_70b4d
|
||||
add hl, de
|
||||
inc hl
|
||||
jr .asm_70b1a
|
||||
.asm_70b4d
|
||||
ld [hl], $ff
|
||||
ld a, [$d09f]
|
||||
inc a
|
||||
cp $4
|
||||
jr nz, .asm_70b58
|
||||
xor a
|
||||
.asm_70b58
|
||||
ld [$d09f], a
|
||||
jr .asm_70b1c
|
||||
|
||||
Func_70b5d: ; 70b5d (1c:4b5d)
|
||||
ld hl, DataTable_70b72 ; $4b72
|
||||
.asm_70b60
|
||||
ld a, [hli]
|
||||
cp $1
|
||||
jr z, .asm_70b6e
|
||||
ld [rBGP], a ; $ff47
|
||||
ld c, $2
|
||||
call DelayFrames
|
||||
jr .asm_70b60
|
||||
.asm_70b6e
|
||||
dec b
|
||||
jr nz, Func_70b5d
|
||||
ret
|
||||
|
||||
DataTable_70b72: ; 70b72 (1c:4b72)
|
||||
db $F9,$FE,$FF,$FE,$F9,$E4,$90,$40,$00,$40,$90,$E4
|
||||
db $01 ; terminator
|
||||
|
||||
Func_70b7f: ; 70b7f (1c:4b7f)
|
||||
ld c, $9
|
||||
.asm_70b81
|
||||
push bc
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
FuncCoord 0, 7 ; $c42c
|
||||
ld hl, Coord
|
||||
FuncCoord 0, 8 ; $c440
|
||||
ld de, Coord
|
||||
ld bc, $ffd8
|
||||
call Func_70c12
|
||||
FuncCoord 0, 10 ; $c468
|
||||
ld hl, Coord
|
||||
FuncCoord 0, 9 ; $c454
|
||||
ld de, Coord
|
||||
ld bc, $28
|
||||
call Func_70c12
|
||||
FuncCoord 8, 0 ; $c3a8
|
||||
ld hl, Coord
|
||||
FuncCoord 9, 0 ; $c3a9
|
||||
ld de, Coord
|
||||
ld bc, $fffe
|
||||
call Func_70c3f
|
||||
FuncCoord 11, 0 ; $c3ab
|
||||
ld hl, Coord
|
||||
FuncCoord 10, 0 ; $c3aa
|
||||
ld de, Coord
|
||||
ld bc, $2
|
||||
call Func_70c3f
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld c, $6
|
||||
call DelayFrames
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70b81
|
||||
call Func_70a69
|
||||
ld c, $a
|
||||
jp DelayFrames
|
||||
|
||||
Func_70bca: ; 70bca (1c:4bca)
|
||||
ld c, $9
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
.asm_70bcf
|
||||
push bc
|
||||
FuncCoord 0, 16 ; $c4e0
|
||||
ld hl, Coord
|
||||
FuncCoord 0, 17 ; $c4f4
|
||||
ld de, Coord
|
||||
ld bc, $ffd8
|
||||
call Func_70c12
|
||||
FuncCoord 0, 1 ; $c3b4
|
||||
ld hl, Coord
|
||||
ld de, wTileMap
|
||||
ld bc, $28
|
||||
call Func_70c12
|
||||
FuncCoord 18, 0 ; $c3b2
|
||||
ld hl, Coord
|
||||
FuncCoord 19, 0 ; $c3b3
|
||||
ld de, Coord
|
||||
ld bc, $fffe
|
||||
call Func_70c3f
|
||||
FuncCoord 1, 0 ; $c3a1
|
||||
ld hl, Coord
|
||||
ld de, wTileMap
|
||||
ld bc, $2
|
||||
call Func_70c3f
|
||||
call Func_70d19
|
||||
call Delay3
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70bcf
|
||||
call Func_70a69
|
||||
ld c, $a
|
||||
jp DelayFrames
|
||||
|
||||
Func_70c12: ; 70c12 (1c:4c12)
|
||||
ld a, c
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld a, b
|
||||
ld [$cd3e], a
|
||||
ld c, $8
|
||||
.asm_70c1c
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld bc, $14
|
||||
call CopyData
|
||||
pop hl
|
||||
pop de
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld c, a
|
||||
ld a, [$cd3e]
|
||||
ld b, a
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70c1c
|
||||
ld l, e
|
||||
ld h, d
|
||||
ld a, $ff
|
||||
ld c, $14
|
||||
.asm_70c3a
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_70c3a
|
||||
ret
|
||||
|
||||
Func_70c3f: ; 70c3f (1c:4c3f)
|
||||
ld a, c
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld a, b
|
||||
ld [$cd3e], a
|
||||
ld c, $9
|
||||
.asm_70c49
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld c, $12
|
||||
.asm_70c4e
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld a, e
|
||||
add $14
|
||||
jr nc, .asm_70c56
|
||||
inc d
|
||||
.asm_70c56
|
||||
ld e, a
|
||||
ld a, l
|
||||
add $14
|
||||
jr nc, .asm_70c5d
|
||||
inc h
|
||||
.asm_70c5d
|
||||
ld l, a
|
||||
dec c
|
||||
jr nz, .asm_70c4e
|
||||
pop hl
|
||||
pop de
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld c, a
|
||||
ld a, [$cd3e]
|
||||
ld b, a
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70c49
|
||||
ld l, e
|
||||
ld h, d
|
||||
ld de, $14
|
||||
ld c, $12
|
||||
.asm_70c77
|
||||
ld [hl], $ff
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_70c77
|
||||
ret
|
||||
|
||||
Func_70c7e: ; 70c7e (1c:4c7e)
|
||||
ld c, $12
|
||||
ld hl, wTileMap
|
||||
FuncCoord 1, 17 ; $c4f5
|
||||
ld de, Coord
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
.asm_70c89
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
push de
|
||||
call Func_70caa
|
||||
pop hl
|
||||
call Func_70caa
|
||||
call Func_70d19
|
||||
pop hl
|
||||
ld bc, $ffec
|
||||
add hl, bc
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
ld bc, $14
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70c89
|
||||
jp Func_70a69
|
||||
|
||||
Func_70caa: ; 70caa (1c:4caa)
|
||||
ld c, $a
|
||||
.asm_70cac
|
||||
ld [hl], $ff
|
||||
inc hl
|
||||
inc hl
|
||||
dec c
|
||||
jr nz, .asm_70cac
|
||||
ret
|
||||
|
||||
Func_70cb4: ; 70cb4 (1c:4cb4)
|
||||
ld c, $14
|
||||
ld hl, wTileMap
|
||||
FuncCoord 19, 1 ; $c3c7
|
||||
ld de, Coord
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
.asm_70cbf
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
push de
|
||||
call Func_70cd8
|
||||
pop hl
|
||||
call Func_70cd8
|
||||
call Func_70d19
|
||||
pop de
|
||||
pop hl
|
||||
pop bc
|
||||
inc hl
|
||||
dec de
|
||||
dec c
|
||||
jr nz, .asm_70cbf
|
||||
jp Func_70a69
|
||||
|
||||
Func_70cd8: ; 70cd8 (1c:4cd8)
|
||||
ld c, $9
|
||||
ld de, $28
|
||||
.asm_70cdd
|
||||
ld [hl], $ff
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_70cdd
|
||||
ret
|
||||
|
||||
Func_70ce4: ; 70ce4 (1c:4ce4)
|
||||
call Func_70cfd
|
||||
ld bc, $000a
|
||||
ld hl, Unknown_70d61
|
||||
call Func_70d06
|
||||
ld c, $a
|
||||
ld b, $1
|
||||
ld hl, Unknown_70d93
|
||||
call Func_70d06
|
||||
jp Func_70a69
|
||||
|
||||
Func_70cfd: ; 70cfd (1c:4cfd)
|
||||
ld b, $3
|
||||
call Func_70b5d
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ret
|
||||
|
||||
Func_70d06: ; 70d06 (1c:4d06)
|
||||
push bc
|
||||
push hl
|
||||
ld a, b
|
||||
call Func_70d50
|
||||
pop hl
|
||||
ld bc, $0005
|
||||
add hl, bc
|
||||
call Func_70d19
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, Func_70d06
|
||||
ret
|
||||
|
||||
Func_70d19: ; 70d19 (1c:4d19)
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ret
|
||||
|
||||
Func_70d24: ; 70d24 (1c:4d24)
|
||||
call Func_70cfd
|
||||
ld c, $a
|
||||
ld hl, Unknown_70d61 ; $4d61
|
||||
ld de, Unknown_70d93 ; $4d93
|
||||
.asm_70d2f
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
push de
|
||||
xor a
|
||||
call Func_70d50
|
||||
pop hl
|
||||
ld a, $1
|
||||
call Func_70d50
|
||||
pop hl
|
||||
ld bc, $5
|
||||
add hl, bc
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
add hl, bc
|
||||
call Func_70d19
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_70d2f
|
||||
jp Func_70a69
|
||||
|
||||
Func_70d50: ; 70d50 (1c:4d50)
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld a, [hli]
|
||||
ld [$cd3e], a
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp Func_70dc5
|
||||
|
||||
Unknown_70d61: ; 70d61 (1c:4d61)
|
||||
db $01
|
||||
dw Unknown_70dfe
|
||||
FuncCoord 18, 6
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e04
|
||||
FuncCoord 19, 3
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e0e
|
||||
FuncCoord 18, 0
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e20
|
||||
FuncCoord 14, 0
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e2e
|
||||
FuncCoord 10, 0
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e2e
|
||||
FuncCoord 9, 0
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e20
|
||||
FuncCoord 5, 0
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e0e
|
||||
FuncCoord 1, 0
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e04
|
||||
FuncCoord 0, 3
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70dfe
|
||||
FuncCoord 1, 6
|
||||
dw Coord
|
||||
|
||||
Unknown_70d93: ; 70d93 (1c:4d93)
|
||||
db $00
|
||||
dw Unknown_70dfe
|
||||
FuncCoord 1, 11
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e04
|
||||
FuncCoord 0, 14
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e0e
|
||||
FuncCoord 1, 17
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e20
|
||||
FuncCoord 5, 17
|
||||
dw Coord
|
||||
|
||||
db $00
|
||||
dw Unknown_70e2e
|
||||
FuncCoord 9, 17
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e2e
|
||||
FuncCoord 10, 17
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e20
|
||||
FuncCoord 14, 17
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e0e
|
||||
FuncCoord 18, 17
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70e04
|
||||
FuncCoord 19, 14
|
||||
dw Coord
|
||||
|
||||
db $01
|
||||
dw Unknown_70dfe
|
||||
FuncCoord 18, 11
|
||||
dw Coord
|
||||
|
||||
Func_70dc5: ; 70dc5 (1c:4dc5)
|
||||
push hl
|
||||
ld a, [de]
|
||||
ld c, a
|
||||
inc de
|
||||
.asm_70dc9
|
||||
ld [hl], $ff
|
||||
ld a, [$cd3e]
|
||||
and a
|
||||
jr z, .asm_70dd4
|
||||
inc hl
|
||||
jr .asm_70dd5
|
||||
.asm_70dd4
|
||||
dec hl
|
||||
.asm_70dd5
|
||||
dec c
|
||||
jr nz, .asm_70dc9
|
||||
pop hl
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
and a
|
||||
ld bc, $14
|
||||
jr z, .asm_70de5
|
||||
ld bc, $ffec
|
||||
.asm_70de5
|
||||
add hl, bc
|
||||
ld a, [de]
|
||||
inc de
|
||||
cp $ff
|
||||
ret z
|
||||
and a
|
||||
jr z, Func_70dc5
|
||||
ld c, a
|
||||
.asm_70def
|
||||
ld a, [$cd3e]
|
||||
and a
|
||||
jr z, .asm_70df8
|
||||
dec hl
|
||||
jr .asm_70df9
|
||||
.asm_70df8
|
||||
inc hl
|
||||
.asm_70df9
|
||||
dec c
|
||||
jr nz, .asm_70def
|
||||
jr Func_70dc5
|
||||
|
||||
Unknown_70dfe: ; 70dfe (1c:4dfe)
|
||||
db $02,$03,$05,$04,$09,$FF
|
||||
|
||||
Unknown_70e04: ; 70e04 (1c:4e04)
|
||||
db $01,$01,$02,$02,$04,$02,$04,$02,$03,$FF
|
||||
|
||||
Unknown_70e0e: ; 70e0e (1c:4e0e)
|
||||
db $02,$01,$03,$01,$04,$01,$04,$01,$04,$01,$03,$01,$02,$01,$01,$01,$01,$FF
|
||||
|
||||
Unknown_70e20: ; 70e20 (1c:4e20)
|
||||
db $04,$01,$04,$00,$03,$01,$03,$00,$02,$01,$02,$00,$01,$FF
|
||||
|
||||
Unknown_70e2e: ; 70e2e (1c:4e2e)
|
||||
db $04,$00,$03,$00,$03,$00,$02,$00,$02,$00,$01,$00,$01,$00,$01,$FF
|
78
engine/battle/4.asm
Executable file
78
engine/battle/4.asm
Executable file
|
@ -0,0 +1,78 @@
|
|||
Func_128d8: ; 128d8 (4:68d8)
|
||||
ld a, [W_YCOORD] ; $d361
|
||||
ld b, a
|
||||
ld a, [W_CURMAPHEIGHT] ; $d368
|
||||
call Func_128ea
|
||||
ret z
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
ld b, a
|
||||
ld a, [W_CURMAPWIDTH] ; $d369
|
||||
|
||||
Func_128ea: ; 128ea (4:68ea)
|
||||
add a
|
||||
cp b
|
||||
ret z
|
||||
inc b
|
||||
ret
|
||||
|
||||
Func_128ef: ; 128ef (4:68ef)
|
||||
call Load16BitRegisters
|
||||
ld a, $1
|
||||
jr asm_128fb
|
||||
|
||||
Func_128f6: ; 128f6 (4:68f6)
|
||||
call Load16BitRegisters
|
||||
ld a, $2
|
||||
asm_128fb: ; 128fb (4:68fb)
|
||||
ld [wListMenuID], a ; $cf94
|
||||
push hl
|
||||
ld a, [$cf99]
|
||||
ld b, a
|
||||
ld a, [$cf9a]
|
||||
ld c, a
|
||||
or b
|
||||
jr nz, .asm_12913
|
||||
xor a
|
||||
ld c, a
|
||||
ld e, a
|
||||
ld a, $6
|
||||
ld d, a
|
||||
jp Func_12924
|
||||
.asm_12913
|
||||
ld a, [$cfba]
|
||||
ld d, a
|
||||
ld a, [$cfbb]
|
||||
ld e, a
|
||||
ld a, $26
|
||||
call Predef ; indirect jump to UpdateHPBar_LoadRegisters (f9dc (3:79dc))
|
||||
ld a, $6
|
||||
ld d, a
|
||||
ld c, a
|
||||
|
||||
Func_12924: ; 12924 (4:6924)
|
||||
pop hl
|
||||
push de
|
||||
push hl
|
||||
push hl
|
||||
call DrawHPBar
|
||||
pop hl
|
||||
ld a, [$fff6]
|
||||
bit 0, a
|
||||
jr z, .asm_12937
|
||||
ld bc, $9
|
||||
jr .asm_1293a
|
||||
.asm_12937
|
||||
ld bc, $15
|
||||
.asm_1293a
|
||||
add hl, bc
|
||||
ld de, $cf99
|
||||
ld bc, $203
|
||||
call PrintNumber
|
||||
ld a, "/"
|
||||
ld [hli], a
|
||||
ld de, $cfba
|
||||
ld bc, $203
|
||||
call PrintNumber
|
||||
pop hl
|
||||
pop de
|
||||
ret
|
409
engine/battle/4_2.asm
Executable file
409
engine/battle/4_2.asm
Executable file
|
@ -0,0 +1,409 @@
|
|||
Func_137aa: ; 137aa (4:77aa)
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $4
|
||||
jr nz, .asm_137eb
|
||||
ld a, [W_ENEMYMONNUMBER] ; $cfe8
|
||||
ld hl, $d8a8
|
||||
ld bc, $2c
|
||||
call AddNTimes
|
||||
ld a, [W_ENEMYMONSTATUS] ; $cfe9
|
||||
ld [hl], a
|
||||
call ClearScreen
|
||||
callab Func_372d6
|
||||
ld a, [$cf0b]
|
||||
cp $1
|
||||
ld de, YouWinText
|
||||
jr c, .asm_137de
|
||||
ld de, YouLoseText
|
||||
jr z, .asm_137de
|
||||
ld de, DrawText
|
||||
.asm_137de
|
||||
FuncCoord 6, 8 ; $c446
|
||||
ld hl, Coord
|
||||
call PlaceString
|
||||
ld c, $c8
|
||||
call DelayFrames
|
||||
jr .asm_1380a
|
||||
.asm_137eb
|
||||
ld a, [$cf0b]
|
||||
and a
|
||||
jr nz, .asm_13813
|
||||
ld hl, $cce5
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
inc hl
|
||||
or [hl]
|
||||
jr z, .asm_1380a
|
||||
ld de, wPlayerMoney + 2 ; $d349
|
||||
ld c, $3
|
||||
ld a, $b
|
||||
call Predef ; indirect jump to Func_f81d (f81d (3:781d))
|
||||
ld hl, PickUpPayDayMoneyText
|
||||
call PrintText
|
||||
.asm_1380a
|
||||
xor a
|
||||
ld [$ccd4], a
|
||||
ld a, $2a
|
||||
call Predef ; indirect jump to Func_3ad1c (3ad1c (e:6d1c))
|
||||
.asm_13813
|
||||
xor a
|
||||
ld [$d083], a
|
||||
ld [$c02a], a
|
||||
ld [W_ISINBATTLE], a ; $d057
|
||||
ld [W_BATTLETYPE], a ; $d05a
|
||||
ld [W_MOVEMISSED], a ; $d05f
|
||||
ld [W_CUROPPONENT], a ; $d059
|
||||
ld [$d11f], a
|
||||
ld [$d120], a
|
||||
ld [$d078], a
|
||||
ld hl, $cc2b
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld hl, $d060
|
||||
ld b, $18
|
||||
.asm_1383e
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_1383e
|
||||
ld hl, $d72c
|
||||
set 0, [hl]
|
||||
call WaitForSoundToFinish
|
||||
call GBPalWhiteOut
|
||||
ld a, $ff
|
||||
ld [$d42f], a
|
||||
ret
|
||||
|
||||
YouWinText: ; 13853 (4:7853)
|
||||
db "YOU WIN@"
|
||||
|
||||
YouLoseText: ; 1385b (4:785b)
|
||||
db "YOU LOSE@"
|
||||
|
||||
DrawText: ; 13864 (4:7864)
|
||||
db " DRAW@"
|
||||
|
||||
PickUpPayDayMoneyText: ; 1386b (4:786b)
|
||||
TX_FAR _PickUpPayDayMoneyText
|
||||
db "@"
|
||||
|
||||
Func_13870: ; 13870 (4:7870)
|
||||
ld a, [$cc57]
|
||||
and a
|
||||
ret nz
|
||||
ld a, [$d736]
|
||||
and a
|
||||
ret nz
|
||||
callab Func_c49d
|
||||
jr nc, .asm_13888
|
||||
.asm_13884
|
||||
ld a, $1
|
||||
and a
|
||||
ret
|
||||
.asm_13888
|
||||
callab Func_128d8
|
||||
jr z, .asm_13884
|
||||
ld a, [$d0db]
|
||||
and a
|
||||
jr z, .asm_1389e
|
||||
dec a
|
||||
jr z, .asm_13905
|
||||
ld [$d0db], a
|
||||
.asm_1389e
|
||||
FuncCoord 9, 9 ; $c45d
|
||||
ld hl, Coord
|
||||
ld c, [hl]
|
||||
ld a, [W_GRASSTILE]
|
||||
cp c
|
||||
ld a, [W_GRASSRATE] ; $d887
|
||||
jr z, .asm_138c4
|
||||
ld a, $14
|
||||
cp c
|
||||
ld a, [W_WATERRATE] ; $d8a4
|
||||
jr z, .asm_138c4
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp REDS_HOUSE_1F
|
||||
jr c, .asm_13912
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
cp FOREST ; Viridian Forest/Safari Zone
|
||||
jr z, .asm_13912
|
||||
ld a, [W_GRASSRATE] ; $d887
|
||||
.asm_138c4
|
||||
ld b, a
|
||||
ld a, [H_RAND1] ; $ffd3
|
||||
cp b
|
||||
jr nc, .asm_13912
|
||||
ld a, [H_RAND2] ; $ffd4
|
||||
ld b, a
|
||||
ld hl, WildMonEncounterSlotChances ; $7918
|
||||
.asm_138d0
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nc, .asm_138d7
|
||||
inc hl
|
||||
jr .asm_138d0
|
||||
.asm_138d7
|
||||
ld c, [hl]
|
||||
ld hl, W_GRASSMONS ; $d888
|
||||
FuncCoord 8, 9 ; $c45c
|
||||
ld a, [Coord]
|
||||
cp $14
|
||||
jr nz, .asm_138e5
|
||||
ld hl, W_WATERMONS ; $d8a5 (aliases: W_ENEMYMON1HP)
|
||||
.asm_138e5
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [W_CURENEMYLVL], a ; $d127
|
||||
ld a, [hl]
|
||||
ld [$cf91], a
|
||||
ld [W_ENEMYMONID], a
|
||||
ld a, [$d0db]
|
||||
and a
|
||||
jr z, .asm_13916
|
||||
ld a, [W_PARTYMON1_LEVEL] ; $d18c
|
||||
ld b, a
|
||||
ld a, [W_CURENEMYLVL] ; $d127
|
||||
cp b
|
||||
jr c, .asm_13912
|
||||
jr .asm_13916
|
||||
.asm_13905
|
||||
ld [$d0db], a
|
||||
ld a, $d2
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call EnableAutoTextBoxDrawing
|
||||
call DisplayTextID
|
||||
.asm_13912
|
||||
ld a, $1
|
||||
and a
|
||||
ret
|
||||
.asm_13916
|
||||
xor a
|
||||
ret
|
||||
|
||||
WildMonEncounterSlotChances: ; 13918 (4:7918)
|
||||
; There are 10 slots for wild pokemon, and this is the table that defines how common each of
|
||||
; those 10 slots is. A random number is generated and then the first byte of each pair in this
|
||||
; table is compared against that random number. If the random number is less than or equal
|
||||
; to the first byte, then that slot is chosen. The second byte is double the slot number.
|
||||
db $32, $00 ; 51/256 = 19.9% chance of slot 0
|
||||
db $65, $02 ; 51/256 = 19.9% chance of slot 1
|
||||
db $8C, $04 ; 39/256 = 15.2% chance of slot 2
|
||||
db $A5, $06 ; 25/256 = 9.8% chance of slot 3
|
||||
db $BE, $08 ; 25/256 = 9.8% chance of slot 4
|
||||
db $D7, $0A ; 25/256 = 9.8% chance of slot 5
|
||||
db $E4, $0C ; 13/256 = 5.1% chance of slot 6
|
||||
db $F1, $0E ; 13/256 = 5.1% chance of slot 7
|
||||
db $FC, $10 ; 11/256 = 4.3% chance of slot 8
|
||||
db $FF, $12 ; 3/256 = 1.2% chance of slot 9
|
||||
|
||||
RecoilEffect_: ; 1392c (4:792c)
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
ld a, [W_PLAYERMOVENUM] ; $cfd2
|
||||
ld hl, W_PLAYERMONMAXHP ; $d023
|
||||
jr z, .asm_1393d
|
||||
ld a, [W_ENEMYMOVENUM] ; $cfcc
|
||||
ld hl, W_ENEMYMONMAXHP ; $cff4
|
||||
.asm_1393d
|
||||
ld d, a
|
||||
ld a, [W_DAMAGE] ; $d0d7
|
||||
ld b, a
|
||||
ld a, [W_DAMAGE + 1]
|
||||
ld c, a
|
||||
srl b
|
||||
rr c
|
||||
ld a, d
|
||||
cp STRUGGLE
|
||||
jr z, .asm_13953
|
||||
srl b
|
||||
rr c
|
||||
.asm_13953
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_13958
|
||||
inc c
|
||||
.asm_13958
|
||||
ld a, [hli]
|
||||
ld [wHPBarMaxHP+1], a
|
||||
ld a, [hl]
|
||||
ld [wHPBarMaxHP], a
|
||||
push bc
|
||||
ld bc, $fff2
|
||||
add hl, bc
|
||||
pop bc
|
||||
ld a, [hl]
|
||||
ld [wHPBarOldHP], a
|
||||
sub c
|
||||
ld [hld], a
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, [hl]
|
||||
ld [wHPBarOldHP+1], a
|
||||
sbc b
|
||||
ld [hl], a
|
||||
ld [wHPBarNewHP+1], a
|
||||
jr nc, .asm_13982
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld hl, wHPBarNewHP
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
.asm_13982
|
||||
FuncCoord 10, 9 ; $c45e
|
||||
ld hl, Coord
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
ld a, $1
|
||||
jr z, .asm_13990
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
xor a
|
||||
.asm_13990
|
||||
ld [wListMenuID], a ; $cf94
|
||||
ld a, $48
|
||||
call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d))
|
||||
ld hl, HitWithRecoilText ; $799e
|
||||
jp PrintText
|
||||
HitWithRecoilText: ; 1399e (4:799e)
|
||||
TX_FAR _HitWithRecoilText
|
||||
db "@"
|
||||
|
||||
ConversionEffect_: ; 139a3 (4:79a3)
|
||||
ld hl, W_ENEMYMONTYPE1
|
||||
ld de, W_PLAYERMONTYPE1
|
||||
ld a, [H_WHOSETURN]
|
||||
and a
|
||||
ld a, [W_ENEMYBATTSTATUS1]
|
||||
jr z, .asm_139b8
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
pop de
|
||||
ld a, [W_PLAYERBATTSTATUS1]
|
||||
.asm_139b8
|
||||
bit 6, a ; is mon immune to typical attacks (dig/fly)
|
||||
jr nz, PrintButItFailedText
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld hl, Func_3fba8
|
||||
call Func_139d5
|
||||
ld hl, ConvertedTypeText
|
||||
jp PrintText
|
||||
|
||||
ConvertedTypeText: ; 139cd (4:79cd)
|
||||
TX_FAR _ConvertedTypeText
|
||||
db "@"
|
||||
|
||||
PrintButItFailedText: ; 139d2 (4:79d2)
|
||||
ld hl, PrintButItFailedText_
|
||||
Func_139d5: ; 139d5 (4:79d5)
|
||||
ld b, BANK(PrintButItFailedText_)
|
||||
jp Bankswitch
|
||||
|
||||
HazeEffect_: ; 139da (4:79da)
|
||||
ld a, $7
|
||||
ld hl, wPlayerMonAttackMod
|
||||
call Func_13a43
|
||||
ld hl, wEnemyMonAttackMod
|
||||
call Func_13a43
|
||||
ld hl, $cd12
|
||||
ld de, W_PLAYERMONATK
|
||||
call Func_13a4a
|
||||
ld hl, $cd26
|
||||
ld de, W_ENEMYMONATTACK
|
||||
call Func_13a4a
|
||||
ld hl, W_ENEMYMONSTATUS
|
||||
ld de, wEnemySelectedMove
|
||||
ld a, [H_WHOSETURN]
|
||||
and a
|
||||
jr z, .asm_13a09
|
||||
ld hl, W_PLAYERMONSTATUS
|
||||
dec de
|
||||
|
||||
.asm_13a09
|
||||
ld a, [hl]
|
||||
ld [hl], $0
|
||||
and $27
|
||||
jr z, .asm_13a13
|
||||
ld a, $ff
|
||||
ld [de], a
|
||||
|
||||
.asm_13a13
|
||||
xor a
|
||||
ld [W_PLAYERDISABLEDMOVE], a
|
||||
ld [W_ENEMYDISABLEDMOVE], a
|
||||
ld hl, $ccee
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld hl, W_PLAYERBATTSTATUS1
|
||||
call Func_13a37
|
||||
ld hl, W_ENEMYBATTSTATUS1
|
||||
call Func_13a37
|
||||
ld hl, Func_3fba8
|
||||
call Func_139d5
|
||||
ld hl, StatusChangesEliminatedText
|
||||
jp PrintText
|
||||
|
||||
Func_13a37: ; 13a37 (4:7a37)
|
||||
res 7, [hl]
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
and $78
|
||||
ld [hli], a
|
||||
ld a, [hl]
|
||||
and $f8
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Func_13a43: ; 13a43 (4:7a43)
|
||||
ld b, $8
|
||||
.loop
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
Func_13a4a: ; 13a4a (4:7a4a)
|
||||
ld b, $8
|
||||
.loop
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
StatusChangesEliminatedText: ; 13a53 (4:7a53)
|
||||
TX_FAR _StatusChangesEliminatedText
|
||||
db "@"
|
||||
|
||||
GetTrainerName_: ; 13a58 (4:7a58)
|
||||
ld hl, W_GRASSRATE ; $d887
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
and a
|
||||
jr nz, .rival
|
||||
ld hl, W_RIVALNAME ; $d34a
|
||||
ld a, [W_TRAINERCLASS] ; $d031
|
||||
cp SONY1
|
||||
jr z, .rival
|
||||
cp SONY2
|
||||
jr z, .rival
|
||||
cp SONY3
|
||||
jr z, .rival
|
||||
ld [$d0b5], a
|
||||
ld a, TRAINER_NAME
|
||||
ld [W_LISTTYPE], a
|
||||
ld a, $e
|
||||
ld [$d0b7], a
|
||||
call GetName
|
||||
ld hl, $cd6d
|
||||
.rival
|
||||
ld de, W_TRAINERNAME
|
||||
ld bc, $d
|
||||
jp CopyData
|
77
engine/battle/5.asm
Executable file
77
engine/battle/5.asm
Executable file
|
@ -0,0 +1,77 @@
|
|||
SubstituteEffectHandler: ; 17dad (5:7dad)
|
||||
ld c, 50
|
||||
call DelayFrames
|
||||
ld hl, W_PLAYERMONMAXHP
|
||||
ld de, wPlayerSubstituteHP
|
||||
ld bc, W_PLAYERBATTSTATUS2
|
||||
ld a, [$fff3] ;whose turn?
|
||||
and a
|
||||
jr z, .notEnemy
|
||||
ld hl, W_ENEMYMONMAXHP
|
||||
ld de, wEnemySubstituteHP
|
||||
ld bc, W_ENEMYBATTSTATUS2
|
||||
.notEnemy
|
||||
ld a, [bc] ;load flags
|
||||
bit 4, a ;user already has substitute?
|
||||
jr nz, .alreadyHasSubstitute ;skip this code if so
|
||||
;user doesn't have a substitute [yet]
|
||||
push bc
|
||||
ld a, [hli] ;load max hp
|
||||
ld b, [hl]
|
||||
srl a ;max hp / 4, [quarter health to remove from user]
|
||||
rr b
|
||||
srl a
|
||||
rr b
|
||||
push de
|
||||
ld de, $fff2 ;subtract 8 to point to [current hp] instead of [max hp]
|
||||
add hl, de ;HL -= 8
|
||||
pop de
|
||||
ld a, b
|
||||
ld [de], a ;save copy of HP to subtract in ccd7/ccd8 [how much HP substitute has]
|
||||
ld a, [hld] ;load current hp
|
||||
sub b ;subtract [max hp / 4]
|
||||
ld d, a ;save low byte result in D
|
||||
ld a, [hl]
|
||||
sbc a, 0 ;borrow from high byte if needed
|
||||
pop bc
|
||||
jr c, .notEnoughHP ;underflow means user would be left with negative health
|
||||
;bug: note since it only brances on carry, it will possibly leave user with 0HP
|
||||
.userHasZeroOrMoreHP
|
||||
ldi [hl], a ;store high byte HP
|
||||
ld [hl], d ;store low byte HP
|
||||
ld h, b
|
||||
ld l, c
|
||||
set 4, [hl] ;set bit 4 of flags, user now has substitute
|
||||
ld a, [$d355] ;load options
|
||||
bit 7, a ;battle animation is enabled?
|
||||
ld hl, Func_3fba8 ; $7ba8 ;animation enabled: 0F:7BA8
|
||||
ld b, BANK(Func_3fba8)
|
||||
jr z, .animationEnabled
|
||||
ld hl, AnimationSubstitute ;animation disabled: 1E:56E0
|
||||
ld b, BANK(AnimationSubstitute)
|
||||
.animationEnabled
|
||||
call Bankswitch ;jump to routine depending on animation setting
|
||||
ld hl, SubstituteText
|
||||
call PrintText
|
||||
ld hl, Func_3cd5a
|
||||
ld b, BANK(Func_3cd5a)
|
||||
jp Bankswitch
|
||||
.alreadyHasSubstitute
|
||||
ld hl, HasSubstituteText
|
||||
jr .printText
|
||||
.notEnoughHP
|
||||
ld hl, TooWeakSubstituteText
|
||||
.printText
|
||||
jp PrintText
|
||||
|
||||
SubstituteText: ; 17e1d (5:7e1d)
|
||||
TX_FAR _SubstituteText
|
||||
db "@"
|
||||
|
||||
HasSubstituteText: ; 17e22 (5:7e22)
|
||||
TX_FAR _HasSubstituteText
|
||||
db "@"
|
||||
|
||||
TooWeakSubstituteText: ; 17e27 (5:7e27)
|
||||
TX_FAR _TooWeakSubstituteText
|
||||
db "@"
|
182
engine/battle/9.asm
Executable file
182
engine/battle/9.asm
Executable file
|
@ -0,0 +1,182 @@
|
|||
Func_27d6b: ; 27d6b (9:7d6b)
|
||||
call Load16BitRegisters
|
||||
push hl
|
||||
call GetMonHeader
|
||||
pop hl
|
||||
push hl
|
||||
ld a, [W_MONHTYPE1]
|
||||
call Func_27d89
|
||||
ld a, [W_MONHTYPE1]
|
||||
ld b, a
|
||||
ld a, [W_MONHTYPE2]
|
||||
cp b
|
||||
pop hl
|
||||
jr z, asm_27d8c
|
||||
ld bc, $28
|
||||
add hl, bc
|
||||
|
||||
Func_27d89: ; 27d89 (9:7d89)
|
||||
push hl
|
||||
jr asm_27d9f
|
||||
asm_27d8c: ; 27d8c (9:7d8c)
|
||||
ld a, $7f
|
||||
ld bc, $13
|
||||
add hl, bc
|
||||
ld bc, $6
|
||||
jp FillMemory
|
||||
|
||||
Func_27d98: ; 27d98 (9:7d98)
|
||||
call Load16BitRegisters
|
||||
push hl
|
||||
ld a, [W_PLAYERMOVETYPE] ; $cfd5
|
||||
asm_27d9f: ; 27d9f (9:7d9f)
|
||||
add a
|
||||
ld hl, TypeNamePointers ; $7dae
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
jp PlaceString
|
||||
|
||||
INCLUDE "text/type_names.asm"
|
||||
|
||||
SaveTrainerName: ; 27e4a (9:7e4a)
|
||||
ld hl,TrainerNamePointers
|
||||
ld a,[W_TRAINERCLASS]
|
||||
dec a
|
||||
ld c,a
|
||||
ld b,0
|
||||
add hl,bc
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld de,$CD6D
|
||||
.CopyCharacter
|
||||
ld a,[hli]
|
||||
ld [de],a
|
||||
inc de
|
||||
cp "@"
|
||||
jr nz,.CopyCharacter
|
||||
ret
|
||||
|
||||
TrainerNamePointers: ; 27e64 (9:7e64)
|
||||
; what is the point of these?
|
||||
dw YoungsterName
|
||||
dw BugCatcherName
|
||||
dw LassName
|
||||
dw W_TRAINERNAME
|
||||
dw JrTrainerMName
|
||||
dw JrTrainerFName
|
||||
dw PokemaniacName
|
||||
dw SuperNerdName
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw BurglarName
|
||||
dw EngineerName
|
||||
dw JugglerXName
|
||||
dw W_TRAINERNAME
|
||||
dw SwimmerName
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw BeautyName
|
||||
dw W_TRAINERNAME
|
||||
dw RockerName
|
||||
dw JugglerName
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw BlackbeltName
|
||||
dw W_TRAINERNAME
|
||||
dw ProfOakName
|
||||
dw ChiefName
|
||||
dw ScientistName
|
||||
dw W_TRAINERNAME
|
||||
dw RocketName
|
||||
dw CooltrainerMName
|
||||
dw CooltrainerFName
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
dw W_TRAINERNAME
|
||||
|
||||
YoungsterName: ; 27ec2 (9:7ec2)
|
||||
db "YOUNGSTER@"
|
||||
BugCatcherName: ; 27ecc (9:7ecc)
|
||||
db "BUG CATCHER@"
|
||||
LassName: ; 27ed8 (9:7ed8)
|
||||
db "LASS@"
|
||||
JrTrainerMName: ; 27edd (9:7edd)
|
||||
db "JR.TRAINER♂@"
|
||||
JrTrainerFName: ; 27ee9 (9:7ee9)
|
||||
db "JR.TRAINER♀@"
|
||||
PokemaniacName: ; 27ef5 (9:7ef5)
|
||||
db "POKéMANIAC@"
|
||||
SuperNerdName: ; 27f00 (9:7f00)
|
||||
db "SUPER NERD@"
|
||||
BurglarName: ; 27f0b (9:7f0b)
|
||||
db "BURGLAR@"
|
||||
EngineerName: ; 27f13 (9:7f13)
|
||||
db "ENGINEER@"
|
||||
JugglerXName: ; 27f1c (9:7f1c)
|
||||
db "JUGGLER@"
|
||||
SwimmerName: ; 27f24 (9:7f24)
|
||||
db "SWIMMER@"
|
||||
BeautyName: ; 27f2c (9:7f2c)
|
||||
db "BEAUTY@"
|
||||
RockerName: ; 27f33 (9:7f33)
|
||||
db "ROCKER@"
|
||||
JugglerName: ; 27f3a (9:7f3a)
|
||||
db "JUGGLER@"
|
||||
BlackbeltName: ; 27f42 (9:7f42)
|
||||
db "BLACKBELT@"
|
||||
ProfOakName: ; 27f4c (9:7f4c)
|
||||
db "PROF.OAK@"
|
||||
ChiefName: ; 27f55 (9:7f55)
|
||||
db "CHIEF@"
|
||||
ScientistName: ; 27f5b (9:7f5b)
|
||||
db "SCIENTIST@"
|
||||
RocketName: ; 27f65 (9:7f65)
|
||||
db "ROCKET@"
|
||||
CooltrainerMName: ; 27f6c (9:7f6c)
|
||||
db "COOLTRAINER♂@"
|
||||
CooltrainerFName: ; 27f79 (9:7f79)
|
||||
db "COOLTRAINER♀@"
|
||||
|
||||
FocusEnergyEffect_: ; 27f86 (9:7f86)
|
||||
ld hl, W_PLAYERBATTSTATUS2 ; $d063
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_27f91
|
||||
ld hl, W_ENEMYBATTSTATUS2 ; $d068
|
||||
.asm_27f91
|
||||
bit 2, [hl] ; is mon already using focus energy?
|
||||
jr nz, .asm_27fa5
|
||||
set 2, [hl] ; mon is now using focus energy
|
||||
callab Func_3fba8
|
||||
ld hl, GettingPumpedText ; $7fb2
|
||||
jp PrintText
|
||||
.asm_27fa5
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, PrintButItFailedText_
|
||||
ld b, BANK(PrintButItFailedText_)
|
||||
jp Bankswitch
|
||||
|
||||
GettingPumpedText: ; 27fb3 (9:7fb3)
|
||||
db $0a
|
||||
TX_FAR _GettingPumpedText
|
||||
db "@"
|
39
engine/battle/a.asm
Executable file
39
engine/battle/a.asm
Executable file
|
@ -0,0 +1,39 @@
|
|||
LeechSeedEffect_: ; 2bea9 (a:7ea9)
|
||||
callab MoveHitTest
|
||||
ld a, [W_MOVEMISSED] ; $d05f
|
||||
and a
|
||||
jr nz, .asm_2bee7
|
||||
ld hl, W_ENEMYBATTSTATUS2 ; $d068
|
||||
ld de, W_ENEMYMONTYPE1 ; $cfea (aliases: W_ENEMYMONTYPES)
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_2bec8
|
||||
ld hl, W_PLAYERBATTSTATUS2 ; $d063
|
||||
ld de, W_PLAYERMONTYPE1 ; $d019 (aliases: W_PLAYERMONTYPES)
|
||||
.asm_2bec8
|
||||
ld a, [de]
|
||||
cp GRASS
|
||||
jr z, .asm_2bee7
|
||||
inc de
|
||||
ld a, [de]
|
||||
cp GRASS
|
||||
jr z, .asm_2bee7
|
||||
bit 7, [hl]
|
||||
jr nz, .asm_2bee7
|
||||
set 7, [hl]
|
||||
callab Func_3fba8
|
||||
ld hl, WasSeededText ; $7ef2
|
||||
jp PrintText
|
||||
.asm_2bee7
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, EvadedAttackText ; $7ef7
|
||||
jp PrintText
|
||||
|
||||
WasSeededText: ; 2bef2 (a:7ef2)
|
||||
TX_FAR _WasSeededText
|
||||
db "@"
|
||||
|
||||
EvadedAttackText: ; 2bef7 (a:7ef7)
|
||||
TX_FAR _EvadedAttackText
|
||||
db "@"
|
2908
engine/battle/animations.asm
Executable file
2908
engine/battle/animations.asm
Executable file
File diff suppressed because it is too large
Load diff
18
engine/battle/b.asm
Executable file
18
engine/battle/b.asm
Executable file
|
@ -0,0 +1,18 @@
|
|||
DisplayEffectiveness: ; 2fb7b (b:7b7b)
|
||||
ld a, [$D05B]
|
||||
and a, $7F
|
||||
cp a, $0A
|
||||
ret z
|
||||
ld hl, SupperEffectiveText
|
||||
jr nc, .done
|
||||
ld hl, NotVeryEffectiveText
|
||||
.done
|
||||
jp PrintText
|
||||
|
||||
SupperEffectiveText: ; 2fb8e (b:7b8e)
|
||||
TX_FAR _SupperEffectiveText
|
||||
db "@"
|
||||
|
||||
NotVeryEffectiveText: ; 2fb93 (b:7b93)
|
||||
TX_FAR _NotVeryEffectiveText
|
||||
db "@"
|
130
engine/battle/b_2.asm
Executable file
130
engine/battle/b_2.asm
Executable file
|
@ -0,0 +1,130 @@
|
|||
; scales both uncompressed sprite chunks by two in every dimension (creating 2x2 output pixels per input pixel)
|
||||
; assumes that input sprite chunks are 4x4 tiles, and the rightmost and bottommost 4 pixels will be ignored
|
||||
; resulting in a 7*7 tile output sprite chunk
|
||||
ScaleSpriteByTwo: ; 2fe40 (b:7e40)
|
||||
ld de, S_SPRITEBUFFER1 + (4*4*8) - 5 ; last byte of input data, last 4 rows already skipped
|
||||
ld hl, S_SPRITEBUFFER0 + SPRITEBUFFERSIZE - 1 ; end of destination buffer
|
||||
call ScaleLastSpriteColumnByTwo ; last tile column is special case
|
||||
call ScaleFirstThreeSpriteColumnsByTwo ; scale first 3 tile columns
|
||||
ld de, S_SPRITEBUFFER2 + (4*4*8) - 5 ; last byte of input data, last 4 rows already skipped
|
||||
ld hl, S_SPRITEBUFFER1 + SPRITEBUFFERSIZE - 1 ; end of destination buffer
|
||||
call ScaleLastSpriteColumnByTwo ; last tile column is special case
|
||||
|
||||
ScaleFirstThreeSpriteColumnsByTwo: ; 2fe55 (b:7e55)
|
||||
ld b, $3 ; 3 tile columns
|
||||
.columnLoop
|
||||
ld c, 4*8 - 4 ; $1c, 4 tiles minus 4 unused rows
|
||||
.columnInnerLoop
|
||||
push bc
|
||||
ld a, [de]
|
||||
ld bc, -(7*8)+1 ; $ffc9, scale lower nybble and seek to previous output column
|
||||
call ScalePixelsByTwo
|
||||
ld a, [de]
|
||||
dec de
|
||||
swap a
|
||||
ld bc, 7*8+1-2 ; $37, scale upper nybble and seek back to current output column and to the next 2 rows
|
||||
call ScalePixelsByTwo
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .columnInnerLoop
|
||||
dec de
|
||||
dec de
|
||||
dec de
|
||||
dec de
|
||||
ld a, b
|
||||
ld bc, -7*8 ; $ffc8, skip one output column (which has already been written along with the current one)
|
||||
add hl, bc
|
||||
ld b, a
|
||||
dec b
|
||||
jr nz, .columnLoop
|
||||
ret
|
||||
|
||||
ScaleLastSpriteColumnByTwo: ; 2fe7d (b:7e7d)
|
||||
ld a, 4*8 - 4 ; $1c, 4 tiles minus 4 unused rows
|
||||
ld [H_SPRITEINTERLACECOUNTER], a ; $ff8b
|
||||
ld bc, -1 ; $ffff
|
||||
.columnInnerLoop
|
||||
ld a, [de]
|
||||
dec de
|
||||
swap a ; only high nybble contains information
|
||||
call ScalePixelsByTwo
|
||||
ld a, [H_SPRITEINTERLACECOUNTER] ; $ff8b
|
||||
dec a
|
||||
ld [H_SPRITEINTERLACECOUNTER], a ; $ff8b
|
||||
jr nz, .columnInnerLoop
|
||||
dec de ; skip last 4 rows of new column
|
||||
dec de
|
||||
dec de
|
||||
dec de
|
||||
ret
|
||||
|
||||
; scales the given 4 bits in a (4x1 pixels) to 2 output bytes (8x2 pixels)
|
||||
; hl: destination pointer
|
||||
; bc: destination pointer offset (added after the two bytes have been written)
|
||||
ScalePixelsByTwo: ; 2fe97 (b:7e97)
|
||||
push hl
|
||||
and $f
|
||||
ld hl, DuplicateBitsTable
|
||||
add l
|
||||
ld l, a
|
||||
jr nc, .noCarry
|
||||
inc h
|
||||
.noCarry
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
ld [hld], a ; write output byte twice to make it 2 pixels high
|
||||
ld [hl], a
|
||||
add hl, bc ; add offset
|
||||
ret
|
||||
|
||||
; repeats each input bit twice
|
||||
DuplicateBitsTable: ; 2fea8 (b:7ea8)
|
||||
db $00, $03, $0c, $0f
|
||||
db $30, $33, $3c, $3f
|
||||
db $c0, $c3, $cc, $cf
|
||||
db $f0, $f3, $fc, $ff
|
||||
|
||||
PayDayEffect_ ; 2feb8 (b:7eb8)
|
||||
xor a
|
||||
ld hl, $cd6d
|
||||
ld [hli], a
|
||||
ld a, [$fff3]
|
||||
and a
|
||||
ld a, [$d022]
|
||||
jr z, .asm_2fec8 ; 0x2fec3 $3
|
||||
ld a, [$cff3]
|
||||
.asm_2fec8
|
||||
add a
|
||||
ld [$ff98], a
|
||||
xor a
|
||||
ld [$ff95], a
|
||||
ld [$ff96], a
|
||||
ld [$ff97], a
|
||||
ld a, $64
|
||||
ld [$ff99], a
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld a, [$ff98]
|
||||
ld [hli], a
|
||||
ld a, [$ff99]
|
||||
ld [$ff98], a
|
||||
ld a, $a
|
||||
ld [$ff99], a
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld a, [$ff98]
|
||||
swap a
|
||||
ld b, a
|
||||
ld a, [$ff99]
|
||||
add b
|
||||
ld [hl], a
|
||||
ld de, $cce7
|
||||
ld c, $3
|
||||
ld a, $b
|
||||
call Predef
|
||||
ld hl, CoinsScatteredText ; $7f04
|
||||
jp PrintText
|
||||
|
||||
CoinsScatteredText: ; 2ff04 (b:7f04)
|
||||
TX_FAR _CoinsScatteredText
|
||||
db "@"
|
58
engine/battle/c.asm
Executable file
58
engine/battle/c.asm
Executable file
|
@ -0,0 +1,58 @@
|
|||
MistEffect_: ; 33f2b (c:7f2b)
|
||||
ld hl, W_PLAYERBATTSTATUS2
|
||||
ld a, [$fff3]
|
||||
and a
|
||||
jr z, .asm_33f36
|
||||
ld hl, W_ENEMYBATTSTATUS2
|
||||
.asm_33f36
|
||||
bit 1, [hl] ; is mon protected by mist?
|
||||
jr nz, .asm_33f4a
|
||||
set 1, [hl] ; mon is now protected by mist
|
||||
callab Func_3fba8
|
||||
ld hl, ShroudedInMistText
|
||||
jp PrintText
|
||||
.asm_33f4a
|
||||
ld hl, PrintButItFailedText_
|
||||
ld b, BANK(PrintButItFailedText_)
|
||||
jp Bankswitch
|
||||
|
||||
ShroudedInMistText: ; 33f52 (c:7f52)
|
||||
TX_FAR _ShroudedInMistText
|
||||
db "@"
|
||||
|
||||
OneHitKOEffect_: ; 33f57 (c:7f57)
|
||||
ld hl, W_DAMAGE ; $d0d7
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], a ; set the damage output to zero
|
||||
dec a
|
||||
ld [$d05e], a
|
||||
ld hl, $d02a
|
||||
ld de, $cffb
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_33f72
|
||||
ld hl, $cffb
|
||||
ld de, $d02a
|
||||
.asm_33f72
|
||||
ld a, [de]
|
||||
dec de
|
||||
ld b, a
|
||||
ld a, [hld]
|
||||
sub b
|
||||
ld a, [de]
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
sbc b
|
||||
jr c, .asm_33f8a
|
||||
ld hl, W_DAMAGE ; $d0d7
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld a, $2
|
||||
ld [$d05e], a
|
||||
ret
|
||||
.asm_33f8a
|
||||
ld a, $1
|
||||
ld [W_MOVEMISSED], a ; $d05f
|
||||
ret
|
8547
engine/battle/core.asm
Executable file
8547
engine/battle/core.asm
Executable file
File diff suppressed because it is too large
Load diff
25
engine/battle/d.asm
Executable file
25
engine/battle/d.asm
Executable file
|
@ -0,0 +1,25 @@
|
|||
Func_372d6: ; 372d6 (d:72d6)
|
||||
call LoadTextBoxTilePatterns
|
||||
FuncCoord 3, 4 ; $c3f3
|
||||
ld hl, Coord
|
||||
ld b, $7
|
||||
ld c, $c
|
||||
call TextBoxBorder
|
||||
FuncCoord 4, 5 ; $c408
|
||||
ld hl, Coord
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
call PlaceString
|
||||
FuncCoord 4, 10 ; $c46c
|
||||
ld hl, Coord
|
||||
ld de, W_GRASSRATE ; $d887
|
||||
call PlaceString
|
||||
FuncCoord 9, 8 ; $c449
|
||||
ld hl, Coord
|
||||
ld a, $69
|
||||
ld [hli], a
|
||||
ld [hl], $6a
|
||||
xor a
|
||||
ld [$cfcb], a
|
||||
callab SetupPlayerAndEnemyPokeballs
|
||||
ld c, $96
|
||||
jp DelayFrames
|
1563
engine/battle/e.asm
Executable file
1563
engine/battle/e.asm
Executable file
File diff suppressed because it is too large
Load diff
305
engine/battle/e_2.asm
Executable file
305
engine/battle/e_2.asm
Executable file
|
@ -0,0 +1,305 @@
|
|||
HealEffect_: ; 3b9ec (e:79ec)
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
ld de, W_PLAYERMONCURHP ; $d015
|
||||
ld hl, W_PLAYERMONMAXHP ; $d023
|
||||
ld a, [W_PLAYERMOVENUM] ; $cfd2
|
||||
jr z, .asm_3ba03
|
||||
ld de, W_ENEMYMONCURHP ; $cfe6
|
||||
ld hl, W_ENEMYMONMAXHP ; $cff4
|
||||
ld a, [W_ENEMYMOVENUM] ; $cfcc
|
||||
.asm_3ba03
|
||||
ld b, a
|
||||
ld a, [de]
|
||||
cp [hl]
|
||||
inc de
|
||||
inc hl
|
||||
ld a, [de]
|
||||
sbc [hl]
|
||||
jp z, Func_3ba97
|
||||
ld a, b
|
||||
cp REST
|
||||
jr nz, .asm_3ba37
|
||||
push hl
|
||||
push de
|
||||
push af
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, W_PLAYERMONSTATUS ; $d018
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_3ba25
|
||||
ld hl, W_ENEMYMONSTATUS ; $cfe9
|
||||
.asm_3ba25
|
||||
ld a, [hl]
|
||||
and a
|
||||
ld [hl], 2 ; Number of turns from Rest
|
||||
ld hl, StartedSleepingEffect ; $7aa2
|
||||
jr z, .asm_3ba31
|
||||
ld hl, FellAsleepBecameHealthyText ; $7aa7
|
||||
.asm_3ba31
|
||||
call PrintText
|
||||
pop af
|
||||
pop de
|
||||
pop hl
|
||||
.asm_3ba37
|
||||
ld a, [hld]
|
||||
ld [wHPBarMaxHP], a
|
||||
ld c, a
|
||||
ld a, [hl]
|
||||
ld [wHPBarMaxHP+1], a
|
||||
ld b, a
|
||||
jr z, .asm_3ba47
|
||||
srl b
|
||||
rr c
|
||||
.asm_3ba47
|
||||
ld a, [de]
|
||||
ld [wHPBarOldHP], a
|
||||
add c
|
||||
ld [de], a
|
||||
ld [wHPBarNewHP], a
|
||||
dec de
|
||||
ld a, [de]
|
||||
ld [wHPBarOldHP+1], a
|
||||
adc b
|
||||
ld [de], a
|
||||
ld [wHPBarNewHP+1], a
|
||||
inc hl
|
||||
inc de
|
||||
ld a, [de]
|
||||
dec de
|
||||
sub [hl]
|
||||
dec hl
|
||||
ld a, [de]
|
||||
sbc [hl]
|
||||
jr c, .asm_3ba6f
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
ld [wHPBarNewHP+1], a
|
||||
inc de
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld [wHPBarNewHP], a
|
||||
.asm_3ba6f
|
||||
ld hl, Func_3fba8 ; $7ba8
|
||||
call BankswitchEtoF
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
FuncCoord 10, 9 ; $c45e
|
||||
ld hl, Coord
|
||||
ld a, $1
|
||||
jr z, .asm_3ba83
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
xor a
|
||||
.asm_3ba83
|
||||
ld [wListMenuID], a ; $cf94
|
||||
ld a, $48
|
||||
call Predef ; indirect jump to UpdateHPBar (fa1d (3:7a1d))
|
||||
ld hl, Func_3cd5a ; $4d5a
|
||||
call BankswitchEtoF
|
||||
ld hl, RegainedHealthText ; $7aac
|
||||
jp PrintText
|
||||
|
||||
Func_3ba97: ; 3ba97 (e:7a97)
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, PrintButItFailedText_
|
||||
jp BankswitchEtoF
|
||||
|
||||
StartedSleepingEffect: ; 3baa2 (e:7aa2)
|
||||
TX_FAR _StartedSleepingEffect
|
||||
db "@"
|
||||
|
||||
FellAsleepBecameHealthyText: ; 3baa7 (e:7aa7)
|
||||
TX_FAR _FellAsleepBecameHealthyText
|
||||
db "@"
|
||||
|
||||
RegainedHealthText: ; 3baac (e:7aac)
|
||||
TX_FAR _RegainedHealthText
|
||||
db "@"
|
||||
|
||||
TransformEffect_: ; 3bab1 (e:7ab1)
|
||||
ld hl, W_PLAYERMONID
|
||||
ld de, $cfe5
|
||||
ld bc, W_ENEMYBATTSTATUS3 ; $d069
|
||||
ld a, [W_ENEMYBATTSTATUS1] ; $d067
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr nz, .asm_3bad1
|
||||
ld hl, $cfe5
|
||||
ld de, W_PLAYERMONID
|
||||
ld bc, W_PLAYERBATTSTATUS3 ; $d064
|
||||
ld [wPlayerMoveListIndex], a ; $cc2e
|
||||
ld a, [W_PLAYERBATTSTATUS1] ; $d062
|
||||
.asm_3bad1
|
||||
bit 6, a ; is mon invulnerable to typical attacks? (fly/dig)
|
||||
jp nz, Func_3bb8c
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld hl, W_PLAYERBATTSTATUS2 ; $d063
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_3bae4
|
||||
ld hl, W_ENEMYBATTSTATUS2 ; $d068
|
||||
.asm_3bae4
|
||||
bit 4, [hl]
|
||||
push af
|
||||
ld hl, Func_79747
|
||||
ld b, BANK(Func_79747)
|
||||
call nz, Bankswitch
|
||||
ld a, [W_OPTIONS] ; $d355
|
||||
add a
|
||||
ld hl, Func_3fba8 ; $7ba8
|
||||
ld b, BANK(Func_3fba8)
|
||||
jr nc, .asm_3baff
|
||||
ld hl, AnimationTransformMon
|
||||
ld b, BANK(AnimationTransformMon)
|
||||
.asm_3baff
|
||||
call Bankswitch
|
||||
ld hl, Func_79771
|
||||
ld b, BANK(Func_79771)
|
||||
pop af
|
||||
call nz, Bankswitch
|
||||
pop bc
|
||||
ld a, [bc]
|
||||
set 3, a
|
||||
ld [bc], a
|
||||
pop de
|
||||
pop hl
|
||||
push hl
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld bc, $5
|
||||
add hl, bc
|
||||
inc de
|
||||
inc de
|
||||
inc de
|
||||
inc de
|
||||
inc de
|
||||
inc bc
|
||||
inc bc
|
||||
call CopyData
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_3bb32
|
||||
ld a, [de]
|
||||
ld [$cceb], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [$ccec], a
|
||||
dec de
|
||||
.asm_3bb32
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
inc de
|
||||
inc de
|
||||
inc de
|
||||
ld bc, $8
|
||||
call CopyData
|
||||
ld bc, $ffef
|
||||
add hl, bc
|
||||
ld b, $4
|
||||
.asm_3bb4a
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .asm_3bb57
|
||||
ld a, $5
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .asm_3bb4a
|
||||
jr .asm_3bb5d
|
||||
.asm_3bb57
|
||||
xor a
|
||||
ld [de], a
|
||||
inc de
|
||||
dec b
|
||||
jr nz, .asm_3bb57
|
||||
.asm_3bb5d
|
||||
pop hl
|
||||
ld a, [hl]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
ld hl, $cd26
|
||||
ld de, $cd12
|
||||
call Func_3bb7d
|
||||
ld hl, wEnemyMonStatMods ; $cd2e
|
||||
ld de, wPlayerMonStatMods ; $cd1a
|
||||
call Func_3bb7d
|
||||
ld hl, TransformedText ; $7b92
|
||||
jp PrintText
|
||||
|
||||
Func_3bb7d: ; 3bb7d (e:7b7d)
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_3bb86
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
pop de
|
||||
.asm_3bb86
|
||||
ld bc, $8
|
||||
jp CopyData
|
||||
|
||||
Func_3bb8c: ; 3bb8c (e:7b8c)
|
||||
ld hl, PrintButItFailedText_ ; $7b53
|
||||
jp BankswitchEtoF
|
||||
|
||||
TransformedText: ; 3bb92 (e:7b92)
|
||||
TX_FAR _TransformedText
|
||||
db "@"
|
||||
|
||||
ReflectLightScreenEffect_: ; 3bb97 (e:7b97)
|
||||
ld hl, W_PLAYERBATTSTATUS3 ; $d064
|
||||
ld de, W_PLAYERMOVEEFFECT ; $cfd3
|
||||
ld a, [H_WHOSETURN] ; $fff3
|
||||
and a
|
||||
jr z, .asm_3bba8
|
||||
ld hl, W_ENEMYBATTSTATUS3 ; $d069
|
||||
ld de, W_ENEMYMOVEEFFECT ; $cfcd
|
||||
.asm_3bba8
|
||||
ld a, [de]
|
||||
cp LIGHT_SCREEN_EFFECT
|
||||
jr nz, .reflect
|
||||
bit 1, [hl] ; is mon already protected by light screen?
|
||||
jr nz, .moveFailed
|
||||
set 1, [hl] ; mon is now protected by light screen
|
||||
ld hl, LightScreenProtectedText ; $7bd7
|
||||
jr .asm_3bbc1
|
||||
.reflect
|
||||
bit 2, [hl] ; is mon already protected by reflect?
|
||||
jr nz, .moveFailed
|
||||
set 2, [hl] ; mon is now protected by reflect
|
||||
ld hl, ReflectGainedArmorText ; $7bdc
|
||||
.asm_3bbc1
|
||||
push hl
|
||||
ld hl, Func_3fba8 ; $7ba8
|
||||
call BankswitchEtoF
|
||||
pop hl
|
||||
jp PrintText
|
||||
.moveFailed
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, PrintButItFailedText_ ; $7b53
|
||||
jp BankswitchEtoF
|
||||
|
||||
LightScreenProtectedText: ; 3bbd7 (e:7bd7)
|
||||
TX_FAR _LightScreenProtectedText
|
||||
db "@"
|
||||
|
||||
ReflectGainedArmorText: ; 3bbdc (e:7bdc)
|
||||
TX_FAR _ReflectGainedArmorText
|
||||
db "@"
|
||||
|
||||
BankswitchEtoF: ; 3bbe1 (e:7be1)
|
||||
ld b, BANK(BattleCore)
|
||||
jp Bankswitch
|
36
engine/battle/safari_zone.asm
Executable file
36
engine/battle/safari_zone.asm
Executable file
|
@ -0,0 +1,36 @@
|
|||
PrintSafariZoneBattleText: ; 4277 (1:4277)
|
||||
ld hl, $cce9
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .asm_4284
|
||||
dec [hl]
|
||||
ld hl, SafariZoneEatingText
|
||||
jr .asm_429f
|
||||
.asm_4284
|
||||
dec hl
|
||||
ld a, [hl]
|
||||
and a
|
||||
ret z
|
||||
dec [hl]
|
||||
ld hl, SafariZoneAngryText
|
||||
jr nz, .asm_429f
|
||||
push hl
|
||||
ld a, [$cfe5]
|
||||
ld [$d0b5], a
|
||||
call GetMonHeader
|
||||
ld a, [W_MONHCATCHRATE]
|
||||
ld [$d007], a
|
||||
pop hl
|
||||
.asm_429f
|
||||
push hl
|
||||
call LoadScreenTilesFromBuffer1
|
||||
pop hl
|
||||
jp PrintText
|
||||
|
||||
SafariZoneEatingText: ; 42a7 (1:42a7)
|
||||
TX_FAR _SafariZoneEatingText
|
||||
db "@"
|
||||
|
||||
SafariZoneAngryText: ; 42ac (1:42ac)
|
||||
TX_FAR _SafariZoneAngryText
|
||||
db "@"
|
960
engine/cable_club.asm
Executable file
960
engine/cable_club.asm
Executable file
|
@ -0,0 +1,960 @@
|
|||
Func_5317: ; 5317 (1:5317)
|
||||
ld c, $50
|
||||
call DelayFrames
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
call LoadFontTilePatterns
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
call LoadTrainerInfoTextBoxTiles
|
||||
FuncCoord 3, 8 ; $c443
|
||||
ld hl, Coord
|
||||
ld b, $2
|
||||
ld c, $c
|
||||
call Func_5ab3
|
||||
FuncCoord 4, 10 ; $c46c
|
||||
ld hl, Coord
|
||||
ld de, PleaseWaitString ; $550f
|
||||
call PlaceString
|
||||
ld hl, W_NUMHITS ; $d074
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], $50
|
||||
|
||||
Func_5345: ; 5345
|
||||
ld hl, $d152
|
||||
ld a, $fd
|
||||
ld b, $6
|
||||
.asm_534c
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_534c
|
||||
ld hl, $d141
|
||||
ld a, $fd
|
||||
ld b, $7
|
||||
.asm_5357
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_5357
|
||||
ld b, $a
|
||||
.asm_535d
|
||||
call GenRandom
|
||||
cp $fd
|
||||
jr nc, .asm_535d
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_535d
|
||||
ld hl, wTileMapBackup
|
||||
ld a, $fd
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld b, $c8
|
||||
xor a
|
||||
.asm_5373
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_5373
|
||||
ld hl, W_GRASSRATE ; $d887
|
||||
ld bc, $1a9
|
||||
.asm_537d
|
||||
xor a
|
||||
ld [hli], a
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_537d
|
||||
ld hl, W_PARTYMONEND ; $d16a
|
||||
ld de, $c512
|
||||
ld bc, $0
|
||||
.asm_538d
|
||||
inc c
|
||||
ld a, c
|
||||
cp $fd
|
||||
jr z, .asm_53a9
|
||||
ld a, b
|
||||
dec a
|
||||
jr nz, .asm_539c
|
||||
ld a, c
|
||||
cp $d
|
||||
jr z, .asm_53b2
|
||||
.asm_539c
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
cp $fe
|
||||
jr nz, .asm_538d
|
||||
ld a, c
|
||||
ld [de], a
|
||||
inc de
|
||||
ld [hl], $ff
|
||||
jr .asm_538d
|
||||
.asm_53a9
|
||||
ld a, $ff
|
||||
ld [de], a
|
||||
inc de
|
||||
ld bc, $100
|
||||
jr .asm_538d
|
||||
.asm_53b2
|
||||
ld a, $ff
|
||||
ld [de], a
|
||||
call Func_227f
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
jr nz, .asm_53d2
|
||||
call Delay3
|
||||
xor a
|
||||
ld [$ffac], a
|
||||
ld a, $81
|
||||
ld [$ff02], a
|
||||
call DelayFrame
|
||||
xor a
|
||||
ld [$ffac], a
|
||||
ld a, $81
|
||||
ld [$ff02], a
|
||||
.asm_53d2
|
||||
call Delay3
|
||||
ld a, $8
|
||||
ld [rIE], a ; $ffff
|
||||
ld hl, $d141
|
||||
ld de, wTileMapBackup2
|
||||
ld bc, $11
|
||||
call Func_216f
|
||||
ld a, $fe
|
||||
ld [de], a
|
||||
ld hl, $d152
|
||||
ld de, $d893
|
||||
ld bc, $1a8
|
||||
call Func_216f
|
||||
ld a, $fe
|
||||
ld [de], a
|
||||
ld hl, wTileMapBackup
|
||||
ld de, $c5d0
|
||||
ld bc, $c8
|
||||
call Func_216f
|
||||
ld a, $d
|
||||
ld [rIE], a ; $ffff
|
||||
ld a, $ff
|
||||
call PlaySound
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
jr z, .asm_5431
|
||||
ld hl, wTileMapBackup2
|
||||
.asm_5415
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .asm_5415
|
||||
cp $fd
|
||||
jr z, .asm_5415
|
||||
cp $fe
|
||||
jr z, .asm_5415
|
||||
dec hl
|
||||
ld de, $d148
|
||||
ld c, $a
|
||||
.asm_5427
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
jr z, .asm_5427
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_5427
|
||||
.asm_5431
|
||||
ld hl, $d896
|
||||
.asm_5434
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .asm_5434
|
||||
cp $fd
|
||||
jr z, .asm_5434
|
||||
cp $fe
|
||||
jr z, .asm_5434
|
||||
dec hl
|
||||
ld de, W_GRASSRATE ; $d887
|
||||
ld c, $b
|
||||
.asm_5446
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
jr z, .asm_5446
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_5446
|
||||
ld de, wEnemyPartyCount ; $d89c
|
||||
ld bc, $194
|
||||
.asm_5456
|
||||
ld a, [hli]
|
||||
cp $fe
|
||||
jr z, .asm_5456
|
||||
ld [de], a
|
||||
inc de
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .asm_5456
|
||||
ld de, wTileMapBackup
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
ld c, $2
|
||||
.asm_546a
|
||||
ld a, [de]
|
||||
inc de
|
||||
and a
|
||||
jr z, .asm_546a
|
||||
cp $fd
|
||||
jr z, .asm_546a
|
||||
cp $fe
|
||||
jr z, .asm_546a
|
||||
cp $ff
|
||||
jr z, .asm_5489
|
||||
push hl
|
||||
push bc
|
||||
ld b, $0
|
||||
dec a
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, $fe
|
||||
ld [hl], a
|
||||
pop bc
|
||||
pop hl
|
||||
jr .asm_546a
|
||||
.asm_5489
|
||||
ld hl, W_PARTYMON6DATA + W_PARTYMON1_MOVE4PP - W_PARTYMON1DATA ; $d267
|
||||
dec c
|
||||
jr nz, .asm_546a
|
||||
ld de, $c5d0
|
||||
ld hl, W_WATERRATE ; $d8a4
|
||||
ld c, $2
|
||||
.asm_5497
|
||||
ld a, [de]
|
||||
inc de
|
||||
and a
|
||||
jr z, .asm_5497
|
||||
cp $fd
|
||||
jr z, .asm_5497
|
||||
cp $fe
|
||||
jr z, .asm_5497
|
||||
cp $ff
|
||||
jr z, .asm_54b6
|
||||
push hl
|
||||
push bc
|
||||
ld b, $0
|
||||
dec a
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, $fe
|
||||
ld [hl], a
|
||||
pop bc
|
||||
pop hl
|
||||
jr .asm_5497
|
||||
.asm_54b6
|
||||
ld hl, $d9a0
|
||||
dec c
|
||||
jr nz, .asm_5497
|
||||
ld a, $ac
|
||||
ld [$cf8d], a
|
||||
ld a, $d9
|
||||
ld [$cf8e], a
|
||||
xor a
|
||||
ld [$cc38], a
|
||||
ld a, $ff
|
||||
call PlaySound
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
ld c, $42
|
||||
call z, DelayFrames
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $3
|
||||
ld a, $32
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
jr nz, .asm_5506
|
||||
ld a, $4
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
ld a, SONY1 + $c8
|
||||
ld [W_CUROPPONENT], a ; $d059
|
||||
call ClearScreen
|
||||
call Delay3
|
||||
ld hl, W_OPTIONS ; $d355
|
||||
res 7, [hl]
|
||||
ld a, $2c
|
||||
call Predef ; indirect jump to InitOpponent (3ef18 (f:6f18))
|
||||
ld a, $7
|
||||
call Predef ; indirect jump to HealParty (f6a5 (3:76a5))
|
||||
jp Func_577d
|
||||
.asm_5506
|
||||
ld c, BANK(Music_GameCorner)
|
||||
ld a, MUSIC_GAME_CORNER
|
||||
call PlayMusic
|
||||
jr Func_551c
|
||||
|
||||
PleaseWaitString: ; 550f (1:550f)
|
||||
db "PLEASE WAIT!@"
|
||||
|
||||
Func_551c:
|
||||
ld hl, PointerTable_5a5b ; $5a5b
|
||||
ld b, $0
|
||||
ld a, [$cc38]
|
||||
cp $ff
|
||||
jp z, LoadTitlescreenGraphics
|
||||
add a
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
jp [hl]
|
||||
|
||||
TradeCenter_SelectMon:
|
||||
call ClearScreen
|
||||
call LoadTrainerInfoTextBoxTiles
|
||||
call Func_57f2
|
||||
call Func_57a2
|
||||
xor a
|
||||
ld hl, $cc3d
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld [$cc37], a
|
||||
ld [$cc26], a
|
||||
ld [$cc2a], a
|
||||
ld [$cc34], a
|
||||
inc a
|
||||
ld [$cc42], a
|
||||
jp .asm_55dc
|
||||
.asm_5557
|
||||
xor a
|
||||
ld [$cc37], a
|
||||
inc a
|
||||
ld [$cc49], a
|
||||
ld a, $a1
|
||||
ld [$cc29], a
|
||||
ld a, [$d89c]
|
||||
ld [$cc28], a
|
||||
ld a, $9
|
||||
ld [$cc24], a
|
||||
ld a, $1
|
||||
ld [$cc25], a
|
||||
.asm_5574
|
||||
ld hl, $fff6
|
||||
set 1, [hl]
|
||||
call HandleMenuInput
|
||||
ld hl, $fff6
|
||||
res 1, [hl]
|
||||
and a
|
||||
jp z, .asm_565b
|
||||
bit 0, a
|
||||
jr z, .asm_55b0 ; 0x5587 $27
|
||||
ld a, [$cc28]
|
||||
ld c, a
|
||||
ld a, [$cc26]
|
||||
cp c
|
||||
jr c, .asm_559a ; 0x5591 $7
|
||||
ld a, [$cc28]
|
||||
dec a
|
||||
ld [$cc26], a
|
||||
.asm_559a
|
||||
ld a, $1
|
||||
ld [$d11b], a
|
||||
callab Func_39bd5
|
||||
ld hl, wEnemyMons
|
||||
call Func_57d6
|
||||
jp .asm_565b
|
||||
.asm_55b0
|
||||
bit 5, a
|
||||
jr z, .asm_55d4 ; 0x55b2 $20
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
ld a, [$cc30]
|
||||
ld l, a
|
||||
ld a, [$cc31]
|
||||
ld h, a
|
||||
ld a, [$cc27]
|
||||
ld [hl], a
|
||||
ld a, [$cc26]
|
||||
ld b, a
|
||||
ld a, [$d163]
|
||||
dec a
|
||||
cp b
|
||||
jr nc, .asm_55dc ; 0x55cd $d
|
||||
ld [$cc26], a
|
||||
jr .asm_55dc ; 0x55d2 $8
|
||||
.asm_55d4
|
||||
bit 7, a
|
||||
jp z, .asm_565b
|
||||
jp .asm_572f
|
||||
.asm_55dc
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
ld [$cc37], a
|
||||
ld a, $91
|
||||
ld [$cc29], a
|
||||
ld a, [$d163]
|
||||
ld [$cc28], a
|
||||
ld a, $1
|
||||
ld [$cc24], a
|
||||
ld a, $1
|
||||
ld [$cc25], a
|
||||
ld hl, $c3b5
|
||||
ld bc, $0601
|
||||
call ClearScreenArea
|
||||
.asm_5601
|
||||
ld hl, $fff6
|
||||
set 1, [hl]
|
||||
call HandleMenuInput
|
||||
ld hl, $fff6
|
||||
res 1, [hl]
|
||||
and a
|
||||
jr nz, .asm_5614 ; 0x560f $3
|
||||
jp .asm_565b
|
||||
.asm_5614
|
||||
bit 0, a
|
||||
jr z, .asm_562e ; 0x5616 $16
|
||||
jp .asm_5665
|
||||
ld a, $4
|
||||
ld [$d11b], a
|
||||
callab Func_39bd5
|
||||
call Func_57d6
|
||||
jp .asm_565b
|
||||
.asm_562e
|
||||
bit 4, a
|
||||
jr z, .asm_5654 ; 0x5630 $22
|
||||
ld a, $1
|
||||
ld [$cc49], a
|
||||
ld a, [$cc30]
|
||||
ld l, a
|
||||
ld a, [$cc31]
|
||||
ld h, a
|
||||
ld a, [$cc27]
|
||||
ld [hl], a
|
||||
ld a, [$cc26]
|
||||
ld b, a
|
||||
ld a, [$d89c]
|
||||
dec a
|
||||
cp b
|
||||
jr nc, .asm_5651 ; 0x564c $3
|
||||
ld [$cc26], a
|
||||
.asm_5651
|
||||
jp .asm_5557
|
||||
.asm_5654
|
||||
bit 7, a
|
||||
jr z, .asm_565b ; 0x5656 $3
|
||||
jp .asm_572f
|
||||
.asm_565b
|
||||
ld a, [$cc49]
|
||||
and a
|
||||
jp z, .asm_5601
|
||||
jp .asm_5574
|
||||
.asm_5665
|
||||
call SaveScreenTilesToBuffer1
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
ld a, [$cc28]
|
||||
ld c, a
|
||||
ld a, [$cc26]
|
||||
cp c
|
||||
jr c, .asm_5679 ; 0x5673 $4
|
||||
ld a, [$cc28]
|
||||
dec a
|
||||
.asm_5679
|
||||
push af
|
||||
ld hl, $c4b8
|
||||
ld b, $2
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c4e2
|
||||
ld de, .statsTrade
|
||||
call PlaceString
|
||||
xor a
|
||||
ld [$cc26], a
|
||||
ld [$cc2a], a
|
||||
ld [$cc34], a
|
||||
ld [$cc28], a
|
||||
ld a, $10
|
||||
ld [$cc24], a
|
||||
.asm_569f
|
||||
ld a, $7f
|
||||
ld [$c4eb], a
|
||||
ld a, $13
|
||||
ld [$cc29], a
|
||||
ld a, $1
|
||||
ld [$cc25], a
|
||||
call HandleMenuInput
|
||||
bit 4, a
|
||||
jr nz, .asm_56c3 ; 0x56b3 $e
|
||||
bit 1, a
|
||||
jr z, .asm_56df ; 0x56b7 $26
|
||||
.asm_56b9
|
||||
pop af
|
||||
ld [$cc26], a
|
||||
call LoadScreenTilesFromBuffer1
|
||||
jp .asm_55dc
|
||||
.asm_56c3
|
||||
ld a, $7f
|
||||
ld [$c4e1], a
|
||||
ld a, $23
|
||||
ld [$cc29], a
|
||||
ld a, $b
|
||||
ld [$cc25], a
|
||||
call HandleMenuInput
|
||||
bit 5, a
|
||||
jr nz, .asm_569f ; 0x56d7 $c6
|
||||
bit 1, a
|
||||
jr nz, .asm_56b9 ; 0x56db $dc
|
||||
jr .asm_56f9 ; 0x56dd $1a
|
||||
.asm_56df
|
||||
pop af
|
||||
ld [$cc26], a
|
||||
ld a, $4
|
||||
ld [$d11b], a
|
||||
callab Func_39bd5
|
||||
call Func_57d6
|
||||
call LoadScreenTilesFromBuffer1
|
||||
jp .asm_55dc
|
||||
.asm_56f9
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
pop af
|
||||
ld [$cc26], a
|
||||
ld [$cd3d], a
|
||||
ld [$cc42], a
|
||||
call Func_226e
|
||||
ld a, [$cc3d]
|
||||
cp $f
|
||||
jp z, Func_551c
|
||||
ld [$cd3e], a
|
||||
call Func_57c7
|
||||
ld a, $1
|
||||
ld [$cc38], a
|
||||
jp Func_551c
|
||||
.statsTrade
|
||||
db "STATS TRADE@"
|
||||
.asm_572f
|
||||
ld a, [$cc26]
|
||||
ld b, a
|
||||
ld a, [$cc28]
|
||||
cp b
|
||||
jp nz, .asm_565b
|
||||
ld a, [$cc30]
|
||||
ld l, a
|
||||
ld a, [$cc31]
|
||||
ld h, a
|
||||
ld a, $7f
|
||||
ld [hl], a
|
||||
.asm_5745
|
||||
ld a, $ed
|
||||
ld [$c4e1], a
|
||||
.asm_574a
|
||||
call GetJoypadStateLowSensitivity
|
||||
ld a, [$ffb5]
|
||||
and a
|
||||
jr z, .asm_574a ; 0x5750 $f8
|
||||
bit 0, a
|
||||
jr nz, .asm_5769 ; 0x5754 $13
|
||||
bit 6, a
|
||||
jr z, .asm_574a ; 0x5758 $f0
|
||||
ld a, $7f
|
||||
ld [$c4e1], a
|
||||
ld a, [$d163]
|
||||
dec a
|
||||
ld [$cc26], a
|
||||
jp .asm_55dc
|
||||
.asm_5769
|
||||
ld a, $ec
|
||||
ld [$c4e1], a
|
||||
ld a, $f
|
||||
ld [$cc42], a
|
||||
call Func_226e
|
||||
ld a, [$cc3d]
|
||||
cp $f
|
||||
jr nz, .asm_5745 ; 0x577b $c8
|
||||
|
||||
Func_577d: ; 577d (1:577d)
|
||||
call GBPalWhiteOutWithDelay3
|
||||
ld hl, $cfc4
|
||||
ld a, [hl]
|
||||
push af
|
||||
push hl
|
||||
res 0, [hl]
|
||||
xor a
|
||||
ld [$d72d], a
|
||||
dec a
|
||||
ld [$d42f], a
|
||||
call LoadMapData
|
||||
callba Func_c335
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
call GBFadeIn2
|
||||
ret
|
||||
|
||||
Func_57a2:
|
||||
ld hl, $c4d7
|
||||
ld a, $7e
|
||||
ld bc, $0031
|
||||
call FillMemory
|
||||
ld hl, $c4cc
|
||||
ld b, $1
|
||||
ld c, $9
|
||||
call Func_5ab3
|
||||
ld hl, $c4e2
|
||||
ld de, CancelTextString
|
||||
jp PlaceString
|
||||
|
||||
CancelTextString:
|
||||
db "CANCEL@"
|
||||
|
||||
Func_57c7:
|
||||
ld a, [$cc3d]
|
||||
ld hl, $c455
|
||||
ld bc, $0014
|
||||
call AddNTimes
|
||||
ld [hl], $ec
|
||||
ret
|
||||
|
||||
Func_57d6:
|
||||
ld a, [$cc26]
|
||||
ld [wWhichPokemon], a
|
||||
ld a, $36
|
||||
call Predef
|
||||
ld a, $37
|
||||
call Predef
|
||||
call GBPalNormal
|
||||
call LoadTrainerInfoTextBoxTiles
|
||||
call Func_57f2
|
||||
jp Func_57a2
|
||||
|
||||
Func_57f2:
|
||||
ld hl, wTileMap
|
||||
ld b, $6
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c440
|
||||
ld b, $6
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c3a5
|
||||
ld de, W_PLAYERNAME
|
||||
call PlaceString
|
||||
ld hl, $c445
|
||||
ld de, $d887
|
||||
call PlaceString
|
||||
ld hl, $c3b6
|
||||
ld de, $d164
|
||||
call Func_5827
|
||||
ld hl, $c456
|
||||
ld de, $d89d
|
||||
|
||||
Func_5827:
|
||||
ld c, $0
|
||||
.asm_5829
|
||||
ld a, [de]
|
||||
cp $ff
|
||||
ret z
|
||||
ld [$d11e], a
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
push hl
|
||||
ld a, c
|
||||
ld [$ff95], a
|
||||
call GetMonName
|
||||
pop hl
|
||||
call PlaceString
|
||||
pop de
|
||||
inc de
|
||||
pop hl
|
||||
ld bc, $0014
|
||||
add hl, bc
|
||||
pop bc
|
||||
inc c
|
||||
jr .asm_5829 ; 0x5847 $e0
|
||||
|
||||
TradeCenter_Trade:
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [$cc43], a
|
||||
ld [$cc3e], a
|
||||
ld [$cc37], a
|
||||
ld [$cc34], a
|
||||
ld hl, $c490
|
||||
ld b, $4
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld a, [$cd3d]
|
||||
ld hl, $d164
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
ld hl, $cd6d
|
||||
ld de, $cd3f
|
||||
ld bc, $000b
|
||||
call CopyData
|
||||
ld a, [$cd3e]
|
||||
ld hl, $d89d
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
ld hl, WillBeTradedText
|
||||
ld bc, $c4b9
|
||||
call TextCommandProcessor
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld hl, $c436
|
||||
ld bc, $080b
|
||||
ld a, $5
|
||||
ld [$d12c], a
|
||||
ld a, $14
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
call LoadScreenTilesFromBuffer1
|
||||
ld a, [$cc26]
|
||||
and a
|
||||
jr z, .asm_58d9 ; 0x58b9 $1e
|
||||
ld a, $1
|
||||
ld [$cc42], a
|
||||
ld hl, $c490
|
||||
ld b, $4
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c4b9
|
||||
ld de, TradeCanceled
|
||||
call PlaceString
|
||||
call Func_226e
|
||||
jp Func_5a18
|
||||
.asm_58d9
|
||||
ld a, $2
|
||||
ld [$cc42], a
|
||||
call Func_226e
|
||||
ld a, [$cc3d]
|
||||
dec a
|
||||
jr nz, .asm_58fd ; 0x58e5 $16
|
||||
ld hl, $c490
|
||||
ld b, $4
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c4b9
|
||||
ld de, TradeCanceled
|
||||
call PlaceString
|
||||
jp Func_5a18
|
||||
.asm_58fd
|
||||
ld a, [$cd3d]
|
||||
ld hl, W_PARTYMON1OT ; OT names of player
|
||||
call SkipFixedLengthTextEntries
|
||||
ld de, $cd41
|
||||
ld bc, $000b
|
||||
call CopyData
|
||||
ld hl, $d16b
|
||||
ld a, [$cd3d]
|
||||
ld bc, $002c
|
||||
call AddNTimes
|
||||
ld bc, $000c
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [$cd4c], a
|
||||
ld a, [hl]
|
||||
ld [$cd4d], a
|
||||
ld a, [$cd3e]
|
||||
ld hl, W_ENEMYMON1OT ; OT names of other player
|
||||
call SkipFixedLengthTextEntries
|
||||
ld de, $cd4e
|
||||
ld bc, $000b
|
||||
call CopyData
|
||||
ld hl, wEnemyMons
|
||||
ld a, [$cd3e]
|
||||
ld bc, $002c
|
||||
call AddNTimes
|
||||
ld bc, $000c
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [$cd59], a
|
||||
ld a, [hl]
|
||||
ld [$cd5a], a
|
||||
ld a, [$cd3d]
|
||||
ld [wWhichPokemon], a
|
||||
ld hl, $d164
|
||||
ld b, $0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$cd3d], a
|
||||
xor a
|
||||
ld [$cf95], a
|
||||
call RemovePokemon
|
||||
ld a, [$cd3e]
|
||||
ld c, a
|
||||
ld [wWhichPokemon], a
|
||||
ld hl, $d89d
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [$cf91], a
|
||||
ld hl, wEnemyMons
|
||||
ld a, c
|
||||
ld bc, $002c
|
||||
call AddNTimes
|
||||
ld de, $cf98
|
||||
ld bc, $002c
|
||||
call CopyData
|
||||
call AddEnemyMonToPlayerParty
|
||||
ld a, [$d163]
|
||||
dec a
|
||||
ld [wWhichPokemon], a
|
||||
ld a, $1
|
||||
ld [$ccd4], a
|
||||
ld a, [$cd3e]
|
||||
ld hl, $d89d
|
||||
ld b, $0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$cd3e], a
|
||||
ld a, $a
|
||||
ld [wMusicHeaderPointer], a
|
||||
ld a, $2
|
||||
ld [$c0f0], a
|
||||
ld a, MUSIC_SAFARI_ZONE
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
call ClearScreen
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
xor a
|
||||
ld [$cc5b], a
|
||||
ld a, [$ffaa]
|
||||
cp $1
|
||||
jr z, .asm_59d9 ; 0x59d0 $7
|
||||
ld a, $38
|
||||
call Predef
|
||||
jr .asm_59de ; 0x59d7 $5
|
||||
.asm_59d9
|
||||
ld a, $2f
|
||||
call Predef
|
||||
.asm_59de
|
||||
callab Func_3ad0e
|
||||
call ClearScreen
|
||||
call LoadTrainerInfoTextBoxTiles
|
||||
call Func_226e
|
||||
ld c, $28
|
||||
call DelayFrames
|
||||
ld hl, $c490
|
||||
ld b, $4
|
||||
ld c, $12
|
||||
call Func_5ab3
|
||||
ld hl, $c4b9
|
||||
ld de, TradeCompleted
|
||||
call PlaceString
|
||||
ld a, $50
|
||||
call Predef
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [$cc38], a
|
||||
jp Func_5345
|
||||
|
||||
Func_5a18:
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [$cc38], a
|
||||
jp Func_551c
|
||||
|
||||
WillBeTradedText: ; 5a24 (1:5a24)
|
||||
TX_FAR _WillBeTradedText
|
||||
db "@"
|
||||
|
||||
TradeCompleted:
|
||||
db "Trade completed!@"
|
||||
|
||||
TradeCanceled:
|
||||
db "Too bad! The trade"
|
||||
next "was canceled!@"
|
||||
|
||||
PointerTable_5a5b: ; 5a5b (1:5a5b)
|
||||
dw TradeCenter_SelectMon
|
||||
dw TradeCenter_Trade
|
||||
|
||||
Func_5a5f: ; 5a5f (1:5a5f)
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $2
|
||||
jr z, .asm_5a75
|
||||
cp $3
|
||||
jr z, .asm_5a75
|
||||
cp $5
|
||||
ret nz
|
||||
ld a, $4d
|
||||
call Predef ; indirect jump to Func_5aaf (5aaf (1:5aaf))
|
||||
jp InitGame
|
||||
.asm_5a75
|
||||
call Func_5317
|
||||
ld hl, Club_GFX
|
||||
ld a, h
|
||||
ld [$d52f], a
|
||||
ld a, l
|
||||
ld [$d52e], a
|
||||
ld a, Bank(Club_GFX)
|
||||
ld [$d52b], a
|
||||
ld hl, Club_Coll
|
||||
ld a, h
|
||||
ld [$d531], a
|
||||
ld a, l
|
||||
ld [$d530], a
|
||||
xor a
|
||||
ld [W_GRASSRATE], a ; $d887
|
||||
inc a
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
ld [$ffb5], a
|
||||
ld a, $a
|
||||
ld [wMusicHeaderPointer], a
|
||||
ld a, BANK(Music_Celadon)
|
||||
ld [$c0f0], a
|
||||
ld a, MUSIC_CELADON
|
||||
ld [$c0ee], a
|
||||
jp PlaySound
|
||||
|
||||
Func_5aaf: ; 5aaf (1:5aaf)
|
||||
ret
|
||||
|
||||
Func_5ab0:
|
||||
call Load16BitRegisters
|
||||
|
||||
Func_5ab3: ; 5ab3 (1:5ab3)
|
||||
push hl
|
||||
ld a, $78
|
||||
ld [hli], a
|
||||
inc a
|
||||
call Func_5ae0
|
||||
inc a
|
||||
ld [hl], a
|
||||
pop hl
|
||||
ld de, $14
|
||||
add hl, de
|
||||
.asm_5ac2
|
||||
push hl
|
||||
ld a, $7b
|
||||
ld [hli], a
|
||||
ld a, $7f
|
||||
call Func_5ae0
|
||||
ld [hl], $77
|
||||
pop hl
|
||||
ld de, $14
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .asm_5ac2
|
||||
ld a, $7c
|
||||
ld [hli], a
|
||||
ld a, $76
|
||||
call Func_5ae0
|
||||
ld [hl], $7d
|
||||
ret
|
||||
|
||||
Func_5ae0: ; 5ae0 (1:5ae0)
|
||||
ld d, c
|
||||
.asm_5ae1
|
||||
ld [hli], a
|
||||
dec d
|
||||
jr nz, .asm_5ae1
|
||||
ret
|
24
engine/clear_save.asm
Executable file
24
engine/clear_save.asm
Executable file
|
@ -0,0 +1,24 @@
|
|||
Func_1c98a: ; 1c98a (7:498a)
|
||||
call ClearScreen
|
||||
call GoPAL_SET_CF1C
|
||||
call LoadFontTilePatterns
|
||||
call LoadTextBoxTilePatterns
|
||||
ld hl, ClearSaveDataText
|
||||
call PrintText
|
||||
FuncCoord 14, 7 ; $c43a
|
||||
ld hl, Coord
|
||||
ld bc, $80f
|
||||
ld a, $7
|
||||
ld [$d12c], a
|
||||
ld a, $14
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jp z, InitGame
|
||||
callba Func_73b6a
|
||||
jp InitGame
|
||||
|
||||
ClearSaveDataText: ; 1c9c1 (7:49c1)
|
||||
TX_FAR _ClearSaveDataText
|
||||
db "@"
|
159
engine/evolution.asm
Executable file
159
engine/evolution.asm
Executable file
|
@ -0,0 +1,159 @@
|
|||
Func_7bde9: ; 7bde9 (1e:7de9)
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld a, [$cf91]
|
||||
push af
|
||||
ld a, [$d0b5]
|
||||
push af
|
||||
xor a
|
||||
ld [$d083], a
|
||||
ld [$c02a], a
|
||||
dec a
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, (SFX_08_3c - SFX_Headers_08) / 3
|
||||
call PlaySound
|
||||
call Delay3
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld [$ffd7], a
|
||||
ld a, [$cee9]
|
||||
ld [$cf1d], a
|
||||
ld c, $0
|
||||
call Func_7beb4
|
||||
ld a, [$ceea]
|
||||
ld [$cf91], a
|
||||
ld [$d0b5], a
|
||||
call Func_7beb9
|
||||
ld de, $9000
|
||||
ld hl, $9310
|
||||
ld bc, $31
|
||||
call CopyVideoData
|
||||
ld a, [$cee9]
|
||||
ld [$cf91], a
|
||||
ld [$d0b5], a
|
||||
call Func_7beb9
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, [$cee9]
|
||||
call PlayCry
|
||||
call WaitForSoundToFinish
|
||||
ld c, BANK(Music_SafariZone)
|
||||
ld a, MUSIC_SAFARI_ZONE
|
||||
call PlayMusic
|
||||
ld c, $50
|
||||
call DelayFrames
|
||||
ld c, $1
|
||||
call Func_7beb4
|
||||
ld bc, $110
|
||||
.asm_7be63
|
||||
push bc
|
||||
call asm_7befa
|
||||
jr c, .asm_7bea9
|
||||
call asm_7bec2
|
||||
pop bc
|
||||
inc b
|
||||
dec c
|
||||
dec c
|
||||
jr nz, .asm_7be63
|
||||
xor a
|
||||
ld [$ceec], a
|
||||
ld a, $31
|
||||
ld [$ceeb], a
|
||||
call Func_7bed6
|
||||
ld a, [$ceea]
|
||||
.asm_7be81
|
||||
ld [$cf1d], a
|
||||
ld a, $ff
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld a, [$cf1d]
|
||||
call PlayCry
|
||||
ld c, $0
|
||||
call Func_7beb4
|
||||
pop af
|
||||
ld [$d0b5], a
|
||||
pop af
|
||||
ld [$cf91], a
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ld a, [$ceec]
|
||||
and a
|
||||
ret z
|
||||
scf
|
||||
ret
|
||||
.asm_7bea9
|
||||
pop bc
|
||||
ld a, $1
|
||||
ld [$ceec], a
|
||||
ld a, [$cee9]
|
||||
jr .asm_7be81
|
||||
|
||||
Func_7beb4: ; 7beb4 (1e:7eb4)
|
||||
ld b, $b
|
||||
jp GoPAL_SET
|
||||
|
||||
Func_7beb9: ; 7beb9 (1e:7eb9)
|
||||
call GetMonHeader
|
||||
FuncCoord 7, 2 ; $c3cf
|
||||
ld hl, Coord
|
||||
jp LoadFlippedFrontSpriteByMonIndex
|
||||
asm_7bec2: ; 7bec2 (1e:7ec2)
|
||||
ld a, $31
|
||||
ld [$ceeb], a
|
||||
call Func_7bed6
|
||||
ld a, $cf
|
||||
ld [$ceeb], a
|
||||
call Func_7bed6
|
||||
dec b
|
||||
jr nz, asm_7bec2
|
||||
ret
|
||||
|
||||
Func_7bed6: ; 7bed6 (1e:7ed6)
|
||||
push bc
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
FuncCoord 7, 2 ; $c3cf
|
||||
ld hl, Coord
|
||||
ld bc, $707
|
||||
ld de, $d
|
||||
.asm_7bee3
|
||||
push bc
|
||||
.asm_7bee4
|
||||
ld a, [$ceeb]
|
||||
add [hl]
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_7bee4
|
||||
pop bc
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .asm_7bee3
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
pop bc
|
||||
ret
|
||||
asm_7befa: ; 7befa (1e:7efa)
|
||||
call DelayFrame
|
||||
push bc
|
||||
call GetJoypadStateLowSensitivity
|
||||
ld a, [$ffb5]
|
||||
pop bc
|
||||
and $2
|
||||
jr nz, .asm_7bf0d
|
||||
.asm_7bf08
|
||||
dec c
|
||||
jr nz, asm_7befa
|
||||
and a
|
||||
ret
|
||||
.asm_7bf0d
|
||||
ld a, [$ccd4]
|
||||
and a
|
||||
jr nz, .asm_7bf08
|
||||
scf
|
||||
ret
|
44
engine/evolve_trade.asm
Executable file
44
engine/evolve_trade.asm
Executable file
|
@ -0,0 +1,44 @@
|
|||
EvolveTradeMon: ; 17d7d (5:7d7d)
|
||||
; Verify the TradeMon's species name before
|
||||
; attempting to initiate a trade evolution.
|
||||
|
||||
; The names of the trade evolutions in Blue (JP)
|
||||
; are checked. In that version, TradeMons that
|
||||
; can evolve are Graveler and Haunter.
|
||||
|
||||
; In localization, this check was translated
|
||||
; before monster names were finalized.
|
||||
; Then, Haunter's name was "Spectre".
|
||||
; Since its name no longer starts with
|
||||
; "SP", it is prevented from evolving.
|
||||
|
||||
; This may have been why Red/Green's trades
|
||||
; were used instead, where none can evolve.
|
||||
|
||||
; This was fixed in Yellow.
|
||||
|
||||
ld a, [wTradeMonNick]
|
||||
|
||||
; GRAVELER
|
||||
cp "G"
|
||||
jr z, .ok
|
||||
|
||||
; "SPECTRE" (HAUNTER)
|
||||
cp "S"
|
||||
ret nz
|
||||
ld a, [wTradeMonNick + 1]
|
||||
cp "P"
|
||||
ret nz
|
||||
|
||||
.ok
|
||||
ld a, [W_NUMINPARTY] ; $d163
|
||||
dec a
|
||||
ld [wWhichPokemon], a ; $cf92
|
||||
ld a, $1
|
||||
ld [$ccd4], a
|
||||
ld a, $32
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
callab Func_3ad0e
|
||||
xor a
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
jp Func_2307
|
495
engine/evos_moves.asm
Executable file
495
engine/evos_moves.asm
Executable file
|
@ -0,0 +1,495 @@
|
|||
Func_3ad0e: ; 3ad0e (e:6d0e)
|
||||
ld hl, $ccd3
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld c, a
|
||||
ld b, $1
|
||||
call Func_3b057
|
||||
|
||||
Func_3ad1c: ; 3ad1c (e:6d1c)
|
||||
ld a, [$ffd7]
|
||||
push af
|
||||
xor a
|
||||
ld [$d121], a
|
||||
dec a
|
||||
ld [wWhichPokemon], a ; $cf92
|
||||
push hl
|
||||
push bc
|
||||
push de
|
||||
ld hl, W_NUMINPARTY ; $d163
|
||||
push hl
|
||||
asm_3ad2e: ; 3ad2e (e:6d2e)
|
||||
ld hl, wWhichPokemon ; $cf92
|
||||
inc [hl]
|
||||
pop hl
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
cp $ff
|
||||
jp z, Func_3aede
|
||||
ld [$cee9], a
|
||||
push hl
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld c, a
|
||||
ld hl, $ccd3
|
||||
ld b, $2
|
||||
call Func_3b057
|
||||
ld a, c
|
||||
and a
|
||||
jp z, asm_3ad2e
|
||||
ld a, [$cee9]
|
||||
dec a
|
||||
ld b, $0
|
||||
ld hl, EvosMovesPointerTable
|
||||
add a
|
||||
rl b
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push hl
|
||||
ld a, [$cf91]
|
||||
push af
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
call LoadMonData
|
||||
pop af
|
||||
ld [$cf91], a
|
||||
pop hl
|
||||
|
||||
Func_3ad71: ; 3ad71 (e:6d71)
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, asm_3ad2e
|
||||
ld b, a
|
||||
cp $3
|
||||
jr z, .asm_3ad91
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $32
|
||||
jr z, asm_3ad2e
|
||||
ld a, b
|
||||
cp $2
|
||||
jr z, .asm_3ada4
|
||||
ld a, [$ccd4]
|
||||
and a
|
||||
jr nz, asm_3ad2e
|
||||
ld a, b
|
||||
cp $1
|
||||
jr z, .asm_3adad
|
||||
.asm_3ad91
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $32
|
||||
jp nz, Func_3aed9
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [$cfb9]
|
||||
cp b
|
||||
jp c, asm_3ad2e
|
||||
jr .asm_3adb6
|
||||
.asm_3ada4
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [$cf91]
|
||||
cp b
|
||||
jp nz, Func_3aed9
|
||||
.asm_3adad
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [$cfb9]
|
||||
cp b
|
||||
jp c, Func_3aeda
|
||||
.asm_3adb6
|
||||
ld [W_CURENEMYLVL], a ; $d127
|
||||
ld a, $1
|
||||
ld [$d121], a
|
||||
push hl
|
||||
ld a, [hl]
|
||||
ld [$ceea], a
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call GetPartyMonName
|
||||
call CopyStringToCF4B
|
||||
ld hl, IsEvolvingText
|
||||
call PrintText
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld hl, wTileMap
|
||||
ld bc, $c14
|
||||
call ClearScreenArea
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, $ff
|
||||
ld [$cfcb], a
|
||||
call CleanLCD_OAM
|
||||
callab Func_7bde9
|
||||
jp c, Func_3af2e
|
||||
ld hl, EvolvedText
|
||||
call PrintText
|
||||
pop hl
|
||||
ld a, [hl]
|
||||
ld [$d0b5], a
|
||||
ld [$cf98], a
|
||||
ld [$ceea], a
|
||||
ld a, MONSTER_NAME
|
||||
ld [W_LISTTYPE], a
|
||||
ld a, $e
|
||||
ld [$d0b7], a
|
||||
call GetName
|
||||
push hl
|
||||
ld hl, IntoText
|
||||
call Func_3c59
|
||||
ld a, (SFX_02_3b - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent
|
||||
call WaitForSoundToFinish
|
||||
ld c, $28
|
||||
call DelayFrames
|
||||
call ClearScreen
|
||||
call Func_3aef7
|
||||
ld a, [$d11e]
|
||||
push af
|
||||
ld a, [$d0b5]
|
||||
ld [$d11e], a
|
||||
ld a, $3a
|
||||
call Predef ; indirect jump to IndexToPokedex (41010 (10:5010))
|
||||
ld a, [$d11e]
|
||||
dec a
|
||||
ld hl, BulbasaurBaseStats ; $43de
|
||||
ld bc, $1c
|
||||
call AddNTimes
|
||||
ld de, W_MONHEADER
|
||||
call CopyData
|
||||
ld a, [$d0b5]
|
||||
ld [$d0b8], a
|
||||
pop af
|
||||
ld [$d11e], a
|
||||
ld hl, $cfa8
|
||||
ld de, $cfba
|
||||
ld b, $1
|
||||
call CalcStats
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
ld bc, $2c
|
||||
call AddNTimes
|
||||
ld e, l
|
||||
ld d, h
|
||||
push hl
|
||||
push bc
|
||||
ld bc, $22
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld c, [hl]
|
||||
ld hl, $cfbb
|
||||
ld a, [hld]
|
||||
sub c
|
||||
ld c, a
|
||||
ld a, [hl]
|
||||
sbc b
|
||||
ld b, a
|
||||
ld hl, $cf9a
|
||||
ld a, [hl]
|
||||
add c
|
||||
ld [hld], a
|
||||
ld a, [hl]
|
||||
adc b
|
||||
ld [hl], a
|
||||
dec hl
|
||||
pop bc
|
||||
call CopyData
|
||||
ld a, [$d0b5]
|
||||
ld [$d11e], a
|
||||
xor a
|
||||
ld [$cc49], a
|
||||
call Func_3af5b
|
||||
pop hl
|
||||
ld a, $42
|
||||
call Predef ; indirect jump to SetPartyMonTypes (5db5e (17:5b5e))
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
and a
|
||||
call z, Func_3af52
|
||||
ld a, $3a
|
||||
call Predef ; indirect jump to IndexToPokedex (41010 (10:5010))
|
||||
ld a, [$d11e]
|
||||
dec a
|
||||
ld c, a
|
||||
ld b, $1
|
||||
ld hl, wPokedexOwned ; $d2f7
|
||||
push bc
|
||||
call Func_3b057
|
||||
pop bc
|
||||
ld hl, wPokedexSeen ; $d30a
|
||||
call Func_3b057
|
||||
pop de
|
||||
pop hl
|
||||
ld a, [$cf98]
|
||||
ld [hl], a
|
||||
push hl
|
||||
ld l, e
|
||||
ld h, d
|
||||
jr Func_3aeda
|
||||
|
||||
Func_3aed9: ; 3aed9 (e:6ed9)
|
||||
inc hl
|
||||
|
||||
Func_3aeda: ; 3aeda (e:6eda)
|
||||
inc hl
|
||||
jp Func_3ad71
|
||||
|
||||
Func_3aede: ; 3aede (e:6ede)
|
||||
pop de
|
||||
pop bc
|
||||
pop hl
|
||||
pop af
|
||||
ld [$ffd7], a
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $32
|
||||
ret z
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
and a
|
||||
ret nz
|
||||
ld a, [$d121]
|
||||
and a
|
||||
call nz, Func_2307
|
||||
ret
|
||||
|
||||
Func_3aef7: ; 3aef7 (e:6ef7)
|
||||
ld a, [$d0b5]
|
||||
push af
|
||||
ld a, [$d0b8]
|
||||
ld [$d0b5], a
|
||||
call GetName
|
||||
pop af
|
||||
ld [$d0b5], a
|
||||
ld hl, $cd6d
|
||||
ld de, $cf4b
|
||||
.asm_3af0e
|
||||
ld a, [de]
|
||||
inc de
|
||||
cp [hl]
|
||||
inc hl
|
||||
ret nz
|
||||
cp $50
|
||||
jr nz, .asm_3af0e
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld bc, $b
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call AddNTimes
|
||||
push hl
|
||||
call GetName
|
||||
ld hl, $cd6d
|
||||
pop de
|
||||
jp CopyData
|
||||
|
||||
Func_3af2e: ; 3af2e (e:6f2e)
|
||||
ld hl, StoppedEvolvingText
|
||||
call PrintText
|
||||
call ClearScreen
|
||||
pop hl
|
||||
call Func_3af52
|
||||
jp asm_3ad2e
|
||||
|
||||
EvolvedText: ; 3af3e (e:6f3e)
|
||||
TX_FAR _EvolvedText
|
||||
db "@"
|
||||
|
||||
IntoText: ; 3af43 (e:6f43)
|
||||
TX_FAR _IntoText
|
||||
db "@"
|
||||
|
||||
StoppedEvolvingText: ; 3af48 (e:6f48)
|
||||
TX_FAR _StoppedEvolvingText
|
||||
db "@"
|
||||
|
||||
IsEvolvingText: ; 3af4d (e:6f4d)
|
||||
TX_FAR _IsEvolvingText
|
||||
db "@"
|
||||
|
||||
Func_3af52: ; 3af52 (e:6f52)
|
||||
ld a, [W_ISLINKBATTLE] ; $d12b
|
||||
cp $32
|
||||
ret z
|
||||
jp ReloadTilesetTilePatterns
|
||||
|
||||
Func_3af5b: ; 3af5b (e:6f5b)
|
||||
ld hl, EvosMovesPointerTable
|
||||
ld a, [$d11e]
|
||||
ld [$cf91], a
|
||||
dec a
|
||||
ld bc, $0
|
||||
ld hl, EvosMovesPointerTable
|
||||
add a
|
||||
rl b
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
.asm_3af73
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr nz, .asm_3af73
|
||||
.asm_3af77
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .asm_3afb1
|
||||
ld b, a
|
||||
ld a, [W_CURENEMYLVL] ; $d127
|
||||
cp b
|
||||
ld a, [hli]
|
||||
jr nz, .asm_3af77
|
||||
ld d, a
|
||||
ld a, [$cc49]
|
||||
and a
|
||||
jr nz, .asm_3af96
|
||||
ld hl, W_PARTYMON1_MOVE1 ; $d173
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld bc, $2c
|
||||
call AddNTimes
|
||||
.asm_3af96
|
||||
ld b, $4
|
||||
.asm_3af98
|
||||
ld a, [hli]
|
||||
cp d
|
||||
jr z, .asm_3afb1
|
||||
dec b
|
||||
jr nz, .asm_3af98
|
||||
ld a, d
|
||||
ld [$d0e0], a
|
||||
ld [$d11e], a
|
||||
call GetMoveName
|
||||
call CopyStringToCF4B
|
||||
ld a, $1b
|
||||
call Predef ; indirect jump to LearnMove (6e43 (1:6e43))
|
||||
.asm_3afb1
|
||||
ld a, [$cf91]
|
||||
ld [$d11e], a
|
||||
ret
|
||||
|
||||
; writes the moves a mon has at level [W_CURENEMYLVL] to [de]
|
||||
; move slots are being filled up sequentially and shifted if all slots are full
|
||||
; [$cee9]: (?)
|
||||
WriteMonMoves: ; 3afb8 (e:6fb8)
|
||||
call Load16BitRegisters
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld hl, EvosMovesPointerTable
|
||||
ld b, $0
|
||||
ld a, [$cf91] ; cur mon ID
|
||||
dec a
|
||||
add a
|
||||
rl b
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
.skipEvoEntriesLoop
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr nz, .skipEvoEntriesLoop
|
||||
jr .firstMove
|
||||
.nextMove
|
||||
pop de
|
||||
.nextMove2
|
||||
inc hl
|
||||
.firstMove
|
||||
ld a, [hli] ; read level of next move in learnset
|
||||
and a
|
||||
jp z, .done ; end of list
|
||||
ld b, a
|
||||
ld a, [W_CURENEMYLVL] ; $d127
|
||||
cp b
|
||||
jp c, .done ; mon level < move level (assumption: learnset is sorted by level)
|
||||
ld a, [$cee9]
|
||||
and a
|
||||
jr z, .skipMinLevelCheck
|
||||
ld a, [wWhichTrade] ; $cd3d (min move level)
|
||||
cp b
|
||||
jr nc, .nextMove2 ; min level >= move level
|
||||
.skipMinLevelCheck
|
||||
push de
|
||||
ld c, $4
|
||||
.moveAlreadyLearnedCheckLoop
|
||||
ld a, [de]
|
||||
inc de
|
||||
cp [hl]
|
||||
jr z, .nextMove
|
||||
dec c
|
||||
jr nz, .moveAlreadyLearnedCheckLoop
|
||||
pop de
|
||||
push de
|
||||
ld c, $4
|
||||
.findEmptySlotLoop
|
||||
ld a, [de]
|
||||
and a
|
||||
jr z, .writeMoveToSlot2
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .findEmptySlotLoop
|
||||
pop de ; no empty move slots found
|
||||
push de
|
||||
push hl
|
||||
ld h, d
|
||||
ld l, e
|
||||
call WriteMonMoves_ShiftMoveData ; shift all moves one up (deleting move 1)
|
||||
ld a, [$cee9]
|
||||
and a
|
||||
jr z, .writeMoveToSlot
|
||||
push de
|
||||
ld bc, $12
|
||||
add hl, bc
|
||||
ld d, h
|
||||
ld e, l
|
||||
call WriteMonMoves_ShiftMoveData ; shift all move PP data one up
|
||||
pop de
|
||||
.writeMoveToSlot
|
||||
pop hl
|
||||
.writeMoveToSlot2
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
ld a, [$cee9]
|
||||
and a
|
||||
jr z, .nextMove
|
||||
push hl ; write move PP value
|
||||
ld a, [hl]
|
||||
ld hl, $15
|
||||
add hl, de
|
||||
push hl
|
||||
dec a
|
||||
ld hl, Moves
|
||||
ld bc, $6
|
||||
call AddNTimes
|
||||
ld de, $cee9
|
||||
ld a, BANK(Moves)
|
||||
call FarCopyData
|
||||
ld a, [$ceee]
|
||||
pop hl
|
||||
ld [hl], a
|
||||
pop hl
|
||||
jr .nextMove
|
||||
.done
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; shifts all move data one up (freeing 4th move slot)
|
||||
WriteMonMoves_ShiftMoveData: ; 3b04e (e:704e)
|
||||
ld c, $3
|
||||
.asm_3b050
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_3b050
|
||||
ret
|
||||
|
||||
Func_3b057: ; 3b057 (e:7057)
|
||||
ld a, $10
|
||||
jp Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
|
||||
INCLUDE "data/evos_moves.asm"
|
154
engine/experience.asm
Executable file
154
engine/experience.asm
Executable file
|
@ -0,0 +1,154 @@
|
|||
Func_58f43: ; 58f43 (16:4f43)
|
||||
ld a, [$cf98]
|
||||
ld [$d0b5], a
|
||||
call GetMonHeader
|
||||
ld d, $1
|
||||
.asm_58f4e
|
||||
inc d
|
||||
call CalcExperience
|
||||
push hl
|
||||
ld hl, $cfa8
|
||||
ld a, [$ff98]
|
||||
ld c, a
|
||||
ld a, [hld]
|
||||
sub c
|
||||
ld a, [$ff97]
|
||||
ld c, a
|
||||
ld a, [hld]
|
||||
sbc c
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld c, a
|
||||
ld a, [hl]
|
||||
sbc c
|
||||
pop hl
|
||||
jr nc, .asm_58f4e
|
||||
dec d
|
||||
ret
|
||||
|
||||
; calculates the amount of experience needed for level d
|
||||
CalcExperience: ; 58f6a (16:4f6a)
|
||||
ld a, [W_MONHGROWTHRATE]
|
||||
add a
|
||||
add a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, GrowthRateTable
|
||||
add hl, bc
|
||||
call CalcDSquared
|
||||
ld a, d
|
||||
ld [H_MULTIPLIER], a ; $ff99
|
||||
call Multiply
|
||||
ld a, [hl]
|
||||
and $f0
|
||||
swap a
|
||||
ld [H_MULTIPLIER], a ; $ff99
|
||||
call Multiply
|
||||
ld a, [hli]
|
||||
and $f
|
||||
ld [H_DIVISOR], a ; $ff99
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld a, [H_MULTIPLICAND] ; $ff96 (aliases: H_NUMTOPRINT)
|
||||
push af
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
push af
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
push af
|
||||
call CalcDSquared
|
||||
ld a, [hl]
|
||||
and $7f
|
||||
ld [H_MULTIPLIER], a ; $ff99
|
||||
call Multiply
|
||||
ld a, [H_MULTIPLICAND] ; $ff96 (aliases: H_NUMTOPRINT)
|
||||
push af
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
push af
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
push af
|
||||
ld a, [hli]
|
||||
push af
|
||||
xor a
|
||||
ld [H_MULTIPLICAND], a ; $ff96
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
ld a, d
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
ld a, [hli]
|
||||
ld [H_MULTIPLIER], a
|
||||
call Multiply
|
||||
ld b, [hl]
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
sub b
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
ld b, $0
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
sbc b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
ld a, [H_MULTIPLICAND] ; $ff96
|
||||
sbc b
|
||||
ld [H_MULTIPLICAND], a ; $ff96
|
||||
pop af
|
||||
and $80
|
||||
jr nz, .subtractSquaredTerm ; check sign
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
add b
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
adc b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND]
|
||||
adc b
|
||||
ld [H_MULTIPLICAND], a
|
||||
jr .addCubedTerm
|
||||
.subtractSquaredTerm
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
sub b
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
sbc b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND]
|
||||
sbc b
|
||||
ld [H_MULTIPLICAND], a
|
||||
.addCubedTerm
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
add b
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
adc b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
pop bc
|
||||
ld a, [H_MULTIPLICAND]
|
||||
adc b
|
||||
ld [H_MULTIPLICAND], a
|
||||
ret
|
||||
|
||||
; calculates d*d
|
||||
CalcDSquared: ; 59010 (16:5010)
|
||||
xor a
|
||||
ld [H_MULTIPLICAND], a ; $ff96 (aliases: H_NUMTOPRINT)
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
ld a, d
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
ld [H_MULTIPLIER], a ; $ff99 (aliases: H_DIVISOR, H_REMAINDER, H_POWEROFTEN)
|
||||
jp Multiply
|
||||
|
||||
; each entry has the following scheme:
|
||||
; %AAAABBBB %SCCCCCCC %DDDDDDDD %EEEEEEEE
|
||||
; resulting in
|
||||
; (a*n^3)/b + sign*c*n^2 + d*n - e
|
||||
; where sign = -1 <=> S=1
|
||||
GrowthRateTable: ; 5901d (16:501d)
|
||||
db $11,$00,$00,$00 ; medium fast n^3
|
||||
db $34,$0A,$00,$1E ; (unused?) 3/4 n^3 + 10 n^2 - 30
|
||||
db $34,$14,$00,$46 ; (unused?) 3/4 n^3 + 20 n^2 - 70
|
||||
db $65,$8F,$64,$8C ; medium slow: 6/5 n^3 - 15 n^2 + 100 n - 140
|
||||
db $45,$00,$00,$00 ; fast: 4/5 n^3
|
||||
db $54,$00,$00,$00 ; slow: 5/4 n^3
|
54
engine/game_corner_slots.asm
Executable file
54
engine/game_corner_slots.asm
Executable file
|
@ -0,0 +1,54 @@
|
|||
StartSlotMachine: ; 37e2d (d:7e2d)
|
||||
ld a, [wTrainerSpriteOffset]
|
||||
cp $fd
|
||||
jr z, .printOutOfOrder
|
||||
cp $fe
|
||||
jr z, .printOutToLunch
|
||||
cp $ff
|
||||
jr z, .printSomeonesKeys
|
||||
callba AbleToPlaySlotsCheck
|
||||
ld a, [wTrainerSpriteOffset]
|
||||
and a
|
||||
ret z
|
||||
ld a, [$cd05]
|
||||
ld b, a
|
||||
ld a, [wTrainerFacingDirection]
|
||||
inc a
|
||||
cp b
|
||||
jr z, .asm_37e58
|
||||
ld a, $fd
|
||||
jr .asm_37e5a
|
||||
.asm_37e58
|
||||
ld a, $fa
|
||||
.asm_37e5a
|
||||
ld [$cc5b], a
|
||||
ld a, [H_LOADEDROMBANK]
|
||||
ld [$cc5e], a
|
||||
call PromptUserToPlaySlots
|
||||
ret
|
||||
.printOutOfOrder
|
||||
ld a, $28
|
||||
jr .printText
|
||||
.printOutToLunch
|
||||
ld a, $29
|
||||
jr .printText
|
||||
.printSomeonesKeys
|
||||
ld a, $2a
|
||||
.printText
|
||||
push af
|
||||
call EnableAutoTextBoxDrawing
|
||||
pop af
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
GameCornerOutOfOrderText: ; 37e79 (d:7e79)
|
||||
TX_FAR _GameCornerOutOfOrderText
|
||||
db "@"
|
||||
|
||||
GameCornerOutToLunchText: ; 37e7e (d:7e7e)
|
||||
TX_FAR _GameCornerOutToLunchText
|
||||
db "@"
|
||||
|
||||
GameCornerSomeonesKeysText: ; 37e83 (d:7e83)
|
||||
TX_FAR _GameCornerSomeonesKeysText
|
||||
db "@"
|
32
engine/game_corner_slots2.asm
Executable file
32
engine/game_corner_slots2.asm
Executable file
|
@ -0,0 +1,32 @@
|
|||
AbleToPlaySlotsCheck ; 2ff09 (b:7f09)
|
||||
ld a, [$c102]
|
||||
and $8
|
||||
jr z, .done ; not able
|
||||
ld b, COIN_CASE
|
||||
ld a, $1c
|
||||
call Predef ; IsItemInBag_
|
||||
ld a, b
|
||||
and a
|
||||
ld b, $33 ; GameCornerCoinCaseText
|
||||
jr z, .printCoinCaseRequired
|
||||
ld hl, wPlayerCoins
|
||||
ld a, [hli]
|
||||
or [hl]
|
||||
jr nz, .done ; able to play
|
||||
ld b, $32 ; GameCornerNoCoinsText
|
||||
.printCoinCaseRequired
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, b
|
||||
call PrintPredefTextID
|
||||
xor a
|
||||
.done
|
||||
ld [$cd3d], a
|
||||
ret
|
||||
|
||||
GameCornerCoinCaseText: ; 2ff32 (b:7f32)
|
||||
TX_FAR _GameCornerCoinCaseText
|
||||
db "@"
|
||||
|
||||
GameCornerNoCoinsText: ; 2ff37 (b:7f37)
|
||||
TX_FAR _GameCornerNoCoinsText
|
||||
db "@"
|
220
engine/gamefreak.asm
Executable file
220
engine/gamefreak.asm
Executable file
|
@ -0,0 +1,220 @@
|
|||
LoadShootingStarGraphics: ; 70000 (1c:4000)
|
||||
ld a, $f9
|
||||
ld [rOBP0], a ; $ff48
|
||||
ld a, $a4
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld de, AnimationTileset2 + $30 ; $471e ; star tile (top left quadrant)
|
||||
ld hl, $8a00
|
||||
ld bc, (BANK(AnimationTileset2) << 8) + $01
|
||||
call CopyVideoData
|
||||
ld de, AnimationTileset2 + $130 ; $481e ; star tile (bottom left quadrant)
|
||||
ld hl, $8a10
|
||||
ld bc, (BANK(AnimationTileset2) << 8) + $01
|
||||
call CopyVideoData
|
||||
ld de, FallingStar ; $4190
|
||||
ld hl, $8a20
|
||||
ld bc, (BANK(FallingStar) << 8) + $01
|
||||
call CopyVideoData
|
||||
ld hl, GameFreakLogoOAMData ; $4140
|
||||
ld de, wOAMBuffer + $60
|
||||
ld bc, $40
|
||||
call CopyData
|
||||
ld hl, GameFreakShootingStarOAMData ; $4180
|
||||
ld de, wOAMBuffer
|
||||
ld bc, $10
|
||||
jp CopyData
|
||||
|
||||
AnimateShootingStar: ; 70044 (1c:4044)
|
||||
call LoadShootingStarGraphics
|
||||
ld a, (SFX_1f_67 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld hl, wOAMBuffer
|
||||
ld bc, $a004
|
||||
.asm_70052
|
||||
push hl
|
||||
push bc
|
||||
.asm_70054
|
||||
ld a, [hl]
|
||||
add $4
|
||||
ld [hli], a
|
||||
ld a, [hl]
|
||||
add $fc
|
||||
ld [hli], a
|
||||
inc hl
|
||||
inc hl
|
||||
dec c
|
||||
jr nz, .asm_70054
|
||||
ld c, $1
|
||||
call CheckForUserInterruption
|
||||
pop bc
|
||||
pop hl
|
||||
ret c
|
||||
ld a, [hl]
|
||||
cp $50
|
||||
jr nz, .asm_70070
|
||||
jr .asm_70052
|
||||
.asm_70070
|
||||
cp b
|
||||
jr nz, .asm_70052
|
||||
ld hl, wOAMBuffer
|
||||
ld c, $4
|
||||
ld de, $4
|
||||
.asm_7007b
|
||||
ld [hl], $a0
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_7007b
|
||||
ld b, $3
|
||||
.asm_70083
|
||||
ld hl, rOBP0 ; $ff48
|
||||
rrc [hl]
|
||||
rrc [hl]
|
||||
ld c, $a
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
dec b
|
||||
jr nz, .asm_70083
|
||||
ld de, wOAMBuffer
|
||||
ld a, $18
|
||||
.asm_70098
|
||||
push af
|
||||
ld hl, OAMData_700ee ; $40ee
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .asm_70098
|
||||
xor a
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld hl, PointerTable_700f2 ; $40f2
|
||||
ld c, $6
|
||||
.asm_700af
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
push bc
|
||||
push hl
|
||||
ld hl, wOAMBuffer + $50
|
||||
ld c, $4
|
||||
.asm_700ba
|
||||
ld a, [de]
|
||||
cp $ff
|
||||
jr z, .asm_700d5
|
||||
ld [hli], a
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc de
|
||||
inc hl
|
||||
inc hl
|
||||
dec c
|
||||
jr nz, .asm_700ba
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
cp $18
|
||||
jr z, .asm_700d5
|
||||
add $6
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
.asm_700d5
|
||||
call Func_7011f
|
||||
push af
|
||||
ld hl, $c310
|
||||
ld de, wOAMBuffer
|
||||
ld bc, $50
|
||||
call CopyData
|
||||
pop af
|
||||
pop hl
|
||||
pop bc
|
||||
ret c
|
||||
dec c
|
||||
jr nz, .asm_700af
|
||||
and a
|
||||
ret
|
||||
|
||||
OAMData_700ee: ; 700ee (1c:40ee)
|
||||
db $00,$00,$A2,$90
|
||||
|
||||
PointerTable_700f2: ; 700f2 (1c:40f2)
|
||||
dw OAMData_700fe
|
||||
dw OAMData_70106
|
||||
dw OAMData_7010e
|
||||
dw OAMData_70116
|
||||
dw OAMData_7011e
|
||||
dw OAMData_7011e
|
||||
|
||||
; each entry is only half of an OAM tile
|
||||
OAMData_700fe: ; 700fe (1c:40fe)
|
||||
db $68,$30
|
||||
db $68,$40
|
||||
db $68,$58
|
||||
db $68,$78
|
||||
|
||||
OAMData_70106: ; 70106 (1c:4106)
|
||||
db $68,$38
|
||||
db $68,$48
|
||||
db $68,$60
|
||||
db $68,$70
|
||||
|
||||
OAMData_7010e: ; 7010e (1c:410e)
|
||||
db $68,$34
|
||||
db $68,$4C
|
||||
db $68,$54
|
||||
db $68,$64
|
||||
|
||||
OAMData_70116: ; 70116 (1c:4116)
|
||||
db $68,$3C
|
||||
db $68,$5C
|
||||
db $68,$6C
|
||||
db $68,$74
|
||||
|
||||
OAMData_7011e: ; 7011e (1c:411e)
|
||||
db $FF
|
||||
|
||||
Func_7011f: ; 7011f (1c:411f)
|
||||
ld b, $8
|
||||
.asm_70121
|
||||
ld hl, $c35c
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld de, $fffc
|
||||
ld c, a
|
||||
.asm_7012b
|
||||
inc [hl]
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_7012b
|
||||
ld a, [rOBP1] ; $ff49
|
||||
xor $a0
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld c, $3
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
dec b
|
||||
jr nz, .asm_70121
|
||||
ret
|
||||
|
||||
GameFreakLogoOAMData: ; 70140 (1c:4140)
|
||||
db $48,$50,$8D,$00
|
||||
db $48,$58,$8E,$00
|
||||
db $50,$50,$8F,$00
|
||||
db $50,$58,$90,$00
|
||||
db $58,$50,$91,$00
|
||||
db $58,$58,$92,$00
|
||||
db $60,$30,$80,$00
|
||||
db $60,$38,$81,$00
|
||||
db $60,$40,$82,$00
|
||||
db $60,$48,$83,$00
|
||||
db $60,$50,$93,$00
|
||||
db $60,$58,$84,$00
|
||||
db $60,$60,$85,$00
|
||||
db $60,$68,$83,$00
|
||||
db $60,$70,$81,$00
|
||||
db $60,$78,$86,$00
|
||||
|
||||
GameFreakShootingStarOAMData: ; 70180 (1c:4180)
|
||||
db $00,$A0,$A0,$10
|
||||
db $00,$A8,$A0,$30
|
||||
db $08,$A0,$A1,$10
|
||||
db $08,$A8,$A1,$30
|
||||
|
||||
FallingStar: ; 70190 (1c:4190)
|
||||
INCBIN "gfx/falling_star.2bpp"
|
81
engine/give_pokemon.asm
Executable file
81
engine/give_pokemon.asm
Executable file
|
@ -0,0 +1,81 @@
|
|||
_GivePokemon: ; 4fda5 (13:7da5)
|
||||
call EnableAutoTextBoxDrawing
|
||||
xor a
|
||||
ld [$ccd3], a
|
||||
ld a, [W_NUMINPARTY] ; $d163
|
||||
cp $6
|
||||
jr c, .asm_4fe01
|
||||
ld a, [W_NUMINBOX] ; $da80
|
||||
cp $14
|
||||
jr nc, .asm_4fdf9
|
||||
xor a
|
||||
ld [W_ENEMYBATTSTATUS3], a ; $d069
|
||||
ld a, [$cf91]
|
||||
ld [W_ENEMYMONID], a
|
||||
callab Func_3eb01
|
||||
call SetPokedexOwnedFlag
|
||||
callab Func_e7a4
|
||||
ld hl, $cf4b
|
||||
ld a, [$d5a0]
|
||||
and $7f
|
||||
cp $9
|
||||
jr c, .asm_4fdec
|
||||
sub $9
|
||||
ld [hl], $f7
|
||||
inc hl
|
||||
add $f6
|
||||
jr .asm_4fdee
|
||||
.asm_4fdec
|
||||
add $f7
|
||||
.asm_4fdee
|
||||
ld [hli], a
|
||||
ld [hl], $50
|
||||
ld hl, SetToBoxText
|
||||
call PrintText
|
||||
scf
|
||||
ret
|
||||
.asm_4fdf9
|
||||
ld hl, BoxIsFullText
|
||||
call PrintText
|
||||
and a
|
||||
ret
|
||||
.asm_4fe01
|
||||
call SetPokedexOwnedFlag
|
||||
call AddPokemonToParty
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld [$ccd3], a
|
||||
scf
|
||||
ret
|
||||
|
||||
SetPokedexOwnedFlag: ; 4fe11 (13:7e11)
|
||||
ld a, [$cf91]
|
||||
push af
|
||||
ld [$d11e], a
|
||||
ld a, $3a
|
||||
call Predef ; indirect jump to IndexToPokedex (41010 (10:5010))
|
||||
ld a, [$d11e]
|
||||
dec a
|
||||
ld c, a
|
||||
ld hl, wPokedexOwned ; $d2f7
|
||||
ld b, $1
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
pop af
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
ld hl, GotMonText
|
||||
jp PrintText
|
||||
|
||||
GotMonText: ; 4fe39 (13:7e39)
|
||||
TX_FAR _GotMonText
|
||||
db $0b
|
||||
db "@"
|
||||
|
||||
SetToBoxText: ; 4fe3f (13:7e3f)
|
||||
TX_FAR _SetToBoxText
|
||||
db "@"
|
||||
|
||||
BoxIsFullText: ; 4fe44 (13:7e44)
|
||||
TX_FAR _BoxIsFullText
|
||||
db "@"
|
306
engine/hall_of_fame.asm
Executable file
306
engine/hall_of_fame.asm
Executable file
|
@ -0,0 +1,306 @@
|
|||
AnimateHallOfFame: ; 701a0 (1c:41a0)
|
||||
call Func_70423
|
||||
call ClearScreen
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
call LoadFontTilePatterns
|
||||
call LoadTextBoxTilePatterns
|
||||
call DisableLCD
|
||||
ld hl, $9800
|
||||
ld bc, $800
|
||||
ld a, $7f
|
||||
call FillMemory
|
||||
call EnableLCD
|
||||
ld hl, rLCDC ; $ff40
|
||||
set 3, [hl]
|
||||
xor a
|
||||
ld hl, $cc5b
|
||||
ld bc, $60
|
||||
call FillMemory
|
||||
xor a
|
||||
ld [$cfcb], a
|
||||
ld [$ffd7], a
|
||||
ld [W_SPRITEFLIPPED], a
|
||||
ld [$d358], a
|
||||
ld [$cd40], a
|
||||
inc a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld hl, $d5a2
|
||||
ld a, [hl]
|
||||
inc a
|
||||
jr z, .asm_701eb
|
||||
inc [hl]
|
||||
.asm_701eb
|
||||
ld a, $90
|
||||
ld [$ffb0], a
|
||||
ld c, BANK(Music_HallOfFame)
|
||||
ld a, MUSIC_HALL_OF_FAME
|
||||
call PlayMusic
|
||||
ld hl, W_PARTYMON1 ; $d164
|
||||
ld c, $ff
|
||||
.asm_701fb
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_70241
|
||||
inc c
|
||||
push hl
|
||||
push bc
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld a, c
|
||||
ld [$cd3e], a
|
||||
ld hl, W_PARTYMON1_LEVEL ; $d18c
|
||||
ld bc, $2c
|
||||
call AddNTimes
|
||||
ld a, [hl]
|
||||
ld [$cd3f], a
|
||||
call Func_70278
|
||||
call Func_702e1
|
||||
ld c, $50
|
||||
call DelayFrames
|
||||
FuncCoord 2, 13 ; $c4a6
|
||||
ld hl, Coord
|
||||
ld b, $3
|
||||
ld c, $e
|
||||
call TextBoxBorder
|
||||
FuncCoord 4, 15 ; $c4d0
|
||||
ld hl, Coord
|
||||
ld de, HallOfFameText
|
||||
call PlaceString
|
||||
ld c, $b4
|
||||
call DelayFrames
|
||||
call GBFadeOut2
|
||||
pop bc
|
||||
pop hl
|
||||
jr .asm_701fb
|
||||
.asm_70241
|
||||
ld a, c
|
||||
inc a
|
||||
ld hl, $cc5b
|
||||
ld bc, $10
|
||||
call AddNTimes
|
||||
ld [hl], $ff
|
||||
call Func_73b0d
|
||||
xor a
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
inc a
|
||||
ld [$cd40], a
|
||||
call Func_70278
|
||||
call Func_70377
|
||||
call Func_70423
|
||||
xor a
|
||||
ld [$ffb0], a
|
||||
ld hl, rLCDC ; $ff40
|
||||
res 3, [hl]
|
||||
ret
|
||||
|
||||
HallOfFameText: ; 7026b (1c:426b)
|
||||
db "HALL OF FAME@"
|
||||
|
||||
Func_70278: ; 70278 (1c:4278)
|
||||
call ClearScreen
|
||||
ld a, $d0
|
||||
ld [$ffaf], a
|
||||
ld a, $c0
|
||||
ld [$ffae], a
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld [$cf91], a
|
||||
ld [$d0b5], a
|
||||
ld [$cfd9], a
|
||||
ld [$cf1d], a
|
||||
ld a, [$cd40]
|
||||
and a
|
||||
jr z, .asm_7029d
|
||||
call Func_7033e
|
||||
jr .asm_702ab
|
||||
.asm_7029d
|
||||
FuncCoord 12, 5 ; $c410
|
||||
ld hl, Coord
|
||||
call GetMonHeader
|
||||
call LoadFrontSpriteByMonIndex
|
||||
ld a, $4
|
||||
call Predef ; indirect jump to LoadMonBackSprite (3f103 (f:7103))
|
||||
.asm_702ab
|
||||
ld b, $b
|
||||
ld c, $0
|
||||
call GoPAL_SET
|
||||
ld a, $e4
|
||||
ld [rBGP], a ; $ff47
|
||||
ld c, $31
|
||||
call Func_7036d
|
||||
ld d, $a0
|
||||
ld e, $4
|
||||
ld a, [$cf1b]
|
||||
and a
|
||||
jr z, .asm_702c7
|
||||
sla e
|
||||
.asm_702c7
|
||||
call .asm_702d5
|
||||
xor a
|
||||
ld [$ffaf], a
|
||||
ld c, a
|
||||
call Func_7036d
|
||||
ld d, $0
|
||||
ld e, $fc
|
||||
.asm_702d5
|
||||
call DelayFrame
|
||||
ld a, [$ffae]
|
||||
add e
|
||||
ld [$ffae], a
|
||||
cp d
|
||||
jr nz, .asm_702d5
|
||||
ret
|
||||
|
||||
Func_702e1: ; 702e1 (1c:42e1)
|
||||
ld a, [$cd3e]
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call GetPartyMonName
|
||||
call Func_702f0
|
||||
jp Func_70404
|
||||
|
||||
Func_702f0: ; 702f0 (1c:42f0)
|
||||
FuncCoord 0, 2 ; $c3c8
|
||||
ld hl, Coord
|
||||
ld b, $9
|
||||
ld c, $a
|
||||
call TextBoxBorder
|
||||
FuncCoord 2, 6 ; $c41a
|
||||
ld hl, Coord
|
||||
ld de, HoFMonInfoText
|
||||
call PlaceString
|
||||
FuncCoord 1, 4 ; $c3f1
|
||||
ld hl, Coord
|
||||
ld de, $cd6d
|
||||
call PlaceString
|
||||
ld a, [$cd3f]
|
||||
FuncCoord 8, 7 ; $c434
|
||||
ld hl, Coord
|
||||
call PrintLevelCommon
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld [$d0b5], a
|
||||
FuncCoord 3, 9 ; $c457
|
||||
ld hl, Coord
|
||||
ld a, $4b
|
||||
call Predef ; indirect jump to Func_27d6b (27d6b (9:7d6b))
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
jp PlayCry
|
||||
|
||||
HoFMonInfoText: ; 70329 (1c:4329)
|
||||
db "LEVEL/"
|
||||
next "TYPE1/"
|
||||
next "TYPE2/@"
|
||||
|
||||
Func_7033e: ; 7033e (1c:433e)
|
||||
ld de, RedPicFront ; $6ede
|
||||
ld a, BANK(RedPicFront)
|
||||
call UncompressSpriteFromDE
|
||||
ld hl, S_SPRITEBUFFER1
|
||||
ld de, $a000
|
||||
ld bc, $310
|
||||
call CopyData
|
||||
ld de, $9000
|
||||
call InterlaceMergeSpriteBuffers
|
||||
ld de, RedPicBack ; $7e0a
|
||||
ld a, BANK(RedPicBack)
|
||||
call UncompressSpriteFromDE
|
||||
ld a, $3
|
||||
call Predef ; indirect jump to ScaleSpriteByTwo (2fe40 (b:7e40))
|
||||
ld de, $9310
|
||||
call InterlaceMergeSpriteBuffers
|
||||
ld c, $1
|
||||
|
||||
Func_7036d: ; 7036d (1c:436d)
|
||||
ld b, $0
|
||||
FuncCoord 12, 5 ; $c410
|
||||
ld hl, Coord
|
||||
ld a, $31
|
||||
jp Predef ; indirect jump to Func_79dda (79dda (1e:5dda))
|
||||
|
||||
Func_70377: ; 70377 (1c:4377)
|
||||
ld hl, $d747
|
||||
set 3, [hl]
|
||||
ld a, $56
|
||||
call Predef ; indirect jump to DisplayDexRating (44169 (11:4169))
|
||||
FuncCoord 0, 4 ; $c3f0
|
||||
ld hl, Coord
|
||||
ld b, $6
|
||||
ld c, $a
|
||||
call TextBoxBorder
|
||||
FuncCoord 5, 0 ; $c3a5
|
||||
ld hl, Coord
|
||||
ld b, $2
|
||||
ld c, $9
|
||||
call TextBoxBorder
|
||||
FuncCoord 7, 2 ; $c3cf
|
||||
ld hl, Coord
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
call PlaceString
|
||||
FuncCoord 1, 6 ; $c419
|
||||
ld hl, Coord
|
||||
ld de, HoFPlayTimeText
|
||||
call PlaceString
|
||||
FuncCoord 5, 7 ; $c431
|
||||
ld hl, Coord
|
||||
ld de, $da41
|
||||
ld bc, $103
|
||||
call PrintNumber
|
||||
ld [hl], $6d
|
||||
inc hl
|
||||
ld de, $da43
|
||||
ld bc, $8102
|
||||
call PrintNumber
|
||||
FuncCoord 1, 9 ; $c455
|
||||
ld hl, Coord
|
||||
ld de, HoFMoneyText
|
||||
call PlaceString
|
||||
FuncCoord 4, 10 ; $c46c
|
||||
ld hl, Coord
|
||||
ld de, wPlayerMoney ; $d347
|
||||
ld c, $a3
|
||||
call PrintBCDNumber
|
||||
ld hl, DexSeenOwnedText
|
||||
call Func_703e2
|
||||
ld hl, DexRatingText
|
||||
call Func_703e2
|
||||
ld hl, $cc5d
|
||||
|
||||
Func_703e2: ; 703e2 (1c:43e2)
|
||||
call PrintText
|
||||
ld c, $78
|
||||
jp DelayFrames
|
||||
|
||||
HoFPlayTimeText: ; 703ea (1c:43ea)
|
||||
db "PLAY TIME@"
|
||||
|
||||
HoFMoneyText: ; 703f4 (1c:43f4)
|
||||
db "MONEY@"
|
||||
|
||||
DexSeenOwnedText: ; 703fa (1c:43fa)
|
||||
TX_FAR _DexSeenOwnedText
|
||||
db "@"
|
||||
|
||||
DexRatingText: ; 703ff (1c:43ff)
|
||||
TX_FAR _DexRatingText
|
||||
db "@"
|
||||
|
||||
Func_70404: ; 70404 (1c:4404)
|
||||
ld hl, $cc5b
|
||||
ld bc, $10
|
||||
ld a, [$cd3e]
|
||||
call AddNTimes
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld [hli], a
|
||||
ld a, [$cd3f]
|
||||
ld [hli], a
|
||||
ld e, l
|
||||
ld d, h
|
||||
ld hl, $cd6d
|
||||
ld bc, $b
|
||||
jp CopyData
|
||||
|
||||
Func_70423: ; 70423 (1c:4423)
|
||||
ld a, $a
|
||||
ld [$cfc8], a
|
||||
ld [$cfc9], a
|
||||
ld a, $ff
|
||||
ld [wMusicHeaderPointer], a
|
||||
jp GBFadeOut2
|
104
engine/hidden_object_functions14.asm
Executable file
104
engine/hidden_object_functions14.asm
Executable file
|
@ -0,0 +1,104 @@
|
|||
PrintNotebookText: ; 52996 (14:6996)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld a, [wTrainerSpriteOffset]
|
||||
jp PrintPredefTextID
|
||||
|
||||
TMNotebook: ; 529a4 (14:69a4)
|
||||
TX_FAR TMNotebookText
|
||||
db $0d
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebook: ; 529aa (14:69aa)
|
||||
db $08 ; asm
|
||||
ld hl, ViridianSchoolNotebookText1
|
||||
call PrintText
|
||||
call TurnPageSchoolNotebook
|
||||
jr nz, .doneReading
|
||||
ld hl, ViridianSchoolNotebookText2
|
||||
call PrintText
|
||||
call TurnPageSchoolNotebook
|
||||
jr nz, .doneReading
|
||||
ld hl, ViridianSchoolNotebookText3
|
||||
call PrintText
|
||||
call TurnPageSchoolNotebook
|
||||
jr nz, .doneReading
|
||||
ld hl, ViridianSchoolNotebookText4
|
||||
call PrintText
|
||||
ld hl, ViridianSchoolNotebookText5
|
||||
call PrintText
|
||||
.doneReading
|
||||
jp TextScriptEnd
|
||||
|
||||
TurnPageSchoolNotebook: ; 529db (14:69db)
|
||||
ld hl, TurnPageText
|
||||
call PrintText
|
||||
call YesNoChoice
|
||||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
ret
|
||||
|
||||
TurnPageText: ; 529e9 (14:69e9)
|
||||
TX_FAR _TurnPageText
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebookText5: ; 529ee (14:69ee)
|
||||
TX_FAR _ViridianSchoolNotebookText5
|
||||
db $0d
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebookText1: ; 529f4 (14:69f4)
|
||||
TX_FAR _ViridianSchoolNotebookText1
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebookText2: ; 529f9 (14:69f9)
|
||||
TX_FAR _ViridianSchoolNotebookText2
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebookText3: ; 529fe (14:69fe)
|
||||
TX_FAR _ViridianSchoolNotebookText3
|
||||
db "@"
|
||||
|
||||
ViridianSchoolNotebookText4: ; 52a03 (14:6a03)
|
||||
TX_FAR _ViridianSchoolNotebookText4
|
||||
db "@"
|
||||
|
||||
PrintFightingDojoText2: ; 52a08 (14:6a08)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $37
|
||||
jp PrintPredefTextID
|
||||
|
||||
FightingDojoText_52a10: ; 52a10 (14:6a10)
|
||||
TX_FAR _FightingDojoText_52a10
|
||||
db "@"
|
||||
|
||||
PrintFightingDojoText3: ; 52a15 (14:6a15)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $38
|
||||
jp PrintPredefTextID
|
||||
|
||||
FightingDojoText_52a1d: ; 52a1d (14:6a1d)
|
||||
TX_FAR _FightingDojoText_52a1d
|
||||
db "@"
|
||||
|
||||
PrintFightingDojoText: ; 52a22 (14:6a22)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $36
|
||||
jp PrintPredefTextID
|
||||
|
||||
FightingDojoText: ; 52a2a (14:6a2a)
|
||||
TX_FAR _FightingDojoText
|
||||
db "@"
|
||||
|
||||
PrintIndigoPlateauHQText: ; 52a2f (14:6a2f)
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $27
|
||||
jp PrintPredefTextID
|
||||
|
||||
IndigoPlateauHQText: ; 52a3d (14:6a3d)
|
||||
TX_FAR _IndigoPlateauHQText
|
||||
db "@"
|
468
engine/hidden_object_functions17.asm
Executable file
468
engine/hidden_object_functions17.asm
Executable file
|
@ -0,0 +1,468 @@
|
|||
PrintRedsNESText: ; 5db79 (17:5b79)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $4 ; RedBedroomSNESText
|
||||
jp PrintPredefTextID
|
||||
|
||||
RedBedroomSNESText: ; 5db81 (17:5b81)
|
||||
TX_FAR _RedBedroomSNESText
|
||||
db "@"
|
||||
|
||||
OpenRedsPC: ; 5db86 (17:5b86)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $3
|
||||
jp PrintPredefTextID
|
||||
|
||||
RedBedroomPC: ; 5db8e (17:5b8e)
|
||||
db $fc ; FuncTX_ItemStoragePC
|
||||
|
||||
Route15GateLeftBinoculars: ; 5db8f (17:5b8f)
|
||||
ld a, [$c109]
|
||||
cp $4 ; i
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $a ; text id Route15UpstairsBinocularsText
|
||||
call PrintPredefTextID
|
||||
ld a, ARTICUNO
|
||||
ld [$cf91], a
|
||||
call PlayCry
|
||||
jp DisplayMonFrontSpriteInBox
|
||||
|
||||
Route15UpstairsBinocularsText: ; 5dba8 (17:5ba8)
|
||||
TX_FAR _Route15UpstairsBinocularsText
|
||||
db "@"
|
||||
|
||||
AerodactylFossil: ; 5dbad (17:5bad)
|
||||
ld a, FOSSIL_AERODACTYL
|
||||
ld [$cf91], a
|
||||
call DisplayMonFrontSpriteInBox
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $9
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
AerodactylFossilText: ; 5dbbe (17:5bbe)
|
||||
TX_FAR _AerodactylFossilText
|
||||
db "@"
|
||||
|
||||
KabutopsFossil: ; 5bdc3 (17:5bc3)
|
||||
ld a, FOSSIL_KABUTOPS
|
||||
ld [$cf91], a
|
||||
call DisplayMonFrontSpriteInBox
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $b
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
KabutopsFossilText: ; 5dbd4 (17:5bd4)
|
||||
TX_FAR _KabutopsFossilText
|
||||
db "@"
|
||||
|
||||
DisplayMonFrontSpriteInBox: ; 5dbd9 (17:5bd9)
|
||||
; Displays a pokemon's front sprite in a pop-up window.
|
||||
; [$cf91] = pokemon interal id number
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
xor a
|
||||
ld [$ffb0], a
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld a, $11
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
call UpdateSprites
|
||||
ld a, [$cf91]
|
||||
ld [$d0b5], a
|
||||
call GetMonHeader
|
||||
ld de, $8b10
|
||||
call LoadMonFrontSprite
|
||||
ld a, $80
|
||||
ld [$ffe1], a
|
||||
FuncCoord 10, 11 ; $c486
|
||||
ld hl, Coord
|
||||
ld a, $2
|
||||
call Predef ; indirect jump to Func_3f073 (3f073 (f:7073))
|
||||
call WaitForTextScrollButtonPress
|
||||
call LoadScreenTilesFromBuffer1
|
||||
call Delay3
|
||||
ld a, $90
|
||||
ld [$ffb0], a
|
||||
ret
|
||||
|
||||
PrintBlackboardLinkCableText: ; 5dc1a (17:5c1a)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld a, [$cd3d]
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
LinkCableHelp: ; 5dc29 (17:5c29)
|
||||
db $08 ; asm
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld hl, LinkCableHelpText1
|
||||
call PrintText
|
||||
xor a
|
||||
ld [W_ANIMATIONID], a
|
||||
ld [wCurrentMenuItem], a
|
||||
ld [wLastMenuItem], a
|
||||
ld a, $3
|
||||
ld [wMenuWatchedKeys], a
|
||||
ld a, $3
|
||||
ld [wMaxMenuItem], a
|
||||
ld a, $2
|
||||
ld [wTopMenuItemY], a
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a
|
||||
.asm_5c51
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
ld hl, wTileMap
|
||||
ld b, $8
|
||||
ld c, $d
|
||||
call TextBoxBorder
|
||||
ld hl, $c3ca
|
||||
ld de, HowToLinkText
|
||||
call PlaceString
|
||||
ld hl, LinkCableHelpText2
|
||||
call PrintText
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jr nz, .asm_5dc93 ; 0x5dc74 $1d
|
||||
ld a, [wCurrentMenuItem]
|
||||
cp $3
|
||||
jr z, .asm_5dc93 ; 0x5dc7b $16
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
ld hl, LinkCableInfoTexts
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call PrintText
|
||||
jp .asm_5c51
|
||||
.asm_5dc93
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call LoadScreenTilesFromBuffer1
|
||||
jp TextScriptEnd
|
||||
|
||||
LinkCableHelpText1: ; 5dc9e (17:5c9e)
|
||||
TX_FAR _LinkCableHelpText1
|
||||
db "@"
|
||||
|
||||
LinkCableHelpText2: ; 5dca3 (17:5ca3)
|
||||
TX_FAR _LinkCableHelpText2
|
||||
db "@"
|
||||
|
||||
HowToLinkText: ; 5dca8 (17:5ca8)
|
||||
db "HOW TO LINK"
|
||||
next "COLOSSEUM"
|
||||
next "TRADE CENTER"
|
||||
next "STOP READING@"
|
||||
|
||||
LinkCableInfoTexts: ; 5dcd8 (17:5cd8)
|
||||
dw LinkCableInfoText1
|
||||
dw LinkCableInfoText2
|
||||
dw LinkCableInfoText3
|
||||
|
||||
LinkCableInfoText1: ; 5dcde (17:5cde)
|
||||
TX_FAR _LinkCableInfoText1
|
||||
db "@"
|
||||
|
||||
LinkCableInfoText2: ; 5dce3 (17:5ce3)
|
||||
TX_FAR _LinkCableInfoText2
|
||||
db "@"
|
||||
|
||||
LinkCableInfoText3: ; 5dce8 (17:5ce8)
|
||||
TX_FAR _LinkCableInfoText3
|
||||
db "@"
|
||||
|
||||
ViridianSchoolBlackboard: ; 5dced (17:5ced)
|
||||
db $08 ; asm
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld hl, ViridianSchoolBlackboardText1
|
||||
call PrintText
|
||||
xor a
|
||||
ld [W_ANIMATIONID], a
|
||||
ld [wCurrentMenuItem], a
|
||||
ld [wLastMenuItem], a
|
||||
ld a, $33
|
||||
ld [wMenuWatchedKeys], a
|
||||
ld a, $2
|
||||
ld [wMaxMenuItem], a
|
||||
ld a, $2
|
||||
ld [wTopMenuItemY], a
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a
|
||||
.asm_5dd15
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
ld hl, wTileMap
|
||||
ld bc, $060a
|
||||
call TextBoxBorder
|
||||
ld hl, $c3c9
|
||||
ld de, StatusAilmentText1
|
||||
call PlaceString
|
||||
ld hl, $c3ce
|
||||
ld de, StatusAilmentText2
|
||||
call PlaceString
|
||||
ld hl, ViridianSchoolBlackboardText2
|
||||
call PrintText
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jr nz, .exitBlackboard
|
||||
bit 4, a
|
||||
jr z, .asm_5dd5c
|
||||
ld a, $2
|
||||
ld [wMaxMenuItem], a
|
||||
ld a, $2
|
||||
ld [wTopMenuItemY], a
|
||||
ld a, $6
|
||||
ld [wTopMenuItemX], a
|
||||
ld a, $3
|
||||
ld [W_ANIMATIONID], a
|
||||
jr .asm_5dd15
|
||||
.asm_5dd5c
|
||||
bit 5, a
|
||||
jr z, .asm_5dd75
|
||||
ld a, $2
|
||||
ld [wMaxMenuItem], a
|
||||
ld a, $2
|
||||
ld [wTopMenuItemY], a
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a
|
||||
xor a
|
||||
ld [W_ANIMATIONID], a
|
||||
jr .asm_5dd15
|
||||
.asm_5dd75
|
||||
ld a, [wCurrentMenuItem]
|
||||
ld b, a
|
||||
ld a, [W_ANIMATIONID]
|
||||
add b
|
||||
cp $5
|
||||
jr z, .exitBlackboard
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
ld hl, ViridianBlackboardStatusPointers
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call PrintText
|
||||
jp .asm_5dd15
|
||||
.exitBlackboard
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call LoadScreenTilesFromBuffer1
|
||||
jp TextScriptEnd
|
||||
|
||||
ViridianSchoolBlackboardText1: ; 5dda2 (17:5da2)
|
||||
TX_FAR _ViridianSchoolBlackboardText1
|
||||
db "@"
|
||||
|
||||
ViridianSchoolBlackboardText2: ; 5dda7 (17:5da7)
|
||||
TX_FAR _ViridianSchoolBlackboardText2
|
||||
db "@"
|
||||
|
||||
StatusAilmentText1: ; 5ddac (17:5dac)
|
||||
db " SLP"
|
||||
next " PSN"
|
||||
next " PAR@"
|
||||
|
||||
StatusAilmentText2: ; 5ddbb (17:5dbb)
|
||||
db " BRN"
|
||||
next " FRZ"
|
||||
next " QUIT@@"
|
||||
|
||||
ViridianBlackboardStatusPointers: ; 5ddcc (17:5ddc)
|
||||
dw ViridianBlackboardSleepText
|
||||
dw ViridianBlackboardPoisonText
|
||||
dw ViridianBlackbaordPrlzText
|
||||
dw ViridianBlackboardBurnText
|
||||
dw ViridianBlackboardFrozenText
|
||||
|
||||
ViridianBlackboardSleepText: ; 5ddd6 (17:5dd6)
|
||||
TX_FAR _ViridianBlackboardSleepText
|
||||
db "@"
|
||||
|
||||
ViridianBlackboardPoisonText: ; 5dddb (17:5ddb)
|
||||
TX_FAR _ViridianBlackboardPoisonText
|
||||
db "@"
|
||||
|
||||
ViridianBlackbaordPrlzText: ; 5dde0 (17:5de0)
|
||||
TX_FAR _ViridianBlackbaordPrlzText
|
||||
db "@"
|
||||
|
||||
ViridianBlackboardBurnText: ; 5dde5 (17:5de5)
|
||||
TX_FAR _ViridianBlackboardBurnText
|
||||
db "@"
|
||||
|
||||
ViridianBlackboardFrozenText: ; 5ddea (17:5dea)
|
||||
TX_FAR _ViridianBlackboardFrozenText
|
||||
db "@"
|
||||
|
||||
PrintTrashText: ; 5ddef (17:5def)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $26
|
||||
jp PrintPredefTextID
|
||||
|
||||
VermilionGymTrashText: ; 5ddf7 (17:5df7)
|
||||
TX_FAR _VermilionGymTrashText
|
||||
db "@"
|
||||
|
||||
GymTrashScript: ; 5ddfc (17:5dfc)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld [$cd5b], a
|
||||
|
||||
; Don't do the trash can puzzle if it's already been done.
|
||||
ld a, [$d773]
|
||||
bit 0, a
|
||||
jr z, .ok
|
||||
|
||||
ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash)
|
||||
jp PrintPredefTextID
|
||||
|
||||
.ok
|
||||
bit 1, a
|
||||
jr nz, .trySecondLock
|
||||
|
||||
ld a, [$d743]
|
||||
ld b, a
|
||||
ld a, [$cd5b]
|
||||
cp b
|
||||
jr z, .openFirstLock
|
||||
|
||||
ld a, $26 ; DisplayTextID $26 = VermilionGymTrashText (nothing in the trash)
|
||||
jr .done
|
||||
|
||||
.openFirstLock
|
||||
; Next can is trying for the second switch.
|
||||
ld hl, $d773
|
||||
set 1, [hl]
|
||||
|
||||
ld hl, GymTrashCans ; $5e7d
|
||||
ld a, [$cd5b]
|
||||
; * 5
|
||||
ld b, a
|
||||
add a
|
||||
add a
|
||||
add b
|
||||
|
||||
ld d, 0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
|
||||
ld [$ffdb], a
|
||||
push hl
|
||||
call GenRandom
|
||||
swap a
|
||||
ld b, a
|
||||
ld a, [$ffdb]
|
||||
and b
|
||||
dec a
|
||||
pop hl
|
||||
|
||||
ld d, 0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
and $f
|
||||
ld [$d744], a
|
||||
|
||||
ld a, $3b ; DisplayTextID $3b = VermilionGymTrashSuccesText1 (first lock opened!)
|
||||
jr .done
|
||||
|
||||
.trySecondLock
|
||||
ld a, [$d744]
|
||||
ld b, a
|
||||
ld a, [$cd5b]
|
||||
cp b
|
||||
jr z, .openSecondLock
|
||||
|
||||
; Reset the cans.
|
||||
ld hl, $d773
|
||||
res 1, [hl]
|
||||
call GenRandom
|
||||
|
||||
and $e
|
||||
ld [$d743], a
|
||||
|
||||
ld a, $3e ; DisplayTextID $3e = VermilionGymTrashFailText (locks reset!)
|
||||
jr .done
|
||||
|
||||
.openSecondLock
|
||||
; Completed the trash can puzzle.
|
||||
ld hl, $d773
|
||||
set 0, [hl]
|
||||
ld hl, $d126
|
||||
set 6, [hl]
|
||||
|
||||
ld a, $3d ; DisplayTextID $3d = VermilionGymTrashSuccesText3 (2nd lock opened!)
|
||||
|
||||
.done
|
||||
jp PrintPredefTextID
|
||||
|
||||
GymTrashCans: ; 5de7d (17:5e7d)
|
||||
db 2, 1, 3, 0, 0 ; 0
|
||||
db 3, 0, 2, 4, 0 ; 1
|
||||
db 2, 1, 5, 0, 0 ; 2
|
||||
db 3, 0, 4, 6, 0 ; 3
|
||||
db 4, 1, 3, 5, 7 ; 4
|
||||
db 3, 2, 4, 8, 0 ; 5
|
||||
db 3, 3, 7, 9, 0 ; 6
|
||||
db 4, 4, 6, 8, 10 ; 7
|
||||
db 3, 5, 7, 11, 0 ; 8
|
||||
db 3, 6, 10, 12, 0 ; 9
|
||||
db 4, 7, 9, 11, 13 ; 10
|
||||
db 3, 8, 10, 14, 0 ; 11
|
||||
db 2, 9, 13, 0, 0 ; 12
|
||||
db 3, 10, 12, 14, 0 ; 13
|
||||
db 2, 11, 13, 0, 0 ; 14
|
||||
; 5dec8
|
||||
|
||||
VermilionGymTrashSuccesText1: ; 5dec8 (17:5ec8)
|
||||
TX_FAR _VermilionGymTrashSuccesText1
|
||||
db $08 ; asm
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_49 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
jp TextScriptEnd
|
||||
|
||||
VermilionGymTrashSuccesText2: ; 5dedb (17:5edb)
|
||||
TX_FAR _VermilionGymTrashSuccesText2
|
||||
db "@"
|
||||
|
||||
UnnamedText_5dee0: ; 5dee0 (17:5ee0)
|
||||
db $08 ; asm
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_49 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
jp TextScriptEnd
|
||||
|
||||
VermilionGymTrashSuccesText3: ; 5deef (17:5eef)
|
||||
TX_FAR _VermilionGymTrashSuccesText3
|
||||
db $08 ; asm
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_57 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
jp TextScriptEnd
|
||||
|
||||
VermilionGymTrashFailText: ; 5df02 (17:5f02)
|
||||
TX_FAR _VermilionGymTrashFailText
|
||||
db $08 ; asm
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_51 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
jp TextScriptEnd
|
189
engine/hidden_object_functions18.asm
Executable file
189
engine/hidden_object_functions18.asm
Executable file
|
@ -0,0 +1,189 @@
|
|||
GymStatues: ; 62419 (18:6419)
|
||||
; if in a gym and have the corresponding badge, a = $D and jp PrintPredefTextID
|
||||
; if in a gym and don’t have the corresponding badge, a = $C and jp PrintPredefTextID
|
||||
; else ret
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
ret nz
|
||||
ld hl, .BadgeFlags
|
||||
ld a, [W_CURMAP]
|
||||
ld b, a
|
||||
.asm_62429
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
cp b
|
||||
jr z, .asm_62433 ; 0x6242e $3
|
||||
inc hl
|
||||
jr .asm_62429 ; 0x62431 $f6
|
||||
.asm_62433
|
||||
ld b, [hl]
|
||||
ld a, [$d72a]
|
||||
and b
|
||||
cp b
|
||||
ld a, $d
|
||||
jr z, .asm_6243f ; 0x6243b $2
|
||||
ld a, $c
|
||||
.asm_6243f
|
||||
jp PrintPredefTextID
|
||||
|
||||
.BadgeFlags: ; 62442 (18:6442)
|
||||
db PEWTER_GYM, %00000001
|
||||
db CERULEAN_GYM, %00000010
|
||||
db VERMILION_GYM,%00000100
|
||||
db CELADON_GYM, %00001000
|
||||
db FUCHSIA_GYM, %00010000
|
||||
db SAFFRON_GYM, %00100000
|
||||
db CINNABAR_GYM, %01000000
|
||||
db VIRIDIAN_GYM, %10000000
|
||||
db $ff
|
||||
|
||||
GymStatueText1: ; 62453 (18:6453)
|
||||
TX_FAR _GymStatueText1
|
||||
db "@"
|
||||
|
||||
GymStatueText2: ; 62458 (18:6458)
|
||||
TX_FAR _GymStatueText2
|
||||
db "@"
|
||||
|
||||
PrintBenchGuyText: ; 6245d (18:645d)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld hl, PokeCenterMapIDList
|
||||
ld a, [W_CURMAP]
|
||||
ld b, a
|
||||
.asm_62467
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
cp b
|
||||
jr z, .asm_62472
|
||||
inc hl
|
||||
inc hl
|
||||
jr .asm_62467
|
||||
.asm_62472
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [$c109]
|
||||
cp b
|
||||
jr nz, .asm_62467
|
||||
ld a, [hl]
|
||||
jp PrintPredefTextID
|
||||
|
||||
; format: db map id, 08, text id of PointerTable_3f22
|
||||
PokeCenterMapIDList: ; 6247e (18:647e)
|
||||
db VIRIDIAN_POKECENTER,$08,$0F
|
||||
db PEWTER_POKECENTER,$08,$10
|
||||
db CERULEAN_POKECENTER,$08,$11
|
||||
db LAVENDER_POKECENTER,$08,$12
|
||||
db VERMILION_POKECENTER,$08,$13
|
||||
db CELADON_POKECENTER,$08,$14
|
||||
db CELADON_HOTEL,$08,$15
|
||||
db FUCHSIA_POKECENTER,$08,$16
|
||||
db CINNABAR_POKECENTER,$08,$17
|
||||
db SAFFRON_POKECENTER,$08,$18
|
||||
db MT_MOON_POKECENTER,$08,$19
|
||||
db ROCK_TUNNEL_POKECENTER,$08,$1A
|
||||
db $FF
|
||||
|
||||
ViridianCityPokecenterBenchGuyText: ; 624a3 (18:64a3)
|
||||
TX_FAR _ViridianCityPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
PewterCityPokecenterBenchGuyText: ; 624a8 (18:64a8)
|
||||
TX_FAR _PewterCityPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
CeruleanCityPokecenterBenchGuyText: ; 624ad (18:64ad)
|
||||
TX_FAR _CeruleanPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
LavenderCityPokecenterBenchGuyText: ; 624b2 (18:64b2)
|
||||
TX_FAR _LavenderPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
MtMoonPokecenterBenchGuyText: ; 624b7 (18:64b7)
|
||||
TX_FAR _MtMoonPokecenterBenchGuyText
|
||||
db "@"
|
||||
|
||||
RockTunnelPokecenterBenchGuyText: ; 624bc (18:64bc)
|
||||
TX_FAR _RockTunnelPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
UnusedBenchGuyText1: ; 624c1 (18:64c1)
|
||||
TX_FAR _UnusedBenchGuyText1
|
||||
db "@"
|
||||
|
||||
UnusedBenchGuyText2: ; 624c6 (18:64c6)
|
||||
TX_FAR _UnusedBenchGuyText2
|
||||
db "@"
|
||||
|
||||
UnusedBenchGuyText3: ; 624cb (18:64cb)
|
||||
TX_FAR _UnusedBenchGuyText3
|
||||
db "@"
|
||||
|
||||
VermilionCityPokecenterBenchGuyText: ; 624d0 (18:64d0)
|
||||
TX_FAR _VermilionPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
CeladonCityPokecenterBenchGuyText: ; 624d5 (18:64d5)
|
||||
TX_FAR _CeladonCityPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
FuchsiaCityPokecenterBenchGuyText: ; 624da (18:64da)
|
||||
TX_FAR _FuchsiaCityPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
CinnabarIslandPokecenterBenchGuyText: ; 624df (18:64df)
|
||||
TX_FAR _CinnabarPokecenterGuyText
|
||||
db "@"
|
||||
|
||||
SaffronCityPokecenterBenchGuyText: ; 624e4 (18:64e4)
|
||||
db $8 ; asm
|
||||
ld a, [$d838]
|
||||
bit 7, a
|
||||
ld hl, SaffronCityPokecenterBenchGuyText2
|
||||
jr nz, .asm_624f2 ; 0x624ed $3
|
||||
ld hl, SaffronCityPokecenterBenchGuyText1
|
||||
.asm_624f2
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
SaffronCityPokecenterBenchGuyText1: ; 624f8 (18:64f8)
|
||||
TX_FAR _SaffronCityPokecenterGuyText1
|
||||
db "@"
|
||||
|
||||
SaffronCityPokecenterBenchGuyText2: ; 624fd (18:64fd)
|
||||
TX_FAR _SaffronCityPokecenterGuyText2
|
||||
db "@"
|
||||
|
||||
CeladonCityHotelText: ; 62502 (18:6502)
|
||||
TX_FAR _CeladonCityHotelText
|
||||
db "@"
|
||||
|
||||
ret
|
||||
|
||||
TerminatorText_62508: ; 62508 (18:6508)
|
||||
db "@"
|
||||
|
||||
PrintBookcaseText: ; 6509 (18:6509)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $e ; BookcaseText
|
||||
jp PrintPredefTextID
|
||||
|
||||
BookcaseText: ; 62511 (18:6511)
|
||||
TX_FAR _BookcaseText
|
||||
db "@"
|
||||
|
||||
OpenPokemonCenterPC: ; 62516 (18:6516)
|
||||
ld a, [$c109]
|
||||
cp $4 ; check to see if player is facing up
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $1
|
||||
ld [$cf0c], a
|
||||
ld a, $1f ; PredefText1f
|
||||
jp PrintPredefTextID
|
||||
|
||||
PredefText1f: ; 62529 (18:6529)
|
||||
db $F9 ; FuncTX_PokemonCenterPC
|
138
engine/hidden_object_functions3.asm
Executable file
138
engine/hidden_object_functions3.asm
Executable file
|
@ -0,0 +1,138 @@
|
|||
; prints text for bookshelves in buildings without sign events
|
||||
PrintBookshelfText: ; fb50 (3:7b50)
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
jr nz, .asm_fb7f
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
ld b, a
|
||||
FuncCoord 8, 7 ; $c434
|
||||
ld a, [Coord]
|
||||
ld c, a
|
||||
ld hl, BookshelfTileIDs ; $7b8b
|
||||
.asm_fb62
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_fb7f
|
||||
cp b
|
||||
jr nz, .asm_fb7b
|
||||
ld a, [hli]
|
||||
cp c
|
||||
jr nz, .asm_fb7c
|
||||
ld a, [hl]
|
||||
push af
|
||||
call EnableAutoTextBoxDrawing
|
||||
pop af
|
||||
call PrintPredefTextID
|
||||
xor a
|
||||
ld [$ffdb], a
|
||||
ret
|
||||
.asm_fb7b
|
||||
inc hl
|
||||
.asm_fb7c
|
||||
inc hl
|
||||
jr .asm_fb62
|
||||
.asm_fb7f
|
||||
ld a, $ff
|
||||
ld [$ffdb], a
|
||||
ld b, BANK(PrintCardKeyText)
|
||||
ld hl, PrintCardKeyText
|
||||
jp Bankswitch
|
||||
|
||||
; format: db tileset id, bookshelf tile id, text id
|
||||
BookshelfTileIDs: ; fb8b (3:7b8b)
|
||||
db PLATEAU, $30, $3A
|
||||
db HOUSE, $3D, $3F
|
||||
db HOUSE, $1E, $40
|
||||
db MANSION, $32, $40
|
||||
db REDS_HOUSE_1, $32, $40
|
||||
db LAB, $28, $40
|
||||
db LOBBY, $16, $41
|
||||
db GYM, $1D, $40
|
||||
db DOJO, $1D, $40
|
||||
db GATE, $22, $40
|
||||
db MART, $54, $42
|
||||
db MART, $55, $42
|
||||
db POKECENTER, $54, $42
|
||||
db POKECENTER, $55, $42
|
||||
db LOBBY, $50, $42
|
||||
db LOBBY, $52, $42
|
||||
db SHIP, $36, $40
|
||||
db $FF
|
||||
|
||||
IndigoPlateauStatues: ; fbbf (3:7bbf)
|
||||
db $08 ; asm
|
||||
ld hl, IndigoPlateauStatuesText1
|
||||
call PrintText
|
||||
ld a, [W_XCOORD]
|
||||
bit 0, a
|
||||
ld hl, IndigoPlateauStatuesText2
|
||||
jr nz, .asm_fbd3
|
||||
ld hl, IndigoPlateauStatuesText3
|
||||
.asm_fbd3
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
IndigoPlateauStatuesText1: ; fbd9 (3:7bd9)
|
||||
TX_FAR _IndigoPlateauStatuesText1
|
||||
db "@"
|
||||
|
||||
IndigoPlateauStatuesText2: ; fbde (3:7bde)
|
||||
TX_FAR _IndigoPlateauStatuesText2
|
||||
db "@"
|
||||
|
||||
IndigoPlateauStatuesText3: ; fbe3 (3:7be3)
|
||||
TX_FAR _IndigoPlateauStatuesText3
|
||||
db "@"
|
||||
|
||||
BookOrSculptureText: ; fbe8 (3:7be8)
|
||||
db $08 ; asm
|
||||
ld hl, PokemonBooksText
|
||||
ld a, [W_CURMAPTILESET]
|
||||
cp MANSION ; Celadon Mansion tileset
|
||||
jr nz, .asm_fbfd
|
||||
ld a, [$c420]
|
||||
cp $38
|
||||
jr nz, .asm_fbfd
|
||||
ld hl, DiglettSculptureText
|
||||
.asm_fbfd
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
PokemonBooksText: ; fc03 (3:7c03)
|
||||
TX_FAR _PokemonBooksText
|
||||
db "@"
|
||||
|
||||
DiglettSculptureText: ; fc08 (3:7c08)
|
||||
TX_FAR _DiglettSculptureText
|
||||
db "@"
|
||||
|
||||
ElevatorText: ; fc0d (3:7c0d)
|
||||
TX_FAR _ElevatorText
|
||||
db "@"
|
||||
|
||||
TownMapText: ; fc12 (3:7c12)
|
||||
TX_FAR _TownMapText
|
||||
db $06
|
||||
db $08 ; asm
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
call GBPalWhiteOutWithDelay3
|
||||
xor a
|
||||
ld [$ffb0], a
|
||||
inc a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a
|
||||
call LoadFontTilePatterns
|
||||
callba DisplayTownMap
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
ld de, TextScriptEnd
|
||||
push de
|
||||
ld a, [H_LOADEDROMBANK]
|
||||
push af
|
||||
jp CloseTextDisplay
|
||||
|
||||
PokemonStuffText: ; fc45 (3:7c45)
|
||||
TX_FAR _PokemonStuffText
|
||||
db "@"
|
473
engine/hidden_object_functions7.asm
Executable file
473
engine/hidden_object_functions7.asm
Executable file
|
@ -0,0 +1,473 @@
|
|||
PrintNewBikeText: ; 1e94b (7:694b)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $39
|
||||
jp PrintPredefTextID
|
||||
|
||||
NewBicycleText: ; 1e953 (7:6953)
|
||||
TX_FAR _NewBicycleText
|
||||
db "@"
|
||||
|
||||
DisplayOakLabLeftPoster: ; 1e958 (7:6958)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $05 ; PushStartText
|
||||
jp PrintPredefTextID
|
||||
|
||||
PushStartText: ; 1e960 (7:6960)
|
||||
TX_FAR _PushStartText
|
||||
db "@"
|
||||
|
||||
DisplayOakLabRightPoster: ; 1e965 (7:6965)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld hl, wPokedexOwned
|
||||
ld b, wPokedexOwnedEnd - wPokedexOwned
|
||||
call CountSetBits
|
||||
ld a, [$d11e]
|
||||
cp $2
|
||||
ld a, $6 ; SaveOptionText
|
||||
jr c, .asm_1e97b
|
||||
ld a, $7 ; StrengthsAndWeaknessesText
|
||||
.asm_1e97b
|
||||
jp PrintPredefTextID
|
||||
|
||||
SaveOptionText: ; 1e97e (7:697e)
|
||||
TX_FAR _SaveOptionText
|
||||
db "@"
|
||||
|
||||
StrengthsAndWeaknessesText: ; 1e983 (7:6983)
|
||||
TX_FAR _StrengthsAndWeaknessesText
|
||||
db "@"
|
||||
|
||||
SafariZoneCheck: ; 1e988 (7:6988)
|
||||
ld hl, $d790
|
||||
bit 7, [hl]
|
||||
jr z, asm_1e9ab
|
||||
ld a, [W_NUMSAFARIBALLS] ; $da47
|
||||
and a
|
||||
jr z, asm_1e9b0
|
||||
jr asm_1e9ab
|
||||
|
||||
SafariZoneCheckSteps: ; 1e997 (7:6997)
|
||||
ld a, [wSafariSteps] ; $d70d
|
||||
ld b, a
|
||||
ld a, [wSafariSteps + 1] ; $d70e
|
||||
ld c, a
|
||||
or b
|
||||
jr z, asm_1e9b0
|
||||
dec bc
|
||||
ld a, b
|
||||
ld [wSafariSteps], a ; $d70d
|
||||
ld a, c
|
||||
ld [wSafariSteps + 1], a ; $d70e
|
||||
asm_1e9ab: ; 1e9ab (7:69ab)
|
||||
xor a
|
||||
ld [$da46], a
|
||||
ret
|
||||
asm_1e9b0: ; 1e9b0 (7:69b0)
|
||||
call EnableAutoTextBoxDrawing
|
||||
xor a
|
||||
ld [wMusicHeaderPointer], a
|
||||
dec a
|
||||
call PlaySound
|
||||
ld c, BANK(SFX_02_5f)
|
||||
ld a, (SFX_02_5f - SFX_Headers_02) / 3
|
||||
call PlayMusic
|
||||
.asm_1e9c2
|
||||
ld a, [$c02a]
|
||||
cp $b9
|
||||
jr nz, .asm_1e9c2
|
||||
ld a, $d3
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call DisplayTextID
|
||||
xor a
|
||||
ld [$d528], a
|
||||
ld a, $9c
|
||||
ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
|
||||
ld a, $3
|
||||
ld [$d42f], a
|
||||
ld a, $5
|
||||
ld [W_SAFARIZONEENTRANCECURSCRIPT], a
|
||||
ld hl, $d790
|
||||
set 6, [hl]
|
||||
ld a, $1
|
||||
ld [$da46], a
|
||||
ret
|
||||
|
||||
PrintSafariGameOverText: ; 1e9ed (7:69ed)
|
||||
xor a
|
||||
ld [wJoypadForbiddenButtonsMask], a
|
||||
ld hl, SafariGameOverText
|
||||
jp PrintText
|
||||
|
||||
SafariGameOverText: ; 1e9f7 (7:69f7)
|
||||
db $08 ; asm
|
||||
ld a, [W_NUMSAFARIBALLS] ; $da47
|
||||
and a
|
||||
jr z, .asm_1ea04
|
||||
ld hl, TimesUpText
|
||||
call PrintText
|
||||
.asm_1ea04
|
||||
ld hl, GameOverText
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
TimesUpText: ; 1ea0d (7:6a0d)
|
||||
TX_FAR _TimesUpText
|
||||
db "@"
|
||||
|
||||
GameOverText: ; 1ea12 (7:6a12)
|
||||
TX_FAR _GameOverText
|
||||
db "@"
|
||||
|
||||
PrintCinnabarQuiz: ; 1ea17 (7:6a17)
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $31
|
||||
jp PrintPredefTextID
|
||||
|
||||
CinnabarGymQuiz: ; 1ea25 (7:6a25)
|
||||
db $08 ; asm
|
||||
xor a
|
||||
ld [$da38], a
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
push af
|
||||
and $f
|
||||
ld [$ffdb], a
|
||||
pop af
|
||||
and $f0
|
||||
swap a
|
||||
ld [$ffdc], a
|
||||
ld hl, CinnabarGymQuizIntroText
|
||||
call PrintText
|
||||
ld a, [$ffdb]
|
||||
dec a
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, CinnabarQuizQuestions
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call PrintText
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
call CinnabarGymQuiz_1ea92
|
||||
jp TextScriptEnd
|
||||
|
||||
CinnabarGymQuizIntroText: ; 1ea5b (7:6a5b)
|
||||
TX_FAR _CinnabarGymQuizIntroText
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestions: ; 1ea60 (7:6a60)
|
||||
dw CinnabarQuizQuestionsText1
|
||||
dw CinnabarQuizQuestionsText2
|
||||
dw CinnabarQuizQuestionsText3
|
||||
dw CinnabarQuizQuestionsText4
|
||||
dw CinnabarQuizQuestionsText5
|
||||
dw CinnabarQuizQuestionsText6
|
||||
|
||||
CinnabarQuizQuestionsText1: ; 1ea6c (7:6a6c)
|
||||
TX_FAR _CinnabarQuizQuestionsText1
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestionsText2: ; 1ea71 (7:6a71)
|
||||
TX_FAR _CinnabarQuizQuestionsText2
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestionsText3: ; 1ea76 (7:6a76)
|
||||
TX_FAR _CinnabarQuizQuestionsText3
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestionsText4: ; 1ea7b (7:6a7b)
|
||||
TX_FAR _CinnabarQuizQuestionsText4
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestionsText5: ; 1ea80 (7:6a80)
|
||||
TX_FAR _CinnabarQuizQuestionsText5
|
||||
db "@"
|
||||
|
||||
CinnabarQuizQuestionsText6: ; 1ea85 (7:6a85)
|
||||
TX_FAR _CinnabarQuizQuestionsText6
|
||||
db "@"
|
||||
|
||||
CinnabarGymQuiz_1ea8a: ; 1ea8a (7:6a8a)
|
||||
ld hl, $d79c
|
||||
ld a, $10
|
||||
jp Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
|
||||
CinnabarGymQuiz_1ea92: ; 1ea92 (7:6a92)
|
||||
call YesNoChoice
|
||||
ld a, [$ffdc]
|
||||
ld c, a
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp c
|
||||
jr nz, .asm_1eab8
|
||||
ld hl, $d126
|
||||
set 5, [hl]
|
||||
ld a, [$ffdb]
|
||||
ld [$ffe0], a
|
||||
ld hl, CinnabarGymQuizCorrectText
|
||||
call PrintText
|
||||
ld a, [$ffe0]
|
||||
ld c, a
|
||||
ld b, $1
|
||||
call CinnabarGymQuiz_1ea8a
|
||||
jp CinnabarGymQuiz_1eb0a
|
||||
.asm_1eab8
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_51 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld hl, CinnabarGymQuizIncorrectText
|
||||
call PrintText
|
||||
ld a, [$ffdb]
|
||||
add $2
|
||||
ld c, a
|
||||
ld b, $2
|
||||
ld hl, $d79a
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
ld a, c
|
||||
and a
|
||||
ret nz
|
||||
ld a, [$ffdb]
|
||||
add $2
|
||||
ld [$da38], a
|
||||
ret
|
||||
|
||||
CinnabarGymQuizCorrectText: ; 1eae3 (7:6ae3)
|
||||
db $0b
|
||||
TX_FAR _CinnabarGymQuizCorrectText
|
||||
db $06,$08
|
||||
|
||||
ld a, [$ffe0]
|
||||
ld c, a
|
||||
ld b, $2
|
||||
call CinnabarGymQuiz_1ea8a
|
||||
ld a, c
|
||||
and a
|
||||
jp nz, TextScriptEnd
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_57 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
jp TextScriptEnd
|
||||
|
||||
CinnabarGymQuizIncorrectText: ; 1eb05 (7:6b05)
|
||||
TX_FAR _CinnabarGymQuizIncorrectText
|
||||
db "@"
|
||||
|
||||
CinnabarGymQuiz_1eb0a: ; 1eb0a (7:6b0a)
|
||||
ld a, $6
|
||||
ld [$ffdb], a
|
||||
.asm_1eb0e
|
||||
ld a, [$ffdb]
|
||||
dec a
|
||||
add a
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, CinnabarGymGateCoords ; $6b48
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld b, [hl]
|
||||
ld c, a
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [$d12f], a
|
||||
push bc
|
||||
ld a, [$ffdb]
|
||||
ld [$ffe0], a
|
||||
ld c, a
|
||||
ld b, $2
|
||||
call CinnabarGymQuiz_1ea8a
|
||||
ld a, c
|
||||
and a
|
||||
jr nz, .asm_1eb36
|
||||
ld a, [$d12f]
|
||||
jr .asm_1eb38
|
||||
.asm_1eb36
|
||||
ld a, $e
|
||||
.asm_1eb38
|
||||
pop bc
|
||||
ld [$d09f], a
|
||||
ld a, $17
|
||||
call Predef ; indirect jump to Func_ee9e (ee9e (3:6e9e))
|
||||
ld hl, $ffdb
|
||||
dec [hl]
|
||||
jr nz, .asm_1eb0e
|
||||
ret
|
||||
|
||||
CinnabarGymGateCoords: ; 1eb48 (7:6b48)
|
||||
; format: x-coord, y-coord, direction, padding
|
||||
; direction: $54 = horizontal gate, $5f = vertical gate
|
||||
db $09,$03,$54,$00
|
||||
db $06,$03,$54,$00
|
||||
db $06,$06,$54,$00
|
||||
db $03,$08,$5f,$00
|
||||
db $02,$06,$54,$00
|
||||
db $02,$03,$54,$00
|
||||
|
||||
PrintMagazinesText: ; 1eb60 (7:6b60)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $30
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
MagazinesText: ; 1eb69 (7:6b69)
|
||||
TX_FAR _MagazinesText
|
||||
db "@"
|
||||
|
||||
BillsHousePC: ; 1eb6e (7:6b6e)
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
ret nz
|
||||
ld a, [$d7f2]
|
||||
bit 7, a
|
||||
jr nz, .asm_1ebd2
|
||||
bit 3, a
|
||||
jr nz, .asm_1eb86
|
||||
bit 6, a
|
||||
jr nz, .asm_1eb8b
|
||||
.asm_1eb86
|
||||
ld a, $2d
|
||||
jp PrintPredefTextID
|
||||
.asm_1eb8b
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld a, $2e
|
||||
call PrintPredefTextID
|
||||
ld c, $20
|
||||
call DelayFrames
|
||||
ld a, (SFX_02_3c - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld c, $50
|
||||
call DelayFrames
|
||||
ld a, (SFX_02_48 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld c, $30
|
||||
call DelayFrames
|
||||
ld a, (SFX_02_3c - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld c, $20
|
||||
call DelayFrames
|
||||
ld a, (SFX_02_3a - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
call Func_2307
|
||||
ld hl, $d7f2
|
||||
set 3, [hl]
|
||||
ret
|
||||
.asm_1ebd2
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld a, $2f
|
||||
call PrintPredefTextID
|
||||
ret
|
||||
|
||||
BillsHouseMonitorText: ; 1ebdd (7:6bdd)
|
||||
TX_FAR _BillsHouseMonitorText
|
||||
db "@"
|
||||
|
||||
BillsHouseInitiatedText: ; 1ebe2 (7:6be2)
|
||||
TX_FAR _BillsHouseInitiatedText
|
||||
db $06
|
||||
db $08 ; asm
|
||||
ld a, $ff
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld c, $10
|
||||
call DelayFrames
|
||||
ld a, (SFX_02_49 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld c, $3c
|
||||
call DelayFrames
|
||||
jp TextScriptEnd
|
||||
|
||||
BillsHousePokemonList: ; 1ec05 (7:6c05)
|
||||
db $08 ; asm
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld hl, BillsHousePokemonListText1
|
||||
call PrintText
|
||||
xor a
|
||||
ld [$d07c], a
|
||||
ld [$cc26], a
|
||||
ld [$cc2a], a
|
||||
ld a, $3
|
||||
ld [$cc29], a
|
||||
ld a, $4
|
||||
ld [$cc28], a
|
||||
ld a, $2
|
||||
ld [$cc24], a
|
||||
ld a, $1
|
||||
ld [$cc25], a
|
||||
.asm_1ec2d
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
ld hl, wTileMap
|
||||
ld b, $a
|
||||
ld c, $9
|
||||
call TextBoxBorder
|
||||
ld hl, $c3ca
|
||||
ld de, BillsMonListText
|
||||
call PlaceString
|
||||
ld hl, BillsHousePokemonListText2
|
||||
call PrintText
|
||||
call SaveScreenTilesToBuffer2
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jr nz, .asm_1ec74
|
||||
ld a, [$cc26]
|
||||
add EEVEE
|
||||
cp EEVEE
|
||||
jr z, .asm_1ec6c
|
||||
cp FLAREON
|
||||
jr z, .asm_1ec6c
|
||||
cp JOLTEON
|
||||
jr z, .asm_1ec6c
|
||||
cp VAPOREON
|
||||
jr z, .asm_1ec6c
|
||||
jr .asm_1ec74
|
||||
.asm_1ec6c
|
||||
call DisplayPokedex
|
||||
call LoadScreenTilesFromBuffer2
|
||||
jr .asm_1ec2d
|
||||
.asm_1ec74
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call LoadScreenTilesFromBuffer2
|
||||
jp TextScriptEnd
|
||||
|
||||
BillsHousePokemonListText1: ; 1ec7f (7:6c7f)
|
||||
TX_FAR _BillsHousePokemonListText1
|
||||
db "@"
|
||||
|
||||
BillsMonListText: ; 1ec84 (7:6c84)
|
||||
db "EEVEE"
|
||||
next "FLAREON"
|
||||
next "JOLTEON"
|
||||
next "VAPOREON"
|
||||
next "CANCEL@"
|
||||
|
||||
BillsHousePokemonListText2: ; 1ecaa (7:6caa)
|
||||
TX_FAR _BillsHousePokemonListText2
|
||||
db "@"
|
||||
|
||||
DisplayOakLabEmailText: ; 1ecaf (7:6caf)
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $8 ; OakLabEmailText
|
||||
jp PrintPredefTextID
|
||||
|
||||
OakLabEmailText: ; 1ecbd (7:6cbd)
|
||||
TX_FAR _OakLabEmailText
|
||||
db "@"
|
267
engine/hp_bar.asm
Executable file
267
engine/hp_bar.asm
Executable file
|
@ -0,0 +1,267 @@
|
|||
UpdateHPBar_LoadRegisters: ; f9dc (3:79dc)
|
||||
call Load16BitRegisters
|
||||
|
||||
; calculates bc * 48 / de, the number of pixels the HP bar has
|
||||
; the result is always at least 1
|
||||
UpdateHPBar_CalcNumberOfHPBarPixels: ; f9df (3:79df)
|
||||
push hl
|
||||
xor a
|
||||
ld hl, H_MULTIPLICAND
|
||||
ld [hli], a
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
ld a, c
|
||||
ld [hli], a
|
||||
ld [hl], $30
|
||||
call Multiply ; 48 * bc (hp bar is 48 pixels long)
|
||||
ld a, d
|
||||
and a
|
||||
jr z, .maxHPSmaller256
|
||||
srl d ; make HP in de fit into 1 byte by dividing by 4
|
||||
rr e
|
||||
srl d
|
||||
rr e
|
||||
ld a, [H_MULTIPLICAND+1]
|
||||
ld b, a
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
srl b ; divide multiplication result as well
|
||||
rr a
|
||||
srl b
|
||||
rr a
|
||||
ld [H_MULTIPLICAND+2], a
|
||||
ld a, b
|
||||
ld [H_MULTIPLICAND+1], a
|
||||
.maxHPSmaller256
|
||||
ld a, e
|
||||
ld [H_DIVISOR], a
|
||||
ld b, $4
|
||||
call Divide
|
||||
ld a, [H_MULTIPLICAND+2]
|
||||
ld e, a ; e = bc * 48 / de (num of pixels of HP bar)
|
||||
pop hl
|
||||
and a
|
||||
ret nz
|
||||
ld e, $1 ; make result at least 1
|
||||
ret
|
||||
|
||||
; predef $48
|
||||
UpdateHPBar: ; fa1d (3:7a1d)
|
||||
push hl
|
||||
ld hl, wHPBarOldHP
|
||||
ld a, [hli]
|
||||
ld c, a ; old HP into bc
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld e, a ; new HP into de
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
push de
|
||||
push bc
|
||||
call UpdateHPBar_CalcHPDifference
|
||||
ld a, e
|
||||
ld [wHPBarHPDifference+1], a
|
||||
ld a, d
|
||||
ld [wHPBarHPDifference], a
|
||||
pop bc
|
||||
pop de
|
||||
call UpdateHPBar_CompareNewHPToOldHP
|
||||
ret z
|
||||
ld a, $ff
|
||||
jr c, .HPdecrease
|
||||
ld a, $1
|
||||
.HPdecrease
|
||||
ld [wHPBarDelta], a
|
||||
call Load16BitRegisters
|
||||
ld a, [wHPBarNewHP]
|
||||
ld e, a
|
||||
ld a, [wHPBarNewHP+1]
|
||||
ld d, a
|
||||
.animateHPBarLoop
|
||||
push de
|
||||
ld a, [wHPBarOldHP]
|
||||
ld c, a
|
||||
ld a, [wHPBarOldHP+1]
|
||||
ld b, a
|
||||
call UpdateHPBar_CompareNewHPToOldHP
|
||||
jr z, .animateHPBarDone
|
||||
jr nc, .HPIncrease
|
||||
dec bc ; subtract 1 HP
|
||||
ld a, c
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, b
|
||||
ld [wHPBarNewHP+1], a
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld a, e
|
||||
sub d ; calc pixel difference
|
||||
jr .asm_fa7e
|
||||
.HPIncrease
|
||||
inc bc ; add 1 HP
|
||||
ld a, c
|
||||
ld [wHPBarNewHP], a
|
||||
ld a, b
|
||||
ld [wHPBarNewHP+1], a
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld a, d
|
||||
sub e ; calc pixel difference
|
||||
.asm_fa7e
|
||||
call UpdateHPBar_PrintHPNumber
|
||||
and a
|
||||
jr z, .noPixelDifference
|
||||
call UpdateHPBar_AnimateHPBar
|
||||
.noPixelDifference
|
||||
ld a, [wHPBarNewHP]
|
||||
ld [wHPBarOldHP], a
|
||||
ld a, [wHPBarNewHP+1]
|
||||
ld [wHPBarOldHP+1], a
|
||||
pop de
|
||||
jr .animateHPBarLoop
|
||||
.animateHPBarDone
|
||||
pop de
|
||||
ld a, e
|
||||
ld [wHPBarOldHP], a
|
||||
ld a, d
|
||||
ld [wHPBarOldHP+1], a
|
||||
or e
|
||||
jr z, .monFainted
|
||||
call UpdateHPBar_CalcOldNewHPBarPixels
|
||||
ld d, e
|
||||
.monFainted
|
||||
call UpdateHPBar_PrintHPNumber
|
||||
ld a, $1
|
||||
call UpdateHPBar_AnimateHPBar
|
||||
jp Delay3
|
||||
|
||||
; animates the HP bar going up or down for (a) ticks (two waiting frames each)
|
||||
; stops prematurely if bar is filled up
|
||||
; e: current health (in pixels) to start with
|
||||
UpdateHPBar_AnimateHPBar: ; fab1 (3:7ab1)
|
||||
push hl
|
||||
.barAnimationLoop
|
||||
push af
|
||||
push de
|
||||
ld d, $6
|
||||
call DrawHPBar
|
||||
ld c, $2
|
||||
call DelayFrames
|
||||
pop de
|
||||
ld a, [wHPBarDelta] ; +1 or -1
|
||||
add e
|
||||
cp $31
|
||||
jr nc, .barFilledUp
|
||||
ld e, a
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .barAnimationLoop
|
||||
pop hl
|
||||
ret
|
||||
.barFilledUp
|
||||
pop af
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; compares old HP and new HP and sets c and z flags accordingly
|
||||
UpdateHPBar_CompareNewHPToOldHP: ; fad1 (3:7ad1)
|
||||
ld a, d
|
||||
sub b
|
||||
ret nz
|
||||
ld a, e
|
||||
sub c
|
||||
ret
|
||||
|
||||
; calcs HP difference between bc and de (into de)
|
||||
UpdateHPBar_CalcHPDifference: ; fad7 (3:7ad7)
|
||||
ld a, d
|
||||
sub b
|
||||
jr c, .oldHPGreater
|
||||
jr z, .testLowerByte
|
||||
.newHPGreater
|
||||
ld a, e
|
||||
sub c
|
||||
ld e, a
|
||||
ld a, d
|
||||
sbc b
|
||||
ld d, a
|
||||
ret
|
||||
.oldHPGreater
|
||||
ld a, c
|
||||
sub e
|
||||
ld e, a
|
||||
ld a, b
|
||||
sbc d
|
||||
ld d, a
|
||||
ret
|
||||
.testLowerByte
|
||||
ld a, e
|
||||
sub c
|
||||
jr c, .oldHPGreater
|
||||
jr nz, .newHPGreater
|
||||
ld de, $0
|
||||
ret
|
||||
|
||||
UpdateHPBar_PrintHPNumber: ; faf5 (3:7af5)
|
||||
push af
|
||||
push de
|
||||
ld a, [wListMenuID] ; $cf94
|
||||
and a
|
||||
jr z, .asm_fb2d
|
||||
ld a, [wHPBarOldHP]
|
||||
ld [$cef1], a
|
||||
ld a, [wHPBarOldHP+1]
|
||||
ld [$cef0], a
|
||||
push hl
|
||||
ld a, [$fff6]
|
||||
bit 0, a
|
||||
jr z, .asm_fb15
|
||||
ld de, $9
|
||||
jr .asm_fb18
|
||||
.asm_fb15
|
||||
ld de, $15
|
||||
.asm_fb18
|
||||
add hl, de
|
||||
push hl
|
||||
ld a, $7f
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
pop hl
|
||||
ld de, $cef0
|
||||
ld bc, $203
|
||||
call PrintNumber
|
||||
call DelayFrame
|
||||
pop hl
|
||||
.asm_fb2d
|
||||
pop de
|
||||
pop af
|
||||
ret
|
||||
|
||||
; calcs number of HP bar pixels for old and new HP value
|
||||
; d: new pixels
|
||||
; e: old pixels
|
||||
UpdateHPBar_CalcOldNewHPBarPixels: ; fb30 (3:7b30)
|
||||
push hl
|
||||
ld hl, wHPBarMaxHP
|
||||
ld a, [hli] ; max HP into de
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli] ; old HP into bc
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli] ; new HP into hl
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push hl
|
||||
push de
|
||||
call UpdateHPBar_CalcNumberOfHPBarPixels ; calc num pixels for old HP
|
||||
ld a, e
|
||||
pop de
|
||||
pop bc
|
||||
push af
|
||||
call UpdateHPBar_CalcNumberOfHPBarPixels ; calc num pixels for new HP
|
||||
pop af
|
||||
ld d, e
|
||||
ld e, a
|
||||
pop hl
|
||||
ret
|
329
engine/in_game_trades.asm
Executable file
329
engine/in_game_trades.asm
Executable file
|
@ -0,0 +1,329 @@
|
|||
Predef54: ; 71ad9 (1c:5ad9)
|
||||
; trigger the trade offer/action specified by wWhichTrade
|
||||
call SaveScreenTilesToBuffer2
|
||||
ld hl,TradeMons
|
||||
ld a,[wWhichTrade]
|
||||
ld b,a
|
||||
swap a
|
||||
sub b
|
||||
sub b
|
||||
ld c,a
|
||||
ld b,$0
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld [$cd0f],a
|
||||
ld a,[hli]
|
||||
ld [$cd34],a
|
||||
ld a,[hli]
|
||||
push af
|
||||
ld de,$cd29
|
||||
ld bc,$000b
|
||||
call CopyData
|
||||
pop af
|
||||
ld l,a
|
||||
ld h,$0
|
||||
ld de,InGameTradeTextPointers ; $5d64
|
||||
add hl,hl
|
||||
add hl,de
|
||||
ld a,[hli]
|
||||
ld [$cd10],a
|
||||
ld a,[hl]
|
||||
ld [$cd11],a
|
||||
ld a,[$cd0f]
|
||||
ld de,$cd13
|
||||
call Func_71b6a
|
||||
ld a,[$cd34]
|
||||
ld de,$cd1e
|
||||
call Func_71b6a
|
||||
ld hl,$d737
|
||||
ld a,[wWhichTrade]
|
||||
ld c,a
|
||||
ld b,$2
|
||||
ld a,$10
|
||||
call Predef
|
||||
ld a,c
|
||||
and a
|
||||
ld a,$4
|
||||
ld [$cd12],a
|
||||
jr nz,.asm_99bca ; 0x71b36 $20
|
||||
xor a
|
||||
ld [$cd12],a
|
||||
call .asm_99bca
|
||||
ld a,$1
|
||||
ld [$cd12],a
|
||||
call YesNoChoice
|
||||
ld a,[$cc26]
|
||||
and a
|
||||
jr nz,.asm_99bca ; 0x71b4b $b
|
||||
call Func_71c07
|
||||
jr c,.asm_99bca ; 0x71b50 $6
|
||||
ld hl, TradedForText
|
||||
call PrintText
|
||||
.asm_99bca ; 0x71b58
|
||||
ld hl,$cd12
|
||||
ld a,[hld]
|
||||
ld e,a
|
||||
ld d,$0
|
||||
ld a,[hld]
|
||||
ld l,[hl]
|
||||
ld h,a
|
||||
add hl,de
|
||||
add hl,de
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
jp PrintText
|
||||
|
||||
Func_71b6a: ; 71b6a (1c:5b6a)
|
||||
push de
|
||||
ld [$d11e],a
|
||||
call GetMonName
|
||||
ld hl,$cd6d
|
||||
pop de
|
||||
ld bc,$b
|
||||
jp CopyData
|
||||
|
||||
INCLUDE "data/trades.asm"
|
||||
|
||||
Func_71c07: ; 71c07 (1c:5c07)
|
||||
xor a
|
||||
ld [$d07d],a
|
||||
dec a
|
||||
ld [$cfcb],a
|
||||
call DisplayPartyMenu
|
||||
push af
|
||||
call Func_71ca2
|
||||
pop af
|
||||
ld a,$1
|
||||
jp c,.asm_c4bc2
|
||||
ld a,[$cd0f]
|
||||
ld b,a
|
||||
ld a,[$cf91]
|
||||
cp b
|
||||
ld a,$2
|
||||
jr nz,.asm_c4bc2 ; 0x71c26 $75
|
||||
ld a,[wWhichPokemon]
|
||||
ld hl,$d18c
|
||||
ld bc,$002c
|
||||
call AddNTimes
|
||||
ld a,[hl]
|
||||
ld [$d127],a
|
||||
ld hl,$d737
|
||||
ld a,[wWhichTrade]
|
||||
ld c,a
|
||||
ld b,$1
|
||||
ld a,$10
|
||||
call Predef
|
||||
ld hl, ConnectCableText
|
||||
call PrintText
|
||||
ld a,[wWhichPokemon]
|
||||
push af
|
||||
ld a,[$d127]
|
||||
push af
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
call Func_71cc1
|
||||
ld a,$38
|
||||
call Predef
|
||||
pop af
|
||||
ld [$d127],a
|
||||
pop af
|
||||
ld [wWhichPokemon],a
|
||||
ld a,[$cd34]
|
||||
ld [$cf91],a
|
||||
xor a
|
||||
ld [$cc49],a
|
||||
ld [$cf95],a
|
||||
call RemovePokemon
|
||||
ld a,$80
|
||||
ld [$cc49],a
|
||||
call AddPokemonToParty
|
||||
call Func_71d19
|
||||
callab EvolveTradeMon
|
||||
call ClearScreen
|
||||
call Func_71ca2
|
||||
callba Func_eedc
|
||||
and a
|
||||
ld a,$3
|
||||
jr .asm_ee803 ; 0x71c9b $1
|
||||
.asm_c4bc2 ; 0x71c9d
|
||||
scf
|
||||
.asm_ee803 ; 0x71c9e
|
||||
ld [$cd12],a
|
||||
ret
|
||||
|
||||
Func_71ca2: ; 71ca2 (1c:5ca2)
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call Func_3dbe
|
||||
call ReloadTilesetTilePatterns
|
||||
call LoadScreenTilesFromBuffer2
|
||||
call Delay3
|
||||
call LoadGBPal
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
ld b, BANK(LoadWildData)
|
||||
ld hl, LoadWildData
|
||||
jp Bankswitch
|
||||
|
||||
Func_71cc1: ; 71cc1 (1c:5cc1)
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
ld a, [$cd0f]
|
||||
ld [hli], a
|
||||
ld a, [$cd34]
|
||||
ld [hl], a
|
||||
ld hl, W_PARTYMON1OT ; $d273
|
||||
ld bc, $b
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
call AddNTimes
|
||||
ld de, $cd41
|
||||
ld bc, $b
|
||||
call Func_71d11
|
||||
ld hl, String_71d59 ; $5d59
|
||||
ld de, $cd4e
|
||||
call Func_71d11
|
||||
ld de, W_GRASSRATE ; $d887
|
||||
call Func_71d11
|
||||
ld hl, W_PARTYMON1_OTID ; $d177
|
||||
ld bc, $2c
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
call AddNTimes
|
||||
ld de, $cd4c
|
||||
ld bc, $2
|
||||
call Func_71d11
|
||||
call GenRandom
|
||||
ld hl, H_RAND1 ; $ffd3
|
||||
ld de, $cd59
|
||||
jp CopyData
|
||||
|
||||
Func_71d11: ; 71d11 (1c:5d11)
|
||||
push hl
|
||||
push bc
|
||||
call CopyData
|
||||
pop bc
|
||||
pop hl
|
||||
ret
|
||||
|
||||
Func_71d19: ; 71d19 (1c:5d19)
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
ld bc, $b
|
||||
call Func_71d4f
|
||||
ld hl, $cd29
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1OT ; $d273
|
||||
ld bc, $b
|
||||
call Func_71d4f
|
||||
ld hl, String_71d59 ; $5d59
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1_OTID ; $d177
|
||||
ld bc, $2c
|
||||
call Func_71d4f
|
||||
ld hl, $cd59
|
||||
ld bc, $2
|
||||
jp CopyData
|
||||
|
||||
Func_71d4f: ; 71d4f (1c:5d4f)
|
||||
ld a, [W_NUMINPARTY] ; $d163
|
||||
dec a
|
||||
call AddNTimes
|
||||
ld e, l
|
||||
ld d, h
|
||||
ret
|
||||
|
||||
String_71d59: ; 71d59 (1c:5d59)
|
||||
; "TRAINER@@@@@@@@@@"
|
||||
db $5d, "@@@@@@@@@@"
|
||||
|
||||
InGameTradeTextPointers: ; 71d64 (1c:5d64)
|
||||
dw TradeTextPointers1
|
||||
dw TradeTextPointers2
|
||||
dw TradeTextPointers3
|
||||
|
||||
TradeTextPointers1: ; 71d6a (1c:5d6a)
|
||||
dw WannaTrade1Text
|
||||
dw NoTrade1Text
|
||||
dw WrongMon1Text
|
||||
dw Thanks1Text
|
||||
dw AfterTrade1Text
|
||||
|
||||
TradeTextPointers2: ; 71d74 (1c:5d74)
|
||||
dw WannaTrade2Text
|
||||
dw NoTrade2Text
|
||||
dw WrongMon2Text
|
||||
dw Thanks2Text
|
||||
dw AfterTrade2Text
|
||||
|
||||
TradeTextPointers3: ; 71d7e (1c:5d7e)
|
||||
dw WannaTrade3Text
|
||||
dw NoTrade3Text
|
||||
dw WrongMon3Text
|
||||
dw Thanks3Text
|
||||
dw AfterTrade3Text
|
||||
|
||||
ConnectCableText: ; 71d88 (1c:5d88)
|
||||
TX_FAR _ConnectCableText
|
||||
db "@"
|
||||
|
||||
TradedForText: ; 71d8d (1c:5d8d)
|
||||
TX_FAR _TradedForText
|
||||
db $11, $a, "@"
|
||||
|
||||
WannaTrade1Text: ; 71d94 (1c:5d94)
|
||||
TX_FAR _WannaTrade1Text
|
||||
db "@"
|
||||
|
||||
NoTrade1Text: ; 71d99 (1c:5d99)
|
||||
TX_FAR _NoTrade1Text
|
||||
db "@"
|
||||
|
||||
WrongMon1Text: ; 71d9e (1c:5d9e)
|
||||
TX_FAR _WrongMon1Text
|
||||
db "@"
|
||||
|
||||
Thanks1Text: ; 71da3 (1c:5da3)
|
||||
TX_FAR _Thanks1Text
|
||||
db "@"
|
||||
|
||||
AfterTrade1Text: ; 71da8 (1c:5da8)
|
||||
TX_FAR _AfterTrade1Text
|
||||
db "@"
|
||||
|
||||
WannaTrade2Text: ; 71dad (1c:5dad)
|
||||
TX_FAR _WannaTrade2Text
|
||||
db "@"
|
||||
|
||||
NoTrade2Text: ; 71db2 (1c:5db2)
|
||||
TX_FAR _NoTrade2Text
|
||||
db "@"
|
||||
|
||||
WrongMon2Text: ; 71db7 (1c:5db7)
|
||||
TX_FAR _WrongMon2Text
|
||||
db "@"
|
||||
|
||||
Thanks2Text: ; 71dbc (1c:5dbc)
|
||||
TX_FAR _Thanks2Text
|
||||
db "@"
|
||||
|
||||
AfterTrade2Text: ; 71dc1 (1c:5dc1)
|
||||
TX_FAR _AfterTrade2Text
|
||||
db "@"
|
||||
|
||||
WannaTrade3Text: ; 71dc6 (1c:5dc6)
|
||||
TX_FAR _WannaTrade3Text
|
||||
db "@"
|
||||
|
||||
NoTrade3Text: ; 71dcb (1c:5dcb)
|
||||
TX_FAR _NoTrade3Text
|
||||
db "@"
|
||||
|
||||
WrongMon3Text: ; 71dd0 (1c:5dd0)
|
||||
TX_FAR _WrongMon3Text
|
||||
db "@"
|
||||
|
||||
Thanks3Text: ; 71dd5 (1c:5dd5)
|
||||
TX_FAR _Thanks3Text
|
||||
db "@"
|
||||
|
||||
AfterTrade3Text: ; 71dda (1c:5dda)
|
||||
TX_FAR _AfterTrade3Text
|
||||
db "@"
|
448
engine/intro.asm
Executable file
448
engine/intro.asm
Executable file
|
@ -0,0 +1,448 @@
|
|||
PlayIntro: ; 41682 (10:5682)
|
||||
xor a
|
||||
ld [H_CURRENTPRESSEDBUTTONS], a
|
||||
inc a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a
|
||||
call PlayShootingStar
|
||||
call PlayIntroScene
|
||||
call GBFadeOut2
|
||||
xor a
|
||||
ld [$ffae], a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a
|
||||
call CleanLCD_OAM
|
||||
call DelayFrame
|
||||
ret
|
||||
|
||||
PlayIntroScene: ; 4169d (10:569d)
|
||||
ld b, $7
|
||||
call GoPAL_SET
|
||||
ld a, %11100100
|
||||
ld [rBGP], a
|
||||
ld [rOBP0], a
|
||||
ld [rOBP1], a
|
||||
xor a
|
||||
ld [$ffae], a
|
||||
ld b, $3
|
||||
call Func_4183f
|
||||
ld a, 0
|
||||
ld [W_BASECOORDX], a
|
||||
ld a, 80
|
||||
ld [W_BASECOORDY], a
|
||||
ld bc, $606
|
||||
call Func_417c7
|
||||
ld de, $28ff
|
||||
call Func_4180e
|
||||
ret c
|
||||
|
||||
; hip
|
||||
ld a, (SFX_1f_5f - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
xor a
|
||||
ld [$d09f], a
|
||||
ld de, IntroNidorinoAnimation1
|
||||
call AnimateIntroNidorino
|
||||
; hop
|
||||
ld a, (SFX_1f_60 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, IntroNidorinoAnimation2
|
||||
call AnimateIntroNidorino
|
||||
ld c, $a
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
; hip
|
||||
ld a, (SFX_1f_5f - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, IntroNidorinoAnimation1
|
||||
call AnimateIntroNidorino
|
||||
; hop
|
||||
ld a, (SFX_1f_60 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, IntroNidorinoAnimation2
|
||||
call AnimateIntroNidorino
|
||||
ld c, $1e
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
; raise
|
||||
ld b, $4
|
||||
call Func_4183f
|
||||
ld a, (SFX_1f_61 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, $401
|
||||
call Func_4180e
|
||||
ld c, $1e
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
; slash
|
||||
ld b, $5
|
||||
call Func_4183f
|
||||
ld a, (SFX_1f_62 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, $800
|
||||
call Func_4180e
|
||||
; hip
|
||||
ld a, (SFX_1f_5f - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld a, $24
|
||||
ld [$d09f], a
|
||||
ld de, IntroNidorinoAnimation3
|
||||
call AnimateIntroNidorino
|
||||
ld c, $1e
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
ld de, $401
|
||||
call Func_4180e
|
||||
ld b, $3
|
||||
call Func_4183f
|
||||
ld c, $3c
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
; hip
|
||||
ld a, (SFX_1f_5f - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
xor a
|
||||
ld [$d09f], a
|
||||
ld de, IntroNidorinoAnimation4 ; $5931
|
||||
call AnimateIntroNidorino
|
||||
; hop
|
||||
ld a, (SFX_1f_60 - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld de, IntroNidorinoAnimation5 ; $593c
|
||||
call AnimateIntroNidorino
|
||||
ld c, $14
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
ld a, $24
|
||||
ld [$d09f], a
|
||||
ld de, IntroNidorinoAnimation6 ; $5947
|
||||
call AnimateIntroNidorino
|
||||
ld c, $1e
|
||||
call CheckForUserInterruption
|
||||
ret c
|
||||
|
||||
; lunge
|
||||
ld a, (SFX_1f_5e - SFX_Headers_1f) / 3
|
||||
call PlaySound
|
||||
ld a, $48
|
||||
ld [$d09f], a
|
||||
ld de, IntroNidorinoAnimation7 ; $5950
|
||||
jp AnimateIntroNidorino
|
||||
|
||||
AnimateIntroNidorino: ; 41793 (10:5793)
|
||||
ld a, [de]
|
||||
cp $50
|
||||
ret z
|
||||
ld [W_BASECOORDY], a ; $d082
|
||||
inc de
|
||||
ld a, [de]
|
||||
ld [W_BASECOORDX], a ; $d081
|
||||
push de
|
||||
ld c, $24
|
||||
call Func_417ae
|
||||
ld c, 5
|
||||
call DelayFrames
|
||||
pop de
|
||||
inc de
|
||||
jr AnimateIntroNidorino
|
||||
|
||||
Func_417ae: ; 417ae (10:57ae)
|
||||
ld hl, wOAMBuffer
|
||||
ld a, [$d09f]
|
||||
ld d, a
|
||||
.asm_417b5
|
||||
ld a, [W_BASECOORDY] ; $d082
|
||||
add [hl]
|
||||
ld [hli], a
|
||||
ld a, [W_BASECOORDX] ; $d081
|
||||
add [hl]
|
||||
ld [hli], a
|
||||
ld a, d
|
||||
ld [hli], a
|
||||
inc hl
|
||||
inc d
|
||||
dec c
|
||||
jr nz, .asm_417b5
|
||||
ret
|
||||
|
||||
Func_417c7: ; 417c7 (10:57c7)
|
||||
ld hl, wOAMBuffer
|
||||
ld d, $0
|
||||
.asm_417cc
|
||||
push bc
|
||||
ld a, [W_BASECOORDY] ; $d082
|
||||
ld e, a
|
||||
.asm_417d1
|
||||
ld a, e
|
||||
add $8
|
||||
ld e, a
|
||||
ld [hli], a
|
||||
ld a, [W_BASECOORDX] ; $d081
|
||||
ld [hli], a
|
||||
ld a, d
|
||||
ld [hli], a
|
||||
ld a, $80
|
||||
ld [hli], a
|
||||
inc d
|
||||
dec c
|
||||
jr nz, .asm_417d1
|
||||
ld a, [W_BASECOORDX] ; $d081
|
||||
add $8
|
||||
ld [W_BASECOORDX], a ; $d081
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .asm_417cc
|
||||
ret
|
||||
|
||||
Func_417f0: ; 417f0 (10:57f0)
|
||||
ld hl, $9c00
|
||||
ld bc, $240
|
||||
jr asm_417fe
|
||||
|
||||
Func_417f8: ; 417f8 (10:57f8)
|
||||
FuncCoord 0, 4 ; $c3f0
|
||||
ld hl, Coord
|
||||
ld bc, $c8
|
||||
asm_417fe: ; 417fe (10:57fe)
|
||||
ld [hl], $0
|
||||
inc hl
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, asm_417fe
|
||||
ret
|
||||
|
||||
Func_41807: ; 41807 (10:5807)
|
||||
ld a, $1
|
||||
.asm_41809
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_41809
|
||||
ret
|
||||
|
||||
Func_4180e: ; 4180e (10:580e)
|
||||
ld a, e
|
||||
cp $ff
|
||||
jr z, .asm_4181d
|
||||
cp $1
|
||||
jr z, .asm_4182d
|
||||
ld a, [$ffae]
|
||||
dec a
|
||||
dec a
|
||||
jr .asm_41831
|
||||
.asm_4181d
|
||||
push de
|
||||
ld a, $2
|
||||
ld [W_BASECOORDX], a ; $d081
|
||||
xor a
|
||||
ld [W_BASECOORDY], a ; $d082
|
||||
ld c, $24
|
||||
call Func_417ae
|
||||
pop de
|
||||
.asm_4182d
|
||||
ld a, [$ffae]
|
||||
inc a
|
||||
inc a
|
||||
.asm_41831
|
||||
ld [$ffae], a
|
||||
push de
|
||||
ld c, $2
|
||||
call CheckForUserInterruption
|
||||
pop de
|
||||
ret c
|
||||
dec d
|
||||
jr nz, Func_4180e
|
||||
ret
|
||||
|
||||
Func_4183f: ; 4183f (10:583f)
|
||||
FuncCoord 13, 7 ; $c439
|
||||
ld hl, Coord
|
||||
|
||||
Func_41842: ; 41842 (10:5842)
|
||||
ld c, $0
|
||||
ld a, $31
|
||||
jp Predef ; indirect jump to Func_79dda
|
||||
|
||||
Func_41849: ; 41849 (10:5849)
|
||||
ld a, $33
|
||||
call Predef ; indirect jump to Func_79869
|
||||
ld a, b
|
||||
jp PlaySound
|
||||
|
||||
LoadIntroGraphics: ; 41852 (10:5852)
|
||||
ld hl, FightIntroBackMon ; $5a99
|
||||
ld de, $9000
|
||||
ld bc, $600
|
||||
ld a, BANK(FightIntroBackMon)
|
||||
call FarCopyData2
|
||||
ld hl, GameFreakIntro ; $5959
|
||||
ld de, $9600
|
||||
ld bc, $140
|
||||
ld a, BANK(GameFreakIntro)
|
||||
call FarCopyData2
|
||||
ld hl, GameFreakIntro ; $5959
|
||||
ld de, $8800
|
||||
ld bc, $140
|
||||
ld a, BANK(GameFreakIntro)
|
||||
call FarCopyData2
|
||||
ld hl, FightIntroFrontMon ; $6099
|
||||
ld de, $8000
|
||||
ld bc, $6c0
|
||||
ld a, BANK(FightIntroFrontMon)
|
||||
jp FarCopyData2
|
||||
|
||||
PlayShootingStar: ; 4188a (10:588a)
|
||||
ld b, $c
|
||||
call GoPAL_SET
|
||||
callba LoadCopyrightAndTextBoxTiles
|
||||
ld a, $e4
|
||||
ld [rBGP], a ; $ff47
|
||||
ld c, $b4
|
||||
call DelayFrames
|
||||
call ClearScreen
|
||||
call DisableLCD
|
||||
xor a
|
||||
ld [W_CUROPPONENT], a ; $d059
|
||||
call Func_418e9
|
||||
call LoadIntroGraphics
|
||||
call EnableLCD
|
||||
ld hl, rLCDC ; $ff40
|
||||
res 5, [hl]
|
||||
set 3, [hl]
|
||||
ld c, $40
|
||||
call DelayFrames
|
||||
callba AnimateShootingStar
|
||||
push af
|
||||
pop af
|
||||
jr c, .asm_418d0
|
||||
ld c, $28
|
||||
call DelayFrames
|
||||
.asm_418d0
|
||||
ld a, Bank(Func_7d8ea)
|
||||
ld [$c0ef], a
|
||||
ld [$c0f0], a
|
||||
ld a, MUSIC_INTRO_BATTLE
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
call Func_417f8
|
||||
call CleanLCD_OAM
|
||||
jp Delay3
|
||||
|
||||
Func_418e9: ; 418e9 (10:58e9)
|
||||
call Func_417f0
|
||||
ld hl, wTileMap
|
||||
ld c, $50
|
||||
call Func_41807
|
||||
FuncCoord 0, 14 ; $c4b8
|
||||
ld hl, Coord
|
||||
ld c, $50
|
||||
call Func_41807
|
||||
ld hl, $9c00
|
||||
ld c, $80
|
||||
call Func_41807
|
||||
ld hl, $9dc0
|
||||
ld c, $80
|
||||
jp Func_41807
|
||||
|
||||
Func_4190c: ; 4190c (10:590c)
|
||||
ret
|
||||
|
||||
IntroNidorinoAnimation0: ; 4190d (10:590d)
|
||||
db 0, 0
|
||||
db $50
|
||||
|
||||
IntroNidorinoAnimation1: ; 41910 (10:5910)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation. This
|
||||
; list describes how Nidorino should hop.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db -2, 2
|
||||
db -1, 2
|
||||
db 1, 2
|
||||
db 2, 2
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation2: ; 4191b (10:591b)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db -2, -2
|
||||
db -1, -2
|
||||
db 1, -2
|
||||
db 2, -2
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation3: ; 41926 (10:5926)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db -12, 6
|
||||
db -8, 6
|
||||
db 8, 6
|
||||
db 12, 6
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation4: ; 41931 (10:5931)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db -8, -4
|
||||
db -4, -4
|
||||
db 4, -4
|
||||
db 8, -4
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation5: ; 4193c (10:593c)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db -8, 4
|
||||
db -4, 4
|
||||
db 4, 4
|
||||
db 8, 4
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation6: ; 41947 (10:5947)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db 0, 0
|
||||
db 2, 0
|
||||
db 2, 0
|
||||
db 0, 0
|
||||
db $50 ; list terminator
|
||||
|
||||
IntroNidorinoAnimation7: ; 41950 (10:5950)
|
||||
; This is a sequence of pixel movements for part of the Nidorino animation.
|
||||
; First byte is y movement, second byte is x movement
|
||||
db -8, -16
|
||||
db -7, -14
|
||||
db -6, -12
|
||||
db -4, -10
|
||||
db $50 ; list terminator
|
||||
|
||||
GameFreakIntro: ; 41959 (10:5959)
|
||||
INCBIN "gfx/gamefreak_intro.h8.2bpp"
|
||||
INCBIN "gfx/gamefreak_logo.2bpp"
|
||||
ds $10 ; blank tile
|
||||
|
||||
FightIntroBackMon: ; 41a99 (10:5a99)
|
||||
INCBIN "gfx/intro_fight.2bpp"
|
||||
|
||||
FightIntroFrontMon: ; 42099 (10:6099)
|
||||
|
||||
IF _RED
|
||||
INCBIN "gfx/red/intro_nido_1.6x6.2bpp"
|
||||
INCBIN "gfx/red/intro_nido_2.6x6.2bpp"
|
||||
INCBIN "gfx/red/intro_nido_3.6x6.2bpp"
|
||||
ds $10 ; blank tile
|
||||
ENDC
|
||||
IF _BLUE
|
||||
INCBIN "gfx/blue/intro_purin_1.6x6.2bpp"
|
||||
INCBIN "gfx/blue/intro_purin_2.6x6.2bpp"
|
||||
INCBIN "gfx/blue/intro_purin_3.6x6.2bpp"
|
||||
ds $10 ; blank tile
|
||||
ENDC
|
51
engine/items/itemfinder.asm
Executable file
51
engine/items/itemfinder.asm
Executable file
|
@ -0,0 +1,51 @@
|
|||
HiddenItemNear: ; 7481f (1d:481f)
|
||||
ld hl, HiddenItemCoords
|
||||
ld b, $0
|
||||
.asm_74824
|
||||
ld de, $0003
|
||||
ld a, [W_CURMAP]
|
||||
call IsInArrayCummulativeCount
|
||||
ret nc ; return if current map has no hidden items
|
||||
push bc
|
||||
push hl
|
||||
ld hl, $d6f0
|
||||
ld c, b
|
||||
ld b, $2
|
||||
ld a, $10
|
||||
call Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
ld a, c
|
||||
pop hl
|
||||
pop bc
|
||||
inc b
|
||||
and a
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
inc hl
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
jr nz, .asm_74824 ; 0x74845 $dd
|
||||
ld a, [W_YCOORD]
|
||||
call Func_7486b
|
||||
cp d
|
||||
jr nc, .asm_74824 ; 0x7484e $d4
|
||||
ld a, [W_YCOORD]
|
||||
add $4
|
||||
cp d
|
||||
jr c, .asm_74824 ; 0x74856 $cc
|
||||
ld a, [W_XCOORD]
|
||||
call Func_7486b
|
||||
cp e
|
||||
jr nc, .asm_74824 ; 0x7485f $c3
|
||||
ld a, [W_XCOORD]
|
||||
add $5
|
||||
cp e
|
||||
jr c, .asm_74824 ; 0x74867 $bb
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_7486b: ; 7486b (1d:486b)
|
||||
sub $5
|
||||
cp $f0
|
||||
ret c
|
||||
xor a
|
||||
ret
|
2889
engine/items/items.asm
Executable file
2889
engine/items/items.asm
Executable file
File diff suppressed because it is too large
Load diff
23
engine/items/tm_prices.asm
Executable file
23
engine/items/tm_prices.asm
Executable file
|
@ -0,0 +1,23 @@
|
|||
GetMachinePrice: ; 7bf86 (1e:7f86)
|
||||
ld a, [$cf91]
|
||||
sub TM_01
|
||||
ret c
|
||||
ld d, a
|
||||
ld hl, TechnicalMachinePrices ; $7fa7
|
||||
srl a
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
srl d
|
||||
jr nc, .asm_7bf9d
|
||||
swap a
|
||||
.asm_7bf9d
|
||||
and $f0
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
xor a
|
||||
ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
|
||||
ld [$ff8d], a
|
||||
ret
|
||||
|
||||
INCLUDE "data/tm_prices.asm"
|
26
engine/items/tmhm.asm
Executable file
26
engine/items/tmhm.asm
Executable file
|
@ -0,0 +1,26 @@
|
|||
; checks if the mon in wWhichPokemon already knows the move in $d0e0
|
||||
CheckIfMoveIsKnown: ; 2fe18 (b:7e18)
|
||||
ld a, [wWhichPokemon]
|
||||
ld hl, W_PARTYMON1_MOVE1
|
||||
ld bc, $2c
|
||||
call AddNTimes
|
||||
ld a, [$d0e0]
|
||||
ld b, a
|
||||
ld c, $4 ; nubmer of moves
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .alreadyKnown ; found a match
|
||||
dec c
|
||||
jr nz, .loop
|
||||
and a
|
||||
ret
|
||||
.alreadyKnown
|
||||
ld hl, AlreadyKnowsText
|
||||
call PrintText
|
||||
scf
|
||||
ret
|
||||
|
||||
AlreadyKnowsText: ; 2fe3b (b:7e3b)
|
||||
TX_FAR _AlreadyKnowsText
|
||||
db "@"
|
37
engine/items/tms.asm
Executable file
37
engine/items/tms.asm
Executable file
|
@ -0,0 +1,37 @@
|
|||
; tests if mon [$cf91] can learn move [$d0e0]
|
||||
TestMonMoveCompatibility: ; 1373e (4:773e)
|
||||
ld a, [$cf91]
|
||||
ld [$d0b5], a
|
||||
call GetMonHeader
|
||||
ld hl, W_MONHLEARNSET
|
||||
push hl
|
||||
ld a, [$d0e0]
|
||||
ld b, a
|
||||
ld c, $0
|
||||
ld hl, TechnicalMachines
|
||||
.findTMloop
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr z, .TMfoundLoop
|
||||
inc c
|
||||
jr .findTMloop
|
||||
.TMfoundLoop
|
||||
pop hl
|
||||
ld b, $2 ; read corresponding bit from TM compatibility array
|
||||
ld a, $10
|
||||
jp Predef ; indirect jump to HandleBitArray (f666 (3:7666))
|
||||
|
||||
; converts TM/HM number in $d11e into move number
|
||||
; HMs start at 51
|
||||
TMToMove: ; 13763 (4:7763)
|
||||
ld a, [$d11e]
|
||||
dec a
|
||||
ld hl, TechnicalMachines
|
||||
ld b, $0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$d11e], a
|
||||
ret
|
||||
|
||||
INCLUDE "data/tms.asm"
|
228
engine/learn_move.asm
Executable file
228
engine/learn_move.asm
Executable file
|
@ -0,0 +1,228 @@
|
|||
LearnMove: ; 6e43 (1:6e43)
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call GetPartyMonName
|
||||
ld hl, $cd6d
|
||||
ld de, $d036
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
|
||||
DontAbandonLearning: ; 6e5b (1:6e5b)
|
||||
ld hl, W_PARTYMON1_MOVE1 ; $d173
|
||||
ld bc, $2c
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
call AddNTimes
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld b, $4
|
||||
.asm_6e6b
|
||||
ld a, [hl]
|
||||
and a
|
||||
jr z, .asm_6e8b
|
||||
inc hl
|
||||
dec b
|
||||
jr nz, .asm_6e6b
|
||||
push de
|
||||
call TryingToLearn
|
||||
pop de
|
||||
jp c, AbandonLearning
|
||||
push hl
|
||||
push de
|
||||
ld [$d11e], a
|
||||
call GetMoveName
|
||||
ld hl, OneTwoAndText
|
||||
call PrintText
|
||||
pop de
|
||||
pop hl
|
||||
.asm_6e8b
|
||||
ld a, [$d0e0]
|
||||
ld [hl], a
|
||||
ld bc, $15
|
||||
add hl, bc
|
||||
push hl
|
||||
push de
|
||||
dec a
|
||||
ld hl, Moves ; $4000
|
||||
ld bc, $6
|
||||
call AddNTimes
|
||||
ld de, $cee9
|
||||
ld a, BANK(Moves)
|
||||
call FarCopyData
|
||||
ld a, [$ceee]
|
||||
pop de
|
||||
pop hl
|
||||
ld [hl], a
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
and a
|
||||
jp z, PrintLearnedMove
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld b, a
|
||||
ld a, [wPlayerMonNumber] ; $cc2f
|
||||
cp b
|
||||
jp nz, PrintLearnedMove
|
||||
ld h, d
|
||||
ld l, e
|
||||
ld de, W_PLAYERMONMOVES
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
ld bc, $11
|
||||
add hl, bc
|
||||
ld de, W_PLAYERMONPP ; $d02d
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
jp PrintLearnedMove
|
||||
|
||||
AbandonLearning: ; 6eda (1:6eda)
|
||||
ld hl, AbandonLearningText
|
||||
call PrintText
|
||||
FuncCoord 14, 7 ; $c43a
|
||||
ld hl, Coord
|
||||
ld bc, $80f
|
||||
ld a, $14
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jp nz, DontAbandonLearning
|
||||
ld hl, DidNotLearnText
|
||||
call PrintText
|
||||
ld b, $0
|
||||
ret
|
||||
|
||||
PrintLearnedMove: ; 6efe (1:6efe)
|
||||
ld hl, LearnedMove1Text
|
||||
call PrintText
|
||||
ld b, $1
|
||||
ret
|
||||
|
||||
TryingToLearn: ; 6f07 (1:6f07)
|
||||
push hl
|
||||
ld hl, TryingToLearnText
|
||||
call PrintText
|
||||
FuncCoord 14, 7 ; $c43a
|
||||
ld hl, Coord
|
||||
ld bc, $80f
|
||||
ld a, $14
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
pop hl
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
rra
|
||||
ret c
|
||||
ld bc, $fffc
|
||||
add hl, bc
|
||||
push hl
|
||||
ld de, $d0dc
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
callab Func_39b87
|
||||
pop hl
|
||||
.asm_6f39
|
||||
push hl
|
||||
ld hl, WhichMoveToForgetText
|
||||
call PrintText
|
||||
FuncCoord 4, 7 ; $c430
|
||||
ld hl, Coord
|
||||
ld b, $4
|
||||
ld c, $e
|
||||
call TextBoxBorder
|
||||
FuncCoord 6, 8 ; $c446
|
||||
ld hl, Coord
|
||||
ld de, $d0e1
|
||||
ld a, [$fff6]
|
||||
set 2, a
|
||||
ld [$fff6], a
|
||||
call PlaceString
|
||||
ld a, [$fff6]
|
||||
res 2, a
|
||||
ld [$fff6], a
|
||||
ld hl, wTopMenuItemY ; $cc24
|
||||
ld a, $8
|
||||
ld [hli], a
|
||||
ld a, $5
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, [$cd6c]
|
||||
ld [hli], a
|
||||
ld a, $3
|
||||
ld [hli], a
|
||||
ld [hl], $0
|
||||
ld hl, $fff6
|
||||
set 1, [hl]
|
||||
call HandleMenuInput
|
||||
ld hl, $fff6
|
||||
res 1, [hl]
|
||||
push af
|
||||
call LoadScreenTilesFromBuffer1
|
||||
pop af
|
||||
pop hl
|
||||
bit 1, a
|
||||
jr nz, .asm_6fab
|
||||
push hl
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
push af
|
||||
push bc
|
||||
call IsMoveHM
|
||||
pop bc
|
||||
pop de
|
||||
ld a, d
|
||||
jr c, .asm_6fa2
|
||||
pop hl
|
||||
add hl, bc
|
||||
and a
|
||||
ret
|
||||
.asm_6fa2
|
||||
ld hl, HMCantDeleteText
|
||||
call PrintText
|
||||
pop hl
|
||||
jr .asm_6f39
|
||||
.asm_6fab
|
||||
scf
|
||||
ret
|
||||
|
||||
LearnedMove1Text: ; 6fb4 (1:6fb4)
|
||||
TX_FAR _LearnedMove1Text
|
||||
db $b,6,"@"
|
||||
|
||||
WhichMoveToForgetText: ; 6fb4 (1:6fb4)
|
||||
TX_FAR _WhichMoveToForgetText
|
||||
db "@"
|
||||
|
||||
AbandonLearningText: ; 6fb9 (1:6fb9)
|
||||
TX_FAR _AbandonLearningText
|
||||
db "@"
|
||||
|
||||
DidNotLearnText: ; 6fbe (1:6fbe)
|
||||
TX_FAR _DidNotLearnText
|
||||
db "@"
|
||||
|
||||
TryingToLearnText: ; 6fc3 (1:6fc3)
|
||||
TX_FAR _TryingToLearnText
|
||||
db "@"
|
||||
|
||||
OneTwoAndText: ; 6fc8 (1:6fc8)
|
||||
TX_FAR _OneTwoAndText
|
||||
db $a
|
||||
db $8
|
||||
ld a, (SFX_02_58 - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent
|
||||
ld hl, PoofText
|
||||
ret
|
||||
|
||||
PoofText: ; 6fd7 (1:6fd7)
|
||||
TX_FAR _PoofText
|
||||
db $a
|
||||
ForgotAndText: ; 6fdc (1:6fdc)
|
||||
TX_FAR _ForgotAndText
|
||||
db "@"
|
||||
|
||||
HMCantDeleteText: ; 6fe1 (1:6fe1)
|
||||
TX_FAR _HMCantDeleteText
|
||||
db "@"
|
11
engine/load_pokedex_tiles.asm
Executable file
11
engine/load_pokedex_tiles.asm
Executable file
|
@ -0,0 +1,11 @@
|
|||
; Loads tile patterns for tiles used in the pokedex.
|
||||
LoadPokedexTilePatterns: ; 17840 (5:7840)
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
ld de,PokedexTileGraphics ; $6488
|
||||
ld hl,$9600
|
||||
ld bc,(BANK(PokedexTileGraphics) << 8) + $12
|
||||
call CopyVideoData
|
||||
ld de,PokeballTileGraphics ; $697e
|
||||
ld hl,$9720
|
||||
ld bc,(BANK(PokeballTileGraphics) << 8) + $01
|
||||
jp CopyVideoData ; load pokeball tile for marking caught mons
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
Func_213c8:: ; 213c8 (8:53c8)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
109
engine/menu/diploma.asm
Executable file
109
engine/menu/diploma.asm
Executable file
|
@ -0,0 +1,109 @@
|
|||
DisplayDiploma: ; 566e2 (15:66e2)
|
||||
call SaveScreenTilesToBuffer2
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
xor a
|
||||
ld [$cfcb], a
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
call DisableLCD
|
||||
ld hl, CircleTile ; $7d88
|
||||
ld de, $9700
|
||||
ld bc, $0010
|
||||
ld a, BANK(CircleTile)
|
||||
call FarCopyData2
|
||||
ld hl, wTileMap
|
||||
ld bc, $1012
|
||||
ld a, $27
|
||||
call Predef
|
||||
ld hl, DiplomaTextPointersAndCoords ; $6784
|
||||
ld c, $5
|
||||
.asm_56715
|
||||
push bc
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
push hl
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call PlaceString
|
||||
pop hl
|
||||
inc hl
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_56715 ; 0x56725 $ee
|
||||
FuncCoord 10, 4 ; $c3fa
|
||||
ld hl, Coord
|
||||
ld de, W_PLAYERNAME
|
||||
call PlaceString
|
||||
callba Func_44dd
|
||||
ld hl, $c301
|
||||
ld bc, $8028
|
||||
.asm_5673e
|
||||
ld a, [hl]
|
||||
add $21
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
inc hl
|
||||
dec c
|
||||
jr nz, .asm_5673e ; 0x56747 $f5
|
||||
call EnableLCD
|
||||
callba LoadTrainerInfoTextBoxTiles
|
||||
ld b, $8
|
||||
call GoPAL_SET
|
||||
call Delay3
|
||||
call GBPalNormal
|
||||
ld a, $90
|
||||
ld [$ff48], a
|
||||
call WaitForTextScrollButtonPress
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call Func_3dbe
|
||||
call Delay3
|
||||
jp GBPalNormal
|
||||
|
||||
Func_56777: ; 56777 (15:6777)
|
||||
ld hl, W_PLAYERNAME
|
||||
ld bc, $ff00
|
||||
.asm_5677d
|
||||
ld a, [hli]
|
||||
cp $50
|
||||
ret z
|
||||
dec c
|
||||
jr .asm_5677d ; 0x56782 $f9
|
||||
|
||||
DiplomaTextPointersAndCoords: ; 56784 (15:6784)
|
||||
dw DiplomaText
|
||||
dw $c3cd
|
||||
dw DiplomaPlayer
|
||||
dw $c3f3
|
||||
dw DiplomaEmptyText
|
||||
dw $c3ff
|
||||
dw DiplomaCongrats
|
||||
dw $c41a
|
||||
dw DiplomaGameFreak
|
||||
dw $c4e9
|
||||
|
||||
DiplomaText:
|
||||
db $70,"Diploma",$70,"@"
|
||||
|
||||
DiplomaPlayer:
|
||||
db "Player@"
|
||||
|
||||
DiplomaEmptyText:
|
||||
db "@"
|
||||
|
||||
DiplomaCongrats:
|
||||
db "Congrats! This"
|
||||
next "diploma certifies"
|
||||
next "that you have"
|
||||
next "completed your"
|
||||
next "#DEX.@"
|
||||
|
||||
DiplomaGameFreak:
|
||||
db "GAME FREAK@"
|
124
engine/menu/league_pc.asm
Executable file
124
engine/menu/league_pc.asm
Executable file
|
@ -0,0 +1,124 @@
|
|||
PKMNLeaguePC: ; 0x7657e
|
||||
ld hl, AccessedHoFPCText
|
||||
call PrintText
|
||||
ld hl, $D730
|
||||
set 6, [hl]
|
||||
push hl
|
||||
ld a, [$CFCB]
|
||||
push af
|
||||
ld a, [$ffD7]
|
||||
push af
|
||||
xor a
|
||||
ld [$ffD7], a
|
||||
ld [W_SPRITEFLIPPED], a
|
||||
ld [$CFCB], a
|
||||
ld [$CD41], a
|
||||
ld [$CD42], a
|
||||
ld a, [$D5A2]
|
||||
ld b, a
|
||||
cp a, $33
|
||||
jr c, .first
|
||||
ld b, $32
|
||||
sub b
|
||||
ld [$CD42], a
|
||||
.first
|
||||
ld hl, $CD42
|
||||
inc [hl]
|
||||
push bc
|
||||
ld a, [$CD41]
|
||||
ld [$CD3D], a
|
||||
callba Func_73b3f
|
||||
call Func_765e5
|
||||
pop bc
|
||||
jr c, .second
|
||||
ld hl, $CD41
|
||||
inc [hl]
|
||||
ld a, [hl]
|
||||
cp b
|
||||
jr nz, .first
|
||||
.second
|
||||
pop af
|
||||
ld [$ffD7], a
|
||||
pop af
|
||||
ld [$CFCB], a
|
||||
pop hl
|
||||
res 6, [hl]
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
call GoPAL_SET_CF1C
|
||||
jp GBPalNormal
|
||||
|
||||
Func_765e5: ; 765e5 (1d:65e5)
|
||||
ld c, 6
|
||||
.third
|
||||
push bc
|
||||
call Func_76610
|
||||
call WaitForTextScrollButtonPress
|
||||
ld a, [H_CURRENTPRESSEDBUTTONS]
|
||||
bit 1, a
|
||||
jr nz, .fifth
|
||||
ld hl, $CC6B
|
||||
ld de, $CC5B
|
||||
ld bc, $0050
|
||||
call CopyData
|
||||
pop bc
|
||||
ld a, [$CC5B]
|
||||
cp a, $FF
|
||||
jr z, .fourth
|
||||
dec c
|
||||
jr nz, .third
|
||||
.fourth
|
||||
and a
|
||||
ret
|
||||
.fifth
|
||||
pop bc
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_76610: ; 76610 (1d:6610)
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
ld hl, $CC5B
|
||||
ld a, [hli]
|
||||
ld [$CD3D], a
|
||||
ld [$CF91], a
|
||||
ld [$D0B5], a
|
||||
ld [$CFD9], a
|
||||
ld [$CF1D], a
|
||||
ld a, [hli]
|
||||
ld [$CD3F], a
|
||||
ld de, $CD6D
|
||||
ld bc, $000B
|
||||
call CopyData
|
||||
ld b, $0B
|
||||
ld c, 0
|
||||
call GoPAL_SET
|
||||
FuncCoord 12, 5 ; $c410
|
||||
ld hl, Coord
|
||||
call GetMonHeader
|
||||
call LoadFrontSpriteByMonIndex
|
||||
call GBPalNormal
|
||||
FuncCoord 0, 13 ; $c4a4
|
||||
ld hl, Coord
|
||||
ld b, 2
|
||||
ld c, $12
|
||||
call TextBoxBorder
|
||||
FuncCoord 1, 15 ; $c4cd
|
||||
ld hl, Coord
|
||||
ld de, HallOfFameNoText
|
||||
call PlaceString
|
||||
FuncCoord 16, 15 ; $c4dc
|
||||
ld hl, Coord
|
||||
ld de, $CD42
|
||||
ld bc, $0103
|
||||
call PrintNumber
|
||||
ld b, BANK(Func_702f0)
|
||||
ld hl, Func_702f0
|
||||
jp Bankswitch
|
||||
|
||||
HallOfFameNoText: ; 76670 (1d:6670)
|
||||
db "HALL OF FAME No @"
|
||||
|
||||
AccessedHoFPCText: ; 76683 (1d:6683)
|
||||
TX_FAR _AccessedHoFPCText
|
||||
db "@"
|
726
engine/menu/main_menu.asm
Executable file
726
engine/menu/main_menu.asm
Executable file
|
@ -0,0 +1,726 @@
|
|||
MainMenu: ; 5af2 (1:5af2)
|
||||
; Check save file
|
||||
call Func_5bff
|
||||
xor a
|
||||
ld [$D08A],a
|
||||
inc a
|
||||
ld [$D088],a
|
||||
call Func_609e
|
||||
jr nc,.next0
|
||||
|
||||
; Predef 52 loads the save from SRAM to RAM
|
||||
ld a,$52
|
||||
call Predef
|
||||
|
||||
.next0
|
||||
ld c,20
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [$D12B],a
|
||||
ld hl,$CC2B
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
ld [hl],a
|
||||
ld [$D07C],a
|
||||
ld hl,$D72E
|
||||
res 6,[hl]
|
||||
call ClearScreen
|
||||
call GoPAL_SET_CF1C
|
||||
call LoadTextBoxTilePatterns
|
||||
call LoadFontTilePatterns
|
||||
ld hl,$D730
|
||||
set 6,[hl]
|
||||
ld a,[$D088]
|
||||
cp a,1
|
||||
jr z,.next1
|
||||
FuncCoord 0,0
|
||||
ld hl,Coord
|
||||
ld b,6
|
||||
ld c,13
|
||||
call TextBoxBorder
|
||||
FuncCoord 2,2
|
||||
ld hl,Coord
|
||||
ld de,ContinueText
|
||||
call PlaceString
|
||||
jr .next2
|
||||
.next1
|
||||
FuncCoord 0,0
|
||||
ld hl,Coord
|
||||
ld b,4
|
||||
ld c,13
|
||||
call TextBoxBorder
|
||||
FuncCoord 2,2
|
||||
ld hl,Coord
|
||||
ld de,NewGameText
|
||||
call PlaceString
|
||||
.next2
|
||||
ld hl,$D730
|
||||
res 6,[hl]
|
||||
call UpdateSprites ; OAM?
|
||||
xor a
|
||||
ld [$CC26],a
|
||||
ld [$CC2A],a
|
||||
ld [$CC34],a
|
||||
inc a
|
||||
ld [$CC25],a
|
||||
inc a
|
||||
ld [$CC24],a
|
||||
ld a,$B
|
||||
ld [$CC29],a
|
||||
ld a,[$D088]
|
||||
ld [$CC28],a
|
||||
call HandleMenuInput
|
||||
bit 1,a
|
||||
jp nz,LoadTitlescreenGraphics ; load title screen (gfx and arrangement)
|
||||
ld c,20
|
||||
call DelayFrames
|
||||
ld a,[$CC26]
|
||||
ld b,a
|
||||
ld a,[$D088]
|
||||
cp a,2
|
||||
jp z,.next3
|
||||
inc b ; adjust MenuArrow_Counter
|
||||
.next3
|
||||
ld a,b
|
||||
and a
|
||||
jr z,.next4 ; if press_A on Continue
|
||||
cp a,1
|
||||
jp z,Func_5d52 ; if press_A on NewGame
|
||||
call DisplayOptionMenu ; if press_a on Options
|
||||
ld a,1
|
||||
ld [$D08A],a
|
||||
jp .next0
|
||||
.next4
|
||||
call ContinueGame
|
||||
ld hl,$D126
|
||||
set 5,[hl]
|
||||
.next6
|
||||
xor a
|
||||
ld [H_NEWLYPRESSEDBUTTONS],a
|
||||
ld [H_NEWLYRELEASEDBUTTONS],a
|
||||
ld [H_CURRENTPRESSEDBUTTONS],a
|
||||
call GetJoypadState
|
||||
ld a,[H_CURRENTPRESSEDBUTTONS]
|
||||
bit 0,a
|
||||
jr nz,.next5
|
||||
bit 1,a
|
||||
jp nz,.next0
|
||||
jr .next6
|
||||
.next5
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
ld a,4
|
||||
ld [$D52A],a
|
||||
ld c,10
|
||||
call DelayFrames
|
||||
ld a,[$D5A2]
|
||||
and a
|
||||
jp z,Func_5d5f
|
||||
ld a,[W_CURMAP] ; map ID
|
||||
cp a,HALL_OF_FAME
|
||||
jp nz,Func_5d5f
|
||||
xor a
|
||||
ld [$D71A],a
|
||||
ld hl,$D732
|
||||
set 2,[hl]
|
||||
call Func_62ce
|
||||
jp Func_5d5f
|
||||
Func_5bff: ; 5bff (1:5bff)
|
||||
ld a,1
|
||||
ld [$D358],a
|
||||
ld a,3
|
||||
ld [$D355],a
|
||||
ret
|
||||
|
||||
LinkMenu: ; 5c0a (1:5c0a)
|
||||
xor a
|
||||
ld [$d358], a
|
||||
ld hl, $d72e
|
||||
set 6, [hl]
|
||||
ld hl, TextTerminator_6b20 ; $6b20
|
||||
call PrintText
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld hl, WhereWouldYouLikeText
|
||||
call PrintText
|
||||
FuncCoord 5, 5 ; $c409
|
||||
ld hl, Coord
|
||||
ld b, $6
|
||||
ld c, $d
|
||||
call TextBoxBorder
|
||||
call UpdateSprites
|
||||
FuncCoord 7, 7 ; $c433
|
||||
ld hl, Coord
|
||||
ld de, TradeCenterText
|
||||
call PlaceString
|
||||
xor a
|
||||
ld [$cd37], a
|
||||
ld [$d72d], a
|
||||
ld hl, wTopMenuItemY ; $cc24
|
||||
ld a, $7
|
||||
ld [hli], a
|
||||
ld a, $6
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, $2
|
||||
ld [hli], a
|
||||
inc a
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hl], a
|
||||
.asm_5c52
|
||||
call HandleMenuInput
|
||||
and $3
|
||||
add a
|
||||
add a
|
||||
ld b, a
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
add b
|
||||
add $d0
|
||||
ld [$cc42], a
|
||||
ld [$cc43], a
|
||||
.asm_5c66
|
||||
call Func_2247
|
||||
ld a, [$cc3d]
|
||||
ld b, a
|
||||
and $f0
|
||||
cp $d0
|
||||
jr z, .asm_5c7d
|
||||
ld a, [$cc3e]
|
||||
ld b, a
|
||||
and $f0
|
||||
cp $d0
|
||||
jr nz, .asm_5c66
|
||||
.asm_5c7d
|
||||
ld a, b
|
||||
and $c
|
||||
jr nz, .asm_5c8b
|
||||
ld a, [$cc42]
|
||||
and $c
|
||||
jr z, .asm_5c52
|
||||
jr .asm_5ca1
|
||||
.asm_5c8b
|
||||
ld a, [$cc42]
|
||||
and $c
|
||||
jr z, .asm_5c98
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
jr z, .asm_5ca1
|
||||
.asm_5c98
|
||||
ld a, b
|
||||
ld [$cc42], a
|
||||
and $3
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
.asm_5ca1
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
jr nz, .asm_5cb1
|
||||
call DelayFrame
|
||||
call DelayFrame
|
||||
ld a, $81
|
||||
ld [$ff02], a
|
||||
.asm_5cb1
|
||||
ld b, $7f
|
||||
ld c, $7f
|
||||
ld d, $ec
|
||||
ld a, [$cc42]
|
||||
and $8
|
||||
jr nz, .asm_5ccc
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $2
|
||||
jr z, .asm_5ccc
|
||||
ld c, d
|
||||
ld d, b
|
||||
dec a
|
||||
jr z, .asm_5ccc
|
||||
ld b, c
|
||||
ld c, d
|
||||
.asm_5ccc
|
||||
ld a, b
|
||||
FuncCoord 6, 7 ; $c432
|
||||
ld [Coord], a
|
||||
ld a, c
|
||||
FuncCoord 6, 9 ; $c45a
|
||||
ld [Coord], a
|
||||
ld a, d
|
||||
FuncCoord 6, 11 ; $c482
|
||||
ld [Coord], a
|
||||
ld c, $28
|
||||
call DelayFrames
|
||||
call LoadScreenTilesFromBuffer1
|
||||
ld a, [$cc42]
|
||||
and $8
|
||||
jr nz, .asm_5d2d
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $2
|
||||
jr z, .asm_5d2d
|
||||
xor a
|
||||
ld [$d700], a
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
ld a, TRADE_CENTER
|
||||
jr nz, .asm_5cfc
|
||||
ld a, BATTLE_CENTER
|
||||
.asm_5cfc
|
||||
ld [$d72d], a
|
||||
ld hl, PleaseWaitText
|
||||
call PrintText
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, $d732
|
||||
res 1, [hl]
|
||||
ld a, [W_ANIMATIONID] ; $d07c
|
||||
ld [$d71a], a
|
||||
call Func_62ce
|
||||
ld c, $14
|
||||
call DelayFrames
|
||||
xor a
|
||||
ld [wMenuJoypadPollCount], a ; $cc34
|
||||
ld [$cc42], a
|
||||
inc a
|
||||
ld [W_ISLINKBATTLE], a ; $d12b
|
||||
ld [$cc47], a
|
||||
jr Func_5d5f
|
||||
.asm_5d2d
|
||||
xor a
|
||||
ld [wMenuJoypadPollCount], a ; $cc34
|
||||
call Delay3
|
||||
call Func_72d7
|
||||
ld hl, LinkCanceledText
|
||||
call PrintText
|
||||
ld hl, $d72e
|
||||
res 6, [hl]
|
||||
ret
|
||||
|
||||
WhereWouldYouLikeText: ; 5d43 (1:5d43)
|
||||
TX_FAR _WhereWouldYouLikeText
|
||||
db "@"
|
||||
|
||||
PleaseWaitText: ; 5d48 (1:5d48)
|
||||
TX_FAR _PleaseWaitText
|
||||
db "@"
|
||||
|
||||
LinkCanceledText: ; 5d4d (1:5d4d)
|
||||
TX_FAR _LinkCanceledText
|
||||
db "@"
|
||||
|
||||
Func_5d52: ; 5d52 (1:5d52)
|
||||
ld hl, $d732
|
||||
res 1, [hl]
|
||||
call OakSpeech
|
||||
ld c, $14
|
||||
call DelayFrames
|
||||
|
||||
Func_5d5f: ; 5d5f (1:5d5f)
|
||||
xor a
|
||||
ld [H_NEWLYPRESSEDBUTTONS], a
|
||||
ld [H_CURRENTPRESSEDBUTTONS], a
|
||||
ld [$ffb5], a
|
||||
ld [$d72d], a
|
||||
ld hl, $d732
|
||||
set 0, [hl]
|
||||
call ResetPlayerSpriteData
|
||||
ld c, $14
|
||||
call DelayFrames
|
||||
ld a, [$cc47]
|
||||
and a
|
||||
ret nz
|
||||
jp EnterMap
|
||||
|
||||
ContinueText: ; 5d7e (1:5d7e)
|
||||
db "CONTINUE", $4e
|
||||
|
||||
NewGameText: ; 5d87 (1:5d87)
|
||||
db "NEW GAME", $4e
|
||||
db "OPTION@"
|
||||
|
||||
TradeCenterText: ; 5d97 (1:5d97)
|
||||
db "TRADE CENTER", $4e
|
||||
db "COLOSSEUM", $4e
|
||||
db "CANCEL@"
|
||||
|
||||
ContinueGame: ; 5db5 (1:5db5)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
FuncCoord 4, 7 ; $c430
|
||||
ld hl, Coord
|
||||
ld b, $8
|
||||
ld c, $e
|
||||
call TextBoxBorder
|
||||
FuncCoord 5, 9 ; $c459
|
||||
ld hl, Coord
|
||||
ld de, SaveScreenInfoText
|
||||
call PlaceString
|
||||
FuncCoord 12, 9 ; $c460
|
||||
ld hl, Coord
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
call PlaceString
|
||||
FuncCoord 17, 11 ; $c48d
|
||||
ld hl, Coord
|
||||
call Func_5e2f
|
||||
FuncCoord 16, 13 ; $c4b4
|
||||
ld hl, Coord
|
||||
call Func_5e42
|
||||
FuncCoord 13, 15 ; $c4d9
|
||||
ld hl, Coord
|
||||
call Func_5e55
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld c, $1e
|
||||
jp DelayFrames
|
||||
|
||||
PrintSaveScreenText: ; 5def (1:5def)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a
|
||||
ld hl, $c3a4
|
||||
ld b, $8
|
||||
ld c, $e
|
||||
call TextBoxBorder
|
||||
call LoadTextBoxTilePatterns
|
||||
call UpdateSprites
|
||||
ld hl, $c3cd
|
||||
ld de, SaveScreenInfoText
|
||||
call PlaceString
|
||||
ld hl, $c3d4
|
||||
ld de, W_PLAYERNAME
|
||||
call PlaceString
|
||||
ld hl, $c401
|
||||
call Func_5e2f
|
||||
ld hl, $c428
|
||||
call Func_5e42
|
||||
ld hl, $c44d
|
||||
call Func_5e55
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a
|
||||
ld c, $1e
|
||||
jp DelayFrames
|
||||
|
||||
Func_5e2f: ; 5e2f (1:5e2f)
|
||||
push hl
|
||||
ld hl, W_OBTAINEDBADGES
|
||||
ld b, $1
|
||||
call CountSetBits
|
||||
pop hl
|
||||
ld de, $d11e
|
||||
ld bc, $102
|
||||
jp PrintNumber
|
||||
|
||||
Func_5e42: ; 5e42 (1:5e42)
|
||||
push hl
|
||||
ld hl, wPokedexOwned ; $d2f7
|
||||
ld b, wPokedexOwnedEnd - wPokedexOwned
|
||||
call CountSetBits
|
||||
pop hl
|
||||
ld de, $d11e
|
||||
ld bc, $103
|
||||
jp PrintNumber
|
||||
|
||||
Func_5e55: ; 5e55 (1:5e55)
|
||||
ld de, $da41
|
||||
ld bc, $103
|
||||
call PrintNumber
|
||||
ld [hl], $6d
|
||||
inc hl
|
||||
ld de, $da43
|
||||
ld bc, $8102
|
||||
jp PrintNumber
|
||||
|
||||
SaveScreenInfoText: ; 5e6a (1:5e6a)
|
||||
db "PLAYER"
|
||||
next "BADGES "
|
||||
next "#DEX "
|
||||
next "TIME@"
|
||||
|
||||
DisplayOptionMenu: ; 5e8a (1:5e8a)
|
||||
FuncCoord 0,0
|
||||
ld hl,Coord
|
||||
ld b,3
|
||||
ld c,18
|
||||
call TextBoxBorder
|
||||
FuncCoord 0,5
|
||||
ld hl,Coord
|
||||
ld b,3
|
||||
ld c,18
|
||||
call TextBoxBorder
|
||||
FuncCoord 0,10
|
||||
ld hl,Coord
|
||||
ld b,3
|
||||
ld c,18
|
||||
call TextBoxBorder
|
||||
FuncCoord 1,1
|
||||
ld hl,Coord
|
||||
ld de,TextSpeedOptionText
|
||||
call PlaceString
|
||||
FuncCoord 1,6
|
||||
ld hl,Coord
|
||||
ld de,BattleAnimationOptionText
|
||||
call PlaceString
|
||||
FuncCoord 1,11
|
||||
ld hl,Coord
|
||||
ld de,BattleStyleOptionText
|
||||
call PlaceString
|
||||
FuncCoord 2,16
|
||||
ld hl,Coord
|
||||
ld de,OptionMenuCancelText
|
||||
call PlaceString
|
||||
xor a
|
||||
ld [wCurrentMenuItem],a
|
||||
ld [wLastMenuItem],a
|
||||
inc a
|
||||
ld [$d358],a
|
||||
ld [$cd40],a
|
||||
ld a,3 ; text speed cursor Y coordinate
|
||||
ld [wTopMenuItemY],a
|
||||
call SetCursorPositionsFromOptions
|
||||
ld a,[$cd3d] ; text speed cursor X coordinate
|
||||
ld [wTopMenuItemX],a
|
||||
ld a,$01
|
||||
ld [H_AUTOBGTRANSFERENABLED],a ; enable auto background transfer
|
||||
call Delay3
|
||||
.loop
|
||||
call PlaceMenuCursor
|
||||
call SetOptionsFromCursorPositions
|
||||
.getJoypadStateLoop
|
||||
call GetJoypadStateLowSensitivity
|
||||
ld a,[$ffb5]
|
||||
ld b,a
|
||||
and a,%11111011 ; any key besides select pressed?
|
||||
jr z,.getJoypadStateLoop
|
||||
bit 1,b ; B button pressed?
|
||||
jr nz,.exitMenu
|
||||
bit 3,b ; Start button pressed?
|
||||
jr nz,.exitMenu
|
||||
bit 0,b ; A button pressed?
|
||||
jr z,.checkDirectionKeys
|
||||
ld a,[wTopMenuItemY]
|
||||
cp a,16 ; is the cursor on Cancel?
|
||||
jr nz,.loop
|
||||
.exitMenu
|
||||
ld a,(SFX_02_40 - SFX_Headers_02) / 3
|
||||
call PlaySound ; play sound
|
||||
ret
|
||||
.eraseOldMenuCursor
|
||||
ld [wTopMenuItemX],a
|
||||
call EraseMenuCursor
|
||||
jp .loop
|
||||
.checkDirectionKeys
|
||||
ld a,[wTopMenuItemY]
|
||||
bit 7,b ; Down pressed?
|
||||
jr nz,.downPressed
|
||||
bit 6,b ; Up pressed?
|
||||
jr nz,.upPressed
|
||||
cp a,8 ; cursor in Battle Animation section?
|
||||
jr z,.cursorInBattleAnimation
|
||||
cp a,13 ; cursor in Battle Style section?
|
||||
jr z,.cursorInBattleStyle
|
||||
cp a,16 ; cursor on Cancel?
|
||||
jr z,.loop
|
||||
.cursorInTextSpeed
|
||||
bit 5,b ; Left pressed?
|
||||
jp nz,.pressedLeftInTextSpeed
|
||||
jp .pressedRightInTextSpeed
|
||||
.downPressed
|
||||
cp a,16
|
||||
ld b,-13
|
||||
ld hl,$cd3d
|
||||
jr z,.updateMenuVariables
|
||||
ld b,5
|
||||
cp a,3
|
||||
inc hl
|
||||
jr z,.updateMenuVariables
|
||||
cp a,8
|
||||
inc hl
|
||||
jr z,.updateMenuVariables
|
||||
ld b,3
|
||||
inc hl
|
||||
jr .updateMenuVariables
|
||||
.upPressed
|
||||
cp a,8
|
||||
ld b,-5
|
||||
ld hl,$cd3d
|
||||
jr z,.updateMenuVariables
|
||||
cp a,13
|
||||
inc hl
|
||||
jr z,.updateMenuVariables
|
||||
cp a,16
|
||||
ld b,-3
|
||||
inc hl
|
||||
jr z,.updateMenuVariables
|
||||
ld b,13
|
||||
inc hl
|
||||
.updateMenuVariables
|
||||
add b
|
||||
ld [wTopMenuItemY],a
|
||||
ld a,[hl]
|
||||
ld [wTopMenuItemX],a
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
jp .loop
|
||||
.cursorInBattleAnimation
|
||||
ld a,[$cd3e] ; battle animation cursor X coordinate
|
||||
xor a,$0b ; toggle between 1 and 10
|
||||
ld [$cd3e],a
|
||||
jp .eraseOldMenuCursor
|
||||
.cursorInBattleStyle
|
||||
ld a,[$cd3f] ; battle style cursor X coordinate
|
||||
xor a,$0b ; toggle between 1 and 10
|
||||
ld [$cd3f],a
|
||||
jp .eraseOldMenuCursor
|
||||
.pressedLeftInTextSpeed
|
||||
ld a,[$cd3d] ; text speed cursor X coordinate
|
||||
cp a,1
|
||||
jr z,.updateTextSpeedXCoord
|
||||
cp a,7
|
||||
jr nz,.fromSlowToMedium
|
||||
sub a,6
|
||||
jr .updateTextSpeedXCoord
|
||||
.fromSlowToMedium
|
||||
sub a,7
|
||||
jr .updateTextSpeedXCoord
|
||||
.pressedRightInTextSpeed
|
||||
ld a,[$cd3d] ; text speed cursor X coordinate
|
||||
cp a,14
|
||||
jr z,.updateTextSpeedXCoord
|
||||
cp a,7
|
||||
jr nz,.fromFastToMedium
|
||||
add a,7
|
||||
jr .updateTextSpeedXCoord
|
||||
.fromFastToMedium
|
||||
add a,6
|
||||
.updateTextSpeedXCoord
|
||||
ld [$cd3d],a ; text speed cursor X coordinate
|
||||
jp .eraseOldMenuCursor
|
||||
|
||||
TextSpeedOptionText: ; 5fc0 (1:5fc0)
|
||||
db "TEXT SPEED"
|
||||
next " FAST MEDIUM SLOW@"
|
||||
|
||||
BattleAnimationOptionText: ; 5fde (1:5fde)
|
||||
db "BATTLE ANIMATION"
|
||||
next " ON OFF@"
|
||||
|
||||
BattleStyleOptionText: ; 5ffd (1:5ffd)
|
||||
db "BATTLE STYLE"
|
||||
next " SHIFT SET@"
|
||||
|
||||
OptionMenuCancelText: ; 6018 (1:6018)
|
||||
db "CANCEL@"
|
||||
|
||||
; sets the options variable according to the current placement of the menu cursors in the options menu
|
||||
SetOptionsFromCursorPositions: ; 601f (1:601f)
|
||||
ld hl,TextSpeedOptionData
|
||||
ld a,[$cd3d] ; text speed cursor X coordinate
|
||||
ld c,a
|
||||
.loop
|
||||
ld a,[hli]
|
||||
cp c
|
||||
jr z,.textSpeedMatchFound
|
||||
inc hl
|
||||
jr .loop
|
||||
.textSpeedMatchFound
|
||||
ld a,[hl]
|
||||
ld d,a
|
||||
ld a,[$cd3e] ; battle animation cursor X coordinate
|
||||
dec a
|
||||
jr z,.battleAnimationOn
|
||||
.battleAnimationOff
|
||||
set 7,d
|
||||
jr .checkBattleStyle
|
||||
.battleAnimationOn
|
||||
res 7,d
|
||||
.checkBattleStyle
|
||||
ld a,[$cd3f] ; battle style cursor X coordinate
|
||||
dec a
|
||||
jr z,.battleStyleShift
|
||||
.battleStyleSet
|
||||
set 6,d
|
||||
jr .storeOptions
|
||||
.battleStyleShift
|
||||
res 6,d
|
||||
.storeOptions
|
||||
ld a,d
|
||||
ld [W_OPTIONS],a
|
||||
ret
|
||||
|
||||
; reads the options variable and places menu cursors in the correct positions within the options menu
|
||||
SetCursorPositionsFromOptions: ; 604c (1:604c)
|
||||
ld hl,TextSpeedOptionData + 1
|
||||
ld a,[W_OPTIONS]
|
||||
ld c,a
|
||||
and a,$3f
|
||||
push bc
|
||||
ld de,2
|
||||
call IsInArray
|
||||
pop bc
|
||||
dec hl
|
||||
ld a,[hl]
|
||||
ld [$cd3d],a ; text speed cursor X coordinate
|
||||
FuncCoord 0,3
|
||||
ld hl,Coord
|
||||
call .placeUnfilledRightArrow
|
||||
sla c
|
||||
ld a,1 ; On
|
||||
jr nc,.storeBattleAnimationCursorX
|
||||
ld a,10 ; Off
|
||||
.storeBattleAnimationCursorX
|
||||
ld [$cd3e],a ; battle animation cursor X coordinate
|
||||
FuncCoord 0,8
|
||||
ld hl,Coord
|
||||
call .placeUnfilledRightArrow
|
||||
sla c
|
||||
ld a,1
|
||||
jr nc,.storeBattleStyleCursorX
|
||||
ld a,10
|
||||
.storeBattleStyleCursorX
|
||||
ld [$cd3f],a ; battle style cursor X coordinate
|
||||
FuncCoord 0,13
|
||||
ld hl,Coord
|
||||
call .placeUnfilledRightArrow
|
||||
; cursor in front of Cancel
|
||||
FuncCoord 0,16
|
||||
ld hl,Coord
|
||||
ld a,1
|
||||
.placeUnfilledRightArrow
|
||||
ld e,a
|
||||
ld d,0
|
||||
add hl,de
|
||||
ld [hl],$ec ; unfilled right arrow menu cursor
|
||||
ret
|
||||
|
||||
; table that indicates how the 3 text speed options affect frame delays
|
||||
; Format:
|
||||
; 00: X coordinate of menu cursor
|
||||
; 01: delay after printing a letter (in frames)
|
||||
TextSpeedOptionData: ; 6096 (1:6096)
|
||||
db 14,5 ; Slow
|
||||
db 7,3 ; Medium
|
||||
db 1,1 ; Fast
|
||||
db 7 ; default X coordinate (Medium)
|
||||
db $ff ; terminator
|
||||
|
||||
Func_609e: ; 609e (1:609e)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld b, $b
|
||||
ld hl, $a598
|
||||
.asm_60b0
|
||||
ld a, [hli]
|
||||
cp $50
|
||||
jr z, .asm_60c1
|
||||
dec b
|
||||
jr nz, .asm_60b0
|
||||
xor a
|
||||
ld [$0], a
|
||||
ld [$6000], a
|
||||
and a
|
||||
ret
|
||||
.asm_60c1
|
||||
xor a
|
||||
ld [$0], a
|
||||
ld [$6000], a
|
||||
scf
|
||||
ret
|
515
engine/menu/naming_screen.asm
Executable file
515
engine/menu/naming_screen.asm
Executable file
|
@ -0,0 +1,515 @@
|
|||
AskForMonNickname: ; 64eb (1:64eb)
|
||||
call SaveScreenTilesToBuffer1
|
||||
call Load16BitRegisters
|
||||
push hl
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
dec a
|
||||
ld hl, wTileMap
|
||||
ld b, $4
|
||||
ld c, $b
|
||||
call z, ClearScreenArea ; only if in wild batle
|
||||
ld a, [$cf91]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
ld hl, DoYouWantToNicknameText
|
||||
call PrintText
|
||||
FuncCoord 14, 7 ; $c43a
|
||||
ld hl, Coord
|
||||
ld bc, $80f
|
||||
ld a, $14
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
pop hl
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jr nz, .asm_654c
|
||||
ld a, [$cfcb]
|
||||
push af
|
||||
xor a
|
||||
ld [$cfcb], a
|
||||
push hl
|
||||
ld a, $2
|
||||
ld [$d07d], a
|
||||
call DisplayNamingScreen
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
and a
|
||||
jr nz, .asm_653e
|
||||
call Func_3e08
|
||||
.asm_653e
|
||||
call LoadScreenTilesFromBuffer1
|
||||
pop hl
|
||||
pop af
|
||||
ld [$cfcb], a
|
||||
ld a, [$cf4b]
|
||||
cp $50
|
||||
ret nz
|
||||
.asm_654c
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, $cd6d
|
||||
ld bc, $000b
|
||||
jp CopyData
|
||||
|
||||
DoYouWantToNicknameText: ; 0x6557
|
||||
TX_FAR _DoYouWantToNicknameText
|
||||
db "@"
|
||||
|
||||
Func_655c: ; 655c (1:655c)
|
||||
ld hl, $cee9
|
||||
xor a
|
||||
ld [$cfcb], a
|
||||
ld a, $2
|
||||
ld [$d07d], a
|
||||
call DisplayNamingScreen
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call Func_3dbe
|
||||
call LoadGBPal
|
||||
ld a, [$cf4b]
|
||||
cp $50
|
||||
jr z, .asm_6594
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
ld bc, $b
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
call AddNTimes
|
||||
ld e, l
|
||||
ld d, h
|
||||
ld hl, $cee9
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
and a
|
||||
ret
|
||||
.asm_6594
|
||||
scf
|
||||
ret
|
||||
|
||||
DisplayNamingScreen: ; 6596 (1:6596)
|
||||
push hl
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
ld b, $8
|
||||
call GoPAL_SET
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
call LoadEDTile
|
||||
callba Func_7176c
|
||||
FuncCoord 0, 4 ; $c3f0
|
||||
ld hl, Coord
|
||||
ld b, $9
|
||||
ld c, $12
|
||||
call TextBoxBorder
|
||||
call PrintNamingText
|
||||
ld a, $3
|
||||
ld [wTopMenuItemY], a ; $cc24
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
ld [wLastMenuItem], a ; $cc2a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld a, $ff
|
||||
ld [wMenuWatchedKeys], a ; $cc29
|
||||
ld a, $7
|
||||
ld [wMaxMenuItem], a ; $cc28
|
||||
ld a, $50
|
||||
ld [$cf4b], a
|
||||
xor a
|
||||
ld hl, $ceea
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [W_SUBANIMTRANSFORM], a ; $d08b
|
||||
.asm_65ed
|
||||
call PrintAlphabet
|
||||
call GBPalNormal
|
||||
.asm_65f3
|
||||
ld a, [$ceea]
|
||||
and a
|
||||
jr nz, .asm_662d
|
||||
call Func_680e
|
||||
.asm_65fc
|
||||
call PlaceMenuCursor
|
||||
.asm_65ff
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
push af
|
||||
callba AnimatePartyMon_ForceSpeed1
|
||||
pop af
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
call GetJoypadStateLowSensitivity
|
||||
ld a, [H_NEWLYPRESSEDBUTTONS]
|
||||
and a
|
||||
jr z, .asm_65ff
|
||||
ld hl, .unknownPointerTable_665e ; $665e
|
||||
.asm_661a
|
||||
sla a
|
||||
jr c, .asm_6624
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
jr .asm_661a
|
||||
.asm_6624
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push de
|
||||
jp [hl]
|
||||
.asm_662d
|
||||
pop de
|
||||
ld hl, $cf4b
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
call CleanLCD_OAM
|
||||
call GoPAL_SET_CF1C
|
||||
call GBPalNormal
|
||||
xor a
|
||||
ld [W_SUBANIMTRANSFORM], a ; $d08b
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
ld a, [W_ISINBATTLE] ; $d057
|
||||
and a
|
||||
jp z, LoadTextBoxTilePatterns
|
||||
ld hl, Func_3ee5b
|
||||
ld b, BANK(Func_3ee5b)
|
||||
jp Bankswitch
|
||||
|
||||
.unknownPointerTable_665e: ; 665e (1:665e)
|
||||
dw .asm_65fc
|
||||
dw .asm_673e
|
||||
dw .asm_65fc
|
||||
dw .asm_672c
|
||||
dw .asm_65fc
|
||||
dw .asm_6718
|
||||
dw .asm_65fc
|
||||
dw .asm_6702
|
||||
dw .asm_65f3
|
||||
dw .asm_668c
|
||||
dw .asm_65ed
|
||||
dw .asm_6683
|
||||
dw .asm_65f3
|
||||
dw .deleteLetter
|
||||
dw .asm_65f3
|
||||
dw .asm_6692
|
||||
|
||||
.asm_667e
|
||||
pop de
|
||||
ld de, .asm_65ed ; $65ed
|
||||
push de
|
||||
.asm_6683
|
||||
ld a, [$ceeb]
|
||||
xor $1
|
||||
ld [$ceeb], a
|
||||
ret
|
||||
.asm_668c
|
||||
ld a, $1
|
||||
ld [$ceea], a
|
||||
ret
|
||||
.asm_6692
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $5
|
||||
jr nz, .asm_66a0
|
||||
ld a, [wTopMenuItemX] ; $cc25
|
||||
cp $11
|
||||
jr z, .asm_668c
|
||||
.asm_66a0
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $6
|
||||
jr nz, .asm_66ae
|
||||
ld a, [wTopMenuItemX] ; $cc25
|
||||
cp $1
|
||||
jr z, .asm_667e
|
||||
.asm_66ae
|
||||
ld hl, wMenuCursorLocation ; $cc30
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [$ceed], a
|
||||
call CalcStringLength
|
||||
ld a, [$ceed]
|
||||
cp $e5
|
||||
ld de, Dakutens ; $6885
|
||||
jr z, .asm_66e3
|
||||
cp $e4
|
||||
ld de, Handakutens ; $68d6
|
||||
jr z, .asm_66e3
|
||||
ld a, [$d07d]
|
||||
cp $2
|
||||
jr nc, .checkMonNameLength
|
||||
ld a, [$cee9]
|
||||
cp $7 ; max length of player/rival names
|
||||
jr .checkNameLength
|
||||
.checkMonNameLength
|
||||
ld a, [$cee9]
|
||||
cp $a ; max length of pokemon nicknames
|
||||
.checkNameLength
|
||||
jr c, .addLetter
|
||||
ret
|
||||
.asm_66e3
|
||||
push hl
|
||||
call Func_6871
|
||||
pop hl
|
||||
ret nc
|
||||
dec hl
|
||||
.addLetter
|
||||
ld a, [$ceed]
|
||||
ld [hli], a
|
||||
ld [hl], $50
|
||||
ld a, (SFX_02_40 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ret
|
||||
.deleteLetter
|
||||
ld a, [$cee9]
|
||||
and a
|
||||
ret z
|
||||
call CalcStringLength
|
||||
dec hl
|
||||
ld [hl], $50
|
||||
ret
|
||||
.asm_6702
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $6
|
||||
ret z
|
||||
ld a, [wTopMenuItemX] ; $cc25
|
||||
cp $11
|
||||
jp z, .asm_6714
|
||||
inc a
|
||||
inc a
|
||||
jr .asm_6755
|
||||
.asm_6714
|
||||
ld a, $1
|
||||
jr .asm_6755
|
||||
.asm_6718
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $6
|
||||
ret z
|
||||
ld a, [wTopMenuItemX] ; $cc25
|
||||
dec a
|
||||
jp z, .asm_6728
|
||||
dec a
|
||||
jr .asm_6755
|
||||
.asm_6728
|
||||
ld a, $11
|
||||
jr .asm_6755
|
||||
.asm_672c
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
dec a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
and a
|
||||
ret nz
|
||||
ld a, $6
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld a, $1
|
||||
jr .asm_6755
|
||||
.asm_673e
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
inc a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
cp $7
|
||||
jr nz, .asm_6750
|
||||
ld a, $1
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
jr .asm_6755
|
||||
.asm_6750
|
||||
cp $6
|
||||
ret nz
|
||||
ld a, $1
|
||||
.asm_6755
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
jp EraseMenuCursor
|
||||
|
||||
LoadEDTile: ; 675b (1:675b)
|
||||
ld de, ED_Tile
|
||||
ld hl, $8f00
|
||||
ld bc, $1
|
||||
jp CopyVideoDataDouble
|
||||
|
||||
ED_Tile: ; 6767 (1:6767)
|
||||
INCBIN "gfx/ED_tile.1bpp"
|
||||
|
||||
PrintAlphabet: ; 676f (1:676f)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, [$ceeb]
|
||||
and a
|
||||
ld de, LowerCaseAlphabet ; $679e
|
||||
jr nz, .asm_677e
|
||||
ld de, UpperCaseAlphabet ; $67d6
|
||||
.asm_677e
|
||||
FuncCoord 2, 5 ; $c406
|
||||
ld hl, Coord
|
||||
ld bc, $509
|
||||
.asm_6784
|
||||
push bc
|
||||
.asm_6785
|
||||
ld a, [de]
|
||||
ld [hli], a
|
||||
inc hl
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_6785
|
||||
ld bc, $16
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .asm_6784
|
||||
call PlaceString
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
jp Delay3
|
||||
|
||||
LowerCaseAlphabet: ; 679e (1:679e)
|
||||
db "abcdefghijklmnopqrstuvwxyz ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥UPPER CASE@"
|
||||
|
||||
UpperCaseAlphabet: ; 67d6 (1:67d6)
|
||||
db "ABCDEFGHIJKLMNOPQRSTUVWXYZ ×():;[]",$e1,$e2,"-?!♂♀/",$f2,",¥lower case@"
|
||||
|
||||
Func_680e: ; 680e (1:680e)
|
||||
call CalcStringLength
|
||||
ld a, c
|
||||
ld [$cee9], a
|
||||
FuncCoord 10, 2 ; $c3d2
|
||||
ld hl, Coord
|
||||
ld bc, $10a
|
||||
call ClearScreenArea
|
||||
FuncCoord 10, 2 ; $c3d2
|
||||
ld hl, Coord
|
||||
ld de, $cf4b
|
||||
call PlaceString
|
||||
FuncCoord 10, 3 ; $c3e6
|
||||
ld hl, Coord
|
||||
ld a, [$d07d]
|
||||
cp $2
|
||||
jr nc, .asm_6835
|
||||
ld b, $7
|
||||
jr .asm_6837
|
||||
.asm_6835
|
||||
ld b, $a
|
||||
.asm_6837
|
||||
ld a, $76
|
||||
.asm_6839
|
||||
ld [hli], a
|
||||
dec b
|
||||
jr nz, .asm_6839
|
||||
ld a, [$d07d]
|
||||
cp $2
|
||||
ld a, [$cee9]
|
||||
jr nc, .asm_684b
|
||||
cp $7
|
||||
jr .asm_684d
|
||||
.asm_684b
|
||||
cp $a
|
||||
.asm_684d
|
||||
jr nz, .asm_6867
|
||||
call EraseMenuCursor
|
||||
ld a, $11
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
ld a, $5
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld a, [$d07d]
|
||||
cp $2
|
||||
ld a, $9
|
||||
jr nc, .asm_6867
|
||||
ld a, $6
|
||||
.asm_6867
|
||||
ld c, a
|
||||
ld b, $0
|
||||
FuncCoord 10, 3 ; $c3e6
|
||||
ld hl, Coord
|
||||
add hl, bc
|
||||
ld [hl], $77
|
||||
ret
|
||||
|
||||
Func_6871: ; 6871 (1:6871)
|
||||
push de
|
||||
call CalcStringLength
|
||||
dec hl
|
||||
ld a, [hl]
|
||||
pop hl
|
||||
ld de, $2
|
||||
call IsInArray
|
||||
ret nc
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [$ceed], a
|
||||
ret
|
||||
|
||||
Dakutens: ; 6885 (1:6885)
|
||||
db "かが", "きぎ", "くぐ", "けげ", "こご"
|
||||
db "さざ", "しじ", "すず", "せぜ", "そぞ"
|
||||
db "ただ", "ちぢ", "つづ", "てで", "とど"
|
||||
db "はば", "ひび", "ふぶ", "へべ", "ほぼ"
|
||||
db "カガ", "キギ", "クグ", "ケゲ", "コゴ"
|
||||
db "サザ", "シジ", "スズ", "セゼ", "ソゾ"
|
||||
db "タダ", "チヂ", "ツヅ", "テデ", "トド"
|
||||
db "ハバ", "ヒビ", "フブ", "へべ", "ホボ"
|
||||
db $ff
|
||||
|
||||
Handakutens: ; 68d6 (1:68d6)
|
||||
db "はぱ", "ひぴ", "ふぷ", "へぺ", "ほぽ"
|
||||
db "ハパ", "ヒピ", "フプ", "へぺ", "ホポ"
|
||||
db $ff
|
||||
|
||||
; calculates the length of the string at $cf4b and stores it in c
|
||||
CalcStringLength: ; 68eb (1:68eb)
|
||||
ld hl, $cf4b
|
||||
ld c, $0
|
||||
.asm_68f0
|
||||
ld a, [hl]
|
||||
cp $50
|
||||
ret z
|
||||
inc hl
|
||||
inc c
|
||||
jr .asm_68f0
|
||||
|
||||
PrintNamingText: ; 68f8 (1:68f8)
|
||||
FuncCoord 0, 1 ; $c3b4
|
||||
ld hl, Coord
|
||||
ld a, [$d07d]
|
||||
ld de, YourTextString ; $693f
|
||||
and a
|
||||
jr z, .notNickname
|
||||
ld de, RivalsTextString ; $6945
|
||||
dec a
|
||||
jr z, .notNickname
|
||||
ld a, [$cf91]
|
||||
ld [$cd5d], a
|
||||
push af
|
||||
callba Func_71882
|
||||
pop af
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
FuncCoord 4, 1 ; $c3b8
|
||||
ld hl, Coord
|
||||
call PlaceString
|
||||
ld hl, $1
|
||||
add hl, bc
|
||||
ld [hl], $c9
|
||||
FuncCoord 1, 3 ; $c3dd
|
||||
ld hl, Coord
|
||||
ld de, NicknameTextString ; $6953
|
||||
jr .placeString
|
||||
.notNickname
|
||||
call PlaceString
|
||||
ld l, c
|
||||
ld h, b
|
||||
ld de, NameTextString ; $694d
|
||||
.placeString
|
||||
jp PlaceString
|
||||
|
||||
YourTextString: ; 693f (1:693f)
|
||||
db "YOUR @"
|
||||
|
||||
RivalsTextString: ; 6945 (1:6945)
|
||||
db "RIVAL's @"
|
||||
|
||||
NameTextString: ; 694d (1:694d)
|
||||
db "NAME?@"
|
||||
|
||||
NicknameTextString: ; 6953 (1:6953)
|
||||
db "NICKNAME?@"
|
28
engine/menu/oaks_pc.asm
Executable file
28
engine/menu/oaks_pc.asm
Executable file
|
@ -0,0 +1,28 @@
|
|||
OpenOaksPC: ; 1e915 (7:6915)
|
||||
call SaveScreenTilesToBuffer2
|
||||
ld hl, AccessedOaksPCText
|
||||
call PrintText
|
||||
ld hl, GetDexRatedText
|
||||
call PrintText
|
||||
call YesNoChoice
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jr nz, .asm_1e932
|
||||
ld a, $56
|
||||
call Predef ; indirect jump to DisplayDexRating (44169 (11:4169))
|
||||
.asm_1e932
|
||||
ld hl, ClosedOaksPCText
|
||||
call PrintText
|
||||
jp LoadScreenTilesFromBuffer2
|
||||
|
||||
GetDexRatedText: ; 1e93b (7:693b)
|
||||
TX_FAR _GetDexRatedText
|
||||
db "@"
|
||||
|
||||
ClosedOaksPCText: ; 1e940 (7:6940)
|
||||
TX_FAR _ClosedOaksPCText
|
||||
db $0d,"@"
|
||||
|
||||
AccessedOaksPCText: ; 1e946 (7:6946)
|
||||
TX_FAR _AccessedOaksPCText
|
||||
db "@"
|
328
engine/menu/party_menu.asm
Executable file
328
engine/menu/party_menu.asm
Executable file
|
@ -0,0 +1,328 @@
|
|||
; [$D07D] = menu type / message ID
|
||||
; if less than $F0, it is a menu type
|
||||
; menu types:
|
||||
; 00: normal pokemon menu (e.g. Start menu)
|
||||
; 01: use healing item on pokemon menu
|
||||
; 02: in-battle switch pokemon menu
|
||||
; 03: learn TM/HM menu
|
||||
; 04: swap pokemon positions menu
|
||||
; 05: use evolution stone on pokemon menu
|
||||
; otherwise, it is a message ID
|
||||
; f0: poison healed
|
||||
; f1: burn healed
|
||||
; f2: freeze healed
|
||||
; f3: sleep healed
|
||||
; f4: paralysis healed
|
||||
; f5: HP healed
|
||||
; f6: health returned
|
||||
; f7: revitalized
|
||||
; f8: leveled up
|
||||
DrawPartyMenu_: ; 12cd2 (4:6cd2)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call ClearScreen
|
||||
call UpdateSprites ; move sprites
|
||||
callba Func_71791 ; load pokemon icon graphics
|
||||
|
||||
RedrawPartyMenu_: ; 12ce3 (4:6ce3)
|
||||
ld a,[$D07D]
|
||||
cp a,$04
|
||||
jp z,.printMessage
|
||||
call ErasePartyMenuCursors
|
||||
callba SendBlkPacket_PartyMenu ; loads some data to $cf2e
|
||||
FuncCoord 3,0
|
||||
ld hl,Coord
|
||||
ld de,W_PARTYMON1
|
||||
xor a
|
||||
ld c,a
|
||||
ld [$FF8C],a ; loop counter
|
||||
ld [$CF2D],a
|
||||
.loop
|
||||
ld a,[de]
|
||||
cp a,$FF ; reached the terminator?
|
||||
jp z,.afterDrawingMonEntries
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
ld a,c
|
||||
push hl
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
pop hl
|
||||
call PlaceString ; print the pokemon's name
|
||||
callba Func_71868 ; place the appropriate pokemon icon
|
||||
ld a,[$FF8C] ; loop counter
|
||||
ld [wWhichPokemon],a
|
||||
inc a
|
||||
ld [$FF8C],a
|
||||
call LoadMonData
|
||||
pop hl
|
||||
push hl
|
||||
ld a,[$CC35]
|
||||
and a ; is the player swapping pokemon positions?
|
||||
jr z,.skipUnfilledRightArrow
|
||||
; if the player is swapping pokemon positions
|
||||
dec a
|
||||
ld b,a
|
||||
ld a,[wWhichPokemon]
|
||||
cp b ; is the player swapping the current pokemon in the list?
|
||||
jr nz,.skipUnfilledRightArrow
|
||||
; the player is swapping the current pokemon in the list
|
||||
dec hl
|
||||
dec hl
|
||||
dec hl
|
||||
ld a,$EC ; unfilled right arrow menu cursor
|
||||
ld [hli],a ; place the cursor
|
||||
inc hl
|
||||
inc hl
|
||||
.skipUnfilledRightArrow
|
||||
ld a,[$D07D] ; menu type
|
||||
cp a,$03
|
||||
jr z,.teachMoveMenu
|
||||
cp a,$05
|
||||
jr z,.evolutionStoneMenu
|
||||
push hl
|
||||
ld bc,14 ; 14 columns to the right
|
||||
add hl,bc
|
||||
ld de,$CF9C
|
||||
call PrintStatusCondition
|
||||
pop hl
|
||||
push hl
|
||||
ld bc,20 + 1 ; down 1 row and right 1 column
|
||||
ld a,[$FFF6]
|
||||
set 0,a
|
||||
ld [$FFF6],a
|
||||
add hl,bc
|
||||
ld a,$60
|
||||
call Predef ; draw HP bar and prints current / max HP
|
||||
ld a,[$FFF6]
|
||||
res 0,a
|
||||
ld [$FFF6],a
|
||||
call SetPartyMenuHealthBarColor ; color the HP bar (on SGB)
|
||||
pop hl
|
||||
jr .printLevel
|
||||
.teachMoveMenu
|
||||
push hl
|
||||
ld a,$43
|
||||
call Predef ; check if the pokemon can learn the move
|
||||
pop hl
|
||||
ld de,.ableToLearnMoveText
|
||||
ld a,c
|
||||
and a
|
||||
jr nz,.placeMoveLearnabilityString
|
||||
ld de,.notAbleToLearnMoveText
|
||||
.placeMoveLearnabilityString
|
||||
ld bc,20 + 9 ; down 1 row and right 9 columns
|
||||
push hl
|
||||
add hl,bc
|
||||
call PlaceString
|
||||
pop hl
|
||||
.printLevel
|
||||
ld bc,10 ; move 10 columns to the right
|
||||
add hl,bc
|
||||
call PrintLevel
|
||||
pop hl
|
||||
pop de
|
||||
inc de
|
||||
ld bc,2 * 20
|
||||
add hl,bc
|
||||
pop bc
|
||||
inc c
|
||||
jp .loop
|
||||
.ableToLearnMoveText
|
||||
db "ABLE@"
|
||||
.notAbleToLearnMoveText
|
||||
db "NOT ABLE@"
|
||||
.evolutionStoneMenu
|
||||
push hl
|
||||
ld hl,EvosMovesPointerTable
|
||||
ld b,0
|
||||
ld a,[$CF98] ; pokemon ID
|
||||
dec a
|
||||
add a
|
||||
rl b
|
||||
ld c,a
|
||||
add hl,bc
|
||||
ld de,$CD6D
|
||||
ld a,BANK(EvosMovesPointerTable)
|
||||
ld bc,2
|
||||
call FarCopyData
|
||||
ld hl,$CD6D
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld de,$CD6D
|
||||
ld a,BANK(EvosMovesPointerTable)
|
||||
ld bc,13
|
||||
call FarCopyData
|
||||
ld hl,$CD6D
|
||||
ld de,.notAbleToEvolveText
|
||||
; loop through the pokemon's evolution entries
|
||||
.checkEvolutionsLoop
|
||||
ld a,[hli]
|
||||
and a ; reached terminator?
|
||||
jr z,.placeEvolutionStoneString ; if so, place the "NOT ABLE" string
|
||||
inc hl
|
||||
inc hl
|
||||
cp a,EV_ITEM
|
||||
jr nz,.checkEvolutionsLoop
|
||||
; if it's a stone evolution entry
|
||||
dec hl
|
||||
dec hl
|
||||
ld b,[hl]
|
||||
ld a,[$D156] ; evolution stone item ID
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
cp b ; does the player's stone match this evolution entry's stone?
|
||||
jr nz,.checkEvolutionsLoop
|
||||
; if it does match
|
||||
ld de,.ableToEvolveText
|
||||
.placeEvolutionStoneString
|
||||
ld bc,20 + 9 ; down 1 row and right 9 columns
|
||||
pop hl
|
||||
push hl
|
||||
add hl,bc
|
||||
call PlaceString
|
||||
pop hl
|
||||
jr .printLevel
|
||||
.ableToEvolveText
|
||||
db "ABLE@"
|
||||
.notAbleToEvolveText
|
||||
db "NOT ABLE@"
|
||||
.afterDrawingMonEntries
|
||||
ld b,$0A
|
||||
call GoPAL_SET
|
||||
.printMessage
|
||||
ld hl,$D730
|
||||
ld a,[hl]
|
||||
push af
|
||||
push hl
|
||||
set 6,[hl] ; turn off letter printing delay
|
||||
ld a,[$D07D] ; message ID
|
||||
cp a,$F0
|
||||
jr nc,.printItemUseMessage
|
||||
add a
|
||||
ld hl,PartyMenuMessagePointers
|
||||
ld b,0
|
||||
ld c,a
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
call PrintText
|
||||
.done
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl],a
|
||||
ld a,1
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call Delay3
|
||||
jp GBPalNormal
|
||||
.printItemUseMessage
|
||||
and a,$0F
|
||||
ld hl,PartyMenuItemUseMessagePointers
|
||||
add a
|
||||
ld c,a
|
||||
ld b,0
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
push hl
|
||||
ld a,[$CF06]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
pop hl
|
||||
call PrintText
|
||||
jr .done
|
||||
|
||||
PartyMenuItemUseMessagePointers: ; 12e61 (4:6e61)
|
||||
dw AntidoteText
|
||||
dw BurnHealText
|
||||
dw IceHealText
|
||||
dw AwakeningText
|
||||
dw ParlyzHealText
|
||||
dw PotionText
|
||||
dw FullHealText
|
||||
dw ReviveText
|
||||
dw RareCandyText
|
||||
|
||||
PartyMenuMessagePointers: ; 12e73 (4:6e73)
|
||||
dw PartyMenuNormalText
|
||||
dw PartyMenuItemUseText
|
||||
dw PartyMenuBattleText
|
||||
dw PartyMenuUseTMText
|
||||
dw PartyMenuSwapMonText
|
||||
dw PartyMenuItemUseText
|
||||
|
||||
PartyMenuNormalText: ; 12e7f (4:6e7f)
|
||||
TX_FAR _PartyMenuNormalText
|
||||
db "@"
|
||||
|
||||
PartyMenuItemUseText: ; 12e84 (4:6e84)
|
||||
TX_FAR _PartyMenuItemUseText
|
||||
db "@"
|
||||
|
||||
PartyMenuBattleText: ; 12e89 (4:6e89)
|
||||
TX_FAR _PartyMenuBattleText
|
||||
db "@"
|
||||
|
||||
PartyMenuUseTMText: ; 12e8e (4:6e8e)
|
||||
TX_FAR _PartyMenuUseTMText
|
||||
db "@"
|
||||
|
||||
PartyMenuSwapMonText: ; 12e93 (4:6e93)
|
||||
TX_FAR _PartyMenuSwapMonText
|
||||
db "@"
|
||||
|
||||
PotionText: ; 12e98 (4:6e98)
|
||||
TX_FAR _PotionText
|
||||
db "@"
|
||||
|
||||
AntidoteText: ; 12e9d (4:6e9d)
|
||||
TX_FAR _AntidoteText
|
||||
db "@"
|
||||
|
||||
ParlyzHealText: ; 12ea2 (4:6ea2)
|
||||
TX_FAR _ParlyzHealText
|
||||
db "@"
|
||||
|
||||
BurnHealText: ; 12ea7 (4:6ea7)
|
||||
TX_FAR _BurnHealText
|
||||
db "@"
|
||||
|
||||
IceHealText: ; 12eac (4:6eac)
|
||||
TX_FAR _IceHealText
|
||||
db "@"
|
||||
|
||||
AwakeningText: ; 12eb1 (4:6eb1)
|
||||
TX_FAR _AwakeningText
|
||||
db "@"
|
||||
|
||||
FullHealText: ; 12eb6 (4:6eb6)
|
||||
TX_FAR _FullHealText
|
||||
db "@"
|
||||
|
||||
ReviveText: ; 12ebb (4:6ebb)
|
||||
TX_FAR _ReviveText
|
||||
db "@"
|
||||
|
||||
RareCandyText: ; 12ec0 (4:6ec0)
|
||||
TX_FAR _RareCandyText
|
||||
db $0B
|
||||
db $06
|
||||
db "@"
|
||||
|
||||
SetPartyMenuHealthBarColor: ; 12ec7 (4:6ec7)
|
||||
ld hl, $cf1f
|
||||
ld a, [$cf2d]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
call GetHealthBarColor
|
||||
ld b, $fc
|
||||
call GoPAL_SET
|
||||
ld hl, $cf2d
|
||||
inc [hl]
|
||||
ret
|
142
engine/menu/pc.asm
Executable file
142
engine/menu/pc.asm
Executable file
|
@ -0,0 +1,142 @@
|
|||
ActivatePC: ; 17e2c (5:7e2c)
|
||||
call SaveScreenTilesToBuffer2 ;XXX: copy background from wTileMap to wTileMapBackup2
|
||||
ld a, (SFX_02_45 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
ld hl, TurnedOnPC1Text
|
||||
call PrintText
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
ld hl, wFlags_0xcd60
|
||||
set 3, [hl]
|
||||
call LoadScreenTilesFromBuffer2 ;XXX: restore saved screen
|
||||
call Delay3
|
||||
PCMainMenu: ; 17e48 (5:7e48)
|
||||
callba Func_213c8
|
||||
ld hl, wFlags_0xcd60
|
||||
set 5, [hl]
|
||||
call HandleMenuInput
|
||||
bit 1, a ;if player pressed B
|
||||
jp nz, LogOff
|
||||
ld a, [wMaxMenuItem]
|
||||
cp a, 2
|
||||
jr nz, .next ;if not 2 menu items (not counting log off) (2 occurs before you get the pokedex)
|
||||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
jp z, BillsPC ;if current menu item id is 0, it's bills pc
|
||||
cp a, 1
|
||||
jr z, .playersPC ;if current menu item id is 1, it's players pc
|
||||
jp LogOff ;otherwise, it's 2, and you're logging off
|
||||
.next
|
||||
cp a, 3
|
||||
jr nz, .next2 ;if not 3 menu items (not counting log off) (3 occurs after you get the pokedex, before you beat the pokemon league)
|
||||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
jp z, BillsPC ;if current menu item id is 0, it's bills pc
|
||||
cp a, 1
|
||||
jr z, .playersPC ;if current menu item id is 1, it's players pc
|
||||
cp a, 2
|
||||
jp z, OaksPC ;if current menu item id is 2, it's oaks pc
|
||||
jp LogOff ;otherwise, it's 3, and you're logging off
|
||||
.next2
|
||||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
jp z, BillsPC ;if current menu item id is 0, it's bills pc
|
||||
cp a, 1
|
||||
jr z, .playersPC ;if current menu item id is 1, it's players pc
|
||||
cp a, 2
|
||||
jp z, OaksPC ;if current menu item id is 2, it's oaks pc
|
||||
cp a, 3
|
||||
jp z, PKMNLeague ;if current menu item id is 3, it's pkmnleague
|
||||
jp LogOff ;otherwise, it's 4, and you're logging off
|
||||
.playersPC
|
||||
ld hl, wFlags_0xcd60
|
||||
res 5, [hl]
|
||||
set 3, [hl]
|
||||
ld a, (SFX_02_47 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
ld hl, AccessedMyPCText
|
||||
call PrintText
|
||||
callba PlayerPC
|
||||
jr ReloadMainMenu
|
||||
OaksPC: ; 17ec0 (5:7ec0)
|
||||
ld a, (SFX_02_47 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
callba OpenOaksPC
|
||||
jr ReloadMainMenu
|
||||
PKMNLeague: ; 17ed2 (5:7ed2)
|
||||
ld a, (SFX_02_47 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
callba PKMNLeaguePC
|
||||
jr ReloadMainMenu
|
||||
BillsPC: ; 17ee4 (5:7ee4)
|
||||
ld a, (SFX_02_47 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
ld a, [$D7F1] ;has to do with having met Bill
|
||||
bit 0, a
|
||||
jr nz, .billsPC ;if you've met bill, use that bill's instead of someone's
|
||||
ld hl, AccessedSomeonesPCText
|
||||
jr .printText
|
||||
.billsPC
|
||||
ld hl, AccessedBillsPCText
|
||||
.printText
|
||||
call PrintText
|
||||
callba BillsPC_
|
||||
ReloadMainMenu: ; 17f06 (5:7f06)
|
||||
xor a
|
||||
ld [$CC3C], a
|
||||
call ReloadMapData
|
||||
call UpdateSprites ;XXX: moves sprites
|
||||
jp PCMainMenu
|
||||
LogOff: ; 17f13 (5:7f13)
|
||||
ld a, (SFX_02_46 - SFX_Headers_02) / 3
|
||||
call PlaySound ;XXX: play sound or stop music
|
||||
call WaitForSoundToFinish ;XXX: wait for sound to be done
|
||||
ld hl, wFlags_0xcd60
|
||||
res 3, [hl]
|
||||
res 5, [hl]
|
||||
ret
|
||||
|
||||
TurnedOnPC1Text: ; 17f23 (5:7f23)
|
||||
TX_FAR _TurnedOnPC1Text
|
||||
db "@"
|
||||
|
||||
AccessedBillsPCText: ; 17f28 (5:7f28)
|
||||
TX_FAR _AccessedBillsPCText
|
||||
db "@"
|
||||
|
||||
AccessedSomeonesPCText: ; 17f2d (5:7f2d)
|
||||
TX_FAR _AccessedSomeonesPCText
|
||||
db "@"
|
||||
|
||||
AccessedMyPCText: ; 17f32 (5:7f32)
|
||||
TX_FAR _AccessedMyPCText
|
||||
db "@"
|
||||
|
||||
; removes one of the specified item ID [$FFdb] from bag (if existent)
|
||||
RemoveItemByID: ; 17f37 (5:7f37)
|
||||
ld hl, wBagItems ; $d31e
|
||||
ld a, [$ffdb]
|
||||
ld b, a
|
||||
xor a
|
||||
ld [$ffdc], a
|
||||
.asm_17f40
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
cp b
|
||||
jr z, .asm_17f4f
|
||||
inc hl
|
||||
ld a, [$ffdc]
|
||||
inc a
|
||||
ld [$ffdc], a
|
||||
jr .asm_17f40
|
||||
.asm_17f4f
|
||||
ld a, $1
|
||||
ld [$cf96], a
|
||||
ld a, [$ffdc]
|
||||
ld [wWhichPokemon], a ; $cf92
|
||||
ld hl, wNumBagItems ; $d31d
|
||||
jp RemoveItemFromInventory
|
302
engine/menu/players_pc.asm
Executable file
302
engine/menu/players_pc.asm
Executable file
|
@ -0,0 +1,302 @@
|
|||
PlayerPC: ; 78e6 (1:78e6)
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
ld a, ITEM_NAME
|
||||
ld [W_LISTTYPE], a
|
||||
call SaveScreenTilesToBuffer1
|
||||
xor a
|
||||
ld [$cc2c], a
|
||||
ld [$ccd3], a
|
||||
ld a, [wFlags_0xcd60]
|
||||
bit 3, a
|
||||
jr nz, Func_790c
|
||||
ld a, (SFX_02_45 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld hl, TurnedOnPC2Text
|
||||
call PrintText
|
||||
|
||||
Func_790c: ; 790c (1:790c)
|
||||
ld a, [$ccd3]
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld hl, wFlags_0xcd60
|
||||
set 5, [hl]
|
||||
call LoadScreenTilesFromBuffer2
|
||||
ld hl, wTileMap
|
||||
ld b, $8
|
||||
ld c, $e
|
||||
call TextBoxBorder
|
||||
call UpdateSprites
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
ld de, PlayersPCMenuEntries ; $7af5
|
||||
call PlaceString
|
||||
ld hl, wTopMenuItemY ; $cc24
|
||||
ld a, $2
|
||||
ld [hli], a
|
||||
dec a
|
||||
ld [hli], a
|
||||
inc hl
|
||||
inc hl
|
||||
ld a, $3
|
||||
ld [hli], a
|
||||
ld a, $3
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld hl, wListScrollOffset ; $cc36
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld [wPlayerMonNumber], a ; $cc2f
|
||||
ld hl, WhatDoYouWantText
|
||||
call PrintText
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jp nz, Func_796d
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
ld [$ccd3], a
|
||||
and a
|
||||
jp z, Func_7a12
|
||||
dec a
|
||||
jp z, Func_7995
|
||||
dec a
|
||||
jp z, Func_7a8f
|
||||
|
||||
Func_796d: ; 796d (1:796d)
|
||||
ld a, [wFlags_0xcd60]
|
||||
bit 3, a
|
||||
jr nz, .asm_797c
|
||||
ld a, (SFX_02_46 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
.asm_797c
|
||||
ld hl, wFlags_0xcd60
|
||||
res 5, [hl]
|
||||
call LoadScreenTilesFromBuffer2
|
||||
xor a
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld [$cc2c], a
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
xor a
|
||||
ld [$cc3c], a
|
||||
ret
|
||||
|
||||
Func_7995: ; 7995 (1:7995)
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld a, [wNumBagItems] ; $d31d
|
||||
and a
|
||||
jr nz, Func_79ab
|
||||
ld hl, NothingToDepositText
|
||||
call PrintText
|
||||
jp Func_790c
|
||||
|
||||
Func_79ab: ; 79ab (1:79ab)
|
||||
ld hl, WhatToDepositText
|
||||
call PrintText
|
||||
ld hl, wNumBagItems ; $d31d
|
||||
ld a, l
|
||||
ld [$cf8b], a
|
||||
ld a, h
|
||||
ld [$cf8c], a
|
||||
xor a
|
||||
ld [$cf93], a
|
||||
ld a, $3
|
||||
ld [wListMenuID], a ; $cf94
|
||||
call DisplayListMenuID
|
||||
jp c, Func_790c
|
||||
call IsKeyItem
|
||||
ld a, $1
|
||||
ld [$cf96], a
|
||||
ld a, [$d124]
|
||||
and a
|
||||
jr nz, .asm_79e7
|
||||
ld hl, DepositHowManyText
|
||||
call PrintText
|
||||
call DisplayChooseQuantityMenu
|
||||
cp $ff
|
||||
jp z, Func_79ab
|
||||
.asm_79e7
|
||||
ld hl, wNumBoxItems ; $d53a
|
||||
call AddItemToInventory
|
||||
jr c, .asm_79f8
|
||||
ld hl, NoRoomToStoreText
|
||||
call PrintText
|
||||
jp Func_79ab
|
||||
.asm_79f8
|
||||
ld hl, wNumBagItems ; $d31d
|
||||
call RemoveItemFromInventory
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_55 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld hl, ItemWasStoredText
|
||||
call PrintText
|
||||
jp Func_79ab
|
||||
|
||||
Func_7a12: ; 7a12 (1:7a12)
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld a, [wNumBoxItems] ; $d53a
|
||||
and a
|
||||
jr nz, Func_7a28
|
||||
ld hl, NothingStoredText
|
||||
call PrintText
|
||||
jp Func_790c
|
||||
|
||||
Func_7a28: ; 7a28 (1:7a28)
|
||||
ld hl, WhatToWithdrawText
|
||||
call PrintText
|
||||
ld hl, wNumBoxItems ; $d53a
|
||||
ld a, l
|
||||
ld [$cf8b], a
|
||||
ld a, h
|
||||
ld [$cf8c], a
|
||||
xor a
|
||||
ld [$cf93], a
|
||||
ld a, $3
|
||||
ld [wListMenuID], a ; $cf94
|
||||
call DisplayListMenuID
|
||||
jp c, Func_790c
|
||||
call IsKeyItem
|
||||
ld a, $1
|
||||
ld [$cf96], a
|
||||
ld a, [$d124]
|
||||
and a
|
||||
jr nz, .asm_7a64
|
||||
ld hl, WithdrawHowManyText
|
||||
call PrintText
|
||||
call DisplayChooseQuantityMenu
|
||||
cp $ff
|
||||
jp z, Func_7a28
|
||||
.asm_7a64
|
||||
ld hl, wNumBagItems ; $d31d
|
||||
call AddItemToInventory
|
||||
jr c, .asm_7a75
|
||||
ld hl, CantCarryMoreText
|
||||
call PrintText
|
||||
jp Func_7a28
|
||||
.asm_7a75
|
||||
ld hl, wNumBoxItems ; $d53a
|
||||
call RemoveItemFromInventory
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_55 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call WaitForSoundToFinish
|
||||
ld hl, WithdrewItemText
|
||||
call PrintText
|
||||
jp Func_7a28
|
||||
|
||||
Func_7a8f: ; 7a8f (1:7a8f)
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld a, [wNumBoxItems] ; $d53a
|
||||
and a
|
||||
jr nz, Func_7aa5
|
||||
ld hl, NothingStoredText
|
||||
call PrintText
|
||||
jp Func_790c
|
||||
|
||||
Func_7aa5: ; 7aa5 (1:7aa5)
|
||||
ld hl, WhatToTossText
|
||||
call PrintText
|
||||
ld hl, wNumBoxItems ; $d53a
|
||||
ld a, l
|
||||
ld [$cf8b], a
|
||||
ld a, h
|
||||
ld [$cf8c], a
|
||||
xor a
|
||||
ld [$cf93], a
|
||||
ld a, $3
|
||||
ld [wListMenuID], a ; $cf94
|
||||
push hl
|
||||
call DisplayListMenuID
|
||||
pop hl
|
||||
jp c, Func_790c
|
||||
push hl
|
||||
call IsKeyItem
|
||||
pop hl
|
||||
ld a, $1
|
||||
ld [$cf96], a
|
||||
ld a, [$d124]
|
||||
and a
|
||||
jr nz, .asm_7aef
|
||||
ld a, [$cf91]
|
||||
call IsItemHM
|
||||
jr c, .asm_7aef
|
||||
push hl
|
||||
ld hl, TossHowManyText
|
||||
call PrintText
|
||||
call DisplayChooseQuantityMenu
|
||||
pop hl
|
||||
cp $ff
|
||||
jp z, Func_7aa5
|
||||
.asm_7aef
|
||||
call TossItem
|
||||
jp Func_7aa5
|
||||
|
||||
PlayersPCMenuEntries: ; 7af5 (1:7af5)
|
||||
db "WITHDRAW ITEM"
|
||||
next "DEPOSIT ITEM"
|
||||
next "TOSS ITEM"
|
||||
next "LOG OFF@"
|
||||
|
||||
TurnedOnPC2Text: ; 7b22 (1:7b22)
|
||||
TX_FAR _TurnedOnPC2Text
|
||||
db "@"
|
||||
|
||||
WhatDoYouWantText: ; 7b27 (1:7b27)
|
||||
TX_FAR _WhatDoYouWantText
|
||||
db "@"
|
||||
|
||||
WhatToDepositText: ; 7b2c (1:7b2c)
|
||||
TX_FAR _WhatToDepositText
|
||||
db "@"
|
||||
|
||||
DepositHowManyText: ; 7b31 (1:7b31)
|
||||
TX_FAR _DepositHowManyText
|
||||
db "@"
|
||||
|
||||
ItemWasStoredText: ; 7b36 (1:7b36)
|
||||
TX_FAR _ItemWasStoredText
|
||||
db "@"
|
||||
|
||||
NothingToDepositText: ; 7b3b (1:7b3b)
|
||||
TX_FAR _NothingToDepositText
|
||||
db "@"
|
||||
|
||||
NoRoomToStoreText: ; 7b40 (1:7b40)
|
||||
TX_FAR _NoRoomToStoreText
|
||||
db "@"
|
||||
|
||||
WhatToWithdrawText: ; 7b45 (1:7b45)
|
||||
TX_FAR _WhatToWithdrawText
|
||||
db "@"
|
||||
|
||||
WithdrawHowManyText: ; 7b4a (1:7b4a)
|
||||
TX_FAR _WithdrawHowManyText
|
||||
db "@"
|
||||
|
||||
WithdrewItemText: ; 7b4f (1:7b4f)
|
||||
TX_FAR _WithdrewItemText
|
||||
db "@"
|
||||
|
||||
NothingStoredText: ; 7b54 (1:7b54)
|
||||
TX_FAR _NothingStoredText
|
||||
db "@"
|
||||
|
||||
CantCarryMoreText: ; 7b59 (1:7b59)
|
||||
TX_FAR _CantCarryMoreText
|
||||
db "@"
|
||||
|
||||
WhatToTossText: ; 7b5e (1:7b5e)
|
||||
TX_FAR _WhatToTossText
|
||||
db "@"
|
||||
|
||||
TossHowManyText: ; 7b63 (1:7b63)
|
||||
TX_FAR _TossHowManyText
|
||||
db "@"
|
676
engine/menu/pokedex.asm
Executable file
676
engine/menu/pokedex.asm
Executable file
|
@ -0,0 +1,676 @@
|
|||
DisplayPokedexMenu_: ; 40000 (10:4000)
|
||||
call GBPalWhiteOut
|
||||
call ClearScreen
|
||||
call UpdateSprites ; move sprites
|
||||
ld a,[wListScrollOffset]
|
||||
push af
|
||||
xor a
|
||||
ld [wCurrentMenuItem],a
|
||||
ld [wListScrollOffset],a
|
||||
ld [wLastMenuItem],a
|
||||
inc a
|
||||
ld [$d11e],a
|
||||
ld [$ffb7],a
|
||||
.setUpGraphics
|
||||
ld b,$08
|
||||
call GoPAL_SET
|
||||
callab LoadPokedexTilePatterns
|
||||
.doPokemonListMenu
|
||||
ld hl,wTopMenuItemY
|
||||
ld a,3
|
||||
ld [hli],a ; top menu item Y
|
||||
xor a
|
||||
ld [hli],a ; top menu item X
|
||||
inc a
|
||||
ld [$cc37],a
|
||||
inc hl
|
||||
inc hl
|
||||
ld a,6
|
||||
ld [hli],a ; max menu item ID
|
||||
ld [hl],%00110011 ; menu watched keys (Left, Right, B button, A button)
|
||||
call HandlePokedexListMenu
|
||||
jr c,.goToSideMenu ; if the player chose a pokemon from the list
|
||||
.exitPokedex
|
||||
xor a
|
||||
ld [$cc37],a
|
||||
ld [wCurrentMenuItem],a
|
||||
ld [wLastMenuItem],a
|
||||
ld [$ffb7],a
|
||||
ld [$cd3a],a
|
||||
ld [$cd3b],a
|
||||
pop af
|
||||
ld [wListScrollOffset],a
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call GoPAL_SET_CF1C
|
||||
jp ReloadMapData
|
||||
.goToSideMenu
|
||||
call HandlePokedexSideMenu
|
||||
dec b
|
||||
jr z,.exitPokedex ; if the player chose Quit
|
||||
dec b
|
||||
jr z,.doPokemonListMenu ; if pokemon not seen or player pressed B button
|
||||
jp .setUpGraphics ; if pokemon data or area was shown
|
||||
|
||||
; handles the menu on the lower right in the pokedex screen
|
||||
; OUTPUT:
|
||||
; b = reason for exiting menu
|
||||
; 00: showed pokemon data or area
|
||||
; 01: the player chose Quit
|
||||
; 02: the pokemon has not been seen yet or the player pressed the B button
|
||||
HandlePokedexSideMenu: ; 4006d (10:406d)
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
ld a,[wCurrentMenuItem]
|
||||
push af
|
||||
ld b,a
|
||||
ld a,[wLastMenuItem]
|
||||
push af
|
||||
ld a,[wListScrollOffset]
|
||||
push af
|
||||
add b
|
||||
inc a
|
||||
ld [$d11e],a
|
||||
ld a,[$d11e]
|
||||
push af
|
||||
ld a,[$cd3d]
|
||||
push af
|
||||
ld hl,wPokedexSeen
|
||||
call IsPokemonBitSet
|
||||
ld b,2
|
||||
jr z,.exitSideMenu
|
||||
call PokedexToIndex
|
||||
ld hl,wTopMenuItemY
|
||||
ld a,10
|
||||
ld [hli],a ; top menu item Y
|
||||
ld a,15
|
||||
ld [hli],a ; top menu item X
|
||||
xor a
|
||||
ld [hli],a ; current menu item ID
|
||||
inc hl
|
||||
ld a,3
|
||||
ld [hli],a ; max menu item ID
|
||||
ld [hli],a ; menu watched keys (A button and B button)
|
||||
xor a
|
||||
ld [hli],a ; old menu item ID
|
||||
ld [$cc37],a
|
||||
.handleMenuInput
|
||||
call HandleMenuInput
|
||||
bit 1,a ; was the B button pressed?
|
||||
ld b,2
|
||||
jr nz,.buttonBPressed
|
||||
ld a,[wCurrentMenuItem]
|
||||
and a
|
||||
jr z,.choseData
|
||||
dec a
|
||||
jr z,.choseCry
|
||||
dec a
|
||||
jr z,.choseArea
|
||||
.choseQuit
|
||||
ld b,1
|
||||
.exitSideMenu
|
||||
pop af
|
||||
ld [$cd3d],a
|
||||
pop af
|
||||
ld [$d11e],a
|
||||
pop af
|
||||
ld [wListScrollOffset],a
|
||||
pop af
|
||||
ld [wLastMenuItem],a
|
||||
pop af
|
||||
ld [wCurrentMenuItem],a
|
||||
push bc
|
||||
FuncCoord 0,3
|
||||
ld hl,Coord
|
||||
ld de,20
|
||||
ld bc,$7f0d ; 13 blank tiles
|
||||
call DrawTileLine ; cover up the menu cursor in the pokemon list
|
||||
pop bc
|
||||
ret
|
||||
.buttonBPressed
|
||||
push bc
|
||||
FuncCoord 15,10
|
||||
ld hl,Coord
|
||||
ld de,20
|
||||
ld bc,$7f07 ; 7 blank tiles
|
||||
call DrawTileLine ; cover up the menu cursor in the side menu
|
||||
pop bc
|
||||
jr .exitSideMenu
|
||||
.choseData
|
||||
call ShowPokedexDataInternal
|
||||
ld b,0
|
||||
jr .exitSideMenu
|
||||
; play pokemon cry
|
||||
.choseCry
|
||||
ld a,[$d11e]
|
||||
call GetCryData ; get cry data
|
||||
call PlaySound ; play sound
|
||||
jr .handleMenuInput
|
||||
.choseArea
|
||||
ld a,$4a
|
||||
call Predef ; display pokemon areas
|
||||
ld b,0
|
||||
jr .exitSideMenu
|
||||
|
||||
; handles the list of pokemon on the left of the pokedex screen
|
||||
; sets carry flag if player presses A, unsets carry flag if player presses B
|
||||
HandlePokedexListMenu: ; 40111 (10:4111)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
; draw the horizontal line separating the seen and owned amounts from the menu
|
||||
FuncCoord 15,8
|
||||
ld hl,Coord
|
||||
ld a,$7a ; horizontal line tile
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
ld [hli],a
|
||||
FuncCoord 14,0
|
||||
ld hl,Coord
|
||||
ld [hl],$71 ; vertical line tile
|
||||
FuncCoord 14,1
|
||||
ld hl,Coord
|
||||
call DrawPokedexVerticalLine
|
||||
FuncCoord 14,9
|
||||
ld hl,Coord
|
||||
call DrawPokedexVerticalLine
|
||||
ld hl,wPokedexSeen
|
||||
ld b,wPokedexSeenEnd - wPokedexSeen
|
||||
call CountSetBits
|
||||
ld de,$d11e
|
||||
FuncCoord 16,3
|
||||
ld hl,Coord
|
||||
ld bc,$0103
|
||||
call PrintNumber ; print number of seen pokemon
|
||||
ld hl,wPokedexOwned
|
||||
ld b,wPokedexOwnedEnd - wPokedexOwned
|
||||
call CountSetBits
|
||||
ld de,$d11e
|
||||
FuncCoord 16,6
|
||||
ld hl,Coord
|
||||
ld bc,$0103
|
||||
call PrintNumber ; print number of owned pokemon
|
||||
FuncCoord 16,2
|
||||
ld hl,Coord
|
||||
ld de,PokedexSeenText
|
||||
call PlaceString
|
||||
FuncCoord 16,5
|
||||
ld hl,Coord
|
||||
ld de,PokedexOwnText
|
||||
call PlaceString
|
||||
FuncCoord 1,1
|
||||
ld hl,Coord
|
||||
ld de,PokedexContentsText
|
||||
call PlaceString
|
||||
FuncCoord 16,10
|
||||
ld hl,Coord
|
||||
ld de,PokedexMenuItemsText
|
||||
call PlaceString
|
||||
; find the highest pokedex number among the pokemon the player has seen
|
||||
ld hl,wPokedexSeenEnd - 1
|
||||
ld b,153
|
||||
.maxSeenPokemonLoop
|
||||
ld a,[hld]
|
||||
ld c,8
|
||||
.maxSeenPokemonInnerLoop
|
||||
dec b
|
||||
sla a
|
||||
jr c,.storeMaxSeenPokemon
|
||||
dec c
|
||||
jr nz,.maxSeenPokemonInnerLoop
|
||||
jr .maxSeenPokemonLoop
|
||||
.storeMaxSeenPokemon
|
||||
ld a,b
|
||||
ld [$cd3d],a ; max seen pokemon
|
||||
.loop
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
FuncCoord 4,2
|
||||
ld hl,Coord
|
||||
ld bc,$0e0a
|
||||
call ClearScreenArea
|
||||
FuncCoord 1,3
|
||||
ld hl,Coord
|
||||
ld a,[wListScrollOffset]
|
||||
ld [$d11e],a
|
||||
ld d,7
|
||||
ld a,[$cd3d]
|
||||
cp a,7
|
||||
jr nc,.printPokemonLoop
|
||||
ld d,a
|
||||
dec a
|
||||
ld [wMaxMenuItem],a
|
||||
; loop to print pokemon pokedex numbers and names
|
||||
; if the player has owned the pokemon, it puts a pokeball beside the name
|
||||
.printPokemonLoop
|
||||
ld a,[$d11e]
|
||||
inc a
|
||||
ld [$d11e],a
|
||||
push af
|
||||
push de
|
||||
push hl
|
||||
ld de,-20
|
||||
add hl,de
|
||||
ld de,$d11e
|
||||
ld bc,$8103
|
||||
call PrintNumber ; print the pokedex number
|
||||
ld de,20
|
||||
add hl,de
|
||||
dec hl
|
||||
push hl
|
||||
ld hl,wPokedexOwned
|
||||
call IsPokemonBitSet
|
||||
pop hl
|
||||
ld a," "
|
||||
jr z,.writeTile
|
||||
ld a,$72 ; pokeball tile
|
||||
.writeTile
|
||||
ld [hl],a ; put a pokeball next to pokemon that the player has owned
|
||||
push hl
|
||||
ld hl,wPokedexSeen
|
||||
call IsPokemonBitSet
|
||||
jr nz,.getPokemonName ; if the player has seen the pokemon
|
||||
ld de,.dashedLine ; print a dashed line in place of the name if the player hasn't seen the pokemon
|
||||
jr .skipGettingName
|
||||
.dashedLine ; for unseen pokemon in the list
|
||||
db "----------@"
|
||||
.getPokemonName
|
||||
call PokedexToIndex
|
||||
call GetMonName
|
||||
.skipGettingName
|
||||
pop hl
|
||||
inc hl
|
||||
call PlaceString
|
||||
pop hl
|
||||
ld bc,2 * 20
|
||||
add hl,bc
|
||||
pop de
|
||||
pop af
|
||||
ld [$d11e],a
|
||||
dec d
|
||||
jr nz,.printPokemonLoop
|
||||
ld a,01
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call Delay3
|
||||
call GBPalNormal
|
||||
call HandleMenuInput
|
||||
bit 1,a ; was the B button pressed?
|
||||
jp nz,.buttonBPressed
|
||||
.checkIfUpPressed
|
||||
bit 6,a ; was Up pressed?
|
||||
jr z,.checkIfDownPressed
|
||||
.upPressed ; scroll up one row
|
||||
ld a,[wListScrollOffset]
|
||||
and a
|
||||
jp z,.loop
|
||||
dec a
|
||||
ld [wListScrollOffset],a
|
||||
jp .loop
|
||||
.checkIfDownPressed
|
||||
bit 7,a ; was Down pressed?
|
||||
jr z,.checkIfRightPressed
|
||||
.downPressed ; scroll down one row
|
||||
ld a,[$cd3d]
|
||||
cp a,7
|
||||
jp c,.loop
|
||||
sub a,7
|
||||
ld b,a
|
||||
ld a,[wListScrollOffset]
|
||||
cp b
|
||||
jp z,.loop
|
||||
inc a
|
||||
ld [wListScrollOffset],a
|
||||
jp .loop
|
||||
.checkIfRightPressed
|
||||
bit 4,a ; was Right pressed?
|
||||
jr z,.checkIfLeftPressed
|
||||
.rightPressed ; scroll down 7 rows
|
||||
ld a,[$cd3d]
|
||||
cp a,7
|
||||
jp c,.loop
|
||||
sub a,6
|
||||
ld b,a
|
||||
ld a,[wListScrollOffset]
|
||||
add a,7
|
||||
ld [wListScrollOffset],a
|
||||
cp b
|
||||
jp c,.loop
|
||||
dec b
|
||||
ld a,b
|
||||
ld [wListScrollOffset],a
|
||||
jp .loop
|
||||
.checkIfLeftPressed ; scroll up 7 rows
|
||||
bit 5,a ; was Left pressed?
|
||||
jr z,.buttonAPressed
|
||||
.leftPressed
|
||||
ld a,[wListScrollOffset]
|
||||
sub a,7
|
||||
ld [wListScrollOffset],a
|
||||
jp nc,.loop
|
||||
xor a
|
||||
ld [wListScrollOffset],a
|
||||
jp .loop
|
||||
.buttonAPressed
|
||||
scf
|
||||
ret
|
||||
.buttonBPressed
|
||||
and a
|
||||
ret
|
||||
|
||||
DrawPokedexVerticalLine: ; 4028e (10:428e)
|
||||
ld c,9 ; height of line
|
||||
ld de,20 ; width of screen
|
||||
ld a,$71 ; vertical line tile
|
||||
.loop
|
||||
ld [hl],a
|
||||
add hl,de
|
||||
xor a,1 ; toggle between vertical line tile and box tile
|
||||
dec c
|
||||
jr nz,.loop
|
||||
ret
|
||||
|
||||
PokedexSeenText: ; 4029d (10:429d)
|
||||
db "SEEN@"
|
||||
|
||||
PokedexOwnText: ; 402a2 (10:42a2)
|
||||
db "OWN@"
|
||||
|
||||
PokedexContentsText: ; 402a6 (10:42a6)
|
||||
db "CONTENTS@"
|
||||
|
||||
PokedexMenuItemsText: ; 402af (10:42af)
|
||||
db "DATA"
|
||||
next "CRY"
|
||||
next "AREA"
|
||||
next "QUIT@"
|
||||
|
||||
; tests if a pokemon's bit is set in the seen or owned pokemon bit fields
|
||||
; INPUT:
|
||||
; [$d11e] = pokedex number
|
||||
; hl = address of bit field
|
||||
IsPokemonBitSet: ; 402c2 (10:42c2)
|
||||
ld a,[$d11e]
|
||||
dec a
|
||||
ld c,a
|
||||
ld b,2
|
||||
ld a,$10
|
||||
call Predef
|
||||
ld a,c
|
||||
and a
|
||||
ret
|
||||
|
||||
; function to display pokedex data from outside the pokedex
|
||||
ShowPokedexData: ; 402d1 (10:42d1)
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
callab LoadPokedexTilePatterns ; load pokedex tiles
|
||||
|
||||
; function to display pokedex data from inside the pokedex
|
||||
ShowPokedexDataInternal: ; 402e2 (10:42e2)
|
||||
ld hl,$d72c
|
||||
set 1,[hl]
|
||||
ld a,$33 ; 3/7 volume
|
||||
ld [$ff24],a
|
||||
call GBPalWhiteOut ; zero all palettes
|
||||
call ClearScreen
|
||||
ld a,[$d11e] ; pokemon ID
|
||||
ld [$cf91],a
|
||||
push af
|
||||
ld b,04
|
||||
call GoPAL_SET
|
||||
pop af
|
||||
ld [$d11e],a
|
||||
ld a,[$ffd7]
|
||||
push af
|
||||
xor a
|
||||
ld [$ffd7],a
|
||||
FuncCoord 0,0
|
||||
ld hl,Coord
|
||||
ld de,1
|
||||
ld bc,$6414
|
||||
call DrawTileLine ; draw top border
|
||||
FuncCoord 0,17
|
||||
ld hl,Coord
|
||||
ld b,$6f
|
||||
call DrawTileLine ; draw bottom border
|
||||
FuncCoord 0,1
|
||||
ld hl,Coord
|
||||
ld de,20
|
||||
ld bc,$6610
|
||||
call DrawTileLine ; draw left border
|
||||
FuncCoord 19,1
|
||||
ld hl,Coord
|
||||
ld b,$67
|
||||
call DrawTileLine ; draw right border
|
||||
FuncCoord 0,0
|
||||
ld a,$63 ; upper left corner tile
|
||||
ld [Coord],a
|
||||
FuncCoord 19,0
|
||||
ld a,$65 ; upper right corner tile
|
||||
ld [Coord],a
|
||||
FuncCoord 0,17
|
||||
ld a,$6c ; lower left corner tile
|
||||
ld [Coord],a
|
||||
FuncCoord 19,17
|
||||
ld a,$6e ; lower right corner tile
|
||||
ld [Coord],a
|
||||
FuncCoord 0,9
|
||||
ld hl,Coord
|
||||
ld de,PokedexDataDividerLine
|
||||
call PlaceString ; draw horizontal divider line
|
||||
FuncCoord 9,6
|
||||
ld hl,Coord
|
||||
ld de,HeightWeightText
|
||||
call PlaceString
|
||||
call GetMonName
|
||||
FuncCoord 9,2
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
ld hl,PokedexEntryPointers
|
||||
ld a,[$d11e]
|
||||
dec a
|
||||
ld e,a
|
||||
ld d,0
|
||||
add hl,de
|
||||
add hl,de
|
||||
ld a,[hli]
|
||||
ld e,a
|
||||
ld d,[hl] ; de = address of pokedex entry
|
||||
FuncCoord 9,4
|
||||
ld hl,Coord
|
||||
call PlaceString ; print species name
|
||||
ld h,b
|
||||
ld l,c
|
||||
push de
|
||||
ld a,[$d11e]
|
||||
push af
|
||||
call IndexToPokedex
|
||||
FuncCoord 2,8
|
||||
ld hl,Coord
|
||||
ld a, "№"
|
||||
ld [hli],a
|
||||
ld a,$f2
|
||||
ld [hli],a
|
||||
ld de,$d11e
|
||||
ld bc,$8103
|
||||
call PrintNumber ; print pokedex number
|
||||
ld hl,wPokedexOwned
|
||||
call IsPokemonBitSet
|
||||
pop af
|
||||
ld [$d11e],a
|
||||
ld a,[$cf91]
|
||||
ld [$d0b5],a
|
||||
pop de
|
||||
push af
|
||||
push bc
|
||||
push de
|
||||
push hl
|
||||
call Delay3
|
||||
call GBPalNormal
|
||||
call GetMonHeader ; load pokemon picture location
|
||||
FuncCoord 1,1
|
||||
ld hl,Coord
|
||||
call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture
|
||||
ld a,[$cf91]
|
||||
call PlayCry ; play pokemon cry
|
||||
pop hl
|
||||
pop de
|
||||
pop bc
|
||||
pop af
|
||||
ld a,c
|
||||
and a
|
||||
jp z,.waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description
|
||||
inc de ; de = address of feet (height)
|
||||
ld a,[de] ; reads feet, but a is overwritten without being used
|
||||
FuncCoord 12,6
|
||||
ld hl,Coord
|
||||
ld bc,$0102
|
||||
call PrintNumber ; print feet (height)
|
||||
ld a,$60 ; feet symbol tile (one tick)
|
||||
ld [hl],a
|
||||
inc de
|
||||
inc de ; de = address of inches (height)
|
||||
FuncCoord 15,6
|
||||
ld hl,Coord
|
||||
ld bc,$8102
|
||||
call PrintNumber ; print inches (height)
|
||||
ld a,$61 ; inches symbol tile (two ticks)
|
||||
ld [hl],a
|
||||
; now print the weight (note that weight is stored in tenths of pounds internally)
|
||||
inc de
|
||||
inc de
|
||||
inc de ; de = address of upper byte of weight
|
||||
push de
|
||||
; put weight in big-endian order at $ff8b
|
||||
ld hl,$ff8b
|
||||
ld a,[hl] ; save existing value of [$ff8b]
|
||||
push af
|
||||
ld a,[de] ; a = upper byte of weight
|
||||
ld [hli],a ; store upper byte of weight in [$ff8b]
|
||||
ld a,[hl] ; save existing value of [$ff8c]
|
||||
push af
|
||||
dec de
|
||||
ld a,[de] ; a = lower byte of weight
|
||||
ld [hl],a ; store lower byte of weight in [$ff8c]
|
||||
FuncCoord 11,8
|
||||
ld de,$ff8b
|
||||
ld hl,Coord
|
||||
ld bc,$0205 ; no leading zeroes, right-aligned, 2 bytes, 5 digits
|
||||
call PrintNumber ; print weight
|
||||
FuncCoord 14,8
|
||||
ld hl,Coord
|
||||
ld a,[$ff8c]
|
||||
sub a,10
|
||||
ld a,[$ff8b]
|
||||
sbc a,0
|
||||
jr nc,.next
|
||||
ld [hl],"0" ; if the weight is less than 10, put a 0 before the decimal point
|
||||
.next
|
||||
inc hl
|
||||
ld a,[hli]
|
||||
ld [hld],a ; make space for the decimal point by moving the last digit forward one tile
|
||||
ld [hl],$f2 ; decimal point tile
|
||||
pop af
|
||||
ld [$ff8c],a ; restore original value of [$ff8c]
|
||||
pop af
|
||||
ld [$ff8b],a ; restore original value of [$ff8b]
|
||||
pop hl
|
||||
inc hl ; hl = address of pokedex description text
|
||||
FuncCoord 1,11
|
||||
ld bc,Coord
|
||||
ld a,2
|
||||
ld [$fff4],a
|
||||
call TextCommandProcessor ; print pokedex description text
|
||||
xor a
|
||||
ld [$fff4],a
|
||||
.waitForButtonPress
|
||||
call GetJoypadStateLowSensitivity
|
||||
ld a,[$ffb5]
|
||||
and a,%00000011 ; A button and B button
|
||||
jr z,.waitForButtonPress
|
||||
pop af
|
||||
ld [$ffd7],a
|
||||
call GBPalWhiteOut
|
||||
call ClearScreen
|
||||
call GoPAL_SET_CF1C
|
||||
call LoadTextBoxTilePatterns
|
||||
call GBPalNormal
|
||||
ld hl,$d72c
|
||||
res 1,[hl]
|
||||
ld a,$77 ; max volume
|
||||
ld [$ff24],a
|
||||
ret
|
||||
|
||||
HeightWeightText: ; 40448 (10:4448)
|
||||
db "HT ?",$60,"??",$61,$4E,"WT ???lb@"
|
||||
|
||||
; XXX does anything point to this?
|
||||
Unknown_4045D: ; 4045d (10:445d)
|
||||
db $54,$50
|
||||
|
||||
; horizontal line that divides the pokedex text description from the rest of the data
|
||||
PokedexDataDividerLine: ; 4045f (10:445f)
|
||||
db $68,$69,$6B,$69,$6B
|
||||
db $69,$6B,$69,$6B,$6B
|
||||
db $6B,$6B,$69,$6B,$69
|
||||
db $6B,$69,$6B,$69,$6A
|
||||
db $50
|
||||
|
||||
; draws a line of tiles
|
||||
; INPUT:
|
||||
; b = tile ID
|
||||
; c = number of tile ID's to write
|
||||
; de = amount to destination address after each tile (1 for horizontal, 20 for vertical)
|
||||
; hl = destination address
|
||||
DrawTileLine: ; 40474 (10:4474)
|
||||
push bc
|
||||
push de
|
||||
.loop
|
||||
ld [hl],b
|
||||
add hl,de
|
||||
dec c
|
||||
jr nz,.loop
|
||||
pop de
|
||||
pop bc
|
||||
ret
|
||||
|
||||
INCLUDE "data/pokedex_entries.asm"
|
||||
|
||||
PokedexToIndex: ; 40ff9 (10:4ff9)
|
||||
; converts the Pokédex number at $D11E to an index
|
||||
push bc
|
||||
push hl
|
||||
ld a,[$D11E]
|
||||
ld b,a
|
||||
ld c,0
|
||||
ld hl,PokedexOrder
|
||||
|
||||
.loop ; go through the list until we find an entry with a matching dex number
|
||||
inc c
|
||||
ld a,[hli]
|
||||
cp b
|
||||
jr nz,.loop
|
||||
|
||||
ld a,c
|
||||
ld [$D11E],a
|
||||
pop hl
|
||||
pop bc
|
||||
ret
|
||||
|
||||
IndexToPokedex: ; 41010 (10:5010)
|
||||
; converts the indexédex number at $D11E to a Pokédex number
|
||||
push bc
|
||||
push hl
|
||||
ld a,[$D11E]
|
||||
dec a
|
||||
ld hl,PokedexOrder
|
||||
ld b,0
|
||||
ld c,a
|
||||
add hl,bc
|
||||
ld a,[hl]
|
||||
ld [$D11E],a
|
||||
pop hl
|
||||
pop bc
|
||||
ret
|
||||
|
||||
INCLUDE "data/pokedex_order.asm"
|
316
engine/menu/prize_menu.asm
Executable file
316
engine/menu/prize_menu.asm
Executable file
|
@ -0,0 +1,316 @@
|
|||
CeladonPrizeMenu: ; 5271b (14:671b)
|
||||
ld b,COIN_CASE
|
||||
call IsItemInBag
|
||||
jr nz,.havingCoinCase
|
||||
ld hl,RequireCoinCaseTextPtr
|
||||
jp PrintText
|
||||
.havingCoinCase
|
||||
ld hl,$D730
|
||||
set 6,[hl]
|
||||
ld hl,ExchangeCoinsForPrizesTextPtr
|
||||
call PrintText
|
||||
; the following are the menu settings
|
||||
xor a
|
||||
ld [$CC26],a
|
||||
ld [$CC2A],a
|
||||
ld a,$03
|
||||
ld [$CC29],a
|
||||
ld a,$03
|
||||
ld [$CC28],a
|
||||
ld a,$04
|
||||
ld [$CC24],a
|
||||
ld a,$01
|
||||
ld [$CC25],a
|
||||
call PrintPrizePrice ; 687A
|
||||
FuncCoord 0,2
|
||||
ld hl,Coord
|
||||
ld b,$08
|
||||
ld c,$10
|
||||
call TextBoxBorder
|
||||
call GetPrizeMenuId ;678E
|
||||
call UpdateSprites
|
||||
ld hl,WhichPrizeTextPtr
|
||||
call PrintText
|
||||
call HandleMenuInput ; menu choice handler
|
||||
bit 1,a ; keypress = B (Cancel)
|
||||
jr nz,.NoChoice
|
||||
ld a,[$CC26]
|
||||
cp a,$03 ; "NO,THANKS" choice
|
||||
jr z,.NoChoice
|
||||
call HandlePrizeChoice ; 14:68C6
|
||||
.NoChoice
|
||||
ld hl,$D730
|
||||
res 6,[hl]
|
||||
ret
|
||||
|
||||
RequireCoinCaseTextPtr: ; 5277e (14:677e)
|
||||
TX_FAR _RequireCoinCaseText
|
||||
db $0D
|
||||
db "@"
|
||||
|
||||
ExchangeCoinsForPrizesTextPtr: ; 52784 (14:6784)
|
||||
TX_FAR _ExchangeCoinsForPrizesText
|
||||
db "@"
|
||||
|
||||
WhichPrizeTextPtr: ; 52789 (14:6789)
|
||||
TX_FAR _WhichPrizeText
|
||||
db "@"
|
||||
|
||||
GetPrizeMenuId: ; 5278e (14:678e)
|
||||
; determine which one among the three
|
||||
; prize-texts has been selected
|
||||
; using the text ID (stored in [$FF8C])
|
||||
; load the three prizes at $D13D-$D13F
|
||||
; load the three prices at $D141-$D146
|
||||
; display the three prizes' names
|
||||
; (distinguishing between Pokemon names
|
||||
; and Items (specifically TMs) names)
|
||||
ld a,[$FF8C]
|
||||
sub a,$03 ; prize-texts' id are 3, 4 and 5
|
||||
ld [$D12F],a ; prize-texts' id (relative, i.e. 0, 1 or 2)
|
||||
add a
|
||||
add a
|
||||
ld d,$00
|
||||
ld e,a
|
||||
ld hl,PrizeDifferentMenuPtrs
|
||||
add hl,de
|
||||
ld a,[hli]
|
||||
ld d,[hl]
|
||||
ld e,a
|
||||
inc hl
|
||||
push hl
|
||||
ld hl,W_PRIZE1
|
||||
call CopyString ; XXX what does this do
|
||||
pop hl
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld de,$D141
|
||||
ld bc,$0006
|
||||
call CopyData
|
||||
ld a,[$D12F]
|
||||
cp a,$02 ;is TM_menu?
|
||||
jr nz,.putMonName
|
||||
ld a,[W_PRIZE1]
|
||||
ld [$D11E],a
|
||||
call GetItemName
|
||||
FuncCoord 2,4
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
ld a,[W_PRIZE2]
|
||||
ld [$D11E],a
|
||||
call GetItemName
|
||||
FuncCoord 2,6
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
ld a,[W_PRIZE3]
|
||||
ld [$D11E],a
|
||||
call GetItemName
|
||||
FuncCoord 2,8
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
jr .putNoThanksText
|
||||
.putMonName ; 14:67EC
|
||||
ld a,[W_PRIZE1]
|
||||
ld [$D11E],a
|
||||
call GetMonName
|
||||
FuncCoord 2,4
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
ld a,[W_PRIZE2]
|
||||
ld [$D11E],a
|
||||
call GetMonName
|
||||
FuncCoord 2,6
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
ld a,[W_PRIZE3]
|
||||
ld [$D11E],a
|
||||
call GetMonName
|
||||
FuncCoord 2,8
|
||||
ld hl,Coord
|
||||
call PlaceString
|
||||
.putNoThanksText ; 14:6819
|
||||
FuncCoord 2,10
|
||||
ld hl,Coord
|
||||
ld de,NoThanksText
|
||||
call PlaceString
|
||||
; put prices on the right side of the textbox
|
||||
ld de,$D141
|
||||
FuncCoord 13,5
|
||||
ld hl,Coord
|
||||
; reg. c:
|
||||
; [low nybble] number of bytes
|
||||
; [bit 765 = %100] space-padding (not zero-padding)
|
||||
ld c,(1 << 7 | 2)
|
||||
; Function $15CD displays BCD value (same routine
|
||||
; used by text-command $02)
|
||||
call PrintBCDNumber ; Print_BCD
|
||||
ld de,$D143
|
||||
FuncCoord 13,7
|
||||
ld hl,Coord
|
||||
ld c,(%1 << 7 | 2)
|
||||
call PrintBCDNumber
|
||||
ld de,$D145
|
||||
FuncCoord 13,9
|
||||
ld hl,Coord
|
||||
ld c,(1 << 7 | 2)
|
||||
jp PrintBCDNumber
|
||||
|
||||
INCLUDE "data/prizes.asm"
|
||||
|
||||
PrintPrizePrice: ; 5287a (14:687a)
|
||||
FuncCoord 11,0
|
||||
ld hl,Coord
|
||||
ld b,$01
|
||||
ld c,$07
|
||||
call TextBoxBorder
|
||||
call UpdateSprites ; XXX save OAM?
|
||||
FuncCoord 12,0
|
||||
ld hl,Coord
|
||||
ld de,.CoinText
|
||||
call PlaceString
|
||||
FuncCoord 13,1
|
||||
ld hl,Coord
|
||||
ld de,.SixSpacesText
|
||||
call PlaceString
|
||||
FuncCoord 13,1
|
||||
ld hl,Coord
|
||||
ld de,wPlayerCoins
|
||||
ld c,%10000010
|
||||
call PrintBCDNumber
|
||||
ret
|
||||
|
||||
.CoinText ; 14:68A5
|
||||
db "COIN@"
|
||||
|
||||
.SixSpacesText ; 14:68AA
|
||||
db " @"
|
||||
|
||||
LoadCoinsToSubtract: ; 528b1 (14:68b1)
|
||||
ld a,[$D139] ; backup of selected menu_entry
|
||||
add a
|
||||
ld d,$00
|
||||
ld e,a
|
||||
ld hl,$D141 ; first prize's price
|
||||
add hl,de ; get selected prize's price
|
||||
xor a
|
||||
ld [$FF9F],a
|
||||
ld a,[hli]
|
||||
ld [$FFA0],a
|
||||
ld a,[hl]
|
||||
ld [$FFA1],a
|
||||
ret
|
||||
|
||||
HandlePrizeChoice: ; 528c6 (14:68c6)
|
||||
ld a,[$CC26] ; selected menu_entry
|
||||
ld [$D139],a
|
||||
ld d,$00
|
||||
ld e,a
|
||||
ld hl,W_PRIZE1
|
||||
add hl,de
|
||||
ld a,[hl]
|
||||
ld [$D11E],a
|
||||
ld a,[$D12F]
|
||||
cp a,$02 ; is prize a TM?
|
||||
jr nz,.GetMonName
|
||||
call GetItemName
|
||||
jr .GivePrize
|
||||
.GetMonName ; 14:68E3
|
||||
call GetMonName
|
||||
.GivePrize ; 14:68E6
|
||||
ld hl,SoYouWantPrizeTextPtr
|
||||
call PrintText
|
||||
call YesNoChoice ; yes/no textbox
|
||||
ld a,[$CC26] ; yes/no answer (Y=0, N=1)
|
||||
and a
|
||||
jr nz,.PrintOhFineThen
|
||||
call LoadCoinsToSubtract
|
||||
call HasEnoughCoins
|
||||
jr c,.NotEnoughCoins
|
||||
ld a,[$D12F]
|
||||
cp a,$02
|
||||
jr nz,.GiveMon
|
||||
ld a,[$D11E]
|
||||
ld b,a
|
||||
ld a,1
|
||||
ld c,a
|
||||
call GiveItem ; GiveItem
|
||||
jr nc,.BagFull
|
||||
jr .SubtractCoins
|
||||
.GiveMon ; 14:6912
|
||||
ld a,[$D11E]
|
||||
ld [$CF91],a
|
||||
push af
|
||||
call GetPrizeMonLevel ; 14:6977
|
||||
ld c,a
|
||||
pop af
|
||||
ld b,a
|
||||
call GivePokemon
|
||||
push af
|
||||
ld a,[$CCD3] ; XXX is there room?
|
||||
and a
|
||||
call z,WaitForTextScrollButtonPress
|
||||
pop af
|
||||
ret nc
|
||||
.SubtractCoins ; 14:692C
|
||||
call LoadCoinsToSubtract
|
||||
ld hl,$FFA1
|
||||
ld de,wPlayerCoins + 1
|
||||
ld c,$02 ; how many bytes
|
||||
ld a,$0C
|
||||
call Predef ; subtract coins (BCD daa operations)
|
||||
jp PrintPrizePrice
|
||||
.BagFull
|
||||
ld hl,PrizeRoomBagIsFullTextPtr
|
||||
jp PrintText
|
||||
.NotEnoughCoins ; 14:6945
|
||||
ld hl,SorryNeedMoreCoinsText
|
||||
jp PrintText
|
||||
.PrintOhFineThen ; 14:694B
|
||||
ld hl,OhFineThenTextPtr
|
||||
jp PrintText
|
||||
|
||||
UnknownData52951: ; 52951 (14:6951)
|
||||
; XXX what's this?
|
||||
db $00,$01,$00,$01,$00,$01,$00,$00,$01
|
||||
|
||||
HereYouGoTextPtr: ; 5295a (14:695a)
|
||||
TX_FAR _HereYouGoText
|
||||
db $0D
|
||||
db "@"
|
||||
|
||||
SoYouWantPrizeTextPtr: ; 52960 (14:6960)
|
||||
TX_FAR _SoYouWantPrizeText
|
||||
db "@"
|
||||
|
||||
SorryNeedMoreCoinsText: ; 52965 (14:6965)
|
||||
TX_FAR _SorryNeedMoreCoinsText
|
||||
db $0D
|
||||
db "@"
|
||||
|
||||
PrizeRoomBagIsFullTextPtr: ; 5296b (14:696b)
|
||||
TX_FAR _OopsYouDontHaveEnoughRoomText
|
||||
db $0D
|
||||
db "@"
|
||||
|
||||
OhFineThenTextPtr: ; 52971 (14:6971)
|
||||
TX_FAR _OhFineThenText
|
||||
db $0D ; wait keypress (A/B) without blink
|
||||
db "@"
|
||||
|
||||
GetPrizeMonLevel: ; 52977 (14:6977)
|
||||
ld a,[$CF91]
|
||||
ld b,a
|
||||
ld hl,PrizeMonLevelDictionary
|
||||
.loop ; 14:697E
|
||||
ld a,[hli]
|
||||
cp b
|
||||
jr z,.matchFound
|
||||
inc hl
|
||||
jr .loop
|
||||
.matchFound ; 14:6985
|
||||
ld a,[hl]
|
||||
ld [$D127],a
|
||||
ret
|
||||
|
||||
INCLUDE "data/prize_mon_levels.asm"
|
88
engine/menu/start_menu.asm
Executable file
88
engine/menu/start_menu.asm
Executable file
|
@ -0,0 +1,88 @@
|
|||
DisplayStartMenu:: ; 2acd (0:2acd)
|
||||
ld a,$04 ; hardcoded Bank, not sure what's it refers to
|
||||
ld [H_LOADEDROMBANK],a
|
||||
ld [$2000],a ; ROM bank 4
|
||||
ld a,[$d700] ; walking/biking/surfing
|
||||
ld [$d11a],a
|
||||
ld a, (SFX_02_3f - SFX_Headers_02) / 3 ; Start menu sound
|
||||
call PlaySound
|
||||
|
||||
RedisplayStartMenu:: ; 2adf (0:2adf)
|
||||
callba DrawStartMenu
|
||||
callba PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
|
||||
call UpdateSprites ; move sprites
|
||||
.loop
|
||||
call HandleMenuInput
|
||||
ld b,a
|
||||
.checkIfUpPressed
|
||||
bit 6,a ; was Up pressed?
|
||||
jr z,.checkIfDownPressed
|
||||
ld a,[wCurrentMenuItem] ; menu selection
|
||||
and a
|
||||
jr nz,.loop
|
||||
ld a,[wLastMenuItem]
|
||||
and a
|
||||
jr nz,.loop
|
||||
; if the player pressed tried to go past the top item, wrap around to the bottom
|
||||
ld a,[$d74b]
|
||||
bit 5,a ; does the player have the pokedex?
|
||||
ld a,6 ; there are 7 menu items with the pokedex, so the max index is 6
|
||||
jr nz,.wrapMenuItemId
|
||||
dec a ; there are only 6 menu items without the pokedex
|
||||
.wrapMenuItemId
|
||||
ld [wCurrentMenuItem],a
|
||||
call EraseMenuCursor
|
||||
jr .loop
|
||||
.checkIfDownPressed
|
||||
bit 7,a
|
||||
jr z,.buttonPressed
|
||||
; if the player pressed tried to go past the bottom item, wrap around to the top
|
||||
ld a,[$d74b]
|
||||
bit 5,a ; does the player have the pokedex?
|
||||
ld a,[wCurrentMenuItem]
|
||||
ld c,7 ; there are 7 menu items with the pokedex
|
||||
jr nz,.checkIfPastBottom
|
||||
dec c ; there are only 6 menu items without the pokedex
|
||||
.checkIfPastBottom
|
||||
cp c
|
||||
jr nz,.loop
|
||||
; the player went past the bottom, so wrap to the top
|
||||
xor a
|
||||
ld [wCurrentMenuItem],a
|
||||
call EraseMenuCursor
|
||||
jr .loop
|
||||
.buttonPressed ; A, B, or Start button pressed
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
ld a,[wCurrentMenuItem]
|
||||
ld [$cc2d],a ; save current menu item ID
|
||||
ld a,b
|
||||
and a,%00001010 ; was the Start button or B button pressed?
|
||||
jp nz,CloseStartMenu
|
||||
call SaveScreenTilesToBuffer2 ; copy background from wTileMap to wTileMapBackup2
|
||||
ld a,[$d74b]
|
||||
bit 5,a ; does the player have the pokedex?
|
||||
ld a,[wCurrentMenuItem]
|
||||
jr nz,.displayMenuItem
|
||||
inc a ; adjust position to account for missing pokedex menu item
|
||||
.displayMenuItem
|
||||
cp a,0
|
||||
jp z,StartMenu_Pokedex
|
||||
cp a,1
|
||||
jp z,StartMenu_Pokemon
|
||||
cp a,2
|
||||
jp z,StartMenu_Item
|
||||
cp a,3
|
||||
jp z,StartMenu_TrainerInfo
|
||||
cp a,4
|
||||
jp z,StartMenu_SaveReset
|
||||
cp a,5
|
||||
jp z,StartMenu_Option
|
||||
|
||||
; EXIT falls through to here
|
||||
CloseStartMenu:: ; 2b70 (0:2b70)
|
||||
call GetJoypadState
|
||||
ld a,[H_NEWLYPRESSEDBUTTONS]
|
||||
bit 0,a ; was A button newly pressed?
|
||||
jr nz,CloseStartMenu
|
||||
call LoadTextBoxTilePatterns
|
||||
jp CloseTextDisplay
|
875
engine/menu/start_sub_menus.asm
Executable file
875
engine/menu/start_sub_menus.asm
Executable file
|
@ -0,0 +1,875 @@
|
|||
StartMenu_Pokedex: ; 13095 (4:7095)
|
||||
ld a,$29
|
||||
call Predef
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call Delay3
|
||||
call LoadGBPal
|
||||
call UpdateSprites
|
||||
jp RedisplayStartMenu
|
||||
|
||||
StartMenu_Pokemon: ; 130a9 (4:70a9)
|
||||
ld a,[W_NUMINPARTY]
|
||||
and a
|
||||
jp z,RedisplayStartMenu
|
||||
xor a
|
||||
ld [$cc35],a
|
||||
ld [$d07d],a
|
||||
ld [$cfcb],a
|
||||
call DisplayPartyMenu
|
||||
jr .checkIfPokemonChosen
|
||||
.loop
|
||||
xor a
|
||||
ld [$cc35],a
|
||||
ld [$d07d],a
|
||||
call GoBackToPartyMenu
|
||||
.checkIfPokemonChosen
|
||||
jr nc,.chosePokemon
|
||||
.exitMenu
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call Func_3dbe
|
||||
call LoadGBPal
|
||||
jp RedisplayStartMenu
|
||||
.chosePokemon
|
||||
call SaveScreenTilesToBuffer1 ; save screen
|
||||
ld a,$04
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; display pokemon menu options
|
||||
ld hl,$cd3d
|
||||
ld bc,$020c ; max menu item ID, top menu item Y
|
||||
ld e,5
|
||||
.adjustMenuVariablesLoop
|
||||
dec e
|
||||
jr z,.storeMenuVariables
|
||||
ld a,[hli]
|
||||
and a
|
||||
jr z,.storeMenuVariables
|
||||
inc b
|
||||
dec c
|
||||
dec c
|
||||
jr .adjustMenuVariablesLoop
|
||||
.storeMenuVariables
|
||||
ld hl,wTopMenuItemY
|
||||
ld a,c
|
||||
ld [hli],a ; top menu item Y
|
||||
ld a,[$fff7]
|
||||
ld [hli],a ; top menu item X
|
||||
xor a
|
||||
ld [hli],a ; current menu item ID
|
||||
inc hl
|
||||
ld a,b
|
||||
ld [hli],a ; max menu item ID
|
||||
ld a,%00000011 ; A button, B button
|
||||
ld [hli],a ; menu watched keys
|
||||
xor a
|
||||
ld [hl],a
|
||||
call HandleMenuInput
|
||||
push af
|
||||
call LoadScreenTilesFromBuffer1 ; restore saved screen
|
||||
pop af
|
||||
bit 1,a ; was the B button pressed?
|
||||
jp nz,.loop
|
||||
; if the B button wasn't pressed
|
||||
ld a,[wMaxMenuItem]
|
||||
ld b,a
|
||||
ld a,[wCurrentMenuItem] ; menu selection
|
||||
cp b
|
||||
jp z,.exitMenu ; if the player chose Cancel
|
||||
dec b
|
||||
cp b
|
||||
jr z,.choseSwitch
|
||||
dec b
|
||||
cp b
|
||||
jp z,.choseStats
|
||||
ld c,a
|
||||
ld b,0
|
||||
ld hl,$cd3d
|
||||
add hl,bc
|
||||
jp .choseOutOfBattleMove
|
||||
.choseSwitch
|
||||
ld a,[W_NUMINPARTY]
|
||||
cp a,2 ; is there more than one pokemon in the party?
|
||||
jp c,StartMenu_Pokemon ; if not, no switching
|
||||
call SwitchPartyMon_Stats
|
||||
ld a,$04 ; swap pokemon positions menu
|
||||
ld [$d07d],a
|
||||
call GoBackToPartyMenu
|
||||
jp .checkIfPokemonChosen
|
||||
.choseStats
|
||||
call CleanLCD_OAM
|
||||
xor a
|
||||
ld [$cc49],a
|
||||
ld a,$36
|
||||
call Predef
|
||||
ld a,$37
|
||||
call Predef
|
||||
call ReloadMapData
|
||||
jp StartMenu_Pokemon
|
||||
.choseOutOfBattleMove
|
||||
push hl
|
||||
ld a,[wWhichPokemon]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
pop hl
|
||||
ld a,[hl]
|
||||
dec a
|
||||
add a
|
||||
ld b,0
|
||||
ld c,a
|
||||
ld hl,.outOfBattleMovePointers
|
||||
add hl,bc
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld a,[W_OBTAINEDBADGES] ; badges obtained
|
||||
jp [hl]
|
||||
.outOfBattleMovePointers
|
||||
dw .cut
|
||||
dw .fly
|
||||
dw .surf
|
||||
dw .surf
|
||||
dw .strength
|
||||
dw .flash
|
||||
dw .dig
|
||||
dw .teleport
|
||||
dw .softboiled
|
||||
.fly
|
||||
bit 2,a ; does the player have the Thunder Badge?
|
||||
jp z,.newBadgeRequired
|
||||
call CheckIfInOutsideMap
|
||||
jr z,.canFly
|
||||
ld a,[wWhichPokemon]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
ld hl,.cannotFlyHereText
|
||||
call PrintText
|
||||
jp .loop
|
||||
.canFly
|
||||
call ChooseFlyDestination
|
||||
ld a,[$d732]
|
||||
bit 3,a ; did the player decide to fly?
|
||||
jp nz,.goBackToMap
|
||||
call LoadFontTilePatterns
|
||||
ld hl,$d72e
|
||||
set 1,[hl]
|
||||
jp StartMenu_Pokemon
|
||||
.cut
|
||||
bit 1,a ; does the player have the Cascade Badge?
|
||||
jp z,.newBadgeRequired
|
||||
ld a,$3c
|
||||
call Predef
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop
|
||||
jp CloseTextDisplay
|
||||
.surf
|
||||
bit 4,a ; does the player have the Soul Badge?
|
||||
jp z,.newBadgeRequired
|
||||
callba CheckForForcedBikeSurf
|
||||
ld hl,$d728
|
||||
bit 1,[hl]
|
||||
res 1,[hl]
|
||||
jp z,.loop
|
||||
ld a,SURFBOARD
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call UseItem
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap
|
||||
.strength
|
||||
bit 3,a ; does the player have the Rainbow Badge?
|
||||
jp z,.newBadgeRequired
|
||||
ld a,$5b
|
||||
call Predef
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap
|
||||
.flash
|
||||
bit 0,a ; does the player have the Boulder Badge?
|
||||
jp z,.newBadgeRequired
|
||||
xor a
|
||||
ld [$d35d],a
|
||||
ld hl,.flashLightsAreaText
|
||||
call PrintText
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap
|
||||
.flashLightsAreaText
|
||||
TX_FAR _FlashLightsAreaText
|
||||
db "@"
|
||||
.dig
|
||||
ld a,ESCAPE_ROPE
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call UseItem
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,.loop
|
||||
call GBPalWhiteOutWithDelay3
|
||||
jp .goBackToMap
|
||||
.teleport
|
||||
call CheckIfInOutsideMap
|
||||
jr z,.canTeleport
|
||||
ld a,[wWhichPokemon]
|
||||
ld hl,W_PARTYMON1NAME
|
||||
call GetPartyMonName
|
||||
ld hl,.cannotUseTeleportNowText
|
||||
call PrintText
|
||||
jp .loop
|
||||
.canTeleport
|
||||
ld hl,.warpToLastPokemonCenterText
|
||||
call PrintText
|
||||
ld hl,$d732
|
||||
set 3,[hl]
|
||||
set 6,[hl]
|
||||
ld hl,$d72e
|
||||
set 1,[hl]
|
||||
res 4,[hl]
|
||||
ld c,60
|
||||
call DelayFrames
|
||||
call GBPalWhiteOutWithDelay3 ; zero all three palettes and wait 3 V-blanks
|
||||
jp .goBackToMap
|
||||
.warpToLastPokemonCenterText
|
||||
TX_FAR _WarpToLastPokemonCenterText
|
||||
db "@"
|
||||
.cannotUseTeleportNowText
|
||||
TX_FAR _CannotUseTeleportNowText
|
||||
db "@"
|
||||
.cannotFlyHereText
|
||||
TX_FAR _CannotFlyHereText
|
||||
db "@"
|
||||
.softboiled
|
||||
ld hl,W_PARTYMON1_MAXHP
|
||||
ld a,[wWhichPokemon]
|
||||
ld bc,44
|
||||
call AddNTimes
|
||||
ld a,[hli]
|
||||
ld [H_DIVIDEND],a
|
||||
ld a,[hl]
|
||||
ld [H_DIVIDEND + 1],a
|
||||
ld a,5
|
||||
ld [H_DIVISOR],a
|
||||
ld b,2 ; number of bytes
|
||||
call Divide
|
||||
ld bc,-33
|
||||
add hl,bc
|
||||
ld a,[hld]
|
||||
ld b,a
|
||||
ld a,[H_QUOTIENT + 3]
|
||||
sub b
|
||||
ld b,[hl]
|
||||
ld a,[H_QUOTIENT + 2]
|
||||
sbc b
|
||||
jp nc,.notHealthyEnough
|
||||
ld a,[$cc2b]
|
||||
push af
|
||||
ld a,POTION
|
||||
ld [$cf91],a
|
||||
ld [$d152],a
|
||||
call UseItem
|
||||
pop af
|
||||
ld [$cc2b],a
|
||||
jp .loop
|
||||
.notHealthyEnough ; if current HP is less than 1/5 of max HP
|
||||
ld hl,.notHealthyEnoughText
|
||||
call PrintText
|
||||
jp .loop
|
||||
.notHealthyEnoughText
|
||||
TX_FAR _NotHealthyEnoughText
|
||||
db "@"
|
||||
.goBackToMap
|
||||
call Func_3dbe
|
||||
jp CloseTextDisplay
|
||||
.newBadgeRequired
|
||||
ld hl,.newBadgeRequiredText
|
||||
call PrintText
|
||||
jp .loop
|
||||
.newBadgeRequiredText
|
||||
TX_FAR _NewBadgeRequiredText
|
||||
db "@"
|
||||
|
||||
; writes a blank tile to all possible menu cursor positions on the party menu
|
||||
ErasePartyMenuCursors: ; 132ed (4:72ed)
|
||||
FuncCoord 0,1
|
||||
ld hl,Coord
|
||||
ld bc,2 * 20 ; menu cursor positions are 2 rows apart
|
||||
ld a,6 ; 6 menu cursor positions
|
||||
.loop
|
||||
ld [hl]," "
|
||||
add hl,bc
|
||||
dec a
|
||||
jr nz,.loop
|
||||
ret
|
||||
|
||||
ItemMenuLoop: ; 132fc (4:72fc)
|
||||
call LoadScreenTilesFromBuffer2DisableBGTransfer ; restore saved screen
|
||||
call GoPAL_SET_CF1C
|
||||
|
||||
StartMenu_Item: ; 13302 (4:7302)
|
||||
ld a,[W_ISLINKBATTLE]
|
||||
dec a
|
||||
jr nz,.notInLinkBattle
|
||||
ld hl,CannotUseItemsHereText
|
||||
call PrintText
|
||||
jr .exitMenu
|
||||
.notInLinkBattle
|
||||
ld bc,wNumBagItems
|
||||
ld hl,$cf8b
|
||||
ld a,c
|
||||
ld [hli],a
|
||||
ld [hl],b ; store item bag pointer at $cf8b (for DisplayListMenuID)
|
||||
xor a
|
||||
ld [$cf93],a
|
||||
ld a,ITEMLISTMENU
|
||||
ld [wListMenuID],a
|
||||
ld a,[$cc2c]
|
||||
ld [wCurrentMenuItem],a
|
||||
call DisplayListMenuID
|
||||
ld a,[wCurrentMenuItem]
|
||||
ld [$cc2c],a
|
||||
jr nc,.choseItem
|
||||
.exitMenu
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadTextBoxTilePatterns
|
||||
call UpdateSprites ; move sprites
|
||||
jp RedisplayStartMenu
|
||||
.choseItem
|
||||
; erase menu cursor (blank each tile in front of an item name)
|
||||
ld a," "
|
||||
FuncCoord 5,4
|
||||
ld [Coord],a
|
||||
FuncCoord 5,6
|
||||
ld [Coord],a
|
||||
FuncCoord 5,8
|
||||
ld [Coord],a
|
||||
FuncCoord 5,10
|
||||
ld [Coord],a
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
xor a
|
||||
ld [$cc35],a
|
||||
ld a,[$cf91]
|
||||
cp a,BICYCLE
|
||||
jp z,.useOrTossItem
|
||||
.notBicycle1
|
||||
ld a,$06 ; use/toss menu
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID
|
||||
ld hl,wTopMenuItemY
|
||||
ld a,11
|
||||
ld [hli],a ; top menu item Y
|
||||
ld a,14
|
||||
ld [hli],a ; top menu item X
|
||||
xor a
|
||||
ld [hli],a ; current menu item ID
|
||||
inc hl
|
||||
inc a ; a = 1
|
||||
ld [hli],a ; max menu item ID
|
||||
ld a,%00000011 ; A button, B button
|
||||
ld [hli],a ; menu watched keys
|
||||
xor a
|
||||
ld [hl],a ; old menu item id
|
||||
call HandleMenuInput
|
||||
call PlaceUnfilledArrowMenuCursor
|
||||
bit 1,a ; was the B button pressed?
|
||||
jr z,.useOrTossItem
|
||||
jp ItemMenuLoop
|
||||
.useOrTossItem ; if the player made the choice to use or toss the item
|
||||
ld a,[$cf91]
|
||||
ld [$d11e],a
|
||||
call GetItemName
|
||||
call CopyStringToCF4B ; copy name to $cf4b
|
||||
ld a,[$cf91]
|
||||
cp a,BICYCLE
|
||||
jr nz,.notBicycle2
|
||||
ld a,[$d732]
|
||||
bit 5,a
|
||||
jr z,.useItem_closeMenu
|
||||
ld hl,CannotGetOffHereText
|
||||
call PrintText
|
||||
jp ItemMenuLoop
|
||||
.notBicycle2
|
||||
ld a,[wCurrentMenuItem]
|
||||
and a
|
||||
jr nz,.tossItem
|
||||
.useItem
|
||||
ld [$d152],a
|
||||
ld a,[$cf91]
|
||||
cp a,HM_01
|
||||
jr nc,.useItem_partyMenu
|
||||
ld hl,UsableItems_CloseMenu
|
||||
ld de,1
|
||||
call IsInArray
|
||||
jr c,.useItem_closeMenu
|
||||
ld a,[$cf91]
|
||||
ld hl,UsableItems_PartyMenu
|
||||
ld de,1
|
||||
call IsInArray
|
||||
jr c,.useItem_partyMenu
|
||||
call UseItem
|
||||
jp ItemMenuLoop
|
||||
.useItem_closeMenu
|
||||
xor a
|
||||
ld [$d152],a
|
||||
call UseItem
|
||||
ld a,[$cd6a]
|
||||
and a
|
||||
jp z,ItemMenuLoop
|
||||
jp CloseStartMenu
|
||||
.useItem_partyMenu
|
||||
ld a,[$cfcb]
|
||||
push af
|
||||
call UseItem
|
||||
ld a,[$cd6a]
|
||||
cp a,$02
|
||||
jp z,.partyMenuNotDisplayed
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call Func_3dbe
|
||||
pop af
|
||||
ld [$cfcb],a
|
||||
jp StartMenu_Item
|
||||
.partyMenuNotDisplayed
|
||||
pop af
|
||||
ld [$cfcb],a
|
||||
jp ItemMenuLoop
|
||||
.tossItem
|
||||
call IsKeyItem
|
||||
ld a,[$d124]
|
||||
and a
|
||||
jr nz,.skipAskingQuantity
|
||||
ld a,[$cf91]
|
||||
call IsItemHM
|
||||
jr c,.skipAskingQuantity
|
||||
call DisplayChooseQuantityMenu
|
||||
inc a
|
||||
jr z,.tossZeroItems
|
||||
.skipAskingQuantity
|
||||
ld hl,wNumBagItems
|
||||
call TossItem
|
||||
.tossZeroItems
|
||||
jp ItemMenuLoop
|
||||
|
||||
CannotUseItemsHereText: ; 1342a (4:742a)
|
||||
TX_FAR _CannotUseItemsHereText
|
||||
db "@"
|
||||
|
||||
CannotGetOffHereText: ; 1342f (4:742f)
|
||||
TX_FAR _CannotGetOffHereText
|
||||
db "@"
|
||||
|
||||
; items which bring up the party menu when used
|
||||
UsableItems_PartyMenu: ; 13434 (4:7434)
|
||||
db MOON_STONE
|
||||
db ANTIDOTE
|
||||
db BURN_HEAL
|
||||
db ICE_HEAL
|
||||
db AWAKENING
|
||||
db PARLYZ_HEAL
|
||||
db FULL_RESTORE
|
||||
db MAX_POTION
|
||||
db HYPER_POTION
|
||||
db SUPER_POTION
|
||||
db POTION
|
||||
db FIRE_STONE
|
||||
db THUNDER_STONE
|
||||
db WATER_STONE
|
||||
db HP_UP
|
||||
db PROTEIN
|
||||
db IRON
|
||||
db CARBOS
|
||||
db CALCIUM
|
||||
db RARE_CANDY
|
||||
db LEAF_STONE
|
||||
db FULL_HEAL
|
||||
db REVIVE
|
||||
db MAX_REVIVE
|
||||
db FRESH_WATER
|
||||
db SODA_POP
|
||||
db LEMONADE
|
||||
db X_ATTACK
|
||||
db X_DEFEND
|
||||
db X_SPEED
|
||||
db X_SPECIAL
|
||||
db PP_UP
|
||||
db ETHER
|
||||
db MAX_ETHER
|
||||
db ELIXER
|
||||
db MAX_ELIXER
|
||||
db $ff
|
||||
|
||||
; items which close the item menu when used
|
||||
UsableItems_CloseMenu: ; 13459 (4:7459)
|
||||
db ESCAPE_ROPE
|
||||
db ITEMFINDER
|
||||
db POKE_FLUTE
|
||||
db OLD_ROD
|
||||
db GOOD_ROD
|
||||
db SUPER_ROD
|
||||
db $ff
|
||||
|
||||
StartMenu_TrainerInfo: ; 13460 (4:7460)
|
||||
call GBPalWhiteOut
|
||||
call ClearScreen
|
||||
call UpdateSprites ; move sprites
|
||||
ld a,[$ffd7]
|
||||
push af
|
||||
xor a
|
||||
ld [$ffd7],a
|
||||
call DrawTrainerInfo
|
||||
ld a,$2e
|
||||
call Predef ; draw badges
|
||||
ld b,$0d
|
||||
call GoPAL_SET
|
||||
call GBPalNormal
|
||||
call WaitForTextScrollButtonPress ; wait for button press
|
||||
call GBPalWhiteOut
|
||||
call LoadFontTilePatterns
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call GoPAL_SET_CF1C
|
||||
call ReloadMapData
|
||||
call LoadGBPal
|
||||
pop af
|
||||
ld [$ffd7],a
|
||||
jp RedisplayStartMenu
|
||||
|
||||
; loads tile patterns and draws everything except for gym leader faces / badges
|
||||
DrawTrainerInfo: ; 1349a (4:749a)
|
||||
ld de,RedPicFront
|
||||
ld bc,(BANK(RedPicFront) << 8) | $01
|
||||
ld a,$3b
|
||||
call Predef
|
||||
call DisableLCD
|
||||
FuncCoord 0,2
|
||||
ld hl,Coord
|
||||
ld a," "
|
||||
call TrainerInfo_DrawVerticalLine
|
||||
FuncCoord 1,2
|
||||
ld hl,Coord
|
||||
call TrainerInfo_DrawVerticalLine
|
||||
ld hl,$9070
|
||||
ld de,$9000
|
||||
ld bc,$01c0
|
||||
call CopyData
|
||||
ld hl,TrainerInfoTextBoxTileGraphics ; $7b98 ; trainer info text box tile patterns
|
||||
ld de,$9770
|
||||
ld bc,$0080
|
||||
push bc
|
||||
call TrainerInfo_FarCopyData
|
||||
ld hl,BlankLeaderNames ; $7c28
|
||||
ld de,$9600
|
||||
ld bc,$0170
|
||||
call TrainerInfo_FarCopyData
|
||||
pop bc
|
||||
ld hl,BadgeNumbersTileGraphics ; $7d98 ; badge number tile patterns
|
||||
ld de,$8d80
|
||||
call TrainerInfo_FarCopyData
|
||||
ld hl,GymLeaderFaceAndBadgeTileGraphics ; $6a9e ; gym leader face and badge tile patterns
|
||||
ld de,$9200
|
||||
ld bc,$0400
|
||||
ld a,$03
|
||||
call FarCopyData2
|
||||
ld hl,TextBoxGraphics ; $6288
|
||||
ld de,$00d0
|
||||
add hl,de ; hl = colon tile pattern
|
||||
ld de,$8d60
|
||||
ld bc,$0010
|
||||
ld a,$04
|
||||
push bc
|
||||
call FarCopyData2
|
||||
pop bc
|
||||
ld hl,TrainerInfoTextBoxTileGraphics + $80 ; $7c18 ; background tile pattern
|
||||
ld de,$8d70
|
||||
call TrainerInfo_FarCopyData
|
||||
call EnableLCD
|
||||
ld hl,$cd3d
|
||||
ld a,18 + 1
|
||||
ld [hli],a
|
||||
dec a
|
||||
ld [hli],a
|
||||
ld [hl],1
|
||||
FuncCoord 0,0
|
||||
ld hl,Coord
|
||||
call TrainerInfo_DrawTextBox
|
||||
ld hl,$cd3d
|
||||
ld a,16 + 1
|
||||
ld [hli],a
|
||||
dec a
|
||||
ld [hli],a
|
||||
ld [hl],3
|
||||
FuncCoord 1,10
|
||||
ld hl,Coord
|
||||
call TrainerInfo_DrawTextBox
|
||||
FuncCoord 0,10
|
||||
ld hl,Coord
|
||||
ld a,$d7
|
||||
call TrainerInfo_DrawVerticalLine
|
||||
FuncCoord 19,10
|
||||
ld hl,Coord
|
||||
call TrainerInfo_DrawVerticalLine
|
||||
FuncCoord 6,9
|
||||
ld hl,Coord
|
||||
ld de,TrainerInfo_BadgesText
|
||||
call PlaceString
|
||||
FuncCoord 2,2
|
||||
ld hl,Coord
|
||||
ld de,TrainerInfo_NameMoneyTimeText
|
||||
call PlaceString
|
||||
FuncCoord 7,2
|
||||
ld hl,Coord
|
||||
ld de,W_PLAYERNAME
|
||||
call PlaceString
|
||||
FuncCoord 8,4
|
||||
ld hl,Coord
|
||||
ld de,wPlayerMoney
|
||||
ld c,$e3
|
||||
call PrintBCDNumber
|
||||
FuncCoord 9,6
|
||||
ld hl,Coord
|
||||
ld de,$da41 ; hours
|
||||
ld bc,$4103
|
||||
call PrintNumber
|
||||
ld [hl],$d6 ; colon tile ID
|
||||
inc hl
|
||||
ld de,$da43 ; minutes
|
||||
ld bc,$8102
|
||||
jp PrintNumber
|
||||
|
||||
TrainerInfo_FarCopyData: ; 1357f (4:757f)
|
||||
ld a,$0b
|
||||
jp FarCopyData2
|
||||
|
||||
TrainerInfo_NameMoneyTimeText: ; 13584 (4:7584)
|
||||
db "NAME/"
|
||||
next "MONEY/"
|
||||
next "TIME/@"
|
||||
|
||||
; $76 is a circle tile
|
||||
TrainerInfo_BadgesText: ; 13597 (4:7597)
|
||||
db $76,"BADGES",$76,"@"
|
||||
|
||||
; draws a text box on the trainer info screen
|
||||
; height is always 6
|
||||
; INPUT:
|
||||
; hl = destination address
|
||||
; [$cd3d] = width + 1
|
||||
; [$cd3e] = width
|
||||
; [$cd3f] = distance from the end of a text box row to the start of the next
|
||||
TrainerInfo_DrawTextBox: ; 135a0 (4:75a0)
|
||||
ld a,$79 ; upper left corner tile ID
|
||||
ld de,$7a7b ; top edge and upper right corner tile ID's
|
||||
call TrainerInfo_DrawHorizontalEdge ; draw top edge
|
||||
call TrainerInfo_NextTextBoxRow
|
||||
ld a,[$cd3d] ; width of the text box plus one
|
||||
ld e,a
|
||||
ld d,0
|
||||
ld c,6 ; height of the text box
|
||||
.loop
|
||||
ld [hl],$7c ; left edge tile ID
|
||||
add hl,de
|
||||
ld [hl],$78 ; right edge tile ID
|
||||
call TrainerInfo_NextTextBoxRow
|
||||
dec c
|
||||
jr nz,.loop
|
||||
ld a,$7d ; lower left corner tile ID
|
||||
ld de,$777e ; bottom edge and lower right corner tile ID's
|
||||
|
||||
TrainerInfo_DrawHorizontalEdge: ; 135c3 (4:75c3)
|
||||
ld [hli],a ; place left corner tile
|
||||
ld a,[$cd3e] ; width of the text box
|
||||
ld c,a
|
||||
ld a,d
|
||||
.loop
|
||||
ld [hli],a ; place edge tile
|
||||
dec c
|
||||
jr nz,.loop
|
||||
ld a,e
|
||||
ld [hl],a ; place right corner tile
|
||||
ret
|
||||
|
||||
TrainerInfo_NextTextBoxRow: ; 135d0 (4:75d0)
|
||||
ld a,[$cd3f] ; distance to the start of the next row
|
||||
.loop
|
||||
inc hl
|
||||
dec a
|
||||
jr nz,.loop
|
||||
ret
|
||||
|
||||
; draws a vertical line
|
||||
; INPUT:
|
||||
; hl = address of top tile in the line
|
||||
; a = tile ID
|
||||
TrainerInfo_DrawVerticalLine: ; 135d8 (4:75d8)
|
||||
ld de,20
|
||||
ld c,8
|
||||
.loop
|
||||
ld [hl],a
|
||||
add hl,de
|
||||
dec c
|
||||
jr nz,.loop
|
||||
ret
|
||||
|
||||
StartMenu_SaveReset: ; 135e3 (4:75e3)
|
||||
ld a,[$d72e]
|
||||
bit 6,a ; is the player using the link feature?
|
||||
jp nz,InitGame
|
||||
ld a,$3f
|
||||
call Predef ; save the game
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
jp HoldTextDisplayOpen
|
||||
|
||||
StartMenu_Option: ; 135f6 (4:75f6)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED],a
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
callab DisplayOptionMenu
|
||||
call LoadScreenTilesFromBuffer2 ; restore saved screen
|
||||
call LoadTextBoxTilePatterns
|
||||
call UpdateSprites
|
||||
jp RedisplayStartMenu
|
||||
|
||||
SwitchPartyMon: ; 13613 (4:7613)
|
||||
call SwitchPartyMon_Stats
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
call SwitchPartyMon_OAM
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
call SwitchPartyMon_OAM
|
||||
jp RedrawPartyMenu_
|
||||
|
||||
SwitchPartyMon_OAM: ; 13625 (4:7625)
|
||||
push af
|
||||
ld hl, wTileMap
|
||||
ld bc, $28
|
||||
call AddNTimes
|
||||
ld c, $28
|
||||
ld a, $7f
|
||||
.asm_13633
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_13633
|
||||
pop af
|
||||
ld hl, wOAMBuffer
|
||||
ld bc, $10
|
||||
call AddNTimes
|
||||
ld de, $4
|
||||
ld c, e
|
||||
.asm_13645
|
||||
ld [hl], $a0
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_13645
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_58 - SFX_Headers_02) / 3
|
||||
jp PlaySound
|
||||
|
||||
SwitchPartyMon_Stats: ; 13653 (4:7653)
|
||||
ld a, [$cc35]
|
||||
and a
|
||||
jr nz, .asm_13661
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
inc a
|
||||
ld [$cc35], a
|
||||
ret
|
||||
.asm_13661
|
||||
xor a
|
||||
ld [$d07d], a
|
||||
ld a, [$cc35]
|
||||
dec a
|
||||
ld b, a
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
cp b
|
||||
jr nz, .asm_1367b
|
||||
xor a
|
||||
ld [$cc35], a
|
||||
ld [$d07d], a
|
||||
ret
|
||||
.asm_1367b
|
||||
ld a, b
|
||||
ld [$cc35], a
|
||||
push hl
|
||||
push de
|
||||
ld hl, W_PARTYMON1 ; $d164
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
add l
|
||||
ld l, a
|
||||
jr nc, .asm_1368e
|
||||
inc h
|
||||
.asm_1368e
|
||||
ld a, [$cc35]
|
||||
add e
|
||||
ld e, a
|
||||
jr nc, .asm_13696
|
||||
inc d
|
||||
.asm_13696
|
||||
ld a, [hl]
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld a, [de]
|
||||
ld [hl], a
|
||||
ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld [de], a
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
ld bc, $2c
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
call AddNTimes
|
||||
push hl
|
||||
ld de, $cc97
|
||||
ld bc, $2c
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1_NUM ; $d16b (aliases: W_PARTYMON1DATA)
|
||||
ld bc, $2c
|
||||
ld a, [$cc35]
|
||||
call AddNTimes
|
||||
pop de
|
||||
push hl
|
||||
ld bc, $2c
|
||||
call CopyData
|
||||
pop de
|
||||
ld hl, $cc97
|
||||
ld bc, $2c
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1OT ; $d273
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
call SkipFixedLengthTextEntries
|
||||
push hl
|
||||
ld de, $cc97
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1OT ; $d273
|
||||
ld a, [$cc35]
|
||||
call SkipFixedLengthTextEntries
|
||||
pop de
|
||||
push hl
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
pop de
|
||||
ld hl, $cc97
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
call SkipFixedLengthTextEntries
|
||||
push hl
|
||||
ld de, $cc97
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
ld a, [$cc35]
|
||||
call SkipFixedLengthTextEntries
|
||||
pop de
|
||||
push hl
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
pop de
|
||||
ld hl, $cc97
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld a, [$cc35]
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
xor a
|
||||
ld [$cc35], a
|
||||
ld [$d07d], a
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
446
engine/menu/status_screen.asm
Executable file
446
engine/menu/status_screen.asm
Executable file
|
@ -0,0 +1,446 @@
|
|||
; Predef 0x37
|
||||
StatusScreen: ; 12953 (4:6953)
|
||||
call LoadMonData
|
||||
ld a, [$cc49]
|
||||
cp $2 ; 2 means we're in a PC box
|
||||
jr c, .DontRecalculate ; 0x1295b $14
|
||||
ld a, [$cf9b]
|
||||
ld [$cfb9], a
|
||||
ld [$d127], a
|
||||
ld hl, $cfa8
|
||||
ld de, $cfba
|
||||
ld b, $1
|
||||
call CalcStats ; Recalculate stats
|
||||
.DontRecalculate
|
||||
ld hl, $d72c
|
||||
set 1, [hl]
|
||||
ld a, $33
|
||||
ld [$ff24], a ; Reduce the volume
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call ClearScreen
|
||||
call UpdateSprites ; move sprites (?)
|
||||
call LoadHpBarAndStatusTilePatterns
|
||||
ld de, BattleHudTiles1 ; $6080 ; source
|
||||
ld hl, $96d0 ; dest
|
||||
ld bc, (BANK(BattleHudTiles1) << 8) + $03 ; bank bytes/8
|
||||
call CopyVideoDataDouble ; ·│ :L and halfarrow line end
|
||||
ld de, BattleHudTiles2 ; $6098
|
||||
ld hl, $9780
|
||||
ld bc, (BANK(BattleHudTiles2) << 8) + $01
|
||||
call CopyVideoDataDouble ; │
|
||||
ld de, BattleHudTiles3 ; $60b0
|
||||
ld hl, $9760
|
||||
ld bc, (BANK(BattleHudTiles3) << 8) + $02
|
||||
call CopyVideoDataDouble ; ─┘
|
||||
ld de, PTile
|
||||
ld hl, $9720
|
||||
ld bc,(BANK(PTile) << 8 | $01)
|
||||
call CopyVideoDataDouble ; P (for PP), inline
|
||||
ld a, [$ffd7]
|
||||
push af
|
||||
xor a
|
||||
ld [$ffd7], a
|
||||
FuncCoord 19,1
|
||||
ld hl, Coord
|
||||
ld bc, $060a
|
||||
call DrawLineBox ; Draws the box around name, HP and status
|
||||
ld de, $fffa
|
||||
add hl, de
|
||||
ld [hl], $f2 ; . after No ("." is a different one)
|
||||
dec hl
|
||||
ld [hl], "№"
|
||||
FuncCoord 19,9
|
||||
ld hl, Coord
|
||||
ld bc, $0806
|
||||
call DrawLineBox ; Draws the box around types, ID No. and OT
|
||||
FuncCoord 10,9
|
||||
ld hl, Coord
|
||||
ld de, Type1Text
|
||||
call PlaceString ; "TYPE1/"
|
||||
FuncCoord 11,3
|
||||
ld hl, Coord
|
||||
PREDEF DrawHPBarPredef ; predef $5f
|
||||
ld hl, $cf25
|
||||
call GetHealthBarColor
|
||||
ld b, $3
|
||||
call GoPAL_SET ; SGB palette
|
||||
FuncCoord 16,6
|
||||
ld hl, Coord
|
||||
ld de, $cf9c
|
||||
call PrintStatusCondition
|
||||
jr nz, .StatusWritten ; 0x129fc $9
|
||||
FuncCoord 16,6
|
||||
ld hl, Coord
|
||||
ld de, OKText
|
||||
call PlaceString ; "OK"
|
||||
.StatusWritten
|
||||
FuncCoord 9,6
|
||||
ld hl, Coord
|
||||
ld de, StatusText
|
||||
call PlaceString ; "STATUS/"
|
||||
FuncCoord 14,2
|
||||
ld hl, Coord
|
||||
call PrintLevel ; Pokémon level
|
||||
ld a, [$d0b8]
|
||||
ld [$d11e], a
|
||||
ld [$d0b5], a
|
||||
ld a, $3a
|
||||
call Predef
|
||||
FuncCoord 3,7
|
||||
ld hl, Coord
|
||||
ld de, $d11e
|
||||
ld bc, $8103 ; Zero-padded, 3
|
||||
call PrintNumber ; Pokémon no.
|
||||
FuncCoord 11,10
|
||||
ld hl, Coord
|
||||
ld a, $4b
|
||||
call Predef ; Prints the type (?)
|
||||
ld hl, NamePointers2 ; $6a9d
|
||||
call .unk_12a7e
|
||||
ld d, h
|
||||
ld e, l
|
||||
FuncCoord 9,1
|
||||
ld hl, Coord
|
||||
call PlaceString ; Pokémon name
|
||||
ld hl, OTPointers ; $6a95
|
||||
call .unk_12a7e
|
||||
ld d, h
|
||||
ld e, l
|
||||
FuncCoord 12,16
|
||||
ld hl, Coord
|
||||
call PlaceString ; OT
|
||||
FuncCoord 12,14
|
||||
ld hl, Coord
|
||||
ld de, $cfa4
|
||||
ld bc, $8205 ; 5
|
||||
call PrintNumber ; ID Number
|
||||
ld d, $0
|
||||
call PrintStatsBox
|
||||
call Delay3
|
||||
call GBPalNormal
|
||||
FuncCoord 1, 0 ; $c3a1
|
||||
ld hl, Coord
|
||||
call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture
|
||||
ld a, [$cf91]
|
||||
call PlayCry ; play Pokémon cry
|
||||
call WaitForTextScrollButtonPress ; wait for button
|
||||
pop af
|
||||
ld [$ffd7], a
|
||||
ret
|
||||
.unk_12a7e ; 0x12a7e ; I don't know what this does, iterates over pointers?
|
||||
ld a, [$cc49]
|
||||
add a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [$cc49]
|
||||
cp $3
|
||||
ret z
|
||||
ld a, [wWhichPokemon]
|
||||
jp SkipFixedLengthTextEntries
|
||||
|
||||
OTPointers: ; 12a95 (4:6a95)
|
||||
dw W_PARTYMON1OT
|
||||
dw W_ENEMYMON1OT
|
||||
dw W_BOXMON1OT
|
||||
dw W_DAYCAREMONOT
|
||||
|
||||
NamePointers2: ; 12a9d (4:6a9d)
|
||||
dw W_PARTYMON1NAME
|
||||
dw W_ENEMYMON1NAME
|
||||
dw W_BOXMON1NAME
|
||||
dw W_DAYCAREMONNAME
|
||||
|
||||
Type1Text: ; 12aa5 (4:6aa5)
|
||||
db "TYPE1/", $4e
|
||||
|
||||
Type2Text: ; 12aac (4:6aac)
|
||||
db "TYPE2/", $4e
|
||||
|
||||
IDNoText: ; 12ab3 (4:6ab3)
|
||||
db $73, "№", "/", $4e
|
||||
|
||||
OTText: ; 12ab7 (4:6ab7)
|
||||
db "OT/", $4e, "@"
|
||||
|
||||
StatusText: ; 12abc (4:6abc)
|
||||
db "STATUS/@"
|
||||
|
||||
OKText: ; 12ac4 (4:6ac4)
|
||||
db "OK@"
|
||||
|
||||
; Draws a line starting from hl high b and wide c
|
||||
DrawLineBox ; 0x12ac7
|
||||
ld de, $0014 ; New line
|
||||
.PrintVerticalLine
|
||||
ld [hl], $78 ; │
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .PrintVerticalLine ; 0x12ace $fa
|
||||
ld [hl], $77 ; ┘
|
||||
dec hl
|
||||
.PrintHorizLine
|
||||
ld [hl], $76 ; ─
|
||||
dec hl
|
||||
dec c
|
||||
jr nz, .PrintHorizLine ; 0x12ad7 $fa
|
||||
ld [hl], $6f ; ← (halfarrow ending)
|
||||
ret
|
||||
|
||||
PTile: ; 12adc (4:6adc) ; This is a single 1bpp "P" tile
|
||||
INCBIN "gfx/p_tile.1bpp"
|
||||
|
||||
PrintStatsBox: ; 12ae4 (4:6ae4)
|
||||
ld a, d
|
||||
and a ; a is 0 from the status screen
|
||||
jr nz, .DifferentBox ; 0x12ae6 $12
|
||||
FuncCoord 0,8
|
||||
ld hl, Coord
|
||||
ld b, $8
|
||||
ld c, $8
|
||||
call TextBoxBorder ; Draws the box
|
||||
FuncCoord 1,9 ; Start printing stats from here
|
||||
ld hl, Coord
|
||||
ld bc, $0019 ; Number offset
|
||||
jr .PrintStats ; 0x12af8 $10
|
||||
.DifferentBox
|
||||
FuncCoord 9,2
|
||||
ld hl, Coord
|
||||
ld b, $8
|
||||
ld c, $9
|
||||
call TextBoxBorder
|
||||
FuncCoord 11, 3 ; $c3e7
|
||||
ld hl, Coord
|
||||
ld bc, $0018
|
||||
.PrintStats
|
||||
push bc
|
||||
push hl
|
||||
ld de, StatsText
|
||||
call PlaceString
|
||||
pop hl
|
||||
pop bc
|
||||
add hl, bc
|
||||
ld de, $cfbc
|
||||
ld bc, $0203 ; three digits
|
||||
call PrintStat
|
||||
ld de, $cfbe
|
||||
call PrintStat
|
||||
ld de, $cfc0
|
||||
call PrintStat
|
||||
ld de, $cfc2
|
||||
jp PrintNumber
|
||||
PrintStat
|
||||
push hl
|
||||
call PrintNumber
|
||||
pop hl
|
||||
ld de, $0028
|
||||
add hl, de
|
||||
ret
|
||||
|
||||
StatsText: ; 12b3a (4:6b3a)
|
||||
db "ATTACK"
|
||||
next "DEFENSE"
|
||||
next "SPEED"
|
||||
next "SPECIAL@"
|
||||
|
||||
StatusScreen2: ; 12b57 (4:6b57)
|
||||
ld a, [$ffd7]
|
||||
push af
|
||||
xor a
|
||||
ld [$ffd7], a
|
||||
ld [$ffba], a
|
||||
ld bc, $0005
|
||||
ld hl, $d0dc
|
||||
call FillMemory
|
||||
ld hl, $cfa0
|
||||
ld de, $d0dc
|
||||
ld bc, $0004
|
||||
call CopyData
|
||||
callab Func_39b87
|
||||
FuncCoord 9,2
|
||||
ld hl, Coord
|
||||
ld bc, $050a
|
||||
call ClearScreenArea ; Clear under name
|
||||
FuncCoord 19, 3 ; $c3ef
|
||||
ld hl, Coord
|
||||
ld [hl], $78
|
||||
FuncCoord 0,8
|
||||
ld hl, Coord
|
||||
ld b, $8
|
||||
ld c, $12
|
||||
call TextBoxBorder ; Draw move container
|
||||
FuncCoord 2,9
|
||||
ld hl, Coord
|
||||
ld de, $d0e1
|
||||
call PlaceString ; Print moves
|
||||
ld a, [$cd6c]
|
||||
inc a
|
||||
ld c, a
|
||||
ld a, $4
|
||||
sub c
|
||||
ld b, a ; Number of moves ?
|
||||
FuncCoord 11,10
|
||||
ld hl, Coord
|
||||
ld de, $0028
|
||||
ld a, $72
|
||||
call Func_12ccb ; Print "PP"
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .InitPP ; 0x12bb3 $6
|
||||
ld c, a
|
||||
ld a, "-"
|
||||
call Func_12ccb ; Fill the rest with --
|
||||
.InitPP ; 12bbb
|
||||
ld hl, $cfa0
|
||||
FuncCoord 14,10
|
||||
ld de, Coord
|
||||
ld b, $0
|
||||
.PrintPP ; 12bc3
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .PPDone ; 0x12bc5 $4a
|
||||
push bc
|
||||
push hl
|
||||
push de
|
||||
ld hl, wCurrentMenuItem
|
||||
ld a, [hl]
|
||||
push af
|
||||
ld a, b
|
||||
ld [hl], a
|
||||
push hl
|
||||
callab GetMaxPP
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop hl
|
||||
push hl
|
||||
ld bc, $0014
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and $3f
|
||||
ld [$cd71], a
|
||||
ld h, d
|
||||
ld l, e
|
||||
push hl
|
||||
ld de, $cd71
|
||||
ld bc, $0102
|
||||
call PrintNumber
|
||||
ld a, "/"
|
||||
ld [hli], a
|
||||
ld de, $d11e
|
||||
ld bc, $0102
|
||||
call PrintNumber
|
||||
pop hl
|
||||
ld de, $0028
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
pop hl
|
||||
pop bc
|
||||
inc b
|
||||
ld a, b
|
||||
cp $4
|
||||
jr nz, .PrintPP ; 0x12c0f $b2
|
||||
.PPDone
|
||||
FuncCoord 9,3
|
||||
ld hl, Coord
|
||||
ld de, EXPPointsText
|
||||
call PlaceString
|
||||
ld a, [$cfb9] ; level
|
||||
push af
|
||||
cp 100
|
||||
jr z, .Level100 ; 0x12c20 $4
|
||||
inc a
|
||||
ld [$cfb9], a ; Increase temporarily if not 100
|
||||
.Level100
|
||||
FuncCoord 14,6
|
||||
ld hl, Coord
|
||||
ld [hl], $70 ; 1-tile "to"
|
||||
inc hl
|
||||
inc hl
|
||||
call PrintLevel
|
||||
pop af
|
||||
ld [$cfb9], a
|
||||
ld de, $cfa6
|
||||
FuncCoord 12,4
|
||||
ld hl, Coord
|
||||
ld bc, $0307
|
||||
call PrintNumber ; exp
|
||||
call .asm_12c86
|
||||
ld de, $cfa6
|
||||
FuncCoord 7,6
|
||||
ld hl, Coord
|
||||
ld bc, $0307
|
||||
call PrintNumber
|
||||
FuncCoord 9,0
|
||||
ld hl, Coord
|
||||
call Func_12cc3
|
||||
FuncCoord 9,1
|
||||
ld hl, Coord
|
||||
call Func_12cc3
|
||||
ld a, [$d0b8]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
FuncCoord 9,1
|
||||
ld hl, Coord
|
||||
call PlaceString
|
||||
ld a, $1
|
||||
ld [$ffba], a
|
||||
call Delay3
|
||||
call WaitForTextScrollButtonPress ; wait for button
|
||||
pop af
|
||||
ld [$ffd7], a
|
||||
ld hl, $d72c
|
||||
res 1, [hl]
|
||||
ld a, $77
|
||||
ld [$ff24], a
|
||||
call GBPalWhiteOut
|
||||
jp ClearScreen
|
||||
.asm_12c86 ; This does some magic with lvl/exp?
|
||||
ld a, [$cfb9] ; Load level
|
||||
cp $64
|
||||
jr z, .asm_12ca7 ; 0x12c8b $1a ; If 100
|
||||
inc a
|
||||
ld d, a
|
||||
callab CalcExperience
|
||||
ld hl, $cfa8
|
||||
ld a, [$ff98]
|
||||
sub [hl]
|
||||
ld [hld], a
|
||||
ld a, [$ff97]
|
||||
sbc [hl]
|
||||
ld [hld], a
|
||||
ld a, [$ff96]
|
||||
sbc [hl]
|
||||
ld [hld], a
|
||||
ret
|
||||
.asm_12ca7
|
||||
ld hl, $cfa6
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
EXPPointsText: ; 12caf (4:6caf)
|
||||
db "EXP POINTS", $4e
|
||||
|
||||
LevelUpText: ; 12cba (4:6cba)
|
||||
db "LEVEL UP@"
|
||||
|
||||
Func_12cc3: ; 12cc3 (4:6cc3)
|
||||
ld bc, $a
|
||||
ld a, $7f
|
||||
jp FillMemory
|
||||
|
||||
Func_12ccb: ; 12ccb (4:6ccb)
|
||||
ld [hli], a
|
||||
ld [hld], a
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, Func_12ccb
|
||||
ret
|
138
engine/menu/vending_machine.asm
Executable file
138
engine/menu/vending_machine.asm
Executable file
|
@ -0,0 +1,138 @@
|
|||
VendingMachineMenu: ; 74ee0 (1d:4ee0)
|
||||
ld hl, VendingMachineText1
|
||||
call PrintText
|
||||
ld a, $13
|
||||
ld [$d125], a
|
||||
call DisplayTextBoxID
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wLastMenuItem], a ; $cc2a
|
||||
ld a, $3
|
||||
ld [wMenuWatchedKeys], a ; $cc29
|
||||
ld a, $3
|
||||
ld [wMaxMenuItem], a ; $cc28
|
||||
ld a, $5
|
||||
ld [wTopMenuItemY], a ; $cc24
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
FuncCoord 0, 3 ; $c3dc
|
||||
ld hl, Coord
|
||||
ld b, $8
|
||||
ld c, $c
|
||||
call TextBoxBorder
|
||||
call UpdateSprites
|
||||
FuncCoord 2, 5 ; $c406
|
||||
ld hl, Coord
|
||||
ld de, DrinkText
|
||||
call PlaceString
|
||||
FuncCoord 9, 6 ; $c421
|
||||
ld hl, Coord
|
||||
ld de, DrinkPriceText
|
||||
call PlaceString
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jr nz, .asm_74f93
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
cp $3
|
||||
jr z, .asm_74f93
|
||||
xor a
|
||||
ld [$ff9f], a
|
||||
ld [$ffa1], a
|
||||
ld a, $2
|
||||
ld [$ffa0], a
|
||||
call HasEnoughMoney
|
||||
jr nc, .enoughMoney
|
||||
ld hl, VendingMachineText4
|
||||
jp PrintText
|
||||
.enoughMoney
|
||||
call Func_74fe7
|
||||
ld a, [$ffdb]
|
||||
ld b, a
|
||||
ld c, 1
|
||||
call GiveItem
|
||||
jr nc, .BagFull
|
||||
ld b, $3c ; number of times to play the "brrrrr" sound
|
||||
.playDeliverySound ; 0x74f63
|
||||
ld c, $2
|
||||
call DelayFrames
|
||||
push bc
|
||||
ld a, (SFX_02_53 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .playDeliverySound
|
||||
.asm_74f72
|
||||
ld hl, VendingMachineText5
|
||||
call PrintText
|
||||
ld hl, $ffde
|
||||
ld de, wPlayerMoney + 2 ; $d349
|
||||
ld c, $3
|
||||
ld a, $c
|
||||
call Predef ; indirect jump to Func_f836 (f836 (3:7836))
|
||||
ld a, $13
|
||||
ld [$d125], a
|
||||
jp DisplayTextBoxID
|
||||
.BagFull
|
||||
ld hl, VendingMachineText6
|
||||
jp PrintText
|
||||
.asm_74f93
|
||||
ld hl, VendingMachineText7
|
||||
jp PrintText
|
||||
|
||||
VendingMachineText1: ; 74f99 (1d:4f99)
|
||||
TX_FAR _VendingMachineText1
|
||||
db "@"
|
||||
|
||||
DrinkText: ; 74f9e (1d:4f9e)
|
||||
db "FRESH WATER"
|
||||
next "SODA POP"
|
||||
next "LEMONADE"
|
||||
next "CANCEL@"
|
||||
|
||||
DrinkPriceText: ; 74fc3 (1d:4fc3)
|
||||
db "¥200"
|
||||
next "¥300"
|
||||
next "¥350",$4E,"@"
|
||||
|
||||
VendingMachineText4: ; 74fd3 (1d:4fd3)
|
||||
TX_FAR _VendingMachineText4
|
||||
db "@"
|
||||
|
||||
VendingMachineText5: ; 74fd8 (1d:4fd8)
|
||||
TX_FAR _VendingMachineText5
|
||||
db "@"
|
||||
|
||||
VendingMachineText6: ; 74fdd (1d:4fdd)
|
||||
TX_FAR _VendingMachineText6
|
||||
db "@"
|
||||
|
||||
VendingMachineText7: ; 74fe2 (1d:4fe2)
|
||||
TX_FAR _VendingMachineText7
|
||||
db "@"
|
||||
|
||||
Func_74fe7: ; 74fe7 (1d:4fe7)
|
||||
ld hl, VendingPrices
|
||||
ld a, [$cc26]
|
||||
add a
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld [$ffdb], a
|
||||
ld a, [hli]
|
||||
ld [$ffdc], a
|
||||
ld a, [hli]
|
||||
ld [$ffdd], a
|
||||
ld a, [hl]
|
||||
ld [$ffde], a
|
||||
ret
|
||||
|
||||
VendingPrices: ; 75000 (1d:5000)
|
||||
db FRESH_WATER,$00,$02,$00
|
||||
db SODA_POP, $00,$03,$00
|
||||
db LEMONADE, $00,$03,$50
|
403
engine/mon_party_sprites.asm
Executable file
403
engine/mon_party_sprites.asm
Executable file
|
@ -0,0 +1,403 @@
|
|||
AnimatePartyMon_ForceSpeed1: ; 716f7 (1c:56f7)
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld b, a
|
||||
inc a
|
||||
jr GetAnimationSpeed
|
||||
|
||||
; $cf1f contains the party mon's health bar colors
|
||||
; 0: green
|
||||
; 1: yellow
|
||||
; 2: red
|
||||
AnimatePartyMon: ; 716ff (1c:56ff)
|
||||
ld hl, $cf1f
|
||||
ld a, [wCurrentMenuItem]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
|
||||
GetAnimationSpeed: ; 7170a (1c:570a)
|
||||
ld c, a
|
||||
ld hl, PartyMonSpeeds
|
||||
add hl, bc
|
||||
ld a, [$cf1b]
|
||||
xor $1
|
||||
add [hl]
|
||||
ld c, a
|
||||
add a
|
||||
ld b, a
|
||||
ld a, [W_SUBANIMTRANSFORM] ; $d08b
|
||||
and a
|
||||
jr z, .resetSprites
|
||||
cp c
|
||||
jr z, .animateSprite
|
||||
.incTimer
|
||||
inc a
|
||||
cp b
|
||||
jr nz, .resetTimer
|
||||
xor a
|
||||
.resetTimer
|
||||
ld [W_SUBANIMTRANSFORM], a ; $d08b
|
||||
jp DelayFrame
|
||||
.resetSprites
|
||||
push bc
|
||||
ld hl, $cc5b
|
||||
ld de, wOAMBuffer
|
||||
ld bc, $60
|
||||
call CopyData
|
||||
pop bc
|
||||
xor a
|
||||
jr .incTimer
|
||||
.animateSprite
|
||||
push bc
|
||||
ld hl, $c302 ; OAM tile id
|
||||
ld bc, $10
|
||||
ld a, [wCurrentMenuItem]
|
||||
call AddNTimes
|
||||
ld c, $40 ; amount to increase the tile id by
|
||||
ld a, [hl]
|
||||
cp $4 ; tile ID for SPRITE_BALL_M
|
||||
jr z, .editCoords
|
||||
cp $8 ; tile ID for SPRITE_HELIX
|
||||
jr nz, .editTileIDS
|
||||
; SPRITE_BALL_M and SPRITE_HELIX only shake up and down
|
||||
.editCoords
|
||||
dec hl
|
||||
dec hl ; dec hl to the OAM y coord
|
||||
ld c, $1 ; amount to increase the y coord by
|
||||
; otherwise, load a second sprite frame
|
||||
.editTileIDS
|
||||
ld b, $4
|
||||
ld de, $4
|
||||
.loop
|
||||
ld a, [hl]
|
||||
add c
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
dec b
|
||||
jr nz, .loop
|
||||
pop bc
|
||||
ld a, c
|
||||
jr .incTimer
|
||||
|
||||
PartyMonSpeeds: ; 71769 (1c:5769)
|
||||
db $05,$10,$20
|
||||
|
||||
Func_7176c: ; 7176c (1c:576c)
|
||||
ld hl, MonPartySpritePointers ; $57c0
|
||||
ld a, $1c
|
||||
|
||||
Func_71771: ; 71771 (1c:5771)
|
||||
ld bc, $0
|
||||
.asm_71774
|
||||
push af
|
||||
push bc
|
||||
push hl
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call CopyVideoData
|
||||
pop hl
|
||||
pop bc
|
||||
ld a, $6
|
||||
add c
|
||||
ld c, a
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .asm_71774
|
||||
ret
|
||||
|
||||
Func_71791: ; 71791 (1c:5791)
|
||||
call DisableLCD
|
||||
ld hl, MonPartySpritePointers ; $57c0
|
||||
ld a, $1c
|
||||
ld bc, $0
|
||||
.asm_7179c
|
||||
push af
|
||||
push bc
|
||||
push hl
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
push de
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
swap c
|
||||
ld b, $0
|
||||
ld a, [hli]
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
pop hl
|
||||
call FarCopyData2
|
||||
pop hl
|
||||
pop bc
|
||||
ld a, $6
|
||||
add c
|
||||
ld c, a
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .asm_7179c
|
||||
jp EnableLCD
|
||||
|
||||
MonPartySpritePointers: ; 717c0 (1c:57c0)
|
||||
dw SlowbroSprite + $c0
|
||||
db $40 / $10 ; 40 bytes
|
||||
db BANK(SlowbroSprite)
|
||||
dw $8000
|
||||
|
||||
dw BallSprite
|
||||
db $80 / $10 ; $80 bytes
|
||||
db BANK(BallSprite)
|
||||
dw $8040
|
||||
|
||||
dw ClefairySprite + $c0
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(ClefairySprite)
|
||||
dw $80C0
|
||||
|
||||
dw BirdSprite + $c0
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(BirdSprite)
|
||||
dw $8100
|
||||
|
||||
dw SeelSprite
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(SeelSprite)
|
||||
dw $8140
|
||||
|
||||
dw MonPartySprites + $40
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8180
|
||||
|
||||
dw MonPartySprites + $50
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $81A0
|
||||
|
||||
dw MonPartySprites + $60
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $81C0
|
||||
|
||||
dw MonPartySprites + $70
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $81E0
|
||||
|
||||
dw MonPartySprites + $80
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8200
|
||||
|
||||
dw MonPartySprites + $90
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8220
|
||||
|
||||
dw MonPartySprites + $A0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8240
|
||||
|
||||
dw MonPartySprites + $B0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8260
|
||||
|
||||
dw MonPartySprites + $100
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8380
|
||||
|
||||
dw SlowbroSprite
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(SlowbroSprite)
|
||||
dw $8400
|
||||
|
||||
dw BallSprite
|
||||
db $80 / $10 ; $80 bytes
|
||||
db BANK(BallSprite)
|
||||
dw $8440
|
||||
|
||||
dw ClefairySprite
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(ClefairySprite)
|
||||
dw $84C0
|
||||
|
||||
dw BirdSprite
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(BirdSprite)
|
||||
dw $8500
|
||||
|
||||
dw SeelSprite + $C0
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(SeelSprite)
|
||||
dw $8540
|
||||
|
||||
dw MonPartySprites
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8580
|
||||
|
||||
dw MonPartySprites + $10
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $85A0
|
||||
|
||||
dw MonPartySprites + $20
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $85C0
|
||||
|
||||
dw MonPartySprites + $30
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $85E0
|
||||
|
||||
dw MonPartySprites + $C0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8600
|
||||
|
||||
dw MonPartySprites + $D0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8620
|
||||
|
||||
dw MonPartySprites + $E0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8640
|
||||
|
||||
dw MonPartySprites + $F0
|
||||
db $10 / $10 ; $10 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8660
|
||||
|
||||
dw MonPartySprites + $140
|
||||
db $40 / $10 ; $40 bytes
|
||||
db BANK(MonPartySprites)
|
||||
dw $8780
|
||||
|
||||
Func_71868: ; 71868 (1c:5868)
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
|
||||
ld hl, W_PARTYMON1 ; $d164
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
call GetPartyMonSpriteID
|
||||
ld [$cd5b], a
|
||||
call Func_718c3
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
Func_71882: ; 71882 (1c:5882)
|
||||
xor a
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
ld a, [$cd5d]
|
||||
call GetPartyMonSpriteID
|
||||
ld [$cd5b], a
|
||||
jr Func_718c3
|
||||
|
||||
Func_71890: ; 71890 (1c:5890)
|
||||
ld a, [$cf91]
|
||||
call GetPartyMonSpriteID
|
||||
push af
|
||||
ld hl, $8000
|
||||
call Func_718ac
|
||||
pop af
|
||||
add $54
|
||||
ld hl, $8040
|
||||
call Func_718ac
|
||||
xor a
|
||||
ld [$cd5d], a
|
||||
jr Func_71882
|
||||
|
||||
Func_718ac: ; 718ac (1c:58ac)
|
||||
push hl
|
||||
add a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, MonPartySpritePointers
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld d, a
|
||||
ld a, [hli]
|
||||
ld c, a
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
pop hl
|
||||
jp CopyVideoData
|
||||
|
||||
Func_718c3: ; 718c3 (1c:58c3)
|
||||
push af
|
||||
ld c, $10
|
||||
ld h, $c3
|
||||
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
|
||||
swap a
|
||||
ld l, a
|
||||
add $10
|
||||
ld b, a
|
||||
pop af
|
||||
cp $8
|
||||
jr z, .asm_718da
|
||||
call Func_712a6
|
||||
jr .asm_718dd
|
||||
.asm_718da
|
||||
call Func_71281
|
||||
.asm_718dd
|
||||
ld hl, wOAMBuffer
|
||||
ld de, $cc5b
|
||||
ld bc, $60
|
||||
jp CopyData
|
||||
|
||||
GetPartyMonSpriteID: ; 718e9 (1c:58e9)
|
||||
ld [$d11e], a
|
||||
ld a, $3a
|
||||
call Predef ; indirect jump to IndexToPokedex (41010 (10:5010))
|
||||
ld a, [$d11e]
|
||||
ld c, a
|
||||
dec a
|
||||
srl a
|
||||
ld hl, MonPartyData ; $590d
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
bit 0, c
|
||||
jr nz, .asm_71906
|
||||
swap a
|
||||
.asm_71906
|
||||
and $f0
|
||||
srl a
|
||||
srl a
|
||||
ret
|
||||
|
||||
INCLUDE "data/mon_party_sprites.asm"
|
||||
|
||||
MonPartySprites: ; 71959 (1c:5959)
|
||||
INCBIN "gfx/mon_ow_sprites.2bpp"
|
143
engine/multiply_divide.asm
Executable file
143
engine/multiply_divide.asm
Executable file
|
@ -0,0 +1,143 @@
|
|||
_Multiply: ; 37d41 (d:7d41)
|
||||
ld a, $8
|
||||
ld b, a
|
||||
xor a
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld [$ff9b], a
|
||||
ld [H_SAVEDNUMTOPRINT], a ; $ff9c
|
||||
ld [$ff9d], a
|
||||
ld [$ff9e], a
|
||||
.asm_37d4f
|
||||
ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
srl a
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
jr nc, .asm_37d77
|
||||
ld a, [$ff9e]
|
||||
ld c, a
|
||||
ld a, [$ff98]
|
||||
add c
|
||||
ld [$ff9e], a
|
||||
ld a, [$ff9d]
|
||||
ld c, a
|
||||
ld a, [$ff97]
|
||||
adc c
|
||||
ld [$ff9d], a
|
||||
ld a, [H_SAVEDNUMTOPRINT] ; $ff9c
|
||||
ld c, a
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
adc c
|
||||
ld [H_SAVEDNUMTOPRINT], a ; $ff9c
|
||||
ld a, [$ff9b]
|
||||
ld c, a
|
||||
ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
adc c
|
||||
ld [$ff9b], a
|
||||
.asm_37d77
|
||||
dec b
|
||||
jr z, .asm_37d94
|
||||
ld a, [$ff98]
|
||||
sla a
|
||||
ld [$ff98], a
|
||||
ld a, [$ff97]
|
||||
rl a
|
||||
ld [$ff97], a
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
rl a
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
rl a
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
jr .asm_37d4f
|
||||
.asm_37d94
|
||||
ld a, [$ff9e]
|
||||
ld [$ff98], a
|
||||
ld a, [$ff9d]
|
||||
ld [$ff97], a
|
||||
ld a, [H_SAVEDNUMTOPRINT] ; $ff9c
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [$ff9b]
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ret
|
||||
|
||||
_Divide: ; 37da5 (d:7da5)
|
||||
xor a
|
||||
ld [$ff9a], a
|
||||
ld [$ff9b], a
|
||||
ld [H_SAVEDNUMTOPRINT], a ; $ff9c
|
||||
ld [$ff9d], a
|
||||
ld [$ff9e], a
|
||||
ld a, $9
|
||||
ld e, a
|
||||
.asm_37db3
|
||||
ld a, [$ff9a]
|
||||
ld c, a
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
sub c
|
||||
ld d, a
|
||||
ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
ld c, a
|
||||
ld a, [H_DIVIDEND] ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
sbc c
|
||||
jr c, .asm_37dce
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld a, d
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [$ff9e]
|
||||
inc a
|
||||
ld [$ff9e], a
|
||||
jr .asm_37db3
|
||||
.asm_37dce
|
||||
ld a, b
|
||||
cp $1
|
||||
jr z, .asm_37e18
|
||||
ld a, [$ff9e]
|
||||
sla a
|
||||
ld [$ff9e], a
|
||||
ld a, [$ff9d]
|
||||
rl a
|
||||
ld [$ff9d], a
|
||||
ld a, [H_SAVEDNUMTOPRINT] ; $ff9c
|
||||
rl a
|
||||
ld [H_SAVEDNUMTOPRINT], a ; $ff9c
|
||||
ld a, [$ff9b]
|
||||
rl a
|
||||
ld [$ff9b], a
|
||||
dec e
|
||||
jr nz, .asm_37e04
|
||||
ld a, $8
|
||||
ld e, a
|
||||
ld a, [$ff9a]
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
xor a
|
||||
ld [$ff9a], a
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ld a, [$ff97]
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [$ff98]
|
||||
ld [$ff97], a
|
||||
.asm_37e04
|
||||
ld a, e
|
||||
cp $1
|
||||
jr nz, .asm_37e0a
|
||||
dec b
|
||||
.asm_37e0a
|
||||
ld a, [H_REMAINDER] ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
srl a
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
ld a, [$ff9a]
|
||||
rr a
|
||||
ld [$ff9a], a
|
||||
jr .asm_37db3
|
||||
.asm_37e18
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld [H_REMAINDER], a ; $ff99 (aliases: H_DIVISOR, H_MULTIPLIER, H_POWEROFTEN)
|
||||
ld a, [$ff9e]
|
||||
ld [$ff98], a
|
||||
ld a, [$ff9d]
|
||||
ld [$ff97], a
|
||||
ld a, [H_SAVEDNUMTOPRINT] ; $ff9c
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld a, [$ff9b]
|
||||
ld [H_DIVIDEND], a ; $ff95 (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
|
||||
ret
|
238
engine/oak_speech.asm
Executable file
238
engine/oak_speech.asm
Executable file
|
@ -0,0 +1,238 @@
|
|||
SetDefaultNames: ; 60ca (1:60ca)
|
||||
ld a, [$d358]
|
||||
push af
|
||||
ld a, [W_OPTIONS] ; $d355
|
||||
push af
|
||||
ld a, [$d732]
|
||||
push af
|
||||
ld hl, W_PLAYERNAME ; $d158
|
||||
ld bc, $d8a
|
||||
xor a
|
||||
call FillMemory
|
||||
ld hl, wSpriteStateData1
|
||||
ld bc, $200
|
||||
xor a
|
||||
call FillMemory
|
||||
pop af
|
||||
ld [$d732], a
|
||||
pop af
|
||||
ld [W_OPTIONS], a ; $d355
|
||||
pop af
|
||||
ld [$d358], a
|
||||
ld a, [$d08a]
|
||||
and a
|
||||
call z, Func_5bff
|
||||
ld hl, NintenText
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, SonyText
|
||||
ld de, W_RIVALNAME ; $d34a
|
||||
ld bc, $b
|
||||
jp CopyData
|
||||
|
||||
OakSpeech: ; 6115 (1:6115)
|
||||
ld a,$FF
|
||||
call PlaySound ; stop music
|
||||
ld a, BANK(Music_Routes2) ; bank of song
|
||||
ld c,a
|
||||
ld a, MUSIC_ROUTES2 ; song #
|
||||
call PlayMusic ; plays music
|
||||
call ClearScreen
|
||||
call LoadTextBoxTilePatterns
|
||||
call SetDefaultNames
|
||||
ld a,$18
|
||||
call Predef ; indirect jump to InitializePlayerData
|
||||
ld hl,$D53A
|
||||
ld a,POTION
|
||||
ld [$CF91],a
|
||||
ld a,1
|
||||
ld [$CF96],a
|
||||
call AddItemToInventory ; give one potion
|
||||
ld a,[$D07C]
|
||||
ld [$D71A],a
|
||||
call Func_62ce
|
||||
xor a
|
||||
ld [$FFD7],a
|
||||
ld a,[$D732]
|
||||
bit 1,a ; XXX when is bit 1 set?
|
||||
jp nz,Func_61bc ; easter egg: skip the intro
|
||||
ld de,ProfOakPic
|
||||
ld bc, (Bank(ProfOakPic) << 8) | $00
|
||||
call IntroPredef3B ; displays Oak pic?
|
||||
call FadeInIntroPic
|
||||
ld hl,OakSpeechText1
|
||||
call PrintText ; prints text box
|
||||
call GBFadeOut2
|
||||
call ClearScreen
|
||||
ld a,NIDORINO
|
||||
ld [$D0B5],a ; pic displayed is stored at this location
|
||||
ld [$CF91],a
|
||||
call GetMonHeader ; this is also related to the pic
|
||||
FuncCoord 6, 4 ; $c3f6
|
||||
ld hl,Coord ; position on tilemap the pic is displayed
|
||||
call LoadFlippedFrontSpriteByMonIndex ; displays pic?
|
||||
call MovePicLeft
|
||||
ld hl,OakSpeechText2
|
||||
call PrintText ; Prints text box
|
||||
call GBFadeOut2
|
||||
call ClearScreen
|
||||
ld de,RedPicFront
|
||||
ld bc,(Bank(RedPicFront) << 8) | $00
|
||||
call IntroPredef3B ; displays player pic?
|
||||
call MovePicLeft
|
||||
ld hl,IntroducePlayerText
|
||||
call PrintText
|
||||
call LoadDefaultNamesPlayer ; brings up NewName/Red/etc menu
|
||||
call GBFadeOut2
|
||||
call ClearScreen
|
||||
ld de,Rival1Pic
|
||||
ld bc,(Bank(Rival1Pic) << 8) | $00
|
||||
call IntroPredef3B ; displays rival pic
|
||||
call FadeInIntroPic
|
||||
ld hl,IntroduceRivalText
|
||||
call PrintText
|
||||
call LoadDefaultNamesRival
|
||||
|
||||
Func_61bc: ; 61bc (1:61bc)
|
||||
call GBFadeOut2
|
||||
call ClearScreen
|
||||
ld de,RedPicFront
|
||||
ld bc,(Bank(RedPicFront) << 8) | $00
|
||||
call IntroPredef3B
|
||||
call GBFadeIn2
|
||||
ld a,[$D72D]
|
||||
and a
|
||||
jr nz,.next
|
||||
ld hl,OakSpeechText3
|
||||
call PrintText
|
||||
.next
|
||||
ld a,[H_LOADEDROMBANK]
|
||||
push af
|
||||
ld a,(SFX_02_48 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
pop af
|
||||
ld [H_LOADEDROMBANK],a
|
||||
ld [$2000],a
|
||||
ld c,4
|
||||
call DelayFrames
|
||||
ld de,RedSprite ; $4180
|
||||
ld hl,$8000
|
||||
ld bc,(BANK(RedSprite) << 8) | $0C
|
||||
call CopyVideoData
|
||||
ld de,ShrinkPic1
|
||||
ld bc,(BANK(ShrinkPic1) << 8) | $00
|
||||
call IntroPredef3B
|
||||
ld c,4
|
||||
call DelayFrames
|
||||
ld de,ShrinkPic2
|
||||
ld bc,(BANK(ShrinkPic2) << 8) | $00
|
||||
call IntroPredef3B
|
||||
call ResetPlayerSpriteData
|
||||
ld a,[H_LOADEDROMBANK]
|
||||
push af
|
||||
ld a,2
|
||||
ld [$C0EF],a
|
||||
ld [$C0F0],a
|
||||
ld a,$A
|
||||
ld [wMusicHeaderPointer],a
|
||||
ld a,$FF
|
||||
ld [$C0EE],a
|
||||
call PlaySound ; stop music
|
||||
pop af
|
||||
ld [H_LOADEDROMBANK],a
|
||||
ld [$2000],a
|
||||
ld c,$14
|
||||
call DelayFrames
|
||||
FuncCoord 6, 5 ; $c40a
|
||||
ld hl,Coord
|
||||
ld b,7
|
||||
ld c,7
|
||||
call ClearScreenArea
|
||||
call LoadTextBoxTilePatterns
|
||||
ld a,1
|
||||
ld [$CFCB],a
|
||||
ld c,$32
|
||||
call DelayFrames
|
||||
call GBFadeOut2
|
||||
jp ClearScreen
|
||||
OakSpeechText1: ; 6253 (1:6253)
|
||||
TX_FAR _OakSpeechText1
|
||||
db "@"
|
||||
OakSpeechText2: ; 6258 (1:6258)
|
||||
TX_FAR _OakSpeechText2A
|
||||
db $14 ; play NIDORINA cry from TextCommandSounds
|
||||
TX_FAR _OakSpeechText2B
|
||||
db "@"
|
||||
IntroducePlayerText: ; 6262 (1:6262)
|
||||
TX_FAR _IntroducePlayerText
|
||||
db "@"
|
||||
IntroduceRivalText: ; 6267 (1:6267)
|
||||
TX_FAR _IntroduceRivalText
|
||||
db "@"
|
||||
OakSpeechText3: ; 626c (1:626c)
|
||||
TX_FAR _OakSpeechText3
|
||||
db "@"
|
||||
|
||||
FadeInIntroPic: ; 6271 (1:6271)
|
||||
ld hl,IntroFadePalettes
|
||||
ld b,6
|
||||
.next
|
||||
ld a,[hli]
|
||||
ld [rBGP],a
|
||||
ld c,10
|
||||
call DelayFrames
|
||||
dec b
|
||||
jr nz,.next
|
||||
ret
|
||||
|
||||
IntroFadePalettes: ; 6282 (1:6282)
|
||||
db %01010100
|
||||
db %10101000
|
||||
db %11111100
|
||||
db %11111000
|
||||
db %11110100
|
||||
db %11100100
|
||||
|
||||
MovePicLeft: ; 6288 (1:6288)
|
||||
ld a,119
|
||||
ld [$FF4B],a
|
||||
call DelayFrame
|
||||
|
||||
ld a,$E4
|
||||
ld [rBGP],a
|
||||
.next
|
||||
call DelayFrame
|
||||
ld a,[$FF4B]
|
||||
sub 8
|
||||
cp $FF
|
||||
ret z
|
||||
ld [$FF4B],a
|
||||
jr .next
|
||||
|
||||
Predef3B: ; 62a1 (1:62a1)
|
||||
call Load16BitRegisters
|
||||
IntroPredef3B: ; 62a4 (1:62a4)
|
||||
; bank of sprite given in b
|
||||
push bc
|
||||
ld a,b
|
||||
call UncompressSpriteFromDE
|
||||
ld hl,S_SPRITEBUFFER1
|
||||
ld de,$A000
|
||||
ld bc,$0310
|
||||
call CopyData
|
||||
ld de,$9000
|
||||
call InterlaceMergeSpriteBuffers
|
||||
pop bc
|
||||
ld a,c
|
||||
and a
|
||||
FuncCoord 15, 1 ; $c3c3
|
||||
ld hl,Coord
|
||||
jr nz,.next
|
||||
FuncCoord 6, 4 ; $c3f6
|
||||
ld hl,Coord
|
||||
.next
|
||||
xor a
|
||||
ld [$FFE1],a
|
||||
ld a,1
|
||||
jp Predef
|
255
engine/oak_speech2.asm
Executable file
255
engine/oak_speech2.asm
Executable file
|
@ -0,0 +1,255 @@
|
|||
LoadDefaultNamesPlayer: ; 695d (1:695d)
|
||||
call Func_6a12
|
||||
ld de, DefaultNamesPlayer ; $6aa8
|
||||
call DisplayIntroNameTextBox
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jr z, .asm_697a
|
||||
ld hl, DefaultNamesPlayerList ; $6af2
|
||||
call Func_6ad6
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
call Func_69ec
|
||||
jr .asm_6999
|
||||
.asm_697a
|
||||
ld hl, W_PLAYERNAME ; $d158
|
||||
xor a
|
||||
ld [$d07d], a
|
||||
call DisplayNamingScreen
|
||||
ld a, [$cf4b]
|
||||
cp $50
|
||||
jr z, .asm_697a
|
||||
call ClearScreen
|
||||
call Delay3
|
||||
ld de, RedPicFront ; $6ede
|
||||
ld b, BANK(RedPicFront)
|
||||
call IntroPredef3B
|
||||
.asm_6999
|
||||
ld hl, YourNameIsText
|
||||
jp PrintText
|
||||
|
||||
YourNameIsText: ; 699f (1:699f)
|
||||
TX_FAR _YourNameIsText
|
||||
db "@"
|
||||
|
||||
LoadDefaultNamesRival: ; 69a4 (1:69a4)
|
||||
call Func_6a12 ; 0x69a4 call 0x6a12
|
||||
ld de, DefaultNamesRival
|
||||
call DisplayIntroNameTextBox
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jr z, .asm_69c1
|
||||
ld hl, DefaultNamesRivalList
|
||||
call Func_6ad6
|
||||
ld de, W_RIVALNAME ; $d34a
|
||||
call Func_69ec
|
||||
jr .asm_69e1
|
||||
.asm_69c1
|
||||
ld hl, W_RIVALNAME ; $d34a
|
||||
ld a, $1
|
||||
ld [$d07d], a
|
||||
call DisplayNamingScreen
|
||||
ld a, [$cf4b]
|
||||
cp $50
|
||||
jr z, .asm_69c1
|
||||
call ClearScreen
|
||||
call Delay3
|
||||
ld de, Rival1Pic ; $6049
|
||||
ld b, $13
|
||||
call IntroPredef3B
|
||||
.asm_69e1
|
||||
ld hl, HisNameIsText
|
||||
jp PrintText
|
||||
|
||||
HisNameIsText: ; 69e7 (1:69e7)
|
||||
TX_FAR _HisNameIsText
|
||||
db "@"
|
||||
|
||||
Func_69ec: ; 69ec (1:69ec)
|
||||
push de
|
||||
ld hl, wTileMap
|
||||
ld bc, $c0b
|
||||
call ClearScreenArea
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
pop de
|
||||
ld hl, $cd6d
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
call Delay3
|
||||
FuncCoord 12, 4 ; $c3fc
|
||||
ld hl, Coord
|
||||
ld de, $67d
|
||||
ld a, $ff
|
||||
jr asm_6a19
|
||||
|
||||
Func_6a12: ; 6a12 (1:6a12)
|
||||
FuncCoord 5, 4 ; $c3f5
|
||||
ld hl, Coord
|
||||
ld de, $67d
|
||||
xor a
|
||||
asm_6a19: ; 6a19 (1:6a19)
|
||||
push hl
|
||||
push de
|
||||
push bc
|
||||
ld [$ff8d], a
|
||||
ld a, d
|
||||
ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
|
||||
ld a, e
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
ld c, a
|
||||
ld a, [$ff8d]
|
||||
and a
|
||||
jr nz, .asm_6a2d
|
||||
ld d, $0
|
||||
add hl, de
|
||||
.asm_6a2d
|
||||
ld d, h
|
||||
ld e, l
|
||||
.asm_6a2f
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, [$ff8d]
|
||||
and a
|
||||
jr nz, .asm_6a3c
|
||||
ld a, [hli]
|
||||
ld [hld], a
|
||||
dec hl
|
||||
jr .asm_6a3f
|
||||
.asm_6a3c
|
||||
ld a, [hld]
|
||||
ld [hli], a
|
||||
inc hl
|
||||
.asm_6a3f
|
||||
dec c
|
||||
jr nz, .asm_6a2f
|
||||
ld a, [$ff8d]
|
||||
and a
|
||||
jr z, .asm_6a4a
|
||||
xor a
|
||||
dec hl
|
||||
ld [hl], a
|
||||
.asm_6a4a
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
call Delay3
|
||||
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
|
||||
ld c, a
|
||||
ld h, d
|
||||
ld l, e
|
||||
ld a, [$ff8d]
|
||||
and a
|
||||
jr nz, .asm_6a5e
|
||||
inc hl
|
||||
jr .asm_6a5f
|
||||
.asm_6a5e
|
||||
dec hl
|
||||
.asm_6a5f
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld a, [H_DOWNARROWBLINKCNT1] ; $ff8b
|
||||
dec a
|
||||
ld [H_DOWNARROWBLINKCNT1], a ; $ff8b
|
||||
jr nz, .asm_6a2f
|
||||
pop bc
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
DisplayIntroNameTextBox: ; 6a6c (1:6a6c)
|
||||
push de
|
||||
ld hl, wTileMap
|
||||
ld b, $a
|
||||
ld c, $9
|
||||
call TextBoxBorder
|
||||
FuncCoord 3, 0 ; $c3a3
|
||||
ld hl, Coord
|
||||
ld de, .namestring ; $6aa3
|
||||
call PlaceString
|
||||
pop de
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
call PlaceString
|
||||
call UpdateSprites
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wLastMenuItem], a ; $cc2a
|
||||
inc a
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
ld [wMenuWatchedKeys], a ; $cc29
|
||||
inc a
|
||||
ld [wTopMenuItemY], a ; $cc24
|
||||
inc a
|
||||
ld [wMaxMenuItem], a ; $cc28
|
||||
jp HandleMenuInput
|
||||
|
||||
.namestring ; 6aa3 (1:6aa3)
|
||||
db "NAME@"
|
||||
|
||||
IF _RED
|
||||
DefaultNamesPlayer: ; 6aa8 (1:6aa8)
|
||||
db "NEW NAME"
|
||||
next "RED"
|
||||
next "ASH"
|
||||
next "JACK"
|
||||
db "@"
|
||||
|
||||
DefaultNamesRival: ; 6abe (1:6abe)
|
||||
db "NEW NAME"
|
||||
next "BLUE"
|
||||
next "GARY"
|
||||
next "JOHN"
|
||||
db "@"
|
||||
ENDC
|
||||
|
||||
IF _BLUE
|
||||
DefaultNamesPlayer: ; 6aa8 (1:6aa8)
|
||||
db "NEW NAME"
|
||||
next "BLUE"
|
||||
next "GARY"
|
||||
next "JOHN"
|
||||
db "@"
|
||||
|
||||
DefaultNamesRival: ; 6abe (1:6abe)
|
||||
db "NEW NAME"
|
||||
next "RED"
|
||||
next "ASH"
|
||||
next "JACK"
|
||||
db "@"
|
||||
ENDC
|
||||
|
||||
Func_6ad6: ; 6ad6 (1:6ad6)
|
||||
ld b, a
|
||||
ld c, $0
|
||||
.asm_6ad9
|
||||
ld d, h
|
||||
ld e, l
|
||||
.asm_6adb
|
||||
ld a, [hli]
|
||||
cp $50
|
||||
jr nz, .asm_6adb
|
||||
ld a, b
|
||||
cp c
|
||||
jr z, .asm_6ae7
|
||||
inc c
|
||||
jr .asm_6ad9
|
||||
.asm_6ae7
|
||||
ld h, d
|
||||
ld l, e
|
||||
ld de, $cd6d
|
||||
ld bc, $14
|
||||
jp CopyData
|
||||
IF _RED
|
||||
DefaultNamesPlayerList: ; 6af2 (1:6af2)
|
||||
db "NEW NAME@RED@ASH@JACK@"
|
||||
DefaultNamesRivalList: ; 6b08 (1:6b08)
|
||||
db "NEW NAME@BLUE@GARY@JOHN@"
|
||||
ENDC
|
||||
IF _BLUE
|
||||
DefaultNamesPlayerList: ; 6af2 (1:6af2)
|
||||
db "NEW NAME@BLUE@GARY@JOHN@"
|
||||
DefaultNamesRivalList: ; 6b08 (1:6b08)
|
||||
db "NEW NAME@RED@ASH@JACK@"
|
||||
ENDC
|
||||
|
||||
TextTerminator_6b20: ; 6b20 (1:6b20)
|
||||
db "@"
|
156
engine/overworld/cable_club_npc.asm
Executable file
156
engine/overworld/cable_club_npc.asm
Executable file
|
@ -0,0 +1,156 @@
|
|||
CableClubNPC: ; 71c5 (1:71c5)
|
||||
ld hl, CableClubNPCText1
|
||||
call PrintText
|
||||
ld a, [$d74b]
|
||||
bit 5, a
|
||||
jp nz, Func_71e1
|
||||
ld c, $3c
|
||||
call DelayFrames
|
||||
ld hl, CableClubNPCText6
|
||||
call PrintText
|
||||
jp Func_7298
|
||||
|
||||
Func_71e1: ; 71e1 (1:71e1)
|
||||
ld a, $1
|
||||
ld [$cc34], a
|
||||
ld a, $5a
|
||||
ld [$cc47], a
|
||||
.asm_71eb
|
||||
ld a, [$ffaa]
|
||||
cp $2
|
||||
jr z, .asm_721a ; 0x71ef $29
|
||||
cp $1
|
||||
jr z, .asm_721a ; 0x71f3 $25
|
||||
ld a, $ff
|
||||
ld [$ffaa], a
|
||||
ld a, $2
|
||||
ld [$ff01], a
|
||||
xor a
|
||||
ld [$ffad], a
|
||||
ld a, $80
|
||||
ld [$ff02], a
|
||||
ld a, [$cc47]
|
||||
dec a
|
||||
ld [$cc47], a
|
||||
jr z, .asm_7287 ; 0x720b $7a
|
||||
ld a, $1
|
||||
ld [$ff01], a
|
||||
ld a, $81
|
||||
ld [$ff02], a
|
||||
call DelayFrame
|
||||
jr .asm_71eb ; 0x7218 $d1
|
||||
.asm_721a
|
||||
call Func_22ed
|
||||
call DelayFrame
|
||||
call Func_22ed
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
ld hl, CableClubNPCText2
|
||||
call PrintText
|
||||
xor a
|
||||
ld [$cc34], a
|
||||
call YesNoChoice
|
||||
ld a, $1
|
||||
ld [$cc34], a
|
||||
ld a, [$cc26]
|
||||
and a
|
||||
jr nz, .asm_728f ; 0x723e $4f
|
||||
callab SaveSAVtoSRAM
|
||||
call WaitForSoundToFinish
|
||||
ld a, (SFX_02_5d - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent
|
||||
ld hl, CableClubNPCText3
|
||||
call PrintText
|
||||
ld hl, $cc47
|
||||
ld a, $3
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [$ffa9], a
|
||||
ld [$cc42], a
|
||||
call Func_227f
|
||||
ld hl, $cc47
|
||||
ld a, [hli]
|
||||
inc a
|
||||
jr nz, Func_72a8 ; 0x726b $3b
|
||||
ld a, [hl]
|
||||
inc a
|
||||
jr nz, Func_72a8 ; 0x726f $37
|
||||
ld b, $a
|
||||
.asm_7273
|
||||
call DelayFrame
|
||||
call Func_22ed
|
||||
dec b
|
||||
jr nz, .asm_7273 ; 0x727a $f7
|
||||
call Func_72d7
|
||||
ld hl, CableClubNPCText4
|
||||
call PrintText
|
||||
jr Func_7298 ; 0x7285 $11
|
||||
.asm_7287
|
||||
ld hl, CableClubNPCText7
|
||||
call PrintText
|
||||
jr Func_7298 ; 0x728d $9
|
||||
.asm_728f
|
||||
call Func_72d7
|
||||
ld hl, CableClubNPCText5
|
||||
call PrintText
|
||||
; fall through
|
||||
|
||||
Func_7298: ; 7298 (1:7298)
|
||||
xor a
|
||||
ld hl, $cc47
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld hl, $d72e
|
||||
res 6, [hl]
|
||||
xor a
|
||||
ld [$cc34], a
|
||||
ret
|
||||
|
||||
Func_72a8: ; 72a8 (1:72a8)
|
||||
xor a
|
||||
ld [hld], a
|
||||
ld [hl], a
|
||||
ld hl, LinkMenu
|
||||
ld b, BANK(LinkMenu)
|
||||
jp Bankswitch
|
||||
|
||||
CableClubNPCText7: ; 72b3 (1:72b3)
|
||||
TX_FAR _CableClubNPCText7
|
||||
db "@"
|
||||
|
||||
CableClubNPCText1: ; 72b8 (1:72b8)
|
||||
TX_FAR _CableClubNPCText1
|
||||
db "@"
|
||||
|
||||
CableClubNPCText2: ; 72bd (1:72bd)
|
||||
TX_FAR _CableClubNPCText2
|
||||
db "@"
|
||||
|
||||
CableClubNPCText3: ; 72c2 (1:72c2)
|
||||
TX_FAR _CableClubNPCText3
|
||||
db $a, "@"
|
||||
|
||||
CableClubNPCText4: ; 72c8 (1:72c8)
|
||||
TX_FAR _CableClubNPCText4
|
||||
db "@"
|
||||
|
||||
CableClubNPCText5: ; 72cd (1:72cd)
|
||||
TX_FAR _CableClubNPCText5
|
||||
db "@"
|
||||
|
||||
CableClubNPCText6: ; 72d2 (1:72d2)
|
||||
TX_FAR _CableClubNPCText6
|
||||
db "@"
|
||||
|
||||
Func_72d7: ; 72d7 (1:72d7)
|
||||
call Delay3
|
||||
ld a, $ff
|
||||
ld [$ffaa], a
|
||||
ld a, $2
|
||||
ld [$ff01], a
|
||||
xor a
|
||||
ld [$ffad], a
|
||||
ld a, $80
|
||||
ld [$ff02], a
|
||||
ret
|
108
engine/overworld/card_key.asm
Executable file
108
engine/overworld/card_key.asm
Executable file
|
@ -0,0 +1,108 @@
|
|||
PrintCardKeyText: ; 52673 (14:6673)
|
||||
ld hl, SilphCoMapList
|
||||
ld a, [W_CURMAP]
|
||||
ld b, a
|
||||
.asm_5267a
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
cp b
|
||||
jr nz, .asm_5267a
|
||||
ld a, $35
|
||||
call Predef ; indirect jump to Func_c586 (c586 (3:4586))
|
||||
ld a, [$cfc6]
|
||||
cp $18
|
||||
jr z, .asm_5269c
|
||||
cp $24
|
||||
jr z, .asm_5269c
|
||||
ld b, a
|
||||
ld a, [W_CURMAP]
|
||||
cp SILPH_CO_11F
|
||||
ret nz
|
||||
ld a, b
|
||||
cp $5e
|
||||
ret nz
|
||||
.asm_5269c
|
||||
ld b, CARD_KEY
|
||||
call IsItemInBag
|
||||
jr z, .asm_526dc
|
||||
call Func_526fd
|
||||
push de
|
||||
ld a, $1
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call PrintPredefTextID
|
||||
pop de
|
||||
srl d
|
||||
ld a, d
|
||||
ld b, a
|
||||
ld [$d73f], a
|
||||
srl e
|
||||
ld a, e
|
||||
ld c, a
|
||||
ld [$d740], a
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp SILPH_CO_11F
|
||||
jr nz, .asm_526c8
|
||||
ld a, $3
|
||||
jr .asm_526ca
|
||||
.asm_526c8
|
||||
ld a, $e
|
||||
.asm_526ca
|
||||
ld [$d09f], a
|
||||
ld a, $17
|
||||
call Predef ; indirect jump to Func_ee9e
|
||||
ld hl, $d126
|
||||
set 5, [hl]
|
||||
ld a, (SFX_1f_57 - SFX_Headers_1f) / 3
|
||||
jp PlaySound
|
||||
.asm_526dc
|
||||
ld a, $2
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
jp PrintPredefTextID
|
||||
|
||||
SilphCoMapList: ; 526e3 (14:66e3)
|
||||
db SILPH_CO_2F
|
||||
db SILPH_CO_3F
|
||||
db SILPH_CO_4F
|
||||
db SILPH_CO_5F
|
||||
db SILPH_CO_6F
|
||||
db SILPH_CO_7F
|
||||
db SILPH_CO_8F
|
||||
db SILPH_CO_9F
|
||||
db SILPH_CO_10F
|
||||
db SILPH_CO_11F
|
||||
db $FF
|
||||
|
||||
CardKeySuccessText: ; 526ee (14:66ee)
|
||||
TX_FAR _CardKeySuccessText1
|
||||
db $0b
|
||||
TX_FAR _CardKeySuccessText2
|
||||
db "@"
|
||||
|
||||
CardKeyFailText: ; 526f8 (14:66f8)
|
||||
TX_FAR _CardKeyFailText
|
||||
db "@"
|
||||
|
||||
Func_526fd: ; 526fd (14:66fd)
|
||||
ld a, [W_YCOORD] ; $d361
|
||||
ld d, a
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
ld e, a
|
||||
ld a, [$c109]
|
||||
and a
|
||||
jr nz, .asm_5270d
|
||||
inc d
|
||||
ret
|
||||
.asm_5270d
|
||||
cp $4
|
||||
jr nz, .asm_52713
|
||||
dec d
|
||||
ret
|
||||
.asm_52713
|
||||
cp $8
|
||||
jr nz, .asm_52719
|
||||
dec e
|
||||
ret
|
||||
.asm_52719
|
||||
inc e
|
||||
ret
|
125
engine/overworld/cinnabar_lab.asm
Executable file
125
engine/overworld/cinnabar_lab.asm
Executable file
|
@ -0,0 +1,125 @@
|
|||
GiveFossilToCinnabarLab: ; 61006 (18:5006)
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld a, $3
|
||||
ld [wMenuWatchedKeys], a ; $cc29
|
||||
ld a, [$cd37]
|
||||
dec a
|
||||
ld [wMaxMenuItem], a ; $cc28
|
||||
ld a, $2
|
||||
ld [wTopMenuItemY], a ; $cc24
|
||||
ld a, $1
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
ld a, [$cd37]
|
||||
dec a
|
||||
ld bc, $2
|
||||
ld hl, $3
|
||||
call AddNTimes
|
||||
dec l
|
||||
ld b, l
|
||||
ld c, $d
|
||||
ld hl, wTileMap
|
||||
call TextBoxBorder
|
||||
call UpdateSprites
|
||||
call Func_610c2
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
call HandleMenuInput
|
||||
bit 1, a
|
||||
jr nz, .asm_610a7
|
||||
ld hl, $cc5b
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [$ffdb], a
|
||||
cp DOME_FOSSIL
|
||||
jr z, .choseDomeFossil
|
||||
cp HELIX_FOSSIL
|
||||
jr z, .choseHelixFossil
|
||||
ld b, AERODACTYL
|
||||
jr .fossilSelected
|
||||
.choseHelixFossil
|
||||
ld b, OMANYTE
|
||||
jr .fossilSelected
|
||||
.choseDomeFossil
|
||||
ld b, KABUTO
|
||||
.fossilSelected
|
||||
ld [W_FOSSILITEM], a
|
||||
ld a, b
|
||||
ld [W_FOSSILMON], a
|
||||
call LoadFossilItemAndMonName
|
||||
ld hl, LabFossil_610ae
|
||||
call PrintText
|
||||
call YesNoChoice
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
jr nz, .asm_610a7
|
||||
ld hl, LabFossil_610b3
|
||||
call PrintText
|
||||
ld a, [W_FOSSILITEM]
|
||||
ld [$ffdb], a
|
||||
callba RemoveItemByID
|
||||
ld hl, LabFossil_610b8
|
||||
call PrintText
|
||||
ld hl, $d7a3
|
||||
set 0, [hl]
|
||||
set 1, [hl]
|
||||
ret
|
||||
.asm_610a7
|
||||
ld hl, LabFossil_610bd
|
||||
call PrintText
|
||||
ret
|
||||
|
||||
LabFossil_610ae: ; 610ae (18:50ae)
|
||||
TX_FAR _Lab4Text_610ae
|
||||
db "@"
|
||||
|
||||
LabFossil_610b3: ; 610b3 (18:50b3)
|
||||
TX_FAR _Lab4Text_610b3
|
||||
db "@"
|
||||
|
||||
LabFossil_610b8: ; 610b8 (18:50b8)
|
||||
TX_FAR _Lab4Text_610b8
|
||||
db "@"
|
||||
|
||||
LabFossil_610bd: ; 610bd (18:50bd)
|
||||
TX_FAR _Lab4Text_610bd
|
||||
db "@"
|
||||
|
||||
Func_610c2: ; 610c2 (18:50c2)
|
||||
ld hl, $cc5b
|
||||
xor a
|
||||
ld [$ffdb], a
|
||||
.asm_610c8
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
push hl
|
||||
ld [$d11e], a
|
||||
call GetItemName
|
||||
FuncCoord 2, 2 ; $c3ca
|
||||
ld hl, Coord
|
||||
ld a, [$ffdb]
|
||||
ld bc, $28
|
||||
call AddNTimes
|
||||
ld de, $cd6d
|
||||
call PlaceString
|
||||
ld hl, $ffdb
|
||||
inc [hl]
|
||||
pop hl
|
||||
jr .asm_610c8
|
||||
|
||||
; loads the names of the fossil item and the resulting mon
|
||||
LoadFossilItemAndMonName: ; 610eb (18:50eb)
|
||||
ld a, [W_FOSSILMON]
|
||||
ld [$d11e], a
|
||||
call GetMonName
|
||||
call CopyStringToCF4B
|
||||
ld a, [W_FOSSILITEM]
|
||||
ld [$d11e], a
|
||||
call GetItemName
|
||||
ret
|
258
engine/overworld/cut.asm
Executable file
258
engine/overworld/cut.asm
Executable file
|
@ -0,0 +1,258 @@
|
|||
UsedCut: ; ef54 (3:6f54)
|
||||
xor a
|
||||
ld [$cd6a], a
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
and a ; OVERWORLD
|
||||
jr z, .asm_ef6b
|
||||
cp GYM
|
||||
jr nz, .asm_ef77
|
||||
ld a, [$cfc6]
|
||||
cp $50 ; gym cut tree
|
||||
jr nz, .asm_ef77
|
||||
jr asm_ef82
|
||||
.asm_ef6b
|
||||
dec a
|
||||
ld a, [$cfc6]
|
||||
cp $3d ; cut tree
|
||||
jr z, asm_ef82
|
||||
cp $52 ; grass
|
||||
jr z, asm_ef82
|
||||
.asm_ef77
|
||||
ld hl, NothingToCutText
|
||||
jp PrintText
|
||||
|
||||
NothingToCutText: ; ef7d (3:6f7d)
|
||||
TX_FAR _NothingToCutText
|
||||
db "@"
|
||||
|
||||
asm_ef82: ; ef82 (3:6f82)
|
||||
ld [$cd4d], a
|
||||
ld a, $1
|
||||
ld [$cd6a], a
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
ld hl, W_PARTYMON1NAME ; $d2b5
|
||||
call GetPartyMonName
|
||||
ld hl, $d730
|
||||
set 6, [hl]
|
||||
call GBPalWhiteOutWithDelay3
|
||||
call CleanLCD_OAM
|
||||
call Func_3dbe
|
||||
ld a, $90
|
||||
ld [$ffb0], a
|
||||
call Delay3
|
||||
call LoadGBPal
|
||||
call LoadCurrentMapView
|
||||
call SaveScreenTilesToBuffer2
|
||||
call Delay3
|
||||
xor a
|
||||
ld [$ffb0], a
|
||||
ld hl, UsedCutText
|
||||
call PrintText
|
||||
call LoadScreenTilesFromBuffer2
|
||||
ld hl, $d730
|
||||
res 6, [hl]
|
||||
ld a, $ff
|
||||
ld [$cfcb], a
|
||||
call AnimateCutTree
|
||||
ld de, CutTreeBlockSwaps ; $7100
|
||||
call Func_f09f
|
||||
call Func_eedc
|
||||
callba Func_79e96
|
||||
ld a, $1
|
||||
ld [$cfcb], a
|
||||
ld a, (SFX_02_56 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld a, $90
|
||||
ld [$ffb0], a
|
||||
call UpdateSprites
|
||||
jp Func_eedc
|
||||
|
||||
UsedCutText: ; eff2 (3:6ff2)
|
||||
TX_FAR _UsedCutText
|
||||
db "@"
|
||||
|
||||
AnimateCutTree: ; eff7 (3:6ff7)
|
||||
xor a
|
||||
ld [$cd50], a
|
||||
ld a, $e4
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld a, [$cd4d]
|
||||
cp $52
|
||||
jr z, .asm_f020
|
||||
ld de, Overworld_GFX + $2d0 ; $42d0 ; cuttable tree sprite top row
|
||||
ld hl, $8fc0
|
||||
ld bc, (BANK(Overworld_GFX) << 8) + $02
|
||||
call CopyVideoData
|
||||
ld de, Overworld_GFX + $3d0 ; $43d0 ; cuttable tree sprite bottom row
|
||||
ld hl, $8fe0
|
||||
ld bc, (BANK(Overworld_GFX) << 8) + $02
|
||||
call CopyVideoData
|
||||
jr asm_f055
|
||||
.asm_f020
|
||||
ld hl, $8fc0
|
||||
call LoadCutTreeOAM
|
||||
ld hl, $8fd0
|
||||
call LoadCutTreeOAM
|
||||
ld hl, $8fe0
|
||||
call LoadCutTreeOAM
|
||||
ld hl, $8ff0
|
||||
call LoadCutTreeOAM
|
||||
call asm_f055
|
||||
ld hl, $c393
|
||||
ld de, $4
|
||||
ld a, $30
|
||||
ld c, e
|
||||
.asm_f044
|
||||
ld [hl], a
|
||||
add hl, de
|
||||
xor $60
|
||||
dec c
|
||||
jr nz, .asm_f044
|
||||
ret
|
||||
|
||||
LoadCutTreeOAM: ; f04c (3:704c)
|
||||
ld de, AnimationTileset2 + $60 ; $474e ; tile depicting a leaf
|
||||
ld bc, (BANK(AnimationTileset2) << 8) + $01
|
||||
jp CopyVideoData
|
||||
asm_f055: ; f055 (3:7055)
|
||||
call Func_f068
|
||||
ld a, $9
|
||||
ld de, CutTreeOAM ; $7060
|
||||
jp WriteOAMBlock
|
||||
|
||||
CutTreeOAM: ; f060 (3:7060)
|
||||
db $FC,$10,$FD,$10
|
||||
db $FE,$10,$FF,$10
|
||||
|
||||
Func_f068: ; f068 (3:7068)
|
||||
ld hl, $c104
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
inc hl
|
||||
ld a, [hli]
|
||||
ld c, a ; bc holds ypos/xpos of player's sprite
|
||||
inc hl
|
||||
inc hl
|
||||
ld a, [hl] ; a holds direction of player (00: down, 04: up, 08: left, 0C: right)
|
||||
srl a
|
||||
ld e, a
|
||||
ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right)
|
||||
ld a, [$cd50]
|
||||
and a
|
||||
ld hl, CutTreeAnimationOffsets ; $708f
|
||||
jr z, .asm_f084
|
||||
ld hl, CutTreeAnimationOffsets2 ; $7097
|
||||
.asm_f084
|
||||
add hl, de
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld a, b
|
||||
add d
|
||||
ld b, a
|
||||
ld a, c
|
||||
add e
|
||||
ld c, a
|
||||
ret
|
||||
|
||||
CutTreeAnimationOffsets: ; f08f (3:708f)
|
||||
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
|
||||
db 8, 36 ; player is facing down
|
||||
db 8, 4 ; player is facing up
|
||||
db -8, 20 ; player is facing left
|
||||
db 24, 20 ; player is facing right
|
||||
|
||||
CutTreeAnimationOffsets2: ; f097 (3:7097)
|
||||
; Not sure if these ever get used. CutTreeAnimationOffsets only seems to be used.
|
||||
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
|
||||
; These offsets represent 2 blocks away from the player
|
||||
db 8, 52 ; player is facing down
|
||||
db 8, -12 ; player is facing up
|
||||
db -24, 20 ; player is facing left
|
||||
db 40, 20 ; player is facing right
|
||||
|
||||
Func_f09f: ; f09f (3:709f)
|
||||
push de
|
||||
ld a, [W_CURMAPWIDTH] ; $d369
|
||||
add $6
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld d, $0
|
||||
ld hl, $d35f
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
add hl, bc
|
||||
ld a, [$c109]
|
||||
and a
|
||||
jr z, .asm_f0c7
|
||||
cp $4
|
||||
jr z, .asm_f0cf
|
||||
cp $8
|
||||
jr z, .asm_f0d7
|
||||
ld a, [W_XBLOCKCOORD] ; $d364
|
||||
and a
|
||||
jr z, .asm_f0e0
|
||||
jr .asm_f0ec
|
||||
.asm_f0c7
|
||||
ld a, [W_YBLOCKCOORD] ; $d363
|
||||
and a
|
||||
jr z, .asm_f0e0
|
||||
jr .asm_f0df
|
||||
.asm_f0cf
|
||||
ld a, [W_YBLOCKCOORD] ; $d363
|
||||
and a
|
||||
jr z, .asm_f0e1
|
||||
jr .asm_f0e0
|
||||
.asm_f0d7
|
||||
ld a, [W_XBLOCKCOORD] ; $d364
|
||||
and a
|
||||
jr z, .asm_f0e6
|
||||
jr .asm_f0e0
|
||||
.asm_f0df
|
||||
add hl, bc
|
||||
.asm_f0e0
|
||||
add hl, bc
|
||||
.asm_f0e1
|
||||
ld e, $2
|
||||
add hl, de
|
||||
jr .asm_f0f0
|
||||
.asm_f0e6
|
||||
ld e, $1
|
||||
add hl, bc
|
||||
add hl, de
|
||||
jr .asm_f0f0
|
||||
.asm_f0ec
|
||||
ld e, $3
|
||||
add hl, bc
|
||||
add hl, de
|
||||
.asm_f0f0
|
||||
pop de
|
||||
ld a, [hl]
|
||||
ld c, a
|
||||
.asm_f0f3
|
||||
ld a, [de]
|
||||
inc de
|
||||
inc de
|
||||
cp $ff
|
||||
ret z
|
||||
cp c
|
||||
jr nz, .asm_f0f3
|
||||
dec de
|
||||
ld a, [de]
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
CutTreeBlockSwaps: ; f100 (3:7100)
|
||||
; first byte = tileset block containing the cut tree
|
||||
; second byte = corresponding tileset block after the cut animation happens
|
||||
db $32, $6D
|
||||
db $33, $6C
|
||||
db $34, $6F
|
||||
db $35, $4C
|
||||
db $60, $6E
|
||||
db $0B, $0A
|
||||
db $3C, $35
|
||||
db $3F, $35
|
||||
db $3D, $36
|
||||
db $FF ; list terminator
|
89
engine/overworld/cut2.asm
Executable file
89
engine/overworld/cut2.asm
Executable file
|
@ -0,0 +1,89 @@
|
|||
Func_79e96: ; 79e96 (1e:5e96)
|
||||
ld a, [$cd4d]
|
||||
cp $52
|
||||
jr z, .asm_79ec8
|
||||
ld c, $8
|
||||
.asm_79e9f
|
||||
push bc
|
||||
ld hl, $c391
|
||||
ld a, $1
|
||||
ld [$d08a], a
|
||||
ld c, $2
|
||||
call Func_79339
|
||||
ld hl, $c399
|
||||
ld a, $ff
|
||||
ld [$d08a], a
|
||||
ld c, $2
|
||||
call Func_79339
|
||||
ld a, [rOBP1] ; $ff49
|
||||
xor $64
|
||||
ld [rOBP1], a ; $ff49
|
||||
call DelayFrame
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_79e9f
|
||||
ret
|
||||
.asm_79ec8
|
||||
ld c, $2
|
||||
.asm_79eca
|
||||
push bc
|
||||
ld c, $8
|
||||
call Func_79eed
|
||||
call Func_79f30
|
||||
ld c, $8
|
||||
call Func_79eed
|
||||
call Func_79f30
|
||||
ld hl, $c390
|
||||
ld a, $2
|
||||
ld [$d08a], a
|
||||
ld c, $4
|
||||
call Func_79352
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_79eca
|
||||
ret
|
||||
|
||||
Func_79eed: ; 79eed (1e:5eed)
|
||||
push bc
|
||||
ld hl, $c391
|
||||
ld a, $1
|
||||
ld [$d08a], a
|
||||
ld c, $1
|
||||
call Func_79339
|
||||
ld hl, $c395
|
||||
ld a, $2
|
||||
ld [$d08a], a
|
||||
ld c, $1
|
||||
call Func_79339
|
||||
ld hl, $c399
|
||||
ld a, $fe
|
||||
ld [$d08a], a
|
||||
ld c, $1
|
||||
call Func_79339
|
||||
ld hl, $c39d
|
||||
ld a, $ff
|
||||
ld [$d08a], a
|
||||
ld c, $1
|
||||
call Func_79339
|
||||
ld a, [rOBP1] ; $ff49
|
||||
xor $64
|
||||
ld [rOBP1], a ; $ff49
|
||||
call DelayFrame
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, Func_79eed
|
||||
ret
|
||||
|
||||
Func_79f30: ; 79f30 (1e:5f30)
|
||||
ld hl, $c390
|
||||
ld de, $cee9
|
||||
ld bc, $8
|
||||
call CopyData
|
||||
ld hl, $c398
|
||||
ld de, $c390
|
||||
ld bc, $8
|
||||
call CopyData
|
||||
ld hl, $cee9
|
||||
ld de, $c398
|
||||
ld bc, $8
|
||||
jp CopyData
|
88
engine/overworld/doors.asm
Executable file
88
engine/overworld/doors.asm
Executable file
|
@ -0,0 +1,88 @@
|
|||
HandleDoors: ; 1a609 (6:6609)
|
||||
push de
|
||||
ld hl, DoorTileIDPointers ; $662c
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
ld de, $3
|
||||
call IsInArray
|
||||
pop de
|
||||
jr nc, .asm_1a62a
|
||||
inc hl
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
FuncCoord 8, 9 ; $c45c
|
||||
ld a, [Coord]
|
||||
ld b, a
|
||||
.asm_1a621
|
||||
ld a, [hli]
|
||||
and a
|
||||
jr z, .asm_1a62a
|
||||
cp b
|
||||
jr nz, .asm_1a621
|
||||
scf
|
||||
ret
|
||||
.asm_1a62a
|
||||
and a
|
||||
ret
|
||||
|
||||
DoorTileIDPointers: ; 1a62c (6:662c)
|
||||
db OVERWORLD
|
||||
dw OverworldDoorTileIDs
|
||||
db FOREST
|
||||
dw ForestDoorTileIDs
|
||||
db MART
|
||||
dw MartDoorTileIDs
|
||||
db HOUSE
|
||||
dw HouseDoorTileIDs
|
||||
db FOREST_GATE
|
||||
dw TilesetMuseumDoorTileIDs
|
||||
db MUSEUM
|
||||
dw TilesetMuseumDoorTileIDs
|
||||
db GATE
|
||||
dw TilesetMuseumDoorTileIDs
|
||||
db SHIP
|
||||
dw ShipDoorTileIDs
|
||||
db LOBBY
|
||||
dw LobbyDoorTileIDs
|
||||
db MANSION
|
||||
dw MansionDoorTileIDs
|
||||
db LAB
|
||||
dw LabDoorTileIDs
|
||||
db FACILITY
|
||||
dw FacilityDoorTileIDs
|
||||
db PLATEAU
|
||||
dw PlateauDoorTileIDs
|
||||
db $ff
|
||||
|
||||
OverworldDoorTileIDs: ; 1a654 (6:6654)
|
||||
db $1B,$58,$00
|
||||
|
||||
ForestDoorTileIDs: ; 1a657 (6:6657)
|
||||
db $3a,$00
|
||||
|
||||
MartDoorTileIDs: ; 1a659 (6:6659)
|
||||
db $5e,$00
|
||||
|
||||
HouseDoorTileIDs: ; 1a65b (6:665b)
|
||||
db $54,$00
|
||||
|
||||
TilesetMuseumDoorTileIDs: ; 1a65d (6:665d)
|
||||
db $3b,$00
|
||||
|
||||
ShipDoorTileIDs: ; 1a65f (6:665f)
|
||||
db $1e,$00
|
||||
|
||||
LobbyDoorTileIDs: ; 1a661 (6:6661)
|
||||
db $1c,$38,$1a,$00
|
||||
|
||||
MansionDoorTileIDs: ; 1a665 (6:6665)
|
||||
db $1a,$1c,$53,$00
|
||||
|
||||
LabDoorTileIDs: ; 1a669 (6:6669)
|
||||
db $34,$00
|
||||
|
||||
FacilityDoorTileIDs: ; 1a66b (6:666b)
|
||||
db $43,$58,$1b,$00
|
||||
|
||||
PlateauDoorTileIDs: ; 1a66f (6:666f)
|
||||
db $3b,$1b,$00
|
69
engine/overworld/elevator.asm
Executable file
69
engine/overworld/elevator.asm
Executable file
|
@ -0,0 +1,69 @@
|
|||
ShakeElevator: ; 7bf15 (1e:7f15)
|
||||
ld de, $ffe0
|
||||
call Func_7bf64
|
||||
ld de, $240
|
||||
call Func_7bf64
|
||||
call Delay3
|
||||
ld a, $ff
|
||||
call PlaySound
|
||||
ld a, [$ffaf]
|
||||
ld d, a
|
||||
ld e, $1
|
||||
; number of times to play collision sfx
|
||||
ld b, $64
|
||||
.asm_7bf30
|
||||
ld a, e
|
||||
xor $fe
|
||||
ld e, a
|
||||
add d
|
||||
ld [$ffaf], a
|
||||
push bc
|
||||
ld c, BANK(SFX_02_5b)
|
||||
ld a, (SFX_02_5b - SFX_Headers_02) / 3
|
||||
call PlayMusic
|
||||
pop bc
|
||||
ld c, $2
|
||||
call DelayFrames
|
||||
dec b
|
||||
jr nz, .asm_7bf30
|
||||
ld a, d
|
||||
ld [$ffaf], a
|
||||
ld a, $ff
|
||||
call PlaySound
|
||||
ld c, BANK(SFX_02_5f)
|
||||
ld a, (SFX_02_5f - SFX_Headers_02) / 3
|
||||
call PlayMusic
|
||||
.asm_7bf57
|
||||
ld a, [$c02a]
|
||||
cp $b9
|
||||
jr z, .asm_7bf57
|
||||
call UpdateSprites
|
||||
jp Func_2307
|
||||
|
||||
Func_7bf64: ; 7bf64 (1e:7f64)
|
||||
ld hl, $d527
|
||||
ld a, [hld]
|
||||
push af
|
||||
ld a, [hl]
|
||||
push af
|
||||
push hl
|
||||
push hl
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
add hl, de
|
||||
ld a, h
|
||||
and $3
|
||||
or $98
|
||||
ld d, a
|
||||
ld a, l
|
||||
pop hl
|
||||
ld [hli], a
|
||||
ld [hl], d
|
||||
call ScheduleNorthRowRedraw
|
||||
pop hl
|
||||
pop af
|
||||
ld [hli], a
|
||||
pop af
|
||||
ld [hl], a
|
||||
jp Delay3
|
68
engine/overworld/emotion_bubbles.asm
Executable file
68
engine/overworld/emotion_bubbles.asm
Executable file
|
@ -0,0 +1,68 @@
|
|||
PrintEmotionBubble: ; 17c47 (5:7c47)
|
||||
ld a, [$cd50]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, EmotionBubblesPointerTable ; $7caf
|
||||
add hl, bc
|
||||
add hl, bc
|
||||
ld e, [hl]
|
||||
inc hl
|
||||
ld d, [hl]
|
||||
ld hl, $8f80
|
||||
ld bc, (BANK(EmotionBubblesPointerTable) << 8) + $04
|
||||
call CopyVideoData
|
||||
ld a, [$cfcb]
|
||||
push af
|
||||
ld a, $ff
|
||||
ld [$cfcb], a
|
||||
ld a, [$d736]
|
||||
bit 6, a
|
||||
ld hl, $c38f
|
||||
ld de, $c39f
|
||||
jr z, .asm_17c7a
|
||||
ld hl, $c37f
|
||||
ld de, $c38f
|
||||
.asm_17c7a
|
||||
ld bc, $90
|
||||
.asm_17c7d
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
dec hl
|
||||
dec de
|
||||
dec bc
|
||||
ld a, c
|
||||
or b
|
||||
jr nz, .asm_17c7d
|
||||
ld hl, $c104
|
||||
ld a, [$cd4f]
|
||||
swap a
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
add $8
|
||||
ld c, a
|
||||
ld de, EmotionBubblesOAM ; $7cb5
|
||||
xor a
|
||||
call WriteOAMBlock
|
||||
ld c, $3c
|
||||
call DelayFrames
|
||||
pop af
|
||||
ld [$cfcb], a
|
||||
call DelayFrame
|
||||
jp UpdateSprites
|
||||
|
||||
EmotionBubblesPointerTable: ; 17caf (5:7caf)
|
||||
dw EmotionBubbles
|
||||
dw EmotionBubbles + $40
|
||||
dw EmotionBubbles + $80
|
||||
|
||||
EmotionBubblesOAM: ; 17cb5 (5:7cb5)
|
||||
db $F8,$00,$F9,$00
|
||||
db $FA,$00,$FB,$00
|
||||
|
||||
EmotionBubbles: ; 17cbd (5:7cbd)
|
||||
INCBIN "gfx/emotion_bubbles.w16.2bpp"
|
102
engine/overworld/healing_machine.asm
Executable file
102
engine/overworld/healing_machine.asm
Executable file
|
@ -0,0 +1,102 @@
|
|||
AnimateHealingMachine: ; 70433 (1c:4433)
|
||||
ld de, PokeCenterFlashingMonitorAndHealBall ; $44b7
|
||||
ld hl, $87c0
|
||||
ld bc, (BANK(PokeCenterFlashingMonitorAndHealBall) << 8) + $03
|
||||
call CopyVideoData
|
||||
ld hl, $cfcb
|
||||
ld a, [hl]
|
||||
push af
|
||||
ld [hl], $ff
|
||||
push hl
|
||||
ld a, [rOBP1] ; $ff49
|
||||
push af
|
||||
ld a, $e0
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld hl, $c384
|
||||
ld de, PokeCenterOAMData ; $44d7
|
||||
call Func_70503
|
||||
ld a, $4
|
||||
ld [wMusicHeaderPointer], a
|
||||
ld a, $ff
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
.asm_70464
|
||||
ld a, [wMusicHeaderPointer]
|
||||
and a
|
||||
jr nz, .asm_70464
|
||||
ld a, [W_NUMINPARTY] ; $d163
|
||||
ld b, a
|
||||
.asm_7046e
|
||||
call Func_70503
|
||||
ld a, (SFX_02_4a - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld c, $1e
|
||||
call DelayFrames
|
||||
dec b
|
||||
jr nz, .asm_7046e
|
||||
ld a, [$c0ef]
|
||||
cp $1f
|
||||
ld [$c0f0], a
|
||||
jr nz, .asm_70495
|
||||
ld a, $ff
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld a, Bank(Func_9876)
|
||||
ld [$c0ef], a
|
||||
.asm_70495
|
||||
ld a, MUSIC_PKMN_HEALED
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld d, $28
|
||||
call Func_704f3
|
||||
.asm_704a2
|
||||
ld a, [$c026]
|
||||
cp MUSIC_PKMN_HEALED
|
||||
jr z, .asm_704a2
|
||||
ld c, $20
|
||||
call DelayFrames
|
||||
pop af
|
||||
ld [rOBP1], a ; $ff49
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
jp UpdateSprites
|
||||
|
||||
PokeCenterFlashingMonitorAndHealBall: ; 704b7 (1c:44b7)
|
||||
INCBIN "gfx/pokecenter_ball.2bpp"
|
||||
|
||||
PokeCenterOAMData: ; 704d7 (1c:44d7)
|
||||
db $24,$34,$7C,$10 ; heal machine monitor
|
||||
db $2B,$30,$7D,$10 ; pokeballs 1-6
|
||||
db $2B,$38,$7D,$30
|
||||
db $30,$30,$7D,$10
|
||||
db $30,$38,$7D,$30
|
||||
db $35,$30,$7D,$10
|
||||
db $35,$38,$7D,$30
|
||||
|
||||
Func_704f3: ; 704f3 (1c:44f3)
|
||||
ld b, $8
|
||||
.asm_704f5
|
||||
ld a, [rOBP1] ; $ff49
|
||||
xor d
|
||||
ld [rOBP1], a ; $ff49
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
dec b
|
||||
jr nz, .asm_704f5
|
||||
ret
|
||||
|
||||
Func_70503: ; 70503 (1c:4503)
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ret
|
168
engine/overworld/hidden_items.asm
Executable file
168
engine/overworld/hidden_items.asm
Executable file
|
@ -0,0 +1,168 @@
|
|||
HiddenItems: ; 76688 (1d:6688)
|
||||
ld hl, HiddenItemCoords
|
||||
call Func_76857
|
||||
ld [$cd41], a
|
||||
ld hl, $d6f0
|
||||
ld a, [$cd41]
|
||||
ld c, a
|
||||
ld b, $2
|
||||
ld a, $10
|
||||
call Predef
|
||||
ld a, c
|
||||
and a
|
||||
ret nz
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, $1
|
||||
ld [$cc3c], a
|
||||
ld a, [$cd3d] ; item ID
|
||||
ld [$d11e], a
|
||||
call GetItemName
|
||||
ld a, $24
|
||||
jp PrintPredefTextID
|
||||
|
||||
INCLUDE "data/hidden_item_coords.asm"
|
||||
|
||||
FoundHiddenItemText: ; 7675b (1d:675b)
|
||||
; XXX where is the pointer to this?
|
||||
TX_FAR _FoundHiddenItemText
|
||||
db $8
|
||||
ld a, [$cd3d] ; item ID
|
||||
ld b, a
|
||||
ld c, 1
|
||||
call GiveItem
|
||||
jr nc, .BagFull
|
||||
ld hl, $d6f0
|
||||
ld a, [$cd41]
|
||||
ld c, a
|
||||
ld b, $1
|
||||
ld a, $10
|
||||
call Predef
|
||||
ld a, (SFX_02_3b - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent ; play sound
|
||||
call WaitForSoundToFinish ; wait for sound to finish playing
|
||||
jp TextScriptEnd
|
||||
.BagFull
|
||||
call WaitForTextScrollButtonPress ; wait for button press
|
||||
xor a
|
||||
ld [$cc3c], a
|
||||
ld hl, HiddenItemBagFullText
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
HiddenItemBagFullText: ; 76794 (1d:6794)
|
||||
TX_FAR _HiddenItemBagFullText
|
||||
db "@"
|
||||
|
||||
HiddenCoins: ; 76799 (1d:6799)
|
||||
ld b, COIN_CASE
|
||||
ld a, $1c
|
||||
call Predef
|
||||
ld a, b
|
||||
and a
|
||||
ret z
|
||||
ld hl, HiddenCoinCoords
|
||||
call Func_76857
|
||||
ld [$cd41], a
|
||||
ld hl, $d6fe
|
||||
ld a, [$cd41]
|
||||
ld c, a
|
||||
ld b, $2
|
||||
ld a, $10
|
||||
call Predef
|
||||
ld a, c
|
||||
and a
|
||||
ret nz
|
||||
xor a
|
||||
ld [$ff9f], a
|
||||
ld [$ffa0], a
|
||||
ld [$ffa1], a
|
||||
ld a, [$cd3d]
|
||||
sub COIN
|
||||
cp 10
|
||||
jr z, .bcd10
|
||||
cp 20
|
||||
jr z, .bcd20
|
||||
cp 40
|
||||
jr z, .bcd20
|
||||
jr .bcd100
|
||||
.bcd10
|
||||
ld a, $10
|
||||
ld [$ffa1], a
|
||||
jr .bcddone
|
||||
.bcd20
|
||||
ld a, $20
|
||||
ld [$ffa1], a
|
||||
jr .bcddone
|
||||
.bcd40 ; due to a typo, this is never used
|
||||
ld a, $40
|
||||
ld [$ffa1], a
|
||||
jr .bcddone
|
||||
.bcd100
|
||||
ld a, $1
|
||||
ld [$ffa0], a
|
||||
.bcddone
|
||||
ld de, $d5a5
|
||||
ld hl, $ffa1
|
||||
ld c, $2
|
||||
ld a, $b
|
||||
call Predef
|
||||
ld hl, $d6fe
|
||||
ld a, [$cd41]
|
||||
ld c, a
|
||||
ld b, $1
|
||||
ld a, $10
|
||||
call Predef
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, [wPlayerCoins]
|
||||
cp $99
|
||||
jr nz, .RoomInCoinCase
|
||||
ld a, [wPlayerCoins + 1]
|
||||
cp $99
|
||||
jr nz, .RoomInCoinCase
|
||||
ld a, $2c
|
||||
jr .done
|
||||
.RoomInCoinCase
|
||||
ld a, $2b
|
||||
.done
|
||||
jp PrintPredefTextID
|
||||
|
||||
INCLUDE "data/hidden_coins.asm"
|
||||
|
||||
FoundHiddenCoinsText: ; 76847 (1d:6847)
|
||||
TX_FAR _FoundHiddenCoinsText
|
||||
db $10,"@"
|
||||
|
||||
DroppedHiddenCoinsText: ; 7684d (1d:684d)
|
||||
TX_FAR _FoundHiddenCoins2Text
|
||||
db $10
|
||||
TX_FAR _DroppedHiddenCoinsText
|
||||
db "@"
|
||||
|
||||
Func_76857: ; 76857 (1d:6857)
|
||||
ld a, [$cd40]
|
||||
ld d, a
|
||||
ld a, [$cd41]
|
||||
ld e, a
|
||||
ld a, [W_CURMAP]
|
||||
ld b, a
|
||||
ld c, $ff
|
||||
.loop
|
||||
inc c
|
||||
ld a, [hli]
|
||||
cp $ff ; end of the list?
|
||||
ret z ; if so, we're done here
|
||||
cp b
|
||||
jr nz, .asm_76877 ; 0x7686b $a
|
||||
ld a, [hli]
|
||||
cp d
|
||||
jr nz, .asm_76878 ; 0x7686f $7
|
||||
ld a, [hli]
|
||||
cp e
|
||||
jr nz, .loop
|
||||
ld a, c
|
||||
ret
|
||||
.asm_76877
|
||||
inc hl
|
||||
.asm_76878
|
||||
inc hl
|
||||
jr .loop
|
129
engine/overworld/hidden_objects.asm
Executable file
129
engine/overworld/hidden_objects.asm
Executable file
|
@ -0,0 +1,129 @@
|
|||
Func_46981: ; 46981 (11:6981)
|
||||
xor a
|
||||
ld [$d71e], a
|
||||
ld a, [$d72d]
|
||||
bit 4, a
|
||||
ret nz
|
||||
call ArePlayerCoordsInArray
|
||||
ret nc
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld [$d71e], a
|
||||
ld hl, $d72d
|
||||
set 4, [hl]
|
||||
ld hl, $d732
|
||||
set 4, [hl]
|
||||
ret
|
||||
|
||||
Func_469a0: ; 469a0 (11:69a0)
|
||||
ld hl, $ffeb
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld de, $0
|
||||
ld hl, HiddenObjectMaps ; $6a40
|
||||
.asm_469ae
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
cp $ff
|
||||
jr z, .asm_469fc
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp b
|
||||
jr z, .asm_469be
|
||||
inc de
|
||||
inc de
|
||||
jr .asm_469ae
|
||||
.asm_469be
|
||||
ld hl, HiddenObjectPointers ; $6a96
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push hl
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
pop hl
|
||||
.asm_469ce
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_469fc
|
||||
ld [$cd40], a
|
||||
ld b, a
|
||||
ld a, [hli]
|
||||
ld [$cd41], a
|
||||
ld c, a
|
||||
call Func_46a01
|
||||
ld a, [$ffea]
|
||||
and a
|
||||
jr z, .asm_469f0
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
inc hl
|
||||
push hl
|
||||
ld hl, $cd3f
|
||||
inc [hl]
|
||||
pop hl
|
||||
jr .asm_469ce
|
||||
.asm_469f0
|
||||
ld a, [hli]
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld a, [hli]
|
||||
ld [$cd3e], a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ret
|
||||
.asm_469fc
|
||||
ld a, $ff
|
||||
ld [$ffee], a
|
||||
ret
|
||||
|
||||
Func_46a01: ; 46a01 (11:6a01)
|
||||
ld a, [$c109]
|
||||
cp $4
|
||||
jr z, .asm_46a16
|
||||
cp $8
|
||||
jr z, .asm_46a25
|
||||
cp $c
|
||||
jr z, .asm_46a2b
|
||||
ld a, [W_YCOORD] ; $d361
|
||||
inc a
|
||||
jr .asm_46a1a
|
||||
.asm_46a16
|
||||
ld a, [W_YCOORD] ; $d361
|
||||
dec a
|
||||
.asm_46a1a
|
||||
cp b
|
||||
jr nz, .asm_46a3b
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
cp c
|
||||
jr nz, .asm_46a3b
|
||||
jr .asm_46a38
|
||||
.asm_46a25
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
dec a
|
||||
jr .asm_46a2f
|
||||
.asm_46a2b
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
inc a
|
||||
.asm_46a2f
|
||||
cp c
|
||||
jr nz, .asm_46a3b
|
||||
ld a, [W_YCOORD] ; $d361
|
||||
cp b
|
||||
jr nz, .asm_46a3b
|
||||
.asm_46a38
|
||||
xor a
|
||||
jr .asm_46a3d
|
||||
.asm_46a3b
|
||||
ld a, $ff
|
||||
.asm_46a3d
|
||||
ld [$ffea], a
|
||||
ret
|
||||
|
||||
INCLUDE "data/hidden_objects.asm"
|
87
engine/overworld/ledges.asm
Executable file
87
engine/overworld/ledges.asm
Executable file
|
@ -0,0 +1,87 @@
|
|||
HandleLedges: ; 1a672 (6:6672)
|
||||
ld a, [$d736]
|
||||
bit 6, a
|
||||
ret nz
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
and a ; OVERWORLD
|
||||
ret nz
|
||||
ld a, $35
|
||||
call Predef ; indirect jump to Func_c586 (c586 (3:4586))
|
||||
ld a, [$c109]
|
||||
ld b, a
|
||||
FuncCoord 8, 9 ; $c45c
|
||||
ld a, [Coord]
|
||||
ld c, a
|
||||
ld a, [$cfc6]
|
||||
ld d, a
|
||||
ld hl, LedgeTiles ; $66cf
|
||||
.asm_1a691
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
cp b
|
||||
jr nz, .asm_1a6a4
|
||||
ld a, [hli]
|
||||
cp c
|
||||
jr nz, .asm_1a6a5
|
||||
ld a, [hli]
|
||||
cp d
|
||||
jr nz, .asm_1a6a6
|
||||
ld a, [hl]
|
||||
ld e, a
|
||||
jr .asm_1a6a9
|
||||
.asm_1a6a4
|
||||
inc hl
|
||||
.asm_1a6a5
|
||||
inc hl
|
||||
.asm_1a6a6
|
||||
inc hl
|
||||
jr .asm_1a691
|
||||
.asm_1a6a9
|
||||
ld a, [H_CURRENTPRESSEDBUTTONS]
|
||||
and e
|
||||
ret z
|
||||
ld a, $ff
|
||||
ld [wJoypadForbiddenButtonsMask], a
|
||||
ld hl, $d736
|
||||
set 6, [hl]
|
||||
call Func_3486
|
||||
ld a, e
|
||||
ld [$ccd3], a
|
||||
ld [$ccd4], a
|
||||
ld a, $2
|
||||
ld [$cd38], a
|
||||
call LoadHoppingShadowOAM
|
||||
ld a, (SFX_02_4e - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ret
|
||||
|
||||
; (player direction) (tile player standing on) (ledge tile) (input required)
|
||||
LedgeTiles: ; 1a6cf (6:66cf)
|
||||
db $00,$2C,$37,$80
|
||||
db $00,$39,$36,$80
|
||||
db $00,$39,$37,$80
|
||||
db $08,$2C,$27,$20
|
||||
db $08,$39,$27,$20
|
||||
db $0C,$2C,$0D,$10
|
||||
db $0C,$2C,$1D,$10
|
||||
db $0C,$39,$0D,$10
|
||||
db $FF
|
||||
|
||||
LoadHoppingShadowOAM: ; 1a6f0 (6:66f0)
|
||||
ld hl, $8ff0
|
||||
ld de, LedgeHoppingShadow ; $6708
|
||||
ld bc, (BANK(LedgeHoppingShadow) << 8) + $01
|
||||
call CopyVideoDataDouble
|
||||
ld a, $9
|
||||
ld bc, $5448 ; b, c = y, x coordinates of shadow
|
||||
ld de, LedgeHoppingShadowOAM ; $6710
|
||||
call WriteOAMBlock
|
||||
ret
|
||||
|
||||
LedgeHoppingShadow: ; 1a708 (6:6708)
|
||||
INCBIN "gfx/ledge_hopping_shadow.1bpp"
|
||||
|
||||
LedgeHoppingShadowOAM: ; 1a710 (6:6710)
|
||||
db $FF,$10,$FF,$20
|
||||
db $FF,$40,$FF,$60
|
440
engine/overworld/map_sprites.asm
Executable file
440
engine/overworld/map_sprites.asm
Executable file
|
@ -0,0 +1,440 @@
|
|||
; Loads tile patterns for map's sprites.
|
||||
; For outside maps, it loads one of several fixed sets of sprites.
|
||||
; For inside maps, it loads each sprite picture ID used in the map header.
|
||||
; This is also called after displaying text because loading
|
||||
; text tile patterns overwrites half of the sprite tile pattern data.
|
||||
; Note on notation:
|
||||
; $C1X* and $C2X* are used to denote $C100-$C1FF and $C200-$C2FF sprite slot
|
||||
; fields, respectively, within loops. The X is the loop index.
|
||||
; If there is an inner loop, Y is the inner loop index, i.e. $C1Y* and $C2Y*
|
||||
; denote fields of the sprite slots interated over in the inner loop.
|
||||
InitMapSprites: ; 1785b (5:785b)
|
||||
call InitOutsideMapSprites
|
||||
ret c ; return if the map is an outside map (already handled by above call)
|
||||
; if the map is an inside map (i.e. mapID >= $25)
|
||||
ld hl,wSpriteStateData1
|
||||
ld de,$c20d
|
||||
; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns.
|
||||
.copyPictureIDLoop
|
||||
ld a,[hl] ; $C1X0 (picture ID)
|
||||
ld [de],a ; $C2XD
|
||||
ld a,$10
|
||||
add e
|
||||
ld e,a
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
jr nz,.copyPictureIDLoop
|
||||
|
||||
; This is used for both inside and outside maps, since it is called by
|
||||
; InitOutsideMapSprites.
|
||||
; Loads tile pattern data for sprites into VRAM.
|
||||
LoadMapSpriteTilePatterns: ; 17871 (5:7871)
|
||||
ld a,[W_NUMSPRITES]
|
||||
and a ; are there any sprites?
|
||||
jr nz,.spritesExist
|
||||
ret
|
||||
.spritesExist
|
||||
ld c,a ; c = [W_NUMSPRITES]
|
||||
ld b,$10 ; number of sprite slots
|
||||
ld hl,$c20d
|
||||
xor a
|
||||
ld [$ff8e],a ; 4-tile sprite counter
|
||||
.copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE
|
||||
ld a,[hli] ; $C2XD (sprite picture ID)
|
||||
ld [hld],a ; $C2XE
|
||||
ld a,l
|
||||
add a,$10
|
||||
ld l,a
|
||||
dec b
|
||||
jr nz,.copyPictureIDLoop
|
||||
ld hl,$c21e
|
||||
.loadTilePatternLoop
|
||||
ld de,$c21d
|
||||
; Check if the current picture ID has already had its tile patterns loaded.
|
||||
; This done by looping through the previous sprite slots and seeing if any of
|
||||
; their picture ID's match that of the current sprite slot.
|
||||
.checkIfAlreadyLoadedLoop
|
||||
ld a,e
|
||||
and a,$f0
|
||||
ld b,a ; b = offset of the wSpriteStateData2 sprite slot being checked against
|
||||
ld a,l
|
||||
and a,$f0 ; a = offset of current wSpriteStateData2 sprite slot
|
||||
cp b ; done checking all previous sprite slots?
|
||||
jr z,.notAlreadyLoaded
|
||||
ld a,[de] ; picture ID of the wSpriteStateData2 sprite slot being checked against
|
||||
cp [hl] ; do the picture ID's match?
|
||||
jp z,.alreadyLoaded
|
||||
ld a,e
|
||||
add a,$10
|
||||
ld e,a
|
||||
jr .checkIfAlreadyLoadedLoop
|
||||
.notAlreadyLoaded
|
||||
ld de,$c20e
|
||||
ld b,$01
|
||||
; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot
|
||||
; this is done in order to find the first free VRAM slot available
|
||||
.findNextVRAMSlotLoop
|
||||
ld a,e
|
||||
add a,$10
|
||||
ld e,a
|
||||
ld a,l
|
||||
cp e ; reached current slot?
|
||||
jr z,.foundNextVRAMSlot
|
||||
ld a,[de] ; $C2YE (VRAM slot)
|
||||
cp a,11 ; is it one of the first 10 slots?
|
||||
jr nc,.findNextVRAMSlotLoop
|
||||
cp b ; compare the slot being checked to the current max
|
||||
jr c,.findNextVRAMSlotLoop ; if the slot being checked is less than the current max
|
||||
; if the slot being checked is greater than or equal to the current max
|
||||
ld b,a ; store new max VRAM slot
|
||||
jr .findNextVRAMSlotLoop
|
||||
.foundNextVRAMSlot
|
||||
inc b ; increment previous max value to get next VRAM tile pattern slot
|
||||
ld a,b ; a = next VRAM tile pattern slot
|
||||
push af
|
||||
ld a,[hl] ; $C2XE (sprite picture ID)
|
||||
ld b,a ; b = current sprite picture ID
|
||||
cp a,SPRITE_BALL ; is it a 4-tile sprite?
|
||||
jr c,.notFourTileSprite
|
||||
pop af
|
||||
ld a,[$ff8e] ; 4-tile sprite counter
|
||||
add a,11
|
||||
jr .storeVRAMSlot
|
||||
.notFourTileSprite
|
||||
pop af
|
||||
.storeVRAMSlot
|
||||
ld [hl],a ; store VRAM slot at $C2XE
|
||||
ld [$ff8d],a ; used to determine if it's 4-tile sprite later
|
||||
ld a,b ; a = current sprite picture ID
|
||||
dec a
|
||||
add a
|
||||
add a
|
||||
push bc
|
||||
push hl
|
||||
ld hl,SpriteSheetPointerTable
|
||||
jr nc,.noCarry
|
||||
inc h
|
||||
.noCarry
|
||||
add l
|
||||
ld l,a
|
||||
jr nc,.noCarry2
|
||||
inc h
|
||||
.noCarry2
|
||||
push hl
|
||||
call ReadSpriteSheetData
|
||||
push af
|
||||
push de
|
||||
push bc
|
||||
ld hl,$8000 ; VRAM base address
|
||||
ld bc,$c0 ; number of bytes per VRAM slot
|
||||
ld a,[$ff8d]
|
||||
cp a,11 ; is it a 4-tile sprite?
|
||||
jr nc,.fourTileSpriteVRAMAddr
|
||||
ld d,a
|
||||
dec d
|
||||
; Equivalent to multiplying $C0 (number of bytes in 12 tiles) times the VRAM
|
||||
; slot and adding the result to $8000 (the VRAM base address).
|
||||
.calculateVRAMAddrLoop
|
||||
add hl,bc
|
||||
dec d
|
||||
jr nz,.calculateVRAMAddrLoop
|
||||
jr .loadStillTilePattern
|
||||
.fourTileSpriteVRAMAddr
|
||||
ld hl,$87c0 ; address for second 4-tile sprite
|
||||
ld a,[$ff8e] ; 4-tile sprite counter
|
||||
and a ; is it the first 4-tile sprite?
|
||||
jr nz,.loadStillTilePattern
|
||||
; if it's the first 4-tile sprite
|
||||
ld hl,$8780 ; address for first 4-tile sprite
|
||||
inc a
|
||||
ld [$ff8e],a ; 4-tile sprite counter
|
||||
.loadStillTilePattern
|
||||
pop bc
|
||||
pop de
|
||||
pop af
|
||||
push hl
|
||||
push hl
|
||||
ld h,d
|
||||
ld l,e
|
||||
pop de
|
||||
ld b,a
|
||||
ld a,[$cfc4]
|
||||
bit 0,a ; reloading upper half of tile patterns after displaying text?
|
||||
jr nz,.skipFirstLoad ; if so, skip loading data into the lower half
|
||||
ld a,b
|
||||
ld b,0
|
||||
call FarCopyData2 ; load tile pattern data for sprite when standing still
|
||||
.skipFirstLoad
|
||||
pop de
|
||||
pop hl
|
||||
ld a,[$ff8d]
|
||||
cp a,11 ; is it a 4-tile sprite?
|
||||
jr nc,.skipSecondLoad ; if so, there is no second block
|
||||
push de
|
||||
call ReadSpriteSheetData
|
||||
push af
|
||||
ld a,$c0
|
||||
add e
|
||||
ld e,a
|
||||
jr nc,.noCarry3
|
||||
inc d
|
||||
.noCarry3
|
||||
ld a,[$cfc4]
|
||||
bit 0,a ; reloading upper half of tile patterns after displaying text?
|
||||
jr nz,.loadWhileLCDOn
|
||||
pop af
|
||||
pop hl
|
||||
set 3,h ; add $800 to hl
|
||||
push hl
|
||||
ld h,d
|
||||
ld l,e
|
||||
pop de
|
||||
call FarCopyData2 ; load tile pattern data for sprite when walking
|
||||
jr .skipSecondLoad
|
||||
; When reloading the upper half of tile patterns after diplaying text, the LCD
|
||||
; will be on, so CopyVideoData (which writes to VRAM only during V-blank) must
|
||||
; be used instead of FarCopyData2.
|
||||
.loadWhileLCDOn
|
||||
pop af
|
||||
pop hl
|
||||
set 3,h ; add $800 to hl
|
||||
ld b,a
|
||||
swap c
|
||||
call CopyVideoData ; load tile pattern data for sprite when walking
|
||||
.skipSecondLoad
|
||||
pop hl
|
||||
pop bc
|
||||
jr .nextSpriteSlot
|
||||
.alreadyLoaded ; if the current picture ID has already had its tile patterns loaded
|
||||
inc de
|
||||
ld a,[de] ; a = VRAM slot for the current picture ID (from $C2YE)
|
||||
ld [hl],a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE)
|
||||
.nextSpriteSlot
|
||||
ld a,l
|
||||
add a,$10
|
||||
ld l,a
|
||||
dec c
|
||||
jp nz,.loadTilePatternLoop
|
||||
ld hl,$c20d
|
||||
ld b,$10
|
||||
; the pictures ID's stored at $C2XD are no longer needed, so zero them
|
||||
.zeroStoredPictureIDLoop
|
||||
xor a
|
||||
ld [hl],a ; $C2XD
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
dec b
|
||||
jr nz,.zeroStoredPictureIDLoop
|
||||
ret
|
||||
|
||||
; reads data from SpriteSheetPointerTable
|
||||
; INPUT:
|
||||
; hl = address of sprite sheet entry
|
||||
; OUTPUT:
|
||||
; de = pointer to sprite sheet
|
||||
; bc = length in bytes
|
||||
; a = ROM bank
|
||||
ReadSpriteSheetData: ; 17971 (5:7971)
|
||||
ld a,[hli]
|
||||
ld e,a
|
||||
ld a,[hli]
|
||||
ld d,a
|
||||
ld a,[hli]
|
||||
ld c,a
|
||||
xor a
|
||||
ld b,a
|
||||
ld a,[hli]
|
||||
ret
|
||||
|
||||
; Loads sprite set for outside maps (cities and routes) and sets VRAM slots.
|
||||
; sets carry if the map is a city or route, unsets carry if not
|
||||
InitOutsideMapSprites: ; 1797b (5:797b)
|
||||
ld a,[W_CURMAP]
|
||||
cp a,REDS_HOUSE_1F ; is the map a city or a route (map ID less than $25)?
|
||||
ret nc ; if not, return
|
||||
ld hl,MapSpriteSets
|
||||
add l
|
||||
ld l,a
|
||||
jr nc,.noCarry
|
||||
inc h
|
||||
.noCarry
|
||||
ld a,[hl] ; a = spriteSetID
|
||||
cp a,$f0 ; does the map have 2 sprite sets?
|
||||
call nc,GetSplitMapSpriteSetID ; if so, choose the appropriate one
|
||||
ld b,a ; b = spriteSetID
|
||||
ld a,[$cfc4]
|
||||
bit 0,a ; reloading upper half of tile patterns after displaying text?
|
||||
jr nz,.loadSpriteSet ; if so, forcibly reload the sprite set
|
||||
ld a,[W_SPRITESETID]
|
||||
cp b ; has the sprite set ID changed?
|
||||
jr z,.skipLoadingSpriteSet ; if not, don't load it again
|
||||
.loadSpriteSet
|
||||
ld a,b
|
||||
ld [W_SPRITESETID],a
|
||||
dec a
|
||||
ld b,a
|
||||
sla a
|
||||
ld c,a
|
||||
sla a
|
||||
sla a
|
||||
add c
|
||||
add b ; a = (spriteSetID - 1) * 11
|
||||
ld de,SpriteSets
|
||||
; add a to de to get offset of sprite set
|
||||
add e
|
||||
ld e,a
|
||||
jr nc,.noCarry2
|
||||
inc d
|
||||
.noCarry2
|
||||
ld hl,$c20d
|
||||
ld a,SPRITE_RED
|
||||
ld [hl],a
|
||||
ld bc,W_SPRITESET
|
||||
; Load the sprite set into RAM.
|
||||
; This loop also fills $C2XD (sprite picture ID) where X is from $0 to $A
|
||||
; with picture ID's. This is done so that LoadMapSpriteTilePatterns will
|
||||
; load tile patterns for all sprite pictures in the sprite set.
|
||||
.loadSpriteSetLoop
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
ld a,[de] ; sprite picture ID from sprite set
|
||||
ld [hl],a ; $C2XD (sprite picture ID)
|
||||
ld [bc],a
|
||||
inc de
|
||||
inc bc
|
||||
ld a,l
|
||||
cp a,$bd ; reached 11th sprite slot?
|
||||
jr nz,.loadSpriteSetLoop
|
||||
ld b,4 ; 4 remaining sprite slots
|
||||
.zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
xor a
|
||||
ld [hl],a ; $C2XD (sprite picture ID)
|
||||
dec b
|
||||
jr nz,.zeroRemainingSlotsLoop
|
||||
ld a,[W_NUMSPRITES]
|
||||
push af ; save number of sprites
|
||||
ld a,11 ; 11 sprites in sprite set
|
||||
ld [W_NUMSPRITES],a
|
||||
call LoadMapSpriteTilePatterns
|
||||
pop af
|
||||
ld [W_NUMSPRITES],a ; restore number of sprites
|
||||
ld hl,$c21e
|
||||
ld b,$0f
|
||||
; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the
|
||||
; order of the map's sprite set, not the order of the actual sprites loaded
|
||||
; for the current map. So, they are not needed and are zeroed by this loop.
|
||||
.zeroVRAMSlotsLoop
|
||||
xor a
|
||||
ld [hl],a ; $C2XE (VRAM slot)
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
dec b
|
||||
jr nz,.zeroVRAMSlotsLoop
|
||||
.skipLoadingSpriteSet
|
||||
ld hl,$c110
|
||||
; This loop stores the correct VRAM tile pattern slots according the sprite
|
||||
; data from the map's header. Since the VRAM tile pattern slots are filled in
|
||||
; the order of the sprite set, in order to find the VRAM tile pattern slot
|
||||
; for a sprite slot, the picture ID for the sprite is looked up within the
|
||||
; sprite set. The index of the picture ID within the sprite set plus one
|
||||
; (since the Red sprite always has the first VRAM tile pattern slot) is the
|
||||
; VRAM tile pattern slot.
|
||||
.storeVRAMSlotsLoop
|
||||
ld c,0
|
||||
ld a,[hl] ; $C1X0 (picture ID) (zero if sprite slot is not used)
|
||||
and a ; is the sprite slot used?
|
||||
jr z,.skipGettingPictureIndex ; if the sprite slot is not used
|
||||
ld b,a ; b = picture ID
|
||||
ld de,W_SPRITESET
|
||||
; Loop to find the index of the sprite's picture ID within the sprite set.
|
||||
.getPictureIndexLoop
|
||||
inc c
|
||||
ld a,[de]
|
||||
inc de
|
||||
cp b ; does the picture ID match?
|
||||
jr nz,.getPictureIndexLoop
|
||||
inc c
|
||||
.skipGettingPictureIndex
|
||||
push hl
|
||||
inc h
|
||||
ld a,$0e
|
||||
add l
|
||||
ld l,a
|
||||
ld a,c ; a = VRAM slot (zero if sprite slot is not used)
|
||||
ld [hl],a ; $C2XE (VRAM slot)
|
||||
pop hl
|
||||
ld a,$10
|
||||
add l
|
||||
ld l,a
|
||||
and a
|
||||
jr nz,.storeVRAMSlotsLoop
|
||||
scf
|
||||
ret
|
||||
|
||||
; Chooses the correct sprite set ID depending on the player's position within
|
||||
; the map for maps with two sprite sets.
|
||||
GetSplitMapSpriteSetID: ; 17a1a (5:7a1a)
|
||||
cp a,$f8
|
||||
jr z,.route20
|
||||
ld hl,SplitMapSpriteSets
|
||||
and a,$0f
|
||||
dec a
|
||||
sla a
|
||||
sla a
|
||||
add l
|
||||
ld l,a
|
||||
jr nc,.noCarry
|
||||
inc h
|
||||
.noCarry
|
||||
ld a,[hli] ; determines whether the map is split East/West or North/South
|
||||
cp a,$01
|
||||
ld a,[hli] ; position of dividing line
|
||||
ld b,a
|
||||
jr z,.eastWestDivide
|
||||
.northSouthDivide
|
||||
ld a,[W_YCOORD]
|
||||
jr .compareCoord
|
||||
.eastWestDivide
|
||||
ld a,[W_XCOORD]
|
||||
.compareCoord
|
||||
cp b
|
||||
jr c,.loadSpriteSetID
|
||||
; if in the East side or South side
|
||||
inc hl
|
||||
.loadSpriteSetID
|
||||
ld a,[hl]
|
||||
ret
|
||||
; Uses sprite set $01 for West side and $0A for East side.
|
||||
; Route 20 is a special case because the two map sections have a more complex
|
||||
; shape instead of the map simply being split horizontally or vertically.
|
||||
.route20
|
||||
ld hl,W_XCOORD
|
||||
ld a,[hl]
|
||||
cp a,$2b
|
||||
ld a,$01
|
||||
ret c
|
||||
ld a,[hl]
|
||||
cp a,$3e
|
||||
ld a,$0a
|
||||
ret nc
|
||||
ld a,[hl]
|
||||
cp a,$37
|
||||
ld b,$08
|
||||
jr nc,.next
|
||||
ld b,$0d
|
||||
.next
|
||||
ld a,[W_YCOORD]
|
||||
cp b
|
||||
ld a,$0a
|
||||
ret c
|
||||
ld a,$01
|
||||
ret
|
||||
|
||||
INCLUDE "data/sprite_sets.asm"
|
291
engine/overworld/npc_movement.asm
Executable file
291
engine/overworld/npc_movement.asm
Executable file
|
@ -0,0 +1,291 @@
|
|||
Func_1a3e0: ; 1a3e0 (6:63e0)
|
||||
ld hl, $d730
|
||||
res 1, [hl]
|
||||
call HandleDoors
|
||||
jr nc, .asm_1a406
|
||||
ld a, $fc
|
||||
ld [wJoypadForbiddenButtonsMask], a
|
||||
ld hl, $d736
|
||||
set 1, [hl]
|
||||
ld a, $1
|
||||
ld [$cd38], a
|
||||
ld a, $80
|
||||
ld [$ccd3], a
|
||||
xor a
|
||||
ld [$c102], a
|
||||
call Func_3486
|
||||
ret
|
||||
.asm_1a406
|
||||
xor a
|
||||
ld [$cd3a], a
|
||||
ld [$cd38], a
|
||||
ld [$ccd3], a
|
||||
ld hl, $d736
|
||||
res 0, [hl]
|
||||
res 1, [hl]
|
||||
ld hl, $d730
|
||||
res 7, [hl]
|
||||
ret
|
||||
|
||||
Func_1a41d: ; 1a41d (6:641d)
|
||||
ld hl, $d730
|
||||
res 7, [hl]
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
ld hl, $d736
|
||||
res 0, [hl]
|
||||
res 1, [hl]
|
||||
xor a
|
||||
ld [$cf17], a
|
||||
ld [$cc57], a
|
||||
ld [$cf10], a
|
||||
ld [$cd3a], a
|
||||
ld [$cd38], a
|
||||
ld [$ccd3], a
|
||||
ret
|
||||
|
||||
PointerTable_1a442: ; 1a442 (6:6442)
|
||||
dw Func_1a44c
|
||||
dw Func_1a485
|
||||
dw Func_1a4a1
|
||||
dw Func_1a4a6
|
||||
dw Func_1a4f4
|
||||
|
||||
Func_1a44c: ; 1a44c (6:644c)
|
||||
ld a, [W_XCOORD] ; $d362
|
||||
sub $a
|
||||
ld [$cca1], a
|
||||
jr z, .asm_1a475
|
||||
ld b, $0
|
||||
ld c, a
|
||||
ld hl, $cc97
|
||||
ld a, $80
|
||||
call FillMemory
|
||||
ld [hl], $ff
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
ld de, $cc97
|
||||
call MoveSprite
|
||||
ld a, $1
|
||||
ld [$cf10], a
|
||||
jr .asm_1a47a
|
||||
.asm_1a475
|
||||
ld a, $3
|
||||
ld [$cf10], a
|
||||
.asm_1a47a
|
||||
ld hl, W_FLAGS_D733
|
||||
set 1, [hl]
|
||||
ld a, $fc
|
||||
ld [wJoypadForbiddenButtonsMask], a
|
||||
ret
|
||||
|
||||
Func_1a485: ; 1a485 (6:6485)
|
||||
ld a, [$d730]
|
||||
bit 0, a
|
||||
ret nz
|
||||
ld a, [$cca1]
|
||||
ld [$cd38], a
|
||||
ld [$ff95], a
|
||||
ld a, $23
|
||||
call Predef
|
||||
call Func_3486
|
||||
ld a, $2
|
||||
ld [$cf10], a
|
||||
ret
|
||||
|
||||
Func_1a4a1: ; 1a4a1 (6:64a1)
|
||||
ld a, [$cd38]
|
||||
and a
|
||||
ret nz
|
||||
|
||||
Func_1a4a6: ; 1a4a6 (6:64a6)
|
||||
xor a
|
||||
ld [$cd3b], a
|
||||
ld a, [$cf13]
|
||||
swap a
|
||||
ld [$cf17], a
|
||||
xor a
|
||||
ld [$c206], a
|
||||
ld hl, $ccd3
|
||||
ld de, RLEList_1a4e9
|
||||
call DecodeRLEList
|
||||
dec a
|
||||
ld [$cd38], a
|
||||
ld hl, $cc97
|
||||
ld de, RLEList_1a4dc
|
||||
call DecodeRLEList
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
ld hl, $d730
|
||||
set 7, [hl]
|
||||
ld a, $4
|
||||
ld [$cf10], a
|
||||
ret
|
||||
|
||||
RLEList_1a4dc: ; 1a4dc (6:64dc)
|
||||
db $00, $05
|
||||
db $80, $01
|
||||
db $00, $05
|
||||
db $C0, $03
|
||||
db $40, $01
|
||||
db $E0, $01
|
||||
db $FF
|
||||
|
||||
RLEList_1a4e9: ; 1a4e9 (6:64e9)
|
||||
db $40, $02
|
||||
db $10, $03
|
||||
db $80, $05
|
||||
db $20, $01
|
||||
db $80, $06
|
||||
db $FF
|
||||
|
||||
Func_1a4f4: ; 1a4f4 (6:64f4)
|
||||
ld a, [$cd38]
|
||||
and a
|
||||
ret nz
|
||||
ld a, $0
|
||||
ld [$cc4d], a
|
||||
ld a, $11
|
||||
call Predef ; indirect jump to RemoveMissableObject (f1d7 (3:71d7))
|
||||
ld hl, $d730
|
||||
res 7, [hl]
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
jp Func_314e
|
||||
|
||||
PointerTable_1a510: ; 1a510 (6:6510)
|
||||
dw Func_1a514
|
||||
dw Func_1a56b
|
||||
|
||||
Func_1a514: ; 1a514 (6:6514)
|
||||
ld a, Bank(Func_9876)
|
||||
ld [$c0ef], a
|
||||
ld [$c0f0], a
|
||||
ld a, MUSIC_MUSEUM_GUY
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld a, [$cf13]
|
||||
swap a
|
||||
ld [$cf17], a
|
||||
call Func_3486
|
||||
ld hl, $ccd3
|
||||
ld de, RLEList_PewterMuseumPlayer
|
||||
call DecodeRLEList
|
||||
dec a
|
||||
ld [$cd38], a
|
||||
xor a
|
||||
ld [$d12f], a
|
||||
ld a, $4f
|
||||
call Predef
|
||||
ld hl, $cc97
|
||||
ld de, RLEList_PewterMuseumGuy
|
||||
call DecodeRLEList
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
ld a, $1
|
||||
ld [$cf10], a
|
||||
ret
|
||||
|
||||
RLEList_PewterMuseumPlayer: ; 1a559 (6:6559)
|
||||
db $00, $01
|
||||
db $40, $03
|
||||
db $20, $0D
|
||||
db $40, $06
|
||||
db $FF
|
||||
|
||||
RLEList_PewterMuseumGuy: ; 1a562 (6:6562)
|
||||
db $40, $06
|
||||
db $80, $0D
|
||||
db $40, $03
|
||||
db $80, $01
|
||||
db $FF
|
||||
|
||||
Func_1a56b: ; 1a56b (6:656b)
|
||||
ld a, [$cd38]
|
||||
and a
|
||||
ret nz
|
||||
ld hl, $d730
|
||||
res 7, [hl]
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
jp Func_314e
|
||||
|
||||
PointerTable_1a57d: ; 1a57d (6:657d)
|
||||
dw Func_1a581
|
||||
dw Func_1a56b
|
||||
|
||||
Func_1a581: ; 1a581 (6:6581)
|
||||
ld a, Bank(Func_9876)
|
||||
ld [$c0ef], a
|
||||
ld [$c0f0], a
|
||||
ld a, MUSIC_MUSEUM_GUY
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld a, [$cf13]
|
||||
swap a
|
||||
ld [$cf17], a
|
||||
xor a
|
||||
ld [$c206], a
|
||||
ld hl, $ccd3
|
||||
ld de, RLEList_PewterGymPlayer
|
||||
call DecodeRLEList
|
||||
dec a
|
||||
ld [$cd38], a
|
||||
ld a, $1
|
||||
ld [$d12f], a
|
||||
ld a, $4f
|
||||
call Predef
|
||||
ld hl, $cc97
|
||||
ld de, RLEList_PewterGymGuy
|
||||
call DecodeRLEList
|
||||
ld hl, $d72e
|
||||
res 7, [hl]
|
||||
ld hl, $d730
|
||||
set 7, [hl]
|
||||
ld a, $1
|
||||
ld [$cf10], a
|
||||
ret
|
||||
|
||||
RLEList_PewterGymPlayer: ; 1a5cd (6:65cd)
|
||||
db $00, $01
|
||||
db $10, $02
|
||||
db $80, $05
|
||||
db $20, $0B
|
||||
db $40, $05
|
||||
db $20, $0F
|
||||
db $FF
|
||||
|
||||
RLEList_PewterGymGuy: ; 1a5da (6:65da)
|
||||
db $00, $02
|
||||
db $80, $0F
|
||||
db $40, $05
|
||||
db $80, $0B
|
||||
db $00, $05
|
||||
db $C0, $03
|
||||
db $FF
|
||||
|
||||
; XXX why would this function want to return on POKEMONTOWER_7?
|
||||
Func_1a5e7: ; 1a5e7 (6:65e7)
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp POKEMONTOWER_7
|
||||
ret z
|
||||
ld hl, RivalIDs ; $6605
|
||||
ld a, [wEngagedTrainerClass]
|
||||
ld b, a
|
||||
.loop
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .notRival
|
||||
cp b
|
||||
ret z
|
||||
jr .loop
|
||||
.notRival
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
jp SetSpriteMovementBytesToFF
|
||||
|
||||
RivalIDs: ; 1a605 (6:6605)
|
||||
db SONY1 + $c8
|
||||
db SONY2 + $c8
|
||||
db SONY3 + $c8
|
||||
db $ff
|
71
engine/overworld/oaks_aide.asm
Executable file
71
engine/overworld/oaks_aide.asm
Executable file
|
@ -0,0 +1,71 @@
|
|||
OaksAideScript ; 0x59035
|
||||
ld hl, OaksAideHiText
|
||||
call PrintText
|
||||
call YesNoChoice
|
||||
ld a, [$cc26]
|
||||
and a
|
||||
jr nz, .asm_59086 ; 0x59042 $42
|
||||
ld hl, wPokedexOwned
|
||||
ld b, wPokedexOwnedEnd - wPokedexOwned
|
||||
call CountSetBits
|
||||
ld a, [$d11e]
|
||||
ld [$ffdd], a
|
||||
ld b, a
|
||||
ld a, [$ffdb]
|
||||
cp b
|
||||
jr z, .asm_59059 ; 0x59055 $2
|
||||
jr nc, .asm_5907c ; 0x59057 $23
|
||||
.asm_59059
|
||||
ld hl, OaksAideHereYouGoText
|
||||
call PrintText
|
||||
ld a, [$ffdc]
|
||||
ld b, a
|
||||
ld c, 1
|
||||
call GiveItem
|
||||
jr nc, .BagFull
|
||||
ld hl, OaksAideGotItemText
|
||||
call PrintText
|
||||
ld a, $1
|
||||
jr .asm_5908e ; 0x59071 $1b
|
||||
.BagFull
|
||||
ld hl, OaksAideNoRoomText
|
||||
call PrintText
|
||||
xor a
|
||||
jr .asm_5908e ; 0x5907a $12
|
||||
.asm_5907c
|
||||
ld hl, OaksAideUhOhText
|
||||
call PrintText
|
||||
ld a, $80
|
||||
jr .asm_5908e ; 0x59084 $8
|
||||
.asm_59086
|
||||
ld hl, OaksAideComeBackText
|
||||
call PrintText
|
||||
ld a, $ff
|
||||
.asm_5908e
|
||||
ld [$ffdb], a
|
||||
ret
|
||||
|
||||
OaksAideHiText: ; 59091 (16:5091)
|
||||
TX_FAR _OaksAideHiText
|
||||
db "@"
|
||||
|
||||
OaksAideUhOhText: ; 59096 (16:5096)
|
||||
TX_FAR _OaksAideUhOhText
|
||||
db "@"
|
||||
|
||||
OaksAideComeBackText: ; 5909b (16:509b)
|
||||
TX_FAR _OaksAideComeBackText
|
||||
db "@"
|
||||
|
||||
OaksAideHereYouGoText: ; 590a0 (16:50a0)
|
||||
TX_FAR _OaksAideHereYouGoText
|
||||
db "@"
|
||||
|
||||
OaksAideGotItemText: ; 590a5 (16:50a5)
|
||||
TX_FAR _OaksAideGotItemText
|
||||
db $0b
|
||||
db "@"
|
||||
|
||||
OaksAideNoRoomText: ; 590ab (16:50ab)
|
||||
TX_FAR _OaksAideNoRoomText
|
||||
db "@"
|
101
engine/overworld/pewter_guys.asm
Executable file
101
engine/overworld/pewter_guys.asm
Executable file
|
@ -0,0 +1,101 @@
|
|||
PewterGuys: ; 37ca1 (d:7ca1)
|
||||
ld hl, $ccd3
|
||||
ld a, [$cd38]
|
||||
dec a
|
||||
ld [$cd38], a
|
||||
ld d, 0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld d, h
|
||||
ld e, l
|
||||
ld hl, PointerTable_37ce6
|
||||
ld a, [$d12f]
|
||||
add a
|
||||
ld b, 0
|
||||
ld c, a
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld a, [W_YCOORD]
|
||||
ld b, a
|
||||
ld a, [W_XCOORD]
|
||||
ld c, a
|
||||
.asm_37cc7
|
||||
ld a, [hli]
|
||||
cp b
|
||||
jr nz, .asm_37ce1
|
||||
ld a, [hli]
|
||||
cp c
|
||||
jr nz, .asm_37ce2
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
.asm_37cd2
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
ret z
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [$cd38]
|
||||
inc a
|
||||
ld [$cd38], a
|
||||
jr .asm_37cd2
|
||||
.asm_37ce1
|
||||
inc hl
|
||||
.asm_37ce2
|
||||
inc hl
|
||||
inc hl
|
||||
jr .asm_37cc7
|
||||
|
||||
PointerTable_37ce6: ; 37ce6 (d:7ce6)
|
||||
dw PewterMuseumGuyCoords
|
||||
dw PewterGymGuyCoords
|
||||
|
||||
; these are the four coordinates of the spaces below, above, to the left and
|
||||
; to the right of the museum guy, and pointers to different movements for
|
||||
; the player to make to get positioned before the main movement.
|
||||
PewterMuseumGuyCoords: ; 37cea (d:7cea)
|
||||
db 18, 27
|
||||
dw .down
|
||||
db 16, 27
|
||||
dw .up
|
||||
db 17, 26
|
||||
dw .left
|
||||
db 17, 28
|
||||
dw .right
|
||||
|
||||
.down
|
||||
db $40, $40, $ff
|
||||
.up
|
||||
db $10, $20, $ff
|
||||
.left
|
||||
db $40, $10, $ff
|
||||
.right
|
||||
db $40, $20, $ff
|
||||
|
||||
; these are the five coordinates which trigger the gym guy and pointers to
|
||||
; different movements for the player to make to get positioned before the
|
||||
; main movement
|
||||
PewterGymGuyCoords: ; 37d06 (d:7d06)
|
||||
db 16, 34
|
||||
dw .one
|
||||
db 17, 35
|
||||
dw .two
|
||||
db 18, 37
|
||||
dw .three
|
||||
db 19, 37
|
||||
dw .four
|
||||
db 17, 36
|
||||
dw .five
|
||||
|
||||
.one
|
||||
db $20, $80, $80, $10, $ff
|
||||
.two
|
||||
db $20, $80, $10, $20, $ff
|
||||
.three
|
||||
db $20, $20, $20, $00, $00, $00, $00, $00, $00, $00, $00, $ff
|
||||
.four
|
||||
db $20, $20, $40, $20, $ff
|
||||
.five
|
||||
db $20, $80, $20, $00, $00, $00, $00, $00, $00, $00, $00, $ff
|
520
engine/overworld/player_animations.asm
Executable file
520
engine/overworld/player_animations.asm
Executable file
|
@ -0,0 +1,520 @@
|
|||
Func_70510: ; 70510 (1c:4510)
|
||||
call Func_706ef
|
||||
ld a, $ec
|
||||
ld [$c104], a
|
||||
call Delay3
|
||||
push hl
|
||||
call GBFadeIn2
|
||||
ld hl, W_FLAGS_D733
|
||||
bit 7, [hl]
|
||||
res 7, [hl]
|
||||
jr nz, .asm_70568
|
||||
ld a, (SFX_02_4c - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld hl, $d732
|
||||
bit 4, [hl]
|
||||
res 4, [hl]
|
||||
pop hl
|
||||
jr nz, .asm_7055e
|
||||
call Func_705aa
|
||||
ld a, (SFX_02_4f - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
call Func_70787
|
||||
ld a, b
|
||||
and a
|
||||
jr nz, .asm_7055b
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
xor a
|
||||
ld [hli], a
|
||||
inc a
|
||||
ld [hli], a
|
||||
ld a, $8
|
||||
ld [hli], a
|
||||
ld [hl], $ff
|
||||
ld hl, $cd48
|
||||
call Func_70730
|
||||
.asm_70558
|
||||
call Func_2307
|
||||
.asm_7055b
|
||||
jp Func_70772
|
||||
.asm_7055e
|
||||
ld c, $32
|
||||
call DelayFrames
|
||||
call Func_705aa
|
||||
jr .asm_7055b
|
||||
.asm_70568
|
||||
pop hl
|
||||
ld de, BirdSprite ; $4d80
|
||||
ld hl, $8000
|
||||
ld bc, (BANK(BirdSprite) << 8) + $0c
|
||||
call CopyVideoData
|
||||
call Func_706d7
|
||||
ld a, (SFX_02_50 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld a, $c
|
||||
ld [hli], a
|
||||
ld [hl], $8
|
||||
ld de, FlyAnimationEnterScreenCoords ; $4592
|
||||
call Func_706ae
|
||||
call LoadPlayerSpriteGraphics
|
||||
jr .asm_70558
|
||||
|
||||
FlyAnimationEnterScreenCoords: ; 70592 (1c:4592)
|
||||
; y, x pairs
|
||||
; This is the sequence of screen coordinates used by the overworld
|
||||
; Fly animation when the player is entering a map.
|
||||
db $05, $98
|
||||
db $0F, $90
|
||||
db $18, $88
|
||||
db $20, $80
|
||||
db $27, $78
|
||||
db $2D, $70
|
||||
db $32, $68
|
||||
db $36, $60
|
||||
db $39, $58
|
||||
db $3B, $50
|
||||
db $3C, $48
|
||||
db $3C, $40
|
||||
|
||||
Func_705aa: ; 705aa (1c:45aa)
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
ld a, $10
|
||||
ld [hli], a
|
||||
ld a, $3c
|
||||
ld [hli], a
|
||||
call Func_7077f
|
||||
ld [hl], a
|
||||
jp Func_70755
|
||||
|
||||
_DoFlyOrTeleportAwayGraphics: ; 705ba (1c:45ba)
|
||||
call Func_706ef
|
||||
call Func_70787
|
||||
ld a, b
|
||||
and a
|
||||
jr z, .asm_705ef
|
||||
dec a
|
||||
jp nz, Func_7067d
|
||||
.asm_705c8
|
||||
ld a, (SFX_02_4b - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
ld a, $f0
|
||||
ld [hli], a
|
||||
ld a, $ec
|
||||
ld [hli], a
|
||||
call Func_7077f
|
||||
ld [hl], a
|
||||
call Func_70755
|
||||
call Func_70787
|
||||
ld a, b
|
||||
dec a
|
||||
jr z, .asm_705e9
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
.asm_705e9
|
||||
call GBFadeOut2
|
||||
jp Func_70772
|
||||
.asm_705ef
|
||||
ld a, $4
|
||||
call StopMusic
|
||||
ld a, [$d732]
|
||||
bit 6, a
|
||||
jr z, .asm_70610
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
ld a, $10
|
||||
ld [hli], a
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], $a1
|
||||
ld hl, $cd48
|
||||
call Func_70730
|
||||
jr .asm_705c8
|
||||
.asm_70610
|
||||
call Func_706d7
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
ld a, $ff
|
||||
ld [hli], a
|
||||
ld a, $8
|
||||
ld [hli], a
|
||||
ld [hl], $c
|
||||
call Func_706ae
|
||||
ld a, (SFX_02_50 - SFX_Headers_02) / 3
|
||||
call PlaySound
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld a, $c
|
||||
ld [hli], a
|
||||
ld [hl], $c
|
||||
ld de, FlyAnimationScreenCoords1 ; $464f
|
||||
call Func_706ae
|
||||
ld c, $28
|
||||
call DelayFrames
|
||||
ld hl, $cd3e
|
||||
ld a, $b
|
||||
ld [hli], a
|
||||
ld [hl], $8
|
||||
ld de, FlyAnimationScreenCoords2 ; $4667
|
||||
call Func_706ae
|
||||
call GBFadeOut2
|
||||
jp Func_70772
|
||||
|
||||
FlyAnimationScreenCoords1: ; 7064f (1c:464f)
|
||||
; y, x pairs
|
||||
; This is the sequence of screen coordinates used by the first part
|
||||
; of the Fly overworld animation.
|
||||
db $3C, $48
|
||||
db $3C, $50
|
||||
db $3B, $58
|
||||
db $3A, $60
|
||||
db $39, $68
|
||||
db $37, $70
|
||||
db $37, $78
|
||||
db $33, $80
|
||||
db $30, $88
|
||||
db $2D, $90
|
||||
db $2A, $98
|
||||
db $27, $A0
|
||||
|
||||
FlyAnimationScreenCoords2: ; 70667 (1c:4667)
|
||||
; y, x pairs
|
||||
; This is the sequence of screen coordinates used by the second part
|
||||
; of the Fly overworld animation.
|
||||
db $1A, $90
|
||||
db $19, $80
|
||||
db $17, $70
|
||||
db $15, $60
|
||||
db $12, $50
|
||||
db $0F, $40
|
||||
db $0C, $30
|
||||
db $09, $20
|
||||
db $05, $10
|
||||
db $00, $00
|
||||
|
||||
db $F0, $00
|
||||
|
||||
Func_7067d: ; 7067d (1c:467d)
|
||||
ld a, $ff
|
||||
ld [$cfcb], a
|
||||
ld a, [$c302]
|
||||
ld [$c30a], a
|
||||
ld a, [$c306]
|
||||
ld [$c30e], a
|
||||
ld a, $a0
|
||||
ld [wOAMBuffer], a
|
||||
ld [$c304], a
|
||||
ld c, $2
|
||||
call DelayFrames
|
||||
ld a, $a0
|
||||
ld [$c308], a
|
||||
ld [$c30c], a
|
||||
call GBFadeOut2
|
||||
ld a, $1
|
||||
ld [$cfcb], a
|
||||
jp Func_70772
|
||||
|
||||
Func_706ae: ; 706ae (1c:46ae)
|
||||
ld a, [$cd3f]
|
||||
xor $1
|
||||
ld [$cd3f], a
|
||||
ld [$c102], a
|
||||
call Delay3
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
cp $ff
|
||||
jr z, .asm_706cd
|
||||
ld hl, $c104
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hl], a
|
||||
.asm_706cd
|
||||
ld a, [$cd3e]
|
||||
dec a
|
||||
ld [$cd3e], a
|
||||
jr nz, Func_706ae
|
||||
ret
|
||||
|
||||
Func_706d7: ; 706d7 (1c:46d7)
|
||||
ld de, BirdSprite ; $4d80
|
||||
ld hl, $8000
|
||||
ld bc, (BANK(BirdSprite) << 8) + $0c
|
||||
call CopyVideoData
|
||||
ld de, BirdSprite + $c0 ; $4e40 ; moving amination sprite
|
||||
ld hl, $8800
|
||||
ld bc, (BANK(BirdSprite) << 8) + $0c
|
||||
jp CopyVideoData
|
||||
|
||||
Func_706ef: ; 706ef (1c:46ef)
|
||||
ld a, [$c102]
|
||||
ld [$cd50], a
|
||||
ld a, [$c104]
|
||||
ld [$cd4f], a
|
||||
ld hl, PlayerSpinningFacingOrder ; $4713
|
||||
ld de, $cd48
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
ld a, [$c102]
|
||||
ld hl, $cd48
|
||||
.asm_7070d
|
||||
cp [hl]
|
||||
inc hl
|
||||
jr nz, .asm_7070d
|
||||
dec hl
|
||||
ret
|
||||
|
||||
PlayerSpinningFacingOrder: ; 70713 (1c:4713)
|
||||
; The order of the direction the player's sprite is facing when teleporting
|
||||
; away. Creates a spinning effect.
|
||||
db $00, $08, $04, $0C ; down, left, up, right
|
||||
|
||||
Func_70717: ; 70717 (1c:4717)
|
||||
ld a, [hl]
|
||||
ld [$c102], a
|
||||
push hl
|
||||
ld hl, $cd48
|
||||
ld de, $cd47
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
ld a, [$cd47]
|
||||
ld [$cd4b], a
|
||||
pop hl
|
||||
ret
|
||||
|
||||
Func_70730: ; 70730 (1c:4730)
|
||||
call Func_70717
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld c, a
|
||||
and $3
|
||||
jr nz, .asm_70743
|
||||
ld a, [$cd40]
|
||||
cp $ff
|
||||
call nz, PlaySound
|
||||
.asm_70743
|
||||
ld a, [$cd3e]
|
||||
add c
|
||||
ld [wWhichTrade], a ; $cd3d
|
||||
ld c, a
|
||||
ld a, [$cd3f]
|
||||
cp c
|
||||
ret z
|
||||
call DelayFrames
|
||||
jr Func_70730
|
||||
|
||||
Func_70755: ; 70755 (1c:4755)
|
||||
call Func_70717
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
ld c, a
|
||||
ld a, [$c104]
|
||||
add c
|
||||
ld [$c104], a
|
||||
ld c, a
|
||||
ld a, [$cd3e]
|
||||
cp c
|
||||
ret z
|
||||
ld a, [$cd3f]
|
||||
ld c, a
|
||||
call DelayFrames
|
||||
jr Func_70755
|
||||
|
||||
Func_70772: ; 70772 (1c:4772)
|
||||
ld a, [$cd4f]
|
||||
ld [$c104], a
|
||||
ld a, [$cd50]
|
||||
ld [$c102], a
|
||||
ret
|
||||
|
||||
Func_7077f: ; 7077f (1c:477f)
|
||||
ld a, [$cf1b]
|
||||
xor $1
|
||||
inc a
|
||||
inc a
|
||||
ret
|
||||
|
||||
Func_70787: ; 70787 (1c:4787)
|
||||
ld b, 0
|
||||
ld hl, DataTable_707a9 ; $47a9
|
||||
ld a, [W_CURMAPTILESET] ; $d367
|
||||
ld c, a
|
||||
.asm_70790
|
||||
ld a, [hli]
|
||||
cp $ff
|
||||
jr z, .asm_707a4
|
||||
cp c
|
||||
jr nz, .asm_7079e
|
||||
FuncCoord 8, 9 ; $c45c
|
||||
ld a, [Coord]
|
||||
cp [hl]
|
||||
jr z, .asm_707a2
|
||||
.asm_7079e
|
||||
inc hl
|
||||
inc hl
|
||||
jr .asm_70790
|
||||
.asm_707a2
|
||||
inc hl
|
||||
ld b, [hl]
|
||||
.asm_707a4
|
||||
ld a, b
|
||||
ld [$cd5b], a
|
||||
ret
|
||||
|
||||
; format: db tileset id, tile id, value to be put in $cd5b
|
||||
DataTable_707a9: ; 707a9 (1c:47a9)
|
||||
db FACILITY, $20, 1 ; warp pad
|
||||
db FACILITY, $11, 2 ; hole
|
||||
db CAVERN, $22, 2 ; hole
|
||||
db INTERIOR, $55, 1 ; warp pad
|
||||
db $FF
|
||||
|
||||
Func_707b6: ; 707b6 (1c:47b6)
|
||||
ld c, $a
|
||||
call DelayFrames
|
||||
ld hl, $d736
|
||||
set 6, [hl]
|
||||
ld de, RedSprite ; $4180
|
||||
ld hl, $8000
|
||||
ld bc, (BANK(RedSprite) << 8) + $0c
|
||||
call CopyVideoData
|
||||
ld a, $4
|
||||
ld hl, RedFishingTiles ; $4866
|
||||
call Func_71771
|
||||
ld a, [$c102]
|
||||
ld c, a
|
||||
ld b, $0
|
||||
ld hl, FishingRodGfxProperties ; $4856
|
||||
add hl, bc
|
||||
ld de, $c39c
|
||||
ld bc, $4
|
||||
call CopyData
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
and a
|
||||
ld hl, NoNibbleText
|
||||
jr z, .asm_70836
|
||||
cp $2
|
||||
ld hl, NothingHereText
|
||||
jr z, .asm_70836
|
||||
ld b, $a
|
||||
.asm_707fe
|
||||
ld hl, $c104
|
||||
call Func_70842
|
||||
ld hl, $c39c
|
||||
call Func_70842
|
||||
call Delay3
|
||||
dec b
|
||||
jr nz, .asm_707fe
|
||||
ld a, [$c102]
|
||||
cp $4
|
||||
jr nz, .asm_7081c
|
||||
ld a, $a0
|
||||
ld [$c39c], a
|
||||
.asm_7081c
|
||||
ld hl, $cd4f
|
||||
xor a
|
||||
ld [hli], a
|
||||
ld [hl], a
|
||||
ld a, $4c
|
||||
call Predef ; indirect jump to PrintEmotionBubble (17c47 (5:7c47))
|
||||
ld a, [$c102]
|
||||
cp $4
|
||||
jr nz, .asm_70833
|
||||
ld a, $44
|
||||
ld [$c39c], a
|
||||
.asm_70833
|
||||
ld hl, ItsABiteText
|
||||
.asm_70836
|
||||
call PrintText
|
||||
ld hl, $d736
|
||||
res 6, [hl]
|
||||
call LoadFontTilePatterns
|
||||
ret
|
||||
|
||||
Func_70842: ; 70842 (1c:4842)
|
||||
ld a, [hl]
|
||||
xor $1
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
NoNibbleText: ; 70847 (1c:4847)
|
||||
TX_FAR _NoNibbleText
|
||||
db "@"
|
||||
|
||||
NothingHereText: ; 7084c (1c:484c)
|
||||
TX_FAR _NothingHereText
|
||||
db "@"
|
||||
|
||||
ItsABiteText: ; 70851 (1c:4851)
|
||||
TX_FAR _ItsABiteText
|
||||
db "@"
|
||||
|
||||
FishingRodGfxProperties: ; 70856 (1c:4856)
|
||||
; specicies how the fishing rod should be drawn on the screen
|
||||
; first byte = screen y coordinate
|
||||
; second byte = screen x coordinate
|
||||
; third byte = tile number
|
||||
; fourth byte = sprite properties
|
||||
db $5B, $4C, $FD, $00 ; player facing down
|
||||
db $44, $4C, $FD, $00 ; player facing up
|
||||
db $50, $40, $FE, $00 ; player facing left
|
||||
db $50, $58, $FE, $20 ; player facing right ($20 means "horizontally flip the tile")
|
||||
|
||||
RedFishingTiles: ; 70866 (1c:4866)
|
||||
dw RedFishingTilesFront
|
||||
db $02, $1E
|
||||
dw $8020
|
||||
|
||||
dw RedFishingTilesBack
|
||||
db $02, $1E
|
||||
dw $8060
|
||||
|
||||
dw RedFishingTilesSide
|
||||
db $02, $1E
|
||||
dw $80A0
|
||||
|
||||
dw RedFishingRodTiles
|
||||
db $03, $1E
|
||||
dw $8FD0
|
||||
|
||||
_HandleMidJump: ; 7087e (1c:487e)
|
||||
ld a, [$d714]
|
||||
ld c, a
|
||||
inc a
|
||||
cp $10
|
||||
jr nc, .asm_70895
|
||||
ld [$d714], a
|
||||
ld b, $0
|
||||
ld hl, PlayerJumpingYScreenCoords ; $48ba
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
ld [$c104], a ; player's sprite y coordinate
|
||||
ret
|
||||
.asm_70895
|
||||
ld a, [wWalkCounter] ; $cfc5
|
||||
cp $0
|
||||
ret nz
|
||||
call UpdateSprites
|
||||
call Delay3
|
||||
xor a
|
||||
ld [H_CURRENTPRESSEDBUTTONS], a
|
||||
ld [H_NEWLYPRESSEDBUTTONS], a
|
||||
ld [H_NEWLYRELEASEDBUTTONS], a
|
||||
ld [$d714], a
|
||||
ld hl, $d736
|
||||
res 6, [hl]
|
||||
ld hl, $d730
|
||||
res 7, [hl]
|
||||
xor a
|
||||
ld [wJoypadForbiddenButtonsMask], a
|
||||
ret
|
||||
|
||||
PlayerJumpingYScreenCoords: ; 708ba (1c:48ba)
|
||||
; Sequence of y screen coordinates for player's sprite when jumping over a ledge.
|
||||
db $38, $36, $34, $32, $31, $30, $30, $30, $31, $32, $33, $34, $36, $38, $3C, $3C
|
68
engine/overworld/pokecenter.asm
Executable file
68
engine/overworld/pokecenter.asm
Executable file
|
@ -0,0 +1,68 @@
|
|||
DisplayPokemonCenterDialogue_: ; 6fe6 (1:6fe6)
|
||||
call SaveScreenTilesToBuffer1 ; save screen
|
||||
ld hl, PokemonCenterWelcomeText
|
||||
call PrintText
|
||||
ld hl, $d72e
|
||||
bit 2, [hl]
|
||||
set 1, [hl]
|
||||
set 2, [hl]
|
||||
jr nz, .skipShallWeHealYourPokemon
|
||||
ld hl, ShallWeHealYourPokemonText
|
||||
call PrintText
|
||||
.skipShallWeHealYourPokemon
|
||||
call YesNoChoicePokeCenter ; yes/no menu
|
||||
ld a, [wCurrentMenuItem]
|
||||
and a
|
||||
jr nz, .declinedHealing ; if the player chose No
|
||||
call SetLastBlackoutMap
|
||||
call LoadScreenTilesFromBuffer1 ; restore screen
|
||||
ld hl, NeedYourPokemonText
|
||||
call PrintText
|
||||
ld a, $18
|
||||
ld [$c112], a ; make the nurse turn to face the machine
|
||||
call Delay3
|
||||
PREDEF HealPartyPredef
|
||||
callba AnimateHealingMachine ; do the healing machine animation
|
||||
xor a
|
||||
ld [wMusicHeaderPointer], a
|
||||
ld a, [$c0f0]
|
||||
ld [$c0ef], a
|
||||
ld a, [$d35b]
|
||||
ld [$cfca], a
|
||||
ld [$c0ee], a
|
||||
call PlaySound
|
||||
ld hl, PokemonFightingFitText
|
||||
call PrintText
|
||||
ld a, $14
|
||||
ld [$c112], a ; make the nurse bow
|
||||
ld c, a
|
||||
call DelayFrames
|
||||
jr .done
|
||||
.declinedHealing
|
||||
call LoadScreenTilesFromBuffer1 ; restore screen
|
||||
.done
|
||||
ld hl, PokemonCenterFarewellText
|
||||
call PrintText
|
||||
jp UpdateSprites ; move sprites
|
||||
|
||||
PokemonCenterWelcomeText: ; 705d (1:705d)
|
||||
TX_FAR _PokemonCenterWelcomeText
|
||||
db "@"
|
||||
|
||||
ShallWeHealYourPokemonText: ; 7062 (1:7062)
|
||||
db $a
|
||||
TX_FAR _ShallWeHealYourPokemonText
|
||||
db "@"
|
||||
|
||||
NeedYourPokemonText: ; 7068 (1:7068)
|
||||
TX_FAR _NeedYourPokemonText
|
||||
db "@"
|
||||
|
||||
PokemonFightingFitText: ; 706d (1:706d)
|
||||
TX_FAR _PokemonFightingFitText
|
||||
db "@"
|
||||
|
||||
PokemonCenterFarewellText: ; 7072 (1:7072)
|
||||
db $a
|
||||
TX_FAR _PokemonCenterFarewellText
|
||||
db "@"
|
256
engine/overworld/pokemart.asm
Executable file
256
engine/overworld/pokemart.asm
Executable file
|
@ -0,0 +1,256 @@
|
|||
DisplayPokemartDialogue_: ; 6c20 (1:6c20)
|
||||
ld a,[wListScrollOffset]
|
||||
ld [$d07e],a
|
||||
call UpdateSprites ; move sprites
|
||||
xor a
|
||||
ld [$cf0a],a ; flag that is set if something is sold or bought
|
||||
.loop
|
||||
xor a
|
||||
ld [wListScrollOffset],a
|
||||
ld [wCurrentMenuItem],a
|
||||
ld [$cc2f],a
|
||||
inc a
|
||||
ld [$cf93],a
|
||||
ld a,$13
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; draw money text box
|
||||
ld a,$15
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; do buy/sell/quit menu
|
||||
ld hl,$d128 ; pointer to this pokemart's inventory
|
||||
ld a,[hli]
|
||||
ld l,[hl]
|
||||
ld h,a ; hl = address of inventory
|
||||
ld a,[$d12e]
|
||||
cp a,$02
|
||||
jp z,.done
|
||||
ld a,[$d12d] ; ID of the chosen menu item
|
||||
and a ; buying?
|
||||
jp z,.buyMenu
|
||||
dec a ; selling?
|
||||
jp z,.sellMenu
|
||||
dec a ; quitting?
|
||||
jp z,.done
|
||||
.sellMenu
|
||||
xor a
|
||||
ld [$cf93],a
|
||||
ld a,$02
|
||||
ld [$d11b],a
|
||||
callab Func_39bd5
|
||||
ld a,[wNumBagItems]
|
||||
and a
|
||||
jp z,.bagEmpty
|
||||
ld hl,PokemonSellingGreetingText
|
||||
call PrintText
|
||||
call SaveScreenTilesToBuffer1 ; save screen
|
||||
.sellMenuLoop
|
||||
call LoadScreenTilesFromBuffer1 ; restore saved screen
|
||||
ld a,$13
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; draw money text box
|
||||
ld hl,wNumBagItems
|
||||
ld a,l
|
||||
ld [$cf8b],a
|
||||
ld a,h
|
||||
ld [$cf8c],a
|
||||
xor a
|
||||
ld [$cf93],a
|
||||
ld [wCurrentMenuItem],a
|
||||
ld a,ITEMLISTMENU
|
||||
ld [wListMenuID],a
|
||||
call DisplayListMenuID
|
||||
jp c,.returnToMainPokemartMenu ; if the player closed the menu
|
||||
.confirmItemSale ; if the player is trying to sell a specific item
|
||||
call IsKeyItem ; check if item is unsellable
|
||||
ld a,[$d124]
|
||||
and a
|
||||
jr nz,.unsellableItem
|
||||
ld a,[$cf91]
|
||||
call IsItemHM
|
||||
jr c,.unsellableItem
|
||||
ld a,PRICEDITEMLISTMENU
|
||||
ld [wListMenuID],a
|
||||
ld [$ff8e],a ; halve prices when selling
|
||||
call DisplayChooseQuantityMenu
|
||||
inc a
|
||||
jr z,.sellMenuLoop ; if the player closed the choose quantity menu with the B button
|
||||
ld hl,PokemartTellSellPriceText
|
||||
ld bc,$0e01
|
||||
call PrintText
|
||||
FuncCoord 14,7
|
||||
ld hl,Coord
|
||||
ld bc,$080f
|
||||
ld a,$14
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; yes/no menu
|
||||
ld a,[$d12e]
|
||||
cp a,$02
|
||||
jr z,.sellMenuLoop ; if the player pressed the B button
|
||||
ld a,[$d12d] ; ID of the chosen menu item
|
||||
dec a
|
||||
jr z,.sellMenuLoop ; if the player chose No
|
||||
.sellItem
|
||||
ld a,[$cf0a] ; flag that is set if something is sold or bought
|
||||
and a
|
||||
jr nz,.skipSettingFlag1
|
||||
inc a
|
||||
ld [$cf0a],a
|
||||
.skipSettingFlag1
|
||||
call AddAmountSoldToMoney
|
||||
ld hl,wNumBagItems
|
||||
call RemoveItemFromInventory
|
||||
jp .sellMenuLoop
|
||||
.unsellableItem
|
||||
ld hl,PokemartUnsellableItemText
|
||||
call PrintText
|
||||
jp .returnToMainPokemartMenu
|
||||
.bagEmpty
|
||||
ld hl,PokemartItemBagEmptyText
|
||||
call PrintText
|
||||
call SaveScreenTilesToBuffer1 ; save screen
|
||||
jp .returnToMainPokemartMenu
|
||||
.buyMenu
|
||||
ld a,$01
|
||||
ld [$cf93],a
|
||||
ld a,$03
|
||||
ld [$d11b],a
|
||||
callab Func_39bd5
|
||||
ld hl,PokemartBuyingGreetingText
|
||||
call PrintText
|
||||
call SaveScreenTilesToBuffer1 ; save screen
|
||||
.buyMenuLoop
|
||||
call LoadScreenTilesFromBuffer1 ; restore saved screen
|
||||
ld a,$13
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; draw money text box
|
||||
ld hl,$cf7b
|
||||
ld a,l
|
||||
ld [$cf8b],a
|
||||
ld a,h
|
||||
ld [$cf8c],a
|
||||
xor a
|
||||
ld [wCurrentMenuItem],a
|
||||
inc a
|
||||
ld [$cf93],a
|
||||
inc a ; a = 2 (PRICEDITEMLISTMENU)
|
||||
ld [wListMenuID],a
|
||||
call DisplayListMenuID
|
||||
jr c,.returnToMainPokemartMenu ; if the player closed the menu
|
||||
ld a,$63
|
||||
ld [$cf97],a
|
||||
xor a
|
||||
ld [$ff8e],a
|
||||
call DisplayChooseQuantityMenu
|
||||
inc a
|
||||
jr z,.buyMenuLoop ; if the player closed the choose quantity menu with the B button
|
||||
ld a,[$cf91] ; item ID
|
||||
ld [$d11e],a ; store item ID for GetItemName
|
||||
call GetItemName
|
||||
call CopyStringToCF4B ; copy name to $cf4b
|
||||
ld hl,PokemartTellBuyPriceText
|
||||
call PrintText
|
||||
FuncCoord 14,7
|
||||
ld hl,Coord
|
||||
ld bc,$080f
|
||||
ld a,$14
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; yes/no menu
|
||||
ld a,[$d12e]
|
||||
cp a,$02
|
||||
jp z,.buyMenuLoop ; if the player pressed the B button
|
||||
ld a,[$d12d] ; ID of the chosen menu item
|
||||
dec a
|
||||
jr z,.buyMenuLoop ; if the player chose No
|
||||
.buyItem
|
||||
call .isThereEnoughMoney
|
||||
jr c,.notEnoughMoney
|
||||
ld hl,wNumBagItems
|
||||
call AddItemToInventory
|
||||
jr nc,.bagFull
|
||||
call SubtractAmountPaidFromMoney
|
||||
ld a,[$cf0a] ; flag that is set if something is sold or bought
|
||||
and a
|
||||
jr nz,.skipSettingFlag2
|
||||
ld a,$01
|
||||
ld [$cf0a],a
|
||||
.skipSettingFlag2
|
||||
ld a,(SFX_02_5a - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent ; play sound
|
||||
call WaitForSoundToFinish ; wait until sound is done playing
|
||||
ld hl,PokemartBoughtItemText
|
||||
call PrintText
|
||||
jp .buyMenuLoop
|
||||
.returnToMainPokemartMenu
|
||||
call LoadScreenTilesFromBuffer1 ; restore save screen
|
||||
ld a,$13
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ; draw money text box
|
||||
ld hl,PokemartAnythingElseText
|
||||
call PrintText
|
||||
jp .loop
|
||||
.isThereEnoughMoney
|
||||
ld de,wPlayerMoney
|
||||
ld hl,$ff9f ; item price
|
||||
ld c,3 ; length of money in bytes
|
||||
jp StringCmp
|
||||
.notEnoughMoney
|
||||
ld hl,PokemartNotEnoughMoneyText
|
||||
call PrintText
|
||||
jr .returnToMainPokemartMenu
|
||||
.bagFull
|
||||
ld hl,PokemartItemBagFullText
|
||||
call PrintText
|
||||
jr .returnToMainPokemartMenu
|
||||
.done
|
||||
ld hl,PokemartThankYouText
|
||||
call PrintText
|
||||
ld a,$01
|
||||
ld [$cfcb],a
|
||||
call UpdateSprites ; move sprites
|
||||
ld a,[$d07e]
|
||||
ld [wListScrollOffset],a
|
||||
ret
|
||||
|
||||
PokemartBuyingGreetingText: ; 6e0c (1:6e0c)
|
||||
TX_FAR _PokemartBuyingGreetingText
|
||||
db "@"
|
||||
|
||||
PokemartTellBuyPriceText: ; 6e11 (1:6e11)
|
||||
TX_FAR _PokemartTellBuyPriceText
|
||||
db "@"
|
||||
|
||||
PokemartBoughtItemText: ; 6e16 (1:6e16)
|
||||
TX_FAR _PokemartBoughtItemText
|
||||
db "@"
|
||||
|
||||
PokemartNotEnoughMoneyText: ; 6e1b (1:6e1b)
|
||||
TX_FAR _PokemartNotEnoughMoneyText
|
||||
db "@"
|
||||
|
||||
PokemartItemBagFullText: ; 6e20 (1:6e20)
|
||||
TX_FAR _PokemartItemBagFullText
|
||||
db "@"
|
||||
|
||||
PokemonSellingGreetingText: ; 6e25 (1:6e25)
|
||||
TX_FAR _PokemonSellingGreetingText
|
||||
db "@"
|
||||
|
||||
PokemartTellSellPriceText: ; 6e2a (1:6e2a)
|
||||
TX_FAR _PokemartTellSellPriceText
|
||||
db "@"
|
||||
|
||||
PokemartItemBagEmptyText: ; 6e2f (1:6e2f)
|
||||
TX_FAR _PokemartItemBagEmptyText
|
||||
db "@"
|
||||
|
||||
PokemartUnsellableItemText: ; 6e34 (1:6e34)
|
||||
TX_FAR _PokemartUnsellableItemText
|
||||
db "@"
|
||||
|
||||
PokemartThankYouText: ; 6e39 (1:6e39)
|
||||
TX_FAR _PokemartThankYouText
|
||||
db "@"
|
||||
|
||||
PokemartAnythingElseText: ; 6e3e (1:6e3e)
|
||||
TX_FAR _PokemartAnythingElseText
|
||||
db "@"
|
18
engine/overworld/saffron_guards.asm
Executable file
18
engine/overworld/saffron_guards.asm
Executable file
|
@ -0,0 +1,18 @@
|
|||
RemoveGuardDrink: ; 5a59f (16:659f)
|
||||
ld hl, GuardDrinksList
|
||||
.drinkLoop
|
||||
ld a, [hli]
|
||||
ld [$ffdb], a
|
||||
and a
|
||||
ret z
|
||||
push hl
|
||||
ld b, a
|
||||
call IsItemInBag
|
||||
pop hl
|
||||
jr z, .drinkLoop
|
||||
ld b, BANK(RemoveItemByID)
|
||||
ld hl, RemoveItemByID
|
||||
jp Bankswitch
|
||||
|
||||
GuardDrinksList: ; 5a5b7 (16:65b7)
|
||||
db FRESH_WATER, SODA_POP, LEMONADE, $00
|
88
engine/overworld/ssanne.asm
Executable file
88
engine/overworld/ssanne.asm
Executable file
|
@ -0,0 +1,88 @@
|
|||
Func_79f54: ; 79f54 (1e:5f54)
|
||||
ld a, $1
|
||||
ld [$cd50], a
|
||||
ld a, [$cfcb]
|
||||
push af
|
||||
ld a, $ff
|
||||
ld [$cfcb], a
|
||||
ld a, $e4
|
||||
ld [rOBP1], a ; $ff49
|
||||
call LoadSmokeTileFourTimes
|
||||
callba asm_f055
|
||||
ld c, $8
|
||||
.asm_79f73
|
||||
push bc
|
||||
call Func_79f92
|
||||
ld bc, .asm_79f7e
|
||||
push bc
|
||||
ld c, $4
|
||||
jp [hl]
|
||||
.asm_79f7e
|
||||
ld a, [rOBP1] ; $ff49
|
||||
xor $64
|
||||
ld [rOBP1], a ; $ff49
|
||||
call Delay3
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_79f73
|
||||
pop af
|
||||
ld [$cfcb], a
|
||||
jp LoadPlayerSpriteGraphics
|
||||
|
||||
Func_79f92: ; 79f92 (1e:5f92)
|
||||
ld a, [$c109]
|
||||
ld hl, PointerTable_79fb0 ; $5fb0
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [hli]
|
||||
ld [$d08a], a
|
||||
ld a, [hli]
|
||||
ld e, a
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
push hl
|
||||
ld hl, $c390
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
pop hl
|
||||
ret
|
||||
|
||||
PointerTable_79fb0: ; 79fb0 (1e:5fb0)
|
||||
db $FF,$00
|
||||
dw Func_79350
|
||||
|
||||
db $01,$00
|
||||
dw Func_79350
|
||||
|
||||
db $01,$01
|
||||
dw Func_79337
|
||||
|
||||
db $FF,$01
|
||||
dw Func_79337
|
||||
|
||||
LoadSmokeTileFourTimes: ; 79fc0 (1e:5fc0)
|
||||
ld hl, $8fc0
|
||||
ld c, $4
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
call LoadSmokeTile
|
||||
pop hl
|
||||
ld bc, $10
|
||||
add hl, bc
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
LoadSmokeTile: ; 79fd4 (1e:5fd4)
|
||||
ld de, SSAnneSmokePuffTile ; $5fdd
|
||||
ld bc, (BANK(SSAnneSmokePuffTile) << 8) + $01
|
||||
jp CopyVideoData
|
||||
|
||||
SSAnneSmokePuffTile: ; 79fdd (1e:5fdd)
|
||||
INCBIN "gfx/ss_anne_smoke_puff.2bpp"
|
347
engine/overworld/trainers.asm
Executable file
347
engine/overworld/trainers.asm
Executable file
|
@ -0,0 +1,347 @@
|
|||
Func_567f9: ; 567f9 (15:67f9)
|
||||
ld hl, wSpriteStateData1
|
||||
ld de, $4
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call Func_56903
|
||||
ld a, [hli]
|
||||
ld [$ffeb], a
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [$ffec], a
|
||||
ld de, $fe
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld [$ffed], a
|
||||
ld a, [hl]
|
||||
ld [$ffee], a
|
||||
ret
|
||||
|
||||
Func_56819: ; 56819 (15:6819)
|
||||
ld hl, wSpriteStateData1
|
||||
ld de, $0004
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call Func_56903
|
||||
ld a, [hli]
|
||||
ld [$d130], a
|
||||
inc hl
|
||||
ld a, [hl]
|
||||
ld [$d131], a
|
||||
ld de, $00fe
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld [$d132], a
|
||||
ld a, [hl]
|
||||
ld [$d133], a
|
||||
ret
|
||||
|
||||
Func_5683d: ; 5683d (15:683d)
|
||||
ld hl, wSpriteStateData1
|
||||
ld de, $4
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call Func_56903
|
||||
ld a, [$ffeb]
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, [$ffec]
|
||||
ld [hl], a
|
||||
ld de, $fe
|
||||
add hl, de
|
||||
ld a, [$ffed]
|
||||
ld [hli], a
|
||||
ld a, [$ffee]
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Func_5685d: ; 5685d (15:685d)
|
||||
ld hl, wSpriteStateData1
|
||||
ld de, $0004
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
call Func_56903
|
||||
ld a, [$d130]
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, [$d131]
|
||||
ld [hl], a
|
||||
ld de, $00fe
|
||||
add hl, de
|
||||
ld a, [$d132]
|
||||
ld [hli], a
|
||||
ld a, [$d133]
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
TrainerWalkUpToPlayer: ; 56881 (15:6881)
|
||||
ld a, [$cf13]
|
||||
swap a
|
||||
ld [wTrainerSpriteOffset], a ; $cd3d
|
||||
call ReadTrainerScreenPosition
|
||||
ld a, [wTrainerFacingDirection]
|
||||
and a
|
||||
jr z, .facingDown
|
||||
cp $4
|
||||
jr z, .facingUp
|
||||
cp $8
|
||||
jr z, .facingLeft
|
||||
jr .facingRight
|
||||
.facingDown
|
||||
ld a, [wTrainerScreenY]
|
||||
ld b, a
|
||||
ld a, $3c ; (fixed) player screen Y pos
|
||||
call CalcDifference
|
||||
cp $10 ; trainer is right above player
|
||||
ret z
|
||||
swap a
|
||||
dec a
|
||||
ld c, a ; bc = steps yet to go to reach player
|
||||
xor a
|
||||
ld b, a ; a = direction to go to
|
||||
jr .writeWalkScript
|
||||
.facingUp
|
||||
ld a, [wTrainerScreenY]
|
||||
ld b, a
|
||||
ld a, $3c ; (fixed) player screen Y pos
|
||||
call CalcDifference
|
||||
cp $10 ; trainer is right below player
|
||||
ret z
|
||||
swap a
|
||||
dec a
|
||||
ld c, a ; bc = steps yet to go to reach player
|
||||
ld b, $0
|
||||
ld a, $40 ; a = direction to go to
|
||||
jr .writeWalkScript
|
||||
.facingRight
|
||||
ld a, [wTrainerScreenX]
|
||||
ld b, a
|
||||
ld a, $40 ; (fixed) player screen X pos
|
||||
call CalcDifference
|
||||
cp $10 ; trainer is directly left of player
|
||||
ret z
|
||||
swap a
|
||||
dec a
|
||||
ld c, a ; bc = steps yet to go to reach player
|
||||
ld b, $0
|
||||
ld a, $c0 ; a = direction to go to
|
||||
jr .writeWalkScript
|
||||
.facingLeft
|
||||
ld a, [$cd41]
|
||||
ld b, a
|
||||
ld a, $40 ; (fixed) player screen X pos
|
||||
call CalcDifference
|
||||
cp $10 ; trainer is directly right of player
|
||||
ret z
|
||||
swap a
|
||||
dec a
|
||||
ld c, a ; bc = steps yet to go to reach player
|
||||
ld b, $0
|
||||
ld a, $80 ; a = direction to go to
|
||||
.writeWalkScript
|
||||
ld hl, $cc97
|
||||
ld de, $cc97
|
||||
call FillMemory ; write the necessary steps to reach player
|
||||
ld [hl], $ff ; write end of list sentinel
|
||||
ld a, [$cf13]
|
||||
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
|
||||
jp MoveSprite_
|
||||
|
||||
Func_56903: ; 56903 (15:6903)
|
||||
push de
|
||||
add hl, de
|
||||
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
|
||||
swap a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
pop de
|
||||
ret
|
||||
|
||||
; tests if this trainer is in the right position to engage the player and do so if she is.
|
||||
CheckEngagePlayer: ; 5690f (15:690f)
|
||||
push hl
|
||||
push de
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $2
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl] ; c1x2: sprite image index
|
||||
sub $ff
|
||||
jr nz, .spriteOnScreen ; test if sprite is on screen
|
||||
jp .noEngage
|
||||
.spriteOnScreen
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $9
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl] ; c1x9: facing direction
|
||||
ld [$cd3f], a
|
||||
call ReadTrainerScreenPosition
|
||||
ld a, [$cd40] ; sprite screen Y pos
|
||||
ld b, a
|
||||
ld a, $3c
|
||||
cp b
|
||||
jr z, .linedUpY
|
||||
ld a, [$cd41] ; sprite screen X pos
|
||||
ld b, a
|
||||
ld a, $40
|
||||
cp b
|
||||
jr z, .linedUpX
|
||||
xor a
|
||||
jp .noEngage
|
||||
.linedUpY
|
||||
ld a, [$cd41] ; sprite screen X pos
|
||||
ld b, a
|
||||
ld a, $40 ; (fixed) player X position
|
||||
call CalcDifference ; calc distance
|
||||
jr z, .noEngage ; exact same position as player
|
||||
call CheckSpriteCanSeePlayer
|
||||
jr c, .engage
|
||||
xor a
|
||||
jr .noEngage
|
||||
.linedUpX
|
||||
ld a, [$cd40] ; sprite screen Y pos
|
||||
ld b, a
|
||||
ld a, $3c ; (fixed) player Y position
|
||||
call CalcDifference ; calc distance
|
||||
jr z, .noEngage ; exact same position as player
|
||||
call CheckSpriteCanSeePlayer
|
||||
jr c, .engage
|
||||
xor a
|
||||
jp .noEngage
|
||||
.engage
|
||||
call CheckPlayerIsInFrontOfSprite
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
and a
|
||||
jr z, .noEngage
|
||||
ld hl, wFlags_0xcd60
|
||||
set 0, [hl]
|
||||
call EngageMapTrainer
|
||||
ld a, $ff
|
||||
.noEngage: ; 56988 (15:6988)
|
||||
ld [wTrainerSpriteOffset], a ; $cd3d
|
||||
pop de
|
||||
pop hl
|
||||
ret
|
||||
|
||||
; reads trainer's Y position to $cd40 and X position to $cd41
|
||||
ReadTrainerScreenPosition: ; 5698e (15:698e)
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $4
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [$cd40], a
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $6
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ld [$cd41], a
|
||||
ret
|
||||
|
||||
; checks if the sprite is properly lined up with the player with respect to the direction it's looking. Also checks the distance between player and sprite
|
||||
; note that this does not necessarily mean the sprite is seeing the player, he could be behind it's back
|
||||
; a: distance player to sprite
|
||||
CheckSpriteCanSeePlayer: ; 569af (15:69af)
|
||||
ld b, a
|
||||
ld a, [wTrainerEngageDistance] ; sprite line of sight (engage distance)
|
||||
cp b
|
||||
jr nc, .checkIfLinedUp
|
||||
jr .notInLine ; player too far away
|
||||
.checkIfLinedUp
|
||||
ld a, [$cd3f] ; sprite facing direction
|
||||
cp $0 ; down
|
||||
jr z, .checkXCoord
|
||||
cp $4 ; up
|
||||
jr z, .checkXCoord
|
||||
cp $8 ; left
|
||||
jr z, .checkYCoord
|
||||
cp $c ; right
|
||||
jr z, .checkYCoord
|
||||
jr .notInLine
|
||||
.checkXCoord
|
||||
ld a, [$cd41] ; sprite screen X position
|
||||
ld b, a
|
||||
cp $40
|
||||
jr z, .inLine
|
||||
jr .notInLine
|
||||
.checkYCoord
|
||||
ld a, [$cd40] ; sprite screen Y position
|
||||
ld b, a
|
||||
cp $3c
|
||||
jr nz, .notInLine
|
||||
.inLine
|
||||
scf
|
||||
ret
|
||||
.notInLine
|
||||
and a
|
||||
ret
|
||||
|
||||
; tests if the player is in front of the sprite (rather than behind it)
|
||||
CheckPlayerIsInFrontOfSprite: ; 569e3 (15:69e3)
|
||||
ld a, [W_CURMAP] ; $d35e
|
||||
cp POWER_PLANT
|
||||
jp z, .engage ; XXX not sure why bypass this for power plant (maybe to get voltorb fake items to work?)
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $4
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl] ; c1x4 (sprite screen Y pos)
|
||||
cp $fc
|
||||
jr nz, .notOnTopmostTile ; special case if sprite is on topmost tile (Y = $fc (-4)), make it come down a block
|
||||
ld a, $c
|
||||
.notOnTopmostTile
|
||||
ld [$cd40], a
|
||||
ld a, [wTrainerSpriteOffset] ; $cd3d
|
||||
add $6
|
||||
ld d, $0
|
||||
ld e, a
|
||||
ld hl, wSpriteStateData1
|
||||
add hl, de
|
||||
ld a, [hl] ; c1x6 (sprite screen X pos)
|
||||
ld [$cd41], a
|
||||
ld a, [$cd3f] ; facing direction
|
||||
cp $0
|
||||
jr nz, .notFacingDown
|
||||
ld a, [$cd40] ; sprite screen Y pos
|
||||
cp $3c
|
||||
jr c, .engage ; sprite above player
|
||||
jr .noEngage ; sprite below player
|
||||
.notFacingDown
|
||||
cp $4
|
||||
jr nz, .notFacingUp
|
||||
ld a, [$cd40] ; sprite screen Y pos
|
||||
cp $3c
|
||||
jr nc, .engage ; sprite below player
|
||||
jr .noEngage ; sprite above player
|
||||
.notFacingUp
|
||||
cp $8
|
||||
jr nz, .notFacingLeft
|
||||
ld a, [$cd41] ; sprite screen X pos
|
||||
cp $40
|
||||
jr nc, .engage ; sprite right of player
|
||||
jr .noEngage ; sprite left of player
|
||||
.notFacingLeft
|
||||
ld a, [$cd41] ; sprite screen X pos
|
||||
cp $40
|
||||
jr nc, .noEngage ; sprite right of player
|
||||
.engage
|
||||
ld a, $ff
|
||||
jr .done
|
||||
.noEngage
|
||||
xor a
|
||||
.done
|
||||
ld [wTrainerSpriteOffset], a ; $cd3d
|
||||
ret
|
620
engine/palettes.asm
Executable file
620
engine/palettes.asm
Executable file
|
@ -0,0 +1,620 @@
|
|||
Func_71ddf: ; 71ddf (1c:5ddf)
|
||||
call Load16BitRegisters
|
||||
ld a, b
|
||||
cp $ff
|
||||
jr nz, .asm_71dea
|
||||
ld a, [$cf1c]
|
||||
.asm_71dea
|
||||
cp $fc
|
||||
jp z, Func_71fc2
|
||||
ld l, a
|
||||
ld h, $0
|
||||
add hl, hl
|
||||
ld de, PointerTable_71f73
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ld de, Func_72156
|
||||
push de
|
||||
jp [hl]
|
||||
|
||||
SendPalPacket_Black: ; 71dff (1c:5dff)
|
||||
ld hl, PalPacket_Black
|
||||
ld de, BlkPacket_Battle
|
||||
ret
|
||||
|
||||
; uses PalPacket_Empty to build a packet based on mon IDs and health color
|
||||
BuildBattlePalPacket: ; 71e06 (1c:5e06)
|
||||
ld hl, PalPacket_Empty
|
||||
ld de, $cf2d
|
||||
ld bc, $10
|
||||
call CopyData
|
||||
ld a, [W_PLAYERBATTSTATUS3]
|
||||
ld hl, W_PLAYERMONID
|
||||
call DeterminePaletteID
|
||||
ld b, a
|
||||
ld a, [W_ENEMYBATTSTATUS3]
|
||||
ld hl, W_ENEMYMONID
|
||||
call DeterminePaletteID
|
||||
ld c, a
|
||||
ld hl, $cf2e
|
||||
ld a, [$cf1d]
|
||||
add PAL_GREENBAR
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, [$cf1e]
|
||||
add PAL_GREENBAR
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
inc hl
|
||||
ld a, c
|
||||
ld [hl], a
|
||||
ld hl, $cf2d
|
||||
ld de, BlkPacket_Battle
|
||||
ld a, $1
|
||||
ld [$cf1c], a
|
||||
ret
|
||||
|
||||
SendPalPacket_TownMap: ; 71e48 (1c:5e48)
|
||||
ld hl, PalPacket_TownMap
|
||||
ld de, BlkPacket_WholeScreen
|
||||
ret
|
||||
|
||||
; uses PalPacket_Empty to build a packet based the mon ID
|
||||
BuildStatusScreenPalPacket: ; 71e4f (1c:5e4f)
|
||||
ld hl, PalPacket_Empty
|
||||
ld de, $cf2d
|
||||
ld bc, $10
|
||||
call CopyData
|
||||
ld a, [$cf91]
|
||||
cp VICTREEBEL + 1
|
||||
jr c, .pokemon
|
||||
ld a, $1 ; not pokemon
|
||||
.pokemon
|
||||
call DeterminePaletteIDOutOfBattle
|
||||
push af
|
||||
ld hl, $cf2e
|
||||
ld a, [$cf25]
|
||||
add $1f
|
||||
ld [hli], a
|
||||
inc hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
ld hl, $cf2d
|
||||
ld de, BlkPacket_StatusScreen
|
||||
ret
|
||||
|
||||
SendPalPacket_PartyMenu: ; 71e7b (1c:5e7b)
|
||||
ld hl, PalPacket_PartyMenu
|
||||
ld de, $cf2e
|
||||
ret
|
||||
|
||||
SendPalPacket_Pokedex: ; 71e82 (1c:5e82)
|
||||
ld hl, PalPacket_Pokedex
|
||||
ld de, $cf2d
|
||||
ld bc, $10
|
||||
call CopyData
|
||||
ld a, [$cf91]
|
||||
call DeterminePaletteIDOutOfBattle
|
||||
ld hl, $cf30
|
||||
ld [hl], a
|
||||
ld hl, $cf2d
|
||||
ld de, BlkPacket_Pokedex
|
||||
ret
|
||||
|
||||
SendPalPacket_Slots: ; 71e9f (1c:5e9f)
|
||||
ld hl, PalPacket_Slots
|
||||
ld de, BlkPacket_Slots
|
||||
ret
|
||||
|
||||
SendPalPacket_Titlescreen: ; 71ea6 (1c:5ea6)
|
||||
ld hl, PalPacket_Titlescreen
|
||||
ld de, BlkPacket_Titlescreen
|
||||
ret
|
||||
|
||||
; used mostly for menus and the Oak intro
|
||||
SendPalPacket_Generic: ; 71ead (1c:5ead)
|
||||
ld hl, PalPacket_Generic
|
||||
ld de, BlkPacket_WholeScreen
|
||||
ret
|
||||
|
||||
SendPalPacket_NidorinoIntro: ; 71eb4 (1c:5eb4)
|
||||
ld hl, PalPacket_NidorinoIntro
|
||||
ld de, BlkPacket_NidorinoIntro
|
||||
ret
|
||||
|
||||
SendPalPacket_GameFreakIntro: ; 71ebb (1c:5ebb)
|
||||
ld hl, PalPacket_GameFreakIntro
|
||||
ld de, BlkPacket_GameFreakIntro
|
||||
ld a, $8
|
||||
ld [$cf1c], a
|
||||
ret
|
||||
|
||||
; uses PalPacket_Empty to build a packet based on the current map
|
||||
BuildOverworldPalPacket: ; 71ec7 (1c:5ec7)
|
||||
ld hl, PalPacket_Empty
|
||||
ld de, $cf2d
|
||||
ld bc, $10
|
||||
call CopyData
|
||||
ld a, [W_CURMAPTILESET]
|
||||
cp CEMETERY
|
||||
jr z, .PokemonTowerOrAgatha
|
||||
cp CAVERN
|
||||
jr z, .caveOrBruno
|
||||
ld a, [W_CURMAP]
|
||||
cp REDS_HOUSE_1F
|
||||
jr c, .townOrRoute
|
||||
cp UNKNOWN_DUNGEON_2
|
||||
jr c, .normalDungeonOrBuilding
|
||||
cp NAME_RATERS_HOUSE
|
||||
jr c, .caveOrBruno
|
||||
cp LORELEIS_ROOM
|
||||
jr z, .Lorelei
|
||||
cp BRUNOS_ROOM
|
||||
jr z, .caveOrBruno
|
||||
.normalDungeonOrBuilding
|
||||
ld a, [wLastMap] ; town or route that current dungeon or building is located
|
||||
.townOrRoute
|
||||
cp SAFFRON_CITY + 1
|
||||
jr c, .town
|
||||
ld a, PAL_ROUTE - 1
|
||||
.town
|
||||
inc a ; a town's pallete ID is its map ID + 1
|
||||
ld hl, $cf2e
|
||||
ld [hld], a
|
||||
ld de, BlkPacket_WholeScreen
|
||||
ld a, $9
|
||||
ld [$cf1c], a
|
||||
ret
|
||||
.PokemonTowerOrAgatha
|
||||
ld a, PAL_GREYMON - 1
|
||||
jr .town
|
||||
.caveOrBruno
|
||||
ld a, PAL_CAVE - 1
|
||||
jr .town
|
||||
.Lorelei
|
||||
xor a
|
||||
jr .town
|
||||
|
||||
; used when a Pokemon is the only thing on the screen
|
||||
; such as evolution, trading and the Hall of Fame
|
||||
SendPokemonPalette_WholeScreen: ; 71f17 (1c:5f17)
|
||||
push bc
|
||||
ld hl, PalPacket_Empty
|
||||
ld de, $cf2d
|
||||
ld bc, $10
|
||||
call CopyData
|
||||
pop bc
|
||||
ld a, c
|
||||
and a
|
||||
ld a, $1e
|
||||
jr nz, .asm_71f31
|
||||
ld a, [$cf1d]
|
||||
call DeterminePaletteIDOutOfBattle
|
||||
.asm_71f31
|
||||
ld [$cf2e], a
|
||||
ld hl, $cf2d
|
||||
ld de, BlkPacket_WholeScreen
|
||||
ret
|
||||
|
||||
BuildTrainerCardPalPacket: ; 71f3b (1c:5f3b)
|
||||
ld hl, BlkPacket_TrainerCard
|
||||
ld de, $cc5b
|
||||
ld bc, $40
|
||||
call CopyData
|
||||
ld de, LoopCounts_71f8f
|
||||
ld hl, $cc5d
|
||||
ld a, [W_OBTAINEDBADGES]
|
||||
ld c, $8
|
||||
.asm_71f52
|
||||
srl a
|
||||
push af
|
||||
jr c, .asm_71f62
|
||||
push bc
|
||||
ld a, [de]
|
||||
ld c, a
|
||||
xor a
|
||||
.asm_71f5b
|
||||
ld [hli], a
|
||||
dec c
|
||||
jr nz, .asm_71f5b
|
||||
pop bc
|
||||
jr .asm_71f67
|
||||
.asm_71f62
|
||||
ld a, [de]
|
||||
.asm_71f63
|
||||
inc hl
|
||||
dec a
|
||||
jr nz, .asm_71f63
|
||||
.asm_71f67
|
||||
pop af
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_71f52
|
||||
ld hl, PalPacket_TrainerCard
|
||||
ld de, $cc5b
|
||||
ret
|
||||
|
||||
PointerTable_71f73: ; 71f73 (1c:5f73)
|
||||
dw SendPalPacket_Black
|
||||
dw BuildBattlePalPacket
|
||||
dw SendPalPacket_TownMap
|
||||
dw BuildStatusScreenPalPacket
|
||||
dw SendPalPacket_Pokedex
|
||||
dw SendPalPacket_Slots
|
||||
dw SendPalPacket_Titlescreen
|
||||
dw SendPalPacket_NidorinoIntro
|
||||
dw SendPalPacket_Generic
|
||||
dw BuildOverworldPalPacket
|
||||
dw SendPalPacket_PartyMenu
|
||||
dw SendPokemonPalette_WholeScreen
|
||||
dw SendPalPacket_GameFreakIntro
|
||||
dw BuildTrainerCardPalPacket
|
||||
|
||||
; each byte is the number of loops to make in .asm_71f5b for each badge
|
||||
LoopCounts_71f8f: ; 71f8f (1c:5f8f)
|
||||
db $06,$06,$06,$12,$06,$06,$06,$06
|
||||
|
||||
DeterminePaletteID: ; 71f97 (1c:5f97)
|
||||
bit 3, a ; bit 3 of battle status 3, set if current Pokemon is transformed
|
||||
ld a, PAL_GREYMON ; if yes, use Ditto's palette
|
||||
ret nz
|
||||
ld a, [hl]
|
||||
DeterminePaletteIDOutOfBattle: ; 71f9d (1c:5f9d)
|
||||
ld [$D11E], a
|
||||
and a
|
||||
jr z, .idZero
|
||||
push bc
|
||||
ld a, $3A
|
||||
call Predef ; turn Pokemon ID number into Pokedex number
|
||||
pop bc
|
||||
ld a, [$D11E]
|
||||
.idZero
|
||||
ld e, a
|
||||
ld d, $00
|
||||
ld hl, MonsterPalettes ; not just for Pokemon, Trainers use it too
|
||||
add hl, de
|
||||
ld a, [hl]
|
||||
ret
|
||||
|
||||
SendBlkPacket_PartyMenu: ; 71fb6 (1c:5fb6)
|
||||
ld hl, BlkPacket_PartyMenu ; $62f4
|
||||
ld de, $cf2e
|
||||
ld bc, $30
|
||||
jp CopyData
|
||||
|
||||
Func_71fc2: ; 71fc2 (1c:5fc2)
|
||||
ld hl, $cf1f
|
||||
ld a, [$cf2d]
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
ld e, l
|
||||
ld d, h
|
||||
ld a, [de]
|
||||
and a
|
||||
ld e, $5
|
||||
jr z, .asm_71fdb
|
||||
dec a
|
||||
ld e, $a
|
||||
jr z, .asm_71fdb
|
||||
ld e, $f
|
||||
.asm_71fdb
|
||||
push de
|
||||
ld hl, $cf37
|
||||
ld bc, $6
|
||||
ld a, [$cf2d]
|
||||
call AddNTimes
|
||||
pop de
|
||||
ld [hl], e
|
||||
ret
|
||||
|
||||
SendSGBPacket: ; 71feb (1c:5feb)
|
||||
;check number of packets
|
||||
ld a,[hl]
|
||||
and a,$07
|
||||
ret z
|
||||
; store number of packets in B
|
||||
ld b,a
|
||||
.loop2
|
||||
; save B for later use
|
||||
push bc
|
||||
; load a non-zero value in $fff9 to disable the routine that checks actual
|
||||
; joypad input (said routine, located at $15f, does nothing if $fff9 is not
|
||||
; zero)
|
||||
ld a,$01
|
||||
ld [$fff9],a
|
||||
; send RESET signal (P14=LOW, P15=LOW)
|
||||
xor a
|
||||
ld [$ff00],a
|
||||
; set P14=HIGH, P15=HIGH
|
||||
ld a,$30
|
||||
ld [$ff00],a
|
||||
;load length of packets (16 bytes)
|
||||
ld b,$10
|
||||
.nextByte
|
||||
;set bit counter (8 bits per byte)
|
||||
ld e,$08
|
||||
; get next byte in the packet
|
||||
ld a,[hli]
|
||||
ld d,a
|
||||
.nextBit0
|
||||
bit 0,d
|
||||
; if 0th bit is not zero set P14=HIGH,P15=LOW (send bit 1)
|
||||
ld a,$10
|
||||
jr nz,.next0
|
||||
; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
|
||||
ld a,$20
|
||||
.next0
|
||||
ld [$ff00],a
|
||||
; must set P14=HIGH,P15=HIGH between each "pulse"
|
||||
ld a,$30
|
||||
ld [$ff00],a
|
||||
; rotation will put next bit in 0th position (so we can always use command
|
||||
; "bit 0,d" to fetch the bit that has to be sent)
|
||||
rr d
|
||||
; decrease bit counter so we know when we have sent all 8 bits of current byte
|
||||
dec e
|
||||
jr nz,.nextBit0
|
||||
dec b
|
||||
jr nz,.nextByte
|
||||
; send bit 1 as a "stop bit" (end of parameter data)
|
||||
ld a,$20
|
||||
ld [$ff00],a
|
||||
; set P14=HIGH,P15=HIGH
|
||||
ld a,$30
|
||||
ld [$ff00],a
|
||||
xor a
|
||||
ld [$fff9],a
|
||||
; wait for about 70000 cycles
|
||||
call Wait7000
|
||||
; restore (previously pushed) number of packets
|
||||
pop bc
|
||||
dec b
|
||||
; return if there are no more packets
|
||||
ret z
|
||||
; else send 16 more bytes
|
||||
jr .loop2
|
||||
|
||||
LoadSGBBorderAndPalettes: ; 7202b (1c:602b)
|
||||
xor a
|
||||
ld [$cf1b], a
|
||||
call Func_7209b
|
||||
ret nc
|
||||
ld a, $1
|
||||
ld [$cf1b], a
|
||||
ld a, [$cf1a]
|
||||
and a
|
||||
jr z, .asm_7203f
|
||||
ret
|
||||
.asm_7203f
|
||||
di
|
||||
call Func_72075
|
||||
ei
|
||||
ld a, $1
|
||||
ld [$cf2d], a
|
||||
ld de, PalPacket_72508
|
||||
ld hl, SGBBorderGraphics
|
||||
call Func_7210b
|
||||
xor a
|
||||
ld [$cf2d], a
|
||||
ld de, PalPacket_72518
|
||||
ld hl, BorderPalettes
|
||||
call Func_7210b
|
||||
xor a
|
||||
ld [$cf2d], a
|
||||
ld de, PalPacket_724d8
|
||||
ld hl, SuperPalettes
|
||||
call Func_7210b
|
||||
call ZeroVram
|
||||
ld hl, PalPacket_72538
|
||||
jp SendSGBPacket
|
||||
|
||||
Func_72075: ; 72075 (1c:6075)
|
||||
ld hl, PointerTable_72089
|
||||
ld c, $9
|
||||
.asm_7207a
|
||||
push bc
|
||||
ld a, [hli]
|
||||
push hl
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
call SendSGBPacket
|
||||
pop hl
|
||||
inc hl
|
||||
pop bc
|
||||
dec c
|
||||
jr nz, .asm_7207a
|
||||
ret
|
||||
|
||||
PointerTable_72089: ; 72089 (1c:6089)
|
||||
dw PalPacket_72528
|
||||
dw PalPacket_72548
|
||||
dw PalPacket_72558
|
||||
dw PalPacket_72568
|
||||
dw PalPacket_72578
|
||||
dw PalPacket_72588
|
||||
dw PalPacket_72598
|
||||
dw PalPacket_725a8
|
||||
dw PalPacket_725b8
|
||||
|
||||
Func_7209b: ; 7209b (1c:609b)
|
||||
ld hl, PalPacket_724f8
|
||||
di
|
||||
call SendSGBPacket
|
||||
ld a, $1
|
||||
ld [$fff9], a
|
||||
ei
|
||||
call Wait7000
|
||||
ld a, [rJOYP] ; $ff0
|
||||
and $3
|
||||
cp $3
|
||||
jr nz, .asm_720fd
|
||||
ld a, $20
|
||||
ld [rJOYP], a ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $30
|
||||
ld [rJOYP], a ; $ff0
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $10
|
||||
ld [rJOYP], a ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, $30
|
||||
ld [rJOYP], a ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
ld a, [rJOYP] ; $ff0
|
||||
call Wait7000
|
||||
call Wait7000
|
||||
ld a, [rJOYP] ; $ff0
|
||||
and $3
|
||||
cp $3
|
||||
jr nz, .asm_720fd
|
||||
call Func_72102
|
||||
and a
|
||||
ret
|
||||
.asm_720fd
|
||||
call Func_72102
|
||||
scf
|
||||
ret
|
||||
|
||||
Func_72102: ; 72102 (1c:6102)
|
||||
ld hl, PalPacket_724e8
|
||||
call SendSGBPacket
|
||||
jp Wait7000
|
||||
|
||||
Func_7210b: ; 7210b (1c:610b)
|
||||
di
|
||||
push de
|
||||
call DisableLCD
|
||||
ld a, $e4
|
||||
ld [rBGP], a ; $ff47
|
||||
ld de, $8800
|
||||
ld a, [$cf2d]
|
||||
and a
|
||||
jr z, .asm_72122
|
||||
call Func_72188
|
||||
jr .asm_72128
|
||||
.asm_72122
|
||||
ld bc, $1000
|
||||
call CopyData
|
||||
.asm_72128
|
||||
ld hl, $9800
|
||||
ld de, $c
|
||||
ld a, $80
|
||||
ld c, $d
|
||||
.asm_72132
|
||||
ld b, $14
|
||||
.asm_72134
|
||||
ld [hli], a
|
||||
inc a
|
||||
dec b
|
||||
jr nz, .asm_72134
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .asm_72132
|
||||
ld a, $e3
|
||||
ld [rLCDC], a ; $ff40
|
||||
pop hl
|
||||
call SendSGBPacket
|
||||
xor a
|
||||
ld [rBGP], a ; $ff47
|
||||
ei
|
||||
ret
|
||||
|
||||
Wait7000: ; 7214a (1c:614a)
|
||||
; each loop takes about 10 cycles so this routine actually loops through 70000
|
||||
; cycles.
|
||||
ld de, 7000
|
||||
.loop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
dec de
|
||||
ld a, d
|
||||
or e
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
Func_72156: ; 72156 (1c:6156)
|
||||
ld a, [$cf1a]
|
||||
and a
|
||||
jr z, .asm_72165
|
||||
push de
|
||||
call Func_7216d
|
||||
pop hl
|
||||
call Func_72187
|
||||
ret
|
||||
.asm_72165
|
||||
push de
|
||||
call SendSGBPacket
|
||||
pop hl
|
||||
jp SendSGBPacket
|
||||
|
||||
Func_7216d: ; 7216d (1c:616d)
|
||||
ld a, $80
|
||||
ld [$ff68], a
|
||||
inc hl
|
||||
ld c, $20
|
||||
.asm_72174
|
||||
ld a, [hli]
|
||||
inc hl
|
||||
add a
|
||||
add a
|
||||
add a
|
||||
ld de, SuperPalettes
|
||||
add e
|
||||
jr nc, .asm_72180
|
||||
inc d
|
||||
.asm_72180
|
||||
ld a, [de]
|
||||
ld [$ff69], a
|
||||
dec c
|
||||
jr nz, .asm_72174
|
||||
ret
|
||||
|
||||
Func_72187: ; 72187 (1c:6187)
|
||||
ret
|
||||
|
||||
Func_72188: ; 72188 (1c:6188)
|
||||
ld b, $80
|
||||
.asm_7218a
|
||||
ld c, $10
|
||||
.asm_7218c
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_7218c
|
||||
ld c, $10
|
||||
xor a
|
||||
.asm_72195
|
||||
ld [de], a
|
||||
inc de
|
||||
dec c
|
||||
jr nz, .asm_72195
|
||||
dec b
|
||||
jr nz, .asm_7218a
|
||||
ret
|
||||
|
||||
INCLUDE "data/sgb_packets.asm"
|
||||
|
||||
INCLUDE "data/mon_palettes.asm"
|
||||
|
||||
INCLUDE "data/super_palettes.asm"
|
||||
|
||||
INCLUDE "data/sgb_border.asm"
|
61
engine/play_time.asm
Executable file
61
engine/play_time.asm
Executable file
|
@ -0,0 +1,61 @@
|
|||
Func_18dee: ; 18dee (6:4dee)
|
||||
call Func_18e36
|
||||
ld a, [$d732]
|
||||
bit 0, a
|
||||
ret z
|
||||
ld a, [W_PLAYTIMEMINUTES] ; $da42
|
||||
and a
|
||||
ret nz
|
||||
ld a, [W_PLAYTIMEFRAMES] ; $da45
|
||||
inc a
|
||||
ld [W_PLAYTIMEFRAMES], a ; $da45
|
||||
cp 60
|
||||
ret nz
|
||||
xor a
|
||||
ld [W_PLAYTIMEFRAMES], a ; $da45
|
||||
ld a, [W_PLAYTIMESECONDS] ; $da44
|
||||
inc a
|
||||
ld [W_PLAYTIMESECONDS], a ; $da44
|
||||
cp 60
|
||||
ret nz
|
||||
xor a
|
||||
ld [W_PLAYTIMESECONDS], a ; $da44
|
||||
ld a, [$da43]
|
||||
inc a
|
||||
ld [$da43], a
|
||||
cp 60
|
||||
ret nz
|
||||
xor a
|
||||
ld [$da43], a
|
||||
ld a, [$da41]
|
||||
inc a
|
||||
ld [$da41], a
|
||||
cp $ff
|
||||
ret nz
|
||||
ld a, $ff
|
||||
ld [W_PLAYTIMEMINUTES], a ; $da42
|
||||
ret
|
||||
|
||||
Func_18e36: ; 18e36 (6:4e36)
|
||||
ld a, [$d13a]
|
||||
and a
|
||||
jr nz, .asm_18e40
|
||||
ld a, $ff
|
||||
jr .asm_18e41
|
||||
.asm_18e40
|
||||
dec a
|
||||
.asm_18e41
|
||||
ld [$d13a], a
|
||||
and a
|
||||
ret nz
|
||||
ld a, [$d730]
|
||||
res 1, a
|
||||
res 2, a
|
||||
bit 5, a
|
||||
res 5, a
|
||||
ld [$d730], a
|
||||
ret z
|
||||
xor a
|
||||
ld [H_NEWLYPRESSEDBUTTONS], a
|
||||
ld [H_CURRENTPRESSEDBUTTONS], a
|
||||
ret
|
157
engine/pokedex_rating.asm
Executable file
157
engine/pokedex_rating.asm
Executable file
|
@ -0,0 +1,157 @@
|
|||
DisplayDexRating: ; 44169 (11:4169)
|
||||
ld hl, wPokedexSeen
|
||||
ld b, wPokedexSeenEnd - wPokedexSeen
|
||||
call CountSetBits
|
||||
ld a, [$D11E] ; result of CountSetBits (seen count)
|
||||
ld [$FFDB], a
|
||||
ld hl, wPokedexOwned
|
||||
ld b, wPokedexOwnedEnd - wPokedexOwned
|
||||
call CountSetBits
|
||||
ld a, [$D11E] ; result of CountSetBits (own count)
|
||||
ld [$FFDC], a
|
||||
ld hl, DexRatingsTable
|
||||
.findRating
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [$FFDC] ; number of pokemon owned
|
||||
cp b
|
||||
jr c, .foundRating
|
||||
inc hl
|
||||
inc hl
|
||||
jr .findRating
|
||||
.foundRating
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a ; load text pointer into hl
|
||||
ld a, [$D747]
|
||||
bit 3, a
|
||||
res 3, a
|
||||
ld [$D747], a
|
||||
jr nz, .label3
|
||||
push hl
|
||||
ld hl, PokedexRatingText_441cc
|
||||
call PrintText
|
||||
pop hl
|
||||
call PrintText
|
||||
callba Func_7d13b
|
||||
jp WaitForTextScrollButtonPress ; wait for button press
|
||||
.label3
|
||||
ld de, $CC5B
|
||||
ld a, [$FFDB]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [$FFDC]
|
||||
ld [de], a
|
||||
inc de
|
||||
.label4
|
||||
ld a, [hli]
|
||||
cp a, $50
|
||||
jr z, .label5
|
||||
ld [de], a
|
||||
inc de
|
||||
jr .label4
|
||||
.label5
|
||||
ld [de], a
|
||||
ret
|
||||
|
||||
PokedexRatingText_441cc: ; 441cc (11:41cc)
|
||||
TX_FAR _OaksLabText_441cc
|
||||
db "@"
|
||||
|
||||
DexRatingsTable: ; 441d1 (11:41d1)
|
||||
db 10
|
||||
dw PokedexRatingText_44201
|
||||
db 20
|
||||
dw PokedexRatingText_44206
|
||||
db 30
|
||||
dw PokedexRatingText_4420b
|
||||
db 40
|
||||
dw PokedexRatingText_44210
|
||||
db 50
|
||||
dw PokedexRatingText_44215
|
||||
db 60
|
||||
dw PokedexRatingText_4421a
|
||||
db 70
|
||||
dw PokedexRatingText_4421f
|
||||
db 80
|
||||
dw PokedexRatingText_44224
|
||||
db 90
|
||||
dw PokedexRatingText_44229
|
||||
db 100
|
||||
dw PokedexRatingText_4422e
|
||||
db 110
|
||||
dw PokedexRatingText_44233
|
||||
db 120
|
||||
dw PokedexRatingText_44238
|
||||
db 130
|
||||
dw PokedexRatingText_4423d
|
||||
db 140
|
||||
dw PokedexRatingText_44242
|
||||
db 150
|
||||
dw PokedexRatingText_44247
|
||||
db 152
|
||||
dw PokedexRatingText_4424c
|
||||
|
||||
PokedexRatingText_44201: ; 44201 (11:4201)
|
||||
TX_FAR _OaksLabText_44201
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44206: ; 44206 (11:4206)
|
||||
TX_FAR _OaksLabText_44206
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4420b: ; 4420b (11:420b)
|
||||
TX_FAR _OaksLabText_4420b
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44210: ; 44210 (11:4210)
|
||||
TX_FAR _OaksLabText_44210
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44215: ; 44215 (11:4215)
|
||||
TX_FAR _OaksLabText_44215
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4421a: ; 4421a (11:421a)
|
||||
TX_FAR _OaksLabText_4421a
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4421f: ; 4421f (11:421f)
|
||||
TX_FAR _OaksLabText_4421f
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44224: ; 44224 (11:4224)
|
||||
TX_FAR _OaksLabText_44224
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44229: ; 44229 (11:4229)
|
||||
TX_FAR _OaksLabText_44229
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4422e: ; 4422e (11:422e)
|
||||
TX_FAR _OaksLabText_4422e
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44233: ; 44233 (11:4233)
|
||||
TX_FAR _OaksLabText_44233
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44238: ; 44238 (11:4238)
|
||||
TX_FAR _OaksLabText_44238
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4423d: ; 4423d (11:423d)
|
||||
TX_FAR _OaksLabText_4423d
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44242: ; 44242 (11:4242)
|
||||
TX_FAR _OaksLabText_44242
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_44247: ; 44247 (11:4247)
|
||||
TX_FAR _OaksLabText_44247
|
||||
db "@"
|
||||
|
||||
PokedexRatingText_4424c: ; 4424c (11:424c)
|
||||
TX_FAR _OaksLabText_4424c
|
||||
db "@"
|
183
engine/predefs.asm
Executable file
183
engine/predefs.asm
Executable file
|
@ -0,0 +1,183 @@
|
|||
GetPredefPointer: ; 4fe49 (13:7e49)
|
||||
; stores hl in $CC4F,$CC50
|
||||
; stores de in $CC51,$CC52
|
||||
; stores bc in $CC53,$CC54
|
||||
; grabs a byte "n" from $CC4E,
|
||||
; and gets the nth (3-byte) pointer in PredefPointers
|
||||
; stores the bank of said pointer in [$D0B7]
|
||||
; stores the pointer in hl and returns
|
||||
; ld $CC4F,hl
|
||||
ld a,h
|
||||
ld [$CC4F],a
|
||||
ld a,l
|
||||
ld [$CC50],a
|
||||
|
||||
; ld $CC51,de
|
||||
ld hl,$CC51
|
||||
ld a,d
|
||||
ld [hli],a
|
||||
ld a,e
|
||||
ld [hli],a
|
||||
|
||||
; ld $CC53,bc
|
||||
ld a,b
|
||||
ld [hli],a
|
||||
ld [hl],c
|
||||
|
||||
ld hl,PredefPointers
|
||||
ld de,0
|
||||
|
||||
; de = 3 * [$CC4E]
|
||||
ld a,[$CC4E]
|
||||
ld e,a
|
||||
add a,a
|
||||
add a,e
|
||||
ld e,a
|
||||
jr nc,.next
|
||||
inc d
|
||||
|
||||
.next
|
||||
add hl,de
|
||||
ld d,h
|
||||
ld e,l
|
||||
|
||||
; get bank of predef routine
|
||||
ld a,[de]
|
||||
ld [$D0B7],a
|
||||
|
||||
; get pointer
|
||||
inc de
|
||||
ld a,[de]
|
||||
ld l,a
|
||||
inc de
|
||||
ld a,[de]
|
||||
ld h,a
|
||||
|
||||
ret
|
||||
|
||||
PredefPointers: ; 4fe79 (13:7e79)
|
||||
; these are pointers to ASM routines.
|
||||
; they appear to be used in overworld map scripts.
|
||||
dbw BANK(Func_3cd60),Func_3cd60
|
||||
dbw BANK(Func_3f0c6),Func_3f0c6
|
||||
dbw BANK(Func_3f073),Func_3f073
|
||||
dbw BANK(ScaleSpriteByTwo), ScaleSpriteByTwo
|
||||
db BANK(LoadMonBackSprite) ; dbw macro gives an error for some reason
|
||||
dw LoadMonBackSprite
|
||||
dbw BANK(Func_79aba),Func_79aba
|
||||
dbw BANK(Func_f132),Func_f132
|
||||
HealPartyPredef: ; 4fe8e (13:7e8e)
|
||||
dbw BANK(HealParty),HealParty
|
||||
MoveAnimationPredef: ; 4fe91 (13:7e91)
|
||||
dbw BANK(MoveAnimation),MoveAnimation; 08 play move animation
|
||||
dbw BANK(Func_f71e),Func_f71e
|
||||
dbw BANK(Func_f71e),Func_f71e
|
||||
dbw BANK(Func_f81d),Func_f81d
|
||||
dbw BANK(Func_f836),Func_f836
|
||||
dbw BANK(Func_f71e),Func_f71e
|
||||
dbw BANK(Func_f71e),Func_f71e
|
||||
db BANK(InitializePlayerData)
|
||||
dw InitializePlayerData
|
||||
dbw BANK(HandleBitArray),HandleBitArray
|
||||
db BANK(RemoveMissableObject)
|
||||
dw RemoveMissableObject
|
||||
db BANK(IsMissableObjectHidden)
|
||||
dw IsMissableObjectHidden
|
||||
dbw BANK(Func_c69c),Func_c69c
|
||||
db BANK(AnyPlayerPokemonAliveCheck)
|
||||
dw AnyPlayerPokemonAliveCheck
|
||||
db BANK(AddMissableObject)
|
||||
dw AddMissableObject
|
||||
db BANK(AddMissableObject)
|
||||
dw AddMissableObject
|
||||
dbw BANK(Func_ee9e),Func_ee9e
|
||||
db BANK(InitializePlayerData)
|
||||
dw InitializePlayerData
|
||||
dbw BANK(Func_c754),Func_c754
|
||||
dbw BANK(Func_3af5b),Func_3af5b
|
||||
dbw BANK(LearnMove),LearnMove
|
||||
dbw BANK(IsItemInBag_),IsItemInBag_; 1C, used in Pokémon Tower
|
||||
dbw $03,Func_3eb5 ; for these two, the bank number is actually 0
|
||||
dbw $03,GiveItem
|
||||
dbw BANK(Func_480eb),Func_480eb
|
||||
dbw BANK(Func_f8ba),Func_f8ba
|
||||
dbw BANK(Func_480ff),Func_480ff
|
||||
dbw BANK(Func_f929),Func_f929
|
||||
dbw BANK(Func_f9a0),Func_f9a0
|
||||
dbw BANK(Func_48125),Func_48125
|
||||
dbw BANK(UpdateHPBar),UpdateHPBar
|
||||
db BANK(UpdateHPBar_LoadRegisters)
|
||||
dw UpdateHPBar_LoadRegisters
|
||||
dbw BANK(Func_5ab0),Func_5ab0
|
||||
dbw BANK(Func_3ed02),Func_3ed02
|
||||
db BANK(DisplayPokedexMenu_)
|
||||
dw DisplayPokedexMenu_
|
||||
dbw BANK(Func_3ad1c),Func_3ad1c
|
||||
dbw BANK(SaveSAVtoSRAM0),SaveSAVtoSRAM0
|
||||
dbw BANK(InitOpponent),InitOpponent
|
||||
dbw BANK(Func_5a5f),Func_5a5f
|
||||
dbw BANK(DrawBadges), DrawBadges
|
||||
dbw BANK(Func_410f3),Func_410f3
|
||||
dbw BANK(Func_7096d),Func_7096d
|
||||
dbw BANK(Func_79dda),Func_79dda
|
||||
dbw BANK(PlayIntro),PlayIntro
|
||||
dbw BANK(Func_79869),Func_79869
|
||||
dbw BANK(Func_70b5d),Func_70b5d
|
||||
dbw BANK(Func_c586),Func_c586
|
||||
dbw BANK(StatusScreen),StatusScreen ; 37 0x12953
|
||||
dbw BANK(StatusScreen2),StatusScreen2 ; 38
|
||||
dbw BANK(Func_410e2),Func_410e2
|
||||
db BANK(CheckEngagePlayer)
|
||||
dw CheckEngagePlayer
|
||||
dbw BANK(IndexToPokedex),IndexToPokedex
|
||||
dbw BANK(Predef3B),Predef3B; 3B display pic?
|
||||
dbw BANK(UsedCut),UsedCut
|
||||
dbw BANK(ShowPokedexData),ShowPokedexData
|
||||
dbw BANK(WriteMonMoves),WriteMonMoves
|
||||
dbw BANK(SaveSAV),SaveSAV
|
||||
db BANK(LoadSGBBorderAndPalettes)
|
||||
dw LoadSGBBorderAndPalettes
|
||||
dbw BANK(Func_f113),Func_f113
|
||||
dbw BANK(SetPartyMonTypes),SetPartyMonTypes
|
||||
db BANK(TestMonMoveCompatibility)
|
||||
dw TestMonMoveCompatibility
|
||||
dbw BANK(TMToMove),TMToMove
|
||||
dbw BANK(Func_71ddf),Func_71ddf
|
||||
db BANK(DisplayStarterMonDex)
|
||||
dw DisplayStarterMonDex; 46 load dex screen
|
||||
db BANK(_AddPokemonToParty)
|
||||
dw _AddPokemonToParty
|
||||
dbw BANK(UpdateHPBar),UpdateHPBar
|
||||
dbw BANK(Func_3cdec),Func_3cdec
|
||||
dbw BANK(LoadTownMap_Nest),LoadTownMap_Nest
|
||||
dbw BANK(Func_27d6b),Func_27d6b
|
||||
db BANK(PrintEmotionBubble)
|
||||
dw PrintEmotionBubble; 4C player exclamation
|
||||
dbw BANK(Func_5aaf),Func_5aaf; return immediately
|
||||
db BANK(AskForMonNickname)
|
||||
dw AskForMonNickname
|
||||
dbw BANK(PewterGuys),PewterGuys
|
||||
dbw BANK(SaveSAVtoSRAM2),SaveSAVtoSRAM2
|
||||
dbw BANK(LoadSAVCheckSum2),LoadSAVCheckSum2
|
||||
dbw BANK(LoadSAV),LoadSAV
|
||||
dbw BANK(SaveSAVtoSRAM1),SaveSAVtoSRAM1
|
||||
dbw BANK(Predef54),Predef54 ; 54 initiate trade
|
||||
db BANK(HallOfFameComputer)
|
||||
dw HallOfFameComputer
|
||||
dbw BANK(DisplayDexRating),DisplayDexRating
|
||||
db $1E ; uses wrong bank number
|
||||
dw _DoFlyOrTeleportAwayGraphics
|
||||
db $1E ; uses wrong bank number
|
||||
dw Func_70510
|
||||
dbw BANK(Func_c5be),Func_c5be
|
||||
dbw BANK(Func_c60b),Func_c60b
|
||||
db BANK(PrintUsedStrengthText)
|
||||
dw PrintUsedStrengthText
|
||||
dbw BANK(PickupItem),PickupItem
|
||||
dbw BANK(Func_27d98),Func_27d98
|
||||
dbw BANK(LoadMovePPs),LoadMovePPs
|
||||
DrawHPBarPredef: ; 4ff96 (13:7f96)
|
||||
dbw BANK(Func_128ef),Func_128ef ; 5F draw HP bar
|
||||
dbw BANK(Func_128f6),Func_128f6
|
||||
dbw BANK(Func_1c9c6),Func_1c9c6
|
||||
dbw BANK(OaksAideScript),OaksAideScript
|
64
engine/predefs12.asm
Executable file
64
engine/predefs12.asm
Executable file
|
@ -0,0 +1,64 @@
|
|||
Func_480eb: ; 480eb (12:40eb)
|
||||
call Load16BitRegisters
|
||||
ld a, [rBGP] ; $ff47
|
||||
or b
|
||||
ld [rBGP], a ; $ff47
|
||||
ld c, $4
|
||||
call DelayFrames
|
||||
ld a, [rBGP] ; $ff47
|
||||
and $fc
|
||||
ld [rBGP], a ; $ff47
|
||||
ret
|
||||
|
||||
Func_480ff: ; 480ff (12:40ff)
|
||||
call Load16BitRegisters
|
||||
ld a, $1
|
||||
ld [$d0a0], a
|
||||
xor a
|
||||
.asm_48108
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
call Func_48119
|
||||
call Func_48119
|
||||
dec b
|
||||
ld a, b
|
||||
jr nz, .asm_48108
|
||||
xor a
|
||||
ld [$d0a0], a
|
||||
ret
|
||||
|
||||
Func_48119: ; 48119 (12:4119)
|
||||
ld a, [H_NUMTOPRINT] ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
xor b
|
||||
ld [H_NUMTOPRINT], a ; $ff96 (aliases: H_MULTIPLICAND)
|
||||
ld [rWY], a ; $ff4a
|
||||
ld c, $3
|
||||
jp DelayFrames
|
||||
|
||||
Func_48125: ; 48125 (12:4125)
|
||||
call Load16BitRegisters
|
||||
xor a
|
||||
.asm_48129
|
||||
ld [$ff97], a
|
||||
call Func_4813f
|
||||
ld c, $1
|
||||
call DelayFrames
|
||||
call Func_4813f
|
||||
dec b
|
||||
ld a, b
|
||||
jr nz, .asm_48129
|
||||
ld a, $7
|
||||
ld [rWX], a ; $ff4b
|
||||
ret
|
||||
|
||||
Func_4813f: ; 4813f (12:413f)
|
||||
ld a, [$ff97]
|
||||
xor b
|
||||
ld [$ff97], a
|
||||
bit 7, a
|
||||
jr z, .asm_48149
|
||||
xor a
|
||||
.asm_48149
|
||||
add $7
|
||||
ld [rWX], a ; $ff4b
|
||||
ld c, $4
|
||||
jp DelayFrames
|
10
engine/predefs17.asm
Executable file
10
engine/predefs17.asm
Executable file
|
@ -0,0 +1,10 @@
|
|||
; this function temporarily makes the starters (and Ivysaur) seen
|
||||
; so that the full Pokedex information gets displayed in Oak's lab
|
||||
DisplayStarterMonDex: ; 5c0dc (17:40dc)
|
||||
ld a, %01001011 ; set starter flags
|
||||
ld [wPokedexOwned], a ; $d2f7
|
||||
ld a, $3d
|
||||
call Predef ; indirect jump to ShowPokedexData (402d1 (10:42d1))
|
||||
xor a ; unset starter flags
|
||||
ld [wPokedexOwned], a ; $d2f7
|
||||
ret
|
15
engine/predefs17_2.asm
Executable file
15
engine/predefs17_2.asm
Executable file
|
@ -0,0 +1,15 @@
|
|||
; updates the types of a party mon (pointed to in hl) to the ones of the mon specified in $d11e
|
||||
SetPartyMonTypes: ; 5db5e (17:5b5e)
|
||||
call Load16BitRegisters
|
||||
ld bc, W_PARTYMON1_TYPE1 - W_PARTYMON1DATA ; $5
|
||||
add hl, bc
|
||||
ld a, [$d11e]
|
||||
ld [$d0b5], a
|
||||
push hl
|
||||
call GetMonHeader
|
||||
pop hl
|
||||
ld a, [W_MONHTYPE1]
|
||||
ld [hli], a
|
||||
ld a, [W_MONHTYPE2]
|
||||
ld [hl], a
|
||||
ret
|
48
engine/predefs7.asm
Executable file
48
engine/predefs7.asm
Executable file
|
@ -0,0 +1,48 @@
|
|||
Func_1c9c6: ; 1c9c6 (7:49c6)
|
||||
ld hl, WhichFloorText
|
||||
call PrintText
|
||||
ld hl, $cf7b
|
||||
ld a, l
|
||||
ld [$cf8b], a
|
||||
ld a, h
|
||||
ld [$cf8c], a
|
||||
ld a, [wListScrollOffset] ; $cc36
|
||||
push af
|
||||
xor a
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ld [$cf93], a
|
||||
ld a, $4
|
||||
ld [wListMenuID], a ; $cf94
|
||||
call DisplayListMenuID
|
||||
pop bc
|
||||
ld a, b
|
||||
ld [wListScrollOffset], a ; $cc36
|
||||
ret c
|
||||
ld hl, $d126
|
||||
set 7, [hl]
|
||||
ld hl, $cc5b
|
||||
ld a, [wWhichPokemon] ; $cf92
|
||||
add a
|
||||
ld d, $0
|
||||
ld e, a
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld b, a
|
||||
ld a, [hl]
|
||||
ld c, a
|
||||
ld hl, $d3af
|
||||
call Func_1ca0d
|
||||
|
||||
Func_1ca0d: ; 1ca0d (7:4a0d)
|
||||
inc hl
|
||||
inc hl
|
||||
ld a, b
|
||||
ld [hli], a
|
||||
ld a, c
|
||||
ld [hli], a
|
||||
ret
|
||||
|
||||
WhichFloorText: ; 1ca14 (7:4a14)
|
||||
TX_FAR _WhichFloorText
|
||||
db "@"
|
13
engine/rng.asm
Executable file
13
engine/rng.asm
Executable file
|
@ -0,0 +1,13 @@
|
|||
GenRandom_: ; 13a8f (4:7a8f)
|
||||
; generate a random 16-bit integer and store it at $FFD3,$FFD4
|
||||
ld a,[rDIV]
|
||||
ld b,a
|
||||
ld a,[H_RAND1]
|
||||
adc b
|
||||
ld [H_RAND1],a
|
||||
ld a,[rDIV]
|
||||
ld b,a
|
||||
ld a,[H_RAND2]
|
||||
sbc b
|
||||
ld [H_RAND2],a
|
||||
ret
|
698
engine/save.asm
Executable file
698
engine/save.asm
Executable file
|
@ -0,0 +1,698 @@
|
|||
LoadSAV: ; 735e8 (1c:75e8)
|
||||
;(if carry -> write
|
||||
;"the file data is destroyed")
|
||||
call ClearScreen
|
||||
call LoadFontTilePatterns
|
||||
call LoadTextBoxTilePatterns
|
||||
call LoadSAVCheckSum
|
||||
jr c, .badsum
|
||||
call LoadSAVCheckSum1
|
||||
jr c, .badsum
|
||||
call LoadSAVCheckSum2
|
||||
jr c, .badsum
|
||||
ld a, $2 ; good checksum
|
||||
jr .goodsum
|
||||
.badsum
|
||||
ld hl, $d730
|
||||
push hl
|
||||
set 6, [hl]
|
||||
ld hl, FileDataDestroyedText
|
||||
call PrintText
|
||||
ld c, $64
|
||||
call DelayFrames
|
||||
pop hl
|
||||
res 6, [hl]
|
||||
ld a, $1 ; bad checksum
|
||||
.goodsum
|
||||
ld [$d088], a ; checksum flag
|
||||
ret
|
||||
|
||||
FileDataDestroyedText: ; 7361e (1c:761e)
|
||||
TX_FAR _FileDataDestroyedText
|
||||
db "@"
|
||||
|
||||
LoadSAVCheckSum: ; 73623 (1c:7623)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, $a598 ; hero name located in SRAM
|
||||
ld bc, $f8b ; but here checks the full SAV
|
||||
call SAVCheckSum
|
||||
ld c, a
|
||||
ld a, [$b523] ; SAV's checksum
|
||||
cp c
|
||||
jp z, .Func_73652
|
||||
ld hl, $a598
|
||||
ld bc, $f8b
|
||||
call SAVCheckSum
|
||||
ld c, a
|
||||
ld a, [$b523] ; SAV's checksum
|
||||
cp c
|
||||
jp nz, SAVBadCheckSum
|
||||
|
||||
.Func_73652 ; 73652 (1c:7652)
|
||||
ld hl, $a598
|
||||
ld de, W_PLAYERNAME ; $d158
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, $a5a3
|
||||
ld de, wPokedexOwned ; $d2f7
|
||||
ld bc, $789
|
||||
call CopyData
|
||||
ld hl, W_CURMAPTILESET ; $d367
|
||||
set 7, [hl]
|
||||
ld hl, $ad2c
|
||||
ld de, wSpriteStateData1
|
||||
ld bc, $200
|
||||
call CopyData
|
||||
ld a, [$b522]
|
||||
ld [$ffd7], a
|
||||
ld hl, $b0c0
|
||||
ld de, W_NUMINBOX ; $da80
|
||||
ld bc, $462
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
|
||||
LoadSAVCheckSum1: ; 73690 (1c:7690)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, $a598 ; hero name located in SRAM
|
||||
ld bc, $f8b ; but here checks the full SAV
|
||||
call SAVCheckSum
|
||||
ld c, a
|
||||
ld a, [$b523] ; SAV's checksum
|
||||
cp c
|
||||
jr nz, SAVBadCheckSum
|
||||
ld hl, $b0c0
|
||||
ld de, W_NUMINBOX ; $da80
|
||||
ld bc, $462
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
|
||||
LoadSAVCheckSum2: ; 736bd (1c:76bd)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, $a598 ; hero name located in SRAM
|
||||
ld bc, $f8b ; but here checks the full SAV
|
||||
call SAVCheckSum
|
||||
ld c, a
|
||||
ld a, [$b523] ; SAV's checksum
|
||||
cp c
|
||||
jp nz, SAVBadCheckSum
|
||||
ld hl, $af2c
|
||||
ld de, W_NUMINPARTY ; $d163
|
||||
ld bc, $194
|
||||
call CopyData
|
||||
ld hl, $a5a3
|
||||
ld de, wPokedexOwned ; $d2f7
|
||||
ld bc, wPokedexSeenEnd - wPokedexOwned
|
||||
call CopyData
|
||||
and a
|
||||
jp SAVGoodChecksum
|
||||
|
||||
SAVBadCheckSum: ; 736f7 (1c:76f7)
|
||||
scf
|
||||
|
||||
SAVGoodChecksum: ; 736f8 (1c:76f8)
|
||||
ld a, $0
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
Func_73701: ; 0x73701
|
||||
call LoadSAVCheckSum
|
||||
call LoadSAVCheckSum1
|
||||
jp LoadSAVCheckSum2
|
||||
|
||||
SaveSAV: ;$770a
|
||||
callba PrintSaveScreenText
|
||||
ld hl,WouldYouLikeToSaveText
|
||||
call SaveSAVConfirm
|
||||
and a ;|0 = Yes|1 = No|
|
||||
ret nz
|
||||
ld a,[$d088]
|
||||
dec a
|
||||
jr z,.save
|
||||
call SAVCheckRandomID
|
||||
jr z,.save
|
||||
ld hl,OlderFileWillBeErasedText
|
||||
call SaveSAVConfirm
|
||||
and a
|
||||
ret nz
|
||||
.save ;$772d
|
||||
call SaveSAVtoSRAM ;$7848
|
||||
FuncCoord 1,13
|
||||
ld hl,Coord
|
||||
ld bc,$0412
|
||||
call ClearScreenArea ; clear area 4x12 starting at 13,1
|
||||
FuncCoord 1,14
|
||||
ld hl,Coord
|
||||
ld de,NowSavingString
|
||||
call PlaceString
|
||||
ld c,$78
|
||||
call DelayFrames
|
||||
ld hl,GameSavedText
|
||||
call PrintText
|
||||
ld a, (SFX_02_5d - SFX_Headers_02) / 3 ;sound for saved game
|
||||
call PlaySoundWaitForCurrent
|
||||
call WaitForSoundToFinish
|
||||
ld c,$1e
|
||||
jp DelayFrames
|
||||
|
||||
NowSavingString:
|
||||
db "Now saving...@"
|
||||
|
||||
SaveSAVConfirm: ; 73768 (1c:7768)
|
||||
call PrintText
|
||||
FuncCoord 0, 7
|
||||
ld hl,Coord
|
||||
ld bc,$0801 ;arrow's coordinates |b = Y|c = X|
|
||||
ld a,$14 ;one line shifting ($28 = 2 lines)
|
||||
ld [$d125],a
|
||||
call DisplayTextBoxID ;handle Yes/No KeyPress
|
||||
ld a,[$cc26]
|
||||
ret
|
||||
|
||||
WouldYouLikeToSaveText: ; 0x7377d
|
||||
TX_FAR _WouldYouLikeToSaveText
|
||||
db "@"
|
||||
|
||||
GameSavedText: ; 73782 (1c:7782)
|
||||
TX_FAR _GameSavedText
|
||||
db "@"
|
||||
|
||||
OlderFileWillBeErasedText: ; 73787 (1c:7787)
|
||||
TX_FAR _OlderFileWillBeErasedText
|
||||
db "@"
|
||||
|
||||
SaveSAVtoSRAM0: ; 7378c (1c:778c)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, W_PLAYERNAME ; $d158
|
||||
ld de, $a598
|
||||
ld bc, $b
|
||||
call CopyData
|
||||
ld hl, wPokedexOwned ; $d2f7
|
||||
ld de, $a5a3
|
||||
ld bc, $789
|
||||
call CopyData
|
||||
ld hl, wSpriteStateData1 ; OAM?
|
||||
ld de, $ad2c
|
||||
ld bc, $200
|
||||
call CopyData
|
||||
ld hl, W_NUMINBOX ; $da80
|
||||
ld de, $b0c0
|
||||
ld bc, $462
|
||||
call CopyData
|
||||
ld a, [$ffd7]
|
||||
ld [$b522], a
|
||||
ld hl, $a598
|
||||
ld bc, $f8b
|
||||
call SAVCheckSum
|
||||
ld [$b523], a
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM1: ; 737e2 (1c:77e2)
|
||||
; stored pokémon
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, W_NUMINBOX ; $da80
|
||||
ld de, $b0c0
|
||||
ld bc, $462
|
||||
call CopyData
|
||||
ld hl, $a598
|
||||
ld bc, $f8b
|
||||
call SAVCheckSum
|
||||
ld [$b523], a
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM2: ; 7380f (1c:780f)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld [$4000], a
|
||||
ld hl, W_NUMINPARTY ; $d163
|
||||
ld de, $af2c
|
||||
ld bc, $194
|
||||
call CopyData
|
||||
ld hl, wPokedexOwned ; pokédex only
|
||||
ld de, $a5a3
|
||||
ld bc, wPokedexSeenEnd - wPokedexOwned
|
||||
call CopyData
|
||||
ld hl, $a598
|
||||
ld bc, $f8b
|
||||
call SAVCheckSum
|
||||
ld [$b523], a
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
SaveSAVtoSRAM: ; 73848 (1c:7848)
|
||||
ld a, $2
|
||||
ld [$d088], a
|
||||
call SaveSAVtoSRAM0
|
||||
call SaveSAVtoSRAM1
|
||||
jp SaveSAVtoSRAM2
|
||||
|
||||
SAVCheckSum: ; 73856 (1c:7856)
|
||||
;Check Sum (result[1 byte] is complemented)
|
||||
ld d, $0
|
||||
.loop
|
||||
ld a, [hli]
|
||||
add d
|
||||
ld d, a
|
||||
dec bc
|
||||
ld a, b
|
||||
or c
|
||||
jr nz, .loop
|
||||
ld a, d
|
||||
cpl
|
||||
ret
|
||||
|
||||
Func_73863: ; 73863 (1c:7863)
|
||||
ld hl, $a000
|
||||
ld de, $ba4d
|
||||
ld b, $6
|
||||
.asm_7386b
|
||||
push bc
|
||||
push de
|
||||
ld bc, $462
|
||||
call SAVCheckSum
|
||||
pop de
|
||||
ld [de], a
|
||||
inc de
|
||||
pop bc
|
||||
dec b
|
||||
jr nz, .asm_7386b
|
||||
ret
|
||||
|
||||
Func_7387b: ; 7387b (1c:787b)
|
||||
ld hl, PointerTable_73895 ; $7895
|
||||
ld a, [$d5a0]
|
||||
and $7f
|
||||
cp $6
|
||||
ld b, $2
|
||||
jr c, .asm_7388c
|
||||
inc b
|
||||
sub $6
|
||||
.asm_7388c
|
||||
ld e, a
|
||||
ld d, $0
|
||||
add hl, de
|
||||
add hl, de
|
||||
ld a, [hli]
|
||||
ld h, [hl]
|
||||
ld l, a
|
||||
ret
|
||||
|
||||
PointerTable_73895: ; 73895 (1c:7895)
|
||||
dw $A000
|
||||
dw $A462
|
||||
dw $A8C4
|
||||
dw $AD26
|
||||
dw $B188
|
||||
dw $B5EA
|
||||
|
||||
Func_738a1:: ; 738a1 (1c:78a1)
|
||||
ld hl, WhenYouChangeBoxText
|
||||
call PrintText
|
||||
call YesNoChoice
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
and a
|
||||
ret nz
|
||||
ld hl, $d5a0
|
||||
bit 7, [hl]
|
||||
call z, Func_73a29
|
||||
call Func_7393f
|
||||
call UpdateSprites
|
||||
ld hl, $fff6
|
||||
set 1, [hl]
|
||||
call HandleMenuInput
|
||||
ld hl, $fff6
|
||||
res 1, [hl]
|
||||
bit 1, a
|
||||
ret nz
|
||||
call Func_7387b
|
||||
ld e, l
|
||||
ld d, h
|
||||
ld hl, W_NUMINBOX ; $da80
|
||||
call Func_7390e
|
||||
ld a, [wCurrentMenuItem] ; $cc26
|
||||
set 7, a
|
||||
ld [$d5a0], a
|
||||
call Func_7387b
|
||||
ld de, W_NUMINBOX ; $da80
|
||||
call Func_7390e
|
||||
ld hl, W_MAPTEXTPTR ; $d36c
|
||||
ld de, wWhichTrade ; $cd3d
|
||||
ld a, [hli]
|
||||
ld [de], a
|
||||
inc de
|
||||
ld a, [hl]
|
||||
ld [de], a
|
||||
call Func_3f05
|
||||
call SaveSAVtoSRAM
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
call Func_3f0f
|
||||
ld a, (SFX_02_5d - SFX_Headers_02) / 3
|
||||
call PlaySoundWaitForCurrent
|
||||
call WaitForSoundToFinish
|
||||
ret
|
||||
|
||||
WhenYouChangeBoxText: ; 73909 (1c:7909)
|
||||
TX_FAR _WhenYouChangeBoxText
|
||||
db "@"
|
||||
|
||||
Func_7390e: ; 7390e (1c:790e)
|
||||
push hl
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld a, b
|
||||
ld [$4000], a
|
||||
ld bc, $462
|
||||
call CopyData
|
||||
pop hl
|
||||
xor a
|
||||
ld [hli], a
|
||||
dec a
|
||||
ld [hl], a
|
||||
ld hl, $a000
|
||||
ld bc, $1a4c
|
||||
call SAVCheckSum
|
||||
ld [$ba4c], a
|
||||
call Func_73863
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
Func_7393f: ; 7393f (1c:793f)
|
||||
xor a
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ld a, $3
|
||||
ld [wMenuWatchedKeys], a ; $cc29
|
||||
ld a, $b
|
||||
ld [wMaxMenuItem], a ; $cc28
|
||||
ld a, $1
|
||||
ld [wTopMenuItemY], a ; $cc24
|
||||
ld a, $c
|
||||
ld [wTopMenuItemX], a ; $cc25
|
||||
xor a
|
||||
ld [$cc37], a
|
||||
ld a, [$d5a0]
|
||||
and $7f
|
||||
ld [wCurrentMenuItem], a ; $cc26
|
||||
ld [wLastMenuItem], a ; $cc2a
|
||||
ld hl, wTileMap
|
||||
ld b, $2
|
||||
ld c, $9
|
||||
call TextBoxBorder
|
||||
ld hl, ChooseABoxText
|
||||
call PrintText
|
||||
FuncCoord 11, 0 ; $c3ab
|
||||
ld hl, Coord
|
||||
ld b, $c
|
||||
ld c, $7
|
||||
call TextBoxBorder
|
||||
ld hl, $fff6
|
||||
set 2, [hl]
|
||||
ld de, BoxNames ; $79d9
|
||||
FuncCoord 13, 1 ; $c3c1
|
||||
ld hl, Coord
|
||||
call PlaceString
|
||||
ld hl, $fff6
|
||||
res 2, [hl]
|
||||
ld a, [$d5a0]
|
||||
and $7f
|
||||
cp $9
|
||||
jr c, .asm_739a6
|
||||
sub $9
|
||||
FuncCoord 8, 2 ; $c3d0
|
||||
ld hl, Coord
|
||||
ld [hl], $f7
|
||||
add $f6
|
||||
jr .asm_739a8
|
||||
.asm_739a6
|
||||
add $f7
|
||||
.asm_739a8
|
||||
FuncCoord 9, 2 ; $c3d1
|
||||
ld [Coord], a
|
||||
FuncCoord 1, 2 ; $c3c9
|
||||
ld hl, Coord
|
||||
ld de, BoxNoText
|
||||
call PlaceString
|
||||
call Func_73a84
|
||||
FuncCoord 18, 1 ; $c3c6
|
||||
ld hl, Coord
|
||||
ld de, wWhichTrade ; $cd3d
|
||||
ld bc, $14
|
||||
ld a, $c
|
||||
.asm_739c2
|
||||
push af
|
||||
ld a, [de]
|
||||
and a
|
||||
jr z, .asm_739c9
|
||||
ld [hl], $78
|
||||
.asm_739c9
|
||||
add hl, bc
|
||||
inc de
|
||||
pop af
|
||||
dec a
|
||||
jr nz, .asm_739c2
|
||||
ld a, $1
|
||||
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
|
||||
ret
|
||||
|
||||
ChooseABoxText: ; 739d4 (1c:79d4)
|
||||
TX_FAR _ChooseABoxText
|
||||
db "@"
|
||||
|
||||
BoxNames: ; 739d9 (1c:79d9)
|
||||
db "BOX 1"
|
||||
next "BOX 2"
|
||||
next "BOX 3"
|
||||
next "BOX 4"
|
||||
next "BOX 5"
|
||||
next "BOX 6"
|
||||
next "BOX 7"
|
||||
next "BOX 8"
|
||||
next "BOX 9"
|
||||
next "BOX10"
|
||||
next "BOX11"
|
||||
next "BOX12@"
|
||||
|
||||
BoxNoText: ; 73a21 (1c:7a21)
|
||||
db "BOX No.@"
|
||||
|
||||
Func_73a29: ; 73a29 (1c:7a29)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld a, $2
|
||||
ld [$4000], a
|
||||
call Func_73a4b
|
||||
ld a, $3
|
||||
ld [$4000], a
|
||||
call Func_73a4b
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
Func_73a4b: ; 73a4b (1c:7a4b)
|
||||
ld hl, $a000
|
||||
call Func_73a7f
|
||||
ld hl, $a462
|
||||
call Func_73a7f
|
||||
ld hl, $a8c4
|
||||
call Func_73a7f
|
||||
ld hl, $ad26
|
||||
call Func_73a7f
|
||||
ld hl, $b188
|
||||
call Func_73a7f
|
||||
ld hl, $b5ea
|
||||
call Func_73a7f
|
||||
ld hl, $a000
|
||||
ld bc, $1a4c
|
||||
call SAVCheckSum
|
||||
ld [$ba4c], a
|
||||
call Func_73863
|
||||
ret
|
||||
|
||||
Func_73a7f: ; 73a7f (1c:7a7f)
|
||||
xor a
|
||||
ld [hli], a
|
||||
dec a
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Func_73a84: ; 73a84 (1c:7a84)
|
||||
ld hl, wWhichTrade ; $cd3d
|
||||
push hl
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
ld a, $2
|
||||
ld [$4000], a
|
||||
call Func_73ab8
|
||||
ld a, $3
|
||||
ld [$4000], a
|
||||
call Func_73ab8
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
pop hl
|
||||
ld a, [$d5a0]
|
||||
and $7f
|
||||
ld c, a
|
||||
ld b, $0
|
||||
add hl, bc
|
||||
ld a, [W_NUMINBOX] ; $da80
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
Func_73ab8: ; 73ab8 (1c:7ab8)
|
||||
ld a, [$a000]
|
||||
ld [hli], a
|
||||
ld a, [$a462]
|
||||
ld [hli], a
|
||||
ld a, [$a8c4]
|
||||
ld [hli], a
|
||||
ld a, [$ad26]
|
||||
ld [hli], a
|
||||
ld a, [$b188]
|
||||
ld [hli], a
|
||||
ld a, [$b5ea]
|
||||
ld [hli], a
|
||||
ret
|
||||
|
||||
SAVCheckRandomID: ;$7ad1
|
||||
;checks if Sav file is the same by checking player's name 1st letter ($a598)
|
||||
; and the two random numbers generated at game beginning
|
||||
;(which are stored at $d359-d35a)
|
||||
ld a,$0a
|
||||
ld [$0000],a
|
||||
ld a,$01
|
||||
ld [$6000],a
|
||||
ld [$4000],a
|
||||
ld a,[$a598]
|
||||
and a
|
||||
jr z,.next
|
||||
ld hl,$a598
|
||||
ld bc,$0f8b
|
||||
call SAVCheckSum
|
||||
ld c,a
|
||||
ld a,[$b523]
|
||||
cp c
|
||||
jr nz,.next
|
||||
ld hl,$a605
|
||||
ld a,[hli]
|
||||
ld h,[hl]
|
||||
ld l,a
|
||||
ld a,[$d359]
|
||||
cp l
|
||||
jr nz,.next
|
||||
ld a,[$d35a]
|
||||
cp h
|
||||
.next
|
||||
ld a,$00
|
||||
ld [$6000],a
|
||||
ld [$0000],a
|
||||
ret
|
||||
|
||||
Func_73b0d: ; 73b0d (1c:7b0d)
|
||||
ld a, [$d5a2]
|
||||
dec a
|
||||
cp $32
|
||||
jr nc, .asm_73b28
|
||||
ld hl, $a598
|
||||
ld bc, $60
|
||||
call AddNTimes
|
||||
ld e, l
|
||||
ld d, h
|
||||
ld hl, $cc5b
|
||||
ld bc, $60
|
||||
jr CopyToSRAM0
|
||||
.asm_73b28
|
||||
ld hl, $a5f8
|
||||
ld de, $a598
|
||||
ld bc, $1260
|
||||
call CopyToSRAM0
|
||||
ld hl, $cc5b
|
||||
ld de, $b7f8
|
||||
ld bc, $60
|
||||
jr CopyToSRAM0
|
||||
|
||||
Func_73b3f: ; 73b3f (1c:7b3f)
|
||||
ld hl, $a598
|
||||
ld bc, $60
|
||||
ld a, [wWhichTrade] ; $cd3d
|
||||
call AddNTimes
|
||||
ld de, $cc5b
|
||||
ld bc, $60
|
||||
; fallthrough
|
||||
CopyToSRAM0: ; 73b51 (1c:7b51)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
xor a
|
||||
ld [$4000], a
|
||||
call CopyData
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
Func_73b6a: ; 73b6a (1c:7b6a)
|
||||
ld a, $a
|
||||
ld [$0], a
|
||||
ld a, $1
|
||||
ld [$6000], a
|
||||
xor a
|
||||
call PadSRAM_FF
|
||||
ld a, $1
|
||||
call PadSRAM_FF
|
||||
ld a, $2
|
||||
call PadSRAM_FF
|
||||
ld a, $3
|
||||
call PadSRAM_FF
|
||||
xor a
|
||||
ld [$6000], a
|
||||
ld [$0], a
|
||||
ret
|
||||
|
||||
PadSRAM_FF: ; 73b8f (1c:7b8f)
|
||||
ld [$4000], a
|
||||
ld hl, $a000
|
||||
ld bc, $2000
|
||||
ld a, $ff
|
||||
jp FillMemory
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue