Files
jak-project/goal_src/jak1/engine/ui/progress/progress-static.gc
T
2026-07-26 14:43:53 -04:00

1415 lines
59 KiB
Common Lisp

;;-*-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))