pokeyellow/home/text_script.asm
dannye bc2354dd66
Some checks failed
CI / build (push) Has been cancelled
CI / build-macos (push) Has been cancelled
Merge branch 'master' of https://github.com/pret/pokered
2026-01-17 22:38:33 -06:00

226 lines
5.3 KiB
NASM

UnknownText_2812:: ; unreferenced
text_far _PokemonText
text_end
; this function is used to display sign messages, sprite dialog, etc.
; INPUT: [hSpriteIndex] = sprite ID or [hTextID] = text ID
DisplayTextID::
ASSERT hSpriteIndex == hTextID ; these are at the same memory location
ldh a, [hLoadedROMBank]
push af
farcall DisplayTextIDInit ; initialization
ld hl, wTextPredefFlag
bit BIT_TEXT_PREDEF, [hl]
res BIT_TEXT_PREDEF, [hl]
jr nz, .skipSwitchToMapBank
ld a, [wCurMap]
call SwitchToMapRomBank
.skipSwitchToMapBank
ld a, 30 ; half a second
ldh [hFrameCounter], a ; used as joypad poll timer
ld hl, wCurMapTextPtr
ld a, [hli]
ld h, [hl]
ld l, a ; hl = map text pointer
ld d, $00
ldh a, [hTextID]
ld [wSpriteIndex], a
dict TEXT_START_MENU, DisplayStartMenu
dict TEXT_PIKACHU_ANIM, DisplayPikachuEmotion
dict TEXT_SAFARI_GAME_OVER, DisplaySafariGameOverText
dict TEXT_MON_FAINTED, DisplayPokemonFaintedText
dict TEXT_BLACKED_OUT, DisplayPlayerBlackedOutText
dict TEXT_REPEL_WORE_OFF, DisplayRepelWoreOffText
ld a, [wNumSprites]
ld e, a
ldh a, [hSpriteIndex] ; sprite ID
cp e
jr z, .spriteHandling
jr nc, .skipSpriteHandling
.spriteHandling
; get the text ID of the sprite
push hl
ld hl, wMapSpriteData ; NPC text entries
ldh a, [hSpriteIndex]
dec a
add a
ld e, a
ld d, 0
add hl, de
inc hl
ld a, [hl] ; a = text ID of the sprite
pop hl
.skipSpriteHandling
; look up the address of the text in the map's text entries
dec a
ld e, a
ld d, 0
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a ; hl = address of the text
ld a, [hl] ; a = first byte of text
; check first byte of text for special cases
MACRO dict2
cp \1
jr nz, .not\@
\2
jr AfterDisplayingTextID
.not\@
ENDM
dict TX_SCRIPT_MART, DisplayPokemartDialogue
dict TX_SCRIPT_POKECENTER_NURSE, DisplayPokemonCenterDialogue
dict TX_SCRIPT_PLAYERS_PC, TextScript_ItemStoragePC
dict TX_SCRIPT_BILLS_PC, TextScript_BillsPC
dict TX_SCRIPT_POKECENTER_PC, TextScript_PokemonCenterPC
dict2 TX_SCRIPT_VENDING_MACHINE, farcall VendingMachineMenu
dict TX_SCRIPT_PRIZE_VENDOR, TextScript_GameCornerPrizeMenu
dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callfar CableClubNPC
call PrintText_NoCreatingTextBox
ld a, [wDoNotWaitForButtonPressAfterDisplayingText]
and a
jr nz, HoldTextDisplayOpen
AfterDisplayingTextID::
ld a, [wEnteringCableClub]
and a
jr nz, HoldTextDisplayOpen
call WaitForTextScrollButtonPress
; loop to hold the dialogue box open as long as the player keeps holding down the A button
HoldTextDisplayOpen::
call Joypad
ldh a, [hJoyHeld]
bit B_PAD_A, a
jr nz, HoldTextDisplayOpen
CloseTextDisplay::
ld a, [wCurMap]
call SwitchToMapRomBank
ld a, $90
ldh [hWY], a ; move the window off the screen
call DelayFrame
call LoadGBPal
xor a
ldh [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank
; loop to make sprites face the directions they originally faced before the dialogue
ld hl, wSprite01StateData2OrigFacingDirection
ld c, NUM_SPRITESTATEDATA_STRUCTS - 1
ld de, SPRITESTATEDATA1_LENGTH
.restoreSpriteFacingDirectionLoop
ld a, [hl] ; x#SPRITESTATEDATA2_ORIGFACINGDIRECTION
dec h
ld [hl], a ; [x#SPRITESTATEDATA1_FACINGDIRECTION]
inc h
add hl, de
dec c
jr nz, .restoreSpriteFacingDirectionLoop
call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns)
ld hl, wFontLoaded
res BIT_FONT_LOADED, [hl]
ld a, [wStatusFlags6]
bit BIT_FLY_WARP, a
call z, LoadPlayerSpriteGraphics
call LoadCurrentMapView
pop af
call BankswitchCommon
jp UpdateSprites
DisplayPokemartDialogue::
push hl
ld hl, PokemartGreetingText
call PrintText
pop hl
inc hl
call LoadItemList
ld a, PRICEDITEMLISTMENU
ld [wListMenuID], a
homecall DisplayPokemartDialogue_
jp AfterDisplayingTextID
PokemartGreetingText::
text_far _PokemartGreetingText
text_end
LoadItemList::
ld a, 1
ld [wUpdateSpritesEnabled], a
ld a, h
ld [wItemListPointer], a
ld a, l
ld [wItemListPointer + 1], a
ld de, wItemList
.loop
ld a, [hli]
ld [de], a
inc de
cp $ff
jr nz, .loop
ret
DisplayPokemonCenterDialogue::
; zeroing these doesn't appear to serve any purpose
xor a
ldh [hItemPrice], a
ldh [hItemPrice + 1], a
ldh [hItemPrice + 2], a
inc hl
homecall DisplayPokemonCenterDialogue_
jp AfterDisplayingTextID
DisplaySafariGameOverText::
callfar PrintSafariGameOverText
jp AfterDisplayingTextID
DisplayPokemonFaintedText::
ld hl, PokemonFaintedText
call PrintText
jp AfterDisplayingTextID
PokemonFaintedText::
text_far _PokemonFaintedText
text_end
DisplayPlayerBlackedOutText::
ld hl, PlayerBlackedOutText
call PrintText
ld a, [wStatusFlags6]
res BIT_ALWAYS_ON_BIKE, a
ld [wStatusFlags6], a
CheckEvent EVENT_IN_SAFARI_ZONE
jr z, .didnotblackoutinsafari
xor a
ld [wNumSafariBalls], a
ld [wSafariSteps], a
ld [wSafariSteps + 1], a
EventFlagAddressA EVENT_IN_SAFARI_ZONE
ld [wNextSafariZoneGateScript], a
ld [wSafariZoneGateCurScript], a
.didnotblackoutinsafari
jp HoldTextDisplayOpen
PlayerBlackedOutText::
text_far _PlayerBlackedOutText
text_end
DisplayRepelWoreOffText::
ld hl, RepelWoreOffText
call PrintText
jp AfterDisplayingTextID
RepelWoreOffText::
text_far _RepelWoreOffText
text_end
DisplayPikachuEmotion::
callfar TalkToPikachu
jp CloseTextDisplay