Pull a lot of engine out of main.asm

This commit is contained in:
U-Fish-PC\Daniel 2014-05-22 18:13:20 -04:00
parent ea3ba4cde3
commit 15427f5320
110 changed files with 39093 additions and 38990 deletions

105
engine/battle/1.asm Executable file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load diff

18
engine/battle/b.asm Executable file
View 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
View 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
View 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

File diff suppressed because it is too large Load diff

25
engine/battle/d.asm Executable file
View 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

File diff suppressed because it is too large Load diff

305
engine/battle/e_2.asm Executable file
View 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
View 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 "@"