jak-project/goal_src/engine/ui/text-h.gc
Matt Dallmeyer 84b2ba43be
Camera inversion/flipped support for main first+third person cameras (#1355)
* Split cam inversion settings into first/third person settings. Connect settings to controls for main first/third person cameras

* inverted -> flipped everywhere

* cam-billy first-person camera impl

* respect camera inversion in cam-stick (debug option only), launcher cams

* refactor into common functions

* couple more cams

* tweak menu text and size, fix function ordering

* convert to macros, more descriptive names

* pc port comments

* one missed comment

* menu text/size/display tweaks

* respect flipped in main debug cam
2022-05-11 18:28:27 -04:00

567 lines
15 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: text-h.gc
;; name in dgo: text-h
;; dgos: GAME, ENGINE
;; This file contains types related to game text.
;; Each game string is assigned an ID number.
;; This ID is used to lookup the string for the currently selected language.
;; These ID's are shared with short spoken audio clips (daxter hints)
;; most (all?) of the daxter clips don't have text strings.
(defenum game-text-id
:type uint32
:bitfield #f
;; GAME-TEXT-ID ENUM BEGINS
(zero 0)
(one 1)
(confirm #x103)
(press-to-talk #x104)
(press-to-use #x105)
(confirm-play #x106)
(play-again? #x107)
(quit #x108)
(pause #x109)
(sfx-volume #x10a)
(music-volume #x10b)
(speech-volume #x10c)
(language #x10d)
(vibrations #x10e)
(play-hints #x10f)
(center-screen #x110)
(on #x111)
(off #x112)
(move-dpad #x113)
(english #x114)
(french #x115)
(german #x116)
(spanish #x117)
(italian #x118)
(japanese #x119)
(press-to-trade-money #x11a)
(press-to-trade-money-oracle #x11b)
(press-to-warp #x11c)
(press-to-exit #x11d)
(press-to-talk-to-sage #x123)
(press-to-talk-to-assistant #x124)
(aspect-ratio #x125)
(video-mode #x126)
(game-options #x127)
(graphic-options #x128)
(sound-options #x129)
(4x3 #x12a)
(16x9 #x12b)
(60hz #x12c)
(50hz #x12d)
(game-title #x12e)
(hidden-power-cell #x12f) ;; why is this here??
(memcard-no-space #x130)
(memcard-not-inserted #x131)
(card-not-formatted-title #x132)
(memcard-space-requirement1 #x133)
(memcard-space-requirement2 #x134)
(card-not-formatted-msg #x135)
(saving-data #x136)
(loading-data #x137)
(do-not-remove-mem-card #x138)
(overwrite? #x139)
(format? #x13a)
(yes #x13c)
(no #x13d)
(back #x13e)
(continue-without-saving #x13f)
(select-file-to-save #x140)
(select-file-to-load #x141)
(save-data-already-exists #x142)
(insert-memcard #x143)
(continue? #x144)
(load-game #x14b)
(save-game #x14c)
(formatting #x14d)
(creating-save-data #x14e)
(empty #x14f)
(options #x150)
(error-loading #x151)
(error-saving #x152)
(error-formatting #x153)
(error-creating-data #x154)
(memcard-removed #x156)
(autosave-disabled-title #x157)
(autosave-disabled-msg #x158)
(no-save-data #x159)
(create-save-data? #x15a)
(check-memcard #x15b)
(new-game #x15c)
(back? #x15d)
(ok #x15e)
(exit-demo #x15f)
(autosave-warn-title #x160)
(autosave-warn-msg #x161)
(task-completed #x162)
(check-memcard-and-retry #x163)
(screen-change-to-60hz #x164)
(screen-60hz-warn-support #x165)
(screen-60hz-warn-timer #x166)
(screen-now-60hz #x167)
(screen-60hz-keep? #x168)
(warp-gate-use-dpad #x169)
(no-disc-title #x16a)
(no-disc-msg #x16b)
(bad-disc-title #x16c)
(bad-disc-msg #x16d)
(press-start #x16e)
(quit-game #x16f)
(quit? #x170)
(total-collected #x171)
(village1-mayor-money #x200)
(vollage1-uncle-money #x201)
(village1-yakow-herd #x202)
(village1-yakow-return #x203)
(village1-oracle #x204)
(beach-ecorocks #x205)
(beach-flutflut-push #x206)
(beach-flutflut-meet #x207)
(beach-pelican #x208)
(beach-seagull #x209)
(beach-cannon #x20a)
(beach-buzzer #x20b)
(jungle-lurkerm-connect #x20c)
(jungle-tower #x20d)
(jungle-eggtop #x20e)
(jungle-plant #x20f)
(jungle-fishgame #x210)
(misty-muse-catch #x211)
(misty-muse-return #x212)
(misty-boat #x213)
(misty-cannon #x214)
(misty-return-to-pool #x215) ;; task name??
(misty-find-transpad #x216) ;; task name?
(misty-balloon-lurkers #x217)
(village1-level-name #x220)
(beach-level-name #x221)
(jungle-level-name #x222)
(misty-level-name #x223)
(beach-seagull-get #x22e)
(jungle-lurkerm-unblock #x22f)
(jungle-lurkerm-return #x230)
(MISSING-orb-hint #x233)
(beach-eco-rock-increment #x239)
(jungle-maindoor-hint #x23c)
(firecanyon-not-enough-cells #x24f)
(sidekick-hint-orb-cache-top #x251)
(jungle-precursorbridge-hint #x25b)
(daxter-launcher-no-eco #x25c)
(jungle-mirrors-completion-talk-to-mayor #x25e)
(beach-gimmie #x262)
(beach-sentinel #x263)
(jungle-canyon-end #x264)
(jungle-temple-door #x265)
(misty-bike-jump #x266)
(misty-eco-challenge #x267)
(beach-seagull-chased-one #x268)
(beach-seagull-chased-two #x26a)
(beach-seagull-chased-three #x26b)
(beach-seagull-chased-four #x26c)
(misty-daxter-scared #x26f)
(beach-seagulls-avalanche #x273)
(beach-pelican-quick-get-cell #x274)
(beach-flutflutegg-hint #x275)
(sidekick-hint-fish-powerup #x278)
(misty-racer-hit-the-ballon-lurkers #x27e)
(misty-daxter-hit-lurkers-not-mines #x27f)
(sidekick-speech-hint-crate-darkeco1 #x281)
(sidekick-speech-crate-steel-break1 #x283)
(sidekick-speech-hint-crate-iron #x284)
(sidekick-speech-hint-crate-steel #x285)
(beach-collectors-unblocked #x288)
(jungleb-eco-vents-opened #x289)
(misty-stopped-lurkers-at-silo #x28a)
(misty-stopped-balloon-lurkers #x28b)
(sidekick-speech-crate-steel-break2 #x28e)
(sidekick-speech-hint-crate-darkeco2 #x28f)
(daxter-screaming-jump #x290)
(daxter-wahoo-jump #x291)
(daxter-get-some #x292)
(collectables-scout-flies-red-boxes #x295)
(found-all-scout-flies #x296)
(yakow-owed-powercell #x297)
(jungle-mirrors-tutorial #x29c)
(jungle-mirrors-break-the-mirror-jak #x29d)
(jungle-mirrors-go-to-the-next-tower #x29f)
(jungle-mirrors-follow-the-beam #x2a0)
(misty-teetertotter-bonk-dax-tutorial #x2a4)
(sidekick-hint-misty-get-red-eco #x2a5)
(red-eco-tutorial #x2a6)
(daxter-blue-eco-plat-tutorial #x2a7)
(fish? #x2a9)
(misty-bone-bridge-hint #x2aa)
(beach-grottopole-increment #x2af)
(firecanyon-collect-cells-collected #x2b1)
(firecanyon-collect-cells-collected-reminder #x2b2)
(firecanyon-collect-cells-text #x2b3)
(caught #x2b4)
(missed #x2b5)
(lose! #x2b6)
(village2-gambler-money #x300)
(village2-geologist-money #x301)
(village2-warrior-money #x302)
(village2-oracle-money #x303)
(swamp-tether #x304)
(swamp-flutflut #x307)
(swamp-billy #x309)
(sunken-elevator-raise #x30a)
(sunken-elevator-get-to-roof #x30b)
(sunken-pipe #x30c)
(sunken-climb-tube #x30d) ;; task name?
(sunken-pool #x30e) ;; task name?
(sunken-platforms #x30f)
(rolling-moles #x310)
(rolling-moles-return #x311)
(rolling-robbers #x312)
(rolling-race #x313)
(rolling-race-return #x314)
(rolling-lake #x315)
(rolling-plants #x316)
(unknown-buzzers #x317)
(village2-level-name #x319)
(rolling-level-name #x31b)
(swamp-level-name #x31c)
(sunken-level-name #x31d)
(ogre-level-name #x31e)
(swamp-battle #x321)
(sunken-bottom #x322) ;; task name?
(reach-center #x323) ;; task name?
(rolling-ring-chase-1 #x324)
(rolling-ring-chase-2 #x325)
(sunken-kiera-you-raised-a-piece-of-lpc #x326)
(rolling-beat-lurkers #x327)
(swamp-finished-with-flutflut #x328)
(rolling-race-beat-record #x335)
(sidekick-speech-hint-rolling-crate-darkeco #x336)
(rolling-lightning-moles-completion #x338)
(rolling-dark-plants-location-hint #x339)
(rolling-dark-plants-hint #x33a)
(rolling-flying-lurker-intro #x33c)
(rolling-ring-hint-one-ring-down #x33f)
(rolling-ring-hint-be-quick-to-next #x340)
(rolling-ring-hint-be-quick-all #x341)
(sunken-pipegame-follow-it #x343)
(sunken-helix-daxter-bad-feeling #x344)
(sunken-blue-eco-charger-hint #x345)
(sunken-double-lurker-hint #x347)
(sunken-helix-daxter-eco-rising #x348)
(sunken-qbert-plat-hint #x34a)
(sunken-bully-dive-hint #x34b)
(sunken-take-it-easy-hot-pipes #x34e)
(sunken-blue-eco-charger-all-hint #x34d)
(swamp-tethers-advice-hint #x352)
(kermit-break-tongue #x357)
(swamp-rats-nest-hint #x358)
(daxter-you-can-shoot-with-yellow-eco #x359)
(kermit-run-away-jak #x35f)
(swamp-bats-hint #x364) ;; maybe we can duck the bats
(swamp-tethers-three-to-go #x365)
(swamp-tethers-two-to-go #x366)
(swamp-tethers-lefts-find-the-last #x367)
(flutflut-reminder #x368)
(sage-golfclap-i-have-low-expectations #x36a) ;; where was this said?
(swamp-tethers-completion-sage-precursor-arm #x36b)
(village2-warp-gate-reminder #x36f)
(village2-warp-gate-reminder-annoyed #x370)
(village2-warp-gate-reminder-very-annoyed #x371)
(village2-not-enough-cells-levitator #x36c)
(villlage2-levitator-cell-req-text #x372)
(rolling-race-time-string-prefix #x373)
(rolling-race-record-string-prefix #x374)
(rolling-race-new-record-string-prefix #x375)
(rolling-race-try-again-string #x376)
(rolling-race-start-race-aborted #x377) ;; double check this
(village3-miner-money #x400)
(village3-oracle-money #x401)
(snow-ram-3-left #x402)
(snow-ram-2-left #x403)
(snow-ram-1-left #x404)
(snow-fort #x405)
(snow-bunnies #x406)
(snow-open-door #x408) ;; task name?
(cave-robot-climb #x40e)
(cave-dark-climb #x40f) ;; destroy crystals
(cave-gnawers #x410)
(cave-dark-crystals #x411)
(village3-buzzer #x413)
(village3-level-name #x415)
(snowy-level-name #x417)
(cave-level-name #x419)
(lavatube-level-name #x41b)
(snow-eggtop #x421)
(cave-spider-tunnel #x423)
(cave-platforms #x424)
(cave-swing-poles #x426)
(assistant-lavatube-powercell-hint #x428)
(village3-gondola-malfunctioning #x429)
(village3-gondola-reactivated #x42a)
(snow-frozen-crate #x42b) ;; task name?
(snow-bumpers #x42c)
(dark-crystal-last-one #x432)
(daxter-maybe-you-can-shoot-better-goggles #x433)
(darkcave-light-crystal-low-light-hint #x437)
(darkcave-light-crystal-hint #x438)
(dark-crystal-run-away #x439)
(cave-trap-nest-hint #x440)
(snow-fort-reminder #x443)
(ram-boss-red-eco-hint #x444)
(ice-cube-hint #x448)
(snowy-turned-on-yellow-vents #x44c)
(village3-warp-gate-reminder #x452)
(village3-warp-gate-reminder=annoyed #x453)
(village3-warp-gate-reminder-very-annoyed #x454)
(lavatube-powercell-req-text #x455)
(fire-canyon-end #x500)
(fire-canyon-buzzer #x501)
(daxter-maybe-i-should-drive #x506)
(daxter-you-are-trying-to-avoid-dark-eco #x507)
(fire-canyon-level-name #x50c)
(fire-canyon-we-made-it #x515)
(collectables-theres-scout-flys-here-too #x516)
(ogre-end #x600)
(ogre-buzzer #x601)
(ogre-boss #x603)
(ogre-boss-killed #x604)
(assistant-voicebox-intro-ogre-race #x605)
(sidekick-speech-hint-ogre-race #x61c)
(assistant-finished-mountain-pass-race #x61d)
(lavatube-end #x700)
(lavatube-buzzer #x701)
(lavatube-shoot-the-spheres #x70d)
(lavatube-spheres-door-open #x710)
(citadel-buzzer #x800)
(citadel-level-name #x801)
(citadel-sage-blue #x802)
(citadel-sage-red #x803)
(citadel-sage-yellow #x804)
(citadel-sage-green #x805)
(citadel-break-generator-hint #x806)
(citadel-lurker-bunny-alert #x808)
(citadel-break-generators-reminder #x809)
(citadel-climb-plat-hint #x80c)
(daxter-dont-miss-the-next-launcher #x80d)
(daxter-land-on-the-next-launcher #x812)
(misty-battle-finished #x813)
(training-precursor-orbs #x901)
(training-power-cells #x902)
(training-assistant-found-scout-fly #x903)
(training-assistant-found-scout-fly-cell #x904)
(training-blue-eco-vent #x907)
(training-eco-green #x908)
(training-eco-blue #x909)
(training-more-eco-more-time #x90a)
(training-precursor-door #x90b)
(training-eco-opened-door #x90c)
(training-double-jump #x90e)
(sage-voicebox-hint-crate-iron #x917)
(training-warp-gate-blocked #x919)
(training-warp-gate-reminder #x91a)
(training-gimmie-task-name #x91b)
(training-buzzer-task-name #x91c)
(training-door-task-name #x91d)
(training-climb-task-name #x91e)
(training-level-name #x91f)
(inc #xf10)
(europe #xf11)
;; extra IDs for pc port
(camera-options #x1000)
(normal #x1001)
(flipped #x1002)
(camera-controls-first-horz #x1003)
(camera-controls-first-vert #x1004)
(camera-controls-third-horz #x1005)
(camera-controls-third-vert #x1006)
(misc-options #x100f)
(accessibility-options #x1010)
(money-starburst #x1011)
(ps2-options #x1020)
(ps2-load-speed #x1021)
(ps2-parts #x1022)
(discord-rpc #x1030)
(display-mode #x1031)
(windowed #x1032)
(borderless #x1033)
(fullscreen #x1034)
(game-resolution #x1035)
(resolution-fmt #x1036)
(ps2-aspect-ratio #x1037)
(ps2-aspect-ratio-msg #x1038)
(aspect-ratio-ps2 #x1039)
(fit-to-screen #x103a)
(msaa #x1050)
(x-times-fmt #x1051)
(2-times #x1052)
(4-times #x1053)
(8-times #x1054)
(16-times #x1055)
(frame-rate #x1060)
(lod-bg #x1070)
(lod-fg #x1071)
(lod-highest #x1072)
(lod-high #x1073)
(lod-mid #x1074)
(lod-low #x1075)
(lod-lowest #x1076)
(lod-ps2 #x1077)
(subtitles #x1078)
(hinttitles #x1079)
(subtitles-language #x107a)
(subtitles-speaker #x107b)
(speaker-always #x107c)
(speaker-never #x107d)
(speaker-auto #x107e)
(hint-log #x107f)
(cheats #x1080)
(cheat-eco-blue #x1090)
(cheat-eco-red #x1091)
(cheat-eco-green #x1092)
(cheat-eco-yellow #x1093)
(cheat-sidekick-alt #x1094)
(cheat-invinc #x1095)
(music-player #x10c0)
(scene-player #x10c1)
(play-credits #x10c2)
(scrapbook #x10c3)
(scene-0 #x1100)
(scene-255 #x11ff)
(hint-0 #x1200)
(hint-511 #x13ff)
;; GAME-TEXT-ID ENUM ENDS
)
;; an individual string.
(deftype game-text (structure)
((id game-text-id :offset-assert 0)
(text string :offset-assert 4)
)
:pack-me
:method-count-assert 9
:size-assert #x8
:flag-assert #x900000008
)
;; A table of all strings.
(deftype game-text-info (basic)
((length int32 :offset-assert 4)
(language-id int32 :offset-assert 8)
(group-name string :offset-assert 12)
(data game-text :inline :dynamic :offset-assert 16)
)
:method-count-assert 10
:size-assert #x10
:flag-assert #xa00000010
(:methods
(lookup-text! (_type_ game-text-id symbol) string 9)
)
)
;; all text is stored in the COMMON text files (one file per language).
;; in theory, you could have multiple text files that are only loaded when needed, but they didn't do this.
(define *text-group-names* (new 'static 'boxed-array :type string :length 1 "common"))
;; The heap for storing text
(define *common-text-heap* (new 'global 'kheap))
;; will store the COMMON text when it is loaded.
(define *common-text* (the-as game-text-info #f))
(defun-extern print-game-text string font-context symbol int int float)