summaryrefslogtreecommitdiff
path: root/home/text_script.asm
diff options
context:
space:
mode:
authorRangi <remy.oukaour+rangi42@gmail.com>2020-07-04 17:09:35 -0400
committerRangi <remy.oukaour+rangi42@gmail.com>2020-07-04 21:14:46 -0400
commit139a28ff9906d728a6820fe678a2a616eb309421 (patch)
tree9a4339b97e16e10c5b007e836f1f3fadd33bd9f4 /home/text_script.asm
parent2718c36065e7eb201a149938bcdd51987c4e56b6 (diff)
Port pokecrystal's formatting of text commands and special characters
Diffstat (limited to 'home/text_script.asm')
-rw-r--r--home/text_script.asm231
1 files changed, 231 insertions, 0 deletions
diff --git a/home/text_script.asm b/home/text_script.asm
new file mode 100644
index 00000000..8bfe0927
--- /dev/null
+++ b/home/text_script.asm
@@ -0,0 +1,231 @@
+; this function is used to display sign messages, sprite dialog, etc.
+; INPUT: [hSpriteIndexOrTextID] = sprite ID or text ID
+DisplayTextID::
+ ld a, [hLoadedROMBank]
+ push af
+ callba DisplayTextIDInit ; initialization
+ ld hl, wTextPredefFlag
+ bit 0, [hl]
+ res 0, [hl]
+ jr nz, .skipSwitchToMapBank
+ ld a, [wCurMap]
+ call SwitchToMapRomBank
+.skipSwitchToMapBank
+ ld a, 30 ; half a second
+ ld [hFrameCounter], a ; used as joypad poll timer
+ ld hl, wMapTextPtr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a ; hl = map text pointer
+ ld d, $00
+ ld a, [hSpriteIndexOrTextID] ; text ID
+ ld [wSpriteIndex], a
+
+ dict TEXT_START_MENU, DisplayStartMenu
+ 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
+ ld a, [hSpriteIndexOrTextID] ; sprite ID
+ cp e
+ jr z, .spriteHandling
+ jr nc, .skipSpriteHandling
+.spriteHandling
+; get the text ID of the sprite
+ push hl
+ push de
+ push bc
+ callba UpdateSpriteFacingOffsetAndDelayMovement ; update the graphics of the sprite the player is talking to (to face the right direction)
+ pop bc
+ pop de
+ ld hl, wMapSpriteData ; NPC text entries
+ ld a, [hSpriteIndexOrTextID]
+ dec a
+ add a
+ add l
+ ld l, a
+ jr nc, .noCarry
+ inc h
+.noCarry
+ 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
+ sla e
+ 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
+
+dict2: MACRO
+ 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, callba VendingMachineMenu
+ dict TX_SCRIPT_PRIZE_VENDOR, TextScript_GameCornerPrizeMenu
+ dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callab CableClubNPC
+
+ call PrintText_NoCreatingTextBox ; display the text
+ ld a, [wDoNotWaitForButtonPressAfterDisplayingText]
+ and a
+ jr nz, HoldTextDisplayOpen
+
+AfterDisplayingTextID::
+ ld a, [wEnteringCableClub]
+ and a
+ jr nz, HoldTextDisplayOpen
+ call WaitForTextScrollButtonPress ; wait for a button press after displaying all the text
+
+; loop to hold the dialogue box open as long as the player keeps holding down the A button
+HoldTextDisplayOpen::
+ call Joypad
+ ld a, [hJoyHeld]
+ bit 0, a ; is the A button being pressed?
+ jr nz, HoldTextDisplayOpen
+
+CloseTextDisplay::
+ ld a, [wCurMap]
+ call SwitchToMapRomBank
+ ld a, $90
+ ld [hWY], a ; move the window off the screen
+ call DelayFrame
+ call LoadGBPal
+ xor a
+ ld [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, wSpriteStateData2 + $19
+ ld c, $0f
+ ld de, $10
+.restoreSpriteFacingDirectionLoop
+ ld a, [hl]
+ dec h
+ ld [hl], a
+ inc h
+ add hl, de
+ dec c
+ jr nz, .restoreSpriteFacingDirectionLoop
+ ld a, BANK(InitMapSprites)
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns)
+ ld hl, wFontLoaded
+ res 0, [hl]
+ ld a, [wd732]
+ bit 3, a ; used fly warp
+ call z, LoadPlayerSpriteGraphics
+ call LoadCurrentMapView
+ pop af
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ jp UpdateSprites
+
+DisplayPokemartDialogue::
+ push hl
+ ld hl, PokemartGreetingText
+ call PrintText
+ pop hl
+ inc hl
+ call LoadItemList
+ ld a, PRICEDITEMLISTMENU
+ ld [wListMenuID], a
+ ld a, [hLoadedROMBank]
+ push af
+ ld a, BANK(DisplayPokemartDialogue_)
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ call DisplayPokemartDialogue_
+ pop af
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ 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
+ ld [hItemPrice], a
+ ld [hItemPrice + 1], a
+ ld [hItemPrice + 2], a
+
+ inc hl
+ ld a, [hLoadedROMBank]
+ push af
+ ld a, BANK(DisplayPokemonCenterDialogue_)
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ call DisplayPokemonCenterDialogue_
+ pop af
+ ld [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ jp AfterDisplayingTextID
+
+DisplaySafariGameOverText::
+ callab 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, [wd732]
+ res 5, a ; reset forced to use bike bit
+ ld [wd732], a
+ jp HoldTextDisplayOpen
+
+PlayerBlackedOutText::
+ text_far _PlayerBlackedOutText
+ text_end
+
+DisplayRepelWoreOffText::
+ ld hl, RepelWoreOffText
+ call PrintText
+ jp AfterDisplayingTextID
+
+RepelWoreOffText::
+ text_far _RepelWoreOffText
+ text_end