;;-*-Lisp-*- (in-package goal) (bundles "ENGINE.CGO" "GAME.CGO") (require "engine/ui/progress/progress-h.gc") (require "engine/ui/text-h.gc") (require "engine/game/task/game-task-h.gc") ;; Static menu descriptions and the task data used by the progress screen. init-game-options ;; connects these templates to live setting fields and installs them in *options-remap*. ;; Pause-menu options. Demo builds stop after the three settings submenus; demo-shared also ;; provides an exit button for returning to its launcher. (define *main-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type menu) :name (text-id game-options) :scale #t :param3 (game-option-menu game-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id graphic-options) :scale #t :param3 (game-option-menu graphic-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id sound-options) :scale #t :param3 (game-option-menu sound-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id load-game) :scale #t :param3 (game-option-menu load-game)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id save-game) :scale #t :param3 (game-option-menu save-game)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id quit-game) :scale #t :param3 (game-option-menu quit)) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *title* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type menu) :name (text-id new-game) :scale #t :param3 (game-option-menu save-game-title)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id load-game) :scale #t :param3 (game-option-menu load-game)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id options) :scale #t :param3 (game-option-menu settings-title)) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type menu) :name (text-id game-options) :scale #t :param3 (game-option-menu game-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id graphic-options) :scale #t :param3 (game-option-menu graphic-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id sound-options) :scale #t :param3 (game-option-menu sound-settings)) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *main-options-demo* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type menu) :name (text-id game-options) :scale #t :param3 (game-option-menu game-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id graphic-options) :scale #t :param3 (game-option-menu graphic-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id sound-options) :scale #t :param3 (game-option-menu sound-settings)) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *main-options-demo-shared* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type menu) :name (text-id game-options) :scale #t :param3 (game-option-menu game-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id graphic-options) :scale #t :param3 (game-option-menu graphic-settings)) (new 'static 'game-option :option-type (game-option-type menu) :name (text-id sound-options) :scale #t :param3 (game-option-menu sound-settings)) (new 'static 'game-option :option-type (game-option-type button) :name (text-id exit-demo) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *game-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id vibrations) :scale #t) (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id play-hints) :scale #t) (new 'static 'game-option :option-type (game-option-type language) :name (text-id language) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *game-options-japan* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id vibrations) :scale #t) (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id play-hints) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *game-options-demo* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id vibrations) :scale #t) (new 'static 'game-option :option-type (game-option-type on-off) :name (text-id play-hints) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *graphic-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type center-screen) :name (text-id center-screen) :scale #t) (new 'static 'game-option :option-type (game-option-type aspect-ratio) :name (text-id aspect-ratio) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *graphic-title-options-pal* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type center-screen) :name (text-id center-screen) :scale #t) (new 'static 'game-option :option-type (game-option-type video-mode) :name (text-id video-mode) :scale #t) (new 'static 'game-option :option-type (game-option-type aspect-ratio) :name (text-id aspect-ratio) :scale #t) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *sound-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :name (text-id sfx-volume) :scale #t :param2 100.0) (new 'static 'game-option :name (text-id music-volume) :scale #t :param2 100.0) (new 'static 'game-option :name (text-id speech-volume) :scale #t :param2 100.0) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #t))) (define *yes-no-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type yes-no) :scale #f))) (define *ok-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type button) :name (text-id ok) :scale #f))) (define *load-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #f))) (define *save-options* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #f))) (define *save-options-title* (new 'static 'boxed-array :type game-option (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :name (text-id continue-without-saving) :scale #f) (new 'static 'game-option :option-type (game-option-type button) :name (text-id back) :scale #f))) ;; Maps each progress-screen state to its option array. init-game-options clears and fills this ;; table at startup. The PC menu adds more screen states, so its allocation follows the expanded ;; progress-screen enum instead of the original 35 entries. (define *options-remap* (new 'static 'boxed-array :type (array game-option) :length 0 :allocated-length (#if (not PC_PORT) 35 68))) ;; added in PC port ;; Canonical progress regions. Several streamed level files share one task/count record. (defenum level-task-data-index :type int32 (training 0) (village1 1) (beach 2) (jungle 3) (misty 4) (firecanyon 5) (village2 6) (sunken 7) (swamp 8) (rolling 9) (ogre 10) (village3 11) (snow 12) (cave 13) (lavatube 14) (citadel 15) (max 16)) ;; Maps the zero-based level-info index used by callers to a canonical progress region. The paired ;; jungle and sunken files, the three cave files, the citadel/final-boss pair, and the intro/demo ;; files intentionally share task and count storage. (define *level-task-data-remap* (new 'static 'boxed-array :type int32 (level-task-data-index training) (level-task-data-index village1) (level-task-data-index beach) (level-task-data-index jungle) ;; jungle (level-task-data-index jungle) ;; jungleb (level-task-data-index misty) (level-task-data-index firecanyon) (level-task-data-index village2) (level-task-data-index sunken) ;; sunken (level-task-data-index sunken) ;; sunkenb (level-task-data-index swamp) (level-task-data-index rolling) (level-task-data-index ogre) (level-task-data-index village3) (level-task-data-index snow) (level-task-data-index cave) ;; maincave (level-task-data-index cave) ;; robocave (level-task-data-index cave) ;; darkcave (level-task-data-index lavatube) (level-task-data-index citadel) ;; citadel (level-task-data-index citadel) ;; finalboss (level-task-data-index misty) ;; demo (level-task-data-index misty) ;; intro )) ;; Maps each GOAL language ID to the localized language-name string displayed by the menu. (define *language-name-remap* (new 'static 'boxed-array :type text-id (text-id english) (text-id french) (text-id german) (text-id spanish) (text-id italian) (text-id japanese))) ;; One task/count description per canonical progress region. nb-of-tasks selects the live prefix ;; of each eight-entry task-info array; buzzer-task-index identifies the scout-fly entry. Each task ;; reserves four text slots; the first three describe its introduction, reminder, and resolution. (define *level-task-data* (new 'static 'boxed-array :type level-tasks-info (new 'static 'level-tasks-info :level-name-id (text-id training-level-name) :text-group-index 1 :nb-of-tasks 4 :buzzer-task-index 3 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task training-gimmie) :task-name (new 'static 'array text-id 4 (text-id training-gimmie-task-name) (text-id training-gimmie-task-name) (text-id training-gimmie-task-name) (text-id zero))) (new 'static 'task-info-data :task-id (game-task training-door) :task-name (new 'static 'array text-id 4 (text-id training-door-task-name) (text-id training-door-task-name) (text-id training-door-task-name) (text-id zero))) (new 'static 'task-info-data :task-id (game-task training-climb) :task-name (new 'static 'array text-id 4 (text-id training-climb-task-name) (text-id training-climb-task-name) (text-id training-climb-task-name) (text-id zero))) (new 'static 'task-info-data :task-id (game-task training-buzzer) :task-name (new 'static 'array text-id 4 (text-id training-buzzer-task-name) (text-id training-buzzer-task-name) (text-id training-buzzer-task-name) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id village1-level-name) :text-group-index 1 :nb-of-tasks 6 :buzzer-task-index 5 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task village1-mayor-money) :task-name (new 'static 'array text-id 4 (text-id village1-mayor-money) (text-id village1-mayor-money) (text-id village1-mayor-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village1-uncle-money) :task-name (new 'static 'array text-id 4 (text-id village1-uncle-money) (text-id village1-uncle-money) (text-id village1-uncle-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village1-yakow) :task-name (new 'static 'array text-id 4 (text-id village1-yakow-herd) (text-id village1-yakow-herd) (text-id village1-yakow-return) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village1-oracle-money1) :task-name (new 'static 'array text-id 4 (text-id village1-oracle) (text-id village1-oracle) (text-id village1-oracle) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village1-oracle-money2) :task-name (new 'static 'array text-id 4 (text-id village1-oracle) (text-id village1-oracle) (text-id village1-oracle) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village1-buzzer) :task-name (new 'static 'array text-id 4 (text-id beach-buzzer) (text-id beach-buzzer) (text-id beach-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id beach-level-name) :text-group-index 1 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task beach-ecorocks) :task-name (new 'static 'array text-id 4 (text-id beach-ecorocks) (text-id beach-ecorocks) (text-id beach-ecorocks) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-flutflut) :task-name (new 'static 'array text-id 4 (text-id beach-flutflut-push) (text-id beach-flutflut-push) (text-id beach-flutflut-meet) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-pelican) :task-name (new 'static 'array text-id 4 (text-id beach-pelican) (text-id beach-pelican) (text-id beach-pelican) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-seagull) :task-name (new 'static 'array text-id 4 (text-id beach-seagull) (text-id beach-seagull) (text-id beach-seagull-get) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-cannon) :task-name (new 'static 'array text-id 4 (text-id beach-cannon) (text-id beach-cannon) (text-id beach-cannon) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-gimmie) :task-name (new 'static 'array text-id 4 (text-id beach-gimmie) (text-id beach-gimmie) (text-id beach-gimmie) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-sentinel) :task-name (new 'static 'array text-id 4 (text-id beach-sentinel) (text-id beach-sentinel) (text-id beach-sentinel) (text-id zero))) (new 'static 'task-info-data :task-id (game-task beach-buzzer) :task-name (new 'static 'array text-id 4 (text-id beach-buzzer) (text-id beach-buzzer) (text-id beach-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id jungle-level-name) :text-group-index 1 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task jungle-lurkerm) :task-name (new 'static 'array text-id 4 (text-id jungle-lurkerm-unblock) (text-id jungle-lurkerm-connect) (text-id jungle-lurkerm-return) (text-id zero)) :text-index-when-resolved 1) (new 'static 'task-info-data :task-id (game-task jungle-tower) :task-name (new 'static 'array text-id 4 (text-id jungle-tower) (text-id jungle-tower) (text-id jungle-tower) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-eggtop) :task-name (new 'static 'array text-id 4 (text-id jungle-eggtop) (text-id jungle-eggtop) (text-id jungle-eggtop) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-plant) :task-name (new 'static 'array text-id 4 (text-id jungle-plant) (text-id jungle-plant) (text-id jungle-plant) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-fishgame) :task-name (new 'static 'array text-id 4 (text-id jungle-fishgame) (text-id jungle-fishgame) (text-id jungle-fishgame) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-canyon-end) :task-name (new 'static 'array text-id 4 (text-id jungle-canyon-end) (text-id jungle-canyon-end) (text-id jungle-canyon-end) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-temple-door) :task-name (new 'static 'array text-id 4 (text-id jungle-temple-door) (text-id jungle-temple-door) (text-id jungle-temple-door) (text-id zero))) (new 'static 'task-info-data :task-id (game-task jungle-buzzer) :task-name (new 'static 'array text-id 4 (text-id beach-buzzer) (text-id beach-buzzer) (text-id beach-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id misty-level-name) :text-group-index 1 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task misty-muse) :task-name (new 'static 'array text-id 4 (text-id misty-muse-catch) (text-id misty-muse-catch) (text-id misty-muse-return) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-boat) :task-name (new 'static 'array text-id 4 (text-id misty-boat) (text-id misty-boat) (text-id misty-boat) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-cannon) :task-name (new 'static 'array text-id 4 (text-id misty-cannon) (text-id misty-cannon) (text-id misty-cannon) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-warehouse) :task-name (new 'static 'array text-id 4 (text-id misty-return-to-pool) (text-id misty-return-to-pool) (text-id misty-return-to-pool) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-bike) :task-name (new 'static 'array text-id 4 (text-id misty-find-transpad) (text-id misty-balloon-lurkers) (text-id misty-find-transpad) (text-id zero)) :text-index-when-resolved 1) (new 'static 'task-info-data :task-id (game-task misty-bike-jump) :task-name (new 'static 'array text-id 4 (text-id misty-bike-jump) (text-id misty-bike-jump) (text-id misty-bike-jump) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-eco-challenge) :task-name (new 'static 'array text-id 4 (text-id misty-eco-challenge) (text-id misty-eco-challenge) (text-id misty-eco-challenge) (text-id zero))) (new 'static 'task-info-data :task-id (game-task misty-buzzer) :task-name (new 'static 'array text-id 4 (text-id beach-buzzer) (text-id beach-buzzer) (text-id beach-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id firecanyon-level-name) :text-group-index 5 :nb-of-tasks 2 :buzzer-task-index 1 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task firecanyon-end) :task-name (new 'static 'array text-id 4 (text-id firecanyon-end) (text-id firecanyon-end) (text-id firecanyon-end) (text-id zero))) (new 'static 'task-info-data :task-id (game-task firecanyon-buzzer) :task-name (new 'static 'array text-id 4 (text-id firecanyon-buzzer) (text-id firecanyon-buzzer) (text-id firecanyon-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id village2-level-name) :text-group-index 2 :nb-of-tasks 6 :buzzer-task-index 5 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task village2-gambler-money) :task-name (new 'static 'array text-id 4 (text-id village2-gambler-money) (text-id village2-gambler-money) (text-id village2-gambler-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village2-geologist-money) :task-name (new 'static 'array text-id 4 (text-id village2-geologist-money) (text-id village2-geologist-money) (text-id village2-geologist-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village2-warrior-money) :task-name (new 'static 'array text-id 4 (text-id village2-warrior-money) (text-id village2-warrior-money) (text-id village2-warrior-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village2-oracle-money1) :task-name (new 'static 'array text-id 4 (text-id village2-oracle-money) (text-id village2-oracle-money) (text-id village2-oracle-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village2-oracle-money2) :task-name (new 'static 'array text-id 4 (text-id village2-oracle-money) (text-id village2-oracle-money) (text-id village2-oracle-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village2-buzzer) :task-name (new 'static 'array text-id 4 (text-id generic-buzzer) (text-id generic-buzzer) (text-id generic-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id sunken-level-name) :text-group-index 2 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task sunken-room) :task-name (new 'static 'array text-id 4 (text-id sunken-elevator-raise) (text-id sunken-elevator-raise) (text-id sunken-elevator-get-to-roof) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-pipe) :task-name (new 'static 'array text-id 4 (text-id sunken-pipe) (text-id sunken-pipe) (text-id sunken-pipe) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-slide) :task-name (new 'static 'array text-id 4 (text-id sunken-slide) (text-id sunken-slide) (text-id sunken-slide) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-sharks) :task-name (new 'static 'array text-id 4 (text-id sunken-pool) (text-id sunken-pool) (text-id sunken-pool) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-platforms) :task-name (new 'static 'array text-id 4 (text-id sunken-platforms) (text-id sunken-platforms) (text-id sunken-platforms) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-top-of-helix) :task-name (new 'static 'array text-id 4 (text-id sunken-climb-tube) (text-id sunken-climb-tube) (text-id sunken-climb-tube) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-spinning-room) :task-name (new 'static 'array text-id 4 (text-id sunken-spinning-room) (text-id sunken-spinning-room) (text-id sunken-spinning-room) (text-id zero))) (new 'static 'task-info-data :task-id (game-task sunken-buzzer) :task-name (new 'static 'array text-id 4 (text-id generic-buzzer) (text-id generic-buzzer) (text-id generic-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id swamp-level-name) :text-group-index 2 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task swamp-flutflut) :task-name (new 'static 'array text-id 4 (text-id swamp-flutflut) (text-id swamp-flutflut) (text-id swamp-flutflut) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-billy) :task-name (new 'static 'array text-id 4 (text-id swamp-billy) (text-id swamp-billy) (text-id swamp-billy) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-battle) :task-name (new 'static 'array text-id 4 (text-id swamp-battle) (text-id swamp-battle) (text-id swamp-battle) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-tether-4) :task-name (new 'static 'array text-id 4 (text-id swamp-tether) (text-id swamp-tether) (text-id swamp-tether) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-tether-1) :task-name (new 'static 'array text-id 4 (text-id swamp-tether) (text-id swamp-tether) (text-id swamp-tether) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-tether-2) :task-name (new 'static 'array text-id 4 (text-id swamp-tether) (text-id swamp-tether) (text-id swamp-tether) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-tether-3) :task-name (new 'static 'array text-id 4 (text-id swamp-tether) (text-id swamp-tether) (text-id swamp-tether) (text-id zero))) (new 'static 'task-info-data :task-id (game-task swamp-buzzer) :task-name (new 'static 'array text-id 4 (text-id generic-buzzer) (text-id generic-buzzer) (text-id generic-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id rolling-level-name) :text-group-index 2 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task rolling-moles) :task-name (new 'static 'array text-id 4 (text-id rolling-moles) (text-id rolling-moles) (text-id rolling-moles-return) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-robbers) :task-name (new 'static 'array text-id 4 (text-id rolling-robbers) (text-id rolling-robbers) (text-id rolling-robbers) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-race) :task-name (new 'static 'array text-id 4 (text-id rolling-race) (text-id rolling-race) (text-id rolling-race-return) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-lake) :task-name (new 'static 'array text-id 4 (text-id rolling-lake) (text-id rolling-lake) (text-id rolling-lake) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-plants) :task-name (new 'static 'array text-id 4 (text-id rolling-plants) (text-id rolling-plants) (text-id rolling-plants) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-ring-chase-1) :task-name (new 'static 'array text-id 4 (text-id rolling-ring-chase-1) (text-id rolling-ring-chase-1) (text-id rolling-ring-chase-1) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-ring-chase-2) :task-name (new 'static 'array text-id 4 (text-id rolling-ring-chase-2) (text-id rolling-ring-chase-2) (text-id rolling-ring-chase-2) (text-id zero))) (new 'static 'task-info-data :task-id (game-task rolling-buzzer) :task-name (new 'static 'array text-id 4 (text-id generic-buzzer) (text-id generic-buzzer) (text-id generic-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id ogre-level-name) :text-group-index 6 :nb-of-tasks 4 :buzzer-task-index 3 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task ogre-boss) :task-name (new 'static 'array text-id 4 (text-id ogre-boss) (text-id ogre-boss) (text-id ogre-boss) (text-id zero))) (new 'static 'task-info-data :task-id (game-task ogre-end) :task-name (new 'static 'array text-id 4 (text-id ogre-end) (text-id ogre-end) (text-id ogre-end) (text-id zero))) (new 'static 'task-info-data :task-id (game-task ogre-secret) :task-name (new 'static 'array text-id 4 (text-id hidden-power-cell) (text-id hidden-power-cell) (text-id hidden-power-cell) (text-id zero))) (new 'static 'task-info-data :task-id (game-task ogre-buzzer) :task-name (new 'static 'array text-id 4 (text-id ogre-buzzer) (text-id ogre-buzzer) (text-id ogre-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id village3-level-name) :text-group-index 3 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task village3-miner-money1) :task-name (new 'static 'array text-id 4 (text-id village3-miner-money) (text-id village3-miner-money) (text-id village3-miner-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-miner-money2) :task-name (new 'static 'array text-id 4 (text-id village3-miner-money) (text-id village3-miner-money) (text-id village3-miner-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-miner-money3) :task-name (new 'static 'array text-id 4 (text-id village3-miner-money) (text-id village3-miner-money) (text-id village3-miner-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-miner-money4) :task-name (new 'static 'array text-id 4 (text-id village3-miner-money) (text-id village3-miner-money) (text-id village3-miner-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-oracle-money1) :task-name (new 'static 'array text-id 4 (text-id village3-oracle-money) (text-id village3-oracle-money) (text-id village3-oracle-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-oracle-money2) :task-name (new 'static 'array text-id 4 (text-id village3-oracle-money) (text-id village3-oracle-money) (text-id village3-oracle-money) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-extra1) :task-name (new 'static 'array text-id 4 (text-id hidden-power-cell) (text-id hidden-power-cell) (text-id hidden-power-cell) (text-id zero))) (new 'static 'task-info-data :task-id (game-task village3-buzzer) :task-name (new 'static 'array text-id 4 (text-id village3-buzzer) (text-id village3-buzzer) (text-id village3-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id snow-level-name) :text-group-index 3 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task snow-eggtop) :task-name (new 'static 'array text-id 4 (text-id snow-eggtop) (text-id snow-eggtop) (text-id snow-eggtop) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-ram) :task-name (new 'static 'array text-id 4 (text-id snow-ram-3-left) (text-id snow-ram-2-left) (text-id snow-ram-1-left) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-bumpers) :task-name (new 'static 'array text-id 4 (text-id snow-bumpers) (text-id snow-bumpers) (text-id snow-bumpers) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-cage) :task-name (new 'static 'array text-id 4 (text-id snow-cage) (text-id snow-cage) (text-id snow-cage) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-fort) :task-name (new 'static 'array text-id 4 (text-id snow-fort) (text-id snow-fort) (text-id snow-fort) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-ball) :task-name (new 'static 'array text-id 4 (text-id snow-ball) (text-id snow-ball) (text-id snow-ball) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-bunnies) :task-name (new 'static 'array text-id 4 (text-id snow-bunnies) (text-id snow-bunnies) (text-id snow-bunnies) (text-id zero))) (new 'static 'task-info-data :task-id (game-task snow-buzzer) :task-name (new 'static 'array text-id 4 (text-id village3-buzzer) (text-id village3-buzzer) (text-id village3-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id cave-level-name) :text-group-index 3 :nb-of-tasks 8 :buzzer-task-index 7 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task cave-gnawers) :task-name (new 'static 'array text-id 4 (text-id cave-gnawers) (text-id cave-gnawers) (text-id cave-gnawers) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-dark-crystals) :task-name (new 'static 'array text-id 4 (text-id cave-dark-crystals) (text-id cave-dark-crystals) (text-id cave-dark-crystals) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-dark-climb) :task-name (new 'static 'array text-id 4 (text-id cave-dark-climb) (text-id cave-dark-climb) (text-id cave-dark-climb) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-robot-climb) :task-name (new 'static 'array text-id 4 (text-id cave-robot-climb) (text-id cave-robot-climb) (text-id cave-robot-climb) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-swing-poles) :task-name (new 'static 'array text-id 4 (text-id cave-swing-poles) (text-id cave-swing-poles) (text-id cave-swing-poles) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-spider-tunnel) :task-name (new 'static 'array text-id 4 (text-id cave-spider-tunnel) (text-id cave-spider-tunnel) (text-id cave-spider-tunnel) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-platforms) :task-name (new 'static 'array text-id 4 (text-id cave-platforms) (text-id cave-platforms) (text-id cave-platforms) (text-id zero))) (new 'static 'task-info-data :task-id (game-task cave-buzzer) :task-name (new 'static 'array text-id 4 (text-id village3-buzzer) (text-id village3-buzzer) (text-id village3-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id lavatube-level-name) :text-group-index 3 :nb-of-tasks 2 :buzzer-task-index 1 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task lavatube-end) :task-name (new 'static 'array text-id 4 (text-id lavatube-end) (text-id lavatube-end) (text-id lavatube-end) (text-id zero))) (new 'static 'task-info-data :task-id (game-task lavatube-buzzer) :task-name (new 'static 'array text-id 4 (text-id lavatube-buzzer) (text-id lavatube-buzzer) (text-id lavatube-buzzer) (text-id zero))))) (new 'static 'level-tasks-info :level-name-id (text-id citadel-level-name) :text-group-index 4 :nb-of-tasks 5 :buzzer-task-index 4 :task-info (new 'static 'array task-info-data 8 (new 'static 'task-info-data :task-id (game-task citadel-sage-blue) :task-name (new 'static 'array text-id 4 (text-id citadel-sage-blue) (text-id citadel-sage-blue) (text-id citadel-sage-blue) (text-id zero))) (new 'static 'task-info-data :task-id (game-task citadel-sage-red) :task-name (new 'static 'array text-id 4 (text-id citadel-sage-red) (text-id citadel-sage-red) (text-id citadel-sage-red) (text-id zero))) (new 'static 'task-info-data :task-id (game-task citadel-sage-yellow) :task-name (new 'static 'array text-id 4 (text-id citadel-sage-yellow) (text-id citadel-sage-yellow) (text-id citadel-sage-yellow) (text-id zero))) (new 'static 'task-info-data :task-id (game-task citadel-sage-green) :task-name (new 'static 'array text-id 4 (text-id citadel-sage-green) (text-id citadel-sage-green) (text-id citadel-sage-green) (text-id zero))) (new 'static 'task-info-data :task-id (game-task citadel-buzzer) :task-name (new 'static 'array text-id 4 (text-id citadel-buzzer) (text-id citadel-buzzer) (text-id citadel-buzzer) (text-id zero))))))) ;; Starting X coordinate for a row of zero through eight task eggs. Index by nb-of-tasks; the ;; roughly 24-pixel steps keep the complete row centered. (define *task-egg-starting-x* (new 'static 'boxed-array :type int32 218 194 171 147 124 100 77 53 30)) ;; The active progress process installs its per-level collected-orb and scout-fly counts here. (define *game-counts* (the-as game-count-info #f))