;;-*-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) (misty-stopped-lurkers-at-silo #x28a) (misty-stopped-balloon-lurkers #x28b) (jungleb-eco-vents-opened #x289) (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) (inverted #x1002) (camera-controls-horz #x1003) (camera-controls-vert #x1004) (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)