mirror of
https://github.com/pret/pokeyellow.git
synced 2026-09-26 05:21:15 -04:00
273 lines
5.2 KiB
NASM
273 lines
5.2 KiB
NASM
InitBattle::
|
|
ld a, [wCurOpponent]
|
|
and a
|
|
jr z, DetermineWildOpponent
|
|
|
|
InitOpponent:
|
|
ld a, [wCurOpponent]
|
|
ld [wCurPartySpecies], a
|
|
ld [wEnemyMonSpecies2], a
|
|
jr InitBattleCommon
|
|
|
|
DetermineWildOpponent:
|
|
ld a, [wStatusFlags6]
|
|
bit BIT_DEBUG_MODE, a
|
|
jr z, .notDebugMode
|
|
ldh a, [hJoyHeld]
|
|
bit B_PAD_B, a ; disable wild encounters
|
|
ret nz
|
|
.notDebugMode
|
|
ld a, [wNumberOfNoRandomBattleStepsLeft]
|
|
and a
|
|
ret nz
|
|
callfar TryDoWildEncounter
|
|
ret nz
|
|
InitBattleCommon:
|
|
ld a, [wMapPalOffset]
|
|
push af
|
|
ld hl, wLetterPrintingDelayFlags
|
|
ld a, [hl]
|
|
push af
|
|
res BIT_TEXT_DELAY, [hl] ; no delay
|
|
call InitBattleVariables
|
|
ld a, [wEnemyMonSpecies2]
|
|
sub OPP_ID_OFFSET
|
|
jp c, InitWildBattle
|
|
ld [wTrainerClass], a
|
|
call GetTrainerInformation
|
|
callfar ReadTrainer
|
|
callfar DoBattleTransitionAndInitBattleVariables
|
|
call _LoadTrainerPic
|
|
xor a
|
|
ld [wEnemyMonSpecies2], a
|
|
ldh [hStartTileID], a
|
|
dec a
|
|
ld [wAICount], a
|
|
hlcoord 12, 0
|
|
predef CopyUncompressedPicToTilemap
|
|
ld a, $ff
|
|
ld [wEnemyMonPartyPos], a
|
|
ld a, TRAINER_BATTLE
|
|
ld [wIsInBattle], a
|
|
|
|
; Is this a major story battle?
|
|
ld a, [wLoneAttackNo]
|
|
and a
|
|
jp z, _InitBattleCommon
|
|
farcall_ModifyPikachuHappiness PIKAHAPPY_GYMLEADER ; useless since already in bank3d
|
|
jp _InitBattleCommon
|
|
|
|
InitWildBattle:
|
|
ld a, WILD_BATTLE
|
|
ld [wIsInBattle], a
|
|
callfar LoadEnemyMonData
|
|
callfar DoBattleTransitionAndInitBattleVariables
|
|
ld a, [wCurOpponent]
|
|
cp RESTLESS_SOUL
|
|
jr z, .isGhost
|
|
callfar IsGhostBattle
|
|
jr nz, .isNoGhost
|
|
.isGhost
|
|
ld hl, wMonHSpriteDim
|
|
ld a, $66
|
|
ld [hli], a ; write sprite dimensions
|
|
ld bc, GhostPic
|
|
ld a, c
|
|
ld [hli], a ; write front sprite pointer
|
|
ld [hl], b
|
|
ld hl, wEnemyMonNick ; set name to "GHOST"
|
|
ld_hli_a_string "GHOST@"
|
|
ld a, [wCurPartySpecies]
|
|
push af
|
|
ld a, MON_GHOST
|
|
ld [wCurPartySpecies], a
|
|
ld de, vFrontPic
|
|
call LoadMonFrontSprite ; load ghost sprite
|
|
pop af
|
|
ld [wCurPartySpecies], a
|
|
jr .spriteLoaded
|
|
.isNoGhost
|
|
ld de, vFrontPic
|
|
call LoadMonFrontSprite ; load mon sprite
|
|
.spriteLoaded
|
|
xor a
|
|
ld [wTrainerClass], a
|
|
ldh [hStartTileID], a
|
|
hlcoord 12, 0
|
|
predef CopyUncompressedPicToTilemap
|
|
|
|
; common code that executes after init battle code specific to trainer or wild battles
|
|
_InitBattleCommon:
|
|
ld b, SET_PAL_BATTLE_BLACK
|
|
call RunPaletteCommand
|
|
callfar SlidePlayerAndEnemySilhouettesOnScreen
|
|
xor a
|
|
ldh [hAutoBGTransferEnabled], a
|
|
ld hl, .emptyString
|
|
call PrintText
|
|
call SaveScreenTilesToBuffer1
|
|
call ClearScreen
|
|
ld a, HIGH(vBGMap0)
|
|
ldh [hAutoBGTransferDest + 1], a
|
|
ld a, $1
|
|
ldh [hAutoBGTransferEnabled], a
|
|
call Delay3
|
|
ld a, HIGH(vBGMap1)
|
|
ldh [hAutoBGTransferDest + 1], a
|
|
call LoadScreenTilesFromBuffer1
|
|
hlcoord 9, 7
|
|
lb bc, 5, 10
|
|
call ClearScreenArea
|
|
hlcoord 1, 0
|
|
lb bc, 4, 10
|
|
call ClearScreenArea
|
|
call ClearSprites
|
|
ld a, [wIsInBattle]
|
|
dec a ; is it a wild battle?
|
|
ld hl, DrawEnemyHUDAndHPBar
|
|
ld b, BANK(DrawEnemyHUDAndHPBar)
|
|
call z, Bankswitch ; draw enemy HUD and HP bar if it's a wild battle
|
|
callfar StartBattle
|
|
callfar EndOfBattle
|
|
pop af
|
|
ld [wLetterPrintingDelayFlags], a
|
|
pop af
|
|
ld [wMapPalOffset], a
|
|
ld a, [wSavedTileAnimations]
|
|
ldh [hTileAnimations], a
|
|
scf
|
|
ret
|
|
.emptyString
|
|
db "@"
|
|
|
|
_LoadTrainerPic:
|
|
ld a, [wTrainerPicPointer]
|
|
ld e, a
|
|
ld a, [wTrainerPicPointer + 1]
|
|
ld d, a ; de contains pointer to trainer pic
|
|
ld a, [wLinkState]
|
|
and a
|
|
ld a, BANK("Trainer Pics")
|
|
jr z, .loadSprite
|
|
ld a, BANK(RedPicFront)
|
|
.loadSprite
|
|
call UncompressSpriteFromDE
|
|
ld de, vFrontPic
|
|
ld a, $77
|
|
ld c, a
|
|
jp LoadUncompressedSpriteData
|
|
|
|
LoadMonBackPic:
|
|
; Assumes the monster's attributes have
|
|
; been loaded with GetMonHeader.
|
|
ld a, [wBattleMonSpecies2]
|
|
ld [wCurPartySpecies], a
|
|
hlcoord 1, 5
|
|
lb bc, 7, 8
|
|
call ClearScreenArea
|
|
ld hl, wMonHBackSprite - wMonHeader
|
|
call UncompressMonSprite
|
|
predef ScaleSpriteByTwo
|
|
ld de, vBackPic
|
|
call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite
|
|
ld hl, vSprites
|
|
ld de, vBackPic
|
|
ld c, (2 * SPRITEBUFFERSIZE) / 16 ; count of 16-byte chunks to be copied
|
|
ldh a, [hLoadedROMBank]
|
|
ld b, a
|
|
jp CopyVideoData
|
|
|
|
; animates the mon "growing" out of the pokeball
|
|
AnimateSendingOutMon:
|
|
ld a, [wPredefHL]
|
|
ld h, a
|
|
ld a, [wPredefHL + 1]
|
|
ld l, a
|
|
ldh a, [hStartTileID]
|
|
ldh [hBaseTileID], a
|
|
ld b, $4c
|
|
ld a, [wIsInBattle]
|
|
and a
|
|
jr z, .notInBattle
|
|
add b
|
|
ld [hl], a
|
|
call Delay3
|
|
ld bc, -(SCREEN_WIDTH * 2 + 1)
|
|
add hl, bc
|
|
ld a, 1
|
|
ld [wDownscaledMonSize], a
|
|
lb bc, 3, 3
|
|
predef CopyDownscaledMonTiles
|
|
ld c, 4
|
|
call DelayFrames
|
|
ld bc, -(SCREEN_WIDTH * 2 + 1)
|
|
add hl, bc
|
|
xor a
|
|
ld [wDownscaledMonSize], a
|
|
lb bc, 5, 5
|
|
predef CopyDownscaledMonTiles
|
|
ld c, 5
|
|
call DelayFrames
|
|
ld bc, -(SCREEN_WIDTH * 2 + 1)
|
|
jr .next
|
|
.notInBattle
|
|
ld bc, -(SCREEN_WIDTH * 6 + 3)
|
|
.next
|
|
add hl, bc
|
|
ldh a, [hBaseTileID]
|
|
add $31
|
|
jr CopyUncompressedPicToHL
|
|
|
|
CopyUncompressedPicToTilemap:
|
|
ld a, [wPredefHL]
|
|
ld h, a
|
|
ld a, [wPredefHL + 1]
|
|
ld l, a
|
|
ldh a, [hStartTileID]
|
|
CopyUncompressedPicToHL::
|
|
lb bc, 7, 7
|
|
ld de, SCREEN_WIDTH
|
|
push af
|
|
ld a, [wSpriteFlipped]
|
|
and a
|
|
jr nz, .flipped
|
|
pop af
|
|
.loop
|
|
push bc
|
|
push hl
|
|
.innerLoop
|
|
ld [hl], a
|
|
add hl, de
|
|
inc a
|
|
dec c
|
|
jr nz, .innerLoop
|
|
pop hl
|
|
inc hl
|
|
pop bc
|
|
dec b
|
|
jr nz, .loop
|
|
ret
|
|
|
|
.flipped
|
|
push bc
|
|
ld b, 0
|
|
dec c
|
|
add hl, bc
|
|
pop bc
|
|
pop af
|
|
.flippedLoop
|
|
push bc
|
|
push hl
|
|
.flippedInnerLoop
|
|
ld [hl], a
|
|
add hl, de
|
|
inc a
|
|
dec c
|
|
jr nz, .flippedInnerLoop
|
|
pop hl
|
|
dec hl
|
|
pop bc
|
|
dec b
|
|
jr nz, .flippedLoop
|
|
ret
|