mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-11-13 16:54:47 +13:00
Rename battle files and split move effects Part 1
1.asm, 4.asm, and 4_2.asm
This commit is contained in:
parent
9d93b5b630
commit
e74dce24b4
|
|
@ -1,77 +0,0 @@
|
||||||
; returns whether the player is one tile outside the map in Z
|
|
||||||
IsPlayerJustOutsideMap: ; 128d8 (4:68d8)
|
|
||||||
ld a, [W_YCOORD]
|
|
||||||
ld b, a
|
|
||||||
ld a, [W_CURMAPHEIGHT]
|
|
||||||
call .compareCoordWithMapDimension
|
|
||||||
ret z
|
|
||||||
ld a, [W_XCOORD]
|
|
||||||
ld b, a
|
|
||||||
ld a, [W_CURMAPWIDTH]
|
|
||||||
.compareCoordWithMapDimension
|
|
||||||
add a
|
|
||||||
cp b
|
|
||||||
ret z
|
|
||||||
inc b
|
|
||||||
ret
|
|
||||||
|
|
||||||
DrawHP: ; 128ef (4:68ef)
|
|
||||||
call GetPredefRegisters
|
|
||||||
ld a, $1
|
|
||||||
jr DrawHP_
|
|
||||||
|
|
||||||
DrawHP2: ; 128f6 (4:68f6)
|
|
||||||
call GetPredefRegisters
|
|
||||||
ld a, $2
|
|
||||||
|
|
||||||
DrawHP_: ; 128fb (4:68fb)
|
|
||||||
ld [wHPBarType], a
|
|
||||||
push hl
|
|
||||||
ld a, [wLoadedMonHP]
|
|
||||||
ld b, a
|
|
||||||
ld a, [wLoadedMonHP + 1]
|
|
||||||
ld c, a
|
|
||||||
or b
|
|
||||||
jr nz, .nonzeroHP
|
|
||||||
xor a
|
|
||||||
ld c, a
|
|
||||||
ld e, a
|
|
||||||
ld a, $6
|
|
||||||
ld d, a
|
|
||||||
jp .drawHPBarAndPrintFraction
|
|
||||||
.nonzeroHP
|
|
||||||
ld a, [wLoadedMonMaxHP]
|
|
||||||
ld d, a
|
|
||||||
ld a, [wLoadedMonMaxHP + 1]
|
|
||||||
ld e, a
|
|
||||||
predef HPBarLength
|
|
||||||
ld a, $6
|
|
||||||
ld d, a
|
|
||||||
ld c, a
|
|
||||||
.drawHPBarAndPrintFraction
|
|
||||||
pop hl
|
|
||||||
push de
|
|
||||||
push hl
|
|
||||||
push hl
|
|
||||||
call DrawHPBar
|
|
||||||
pop hl
|
|
||||||
ld a, [hFlags_0xFFF6]
|
|
||||||
bit 0, a
|
|
||||||
jr z, .printFractionBelowBar
|
|
||||||
ld bc, $9 ; right of bar
|
|
||||||
jr .printFraction
|
|
||||||
.printFractionBelowBar
|
|
||||||
ld bc, SCREEN_WIDTH + 1 ; below bar
|
|
||||||
.printFraction
|
|
||||||
add hl, bc
|
|
||||||
ld de, wLoadedMonHP
|
|
||||||
ld bc, $203
|
|
||||||
call PrintNumber
|
|
||||||
ld a, "/"
|
|
||||||
ld [hli], a
|
|
||||||
ld de, wLoadedMonMaxHP
|
|
||||||
ld bc, $203
|
|
||||||
call PrintNumber
|
|
||||||
pop hl
|
|
||||||
pop de
|
|
||||||
ret
|
|
||||||
|
|
@ -1,413 +0,0 @@
|
||||||
EndOfBattle: ; 137aa (4:77aa)
|
|
||||||
ld a, [wLinkState]
|
|
||||||
cp LINK_STATE_BATTLING
|
|
||||||
jr nz, .notLinkBattle
|
|
||||||
; link battle
|
|
||||||
ld a, [wEnemyMonPartyPos]
|
|
||||||
ld hl, wEnemyMon1Status
|
|
||||||
ld bc, wEnemyMon2 - wEnemyMon1
|
|
||||||
call AddNTimes
|
|
||||||
ld a, [wEnemyMonStatus]
|
|
||||||
ld [hl], a
|
|
||||||
call ClearScreen
|
|
||||||
callab DisplayLinkBattleVersusTextBox
|
|
||||||
ld a, [wBattleResult]
|
|
||||||
cp $1
|
|
||||||
ld de, YouWinText
|
|
||||||
jr c, .placeWinOrLoseString
|
|
||||||
ld de, YouLoseText
|
|
||||||
jr z, .placeWinOrLoseString
|
|
||||||
ld de, DrawText
|
|
||||||
.placeWinOrLoseString
|
|
||||||
hlCoord 6, 8
|
|
||||||
call PlaceString
|
|
||||||
ld c, $c8
|
|
||||||
call DelayFrames
|
|
||||||
jr .evolution
|
|
||||||
.notLinkBattle
|
|
||||||
ld a, [wBattleResult]
|
|
||||||
and a
|
|
||||||
jr nz, .resetVariables
|
|
||||||
ld hl, wTotalPayDayMoney
|
|
||||||
ld a, [hli]
|
|
||||||
or [hl]
|
|
||||||
inc hl
|
|
||||||
or [hl]
|
|
||||||
jr z, .evolution ; if pay day money is 0, jump
|
|
||||||
ld de, wPlayerMoney + 2
|
|
||||||
ld c, $3
|
|
||||||
predef AddBCDPredef
|
|
||||||
ld hl, PickUpPayDayMoneyText
|
|
||||||
call PrintText
|
|
||||||
.evolution
|
|
||||||
xor a
|
|
||||||
ld [wccd4], a
|
|
||||||
predef EvolutionAfterBattle
|
|
||||||
.resetVariables
|
|
||||||
xor a
|
|
||||||
ld [wLowHealthAlarm], a ;disable low health alarm
|
|
||||||
ld [wc02a], a
|
|
||||||
ld [W_ISINBATTLE], a
|
|
||||||
ld [W_BATTLETYPE], a
|
|
||||||
ld [W_MOVEMISSED], a
|
|
||||||
ld [W_CUROPPONENT], a
|
|
||||||
ld [wd11f], a
|
|
||||||
ld [wNumRunAttempts], a
|
|
||||||
ld [wEscapedFromBattle], a
|
|
||||||
ld hl, wcc2b
|
|
||||||
ld [hli], a
|
|
||||||
ld [hli], a
|
|
||||||
ld [hli], a
|
|
||||||
ld [hl], a
|
|
||||||
ld [wListScrollOffset], a
|
|
||||||
ld hl, wPlayerStatsToDouble
|
|
||||||
ld b, $18
|
|
||||||
.loop
|
|
||||||
ld [hli], a
|
|
||||||
dec b
|
|
||||||
jr nz, .loop
|
|
||||||
ld hl, wd72c
|
|
||||||
set 0, [hl]
|
|
||||||
call WaitForSoundToFinish
|
|
||||||
call GBPalWhiteOut
|
|
||||||
ld a, $ff
|
|
||||||
ld [wDestinationWarpID], 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 "@"
|
|
||||||
|
|
||||||
; try to initiate a wild pokemon encounter
|
|
||||||
; returns success in Z
|
|
||||||
TryDoWildEncounter: ; 13870 (4:7870)
|
|
||||||
ld a, [wNPCMovementScriptPointerTableNum]
|
|
||||||
and a
|
|
||||||
ret nz
|
|
||||||
ld a, [wd736]
|
|
||||||
and a
|
|
||||||
ret nz
|
|
||||||
callab IsPlayerStandingOnDoorTileOrWarpTile
|
|
||||||
jr nc, .notStandingOnDoorOrWarpTile
|
|
||||||
.CantEncounter
|
|
||||||
ld a, $1
|
|
||||||
and a
|
|
||||||
ret
|
|
||||||
.notStandingOnDoorOrWarpTile
|
|
||||||
callab IsPlayerJustOutsideMap
|
|
||||||
jr z, .CantEncounter
|
|
||||||
ld a, [wRepelRemainingSteps]
|
|
||||||
and a
|
|
||||||
jr z, .asm_1389e
|
|
||||||
dec a
|
|
||||||
jr z, .lastRepelStep
|
|
||||||
ld [wRepelRemainingSteps], a
|
|
||||||
.asm_1389e
|
|
||||||
; determine if wild pokémon can appear in the half-block we’re standing in
|
|
||||||
; is the bottom right tile (9,9) of the half-block we're standing in a grass/water tile?
|
|
||||||
hlCoord 9, 9
|
|
||||||
ld c, [hl]
|
|
||||||
ld a, [W_GRASSTILE]
|
|
||||||
cp c
|
|
||||||
ld a, [W_GRASSRATE]
|
|
||||||
jr z, .CanEncounter
|
|
||||||
ld a, $14 ; in all tilesets with a water tile, this is its id
|
|
||||||
cp c
|
|
||||||
ld a, [W_WATERRATE]
|
|
||||||
jr z, .CanEncounter
|
|
||||||
; even if not in grass/water, standing anywhere we can encounter pokémon
|
|
||||||
; so long as the map is “indoor” and has wild pokémon defined.
|
|
||||||
; …as long as it’s not Viridian Forest or Safari Zone.
|
|
||||||
ld a, [W_CURMAP]
|
|
||||||
cp REDS_HOUSE_1F ; is this an indoor map?
|
|
||||||
jr c, .CantEncounter2
|
|
||||||
ld a, [W_CURMAPTILESET]
|
|
||||||
cp FOREST ; Viridian Forest/Safari Zone
|
|
||||||
jr z, .CantEncounter2
|
|
||||||
ld a, [W_GRASSRATE]
|
|
||||||
.CanEncounter
|
|
||||||
; compare encounter chance with a random number to determine if there will be an encounter
|
|
||||||
ld b, a
|
|
||||||
ld a, [hRandomAdd]
|
|
||||||
cp b
|
|
||||||
jr nc, .CantEncounter2
|
|
||||||
ld a, [hRandomSub]
|
|
||||||
ld b, a
|
|
||||||
ld hl, WildMonEncounterSlotChances
|
|
||||||
.determineEncounterSlot
|
|
||||||
ld a, [hli]
|
|
||||||
cp b
|
|
||||||
jr nc, .gotEncounterSlot
|
|
||||||
inc hl
|
|
||||||
jr .determineEncounterSlot
|
|
||||||
.gotEncounterSlot
|
|
||||||
; determine which wild pokémon (grass or water) can appear in the half-block we’re standing in
|
|
||||||
ld c, [hl]
|
|
||||||
ld hl, W_GRASSMONS
|
|
||||||
aCoord 8, 9
|
|
||||||
cp $14 ; is the bottom left tile (8,9) of the half-block we're standing in a water tile?
|
|
||||||
jr nz, .gotWildEncounterType ; else, it's treated as a grass tile by default
|
|
||||||
ld hl, W_WATERMONS
|
|
||||||
; since the bottom right tile of a "left shore" half-block is $14 but the bottom left tile is not,
|
|
||||||
; "left shore" half-blocks (such as the one in the east coast of Cinnabar) load grass encounters.
|
|
||||||
.gotWildEncounterType
|
|
||||||
ld b, $0
|
|
||||||
add hl, bc
|
|
||||||
ld a, [hli]
|
|
||||||
ld [W_CURENEMYLVL], a
|
|
||||||
ld a, [hl]
|
|
||||||
ld [wcf91], a
|
|
||||||
ld [wEnemyMonSpecies2], a
|
|
||||||
ld a, [wRepelRemainingSteps]
|
|
||||||
and a
|
|
||||||
jr z, .willEncounter
|
|
||||||
ld a, [wPartyMon1Level]
|
|
||||||
ld b, a
|
|
||||||
ld a, [W_CURENEMYLVL]
|
|
||||||
cp b
|
|
||||||
jr c, .CantEncounter2 ; repel prevents encounters if the leading party mon's level is higher than the wild mon
|
|
||||||
jr .willEncounter
|
|
||||||
.lastRepelStep
|
|
||||||
ld [wRepelRemainingSteps], a
|
|
||||||
ld a, $d2
|
|
||||||
ld [H_DOWNARROWBLINKCNT2], a
|
|
||||||
call EnableAutoTextBoxDrawing
|
|
||||||
call DisplayTextID
|
|
||||||
.CantEncounter2
|
|
||||||
ld a, $1
|
|
||||||
and a
|
|
||||||
ret
|
|
||||||
.willEncounter
|
|
||||||
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]
|
|
||||||
and a
|
|
||||||
ld a, [W_PLAYERMOVENUM]
|
|
||||||
ld hl, wBattleMonMaxHP
|
|
||||||
jr z, .asm_1393d
|
|
||||||
ld a, [W_ENEMYMOVENUM]
|
|
||||||
ld hl, wEnemyMonMaxHP
|
|
||||||
.asm_1393d
|
|
||||||
ld d, a
|
|
||||||
ld a, [W_DAMAGE]
|
|
||||||
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
|
|
||||||
hlCoord 10, 9
|
|
||||||
ld a, [H_WHOSETURN]
|
|
||||||
and a
|
|
||||||
ld a, $1
|
|
||||||
jr z, .asm_13990
|
|
||||||
hlCoord 2, 2
|
|
||||||
xor a
|
|
||||||
.asm_13990
|
|
||||||
ld [wHPBarType], a
|
|
||||||
predef UpdateHPBar2
|
|
||||||
ld hl, HitWithRecoilText
|
|
||||||
jp PrintText
|
|
||||||
HitWithRecoilText: ; 1399e (4:799e)
|
|
||||||
TX_FAR _HitWithRecoilText
|
|
||||||
db "@"
|
|
||||||
|
|
||||||
ConversionEffect_: ; 139a3 (4:79a3)
|
|
||||||
ld hl, wEnemyMonType1
|
|
||||||
ld de, wBattleMonType1
|
|
||||||
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 Invulnerable, 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, PlayCurrentMoveAnimation
|
|
||||||
call CallBankF
|
|
||||||
ld hl, ConvertedTypeText
|
|
||||||
jp PrintText
|
|
||||||
|
|
||||||
ConvertedTypeText: ; 139cd (4:79cd)
|
|
||||||
TX_FAR _ConvertedTypeText
|
|
||||||
db "@"
|
|
||||||
|
|
||||||
PrintButItFailedText: ; 139d2 (4:79d2)
|
|
||||||
ld hl, PrintButItFailedText_
|
|
||||||
CallBankF: ; 139d5 (4:79d5)
|
|
||||||
ld b, BANK(PrintButItFailedText_)
|
|
||||||
jp Bankswitch
|
|
||||||
|
|
||||||
HazeEffect_: ; 139da (4:79da)
|
|
||||||
ld a, $7
|
|
||||||
ld hl, wPlayerMonAttackMod
|
|
||||||
call ResetStatMods
|
|
||||||
ld hl, wEnemyMonAttackMod
|
|
||||||
call ResetStatMods
|
|
||||||
ld hl, wPlayerMonUnmodifiedAttack
|
|
||||||
ld de, wBattleMonAttack
|
|
||||||
call ResetStats
|
|
||||||
ld hl, wEnemyMonUnmodifiedAttack
|
|
||||||
ld de, wEnemyMonAttack
|
|
||||||
call ResetStats
|
|
||||||
ld hl, wEnemyMonStatus
|
|
||||||
ld de, wEnemySelectedMove
|
|
||||||
ld a, [H_WHOSETURN]
|
|
||||||
and a
|
|
||||||
jr z, .asm_13a09
|
|
||||||
ld hl, wBattleMonStatus
|
|
||||||
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, wccee
|
|
||||||
ld [hli], a
|
|
||||||
ld [hl], a
|
|
||||||
ld hl, W_PLAYERBATTSTATUS1
|
|
||||||
call CureStatuses
|
|
||||||
ld hl, W_ENEMYBATTSTATUS1
|
|
||||||
call CureStatuses
|
|
||||||
ld hl, PlayCurrentMoveAnimation
|
|
||||||
call CallBankF
|
|
||||||
ld hl, StatusChangesEliminatedText
|
|
||||||
jp PrintText
|
|
||||||
|
|
||||||
CureStatuses: ; 13a37 (4:7a37)
|
|
||||||
res Confused, [hl]
|
|
||||||
inc hl ; BATTSTATUS2
|
|
||||||
ld a, [hl]
|
|
||||||
and (1 << UsingRage) | (1 << NeedsToRecharge) | (1 << HasSubstituteUp) | (1 << 3) ; clear all but these from BATTSTATUS2
|
|
||||||
ld [hli], a ; BATTSTATUS3
|
|
||||||
ld a, [hl]
|
|
||||||
and %11110000 | (1 << Transformed) ; clear Bad Poison, Reflect and Light Screen statuses
|
|
||||||
ld [hl], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
ResetStatMods: ; 13a43 (4:7a43)
|
|
||||||
ld b, $8
|
|
||||||
.loop
|
|
||||||
ld [hli], a
|
|
||||||
dec b
|
|
||||||
jr nz, .loop
|
|
||||||
ret
|
|
||||||
|
|
||||||
ResetStats: ; 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
|
|
||||||
ld a, [wLinkState]
|
|
||||||
and a
|
|
||||||
jr nz, .rival
|
|
||||||
ld hl, W_RIVALNAME
|
|
||||||
ld a, [W_TRAINERCLASS]
|
|
||||||
cp SONY1
|
|
||||||
jr z, .rival
|
|
||||||
cp SONY2
|
|
||||||
jr z, .rival
|
|
||||||
cp SONY3
|
|
||||||
jr z, .rival
|
|
||||||
ld [wd0b5], a
|
|
||||||
ld a, TRAINER_NAME
|
|
||||||
ld [wNameListType], a
|
|
||||||
ld a, BANK(TrainerNames)
|
|
||||||
ld [wPredefBank], a
|
|
||||||
call GetName
|
|
||||||
ld hl, wcd6d
|
|
||||||
.rival
|
|
||||||
ld de, W_TRAINERNAME
|
|
||||||
ld bc, $d
|
|
||||||
jp CopyData
|
|
||||||
|
|
@ -407,7 +407,7 @@ MoveAnimation: ; 78d5e (1e:4d5e)
|
||||||
ld c,30
|
ld c,30
|
||||||
call DelayFrames
|
call DelayFrames
|
||||||
.next4
|
.next4
|
||||||
call PlayApplyingAttackAnimation ; reload pic and flash the pic in and out (to show damage)
|
call PlayApplyingAttackAnimation ; shake the screen or flash the pic in and out (to show damage)
|
||||||
.AnimationFinished
|
.AnimationFinished
|
||||||
call WaitForSoundToFinish
|
call WaitForSoundToFinish
|
||||||
xor a
|
xor a
|
||||||
|
|
@ -463,37 +463,37 @@ PlayApplyingAttackAnimation: ; 78dbd (1e:4dbd)
|
||||||
jp [hl]
|
jp [hl]
|
||||||
|
|
||||||
AnimationTypePointerTable: ; 78dcf (1e:4dcf)
|
AnimationTypePointerTable: ; 78dcf (1e:4dcf)
|
||||||
dw ShakeScreenVertically ; enemy mon has used a non-damaging move
|
dw ShakeScreenVertically ; enemy mon has used a damaging move without a side effect
|
||||||
dw ShakeScreenHorizontallyHeavy ; enemy mon has used a damaging move with a side effect
|
dw ShakeScreenHorizontallyHeavy ; enemy mon has used a damaging move with a side effect
|
||||||
dw ShakeScreenHorizontallySlow ; enemy mon has used a damaging move without a side effect
|
dw ShakeScreenHorizontallySlow ; enemy mon has used a non-damaging move
|
||||||
dw BlinkEnemyMonSprite ; player mon has used a non-damaging move
|
dw BlinkEnemyMonSprite ; player mon has used a damaging move without a side effect
|
||||||
dw ShakeScreenHorizontallyLight ; player mon has used a damaging move with a side effect
|
dw ShakeScreenHorizontallyLight ; player mon has used a damaging move with a side effect
|
||||||
dw ShakeScreenHorizontallySlow2 ; player mon has used a damaging move without a side effect
|
dw ShakeScreenHorizontallySlow2 ; player mon has used a non-damaging move
|
||||||
|
|
||||||
ShakeScreenVertically: ; 78ddb (1e:4ddb)
|
ShakeScreenVertically: ; 78ddb (1e:4ddb)
|
||||||
call PlayApplyingAttackSound
|
call PlayApplyingAttackSound
|
||||||
ld b, $8
|
ld b, $8
|
||||||
jp AnimationShakeScreenVertically
|
jp AnimationShakeScreenVertically
|
||||||
|
|
||||||
ShakeScreenHorizontallyHeavy: ; 78de3 (1e:4de3)
|
ShakeScreenHorizontallyHeavy: ; 78de3 (1e:4de3)
|
||||||
call PlayApplyingAttackSound
|
call PlayApplyingAttackSound
|
||||||
ld b, $8
|
ld b, $8
|
||||||
jp AnimationShakeScreenHorizontallyFast
|
jp AnimationShakeScreenHorizontallyFast
|
||||||
|
|
||||||
ShakeScreenHorizontallySlow: ; 78deb (1e:4deb)
|
ShakeScreenHorizontallySlow: ; 78deb (1e:4deb)
|
||||||
ld bc, $602
|
ld bc, $602
|
||||||
jr AnimationShakeScreenHorizontallySlow
|
jr AnimationShakeScreenHorizontallySlow
|
||||||
|
|
||||||
BlinkEnemyMonSprite: ; 78df0 (1e:4df0)
|
BlinkEnemyMonSprite: ; 78df0 (1e:4df0)
|
||||||
call PlayApplyingAttackSound
|
call PlayApplyingAttackSound
|
||||||
jp AnimationBlinkEnemyMon
|
jp AnimationBlinkEnemyMon
|
||||||
|
|
||||||
ShakeScreenHorizontallyLight: ; 78df6 (1e:4df6)
|
ShakeScreenHorizontallyLight: ; 78df6 (1e:4df6)
|
||||||
call PlayApplyingAttackSound
|
call PlayApplyingAttackSound
|
||||||
ld b, $2
|
ld b, $2
|
||||||
jp AnimationShakeScreenHorizontallyFast
|
jp AnimationShakeScreenHorizontallyFast
|
||||||
|
|
||||||
ShakeScreenHorizontallySlow2: ; 78dfe (1e:4dfe)
|
ShakeScreenHorizontallySlow2: ; 78dfe (1e:4dfe)
|
||||||
ld bc, $302
|
ld bc, $302
|
||||||
|
|
||||||
AnimationShakeScreenHorizontallySlow: ; 78e01 (1e:4e01)
|
AnimationShakeScreenHorizontallySlow: ; 78e01 (1e:4e01)
|
||||||
|
|
|
||||||
|
|
@ -335,7 +335,7 @@ AIMoveChoiceModification3: ; 39817 (e:5817)
|
||||||
ld a, [W_ENEMYMOVETYPE]
|
ld a, [W_ENEMYMOVETYPE]
|
||||||
ld d, a
|
ld d, a
|
||||||
ld hl, wEnemyMonMoves ; enemy moves
|
ld hl, wEnemyMonMoves ; enemy moves
|
||||||
ld b, $5
|
ld b, NUM_MOVES + 1
|
||||||
ld c, $0
|
ld c, $0
|
||||||
.loopMoves
|
.loopMoves
|
||||||
dec b
|
dec b
|
||||||
|
|
|
||||||
88
engine/battle/end_of_battle.asm
Normal file
88
engine/battle/end_of_battle.asm
Normal file
|
|
@ -0,0 +1,88 @@
|
||||||
|
EndOfBattle: ; 137aa (4:77aa)
|
||||||
|
ld a, [wLinkState]
|
||||||
|
cp LINK_STATE_BATTLING
|
||||||
|
jr nz, .notLinkBattle
|
||||||
|
; link battle
|
||||||
|
ld a, [wEnemyMonPartyPos]
|
||||||
|
ld hl, wEnemyMon1Status
|
||||||
|
ld bc, wEnemyMon2 - wEnemyMon1
|
||||||
|
call AddNTimes
|
||||||
|
ld a, [wEnemyMonStatus]
|
||||||
|
ld [hl], a
|
||||||
|
call ClearScreen
|
||||||
|
callab DisplayLinkBattleVersusTextBox
|
||||||
|
ld a, [wBattleResult]
|
||||||
|
cp $1
|
||||||
|
ld de, YouWinText
|
||||||
|
jr c, .placeWinOrLoseString
|
||||||
|
ld de, YouLoseText
|
||||||
|
jr z, .placeWinOrLoseString
|
||||||
|
ld de, DrawText
|
||||||
|
.placeWinOrLoseString
|
||||||
|
hlCoord 6, 8
|
||||||
|
call PlaceString
|
||||||
|
ld c, $c8
|
||||||
|
call DelayFrames
|
||||||
|
jr .evolution
|
||||||
|
.notLinkBattle
|
||||||
|
ld a, [wBattleResult]
|
||||||
|
and a
|
||||||
|
jr nz, .resetVariables
|
||||||
|
ld hl, wTotalPayDayMoney
|
||||||
|
ld a, [hli]
|
||||||
|
or [hl]
|
||||||
|
inc hl
|
||||||
|
or [hl]
|
||||||
|
jr z, .evolution ; if pay day money is 0, jump
|
||||||
|
ld de, wPlayerMoney + 2
|
||||||
|
ld c, $3
|
||||||
|
predef AddBCDPredef
|
||||||
|
ld hl, PickUpPayDayMoneyText
|
||||||
|
call PrintText
|
||||||
|
.evolution
|
||||||
|
xor a
|
||||||
|
ld [wccd4], a
|
||||||
|
predef EvolutionAfterBattle
|
||||||
|
.resetVariables
|
||||||
|
xor a
|
||||||
|
ld [wLowHealthAlarm], a ;disable low health alarm
|
||||||
|
ld [wc02a], a
|
||||||
|
ld [W_ISINBATTLE], a
|
||||||
|
ld [W_BATTLETYPE], a
|
||||||
|
ld [W_MOVEMISSED], a
|
||||||
|
ld [W_CUROPPONENT], a
|
||||||
|
ld [wd11f], a
|
||||||
|
ld [wNumRunAttempts], a
|
||||||
|
ld [wEscapedFromBattle], a
|
||||||
|
ld hl, wcc2b
|
||||||
|
ld [hli], a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
ld [wListScrollOffset], a
|
||||||
|
ld hl, wPlayerStatsToDouble
|
||||||
|
ld b, $18
|
||||||
|
.loop
|
||||||
|
ld [hli], a
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ld hl, wd72c
|
||||||
|
set 0, [hl]
|
||||||
|
call WaitForSoundToFinish
|
||||||
|
call GBPalWhiteOut
|
||||||
|
ld a, $ff
|
||||||
|
ld [wDestinationWarpID], 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 "@"
|
||||||
24
engine/battle/get_trainer_name.asm
Normal file
24
engine/battle/get_trainer_name.asm
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
GetTrainerName_: ; 13a58 (4:7a58)
|
||||||
|
ld hl, W_GRASSRATE
|
||||||
|
ld a, [wLinkState]
|
||||||
|
and a
|
||||||
|
jr nz, .rival
|
||||||
|
ld hl, W_RIVALNAME
|
||||||
|
ld a, [W_TRAINERCLASS]
|
||||||
|
cp SONY1
|
||||||
|
jr z, .rival
|
||||||
|
cp SONY2
|
||||||
|
jr z, .rival
|
||||||
|
cp SONY3
|
||||||
|
jr z, .rival
|
||||||
|
ld [wd0b5], a
|
||||||
|
ld a, TRAINER_NAME
|
||||||
|
ld [wNameListType], a
|
||||||
|
ld a, BANK(TrainerNames)
|
||||||
|
ld [wPredefBank], a
|
||||||
|
call GetName
|
||||||
|
ld hl, wcd6d
|
||||||
|
.rival
|
||||||
|
ld de, W_TRAINERNAME
|
||||||
|
ld bc, $d
|
||||||
|
jp CopyData
|
||||||
34
engine/battle/moveEffects/conversion_effect.asm
Normal file
34
engine/battle/moveEffects/conversion_effect.asm
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
ConversionEffect_: ; 139a3 (4:79a3)
|
||||||
|
ld hl, wEnemyMonType1
|
||||||
|
ld de, wBattleMonType1
|
||||||
|
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 Invulnerable, 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, PlayCurrentMoveAnimation
|
||||||
|
call CallBankF
|
||||||
|
ld hl, ConvertedTypeText
|
||||||
|
jp PrintText
|
||||||
|
|
||||||
|
ConvertedTypeText: ; 139cd (4:79cd)
|
||||||
|
TX_FAR _ConvertedTypeText
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
PrintButItFailedText: ; 139d2 (4:79d2)
|
||||||
|
ld hl, PrintButItFailedText_
|
||||||
|
CallBankF: ; 139d5 (4:79d5)
|
||||||
|
ld b, BANK(PrintButItFailedText_)
|
||||||
|
jp Bankswitch
|
||||||
0
engine/battle/1.asm → engine/battle/moveEffects/drain_hp_effect.asm
Executable file → Normal file
0
engine/battle/1.asm → engine/battle/moveEffects/drain_hp_effect.asm
Executable file → Normal file
76
engine/battle/moveEffects/haze_effect.asm
Normal file
76
engine/battle/moveEffects/haze_effect.asm
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
HazeEffect_: ; 139da (4:79da)
|
||||||
|
ld a, $7
|
||||||
|
ld hl, wPlayerMonAttackMod
|
||||||
|
call ResetStatMods
|
||||||
|
ld hl, wEnemyMonAttackMod
|
||||||
|
call ResetStatMods
|
||||||
|
ld hl, wPlayerMonUnmodifiedAttack
|
||||||
|
ld de, wBattleMonAttack
|
||||||
|
call ResetStats
|
||||||
|
ld hl, wEnemyMonUnmodifiedAttack
|
||||||
|
ld de, wEnemyMonAttack
|
||||||
|
call ResetStats
|
||||||
|
ld hl, wEnemyMonStatus
|
||||||
|
ld de, wEnemySelectedMove
|
||||||
|
ld a, [H_WHOSETURN]
|
||||||
|
and a
|
||||||
|
jr z, .asm_13a09
|
||||||
|
ld hl, wBattleMonStatus
|
||||||
|
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, wccee
|
||||||
|
ld [hli], a
|
||||||
|
ld [hl], a
|
||||||
|
ld hl, W_PLAYERBATTSTATUS1
|
||||||
|
call CureStatuses
|
||||||
|
ld hl, W_ENEMYBATTSTATUS1
|
||||||
|
call CureStatuses
|
||||||
|
ld hl, PlayCurrentMoveAnimation
|
||||||
|
call CallBankF
|
||||||
|
ld hl, StatusChangesEliminatedText
|
||||||
|
jp PrintText
|
||||||
|
|
||||||
|
CureStatuses: ; 13a37 (4:7a37)
|
||||||
|
res Confused, [hl]
|
||||||
|
inc hl ; BATTSTATUS2
|
||||||
|
ld a, [hl]
|
||||||
|
and (1 << UsingRage) | (1 << NeedsToRecharge) | (1 << HasSubstituteUp) | (1 << 3) ; clear all but these from BATTSTATUS2
|
||||||
|
ld [hli], a ; BATTSTATUS3
|
||||||
|
ld a, [hl]
|
||||||
|
and %11110000 | (1 << Transformed) ; clear Bad Poison, Reflect and Light Screen statuses
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
ResetStatMods: ; 13a43 (4:7a43)
|
||||||
|
ld b, $8
|
||||||
|
.loop
|
||||||
|
ld [hli], a
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
ResetStats: ; 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 "@"
|
||||||
68
engine/battle/moveEffects/recoil_effect.asm
Normal file
68
engine/battle/moveEffects/recoil_effect.asm
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
RecoilEffect_: ; 1392c (4:792c)
|
||||||
|
ld a, [H_WHOSETURN]
|
||||||
|
and a
|
||||||
|
ld a, [W_PLAYERMOVENUM]
|
||||||
|
ld hl, wBattleMonMaxHP
|
||||||
|
jr z, .asm_1393d
|
||||||
|
ld a, [W_ENEMYMOVENUM]
|
||||||
|
ld hl, wEnemyMonMaxHP
|
||||||
|
.asm_1393d
|
||||||
|
ld d, a
|
||||||
|
ld a, [W_DAMAGE]
|
||||||
|
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
|
||||||
|
hlCoord 10, 9
|
||||||
|
ld a, [H_WHOSETURN]
|
||||||
|
and a
|
||||||
|
ld a, $1
|
||||||
|
jr z, .asm_13990
|
||||||
|
hlCoord 2, 2
|
||||||
|
xor a
|
||||||
|
.asm_13990
|
||||||
|
ld [wHPBarType], a
|
||||||
|
predef UpdateHPBar2
|
||||||
|
ld hl, HitWithRecoilText
|
||||||
|
jp PrintText
|
||||||
|
HitWithRecoilText: ; 1399e (4:799e)
|
||||||
|
TX_FAR _HitWithRecoilText
|
||||||
|
db "@"
|
||||||
118
engine/battle/wild_encounters.asm
Normal file
118
engine/battle/wild_encounters.asm
Normal file
|
|
@ -0,0 +1,118 @@
|
||||||
|
; try to initiate a wild pokemon encounter
|
||||||
|
; returns success in Z
|
||||||
|
TryDoWildEncounter: ; 13870 (4:7870)
|
||||||
|
ld a, [wNPCMovementScriptPointerTableNum]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
ld a, [wd736]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
callab IsPlayerStandingOnDoorTileOrWarpTile
|
||||||
|
jr nc, .notStandingOnDoorOrWarpTile
|
||||||
|
.CantEncounter
|
||||||
|
ld a, $1
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
.notStandingOnDoorOrWarpTile
|
||||||
|
callab IsPlayerJustOutsideMap
|
||||||
|
jr z, .CantEncounter
|
||||||
|
ld a, [wRepelRemainingSteps]
|
||||||
|
and a
|
||||||
|
jr z, .asm_1389e
|
||||||
|
dec a
|
||||||
|
jr z, .lastRepelStep
|
||||||
|
ld [wRepelRemainingSteps], a
|
||||||
|
.asm_1389e
|
||||||
|
; determine if wild pokémon can appear in the half-block we’re standing in
|
||||||
|
; is the bottom right tile (9,9) of the half-block we're standing in a grass/water tile?
|
||||||
|
hlCoord 9, 9
|
||||||
|
ld c, [hl]
|
||||||
|
ld a, [W_GRASSTILE]
|
||||||
|
cp c
|
||||||
|
ld a, [W_GRASSRATE]
|
||||||
|
jr z, .CanEncounter
|
||||||
|
ld a, $14 ; in all tilesets with a water tile, this is its id
|
||||||
|
cp c
|
||||||
|
ld a, [W_WATERRATE]
|
||||||
|
jr z, .CanEncounter
|
||||||
|
; even if not in grass/water, standing anywhere we can encounter pokémon
|
||||||
|
; so long as the map is “indoor” and has wild pokémon defined.
|
||||||
|
; …as long as it’s not Viridian Forest or Safari Zone.
|
||||||
|
ld a, [W_CURMAP]
|
||||||
|
cp REDS_HOUSE_1F ; is this an indoor map?
|
||||||
|
jr c, .CantEncounter2
|
||||||
|
ld a, [W_CURMAPTILESET]
|
||||||
|
cp FOREST ; Viridian Forest/Safari Zone
|
||||||
|
jr z, .CantEncounter2
|
||||||
|
ld a, [W_GRASSRATE]
|
||||||
|
.CanEncounter
|
||||||
|
; compare encounter chance with a random number to determine if there will be an encounter
|
||||||
|
ld b, a
|
||||||
|
ld a, [hRandomAdd]
|
||||||
|
cp b
|
||||||
|
jr nc, .CantEncounter2
|
||||||
|
ld a, [hRandomSub]
|
||||||
|
ld b, a
|
||||||
|
ld hl, WildMonEncounterSlotChances
|
||||||
|
.determineEncounterSlot
|
||||||
|
ld a, [hli]
|
||||||
|
cp b
|
||||||
|
jr nc, .gotEncounterSlot
|
||||||
|
inc hl
|
||||||
|
jr .determineEncounterSlot
|
||||||
|
.gotEncounterSlot
|
||||||
|
; determine which wild pokémon (grass or water) can appear in the half-block we’re standing in
|
||||||
|
ld c, [hl]
|
||||||
|
ld hl, W_GRASSMONS
|
||||||
|
aCoord 8, 9
|
||||||
|
cp $14 ; is the bottom left tile (8,9) of the half-block we're standing in a water tile?
|
||||||
|
jr nz, .gotWildEncounterType ; else, it's treated as a grass tile by default
|
||||||
|
ld hl, W_WATERMONS
|
||||||
|
; since the bottom right tile of a "left shore" half-block is $14 but the bottom left tile is not,
|
||||||
|
; "left shore" half-blocks (such as the one in the east coast of Cinnabar) load grass encounters.
|
||||||
|
.gotWildEncounterType
|
||||||
|
ld b, $0
|
||||||
|
add hl, bc
|
||||||
|
ld a, [hli]
|
||||||
|
ld [W_CURENEMYLVL], a
|
||||||
|
ld a, [hl]
|
||||||
|
ld [wcf91], a
|
||||||
|
ld [wEnemyMonSpecies2], a
|
||||||
|
ld a, [wRepelRemainingSteps]
|
||||||
|
and a
|
||||||
|
jr z, .willEncounter
|
||||||
|
ld a, [wPartyMon1Level]
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_CURENEMYLVL]
|
||||||
|
cp b
|
||||||
|
jr c, .CantEncounter2 ; repel prevents encounters if the leading party mon's level is higher than the wild mon
|
||||||
|
jr .willEncounter
|
||||||
|
.lastRepelStep
|
||||||
|
ld [wRepelRemainingSteps], a
|
||||||
|
ld a, $d2
|
||||||
|
ld [H_DOWNARROWBLINKCNT2], a
|
||||||
|
call EnableAutoTextBoxDrawing
|
||||||
|
call DisplayTextID
|
||||||
|
.CantEncounter2
|
||||||
|
ld a, $1
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
.willEncounter
|
||||||
|
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
|
||||||
|
|
@ -1,3 +1,67 @@
|
||||||
|
DrawHP: ; 128ef (4:68ef)
|
||||||
|
; Draws the HP bar in the stats screen
|
||||||
|
call GetPredefRegisters
|
||||||
|
ld a, $1
|
||||||
|
jr DrawHP_
|
||||||
|
|
||||||
|
DrawHP2: ; 128f6 (4:68f6)
|
||||||
|
; Draws the HP bar in the party screen
|
||||||
|
call GetPredefRegisters
|
||||||
|
ld a, $2
|
||||||
|
|
||||||
|
DrawHP_: ; 128fb (4:68fb)
|
||||||
|
ld [wHPBarType], a
|
||||||
|
push hl
|
||||||
|
ld a, [wLoadedMonHP]
|
||||||
|
ld b, a
|
||||||
|
ld a, [wLoadedMonHP + 1]
|
||||||
|
ld c, a
|
||||||
|
or b
|
||||||
|
jr nz, .nonzeroHP
|
||||||
|
xor a
|
||||||
|
ld c, a
|
||||||
|
ld e, a
|
||||||
|
ld a, $6
|
||||||
|
ld d, a
|
||||||
|
jp .drawHPBarAndPrintFraction
|
||||||
|
.nonzeroHP
|
||||||
|
ld a, [wLoadedMonMaxHP]
|
||||||
|
ld d, a
|
||||||
|
ld a, [wLoadedMonMaxHP + 1]
|
||||||
|
ld e, a
|
||||||
|
predef HPBarLength
|
||||||
|
ld a, $6
|
||||||
|
ld d, a
|
||||||
|
ld c, a
|
||||||
|
.drawHPBarAndPrintFraction
|
||||||
|
pop hl
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
push hl
|
||||||
|
call DrawHPBar
|
||||||
|
pop hl
|
||||||
|
ld a, [hFlags_0xFFF6]
|
||||||
|
bit 0, a
|
||||||
|
jr z, .printFractionBelowBar
|
||||||
|
ld bc, $9 ; right of bar
|
||||||
|
jr .printFraction
|
||||||
|
.printFractionBelowBar
|
||||||
|
ld bc, SCREEN_WIDTH + 1 ; below bar
|
||||||
|
.printFraction
|
||||||
|
add hl, bc
|
||||||
|
ld de, wLoadedMonHP
|
||||||
|
ld bc, $203
|
||||||
|
call PrintNumber
|
||||||
|
ld a, "/"
|
||||||
|
ld [hli], a
|
||||||
|
ld de, wLoadedMonMaxHP
|
||||||
|
ld bc, $203
|
||||||
|
call PrintNumber
|
||||||
|
pop hl
|
||||||
|
pop de
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
; Predef 0x37
|
; Predef 0x37
|
||||||
StatusScreen: ; 12953 (4:6953)
|
StatusScreen: ; 12953 (4:6953)
|
||||||
call LoadMonData
|
call LoadMonData
|
||||||
|
|
|
||||||
16
engine/overworld/is_player_just_outside_map.asm
Normal file
16
engine/overworld/is_player_just_outside_map.asm
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
; returns whether the player is one tile outside the map in Z
|
||||||
|
IsPlayerJustOutsideMap: ; 128d8 (4:68d8)
|
||||||
|
ld a, [W_YCOORD]
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_CURMAPHEIGHT]
|
||||||
|
call .compareCoordWithMapDimension
|
||||||
|
ret z
|
||||||
|
ld a, [W_XCOORD]
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_CURMAPWIDTH]
|
||||||
|
.compareCoordWithMapDimension
|
||||||
|
add a
|
||||||
|
cp b
|
||||||
|
ret z
|
||||||
|
inc b
|
||||||
|
ret
|
||||||
11
main.asm
11
main.asm
|
|
@ -1907,7 +1907,7 @@ FieldMoveDisplayData: ; 7823 (1:7823)
|
||||||
db $ff ; list terminator
|
db $ff ; list terminator
|
||||||
|
|
||||||
|
|
||||||
INCLUDE "engine/battle/1.asm"
|
INCLUDE "engine/battle/moveEffects/drain_hp_effect.asm"
|
||||||
|
|
||||||
INCLUDE "engine/menu/players_pc.asm"
|
INCLUDE "engine/menu/players_pc.asm"
|
||||||
|
|
||||||
|
|
@ -4755,7 +4755,7 @@ PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp"
|
||||||
|
|
||||||
SECTION "Battle (bank 4)", ROMX, BANK[$4]
|
SECTION "Battle (bank 4)", ROMX, BANK[$4]
|
||||||
|
|
||||||
INCLUDE "engine/battle/4.asm"
|
INCLUDE "engine/overworld/is_player_just_outside_map.asm"
|
||||||
INCLUDE "engine/menu/status_screen.asm"
|
INCLUDE "engine/menu/status_screen.asm"
|
||||||
INCLUDE "engine/menu/party_menu.asm"
|
INCLUDE "engine/menu/party_menu.asm"
|
||||||
|
|
||||||
|
|
@ -4766,7 +4766,12 @@ ShrinkPic2:: INCBIN "pic/trainer/shrink2.pic"
|
||||||
INCLUDE "engine/turn_sprite.asm"
|
INCLUDE "engine/turn_sprite.asm"
|
||||||
INCLUDE "engine/menu/start_sub_menus.asm"
|
INCLUDE "engine/menu/start_sub_menus.asm"
|
||||||
INCLUDE "engine/items/tms.asm"
|
INCLUDE "engine/items/tms.asm"
|
||||||
INCLUDE "engine/battle/4_2.asm"
|
INCLUDE "engine/battle/end_of_battle.asm"
|
||||||
|
INCLUDE "engine/battle/wild_encounters.asm"
|
||||||
|
INCLUDE "engine/battle/moveEffects/recoil_effect.asm"
|
||||||
|
INCLUDE "engine/battle/moveEffects/conversion_effect.asm"
|
||||||
|
INCLUDE "engine/battle/moveEffects/haze_effect.asm"
|
||||||
|
INCLUDE "engine/battle/get_trainer_name.asm"
|
||||||
INCLUDE "engine/random.asm"
|
INCLUDE "engine/random.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue