mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-02-06 15:45:24 +13: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
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 "@"
|
||||
Loading…
Add table
Add a link
Reference in a new issue