Merge pull request #134 from YamaArashi/master

sync engine code with pokeyellow
This commit is contained in:
YamaArashi 2016-06-12 00:54:14 -07:00 committed by GitHub
commit 2b2c6fefd3
50 changed files with 599 additions and 503 deletions

View file

@ -18,7 +18,7 @@ HallOfFamePC:
call FillFourRowsWithBlack call FillFourRowsWithBlack
coord hl, 0, 14 coord hl, 0, 14
call FillFourRowsWithBlack call FillFourRowsWithBlack
ld a, $c0 ld a, %11000000
ld [rBGP], a ld [rBGP], a
call EnableLCD call EnableLCD
ld a, $ff ld a, $ff
@ -36,13 +36,13 @@ HallOfFamePC:
FadeInCreditsText: FadeInCreditsText:
ld hl, HoFGBPalettes ld hl, HoFGBPalettes
ld b, 4 ld b, 4
.asm_740bf .loop
ld a, [hli] ld a, [hli]
ld [rBGP], a ld [rBGP], a
ld c, 5 ld c, 5
call DelayFrames call DelayFrames
dec b dec b
jr nz, .asm_740bf jr nz, .loop
ret ret
DisplayCreditsMon: DisplayCreditsMon:

View file

@ -383,29 +383,29 @@ MoveAnimation:
call SetAnimationPalette call SetAnimationPalette
ld a,[wAnimationID] ld a,[wAnimationID]
and a and a
jr z,.AnimationFinished jr z, .animationFinished
; if throwing a Poké Ball, skip the regular animation code ; if throwing a Poké Ball, skip the regular animation code
cp a,TOSS_ANIM cp a,TOSS_ANIM
jr nz,.MoveAnimation jr nz, .moveAnimation
ld de,.AnimationFinished ld de, .animationFinished
push de push de
jp TossBallAnimation jp TossBallAnimation
.MoveAnimation .moveAnimation
; check if battle animations are disabled in the options ; check if battle animations are disabled in the options
ld a,[wOptions] ld a,[wOptions]
bit 7,a bit 7,a
jr nz,.AnimationsDisabled jr nz, .animationsDisabled
call ShareMoveAnimations call ShareMoveAnimations
call PlayAnimation call PlayAnimation
jr .next4 jr .next4
.AnimationsDisabled .animationsDisabled
ld c,30 ld c,30
call DelayFrames call DelayFrames
.next4 .next4
call PlayApplyingAttackAnimation ; shake the screen or 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
ld [wSubAnimSubEntryAddr],a ld [wSubAnimSubEntryAddr],a
@ -431,13 +431,13 @@ ShareMoveAnimations:
cp a,AMNESIA cp a,AMNESIA
ld b,CONF_ANIM ld b,CONF_ANIM
jr z,.Replace jr z, .replaceAnim
cp a,REST cp a,REST
ld b,SLP_ANIM ld b,SLP_ANIM
ret nz ret nz
.Replace .replaceAnim
ld a,b ld a,b
ld [wAnimationID],a ld [wAnimationID],a
ret ret
@ -1845,13 +1845,13 @@ AnimationMinimizeMon:
ld hl, wTempPic ld hl, wTempPic
push hl push hl
xor a xor a
ld bc, $310 ld bc, 7 * 7 * $10
call FillMemory call FillMemory
pop hl pop hl
ld de, $194 ld de, $194
add hl, de add hl, de
ld de, MinimizedMonSprite ld de, MinimizedMonSprite
ld c, $5 ld c, MinimizedMonSpriteEnd - MinimizedMonSprite
.loop .loop
ld a, [de] ld a, [de]
ld [hli], a ld [hli], a
@ -1865,6 +1865,7 @@ AnimationMinimizeMon:
MinimizedMonSprite: MinimizedMonSprite:
INCBIN "gfx/minimized_mon_sprite.1bpp" INCBIN "gfx/minimized_mon_sprite.1bpp"
MinimizedMonSpriteEnd:
AnimationSlideMonDownAndHide: AnimationSlideMonDownAndHide:
; Slides the mon's sprite down and disappears. Used in Acid Armor. ; Slides the mon's sprite down and disappears. Used in Acid Armor.
@ -2308,7 +2309,6 @@ GetMoveSoundB:
ld b, a ld b, a
ret ret
; get the sound of the (move id - 1) in a
GetMoveSound: GetMoveSound:
ld hl,MoveSoundTable ld hl,MoveSoundTable
ld e,a ld e,a
@ -2363,6 +2363,7 @@ IsCryMove:
ret ret
MoveSoundTable: MoveSoundTable:
; ID, pitch mod, tempo mod
db SFX_POUND, $00,$80 ; POUND db SFX_POUND, $00,$80 ; POUND
db SFX_BATTLE_0C, $10,$80 ; KARATE_CHOP db SFX_BATTLE_0C, $10,$80 ; KARATE_CHOP
db SFX_DOUBLESLAP, $00,$80 ; DOUBLESLAP db SFX_DOUBLESLAP, $00,$80 ; DOUBLESLAP

View file

@ -443,7 +443,7 @@ MainInBattleLoop:
; the link battle enemy has switched mons ; the link battle enemy has switched mons
ld a, [wPlayerBattleStatus1] ld a, [wPlayerBattleStatus1]
bit UsingTrappingMove, a ; check if using multi-turn move like Wrap bit UsingTrappingMove, a ; check if using multi-turn move like Wrap
jr z, .asm_3c2dd jr z, .specialMoveNotUsed
ld a, [wPlayerMoveListIndex] ld a, [wPlayerMoveListIndex]
ld hl, wBattleMonMoves ld hl, wBattleMonMoves
ld c, a ld c, a
@ -452,9 +452,9 @@ MainInBattleLoop:
ld a, [hl] ld a, [hl]
cp METRONOME ; a MIRROR MOVE check is missing, might lead to a desync in link battles cp METRONOME ; a MIRROR MOVE check is missing, might lead to a desync in link battles
; when combined with multi-turn moves ; when combined with multi-turn moves
jr nz, .asm_3c2dd jr nz, .specialMoveNotUsed
ld [wPlayerSelectedMove], a ld [wPlayerSelectedMove], a
.asm_3c2dd .specialMoveNotUsed
callab SwitchEnemyMon callab SwitchEnemyMon
.noLinkBattle .noLinkBattle
ld a, [wPlayerSelectedMove] ld a, [wPlayerSelectedMove]
@ -665,7 +665,7 @@ HandlePoisonBurnLeechSeed_DecreaseOwnHP:
and a and a
jr z, .playersTurn jr z, .playersTurn
ld hl, wEnemyBattleStatus3 ld hl, wEnemyBattleStatus3
ld de, wEnemyToxcCounter ld de, wEnemyToxicCounter
.playersTurn .playersTurn
bit BadlyPoisoned, [hl] bit BadlyPoisoned, [hl]
jr z, .noToxic jr z, .noToxic
@ -884,6 +884,8 @@ FaintEnemyPokemon:
ld a, MUSIC_DEFEATED_WILD_MON ld a, MUSIC_DEFEATED_WILD_MON
call PlayBattleVictoryMusic call PlayBattleVictoryMusic
.sfxplayed .sfxplayed
; bug: win sfx is played for wild battles before checking for player mon HP
; this can lead to odd scenarios where both player and enemy faint, as the win sfx plays yet the player never won the battle
ld hl, wBattleMonHP ld hl, wBattleMonHP
ld a, [hli] ld a, [hli]
or [hl] or [hl]
@ -1285,7 +1287,7 @@ SlideDownFaintedMonPic:
call CopyData call CopyData
pop de pop de
pop hl pop hl
ld bc, -20 ld bc, -SCREEN_WIDTH
add hl, bc add hl, bc
push hl push hl
ld h, d ld h, d
@ -1297,7 +1299,7 @@ SlideDownFaintedMonPic:
pop bc pop bc
dec b dec b
jr nz, .rowLoop jr nz, .rowLoop
ld bc, 20 ld bc, SCREEN_WIDTH
add hl, bc add hl, bc
ld de, SevenSpacesText ld de, SevenSpacesText
call PlaceString call PlaceString
@ -1925,9 +1927,9 @@ DrawPlayerHUDAndHPBar:
ld de, wLoadedMonStatus ld de, wLoadedMonStatus
call PrintStatusConditionNotFainted call PrintStatusConditionNotFainted
pop hl pop hl
jr nz, .asm_3cdae jr nz, .doNotPrintLevel
call PrintLevel call PrintLevel
.asm_3cdae .doNotPrintLevel
ld a, [wLoadedMonSpecies] ld a, [wLoadedMonSpecies]
ld [wcf91], a ld [wcf91], a
coord hl, 10, 9 coord hl, 10, 9
@ -1939,14 +1941,14 @@ DrawPlayerHUDAndHPBar:
ld hl, wBattleMonHP ld hl, wBattleMonHP
ld a, [hli] ld a, [hli]
or [hl] or [hl]
jr z, .asm_3cdd9 jr z, .fainted
ld a, [wLowHealthAlarmDisabled] ld a, [wLowHealthAlarmDisabled]
and a ; has the alarm been disabled because the player has already won? and a ; has the alarm been disabled because the player has already won?
ret nz ; if so, return ret nz ; if so, return
ld a, [wPlayerHPBarColor] ld a, [wPlayerHPBarColor]
cp HP_BAR_RED cp HP_BAR_RED
jr z, .asm_3cde6 jr z, .setLowHealthAlarm
.asm_3cdd9 .fainted
ld hl, wLowHealthAlarm ld hl, wLowHealthAlarm
bit 7, [hl] ;low health alarm enabled? bit 7, [hl] ;low health alarm enabled?
ld [hl], $0 ld [hl], $0
@ -1954,7 +1956,7 @@ DrawPlayerHUDAndHPBar:
xor a xor a
ld [wChannelSoundIDs + CH4], a ld [wChannelSoundIDs + CH4], a
ret ret
.asm_3cde6 .setLowHealthAlarm
ld hl, wLowHealthAlarm ld hl, wLowHealthAlarm
set 7, [hl] ;enable low health alarm set 7, [hl] ;enable low health alarm
ret ret
@ -2572,9 +2574,10 @@ MoveSelectionMenu:
ld hl, wBattleMonMoves ld hl, wBattleMonMoves
call .loadmoves call .loadmoves
coord hl, 4, 12 coord hl, 4, 12
ld b, $4 ld b, 4
ld c, $e ld c, 14
di di ; out of pure coincidence, it is possible for vblank to occur between the di and ei
; so it is necessary to put the di ei block to not cause tearing
call TextBoxBorder call TextBoxBorder
coord hl, 4, 12 coord hl, 4, 12
ld [hl], $7a ld [hl], $7a
@ -2590,8 +2593,8 @@ MoveSelectionMenu:
ld hl, wEnemyMonMoves ld hl, wEnemyMonMoves
call .loadmoves call .loadmoves
coord hl, 0, 7 coord hl, 0, 7
ld b, $4 ld b, 4
ld c, $e ld c, 14
call TextBoxBorder call TextBoxBorder
coord hl, 2, 8 coord hl, 2, 8
call .writemoves call .writemoves
@ -2605,8 +2608,8 @@ MoveSelectionMenu:
call AddNTimes call AddNTimes
call .loadmoves call .loadmoves
coord hl, 4, 7 coord hl, 4, 7
ld b, $4 ld b, 4
ld c, $e ld c, 14
call TextBoxBorder call TextBoxBorder
coord hl, 6, 8 coord hl, 6, 8
call .writemoves call .writemoves
@ -2688,9 +2691,9 @@ SelectMenuItem:
ld hl, hFlags_0xFFF6 ld hl, hFlags_0xFFF6
res 1, [hl] res 1, [hl]
bit 6, a bit 6, a
jp nz, CursorUp ; up jp nz, SelectMenuItem_CursorUp ; up
bit 7, a bit 7, a
jp nz, CursorDown ; down jp nz, SelectMenuItem_CursorDown ; down
bit 2, a bit 2, a
jp nz, SwapMovesInMenu ; select jp nz, SwapMovesInMenu ; select
bit 1, a ; B, but was it reset above? bit 1, a ; B, but was it reset above?
@ -2703,10 +2706,10 @@ SelectMenuItem:
ld b, a ld b, a
ld a, [wMoveMenuType] ld a, [wMoveMenuType]
dec a ; if not mimic dec a ; if not mimic
jr nz, .nob jr nz, .notB
pop af pop af
ret ret
.nob .notB
dec a dec a
ld a, b ld a, b
ld [wPlayerMoveListIndex], a ld [wPlayerMoveListIndex], a
@ -2723,7 +2726,7 @@ SelectMenuItem:
add hl, bc add hl, bc
ld a, [hl] ld a, [hl]
and $3f and $3f
jr z, .nopp jr z, .noPP
ld a, [wPlayerDisabledMove] ld a, [wPlayerDisabledMove]
swap a swap a
and $f and $f
@ -2746,7 +2749,7 @@ SelectMenuItem:
.disabled .disabled
ld hl, MoveDisabledText ld hl, MoveDisabledText
jr .print jr .print
.nopp .noPP
ld hl, MoveNoPPText ld hl, MoveNoPPText
.print .print
call PrintText call PrintText
@ -2764,7 +2767,7 @@ MoveDisabledText:
WhichTechniqueString: WhichTechniqueString:
db "WHICH TECHNIQUE?@" db "WHICH TECHNIQUE?@"
CursorUp: SelectMenuItem_CursorUp:
ld a, [wCurrentMenuItem] ld a, [wCurrentMenuItem]
and a and a
jp nz, SelectMenuItem jp nz, SelectMenuItem
@ -2774,7 +2777,7 @@ CursorUp:
ld [wCurrentMenuItem], a ld [wCurrentMenuItem], a
jp SelectMenuItem jp SelectMenuItem
CursorDown: SelectMenuItem_CursorDown:
ld a, [wCurrentMenuItem] ld a, [wCurrentMenuItem]
ld b, a ld b, a
ld a, [wNumMovesMinusOne] ld a, [wNumMovesMinusOne]
@ -2794,7 +2797,7 @@ AnyMoveToSelect:
ld a, [wPlayerDisabledMove] ld a, [wPlayerDisabledMove]
and a and a
ld hl, wBattleMonPP ld hl, wBattleMonPP
jr nz, .asm_3d40e jr nz, .handleDisabledMove
ld a, [hli] ld a, [hli]
or [hl] or [hl]
inc hl inc hl
@ -2803,26 +2806,26 @@ AnyMoveToSelect:
or [hl] or [hl]
and $3f and $3f
ret nz ret nz
jr .asm_3d423 jr .noMovesLeft
.asm_3d40e .handleDisabledMove
swap a swap a
and $f and $f ; get disabled move
ld b, a ld b, a
ld d, $5 ld d, NUM_MOVES + 1
xor a xor a
.asm_3d416 .handleDisabledMovePPLoop
dec d dec d
jr z, .asm_3d421 jr z, .allMovesChecked
ld c, [hl] ld c, [hl] ; get move PP
inc hl inc hl
dec b dec b ; is this the disabled move?
jr z, .asm_3d416 jr z, .handleDisabledMovePPLoop ; if so, ignore its PP value
or c or c
jr .asm_3d416 jr .handleDisabledMovePPLoop
.asm_3d421 .allMovesChecked
and a and a ; any PP left?
ret nz ret nz ; return if a move has PP left
.asm_3d423 .noMovesLeft
ld hl, NoMovesLeftText ld hl, NoMovesLeftText
call PrintText call PrintText
ld c, 60 ld c, 60
@ -2914,8 +2917,8 @@ PrintMenuItem:
xor a xor a
ld [H_AUTOBGTRANSFERENABLED], a ld [H_AUTOBGTRANSFERENABLED], a
coord hl, 0, 8 coord hl, 0, 8
ld b, $3 ld b, 3
ld c, $9 ld c, 9
call TextBoxBorder call TextBoxBorder
ld a, [wPlayerDisabledMove] ld a, [wPlayerDisabledMove]
and a and a
@ -2997,7 +3000,7 @@ SelectEnemyMove:
call LoadScreenTilesFromBuffer1 call LoadScreenTilesFromBuffer1
ld a, [wSerialExchangeNybbleReceiveData] ld a, [wSerialExchangeNybbleReceiveData]
cp $e cp $e
jp z, .asm_3d601 jp z, .linkedOpponentUsedStruggle
cp $d cp $d
jr z, .unableToSelectMove jr z, .unableToSelectMove
cp $4 cp $4
@ -3075,7 +3078,7 @@ SelectEnemyMove:
.done .done
ld [wEnemySelectedMove], a ld [wEnemySelectedMove], a
ret ret
.asm_3d601 .linkedOpponentUsedStruggle
ld a, STRUGGLE ld a, STRUGGLE
jr .done jr .done
@ -3205,7 +3208,7 @@ PlayerCalcMoveDamage:
call RandomizeDamage call RandomizeDamage
.moveHitTest .moveHitTest
call MoveHitTest call MoveHitTest
handleIfPlayerMoveMissed handleIfPlayerMoveMissed:
ld a,[wMoveMissed] ld a,[wMoveMissed]
and a and a
jr z,getPlayerAnimationType jr z,getPlayerAnimationType
@ -3213,13 +3216,13 @@ handleIfPlayerMoveMissed
sub a,EXPLODE_EFFECT sub a,EXPLODE_EFFECT
jr z,playPlayerMoveAnimation ; don't play any animation if the move missed, unless it was EXPLODE_EFFECT jr z,playPlayerMoveAnimation ; don't play any animation if the move missed, unless it was EXPLODE_EFFECT
jr playerCheckIfFlyOrChargeEffect jr playerCheckIfFlyOrChargeEffect
getPlayerAnimationType getPlayerAnimationType:
ld a,[wPlayerMoveEffect] ld a,[wPlayerMoveEffect]
and a and a
ld a,4 ; move has no effect other than dealing damage ld a,4 ; move has no effect other than dealing damage
jr z,playPlayerMoveAnimation jr z,playPlayerMoveAnimation
ld a,5 ; move has effect ld a,5 ; move has effect
playPlayerMoveAnimation playPlayerMoveAnimation:
push af push af
ld a,[wPlayerBattleStatus2] ld a,[wPlayerBattleStatus2]
bit HasSubstituteUp,a bit HasSubstituteUp,a
@ -3238,7 +3241,7 @@ playPlayerMoveAnimation
ld b,BANK(ReshowSubstituteAnim) ld b,BANK(ReshowSubstituteAnim)
call nz,Bankswitch call nz,Bankswitch
jr MirrorMoveCheck jr MirrorMoveCheck
playerCheckIfFlyOrChargeEffect playerCheckIfFlyOrChargeEffect:
ld c,30 ld c,30
call DelayFrames call DelayFrames
ld a,[wPlayerMoveEffect] ld a,[wPlayerMoveEffect]
@ -3252,7 +3255,7 @@ playerCheckIfFlyOrChargeEffect
ld [wAnimationType],a ld [wAnimationType],a
ld a,STATUS_AFFECTED_ANIM ld a,STATUS_AFFECTED_ANIM
call PlayMoveAnimation call PlayMoveAnimation
MirrorMoveCheck MirrorMoveCheck:
ld a,[wPlayerMoveEffect] ld a,[wPlayerMoveEffect]
cp a,MIRROR_MOVE_EFFECT cp a,MIRROR_MOVE_EFFECT
jr nz,.metronomeCheck jr nz,.metronomeCheck
@ -3785,10 +3788,10 @@ MonName1Text:
and a and a
ld a, [wPlayerMoveNum] ld a, [wPlayerMoveNum]
ld hl, wPlayerUsedMove ld hl, wPlayerUsedMove
jr z, .asm_3db11 jr z, .playerTurn
ld a, [wEnemyMoveNum] ld a, [wEnemyMoveNum]
ld hl, wEnemyUsedMove ld hl, wEnemyUsedMove
.asm_3db11 .playerTurn
ld [hl], a ld [hl], a
ld [wd11e], a ld [wd11e], a
call DetermineExclamationPointTextNum call DetermineExclamationPointTextNum
@ -4682,9 +4685,9 @@ CriticalHitTest:
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
ld a, [wEnemyMonSpecies] ld a, [wEnemyMonSpecies]
jr nz, .asm_3e032 jr nz, .handleEnemy
ld a, [wBattleMonSpecies] ld a, [wBattleMonSpecies]
.asm_3e032 .handleEnemy
ld [wd0b5], a ld [wd0b5], a
call GetMonHeader call GetMonHeader
ld a, [wMonHBaseSpeed] ld a, [wMonHBaseSpeed]
@ -5051,7 +5054,7 @@ ApplyDamageToPlayerPokemon:
ld a,$01 ld a,$01
ld [wHPBarType],a ld [wHPBarType],a
predef UpdateHPBar2 ; animate the HP bar shortening predef UpdateHPBar2 ; animate the HP bar shortening
ApplyAttackToPlayerPokemonDone ApplyAttackToPlayerPokemonDone:
jp DrawHUDsAndHPBars jp DrawHUDsAndHPBars
AttackSubstitute: AttackSubstitute:
@ -5751,12 +5754,12 @@ EnemyMoveHitTest:
handleIfEnemyMoveMissed: handleIfEnemyMoveMissed:
ld a, [wMoveMissed] ld a, [wMoveMissed]
and a and a
jr z, .asm_3e791 jr z, .moveDidNotMiss
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
cp EXPLODE_EFFECT cp EXPLODE_EFFECT
jr z, asm_3e7a0 jr z, handleExplosionMiss
jr EnemyCheckIfFlyOrChargeEffect jr EnemyCheckIfFlyOrChargeEffect
.asm_3e791 .moveDidNotMiss
call SwapPlayerAndEnemyLevels call SwapPlayerAndEnemyLevels
GetEnemyAnimationType: GetEnemyAnimationType:
@ -5766,7 +5769,7 @@ GetEnemyAnimationType:
jr z, playEnemyMoveAnimation jr z, playEnemyMoveAnimation
ld a, $2 ld a, $2
jr playEnemyMoveAnimation jr playEnemyMoveAnimation
asm_3e7a0: handleExplosionMiss:
call SwapPlayerAndEnemyLevels call SwapPlayerAndEnemyLevels
xor a xor a
playEnemyMoveAnimation: playEnemyMoveAnimation:
@ -5824,19 +5827,19 @@ EnemyCheckIfMirrorMoveEffect:
jp c, JumpMoveEffect jp c, JumpMoveEffect
ld a, [wMoveMissed] ld a, [wMoveMissed]
and a and a
jr z, .asm_3e82b jr z, .moveDidNotMiss
call PrintMoveFailureText call PrintMoveFailureText
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
cp EXPLODE_EFFECT cp EXPLODE_EFFECT
jr z, .asm_3e83e jr z, .handleExplosionMiss
jp ExecuteEnemyMoveDone jp ExecuteEnemyMoveDone
.asm_3e82b .moveDidNotMiss
call ApplyAttackToPlayerPokemon call ApplyAttackToPlayerPokemon
call PrintCriticalOHKOText call PrintCriticalOHKOText
callab DisplayEffectiveness callab DisplayEffectiveness
ld a, 1 ld a, 1
ld [wMoveDidntMiss], a ld [wMoveDidntMiss], a
.asm_3e83e .handleExplosionMiss
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
ld hl, AlwaysHappenSideEffects ld hl, AlwaysHappenSideEffects
ld de, $1 ld de, $1
@ -5850,7 +5853,7 @@ EnemyCheckIfMirrorMoveEffect:
call HandleBuildingRage call HandleBuildingRage
ld hl, wEnemyBattleStatus1 ld hl, wEnemyBattleStatus1
bit AttackingMultipleTimes, [hl] ; is mon hitting multiple times? (example: double kick) bit AttackingMultipleTimes, [hl] ; is mon hitting multiple times? (example: double kick)
jr z, .asm_3e873 jr z, .notMultiHitMove
push hl push hl
ld hl, wEnemyNumAttacksLeft ld hl, wEnemyNumAttacksLeft
dec [hl] dec [hl]
@ -5861,7 +5864,7 @@ EnemyCheckIfMirrorMoveEffect:
call PrintText call PrintText
xor a xor a
ld [wEnemyNumHits], a ld [wEnemyNumHits], a
.asm_3e873 .notMultiHitMove
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
and a and a
jr z, ExecuteEnemyMoveDone jr z, ExecuteEnemyMoveDone
@ -6801,16 +6804,16 @@ HandleExplodingAnimation:
ld hl, wEnemyMonType1 ld hl, wEnemyMonType1
ld de, wEnemyBattleStatus1 ld de, wEnemyBattleStatus1
ld a, [wPlayerMoveNum] ld a, [wPlayerMoveNum]
jr z, .asm_3eeea jr z, .player
ld hl, wBattleMonType1 ld hl, wBattleMonType1
ld de, wEnemyBattleStatus1 ld de, wEnemyBattleStatus1
ld a, [wEnemyMoveNum] ld a, [wEnemyMoveNum]
.asm_3eeea .player
cp SELFDESTRUCT cp SELFDESTRUCT
jr z, .asm_3eef1 jr z, .isExplodingMove
cp EXPLOSION cp EXPLOSION
ret nz ret nz
.asm_3eef1 .isExplodingMove
ld a, [de] ld a, [de]
bit Invulnerable, a ; fly/dig bit Invulnerable, a ; fly/dig
ret nz ret nz
@ -7333,7 +7336,7 @@ PoisonEffect:
jr nz, .ok jr nz, .ok
ld b, ANIM_A9 ld b, ANIM_A9
ld hl, wEnemyBattleStatus3 ld hl, wEnemyBattleStatus3
ld de, wEnemyToxcCounter ld de, wEnemyToxicCounter
.ok .ok
cp TOXIC cp TOXIC
jr nz, .normalPoison ; done if move is not Toxic jr nz, .normalPoison ; done if move is not Toxic
@ -7341,18 +7344,18 @@ PoisonEffect:
xor a xor a
ld [de], a ld [de], a
ld hl, BadlyPoisonedText ld hl, BadlyPoisonedText
jr .asm_3f2c0 jr .continue
.normalPoison .normalPoison
ld hl, PoisonedText ld hl, PoisonedText
.asm_3f2c0 .continue
pop de pop de
ld a, [de] ld a, [de]
cp POISON_EFFECT cp POISON_EFFECT
jr z, .asm_3f2cd jr z, .regularPoisonEffect
ld a, b ld a, b
call PlayBattleAnimation2 call PlayBattleAnimation2
jp PrintText jp PrintText
.asm_3f2cd .regularPoisonEffect
call PlayCurrentMoveAnimation2 call PlayCurrentMoveAnimation2
jp PrintText jp PrintText
.noEffect .noEffect
@ -7717,9 +7720,9 @@ MonsStatsRoseText:
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
ld a, [wPlayerMoveEffect] ld a, [wPlayerMoveEffect]
jr z, .asm_3f53b jr z, .playerTurn
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
.asm_3f53b .playerTurn
cp ATTACK_DOWN1_EFFECT cp ATTACK_DOWN1_EFFECT
ret nc ret nc
ld hl, RoseText ld hl, RoseText
@ -7728,7 +7731,7 @@ MonsStatsRoseText:
GreatlyRoseText: GreatlyRoseText:
db $0a db $0a
TX_FAR _GreatlyRoseText TX_FAR _GreatlyRoseText
; fallthrough
RoseText: RoseText:
TX_FAR _RoseText TX_FAR _RoseText
db "@" db "@"
@ -7817,9 +7820,9 @@ StatModifierDownEffect:
ld a, c ld a, c
add e add e
ld e, a ld e, a
jr nc, .asm_3f5e4 jr nc, .noCarry
inc d ; de = unmodified stat inc d ; de = unmodified stat
.asm_3f5e4 .noCarry
pop bc pop bc
ld a, [hld] ld a, [hld]
sub $1 ; can't lower stat below 1 (-6) sub $1 ; can't lower stat below 1 (-6)
@ -7919,12 +7922,13 @@ MonsStatsFellText:
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
ld a, [wPlayerMoveEffect] ld a, [wPlayerMoveEffect]
jr z, .asm_3f674 jr z, .playerTurn
ld a, [wEnemyMoveEffect] ld a, [wEnemyMoveEffect]
.asm_3f674 .playerTurn
cp $1a ; check if the move's effect decreases a stat by 2
cp BIDE_EFFECT
ret c ret c
cp $44 cp ATTACK_DOWN_SIDE_EFFECT
ret nc ret nc
ld hl, GreatlyFellText ld hl, GreatlyFellText
ret ret
@ -7932,7 +7936,7 @@ MonsStatsFellText:
GreatlyFellText: GreatlyFellText:
db $0a db $0a
TX_FAR _GreatlyFellText TX_FAR _GreatlyFellText
; fallthrough
FellText: FellText:
TX_FAR _FellText TX_FAR _FellText
db "@" db "@"
@ -7940,15 +7944,15 @@ FellText:
PrintStatText: PrintStatText:
ld hl, StatsTextStrings ld hl, StatsTextStrings
ld c, "@" ld c, "@"
.asm_3f68d .findStatName_outer
dec b dec b
jr z, .asm_3f696 jr z, .foundStatName
.asm_3f690 .findStatName_inner
ld a, [hli] ld a, [hli]
cp c cp c
jr z, .asm_3f68d jr z, .findStatName_outer
jr .asm_3f690 jr .findStatName_inner
.asm_3f696 .foundStatName
ld de, wcf4b ld de, wcf4b
ld bc, $a ld bc, $a
jp CopyData jp CopyData
@ -8026,41 +8030,42 @@ ThrashPetalDanceEffect:
SwitchAndTeleportEffect: SwitchAndTeleportEffect:
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
jr nz, .asm_3f791 jr nz, .handleEnemy
ld a, [wIsInBattle] ld a, [wIsInBattle]
dec a dec a
jr nz, .asm_3f77e jr nz, .notWildBattle1
ld a, [wCurEnemyLVL] ld a, [wCurEnemyLVL]
ld b, a ld b, a
ld a, [wBattleMonLevel] ld a, [wBattleMonLevel]
cp b cp b ; is the player's level greater than the enemy's level?
jr nc, .asm_3f76e jr nc, .playerMoveWasSuccessful ; if so, teleport will always succeed
add b add b
ld c, a ld c, a
inc c inc c ; c = sum of player level and enemy level
.asm_3f751 .rejectionSampleLoop1
call BattleRandom call BattleRandom
cp c cp c ; get a random number between 0 and c
jr nc, .asm_3f751 jr nc, .rejectionSampleLoop1
srl b srl b
srl b srl b ; b = enemy level * 4
cp b ; bug: does not account for overflow, so levels above 63 can lead to erroneousness results
jr nc, .asm_3f76e cp b ; is rand[0, playerLevel + enemyLevel] > enemyLevel?
jr nc, .playerMoveWasSuccessful ; if so, allow teleporting
ld c, 50 ld c, 50
call DelayFrames call DelayFrames
ld a, [wPlayerMoveNum] ld a, [wPlayerMoveNum]
cp TELEPORT cp TELEPORT
jp nz, PrintDidntAffectText jp nz, PrintDidntAffectText
jp PrintButItFailedText_ jp PrintButItFailedText_
.asm_3f76e .playerMoveWasSuccessful
call ReadPlayerMonCurHPAndStatus call ReadPlayerMonCurHPAndStatus
xor a xor a
ld [wAnimationType], a ld [wAnimationType], a
inc a inc a
ld [wEscapedFromBattle], a ld [wEscapedFromBattle], a
ld a, [wPlayerMoveNum] ld a, [wPlayerMoveNum]
jr .asm_3f7e4 jr .playAnimAndPrintText
.asm_3f77e .notWildBattle1
ld c, 50 ld c, 50
call DelayFrames call DelayFrames
ld hl, IsUnaffectedText ld hl, IsUnaffectedText
@ -8068,41 +8073,41 @@ SwitchAndTeleportEffect:
cp TELEPORT cp TELEPORT
jp nz, PrintText jp nz, PrintText
jp PrintButItFailedText_ jp PrintButItFailedText_
.asm_3f791 .handleEnemy
ld a, [wIsInBattle] ld a, [wIsInBattle]
dec a dec a
jr nz, .asm_3f7d1 jr nz, .notWildBattle2
ld a, [wBattleMonLevel] ld a, [wBattleMonLevel]
ld b, a ld b, a
ld a, [wCurEnemyLVL] ld a, [wCurEnemyLVL]
cp b cp b
jr nc, .asm_3f7c1 jr nc, .enemyMoveWasSuccessful
add b add b
ld c, a ld c, a
inc c inc c
.asm_3f7a4 .rejectionSampleLoop2
call BattleRandom call BattleRandom
cp c cp c
jr nc, .asm_3f7a4 jr nc, .rejectionSampleLoop2
srl b srl b
srl b srl b
cp b cp b
jr nc, .asm_3f7c1 jr nc, .enemyMoveWasSuccessful
ld c, 50 ld c, 50
call DelayFrames call DelayFrames
ld a, [wEnemyMoveNum] ld a, [wEnemyMoveNum]
cp TELEPORT cp TELEPORT
jp nz, PrintDidntAffectText jp nz, PrintDidntAffectText
jp PrintButItFailedText_ jp PrintButItFailedText_
.asm_3f7c1 .enemyMoveWasSuccessful
call ReadPlayerMonCurHPAndStatus call ReadPlayerMonCurHPAndStatus
xor a xor a
ld [wAnimationType], a ld [wAnimationType], a
inc a inc a
ld [wEscapedFromBattle], a ld [wEscapedFromBattle], a
ld a, [wEnemyMoveNum] ld a, [wEnemyMoveNum]
jr .asm_3f7e4 jr .playAnimAndPrintText
.asm_3f7d1 .notWildBattle2
ld c, 50 ld c, 50
call DelayFrames call DelayFrames
ld hl, IsUnaffectedText ld hl, IsUnaffectedText
@ -8110,7 +8115,7 @@ SwitchAndTeleportEffect:
cp TELEPORT cp TELEPORT
jp nz, PrintText jp nz, PrintText
jp ConditionalPrintButItFailed jp ConditionalPrintButItFailed
.asm_3f7e4 .playAnimAndPrintText
push af push af
call PlayBattleAnimation call PlayBattleAnimation
ld c, 20 ld c, 20
@ -8118,12 +8123,12 @@ SwitchAndTeleportEffect:
pop af pop af
ld hl, RanFromBattleText ld hl, RanFromBattleText
cp TELEPORT cp TELEPORT
jr z, .asm_3f7ff jr z, .printText
ld hl, RanAwayScaredText ld hl, RanAwayScaredText
cp ROAR cp ROAR
jr z, .asm_3f7ff jr z, .printText
ld hl, WasBlownAwayText ld hl, WasBlownAwayText
.asm_3f7ff .printText
jp PrintText jp PrintText
RanFromBattleText: RanFromBattleText:
@ -8168,10 +8173,11 @@ TwoToFiveAttacksEffect:
call BattleRandom call BattleRandom
and $3 and $3
cp $2 cp $2
jr c, .asm_3f851 jr c, .gotNumHits
; if the number of hits was greater than 2, re-roll again for a lower chance
call BattleRandom call BattleRandom
and $3 and $3
.asm_3f851 .gotNumHits
inc a inc a
inc a inc a
.saveNumberOfHits .saveNumberOfHits
@ -8250,22 +8256,22 @@ ChargeMoveEffectText:
ld a, [wChargeMoveNum] ld a, [wChargeMoveNum]
cp RAZOR_WIND cp RAZOR_WIND
ld hl, MadeWhirlwindText ld hl, MadeWhirlwindText
jr z, .asm_3f8f8 jr z, .gotText
cp SOLARBEAM cp SOLARBEAM
ld hl, TookInSunlightText ld hl, TookInSunlightText
jr z, .asm_3f8f8 jr z, .gotText
cp SKULL_BASH cp SKULL_BASH
ld hl, LoweredItsHeadText ld hl, LoweredItsHeadText
jr z, .asm_3f8f8 jr z, .gotText
cp SKY_ATTACK cp SKY_ATTACK
ld hl, SkyAttackGlowingText ld hl, SkyAttackGlowingText
jr z, .asm_3f8f8 jr z, .gotText
cp FLY cp FLY
ld hl, FlewUpHighText ld hl, FlewUpHighText
jr z, .asm_3f8f8 jr z, .gotText
cp DIG cp DIG
ld hl, DugAHoleText ld hl, DugAHoleText
.asm_3f8f8 .gotText
ret ret
MadeWhirlwindText: MadeWhirlwindText:
@ -8328,7 +8334,7 @@ RecoilEffect:
ConfusionSideEffect: ConfusionSideEffect:
call BattleRandom call BattleRandom
cp $19 cp $19 ; ~10% chance
ret nc ret nc
jr ConfusionSideEffectSuccess jr ConfusionSideEffectSuccess
@ -8398,9 +8404,9 @@ ClearHyperBeam:
ld hl, wEnemyBattleStatus2 ld hl, wEnemyBattleStatus2
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
jr z, .asm_3f9db jr z, .playerTurn
ld hl, wPlayerBattleStatus2 ld hl, wPlayerBattleStatus2
.asm_3f9db .playerTurn
res NeedsToRecharge, [hl] ; mon no longer needs to recharge res NeedsToRecharge, [hl] ; mon no longer needs to recharge
pop hl pop hl
ret ret
@ -8421,21 +8427,21 @@ MimicEffect:
call MoveHitTest call MoveHitTest
ld a, [wMoveMissed] ld a, [wMoveMissed]
and a and a
jr nz, .asm_3fa74 jr nz, .mimicMissed
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
ld hl, wBattleMonMoves ld hl, wBattleMonMoves
ld a, [wPlayerBattleStatus1] ld a, [wPlayerBattleStatus1]
jr nz, .asm_3fa13 jr nz, .enemyTurn
ld a, [wLinkState] ld a, [wLinkState]
cp LINK_STATE_BATTLING cp LINK_STATE_BATTLING
jr nz, .asm_3fa3a jr nz, .letPlayerChooseMove
ld hl, wEnemyMonMoves ld hl, wEnemyMonMoves
ld a, [wEnemyBattleStatus1] ld a, [wEnemyBattleStatus1]
.asm_3fa13 .enemyTurn
bit Invulnerable, a bit Invulnerable, a
jr nz, .asm_3fa74 jr nz, .mimicMissed
.asm_3fa17 .getRandomMove
push hl push hl
call BattleRandom call BattleRandom
and $3 and $3
@ -8445,20 +8451,20 @@ MimicEffect:
ld a, [hl] ld a, [hl]
pop hl pop hl
and a and a
jr z, .asm_3fa17 jr z, .getRandomMove
ld d, a ld d, a
ld a, [H_WHOSETURN] ld a, [H_WHOSETURN]
and a and a
ld hl, wBattleMonMoves ld hl, wBattleMonMoves
ld a, [wPlayerMoveListIndex] ld a, [wPlayerMoveListIndex]
jr z, .asm_3fa5f jr z, .playerTurn
ld hl, wEnemyMonMoves ld hl, wEnemyMonMoves
ld a, [wEnemyMoveListIndex] ld a, [wEnemyMoveListIndex]
jr .asm_3fa5f jr .playerTurn
.asm_3fa3a .letPlayerChooseMove
ld a, [wEnemyBattleStatus1] ld a, [wEnemyBattleStatus1]
bit Invulnerable, a bit Invulnerable, a
jr nz, .asm_3fa74 jr nz, .mimicMissed
ld a, [wCurrentMenuItem] ld a, [wCurrentMenuItem]
push af push af
ld a, $1 ld a, $1
@ -8473,7 +8479,7 @@ MimicEffect:
ld d, [hl] ld d, [hl]
pop af pop af
ld hl, wBattleMonMoves ld hl, wBattleMonMoves
.asm_3fa5f .playerTurn
ld c, a ld c, a
ld b, $0 ld b, $0
add hl, bc add hl, bc
@ -8484,7 +8490,7 @@ MimicEffect:
call PlayCurrentMoveAnimation call PlayCurrentMoveAnimation
ld hl, MimicLearnedMoveText ld hl, MimicLearnedMoveText
jp PrintText jp PrintText
.asm_3fa74 .mimicMissed
jp PrintButItFailedText_ jp PrintButItFailedText_
MimicLearnedMoveText: MimicLearnedMoveText:

View file

@ -33,7 +33,7 @@ DecrementPP:
ld a, [wPlayerMonNumber] ; which mon in party is active ld a, [wPlayerMonNumber] ; which mon in party is active
ld bc, wPartyMon2 - wPartyMon1 ld bc, wPartyMon2 - wPartyMon1
call AddNTimes ; calculate address of the mon to modify call AddNTimes ; calculate address of the mon to modify
.DecrementPP .DecrementPP:
ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use? ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use?
ld c, a ld c, a
ld b, 0 ld b, 0

View file

@ -49,11 +49,11 @@ GainExperience:
ld [de], a ld [de], a
.nextBaseStat .nextBaseStat
dec c dec c
jr z, .asm_552a1 jr z, .statExpDone
inc de inc de
inc de inc de
jr .gainStatExpLoop jr .gainStatExpLoop
.asm_552a1 .statExpDone
xor a xor a
ld [H_MULTIPLICAND], a ld [H_MULTIPLICAND], a
ld [H_MULTIPLICAND + 1], a ld [H_MULTIPLICAND + 1], a

View file

@ -2,15 +2,15 @@ GetTrainerName_:
ld hl, wGrassRate ld hl, wGrassRate
ld a, [wLinkState] ld a, [wLinkState]
and a and a
jr nz, .rival jr nz, .foundName
ld hl, wRivalName ld hl, wRivalName
ld a, [wTrainerClass] ld a, [wTrainerClass]
cp SONY1 cp SONY1
jr z, .rival jr z, .foundName
cp SONY2 cp SONY2
jr z, .rival jr z, .foundName
cp SONY3 cp SONY3
jr z, .rival jr z, .foundName
ld [wd0b5], a ld [wd0b5], a
ld a, TRAINER_NAME ld a, TRAINER_NAME
ld [wNameListType], a ld [wNameListType], a
@ -18,7 +18,7 @@ GetTrainerName_:
ld [wPredefBank], a ld [wPredefBank], a
call GetName call GetName
ld hl, wcd6d ld hl, wcd6d
.rival .foundName
ld de, wTrainerName ld de, wTrainerName
ld bc, $d ld bc, $d
jp CopyData jp CopyData

View file

@ -2,8 +2,8 @@
DisplayLinkBattleVersusTextBox: DisplayLinkBattleVersusTextBox:
call LoadTextBoxTilePatterns call LoadTextBoxTilePatterns
coord hl, 3, 4 coord hl, 3, 4
ld b, $7 ld b, 7
ld c, $c ld c, 12
call TextBoxBorder call TextBoxBorder
coord hl, 4, 5 coord hl, 4, 5
ld de, wPlayerName ld de, wPlayerName

View file

@ -182,7 +182,7 @@ AIMoveChoiceModification2:
jr c, .preferMove jr c, .preferMove
jr .nextMove jr .nextMove
.preferMove .preferMove
dec [hl] ; sligthly encourage this move dec [hl] ; slightly encourage this move
jr .nextMove jr .nextMove
; encourages moves that are effective against the player's mon (even if non-damaging). ; encourages moves that are effective against the player's mon (even if non-damaging).

View file

@ -27,10 +27,10 @@ CableClub_DoBattleOrTradeAgain:
ld hl, wSerialPlayerDataBlock ld hl, wSerialPlayerDataBlock
ld a, SERIAL_PREAMBLE_BYTE ld a, SERIAL_PREAMBLE_BYTE
ld b, 6 ld b, 6
.writePlayeDataBlockPreambleLoop .writePlayerDataBlockPreambleLoop
ld [hli], a ld [hli], a
dec b dec b
jr nz, .writePlayeDataBlockPreambleLoop jr nz, .writePlayerDataBlockPreambleLoop
ld hl, wSerialRandomNumberListBlock ld hl, wSerialRandomNumberListBlock
ld a, SERIAL_PREAMBLE_BYTE ld a, SERIAL_PREAMBLE_BYTE
ld b, 7 ld b, 7
@ -271,7 +271,7 @@ CableClub_DoBattleOrTradeAgain:
cp LINK_STATE_START_BATTLE cp LINK_STATE_START_BATTLE
ld a, LINK_STATE_TRADING ld a, LINK_STATE_TRADING
ld [wLinkState], a ld [wLinkState], a
jr nz, .asm_5506 jr nz, .trading
ld a, LINK_STATE_BATTLING ld a, LINK_STATE_BATTLING
ld [wLinkState], a ld [wLinkState], a
ld a, OPP_SONY1 ld a, OPP_SONY1
@ -283,7 +283,7 @@ CableClub_DoBattleOrTradeAgain:
predef InitOpponent predef InitOpponent
predef HealParty predef HealParty
jp ReturnToCableClubRoom jp ReturnToCableClubRoom
.asm_5506 .trading
ld c, BANK(Music_GameCorner) ld c, BANK(Music_GameCorner)
ld a, MUSIC_GAME_CORNER ld a, MUSIC_GAME_CORNER
call PlayMusic call PlayMusic
@ -964,8 +964,8 @@ CableClub_TextBoxBorder:
; c = width ; c = width
CableClub_DrawHorizontalLine: CableClub_DrawHorizontalLine:
ld d, c ld d, c
.asm_5ae1 .loop
ld [hli], a ld [hli], a
dec d dec d
jr nz, .asm_5ae1 jr nz, .loop
ret ret

View file

@ -210,12 +210,12 @@ HoFDisplayPlayerStats:
SetEvent EVENT_HALL_OF_FAME_DEX_RATING SetEvent EVENT_HALL_OF_FAME_DEX_RATING
predef DisplayDexRating predef DisplayDexRating
coord hl, 0, 4 coord hl, 0, 4
ld b, $6 ld b, 6
ld c, $a ld c, 10
call TextBoxBorder call TextBoxBorder
coord hl, 5, 0 coord hl, 5, 0
ld b, $2 ld b, 2
ld c, $9 ld c, 9
call TextBoxBorder call TextBoxBorder
coord hl, 7, 2 coord hl, 7, 2
ld de, wPlayerName ld de, wPlayerName

View file

@ -66,18 +66,18 @@ ViridianSchoolNotebookText4:
PrintFightingDojoText2: PrintFightingDojoText2:
call EnableAutoTextBoxDrawing call EnableAutoTextBoxDrawing
tx_pre_jump FightingDojoText_52a10 tx_pre_jump EnemiesOnEverySideText
FightingDojoText_52a10: EnemiesOnEverySideText:
TX_FAR _FightingDojoText_52a10 TX_FAR _EnemiesOnEverySideText
db "@" db "@"
PrintFightingDojoText3: PrintFightingDojoText3:
call EnableAutoTextBoxDrawing call EnableAutoTextBoxDrawing
tx_pre_jump FightingDojoText_52a1d tx_pre_jump WhatGoesAroundComesAroundText
FightingDojoText_52a1d: WhatGoesAroundComesAroundText:
TX_FAR _FightingDojoText_52a1d TX_FAR _WhatGoesAroundComesAroundText
db "@" db "@"
PrintFightingDojoText: PrintFightingDojoText:

View file

@ -73,29 +73,29 @@ PrintBenchGuyText:
; format: db map id, player sprite facing direction, text id of PredefTextIDPointerTable ; format: db map id, player sprite facing direction, text id of PredefTextIDPointerTable
BenchGuyTextPointers: BenchGuyTextPointers:
db VIRIDIAN_POKECENTER, SPRITE_FACING_LEFT db VIRIDIAN_POKECENTER, SPRITE_FACING_LEFT
db (ViridianCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre ViridianCityPokecenterBenchGuyText
db PEWTER_POKECENTER, SPRITE_FACING_LEFT db PEWTER_POKECENTER, SPRITE_FACING_LEFT
db (PewterCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre PewterCityPokecenterBenchGuyText
db CERULEAN_POKECENTER, SPRITE_FACING_LEFT db CERULEAN_POKECENTER, SPRITE_FACING_LEFT
db (CeruleanCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre CeruleanCityPokecenterBenchGuyText
db LAVENDER_POKECENTER, SPRITE_FACING_LEFT db LAVENDER_POKECENTER, SPRITE_FACING_LEFT
db (LavenderCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre LavenderCityPokecenterBenchGuyText
db VERMILION_POKECENTER, SPRITE_FACING_LEFT db VERMILION_POKECENTER, SPRITE_FACING_LEFT
db (VermilionCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre VermilionCityPokecenterBenchGuyText
db CELADON_POKECENTER, SPRITE_FACING_LEFT db CELADON_POKECENTER, SPRITE_FACING_LEFT
db (CeladonCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre CeladonCityPokecenterBenchGuyText
db CELADON_HOTEL, SPRITE_FACING_LEFT db CELADON_HOTEL, SPRITE_FACING_LEFT
db (CeladonCityHotelText_id - TextPredefs) / 2 + 1 db_tx_pre CeladonCityHotelText
db FUCHSIA_POKECENTER, SPRITE_FACING_LEFT db FUCHSIA_POKECENTER, SPRITE_FACING_LEFT
db (FuchsiaCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre FuchsiaCityPokecenterBenchGuyText
db CINNABAR_POKECENTER, SPRITE_FACING_LEFT db CINNABAR_POKECENTER, SPRITE_FACING_LEFT
db (CinnabarIslandPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre CinnabarIslandPokecenterBenchGuyText
db SAFFRON_POKECENTER, SPRITE_FACING_LEFT db SAFFRON_POKECENTER, SPRITE_FACING_LEFT
db (SaffronCityPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre SaffronCityPokecenterBenchGuyText
db MT_MOON_POKECENTER, SPRITE_FACING_LEFT db MT_MOON_POKECENTER, SPRITE_FACING_LEFT
db (MtMoonPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre MtMoonPokecenterBenchGuyText
db ROCK_TUNNEL_POKECENTER,SPRITE_FACING_LEFT db ROCK_TUNNEL_POKECENTER,SPRITE_FACING_LEFT
db (RockTunnelPokecenterBenchGuyText_id - TextPredefs) / 2 + 1 db_tx_pre RockTunnelPokecenterBenchGuyText
db $FF db $FF
ViridianCityPokecenterBenchGuyText: ViridianCityPokecenterBenchGuyText:

View file

@ -39,39 +39,39 @@ PrintBookshelfText:
; format: db tileset id, bookshelf tile id, text id ; format: db tileset id, bookshelf tile id, text id
BookshelfTileIDs: BookshelfTileIDs:
db PLATEAU, $30 db PLATEAU, $30
db (IndigoPlateauStatues_id - TextPredefs) / 2 + 1 db_tx_pre IndigoPlateauStatues
db HOUSE, $3D db HOUSE, $3D
db (TownMapText_id - TextPredefs) / 2 + 1 db_tx_pre TownMapText
db HOUSE, $1E db HOUSE, $1E
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db MANSION, $32 db MANSION, $32
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db REDS_HOUSE_1, $32 db REDS_HOUSE_1, $32
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db LAB, $28 db LAB, $28
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db LOBBY, $16 db LOBBY, $16
db (ElevatorText_id - TextPredefs) / 2 + 1 db_tx_pre ElevatorText
db GYM, $1D db GYM, $1D
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db DOJO, $1D db DOJO, $1D
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db GATE, $22 db GATE, $22
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db MART, $54 db MART, $54
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db MART, $55 db MART, $55
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db POKECENTER, $54 db POKECENTER, $54
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db POKECENTER, $55 db POKECENTER, $55
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db LOBBY, $50 db LOBBY, $50
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db LOBBY, $52 db LOBBY, $52
db (PokemonStuffText_id - TextPredefs) / 2 + 1 db_tx_pre PokemonStuffText
db SHIP, $36 db SHIP, $36
db (BookOrSculptureText_id - TextPredefs) / 2 + 1 db_tx_pre BookOrSculptureText
db $FF db $FF
IndigoPlateauStatues: IndigoPlateauStatues:
@ -81,9 +81,9 @@ IndigoPlateauStatues:
ld a, [wXCoord] ld a, [wXCoord]
bit 0, a bit 0, a
ld hl, IndigoPlateauStatuesText2 ld hl, IndigoPlateauStatuesText2
jr nz, .asm_fbd3 jr nz, .ok
ld hl, IndigoPlateauStatuesText3 ld hl, IndigoPlateauStatuesText3
.asm_fbd3 .ok
call PrintText call PrintText
jp TextScriptEnd jp TextScriptEnd
@ -104,12 +104,12 @@ BookOrSculptureText:
ld hl, PokemonBooksText ld hl, PokemonBooksText
ld a, [wCurMapTileset] ld a, [wCurMapTileset]
cp MANSION ; Celadon Mansion tileset cp MANSION ; Celadon Mansion tileset
jr nz, .asm_fbfd jr nz, .ok
aCoord 8, 6 aCoord 8, 6
cp $38 cp $38
jr nz, .asm_fbfd jr nz, .ok
ld hl, DiglettSculptureText ld hl, DiglettSculptureText
.asm_fbfd .ok
call PrintText call PrintText
jp TextScriptEnd jp TextScriptEnd

View file

@ -70,10 +70,10 @@ SafariZoneGameOver:
ld c, BANK(SFX_Safari_Zone_PA) ld c, BANK(SFX_Safari_Zone_PA)
ld a, SFX_SAFARI_ZONE_PA ld a, SFX_SAFARI_ZONE_PA
call PlayMusic call PlayMusic
.asm_1e9c2 .waitForMusicToPlay
ld a, [wChannelSoundIDs + CH4] ld a, [wChannelSoundIDs + CH4]
cp $b9 cp SFX_SAFARI_ZONE_PA
jr nz, .asm_1e9c2 jr nz, .waitForMusicToPlay
ld a, TEXT_SAFARI_GAME_OVER ld a, TEXT_SAFARI_GAME_OVER
ld [hSpriteIndexOrTextID], a ld [hSpriteIndexOrTextID], a
call DisplayTextID call DisplayTextID
@ -100,10 +100,10 @@ SafariGameOverText:
TX_ASM TX_ASM
ld a, [wNumSafariBalls] ld a, [wNumSafariBalls]
and a and a
jr z, .asm_1ea04 jr z, .noMoreSafariBalls
ld hl, TimesUpText ld hl, TimesUpText
call PrintText call PrintText
.asm_1ea04 .noMoreSafariBalls
ld hl, GameOverText ld hl, GameOverText
call PrintText call PrintText
jp TextScriptEnd jp TextScriptEnd
@ -326,14 +326,14 @@ BillsHousePC:
cp SPRITE_FACING_UP cp SPRITE_FACING_UP
ret nz ret nz
CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING CheckEvent EVENT_LEFT_BILLS_HOUSE_AFTER_HELPING
jr nz, .asm_1ebd2 jr nz, .displayBillsHousePokemonList
CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL CheckEventReuseA EVENT_USED_CELL_SEPARATOR_ON_BILL
jr nz, .asm_1eb86 jr nz, .displayBillsHouseMonitorText
CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR CheckEventReuseA EVENT_BILL_SAID_USE_CELL_SEPARATOR
jr nz, .asm_1eb8b jr nz, .doCellSeparator
.asm_1eb86 .displayBillsHouseMonitorText
tx_pre_jump BillsHouseMonitorText tx_pre_jump BillsHouseMonitorText
.asm_1eb8b .doCellSeparator
ld a, $1 ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld [wDoNotWaitForButtonPressAfterDisplayingText], a
tx_pre BillsHouseInitiatedText tx_pre BillsHouseInitiatedText
@ -360,7 +360,7 @@ BillsHousePC:
call PlayDefaultMusic call PlayDefaultMusic
SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL SetEvent EVENT_USED_CELL_SEPARATOR_ON_BILL
ret ret
.asm_1ebd2 .displayBillsHousePokemonList
ld a, $1 ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld [wDoNotWaitForButtonPressAfterDisplayingText], a
tx_pre BillsHousePokemonList tx_pre BillsHousePokemonList

View file

@ -87,6 +87,7 @@ UpdateHPBar2:
call UpdateHPBar_CompareNewHPToOldHP call UpdateHPBar_CompareNewHPToOldHP
jr z, .animateHPBarDone jr z, .animateHPBarDone
jr nc, .HPIncrease jr nc, .HPIncrease
; HP decrease
dec bc ; subtract 1 HP dec bc ; subtract 1 HP
ld a, c ld a, c
ld [wHPBarNewHP], a ld [wHPBarNewHP], a
@ -95,7 +96,7 @@ UpdateHPBar2:
call UpdateHPBar_CalcOldNewHPBarPixels call UpdateHPBar_CalcOldNewHPBarPixels
ld a, e ld a, e
sub d ; calc pixel difference sub d ; calc pixel difference
jr .asm_fa7e jr .ok
.HPIncrease .HPIncrease
inc bc ; add 1 HP inc bc ; add 1 HP
ld a, c ld a, c
@ -105,7 +106,7 @@ UpdateHPBar2:
call UpdateHPBar_CalcOldNewHPBarPixels call UpdateHPBar_CalcOldNewHPBarPixels
ld a, d ld a, d
sub e ; calc pixel difference sub e ; calc pixel difference
.asm_fa7e .ok
call UpdateHPBar_PrintHPNumber call UpdateHPBar_PrintHPNumber
and a and a
jr z, .noPixelDifference jr z, .noPixelDifference

View file

@ -21,7 +21,7 @@ DoInGameTradeDialogue:
call CopyData call CopyData
pop af pop af
ld l,a ld l,a
ld h,$0 ld h,0
ld de,InGameTradeTextPointers ld de,InGameTradeTextPointers
add hl,hl add hl,hl
add hl,de add hl,de

View file

@ -305,7 +305,7 @@ PlayShootingStar:
ld b, SET_PAL_GAME_FREAK_INTRO ld b, SET_PAL_GAME_FREAK_INTRO
call RunPaletteCommand call RunPaletteCommand
callba LoadCopyrightAndTextBoxTiles callba LoadCopyrightAndTextBoxTiles
ld a, $e4 ld a, %11100100
ld [rBGP], a ld [rBGP], a
ld c, 180 ld c, 180
call DelayFrames call DelayFrames

View file

@ -248,7 +248,7 @@ BillsPCDeposit:
add "1" add "1"
.next .next
ld [hli], a ld [hli], a
ld [hl], $50 ld [hl], "@"
ld hl, MonWasStoredText ld hl, MonWasStoredText
call PrintText call PrintText
jp BillsPCMenu jp BillsPCMenu

View file

@ -7,7 +7,7 @@ AskName:
coord hl, 0, 0 coord hl, 0, 0
ld b, 4 ld b, 4
ld c, 11 ld c, 11
call z, ClearScreenArea ; only if in wild batle call z, ClearScreenArea ; only if in wild battle
ld a, [wcf91] ld a, [wcf91]
ld [wd11e], a ld [wd11e], a
call GetMonName call GetMonName
@ -40,7 +40,7 @@ AskName:
pop af pop af
ld [wUpdateSpritesEnabled], a ld [wUpdateSpritesEnabled], a
ld a, [wcf4b] ld a, [wcf4b]
cp $50 cp "@"
ret nz ret nz
.declinedNickname .declinedNickname
ld d, h ld d, h
@ -108,7 +108,7 @@ DisplayNamingScreen:
ld [wMenuWatchedKeys], a ld [wMenuWatchedKeys], a
ld a, 7 ld a, 7
ld [wMaxMenuItem], a ld [wMaxMenuItem], a
ld a, $50 ld a, "@"
ld [wcf4b], a ld [wcf4b], a
xor a xor a
ld hl, wNamingScreenSubmitName ld hl, wNamingScreenSubmitName
@ -153,7 +153,7 @@ DisplayNamingScreen:
ld h, [hl] ld h, [hl]
ld l, a ld l, a
push de push de
jp [hl] jp hl
.submitNickname .submitNickname
pop de pop de
@ -259,7 +259,7 @@ DisplayNamingScreen:
.addLetter .addLetter
ld a, [wNamingScreenLetter] ld a, [wNamingScreenLetter]
ld [hli], a ld [hli], a
ld [hl], $50 ld [hl], "@"
ld a, SFX_PRESS_AB ld a, SFX_PRESS_AB
call PlaySound call PlaySound
ret ret

View file

@ -7,9 +7,9 @@ OpenOaksPC:
call YesNoChoice call YesNoChoice
ld a, [wCurrentMenuItem] ld a, [wCurrentMenuItem]
and a and a
jr nz, .asm_1e932 jr nz, .closePC
predef DisplayDexRating predef DisplayDexRating
.asm_1e932 .closePC
ld hl, ClosedOaksPCText ld hl, ClosedOaksPCText
call PrintText call PrintText
jp LoadScreenTilesFromBuffer2 jp LoadScreenTilesFromBuffer2

View file

@ -121,18 +121,18 @@ RemoveItemByID:
ld b, a ld b, a
xor a xor a
ld [hItemToRemoveIndex], a ld [hItemToRemoveIndex], a
.asm_17f40 .loop
ld a, [hli] ld a, [hli]
cp $ff cp -1 ; reached terminator?
ret z ret z
cp b cp b
jr z, .asm_17f4f jr z, .foundItem
inc hl inc hl
ld a, [hItemToRemoveIndex] ld a, [hItemToRemoveIndex]
inc a inc a
ld [hItemToRemoveIndex], a ld [hItemToRemoveIndex], a
jr .asm_17f40 jr .loop
.asm_17f4f .foundItem
ld a, $1 ld a, $1
ld [wItemQuantity], a ld [wItemQuantity], a
ld a, [hItemToRemoveIndex] ld a, [hItemToRemoveIndex]

View file

@ -125,6 +125,7 @@ HandlePokedexSideMenu:
call DrawTileLine ; cover up the menu cursor in the pokemon list call DrawTileLine ; cover up the menu cursor in the pokemon list
pop bc pop bc
ret ret
.buttonBPressed .buttonBPressed
push bc push bc
coord hl, 15, 10 coord hl, 15, 10
@ -133,16 +134,19 @@ HandlePokedexSideMenu:
call DrawTileLine ; cover up the menu cursor in the side menu call DrawTileLine ; cover up the menu cursor in the side menu
pop bc pop bc
jr .exitSideMenu jr .exitSideMenu
.choseData .choseData
call ShowPokedexDataInternal call ShowPokedexDataInternal
ld b,0 ld b,0
jr .exitSideMenu jr .exitSideMenu
; play pokemon cry ; play pokemon cry
.choseCry .choseCry
ld a,[wd11e] ld a,[wd11e]
call GetCryData call GetCryData
call PlaySound call PlaySound
jr .handleMenuInput jr .handleMenuInput
.choseArea .choseArea
predef LoadTownMap_Nest ; display pokemon areas predef LoadTownMap_Nest ; display pokemon areas
ld b,0 ld b,0
@ -206,6 +210,7 @@ HandlePokedexListMenu:
dec c dec c
jr nz,.maxSeenPokemonInnerLoop jr nz,.maxSeenPokemonInnerLoop
jr .maxSeenPokemonLoop jr .maxSeenPokemonLoop
.storeMaxSeenPokemon .storeMaxSeenPokemon
ld a,b ld a,b
ld [wDexMaxSeenMon],a ld [wDexMaxSeenMon],a
@ -409,20 +414,25 @@ ShowPokedexDataInternal:
push af push af
xor a xor a
ld [hTilesetType],a ld [hTilesetType],a
coord hl, 0, 0 coord hl, 0, 0
ld de,1 ld de,1
lb bc, $64, SCREEN_WIDTH lb bc, $64, SCREEN_WIDTH
call DrawTileLine ; draw top border call DrawTileLine ; draw top border
coord hl, 0, 17 coord hl, 0, 17
ld b, $6f ld b, $6f
call DrawTileLine ; draw bottom border call DrawTileLine ; draw bottom border
coord hl, 0, 1 coord hl, 0, 1
ld de,20 ld de,20
lb bc, $66, $10 lb bc, $66, $10
call DrawTileLine ; draw left border call DrawTileLine ; draw left border
coord hl, 19, 1 coord hl, 19, 1
ld b,$67 ld b,$67
call DrawTileLine ; draw right border call DrawTileLine ; draw right border
ld a,$63 ; upper left corner tile ld a,$63 ; upper left corner tile
Coorda 0, 0 Coorda 0, 0
ld a,$65 ; upper right corner tile ld a,$65 ; upper right corner tile
@ -431,15 +441,19 @@ ShowPokedexDataInternal:
Coorda 0, 17 Coorda 0, 17
ld a,$6e ; lower right corner tile ld a,$6e ; lower right corner tile
Coorda 19, 17 Coorda 19, 17
coord hl, 0, 9 coord hl, 0, 9
ld de,PokedexDataDividerLine ld de,PokedexDataDividerLine
call PlaceString ; draw horizontal divider line call PlaceString ; draw horizontal divider line
coord hl, 9, 6 coord hl, 9, 6
ld de,HeightWeightText ld de,HeightWeightText
call PlaceString call PlaceString
call GetMonName call GetMonName
coord hl, 9, 2 coord hl, 9, 2
call PlaceString call PlaceString
ld hl,PokedexEntryPointers ld hl,PokedexEntryPointers
ld a,[wd11e] ld a,[wd11e]
dec a dec a
@ -450,14 +464,17 @@ ShowPokedexDataInternal:
ld a,[hli] ld a,[hli]
ld e,a ld e,a
ld d,[hl] ; de = address of pokedex entry ld d,[hl] ; de = address of pokedex entry
coord hl, 9, 4 coord hl, 9, 4
call PlaceString ; print species name call PlaceString ; print species name
ld h,b ld h,b
ld l,c ld l,c
push de push de
ld a,[wd11e] ld a,[wd11e]
push af push af
call IndexToPokedex call IndexToPokedex
coord hl, 2, 8 coord hl, 2, 8
ld a, "№" ld a, "№"
ld [hli],a ld [hli],a
@ -466,6 +483,7 @@ ShowPokedexDataInternal:
ld de,wd11e ld de,wd11e
lb bc, LEADING_ZEROES | 1, 3 lb bc, LEADING_ZEROES | 1, 3
call PrintNumber ; print pokedex number call PrintNumber ; print pokedex number
ld hl,wPokedexOwned ld hl,wPokedexOwned
call IsPokemonBitSet call IsPokemonBitSet
pop af pop af
@ -473,10 +491,12 @@ ShowPokedexDataInternal:
ld a,[wcf91] ld a,[wcf91]
ld [wd0b5],a ld [wd0b5],a
pop de pop de
push af push af
push bc push bc
push de push de
push hl push hl
call Delay3 call Delay3
call GBPalNormal call GBPalNormal
call GetMonHeader ; load pokemon picture location call GetMonHeader ; load pokemon picture location
@ -484,10 +504,12 @@ ShowPokedexDataInternal:
call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture
ld a,[wcf91] ld a,[wcf91]
call PlayCry ; play pokemon cry call PlayCry ; play pokemon cry
pop hl pop hl
pop de pop de
pop bc pop bc
pop af pop af
ld a,c ld a,c
and a and a
jp z,.waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description jp z,.waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description

View file

@ -23,8 +23,8 @@ CeladonPrizeMenu:
ld [wTopMenuItemX],a ld [wTopMenuItemX],a
call PrintPrizePrice call PrintPrizePrice
coord hl, 0, 2 coord hl, 0, 2
ld b,$08 ld b, 8
ld c,$10 ld c, 16
call TextBoxBorder call TextBoxBorder
call GetPrizeMenuId call GetPrizeMenuId
call UpdateSprites call UpdateSprites
@ -32,12 +32,12 @@ CeladonPrizeMenu:
call PrintText call PrintText
call HandleMenuInput ; menu choice handler call HandleMenuInput ; menu choice handler
bit 1,a ; keypress = B (Cancel) bit 1,a ; keypress = B (Cancel)
jr nz,.NoChoice jr nz, .noChoice
ld a,[wCurrentMenuItem] ld a,[wCurrentMenuItem]
cp a,$03 ; "NO,THANKS" choice cp 3 ; "NO,THANKS" choice
jr z,.NoChoice jr z, .noChoice
call HandlePrizeChoice call HandlePrizeChoice
.NoChoice .noChoice
ld hl,wd730 ld hl,wd730
res 6,[hl] res 6,[hl]
ret ret
@ -65,7 +65,7 @@ GetPrizeMenuId:
; (distinguishing between Pokemon names ; (distinguishing between Pokemon names
; and Items (specifically TMs) names) ; and Items (specifically TMs) names)
ld a,[hSpriteIndexOrTextID] ld a,[hSpriteIndexOrTextID]
sub a,3 ; prize-texts' id are 3, 4 and 5 sub 3 ; prize-texts' id are 3, 4 and 5
ld [wWhichPrizeWindow],a ; prize-texts' id (relative, i.e. 0, 1 or 2) ld [wWhichPrizeWindow],a ; prize-texts' id (relative, i.e. 0, 1 or 2)
add a add a
add a add a
@ -88,7 +88,7 @@ GetPrizeMenuId:
ld bc,6 ld bc,6
call CopyData call CopyData
ld a,[wWhichPrizeWindow] ld a,[wWhichPrizeWindow]
cp a,$02 ;is TM_menu? cp 2 ;is TM_menu?
jr nz,.putMonName jr nz,.putMonName
ld a,[wPrize1] ld a,[wPrize1]
ld [wd11e],a ld [wd11e],a
@ -138,7 +138,7 @@ GetPrizeMenuId:
call PrintBCDNumber call PrintBCDNumber
ld de,wPrize2Price ld de,wPrize2Price
coord hl, 13, 7 coord hl, 13, 7
ld c,(%1 << 7 | 2) ld c,(1 << 7 | 2)
call PrintBCDNumber call PrintBCDNumber
ld de,wPrize3Price ld de,wPrize3Price
coord hl, 13, 9 coord hl, 13, 9
@ -149,15 +149,15 @@ INCLUDE "data/prizes.asm"
PrintPrizePrice: PrintPrizePrice:
coord hl, 11, 0 coord hl, 11, 0
ld b,$01 ld b, 1
ld c,$07 ld c, 7
call TextBoxBorder call TextBoxBorder
call UpdateSprites call UpdateSprites
coord hl, 12, 0 coord hl, 12, 0
ld de,.CoinText ld de, .CoinString
call PlaceString call PlaceString
coord hl, 13, 1 coord hl, 13, 1
ld de,.SixSpacesText ld de, .SixSpacesString
call PlaceString call PlaceString
coord hl, 13, 1 coord hl, 13, 1
ld de,wPlayerCoins ld de,wPlayerCoins
@ -165,10 +165,10 @@ PrintPrizePrice:
call PrintBCDNumber call PrintBCDNumber
ret ret
.CoinText .CoinString:
db "COIN@" db "COIN@"
.SixSpacesText .SixSpacesString:
db " @" db " @"
LoadCoinsToSubtract: LoadCoinsToSubtract:
@ -196,33 +196,33 @@ HandlePrizeChoice:
ld a,[hl] ld a,[hl]
ld [wd11e],a ld [wd11e],a
ld a,[wWhichPrizeWindow] ld a,[wWhichPrizeWindow]
cp a,$02 ; is prize a TM? cp 2 ; is prize a TM?
jr nz,.GetMonName jr nz, .getMonName
call GetItemName call GetItemName
jr .GivePrize jr .givePrize
.GetMonName .getMonName
call GetMonName call GetMonName
.GivePrize .givePrize
ld hl,SoYouWantPrizeTextPtr ld hl,SoYouWantPrizeTextPtr
call PrintText call PrintText
call YesNoChoice call YesNoChoice
ld a,[wCurrentMenuItem] ; yes/no answer (Y=0, N=1) ld a,[wCurrentMenuItem] ; yes/no answer (Y=0, N=1)
and a and a
jr nz,.PrintOhFineThen jr nz, .printOhFineThen
call LoadCoinsToSubtract call LoadCoinsToSubtract
call HasEnoughCoins call HasEnoughCoins
jr c,.NotEnoughCoins jr c, .notEnoughCoins
ld a,[wWhichPrizeWindow] ld a,[wWhichPrizeWindow]
cp a,$02 cp $02
jr nz,.GiveMon jr nz, .giveMon
ld a,[wd11e] ld a,[wd11e]
ld b,a ld b,a
ld a,1 ld a,1
ld c,a ld c,a
call GiveItem call GiveItem
jr nc,.BagFull jr nc, .bagFull
jr .SubtractCoins jr .subtractCoins
.GiveMon .giveMon
ld a,[wd11e] ld a,[wd11e]
ld [wcf91],a ld [wcf91],a
push af push af
@ -243,24 +243,24 @@ HandlePrizeChoice:
; were full), return without subtracting coins. ; were full), return without subtracting coins.
ret nc ret nc
.SubtractCoins .subtractCoins
call LoadCoinsToSubtract call LoadCoinsToSubtract
ld hl,hCoins + 1 ld hl,hCoins + 1
ld de,wPlayerCoins + 1 ld de,wPlayerCoins + 1
ld c,$02 ; how many bytes ld c,$02 ; how many bytes
predef SubBCDPredef predef SubBCDPredef
jp PrintPrizePrice jp PrintPrizePrice
.BagFull .bagFull
ld hl,PrizeRoomBagIsFullTextPtr ld hl,PrizeRoomBagIsFullTextPtr
jp PrintText jp PrintText
.NotEnoughCoins .notEnoughCoins
ld hl,SorryNeedMoreCoinsText ld hl,SorryNeedMoreCoinsText
jp PrintText jp PrintText
.PrintOhFineThen .printOhFineThen
ld hl,OhFineThenTextPtr ld hl,OhFineThenTextPtr
jp PrintText jp PrintText
UnknownData52951: UnknownPrizeData:
; XXX what's this? ; XXX what's this?
db $00,$01,$00,$01,$00,$01,$00,$00,$01 db $00,$01,$00,$01,$00,$01,$00,$00,$01

View file

@ -34,7 +34,7 @@ StartMenu_Pokemon:
ld [wTextBoxID],a ld [wTextBoxID],a
call DisplayTextBoxID ; display pokemon menu options call DisplayTextBoxID ; display pokemon menu options
ld hl,wFieldMoves ld hl,wFieldMoves
lb bc, $02, $0c ; max menu item ID, top menu item Y lb bc, 2, 12 ; max menu item ID, top menu item Y
ld e,5 ld e,5
.adjustMenuVariablesLoop .adjustMenuVariablesLoop
dec e dec e
@ -222,7 +222,7 @@ StartMenu_Pokemon:
res 4,[hl] res 4,[hl]
ld c,60 ld c,60
call DelayFrames call DelayFrames
call GBPalWhiteOutWithDelay3 ; zero all three palettes and wait 3 V-blanks call GBPalWhiteOutWithDelay3
jp .goBackToMap jp .goBackToMap
.warpToLastPokemonCenterText .warpToLastPokemonCenterText
TX_FAR _WarpToLastPokemonCenterText TX_FAR _WarpToLastPokemonCenterText

View file

@ -249,16 +249,16 @@ PrintStatsBox:
and a ; a is 0 from the status screen and a ; a is 0 from the status screen
jr nz, .DifferentBox jr nz, .DifferentBox
coord hl, 0, 8 coord hl, 0, 8
ld b, $8 ld b, 8
ld c, $8 ld c, 8
call TextBoxBorder ; Draws the box call TextBoxBorder ; Draws the box
coord hl, 1, 9 ; Start printing stats from here coord hl, 1, 9 ; Start printing stats from here
ld bc, $0019 ; Number offset ld bc, $0019 ; Number offset
jr .PrintStats jr .PrintStats
.DifferentBox .DifferentBox
coord hl, 9, 2 coord hl, 9, 2
ld b, $8 ld b, 8
ld c, $9 ld c, 9
call TextBoxBorder call TextBoxBorder
coord hl, 11, 3 coord hl, 11, 3
ld bc, $0018 ld bc, $0018
@ -279,7 +279,7 @@ PrintStatsBox:
call PrintStat call PrintStat
ld de, wLoadedMonSpecial ld de, wLoadedMonSpecial
jp PrintNumber jp PrintNumber
PrintStat PrintStat:
push hl push hl
call PrintNumber call PrintNumber
pop hl pop hl

View file

@ -130,6 +130,9 @@ LoadVendingMachineItem:
ret ret
VendingPrices: VendingPrices:
db FRESH_WATER,$00,$02,$00 db FRESH_WATER
db SODA_POP, $00,$03,$00 money 200
db LEMONADE, $00,$03,$50 db SODA_POP
money 300
db LEMONADE
money 350

View file

@ -132,7 +132,7 @@ LoadMonPartySpriteGfxWithLCDDisabled:
ld hl, MonPartySpritePointers ld hl, MonPartySpritePointers
ld a, $1c ld a, $1c
ld bc, $0 ld bc, $0
.asm_7179c .loop
push af push af
push bc push bc
push hl push hl
@ -159,7 +159,7 @@ LoadMonPartySpriteGfxWithLCDDisabled:
ld c, a ld c, a
pop af pop af
dec a dec a
jr nz, .asm_7179c jr nz, .loop
jp EnableLCD jp EnableLCD
MonPartySpritePointers: MonPartySpritePointers:

View file

@ -6,7 +6,7 @@ SetDefaultNames:
ld a, [wd732] ld a, [wd732]
push af push af
ld hl, wPlayerName ld hl, wPlayerName
ld bc, $d8a ld bc, wBoxDataEnd - wPlayerName
xor a xor a
call FillMemory call FillMemory
ld hl, wSpriteStateData1 ld hl, wSpriteStateData1
@ -195,7 +195,7 @@ MovePicLeft:
ld [rWX],a ld [rWX],a
call DelayFrame call DelayFrame
ld a,$E4 ld a,%11100100
ld [rBGP],a ld [rBGP],a
.next .next
call DelayFrame call DelayFrame

View file

@ -73,7 +73,7 @@ SilphCoMapList:
CardKeySuccessText: CardKeySuccessText:
TX_FAR _CardKeySuccessText1 TX_FAR _CardKeySuccessText1
db $0b TX_SFX_ITEM
TX_FAR _CardKeySuccessText2 TX_FAR _CardKeySuccessText2
db "@" db "@"

View file

@ -74,7 +74,7 @@ UsedCutText:
InitCutAnimOAM: InitCutAnimOAM:
xor a xor a
ld [wWhichAnimationOffsets], a ld [wWhichAnimationOffsets], a
ld a, $e4 ld a, %11100100
ld [rOBP1], a ld [rOBP1], a
ld a, [wCutTile] ld a, [wCutTile]
cp $52 cp $52

View file

@ -34,7 +34,7 @@ ShakeElevator:
call PlayMusic call PlayMusic
.musicLoop .musicLoop
ld a, [wChannelSoundIDs + CH4] ld a, [wChannelSoundIDs + CH4]
cp $b9 cp SFX_SAFARI_ZONE_PA
jr z, .musicLoop jr z, .musicLoop
call UpdateSprites call UpdateSprites
jp PlayDefaultMusic jp PlayDefaultMusic
@ -56,7 +56,7 @@ ShakeElevatorRedrawRow:
add hl, de add hl, de
ld a, h ld a, h
and $3 and $3
or $98 or vBGMap0 / $100
ld d, a ld d, a
ld a, l ld a, l
pop hl pop hl

View file

@ -17,11 +17,11 @@ EmotionBubble:
ld [wUpdateSpritesEnabled], a ld [wUpdateSpritesEnabled], a
ld a, [wd736] ld a, [wd736]
bit 6, a ; are the last 4 OAM entries reserved for a shadow or fishing rod? bit 6, a ; are the last 4 OAM entries reserved for a shadow or fishing rod?
ld hl, wOAMBuffer + $8f ld hl, wOAMBuffer + 4 * 35 + $3 ; $8f
ld de, wOAMBuffer + $9f ld de, wOAMBuffer + 4 * 39 + $3 ; $9f
jr z, .next jr z, .next
ld hl, wOAMBuffer + $7f ld hl, wOAMBuffer + 4 * 31 + $3 ; $7f
ld de, wOAMBuffer + $8f ld de, wOAMBuffer + 4 * 35 + $3 ; $8f
; Copy OAM data 16 bytes forward to make room for emotion bubble OAM data at the ; Copy OAM data 16 bytes forward to make room for emotion bubble OAM data at the
; start of the OAM buffer. ; start of the OAM buffer.

View file

@ -27,7 +27,7 @@ FoundHiddenItemText:
ld b, a ld b, a
ld c, 1 ld c, 1
call GiveItem call GiveItem
jr nc, .BagFull jr nc, .bagFull
ld hl, wObtainedHiddenItemsFlags ld hl, wObtainedHiddenItemsFlags
ld a, [wHiddenItemOrCoinsIndex] ld a, [wHiddenItemOrCoinsIndex]
ld c, a ld c, a
@ -37,7 +37,7 @@ FoundHiddenItemText:
call PlaySoundWaitForCurrent call PlaySoundWaitForCurrent
call WaitForSoundToFinish call WaitForSoundToFinish
jp TextScriptEnd jp TextScriptEnd
.BagFull .bagFull
call WaitForTextScrollButtonPress ; wait for button press call WaitForTextScrollButtonPress ; wait for button press
xor a xor a
ld [wDoNotWaitForButtonPressAfterDisplayingText], a ld [wDoNotWaitForButtonPressAfterDisplayingText], a
@ -77,24 +77,24 @@ HiddenCoins:
cp 20 cp 20
jr z, .bcd20 jr z, .bcd20
cp 40 cp 40
jr z, .bcd20 jr z, .bcd20 ; should be bcd40
jr .bcd100 jr .bcd100
.bcd10 .bcd10
ld a, $10 ld a, $10
ld [hCoins + 1], a ld [hCoins + 1], a
jr .bcddone jr .bcdDone
.bcd20 .bcd20
ld a, $20 ld a, $20
ld [hCoins + 1], a ld [hCoins + 1], a
jr .bcddone jr .bcdDone
.bcd40 ; due to a typo, this is never used .bcd40 ; due to a typo, this is never used
ld a, $40 ld a, $40
ld [hCoins + 1], a ld [hCoins + 1], a
jr .bcddone jr .bcdDone
.bcd100 .bcd100
ld a, $1 ld a, $1
ld [hCoins], a ld [hCoins], a
.bcddone .bcdDone
ld de, wPlayerCoins + 1 ld de, wPlayerCoins + 1
ld hl, hCoins + 1 ld hl, hCoins + 1
ld c, $2 ld c, $2
@ -107,13 +107,13 @@ HiddenCoins:
call EnableAutoTextBoxDrawing call EnableAutoTextBoxDrawing
ld a, [wPlayerCoins] ld a, [wPlayerCoins]
cp $99 cp $99
jr nz, .RoomInCoinCase jr nz, .roomInCoinCase
ld a, [wPlayerCoins + 1] ld a, [wPlayerCoins + 1]
cp $99 cp $99
jr nz, .RoomInCoinCase jr nz, .roomInCoinCase
tx_pre_id DroppedHiddenCoinsText tx_pre_id DroppedHiddenCoinsText
jr .done jr .done
.RoomInCoinCase .roomInCoinCase
tx_pre_id FoundHiddenCoinsText tx_pre_id FoundHiddenCoinsText
.done .done
jp PrintPredefTextID jp PrintPredefTextID

View file

@ -393,7 +393,7 @@ UpdateSpriteMovementDelay:
ld l, a ld l, a
ld [hl], $1 ; c1x1 = 1 (mark as ready to move) ld [hl], $1 ; c1x1 = 1 (mark as ready to move)
notYetMoving: notYetMoving:
ld h, $c1 ld h, wSpriteStateData1 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $8 add $8
ld l, a ld l, a
@ -408,7 +408,6 @@ MakeNPCFacePlayer:
ld a, [wd72d] ld a, [wd72d]
bit 5, a bit 5, a
jr nz, notYetMoving jr nz, notYetMoving
res 7, [hl] res 7, [hl]
ld a, [wPlayerDirection] ld a, [wPlayerDirection]
bit PLAYER_DIR_BIT_UP, a bit PLAYER_DIR_BIT_UP, a
@ -449,7 +448,7 @@ InitializeSpriteStatus:
; calculates the spprite's scrren position form its map position and the player position ; calculates the spprite's scrren position form its map position and the player position
InitializeSpriteScreenPosition: InitializeSpriteScreenPosition:
ld h, $c2 ld h, wSpriteStateData2 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $4 add $4
ld l, a ld l, a
@ -477,7 +476,7 @@ CheckSpriteAvailability:
ld a, [$ffe5] ld a, [$ffe5]
and a and a
jp nz, .spriteInvisible jp nz, .spriteInvisible
ld h, $c2 ld h, wSpriteStateData2 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $6 add $6
ld l, a ld l, a
@ -525,7 +524,7 @@ CheckSpriteAvailability:
cp d cp d
jr c, .spriteVisible ; standing on tile with ID >=$60 (top right tile) jr c, .spriteVisible ; standing on tile with ID >=$60 (top right tile)
.spriteInvisible .spriteInvisible
ld h, $c1 ld h, wSpriteStateData1 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $2 add $2
ld l, a ld l, a
@ -579,7 +578,7 @@ UpdateSpriteImage:
; e: X movement delta (-1, 0 or 1) ; e: X movement delta (-1, 0 or 1)
; set carry on failure, clears carry on success ; set carry on failure, clears carry on success
CanWalkOntoTile: CanWalkOntoTile:
ld h, $c2 ld h, wSpriteStateData2 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $6 add $6
ld l, a ld l, a
@ -607,7 +606,7 @@ CanWalkOntoTile:
ld a, [hl] ; $c2x6 (movement byte 1) ld a, [hl] ; $c2x6 (movement byte 1)
inc a inc a
jr z, .impassable ; if $ff, no movement allowed (however, changing direction is) jr z, .impassable ; if $ff, no movement allowed (however, changing direction is)
ld h, $c1 ld h, wSpriteStateData1 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $4 add $4
ld l, a ld l, a
@ -626,14 +625,14 @@ CanWalkOntoTile:
call DetectCollisionBetweenSprites call DetectCollisionBetweenSprites
pop bc pop bc
pop de pop de
ld h, $c1 ld h, wSpriteStateData1 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $c add $c
ld l, a ld l, a
ld a, [hl] ; c1xc (directions in which sprite collision would occur) ld a, [hl] ; c1xc (directions in which sprite collision would occur)
and b ; check against chosen direction (1,2,4 or 8) and b ; check against chosen direction (1,2,4 or 8)
jr nz, .impassable ; collision between sprites, don't go there jr nz, .impassable ; collision between sprites, don't go there
ld h, $c2 ld h, wSpriteStateData2 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $2 add $2
ld l, a ld l, a
@ -690,7 +689,7 @@ CanWalkOntoTile:
; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to ; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to
; hl: output pointer ; hl: output pointer
GetTileSpriteStandsOn: GetTileSpriteStandsOn:
ld h, $c1 ld h, wSpriteStateData1 / $100
ld a, [H_CURRENTSPRITEOFFSET] ld a, [H_CURRENTSPRITEOFFSET]
add $4 add $4
ld l, a ld l, a

View file

@ -6,7 +6,7 @@ PrepareOAMData:
dec a dec a
jr z, .updateEnabled jr z, .updateEnabled
cp 0 - 1 cp -1
ret nz ret nz
ld [wUpdateSpritesEnabled], a ld [wUpdateSpritesEnabled], a
jp HideSprites jp HideSprites

View file

@ -388,7 +388,7 @@ FishingAnim:
set 6, [hl] ; reserve the last 4 OAM entries set 6, [hl] ; reserve the last 4 OAM entries
ld de, RedSprite ld de, RedSprite
ld hl, vNPCSprites ld hl, vNPCSprites
lb bc, BANK(RedSprite), $0c lb bc, BANK(RedSprite), $c
call CopyVideoData call CopyVideoData
ld a, $4 ld a, $4
ld hl, RedFishingTiles ld hl, RedFishingTiles

View file

@ -85,7 +85,7 @@ DisplayPokemartDialogue_:
lb bc, 14, 1 ; location that PrintText always prints to, this is useless lb bc, 14, 1 ; location that PrintText always prints to, this is useless
call PrintText call PrintText
coord hl, 14, 7 coord hl, 14, 7
lb bc, 08, 15 lb bc, 8, 15
ld a,TWO_OPTION_MENU ld a,TWO_OPTION_MENU
ld [wTextBoxID],a ld [wTextBoxID],a
call DisplayTextBoxID ; yes/no menu call DisplayTextBoxID ; yes/no menu

View file

@ -4,16 +4,16 @@ _GetSpritePosition1:
ld a, [wSpriteIndex] ld a, [wSpriteIndex]
ld [H_SPRITEINDEX], a ld [H_SPRITEINDEX], a
call GetSpriteDataPointer call GetSpriteDataPointer
ld a, [hli] ld a, [hli] ; c1x4 (screen Y pos)
ld [$ffeb], a ld [$ffeb], a
inc hl inc hl
ld a, [hl] ld a, [hl] ; c1x6 (screen X pos)
ld [$ffec], a ld [$ffec], a
ld de, $fe ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6)
add hl, de add hl, de
ld a, [hli] ld a, [hli] ; c2x4 (map Y pos)
ld [$ffed], a ld [$ffed], a
ld a, [hl] ld a, [hl] ; c2x5 (map X pos)
ld [$ffee], a ld [$ffee], a
ret ret
@ -28,7 +28,7 @@ _GetSpritePosition2:
inc hl inc hl
ld a, [hl] ; c1x6 (screen X pos) ld a, [hl] ; c1x6 (screen X pos)
ld [wSavedSpriteScreenX], a ld [wSavedSpriteScreenX], a
ld de, $104 - $6 ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6)
add hl, de add hl, de
ld a, [hli] ; c2x4 (map Y pos) ld a, [hli] ; c2x4 (map Y pos)
ld [wSavedSpriteMapY], a ld [wSavedSpriteMapY], a
@ -47,7 +47,7 @@ _SetSpritePosition1:
inc hl inc hl
ld a, [$ffec] ; c1x6 (screen X pos) ld a, [$ffec] ; c1x6 (screen X pos)
ld [hl], a ld [hl], a
ld de, $104 - $6 ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6)
add hl, de add hl, de
ld a, [$ffed] ; c2x4 (map Y pos) ld a, [$ffed] ; c2x4 (map Y pos)
ld [hli], a ld [hli], a
@ -57,21 +57,21 @@ _SetSpritePosition1:
_SetSpritePosition2: _SetSpritePosition2:
ld hl, wSpriteStateData1 ld hl, wSpriteStateData1
ld de, $0004 ld de, 4
ld a, [wSpriteIndex] ld a, [wSpriteIndex]
ld [H_SPRITEINDEX], a ld [H_SPRITEINDEX], a
call GetSpriteDataPointer call GetSpriteDataPointer
ld a, [wSavedSpriteScreenY] ld a, [wSavedSpriteScreenY]
ld [hli], a ld [hli], a ; c1x4 (screen Y pos)
inc hl inc hl
ld a, [wSavedSpriteScreenX] ld a, [wSavedSpriteScreenX]
ld [hl], a ld [hl], a ; c1x6 (screen X pos)
ld de, $00fe ld de, (wSpriteStateData2 + $4) - (wSpriteStateData1 + $6)
add hl, de add hl, de
ld a, [wSavedSpriteMapY] ld a, [wSavedSpriteMapY]
ld [hli], a ld [hli], a ; c2x4 (map Y pos)
ld a, [wSavedSpriteMapX] ld a, [wSavedSpriteMapX]
ld [hl], a ld [hl], a ; c2x5 (map X pos)
ret ret
TrainerWalkUpToPlayer: TrainerWalkUpToPlayer:
@ -80,11 +80,11 @@ TrainerWalkUpToPlayer:
ld [wTrainerSpriteOffset], a ld [wTrainerSpriteOffset], a
call ReadTrainerScreenPosition call ReadTrainerScreenPosition
ld a, [wTrainerFacingDirection] ld a, [wTrainerFacingDirection]
and a and a ; SPRITE_FACING_DOWN
jr z, .facingDown jr z, .facingDown
cp $4 cp SPRITE_FACING_UP
jr z, .facingUp jr z, .facingUp
cp $8 cp SPRITE_FACING_LEFT
jr z, .facingLeft jr z, .facingLeft
jr .facingRight jr .facingRight
.facingDown .facingDown
@ -148,7 +148,7 @@ TrainerWalkUpToPlayer:
jp MoveSprite_ jp MoveSprite_
; input: de = offset within sprite entry ; input: de = offset within sprite entry
; output: de = pointer to sprite data ; output: hl = pointer to sprite data
GetSpriteDataPointer: GetSpriteDataPointer:
push de push de
add hl, de add hl, de
@ -225,7 +225,7 @@ TrainerEngage:
set 0, [hl] set 0, [hl]
call EngageMapTrainer call EngageMapTrainer
ld a, $ff ld a, $ff
.noEngage: .noEngage
ld [wTrainerSpriteOffset], a ld [wTrainerSpriteOffset], a
pop de pop de
pop hl pop hl
@ -239,7 +239,7 @@ ReadTrainerScreenPosition:
ld e, a ld e, a
ld hl, wSpriteStateData1 ld hl, wSpriteStateData1
add hl, de add hl, de
ld a, [hl] ld a, [hl] ; c1x4 (sprite Y pos)
ld [wTrainerScreenY], a ld [wTrainerScreenY], a
ld a, [wTrainerSpriteOffset] ld a, [wTrainerSpriteOffset]
add $6 add $6
@ -247,7 +247,7 @@ ReadTrainerScreenPosition:
ld e, a ld e, a
ld hl, wSpriteStateData1 ld hl, wSpriteStateData1
add hl, de add hl, de
ld a, [hl] ld a, [hl] ; c1x6 (sprite X pos)
ld [wTrainerScreenX], a ld [wTrainerScreenX], a
ret ret
@ -262,13 +262,13 @@ CheckSpriteCanSeePlayer:
jr .notInLine ; player too far away jr .notInLine ; player too far away
.checkIfLinedUp .checkIfLinedUp
ld a, [wTrainerFacingDirection] ; sprite facing direction ld a, [wTrainerFacingDirection] ; sprite facing direction
cp $0 ; down cp SPRITE_FACING_DOWN
jr z, .checkXCoord jr z, .checkXCoord
cp $4 ; up cp SPRITE_FACING_UP
jr z, .checkXCoord jr z, .checkXCoord
cp $8 ; left cp SPRITE_FACING_LEFT
jr z, .checkYCoord jr z, .checkYCoord
cp $c ; right cp SPRITE_FACING_RIGHT
jr z, .checkYCoord jr z, .checkYCoord
jr .notInLine jr .notInLine
.checkXCoord .checkXCoord
@ -315,21 +315,21 @@ CheckPlayerIsInFrontOfSprite:
ld a, [hl] ; c1x6 (sprite screen X pos) ld a, [hl] ; c1x6 (sprite screen X pos)
ld [wTrainerScreenX], a ld [wTrainerScreenX], a
ld a, [wTrainerFacingDirection] ; facing direction ld a, [wTrainerFacingDirection] ; facing direction
cp $0 cp SPRITE_FACING_DOWN
jr nz, .notFacingDown jr nz, .notFacingDown
ld a, [wTrainerScreenY] ; sprite screen Y pos ld a, [wTrainerScreenY] ; sprite screen Y pos
cp $3c cp $3c
jr c, .engage ; sprite above player jr c, .engage ; sprite above player
jr .noEngage ; sprite below player jr .noEngage ; sprite below player
.notFacingDown .notFacingDown
cp $4 cp SPRITE_FACING_UP
jr nz, .notFacingUp jr nz, .notFacingUp
ld a, [wTrainerScreenY] ; sprite screen Y pos ld a, [wTrainerScreenY] ; sprite screen Y pos
cp $3c cp $3c
jr nc, .engage ; sprite below player jr nc, .engage ; sprite below player
jr .noEngage ; sprite above player jr .noEngage ; sprite above player
.notFacingUp .notFacingUp
cp $8 cp SPRITE_FACING_LEFT
jr nz, .notFacingLeft jr nz, .notFacingLeft
ld a, [wTrainerScreenX] ; sprite screen X pos ld a, [wTrainerScreenX] ; sprite screen X pos
cp $40 cp $40

View file

@ -27,10 +27,10 @@ GetPredefPointer:
add a add a
add e add e
ld e,a ld e,a
jr nc,.next jr nc, .nocarry
inc d inc d
.next .nocarry
add hl,de add hl,de
ld d,h ld d,h
ld e,l ld e,l
@ -60,7 +60,7 @@ PredefPointers::
add_predef CopyDownscaledMonTiles add_predef CopyDownscaledMonTiles
add_predef LoadMissableObjects add_predef LoadMissableObjects
add_predef HealParty add_predef HealParty
add_predef MoveAnimation; 08 play move animation add_predef MoveAnimation
add_predef DivideBCDPredef add_predef DivideBCDPredef
add_predef DivideBCDPredef2 add_predef DivideBCDPredef2
add_predef AddBCDPredef add_predef AddBCDPredef
@ -81,8 +81,8 @@ PredefPointers::
add_predef LearnMoveFromLevelUp add_predef LearnMoveFromLevelUp
add_predef LearnMove add_predef LearnMove
add_predef GetQuantityOfItemInBag add_predef GetQuantityOfItemInBag
dbw $03,CheckForHiddenObjectOrBookshelfOrCardKeyDoor ; for these two, the bank number is actually 0 dbw $03,CheckForHiddenObjectOrBookshelfOrCardKeyDoor ; home bank
dbw $03,GiveItem dbw $03,GiveItem ; home bank
add_predef ChangeBGPalColor0_4Frames add_predef ChangeBGPalColor0_4Frames
add_predef FindPathToPlayer add_predef FindPathToPlayer
add_predef PredefShakeScreenVertically add_predef PredefShakeScreenVertically
@ -122,7 +122,7 @@ PredefPointers::
add_predef CanLearnTM add_predef CanLearnTM
add_predef TMToMove add_predef TMToMove
add_predef _RunPaletteCommand add_predef _RunPaletteCommand
add_predef StarterDex ; 46 add_predef StarterDex
add_predef _AddPartyMon add_predef _AddPartyMon
add_predef UpdateHPBar2 add_predef UpdateHPBar2
add_predef DrawEnemyHUDAndHPBar add_predef DrawEnemyHUDAndHPBar
@ -147,7 +147,7 @@ PredefPointers::
add_predef PickUpItem add_predef PickUpItem
add_predef PrintMoveType add_predef PrintMoveType
add_predef LoadMovePPs add_predef LoadMovePPs
add_predef DrawHP ; 5F add_predef DrawHP
add_predef DrawHP2 add_predef DrawHP2
add_predef DisplayElevatorFloorMenu add_predef DisplayElevatorFloorMenu
add_predef OaksAideScript add_predef OaksAideScript

View file

@ -638,7 +638,7 @@ SaveHallOfFameTeams:
ld a, [wNumHoFTeams] ld a, [wNumHoFTeams]
dec a dec a
cp HOF_TEAM_CAPACITY cp HOF_TEAM_CAPACITY
jr nc, .asm_73b28 jr nc, .shiftHOFTeams
ld hl, sHallOfFame ld hl, sHallOfFame
ld bc, HOF_TEAM ld bc, HOF_TEAM
call AddNTimes call AddNTimes
@ -648,7 +648,9 @@ SaveHallOfFameTeams:
ld bc, HOF_TEAM ld bc, HOF_TEAM
jr HallOfFame_Copy jr HallOfFame_Copy
.asm_73b28 .shiftHOFTeams
; if the space designated for HOF teams is full, then shift all HOF teams to the next slot, making space for the new HOF team
; this deletes the last HOF team though
ld hl, sHallOfFame + HOF_TEAM ld hl, sHallOfFame + HOF_TEAM
ld de, sHallOfFame ld de, sHallOfFame
ld bc, HOF_TEAM * (HOF_TEAM_CAPACITY - 1) ld bc, HOF_TEAM * (HOF_TEAM_CAPACITY - 1)

View file

@ -864,7 +864,7 @@ LoadSlotMachineTiles:
call FarCopyData2 call FarCopyData2
ld hl, SlotMachineMap ld hl, SlotMachineMap
coord de, 0, 0 coord de, 0, 0
ld bc, $00f0 ld bc, SlotMachineMapEnd - SlotMachineMap
call CopyData call CopyData
call EnableLCD call EnableLCD
ld hl, wSlotMachineWheel1Offset ld hl, wSlotMachineWheel1Offset
@ -878,6 +878,7 @@ LoadSlotMachineTiles:
SlotMachineMap: SlotMachineMap:
INCBIN "gfx/tilemaps/slotmachine.map" INCBIN "gfx/tilemaps/slotmachine.map"
SlotMachineMapEnd:
INCLUDE "data/slot_machine_wheels.asm" INCLUDE "data/slot_machine_wheels.asm"

View file

@ -169,7 +169,7 @@ ENDC
db -1,2 db -1,2
db 0 ; terminate list with 0 db 0 ; terminate list with 0
.ScrollTitleScreenPokemonLogo .ScrollTitleScreenPokemonLogo:
; Scrolls the Pokemon logo on the title screen to create the bouncing effect ; Scrolls the Pokemon logo on the title screen to create the bouncing effect
; Scrolls d pixels e times ; Scrolls d pixels e times
call DelayFrame call DelayFrame

View file

@ -67,7 +67,7 @@ _TitleScroll:
pop bc pop bc
jr _TitleScroll jr _TitleScroll
.ScrollBetween .ScrollBetween:
.wait .wait
ld a, [rLY] ; rLY ld a, [rLY] ; rLY
cp l cp l

View file

@ -141,7 +141,7 @@ LoadTownMap_Fly:
call LoadFontTilePatterns call LoadFontTilePatterns
ld de, BirdSprite ld de, BirdSprite
ld hl, vSprites + $40 ld hl, vSprites + $40
lb bc, BANK(BirdSprite), $0c lb bc, BANK(BirdSprite), $c
call CopyVideoData call CopyVideoData
ld de, TownMapUpArrow ld de, TownMapUpArrow
ld hl, vChars1 + $6d0 ld hl, vChars1 + $6d0
@ -179,7 +179,7 @@ LoadTownMap_Fly:
ld c, 15 ld c, 15
call DelayFrames call DelayFrames
coord hl, 18, 0 coord hl, 18, 0
ld [hl], $ed ld [hl], "▶"
coord hl, 19, 0 coord hl, 19, 0
ld [hl], $ee ld [hl], $ee
pop hl pop hl
@ -355,12 +355,12 @@ DrawPlayerOrBirdSprite:
call WritePlayerOrBirdSpriteOAM call WritePlayerOrBirdSpriteOAM
pop hl pop hl
ld de, wcd6d ld de, wcd6d
.asm_711dc .loop
ld a, [hli] ld a, [hli]
ld [de], a ld [de], a
inc de inc de
cp $50 cp "@"
jr nz, .asm_711dc jr nz, .loop
ld hl, wOAMBuffer ld hl, wOAMBuffer
ld de, wTileMapBackup ld de, wTileMapBackup
ld bc, $a0 ld bc, $a0
@ -397,8 +397,8 @@ DisplayWildLocations:
jr nz, .drawPlayerSprite jr nz, .drawPlayerSprite
; if no OAM entries were written, print area unknown text ; if no OAM entries were written, print area unknown text
coord hl, 1, 7 coord hl, 1, 7
ld b, $2 ld b, 2
ld c, $f ld c, 15
call TextBoxBorder call TextBoxBorder
coord hl, 2, 9 coord hl, 2, 9
ld de, AreaUnknownText ld de, AreaUnknownText

View file

@ -305,7 +305,7 @@ Trade_AnimateBallEnteringLinkCable:
ld [rOBP0], a ld [rOBP0], a
xor a xor a
ld [wLinkCableAnimBulgeToggle], a ld [wLinkCableAnimBulgeToggle], a
ld bc, $2060 lb bc, $20, $60
.moveBallInsideLinkCableLoop .moveBallInsideLinkCableLoop
push bc push bc
xor a xor a
@ -380,7 +380,7 @@ Trade_AnimLeftToRight:
call Trade_InitGameboyTransferGfx call Trade_InitGameboyTransferGfx
ld a, $1 ld a, $1
ld [wTradedMonMovingRight], a ld [wTradedMonMovingRight], a
ld a, $e4 ld a, %11100100
ld [rOBP0], a ld [rOBP0], a
ld a, $54 ld a, $54
ld [wBaseCoordX], a ld [wBaseCoordX], a
@ -466,7 +466,7 @@ Trade_DrawLeftGameboy:
ld a, $5d ld a, $5d
ld [hli], a ld [hli], a
ld a, $5e ld a, $5e
ld c, $8 ld c, 8
.loop .loop
ld [hli], a ld [hli], a
dec c dec c
@ -526,8 +526,8 @@ Trade_DrawRightGameboy:
; draw text box with enemy name above link cable ; draw text box with enemy name above link cable
coord hl, 6, 0 coord hl, 6, 0
ld b, $2 ld b, 2
ld c, $7 ld c, 7
call TextBoxBorder call TextBoxBorder
coord hl, 7, 2 coord hl, 7, 2
ld de, wLinkEnemyTrainerName ld de, wLinkEnemyTrainerName

View file

@ -4710,8 +4710,8 @@ TextPredefs::
add_tx_pre LinkCableHelp ; 34 add_tx_pre LinkCableHelp ; 34
add_tx_pre TMNotebook ; 35 add_tx_pre TMNotebook ; 35
add_tx_pre FightingDojoText ; 36 add_tx_pre FightingDojoText ; 36
add_tx_pre FightingDojoText_52a10 ; 37 add_tx_pre EnemiesOnEverySideText ; 37
add_tx_pre FightingDojoText_52a1d ; 38 add_tx_pre WhatGoesAroundComesAroundText ; 38
add_tx_pre NewBicycleText ; 39 add_tx_pre NewBicycleText ; 39
add_tx_pre IndigoPlateauStatues ; 3A add_tx_pre IndigoPlateauStatues ; 3A
add_tx_pre VermilionGymTrashSuccessText1 ; 3B add_tx_pre VermilionGymTrashSuccessText1 ; 3B

View file

@ -52,28 +52,28 @@ PlaceNextChar::
ld a,[de] ld a,[de]
cp "@" cp "@"
jr nz,.PlaceText jr nz, Char4ETest
ld b,h ld b,h
ld c,l ld c,l
pop hl pop hl
ret ret
.PlaceText Char4ETest::
cp $4E cp $4E ; next
jr nz,.next jr nz, .char4FTest
ld bc,SCREEN_WIDTH * 2 ld bc, 2 * SCREEN_WIDTH
ld a,[hFlags_0xFFF6] ld a,[hFlags_0xFFF6]
bit 2,a bit 2,a
jr z,.next2 jr z,.ok
ld bc,SCREEN_WIDTH ld bc,SCREEN_WIDTH
.next2 .ok
pop hl pop hl
add hl,bc add hl,bc
push hl push hl
jp PlaceNextChar_inc jp PlaceNextChar_inc
.next .char4FTest
cp $4F cp $4F ; line
jr nz,.next3 jr nz,.next3
pop hl pop hl
coord hl, 1, 16 coord hl, 1, 16
@ -81,46 +81,36 @@ PlaceNextChar::
jp PlaceNextChar_inc jp PlaceNextChar_inc
.next3 ; Check against a dictionary .next3 ; Check against a dictionary
dict: macro
if \1 == 0
and a and a
jp z,Char00 else
cp $4C cp \1
jp z,Char4C endc
cp $4B jp z, \2
jp z,Char4B endm
cp $51
jp z,Char51 dict $00, Char00 ; error
cp $49 dict $4C, Char4C ; autocont
jp z,Char49 dict $4B, Char4B ; cont_
cp $52 dict $51, Char51 ; para
jp z,Char52 dict $49, Char49 ; page
cp $53 dict $52, Char52 ; player
jp z,Char53 dict $53, Char53 ; rival
cp $54 dict $54, Char54 ; POKé
jp z,Char54 dict $5B, Char5B ; PC
cp $5B dict $5E, Char5E ; ROCKET
jp z,Char5B dict $5C, Char5C ; TM
cp $5E dict $5D, Char5D ; TRAINER
jp z,Char5E dict $55, Char55 ; cont
cp $5C dict $56, Char56 ; 6 dots
jp z,Char5C dict $57, Char57 ; done
cp $5D dict $58, Char58 ; prompt
jp z,Char5D dict $4A, Char4A ; PKMN
cp $55 dict $5F, Char5F ; dex
jp z,Char55 dict $59, Char59 ; TARGET
cp $56 dict $5A, Char5A ; USER
jp z,Char56
cp $57
jp z,Char57
cp $58
jp z,Char58
cp $4A
jp z,Char4A
cp $5F
jp z,Char5F
cp $59
jp z,Char59
cp $5A
jp z,Char5A
ld [hli],a ld [hli],a
call PrintLetterDelay call PrintLetterDelay
PlaceNextChar_inc:: PlaceNextChar_inc::
@ -211,7 +201,6 @@ MonsterNameCharsCommon::
; print “Enemy ” ; print “Enemy ”
ld de,Char5AText ld de,Char5AText
call PlaceString call PlaceString
ld h,b ld h,b
ld l,c ld l,c
ld de,wEnemyMonNick ; enemy active monster name ld de,wEnemyMonNick ; enemy active monster name
@ -264,36 +253,36 @@ Char5F::
pop hl pop hl
ret ret
Char58:: Char58:: ; prompt
ld a,[wLinkState] ld a,[wLinkState]
cp LINK_STATE_BATTLING cp LINK_STATE_BATTLING
jp z,Next1AA2 jp z, .ok
ld a,$EE ld a, $EE
Coorda 18, 16 Coorda 18, 16
Next1AA2:: .ok
call ProtectedDelay3 call ProtectedDelay3
call ManualTextScroll call ManualTextScroll
ld a, " " ld a, " "
Coorda 18, 16 Coorda 18, 16
Char57:: Char57:: ; done
pop hl pop hl
ld de,Char58Text ld de, Char58Text
dec de dec de
ret ret
Char58Text:: Char58Text::
db "@" db "@"
Char51:: Char51:: ; para
push de push de
ld a,$EE ld a, $EE
Coorda 18, 16 Coorda 18, 16
call ProtectedDelay3 call ProtectedDelay3
call ManualTextScroll call ManualTextScroll
coord hl, 1, 13 coord hl, 1, 13
lb bc, 4, 18 lb bc, 4, 18
call ClearScreenArea call ClearScreenArea
ld c,20 ld c, 20
call DelayFrames call DelayFrames
pop de pop de
coord hl, 1, 14 coord hl, 1, 14
@ -328,13 +317,13 @@ Char4B::
;fall through ;fall through
Char4C:: Char4C::
push de push de
call Next1B18 call ScrollTextUpOneLine
call Next1B18 call ScrollTextUpOneLine
coord hl, 1, 16 coord hl, 1, 16
pop de pop de
jp PlaceNextChar_inc jp PlaceNextChar_inc
Next1B18:: ScrollTextUpOneLine::
coord hl, 0, 14 coord hl, 0, 14
coord de, 0, 13 coord de, 0, 13
ld b,60 ld b,60
@ -372,7 +361,7 @@ TextCommandProcessor::
push af push af
set 1,a set 1,a
ld e,a ld e,a
ld a,[$fff4] ld a, [$fff4]
xor e xor e
ld [wLetterPrintingDelayFlags],a ld [wLetterPrintingDelayFlags],a
ld a,c ld a,c
@ -389,22 +378,22 @@ NextTextCommand::
ret ret
.doTextCommand .doTextCommand
push hl push hl
cp a,$17 cp a, $17
jp z,TextCommand17 jp z, TextCommand17
cp a,$0e cp a, $0e
jp nc,TextCommand0B ; if a != 0x17 and a >= 0xE, go to command 0xB jp nc,TextCommand0B ; if a != 0x17 and a >= 0xE, go to command 0xB
; if a < 0xE, use a jump table ; if a < 0xE, use a jump table
ld hl,TextCommandJumpTable ld hl,TextCommandJumpTable
push bc push bc
add a add a
ld b,$00 ld b, 0
ld c,a ld c, a
add hl,bc add hl, bc
pop bc pop bc
ld a,[hli] ld a, [hli]
ld h,[hl] ld h, [hl]
ld l,a ld l, a
jp [hl] jp hl
; draw box ; draw box
; 04AAAABBCC ; 04AAAABBCC
@ -523,10 +512,10 @@ TextCommand06::
; 07 ; 07
; (no arguments) ; (no arguments)
TextCommand07:: TextCommand07::
ld a," " ld a, " "
Coorda 18, 16 ; place blank space in lower right corner of dialogue text box Coorda 18, 16 ; place blank space in lower right corner of dialogue text box
call Next1B18 ; scroll up text call ScrollTextUpOneLine
call Next1B18 call ScrollTextUpOneLine
pop hl pop hl
coord bc, 1, 16 ; address of second line of dialogue text box coord bc, 1, 16 ; address of second line of dialogue text box
jp NextTextCommand jp NextTextCommand
@ -537,7 +526,7 @@ TextCommand08::
pop hl pop hl
ld de,NextTextCommand ld de,NextTextCommand
push de ; return address push de ; return address
jp [hl] jp hl
; print decimal number (converted from binary number) ; print decimal number (converted from binary number)
; 09AAAABB ; 09AAAABB
@ -626,16 +615,16 @@ TextCommand0B::
; format: text command ID, sound ID or cry ID ; format: text command ID, sound ID or cry ID
TextCommandSounds:: TextCommandSounds::
db $0B,SFX_GET_ITEM_1 db $0B, SFX_GET_ITEM_1
db $12,SFX_CAUGHT_MON db $12, SFX_CAUGHT_MON
db $0E,SFX_POKEDEX_RATING db $0E, SFX_POKEDEX_RATING
db $0F,SFX_GET_ITEM_1 db $0F, SFX_GET_ITEM_1
db $10,SFX_GET_ITEM_2 db $10, SFX_GET_ITEM_2
db $11,SFX_GET_KEY_ITEM db $11, SFX_GET_KEY_ITEM
db $13,SFX_DEX_PAGE_ADDED db $13, SFX_DEX_PAGE_ADDED
db $14,NIDORINA ; used in OakSpeech db $14, NIDORINA ; used in OakSpeech
db $15,PIDGEOT ; used in SaffronCityText12 db $15, PIDGEOT ; used in SaffronCityText12
db $16,DEWGONG ; unused? db $16, DEWGONG ; unused?
; draw ellipses ; draw ellipses
; 0CAA ; 0CAA

View file

@ -81,29 +81,62 @@ bcd3: MACRO
coins equs "bcd2" coins equs "bcd2"
money equs "bcd3" money equs "bcd3"
validateCoords: MACRO
if \1 >= SCREEN_WIDTH
fail "x coord out of range"
endc
if \2 >= SCREEN_HEIGHT
fail "y coord out of range"
endc
endm
;\1 = r ;\1 = r
;\2 = X ;\2 = X
;\3 = Y ;\3 = Y
;\4 = which tilemap (optional)
coord: MACRO coord: MACRO
ld \1, wTileMap + 20 * \3 + \2 validateCoords \2, \3
if _NARG >= 4
ld \1, \4 + SCREEN_WIDTH * \3 + \2
else
ld \1, wTileMap + SCREEN_WIDTH * \3 + \2
endc
ENDM ENDM
;\1 = X ;\1 = X
;\2 = Y ;\2 = Y
;\3 = which tilemap (optional)
aCoord: MACRO aCoord: MACRO
ld a, [wTileMap + 20 * \2 + \1] validateCoords \1, \2
if _NARG >= 3
ld a, [\3 + SCREEN_WIDTH * \2 + \1]
else
ld a, [wTileMap + SCREEN_WIDTH * \2 + \1]
endc
ENDM ENDM
;\1 = X ;\1 = X
;\2 = Y ;\2 = Y
;\3 = which tilemap (optional)
Coorda: MACRO Coorda: MACRO
ld [wTileMap + 20 * \2 + \1], a validateCoords \1, \2
if _NARG >= 3
ld [\3 + SCREEN_WIDTH * \2 + \1], a
else
ld [wTileMap + SCREEN_WIDTH * \2 + \1], a
endc
ENDM ENDM
;\1 = X ;\1 = X
;\2 = Y ;\2 = Y
;\3 = which tilemap (optional)
dwCoord: MACRO dwCoord: MACRO
dw wTileMap + 20 * \2 + \1 validateCoords \1, \2
if _NARG >= 3
dw \3 + SCREEN_WIDTH * \2 + \1
else
dw wTileMap + SCREEN_WIDTH * \2 + \1
endc
ENDM ENDM
;\1 = r ;\1 = r
@ -134,7 +167,7 @@ EMAP: MACRO ; emap x-coordinate,y-coordinate,textpointer
; nybble: y-coordinate ; nybble: y-coordinate
; nybble: x-coordinate ; nybble: x-coordinate
; word : pointer to map name ; word : pointer to map name
db (\1 + (\2 << 4)) dn \2, \1
dw \3 dw \3
ENDM ENDM
@ -146,7 +179,7 @@ IMAP: MACRO ; imap mapid_less_than,x-coordinate,y-coordinate,textpointer
; nybble: x-coordinate ; nybble: x-coordinate
; word : pointer to map name ; word : pointer to map name
db \1 + 1 db \1 + 1
db \2 + \3 << 4 dn \3, \2
dw \4 dw \4
ENDM ENDM
@ -174,28 +207,30 @@ dbw: MACRO
dw \2 dw \2
ENDM ENDM
dba: MACRO
dbw BANK(\1), \1
ENDM
dwb: MACRO
dw \1
db \2
ENDM
dab: MACRO
dwb \1, BANK(\1)
ENDM
dbbw: MACRO
db \1, \2
dw \3
ENDM
; data format macros ; data format macros
RGB: MACRO RGB: MACRO
dw (\3 << 10 | \2 << 5 | \1) dw (\3 << 10 | \2 << 5 | \1)
ENDM ENDM
; text macros ; text macros
TX_NUM: MACRO
; print a big-endian decimal number.
; \1: address to read from
; \2: number of bytes to read
; \3: number of digits to display
db $09
dw \1
db \2 << 4 | \3
ENDM
TX_FAR: MACRO
db $17
dw \1
db BANK(\1)
ENDM
; text engine command $1 ; text engine command $1
TX_RAM: MACRO TX_RAM: MACRO
; prints text to screen ; prints text to screen
@ -212,6 +247,46 @@ TX_BCD: MACRO
db \2 db \2
ENDM ENDM
TX_CURSOR: MACRO
; Move cursor to (\1, \2)
; \1: X coord (0 - 19)
; \2: Y coord (0 - 17)
db $3
dwCoord \1, \2
ENDM
TX_LINE EQUS "db $05"
TX_BUTTON_SOUND EQUS "db $06"
TX_ASM EQUS "db $08"
TX_NUM: MACRO
; print a big-endian decimal number.
; \1: address to read from
; \2: number of bytes to read
; \3: number of digits to display
db $09
dw \1
db \2 << 4 | \3
ENDM
TX_SFX_ITEM EQUS "db $0b"
TX_WAIT_BUTTON EQUS "db $0d"
TX_SFX_CONGRATS EQUS "db $10"
TX_SFX_KEY_ITEM EQUS "db $11"
TX_FAR: MACRO
; 17AAAABB (call text at BB:AAAA)
db $17
dab \1
ENDM
TX_VENDING_MACHINE EQUS "db $f5"
TX_CABLE_CLUB_RECEPTIONIST EQUS "db $f6"
TX_PRIZE_VENDOR EQUS "db $f7"
TX_POKECENTER_PC EQUS "db $f9"
TX_PLAYERS_PC EQUS "db $fc"
TX_BILLS_PC EQUS "db $fd"
TX_MART: MACRO TX_MART: MACRO
db $FE, _NARG db $FE, _NARG
rept _NARG rept _NARG
@ -221,23 +296,13 @@ TX_MART: MACRO
db $FF db $FF
ENDM ENDM
TX_LINE EQUS "db $05"
TX_BUTTON_SOUND EQUS "db $06"
TX_ASM EQUS "db $08"
TX_SFX_ITEM EQUS "db $0b"
TX_WAIT_BUTTON EQUS "db $0d"
TX_SFX_CONGRATS EQUS "db $10"
TX_SFX_KEY_ITEM EQUS "db $11"
TX_VENDING_MACHINE EQUS "db $f5"
TX_CABLE_CLUB_RECEPTIONIST EQUS "db $f6"
TX_PRIZE_VENDOR EQUS "db $f7"
TX_POKECENTER_PC EQUS "db $f9"
TX_PLAYERS_PC EQUS "db $fc"
TX_BILLS_PC EQUS "db $fd"
TX_POKECENTER_NURSE EQUS "db $ff" TX_POKECENTER_NURSE EQUS "db $ff"
; Predef macro. ; Predef macro.
predef_const: MACRO
const \1PredefID
ENDM
add_predef: MACRO add_predef: MACRO
\1Predef:: \1Predef::
db BANK(\1) db BANK(\1)
@ -258,11 +323,18 @@ predef_jump: MACRO
jp Predef jp Predef
ENDM ENDM
tx_pre_const: MACRO
const \1_id
ENDM
add_tx_pre: MACRO add_tx_pre: MACRO
\1_id:: dw \1 \1_id:: dw \1
ENDM ENDM
db_tx_pre: MACRO
db (\1_id - TextPredefs) / 2 + 1
ENDM
tx_pre_id: MACRO tx_pre_id: MACRO
ld a, (\1_id - TextPredefs) / 2 + 1 ld a, (\1_id - TextPredefs) / 2 + 1
ENDM ENDM
@ -674,9 +746,9 @@ ENDM
tmlearn: MACRO tmlearn: MACRO
x = 0 x = 0
rept _NARG rept _NARG
if \1 != 0 IF \1 != 0
x = x | (1 << ((\1 - 1) % 8)) x = x | (1 << ((\1 - 1) % 8))
endc ENDC
shift shift
endr endr
db x db x

View file

@ -781,12 +781,12 @@ _ViridianSchoolNotebookText4::
line "#MON LEAGUE!" line "#MON LEAGUE!"
prompt prompt
_FightingDojoText_52a10:: _EnemiesOnEverySideText::
text "Enemies on every" text "Enemies on every"
line "side!" line "side!"
done done
_FightingDojoText_52a1d:: _WhatGoesAroundComesAroundText::
text "What goes around" text "What goes around"
line "comes around!" line "comes around!"
done done

View file

@ -1778,7 +1778,7 @@ wEnemyNumAttacksLeft:: ; d06f
wEnemyConfusedCounter:: ; d070 wEnemyConfusedCounter:: ; d070
ds 1 ds 1
wEnemyToxcCounter:: ; d071 wEnemyToxicCounter:: ; d071
ds 1 ds 1
wEnemyDisabledMove:: ; d072 wEnemyDisabledMove:: ; d072