From 76a819b98f1087038bc78e4c0a755ca87c060fc4 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Sun, 9 Jan 2022 22:43:13 +0000 Subject: [PATCH] [game] revise build order and add remaining levels + add `part-tester` to menu (#1069) * Add remaining levels to build system * add a particles menu * Update default-menu.gc * Update part-tester.gc * make part tester non-destructive * Make the "ps2 particles" toggle work! * Update kmachine.h * fix test * fix test --- decompiler/config/all-types.gc | 24 +- .../opengl_renderer/SpriteRenderer.cpp | 2 +- game/kernel/kmachine.h | 6 +- goal_src/build/all_files.gc | 4 +- goal_src/build/all_objs.json | 2 +- goal_src/build/game_dgos.gc | 2 +- goal_src/dgos/dar.gd | 19 + goal_src/dgos/dem.gd | 20 + goal_src/dgos/engine.gd | 2 +- goal_src/dgos/game.gd | 2 +- goal_src/dgos/rob.gd | 25 + goal_src/dgos/tit.gd | 17 + goal_src/engine/debug/assert.gc | 3 +- goal_src/engine/debug/default-menu.gc | 50 +- goal_src/engine/debug/memory-usage.gc | 88 +- goal_src/engine/debug/menu.gc | 3 +- goal_src/engine/debug/part-tester.gc | 21 +- goal_src/engine/debug/viewer.gc | 22 +- goal_src/engine/entity/entity.gc | 4 +- goal_src/engine/game/main.gc | 19 +- goal_src/engine/game/settings.gc | 5 +- goal_src/engine/gfx/sprite/sprite.gc | 12 + goal_src/engine/level/level.gc | 15 +- goal_src/engine/pc/pckernel-h.gc | 3 +- goal_src/engine/pc/pckernel.gc | 7 +- goal_src/engine/sparticle/sparticle.gc | 6 + goal_src/game.gp | 1003 +++++++++-------- goal_src/kernel/gcommon.gc | 4 + .../levels/{common => demo}/static-screen.gc | 0 29 files changed, 825 insertions(+), 565 deletions(-) create mode 100644 goal_src/dgos/dar.gd create mode 100644 goal_src/dgos/dem.gd create mode 100644 goal_src/dgos/rob.gd create mode 100644 goal_src/dgos/tit.gd rename goal_src/levels/{common => demo}/static-screen.gc (100%) diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index df247d6ae0..1fe507c148 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -10393,7 +10393,7 @@ manipy-idle) ) -(declare-type sparticle-launch-group structure) +(declare-type sparticle-launch-group basic) (deftype part-spawner (process-drawable) ((mode (pointer sparticle-launch-group) :offset-assert 176) ;; takes a part-spawner as it's first arg in method 9 (enable symbol :offset-assert 180) @@ -21978,10 +21978,10 @@ ;; - Unknowns -(define-extern *anim-tester* (pointer anim-tester)) ;; unknown type -(define-extern *ANIM_TESTER-bank* anim-tester-bank) ;; unknown type +(define-extern *anim-tester* (pointer anim-tester)) +(define-extern *ANIM_TESTER-bank* anim-tester-bank) (define-extern anim-test-field-highlight-lw (inline-array list-field)) -(define-extern *DISP_LIST-bank* DISP_LIST-bank) ;; unknown type +(define-extern *DISP_LIST-bank* DISP_LIST-bank) (define-extern *debug-menu-context* debug-menu-context) @@ -22000,8 +22000,6 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 - (:states - viewer-process) ) ;; - Functions @@ -22014,11 +22012,12 @@ ;; - Unknowns -(define-extern *viewer* viewer) ;; unknown type +(define-extern *viewer* viewer) (define-extern viewer-ja-name string) (define-extern viewer-geo-name string) (define-extern *viewer-sg* skeleton-group) (define-extern viewer-string string) +(define-extern viewew-process (state viewer)) ;; ---------------------- @@ -22037,8 +22036,6 @@ :size-assert #x7c :heap-base #x100 :flag-assert #xe0100007c - (:states - part-tester-idle) ) ;; - Functions @@ -22048,9 +22045,10 @@ ;; - Unknowns -(define-extern *debug-part-dead-pool* dead-pool) ;; unknown type -(define-extern *part-tester* part-tester) ;; unknown type -(define-extern *part-tester-name* string) ;; unknown type +(define-extern *debug-part-dead-pool* dead-pool) +(define-extern *part-tester* part-tester) +(define-extern *part-tester-name* string) +(define-extern part-tester-idle (state part-tester)) ;; ---------------------- @@ -22082,7 +22080,7 @@ (define-extern build-instance-list (function object none)) ;; TODO - drawable types aren't complete (define-extern dm-edit-instance-toggle-pick-func (function int debug-menu-msg symbol)) (define-extern dm-boolean-toggle-pick-func (function (pointer symbol) debug-menu-msg symbol)) -(define-extern build-shader-list (function object)) +(define-extern build-shader-list (function none)) (define-extern all-texture-tweak-adjust (function texture-page-dir float none)) ;; TODO - texture related types (define-extern debug-menu-make-camera-mode-menu (function debug-menu debug-menu none)) (define-extern dm-cam-externalize (function symbol debug-menu-msg symbol)) diff --git a/game/graphics/opengl_renderer/SpriteRenderer.cpp b/game/graphics/opengl_renderer/SpriteRenderer.cpp index 0faf3366f2..90ca876f6d 100644 --- a/game/graphics/opengl_renderer/SpriteRenderer.cpp +++ b/game/graphics/opengl_renderer/SpriteRenderer.cpp @@ -34,7 +34,7 @@ SpriteRenderer::SpriteRenderer(const std::string& name, BucketId my_id) : BucketRenderer(name, my_id), m_sprite_renderer(fmt::format("{}.sprites", name), my_id, - 4000, + 16384, DirectRenderer::Mode::SPRITE_CPU), m_direct_renderer(fmt::format("{}.direct", name), my_id, 100, DirectRenderer::Mode::NORMAL) {} diff --git a/game/kernel/kmachine.h b/game/kernel/kmachine.h index 1c2b894530..c0c9f50af2 100644 --- a/game/kernel/kmachine.h +++ b/game/kernel/kmachine.h @@ -8,6 +8,10 @@ #include "common/common_types.h" #include "Ptr.h" +//! Toggle to use more memory. To simulate the original game's memory layout, set this to false. +// Make sure this matches the const in gcommon.gc. +constexpr bool BIG_MEMORY = true; + //! How much space to leave for the stack when creating the debug heap // In the game, it's 16 kB, but we increase it to 64 kB. // ASAN builds + fmt / spdlog stuff uses a _ton_ of stack when no optimizations are on and we @@ -18,7 +22,7 @@ constexpr u32 DEBUG_HEAP_SPACE_FOR_STACK = 0x10000; constexpr u32 HEAP_START = 0x13fd20; //! Where to end the global heap so it doesn't overlap with the stack. -constexpr u32 GLOBAL_HEAP_END = 0x1ffc000 + (0x1ffc000 - HEAP_START); // doubled +constexpr u32 GLOBAL_HEAP_END = 0x1ffc000 + (BIG_MEMORY ? (0x1ffc000 - HEAP_START) : 0); // doubled //! Location of kglobalheap, kdebugheap kheapinfo structures. constexpr u32 GLOBAL_HEAP_INFO_ADDR = 0x13AD00; diff --git a/goal_src/build/all_files.gc b/goal_src/build/all_files.gc index 6daff52d5a..d3c9d8fd8e 100644 --- a/goal_src/build/all_files.gc +++ b/goal_src/build/all_files.gc @@ -153,6 +153,7 @@ "goal_src/engine/nav/navigate-h.gc" "goal_src/engine/load/load-dgo.gc" "goal_src/engine/load/ramdisk.gc" + "goal_src/engine/pc/pckernel.gc" ;; added "goal_src/engine/sound/gsound.gc" "goal_src/engine/math/transformq.gc" "goal_src/engine/collide/collide-func.gc" @@ -261,7 +262,6 @@ "goal_src/engine/gfx/tie/prototype.gc" "goal_src/engine/collide/main-collide.gc" "goal_src/engine/game/video.gc" - "goal_src/engine/pc/pckernel.gc" ;; added "goal_src/engine/game/main.gc" "goal_src/engine/collide/collide-cache.gc" "goal_src/engine/entity/relocate.gc" @@ -352,7 +352,7 @@ "goal_src/levels/l1_only/citb-drop-plat-L1.gc" "goal_src/levels/citadel/assistant-citadel.gc" "goal_src/levels/demo/demo-obs.gc" - "goal_src/levels/common/static-screen.gc" + "goal_src/levels/demo/static-screen.gc" "goal_src/levels/finalboss/robotboss-h.gc" "goal_src/levels/finalboss/robotboss-part.gc" "goal_src/levels/finalboss/sage-finalboss-part.gc" diff --git a/goal_src/build/all_objs.json b/goal_src/build/all_objs.json index f2f467b29d..3674f0fff5 100644 --- a/goal_src/build/all_objs.json +++ b/goal_src/build/all_objs.json @@ -461,7 +461,7 @@ ["tpage-1605", "tpage-1605", 4, ["DEM", "L1"], "levels/demo"], ["tpage-1606", "tpage-1606", 4, ["DEM", "L1"], "levels/demo"], ["tpage-1607", "tpage-1607", 4, ["DEM", "L1"], "levels/demo"], -["static-screen", "static-screen", 3, ["DEM", "L1", "TIT"], "levels/common"], +["static-screen", "static-screen", 3, ["DEM", "L1", "TIT"], "levels/demo"], ["tpage-1480", "tpage-1480", 4, ["DEM"], "levels/demo"], ["tpage-1479", "tpage-1479", 4, ["DEM"], "levels/demo"], ["demo-vis", "demo-vis", 4, ["DEM"], "levels/demo"], diff --git a/goal_src/build/game_dgos.gc b/goal_src/build/game_dgos.gc index c13dd0d872..7d2e4a60d8 100644 --- a/goal_src/build/game_dgos.gc +++ b/goal_src/build/game_dgos.gc @@ -354,6 +354,7 @@ ("navigate-h.o" "navigate-h") ("load-dgo.o" "load-dgo") ("ramdisk.o" "ramdisk") + ("pckernel.o" "pckernel") ;; added ("gsound.o" "gsound") ("transformq.o" "transformq") ("collide-func.o" "collide-func") @@ -462,7 +463,6 @@ ("prototype.o" "prototype") ("main-collide.o" "main-collide") ("video.o" "video") - ("pckernel.o" "pckernel") ;; added ("main.o" "main") ("collide-cache.o" "collide-cache") ("relocate.o" "relocate") diff --git a/goal_src/dgos/dar.gd b/goal_src/dgos/dar.gd new file mode 100644 index 0000000000..01005d2bf9 --- /dev/null +++ b/goal_src/dgos/dar.gd @@ -0,0 +1,19 @@ + +("DAR.DGO" + ("darkcave-obs.o" "darkcave-obs") + ("tpage-1306.go" "tpage-1306") + ("tpage-1307.go" "tpage-1307") + ("tpage-1305.go" "tpage-1305") + ("tpage-1304.go" "tpage-1304") + ("tpage-1352.go" "tpage-1352") + ("baby-spider-ag.go" "baby-spider") + ("cavecrystal-ag.go" "cavecrystal") + ("caveelevator-ag.go" "caveelevator") + ("cavespatula-darkcave-ag.go" "cavespatula-darkcave") + ("cavetrapdoor-ag.go" "cavetrapdoor") + ("dark-crystal-ag.go" "dark-crystal") + ("mother-spider-ag.go" "mother-spider") + ("spider-egg-ag.go" "spider-egg") + ("water-anim-darkcave-ag.go" "water-anim-darkcave") + ("darkcave-vis.go" "darkcave-vis") + ) \ No newline at end of file diff --git a/goal_src/dgos/dem.gd b/goal_src/dgos/dem.gd new file mode 100644 index 0000000000..561a54c735 --- /dev/null +++ b/goal_src/dgos/dem.gd @@ -0,0 +1,20 @@ + +("DEM.DGO" + ("demo-obs.o" "demo-obs") + ("tpage-1485.go" "tpage-1485") + ("tpage-1486.go" "tpage-1486") + ("tpage-1487.go" "tpage-1487") + ("tpage-1599.go" "tpage-1599") + ("tpage-1600.go" "tpage-1600") + ("tpage-1601.go" "tpage-1601") + ("tpage-1602.go" "tpage-1602") + ("tpage-1603.go" "tpage-1603") + ("tpage-1604.go" "tpage-1604") + ("tpage-1605.go" "tpage-1605") + ("tpage-1606.go" "tpage-1606") + ("tpage-1607.go" "tpage-1607") + ("static-screen.o" "static-screen") + ("tpage-1480.go" "tpage-1480") + ("tpage-1479.go" "tpage-1479") + ("demo-vis.go" "demo-vis") + ) \ No newline at end of file diff --git a/goal_src/dgos/engine.gd b/goal_src/dgos/engine.gd index 4d43dc2c63..609d30e8dd 100644 --- a/goal_src/dgos/engine.gd +++ b/goal_src/dgos/engine.gd @@ -145,6 +145,7 @@ ("navigate-h.o" "navigate-h") ("load-dgo.o" "load-dgo") ("ramdisk.o" "ramdisk") + ("pckernel.o" "pckernel") ;; added ("gsound.o" "gsound") ("transformq.o" "transformq") ("collide-func.o" "collide-func") @@ -253,7 +254,6 @@ ("prototype.o" "prototype") ("main-collide.o" "main-collide") ("video.o" "video") - ("pckernel.o" "pckernel") ;; added ("main.o" "main") ("collide-cache.o" "collide-cache") ("relocate.o" "relocate") diff --git a/goal_src/dgos/game.gd b/goal_src/dgos/game.gd index badfca5bcb..eeb7ad8ba1 100644 --- a/goal_src/dgos/game.gd +++ b/goal_src/dgos/game.gd @@ -141,6 +141,7 @@ ("navigate-h.o" "navigate-h") ("load-dgo.o" "load-dgo") ("ramdisk.o" "ramdisk") + ("pckernel.o" "pckernel") ;; added ("gsound.o" "gsound") ("transformq.o" "transformq") ("collide-func.o" "collide-func") @@ -249,7 +250,6 @@ ("prototype.o" "prototype") ("main-collide.o" "main-collide") ("video.o" "video") - ("pckernel.o" "pckernel") ;; added ("main.o" "main") ("collide-cache.o" "collide-cache") ("relocate.o" "relocate") diff --git a/goal_src/dgos/rob.gd b/goal_src/dgos/rob.gd new file mode 100644 index 0000000000..6648602de8 --- /dev/null +++ b/goal_src/dgos/rob.gd @@ -0,0 +1,25 @@ + +("ROB.DGO" + ("cave-trap.o" "cave-trap") + ("spider-egg.o" "spider-egg") + ("robocave-part.o" "robocave-part") + ("eichar-pole+0-ag.go" "eichar-pole+0") + ("tpage-1318.go" "tpage-1318") + ("tpage-1319.go" "tpage-1319") + ("tpage-1317.go" "tpage-1317") + ("tpage-1316.go" "tpage-1316") + ("babak-ag.go" "babak") + ("baby-spider-ag.go" "baby-spider") + ("cavecrusher-ag.go" "cavecrusher") + ("caveelevator-ag.go" "caveelevator") + ("cavespatulatwo-ag.go" "cavespatulatwo") + ("cavetrapdoor-ag.go" "cavetrapdoor") + ("driller-lurker-ag.go" "driller-lurker") + ("ecovalve-ag.go" "ecovalve") + ("plat-ag.go" "plat") + ("plat-eco-ag.go" "plat-eco") + ("spider-egg-ag.go" "spider-egg") + ("spiderwebs-ag.go" "spiderwebs") + ("water-anim-robocave-ag.go" "water-anim-robocave") + ("robocave-vis.go" "robocave-vis") + ) \ No newline at end of file diff --git a/goal_src/dgos/tit.gd b/goal_src/dgos/tit.gd new file mode 100644 index 0000000000..d40b0f1135 --- /dev/null +++ b/goal_src/dgos/tit.gd @@ -0,0 +1,17 @@ +("TIT.DGO" + ("static-screen.o" "static-screen") + ("title-obs.o" "title-obs") + ("tpage-1609.go" "tpage-1609") + ("tpage-416.go" "tpage-416") + ("tpage-415.go" "tpage-415") + ("tpage-397.go" "tpage-397") + ("tpage-1499.go" "tpage-1499") + ("logo-ag.go" "logo") + ("logo-black-ag.go" "logo-black") + ("logo-cam-ag.go" "logo-cam") + ("logo-volumes-ag.go" "logo-volumes") + ("ndi-ag.go" "ndi") + ("ndi-cam-ag.go" "ndi-cam") + ("ndi-volumes-ag.go" "ndi-volumes") + ("title-vis.go" "title-vis") + ) \ No newline at end of file diff --git a/goal_src/engine/debug/assert.gc b/goal_src/engine/debug/assert.gc index f5c7fd0908..ade04714db 100644 --- a/goal_src/engine/debug/assert.gc +++ b/goal_src/engine/debug/assert.gc @@ -14,8 +14,7 @@ "Assert that expr is truthy, print assert information otherwise" (when (not expr) - (format #t "(ASSERT ~S) FAILED in " - msg) + (format #t "(ASSERT ~S) FAILED in " msg) (print-pos *__private-assert-info*) ) 0 diff --git a/goal_src/engine/debug/default-menu.gc b/goal_src/engine/debug/default-menu.gc index 6bf7637b17..f08917c163 100644 --- a/goal_src/engine/debug/default-menu.gc +++ b/goal_src/engine/debug/default-menu.gc @@ -552,10 +552,8 @@ ) ) ) - (let ((v0-3 (sort (-> *shader-pick-menu* items) debug-menu-node *shader-pick-menu* items) (the-as pair v0-3)) - v0-3 - ) + (set! (-> *shader-pick-menu* items) (the-as pair (sort (-> *shader-pick-menu* items) debug-menu-node s3-0 length)) (let ((a1-4 (new - 'global + 'debug ;; was global 'debug-menu-item-flag (the-as string (-> s3-0 data s2-0 name)) (-> s3-0 data s2-0 name) @@ -4104,6 +4102,47 @@ ) ) +(define *part-pick-menu* (the-as debug-menu #f)) +(define *spawn-part-test* #t) + +(defun dm-part-pick-func ((id int) (msg debug-menu-msg)) + (if (zero? (-> *part-group-id-table* id)) + (return 'invalid)) + (when (= msg (debug-menu-msg press)) + (set! *part-tester-id* id) + (if *spawn-part-test* + (start-part) + ) + ) + (= *part-tester-id* id) + ) + +(defun build-particles-list () + (debug-menu-remove-all-items *part-pick-menu*) + (dotimes (i (-> *part-group-id-table* length)) + (let ((part (-> *part-group-id-table* i))) + (when (and (nonzero? part)) + (debug-menu-append-item *part-pick-menu* (new-dm-flag (-> part name) i dm-part-pick-func)) + ) + ) + ) + (set! (-> *part-pick-menu* items) (the-as pair (sort (-> *part-pick-menu* items) debug-menu-node *debug-menu-context* root-menu) (debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-load-menu *debug-menu-context*)) + (debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-part-menu *debug-menu-context*)) (debug-menu-append-item (-> *debug-menu-context* root-menu) (debug-menu-make-from-template *debug-menu-context* diff --git a/goal_src/engine/debug/memory-usage.gc b/goal_src/engine/debug/memory-usage.gc index b722eb4950..beaa52dfb3 100644 --- a/goal_src/engine/debug/memory-usage.gc +++ b/goal_src/engine/debug/memory-usage.gc @@ -5,8 +5,10 @@ ;; name in dgo: memory-usage ;; dgos: GAME, ENGINE +;; DECOMP BEGINS ;; this file is debug only +(declare-file (debug)) (when *debug-segment* (defmethod inspect memory-usage-block ((obj memory-usage-block)) @@ -39,19 +41,19 @@ (defmethod mem-usage object ((obj object) (arg0 memory-usage-block) (arg1 int)) "Most general mem-usage message. Just prints a warning, in case you expect this to do something." (if obj - (format #t "WARNING: mem-usage called on object, probably not what was wanted for ~A~%" obj) - ) + (format #t "WARNING: mem-usage called on object, probably not what was wanted for ~A~%" obj) + ) obj ) (defmethod calculate-total memory-usage-block ((obj memory-usage-block)) "Compute the total memory usage of everything in the block." (let ((v0-0 0)) - (dotimes (v1-0 (-> obj length)) - (+! v0-0 (-> obj data v1-0 total)) + (dotimes (v1-0 (-> obj length)) + (+! v0-0 (-> obj data v1-0 total)) + ) + v0-0 ) - v0-0 - ) ) (defmethod reset! memory-usage-block ((obj memory-usage-block)) @@ -68,24 +70,24 @@ (defun mem-size ((arg0 basic) (arg1 symbol) (arg2 int)) "Compute the size of arg0. If arg1, then print the result. Arg2 is flags" (let ((gp-0 (new 'stack 'memory-usage-block))) - (mem-usage arg0 gp-0 arg2) - (if arg1 - (inspect gp-0) + (mem-usage arg0 gp-0 arg2) + (if arg1 + (inspect gp-0) + ) + (calculate-total gp-0) ) - (calculate-total gp-0) - ) ) (defmethod compute-memory-usage level ((obj level) (arg0 object)) "Compute the memory usage of a level. Arg0 will force a recalculation." (if (zero? (-> obj mem-usage-block)) - (set! (-> obj mem-usage-block) (new 'debug 'memory-usage-block)) - ) + (set! (-> obj mem-usage-block) (new 'debug 'memory-usage-block)) + ) (set! arg0 (or (zero? (-> obj mem-usage-block length)) arg0)) (when arg0 - (mem-usage obj (reset! (-> obj mem-usage-block)) 0) - (set! (-> obj mem-usage) (calculate-total (-> obj mem-usage-block))) - ) + (mem-usage obj (reset! (-> obj mem-usage-block)) 0) + (set! (-> obj mem-usage) (calculate-total (-> obj mem-usage-block))) + ) (-> obj mem-usage-block) ) @@ -114,18 +116,19 @@ (while (not (null? s4-0)) (let ((a0-5 (-> (the-as symbol v1-4) value))) (set! *global-search-count* s5-0) - (iterate-process-tree (the-as process-tree a0-5) - (lambda ((arg0 basic)) - (let ((gp-0 *temp-mem-usage*) - (s5-0 *global-search-count*) - ) - (+! (-> gp-0 data s5-0 used) 1) - (+! (-> gp-0 data s5-0 total) (logand -16 (+ (asize-of arg0) 15))) - ) - #t - ) - *null-kernel-context* - ) + (iterate-process-tree + (the-as process-tree a0-5) + (lambda ((arg0 basic)) + (let ((gp-0 *temp-mem-usage*) + (s5-0 *global-search-count*) + ) + (+! (-> gp-0 data s5-0 used) 1) + (+! (-> gp-0 data s5-0 total) (logand -16 (+ (asize-of arg0) 15))) + ) + #t + ) + *null-kernel-context* + ) ) (+! s5-0 1) (set! s4-0 (cdr s4-0)) @@ -133,8 +136,8 @@ ) ) ) - (iterate-process-tree - obj + (iterate-process-tree + obj (lambda ((arg0 process)) (let ((gp-0 *temp-mem-usage*)) (let ((s4-0 (cond @@ -252,7 +255,8 @@ (+! (-> gp-0 data 101 count) 1) (let ((v1-141 (asize-of (-> (the-as process-drawable arg0) skel)))) (+! (-> gp-0 data 101 used) v1-141) - (+! (-> gp-0 data 101 total) (logand -16 (+ v1-141 15)))) + (+! (-> gp-0 data 101 total) (logand -16 (+ v1-141 15))) + ) ) (when (nonzero? (-> (the-as process-drawable arg0) part)) (set! (-> gp-0 length) (max 105 (-> gp-0 length))) @@ -317,7 +321,7 @@ (s1-0 (* (dma-buffer-length (-> *display* frames (-> *display* last-screen) frame global-buf)) 16)) ) (set! *max-dma* (max s1-0 *max-dma*)) - + ;; turns memory usage red if you're using too much. This uses the sum of memory-usage blocks, which as far ;; as I can tell, is not accurate (textures are negative, for example, but don't seem to be double counted (or even counted) elsewhere). (if (< s2-0 (-> arg0 mem-usage)) @@ -333,14 +337,14 @@ (sar (memory-used *nk-dead-pool*) 10) (sar (memory-total *nk-dead-pool*) 10) ) - + (format arg1 "~5,'-DK/~5,'-DK--~%" (shr s1-0 10) (sar *max-dma* 10)) ) ) - - + + (when *stats-memory-short* - (let ((s2-2 (if (logtest? (-> *cpad-list* cpads 1 button0-abs 0) (pad-buttons l3)) + (let ((s2-2 (if (cpad-hold? 1 l3) #t arg1 ) @@ -356,8 +360,8 @@ ) ) ) - - + + (when (not *stats-memory-short*) ;; print the table @@ -382,10 +386,7 @@ ) ) - (format arg1 " bsp-leaf-vis-adj ~192H~5DK~%" - (sar (+ (-> obj data 59 total) (-> obj data 60 total)) 10) - ) - + (format arg1 " bsp-leaf-vis-adj ~192H~5DK~%" (sar (+ (-> obj data 59 total) (-> obj data 60 total)) 10)) (format arg1 " level-code ~192H~5DK~%" (sar (-> obj data 63 total) 10)) (format arg1 " tfrag ~192H~5DK ~280Htfragment~456H~5DK~%" @@ -530,7 +531,7 @@ ) (sar (-> *dma-mem-usage* data 82 total) 10) ) - + (format arg1 "~1K~0L") ) (none) @@ -541,4 +542,3 @@ - diff --git a/goal_src/engine/debug/menu.gc b/goal_src/engine/debug/menu.gc index c03ea8a444..a2985f1a88 100644 --- a/goal_src/engine/debug/menu.gc +++ b/goal_src/engine/debug/menu.gc @@ -13,6 +13,7 @@ ;; this file is debug only +(declare-file (debug)) (when *debug-segment* (declare-type debug-menu basic) @@ -528,7 +529,7 @@ (debug-menu-context-send-msg context (debug-menu-msg deactivate) (debug-menu-dest activation)) ) (set! (-> item parent) menu) - (set! (-> menu items) (the-as pair (append! (-> menu items) (cons item '())))) + (set! (-> menu items) (the-as pair (append! (-> menu items) (dcons item '())))) ;; was normal cons (debug-menu-rebuild menu) (if was-active (debug-menu-context-send-msg context (debug-menu-msg activate) (debug-menu-dest activation)) diff --git a/goal_src/engine/debug/part-tester.gc b/goal_src/engine/debug/part-tester.gc index 09181fff74..e4e83278b4 100644 --- a/goal_src/engine/debug/part-tester.gc +++ b/goal_src/engine/debug/part-tester.gc @@ -5,9 +5,9 @@ ;; name in dgo: part-tester ;; dgos: GAME, ENGINE -(declare-type part-tester basic) - -(define-extern *part-tester* part-tester) +(#when PC_PORT + (define *part-tester-id* 105) + ) ;; DECOMP BEGINS @@ -35,12 +35,9 @@ :method-count-assert 14 :size-assert #x7c :flag-assert #xe0100007c - (:states - part-tester-idle - ) ) - +(define-extern *part-tester* part-tester) (define *part-tester-name* (the-as string #f)) (defmethod deactivate part-tester ((obj part-tester)) @@ -71,7 +68,17 @@ (-> self root trans) (the-as rgba (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)) ) + + ;; change this line to change the particle group to test + ;; notes: + ;; - particles that use aux list won't work (warp parts) + ;; - some particles may have callbacks that won't work yet (let ((gp-1 (-> *part-group-id-table* 105))) + (#when PC_PORT + (if (nonzero? (-> *part-group-id-table* *part-tester-id*)) + (set! gp-1 (-> *part-group-id-table* *part-tester-id*)) + ) + ) (let ((s5-1 (-> self root trans))) (when (!= gp-1 (-> self old-group)) (when (nonzero? (-> self part)) diff --git a/goal_src/engine/debug/viewer.gc b/goal_src/engine/debug/viewer.gc index 2d7083a79f..836edda029 100644 --- a/goal_src/engine/debug/viewer.gc +++ b/goal_src/engine/debug/viewer.gc @@ -21,13 +21,9 @@ :method-count-assert 20 :size-assert #xb4 :flag-assert #x14005000b4 - (:states - viewer-process - ) ) -;; NOTE - manually added -(define-perm *viewer* viewer #f) +(define-extern *viewer* viewer) (defstate viewer-process (viewer) :code @@ -137,20 +133,18 @@ (when s2-0 (dotimes (s1-0 (-> s2-0 length)) (cond - ((and - (not s4-0) - (= (-> s2-0 data s1-0 type) merc-ctrl) - (or (zero? (length viewer-geo-name)) (string= (art-part-name (-> s2-0 data s1-0 name)) viewer-geo-name)) - ) + ((and (not s4-0) + (= (-> s2-0 data s1-0 type) merc-ctrl) + (or (zero? (length viewer-geo-name)) (string= (art-part-name (-> s2-0 data s1-0 name)) viewer-geo-name)) + ) (set! s4-0 s1-0) ) ((= (-> s2-0 data s1-0 type) art-joint-geo) (set! s3-0 s1-0) ) - ((and - (= (-> s2-0 data s1-0 type) art-joint-anim) - (or (zero? (length viewer-ja-name)) (string= (art-part-name (-> s2-0 data s1-0 name)) viewer-ja-name)) - ) + ((and (= (-> s2-0 data s1-0 type) art-joint-anim) + (or (zero? (length viewer-ja-name)) (string= (art-part-name (-> s2-0 data s1-0 name)) viewer-ja-name)) + ) (set! s5-0 s1-0) ) ) diff --git a/goal_src/engine/entity/entity.gc b/goal_src/engine/entity/entity.gc index c0178ec8f9..2de9ec7ec4 100644 --- a/goal_src/engine/entity/entity.gc +++ b/goal_src/engine/entity/entity.gc @@ -1252,7 +1252,7 @@ (define-extern collectable type) (define-extern ecovalve type) -(define-extern eco type) +(define-extern crate type) (defmethod birth! entity-actor ((obj entity-actor)) "Create a process for this entity and start it." @@ -1261,7 +1261,7 @@ (type-type? (-> obj etype) collectable) (type-type? (-> obj etype) vent) (type-type? (-> obj etype) ecovalve) - ;(type-type? (-> obj etype) eco) + ;(type-type? (-> obj etype) crate) ) ;;(birth-log "rejecting ~A birth because yes (was ~A)~%" obj (-> obj etype)) (logior! (-> obj extra perm status) (entity-perm-status bit-0)) diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc index 3c6b621087..adf4c71469 100644 --- a/goal_src/engine/game/main.gc +++ b/goal_src/engine/game/main.gc @@ -530,10 +530,6 @@ (stack-size-set! (-> self main-thread) 512) (let ((disp *display*)) - (#when PC_PORT - (read-from-file *pc-settings* PC_SETTINGS_FILE_NAME) - ) - ;; todo spad terrain context (set! *teleport* #t) (update-per-frame-settings! *setting-control*) @@ -631,6 +627,12 @@ (when *debug-segment* (debug-draw-buffers) ;; lines/text + (#when PC_PORT + (if (-> *pc-settings* debug-pad-display) + (debug-pad-display (-> *cpad-list* cpads 0)) + ) + ) + ;; debug dma (with-dma-buffer-add-bucket ((debug-buf (-> disp frames (-> disp on-screen) frame debug-buf)) (bucket-id debug-draw1)) @@ -680,6 +682,15 @@ (* 100.0 (/ (the float remain) (the float total))) ) ) + (let ( + (remain (&- (-> debug top) (-> debug current))) + (total (&- (-> debug top) (-> debug base))) + ) + (format *stdcon* "~3Ldebug heap ~,,2fK/~,,2fK (~,,2f%) remain~0L~%" + (* (1/ 1024) remain) (* (1/ 1024) total) + (* 100.0 (/ (the float remain) (the float total))) + ) + ) (format *stdcon* "~3Lfree DMA global: ~d debug: ~d~0L~%" (dma-buffer-free (-> disp frames (-> disp on-screen) frame global-buf)) (dma-buffer-free (-> disp frames (-> disp on-screen) frame debug-buf)) diff --git a/goal_src/engine/game/settings.gc b/goal_src/engine/game/settings.gc index cec4732936..01d054137f 100644 --- a/goal_src/engine/game/settings.gc +++ b/goal_src/engine/game/settings.gc @@ -13,7 +13,7 @@ (s4-0 (-> arg0 alive-list-end prev0)) ) (while (!= (the-as connectable conn) (-> arg0 alive-list)) - (case (-> conn param0) + (case (-> conn param0) (('border-mode) (set! (-> obj border-mode) (the-as symbol (-> conn param1))) ) @@ -449,6 +449,9 @@ (set! (-> gp-0 aspect-ratio) 'aspect4x3) ) ) + (#when PC_PORT + (set! (-> gp-0 aspect-ratio) (-> *pc-settings* aspect-setting)) + ) (if (zero? *boot-video-mode*) (set! (-> gp-0 video-mode) 'ntsc) (set! (-> gp-0 video-mode) 'pal) diff --git a/goal_src/engine/gfx/sprite/sprite.gc b/goal_src/engine/gfx/sprite/sprite.gc index 52bd95204b..4f2fdae4dd 100644 --- a/goal_src/engine/gfx/sprite/sprite.gc +++ b/goal_src/engine/gfx/sprite/sprite.gc @@ -393,6 +393,12 @@ (defmethod new sprite-array-2d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int)) "Allocate a sprite-array for 2d sprites. There are two groups, each can contain the given number." + (#when PC_BIG_MEMORY + (when (not (-> *pc-settings* ps2-parts?)) + (*! group-0-size 16) ;; 16x more particles! + (*! group-1-size 16) ;; 16x more particles! + ) + ) (let* ((sprite-count (+ group-0-size group-1-size)) (vec-data-size (* 3 sprite-count)) ;; 3 quadwords of vec-data per sprite (adgif-data-size (* 5 sprite-count)) ;; 5 quadwords of adgif data per sprite @@ -416,6 +422,12 @@ (defmethod new sprite-array-3d ((allocation symbol) (type-to-make type) (group-0-size int) (group-1-size int)) "Allocate a sprite-array for 3d sprites. There are two groups, each can contain the given number of sprites. Group 1 size is zero in practice for 3d." + (#when PC_BIG_MEMORY + (when (and *pc-settings* (not (-> *pc-settings* ps2-parts?))) + (*! group-0-size 16) ;; 16x more particles! + (*! group-1-size 16) ;; 16x more particles! + ) + ) (let* ((sprite-count (+ group-0-size group-1-size)) (vec-data-size (* 3 sprite-count)) (adgif-data-size (* 5 sprite-count)) diff --git a/goal_src/engine/level/level.gc b/goal_src/engine/level/level.gc index 503f5a353f..54615c4ad7 100644 --- a/goal_src/engine/level/level.gc +++ b/goal_src/engine/level/level.gc @@ -1219,6 +1219,17 @@ obj ) +(#cond + (PC_PORT + (defconstant LEVEL_HEAP_SIZE (* 10416 1024)) ;; 10.416K + (defconstant LEVEL_HEAP_SIZE_DEBUG (* 11000 1024)) + ) + (#t + (defconstant LEVEL_HEAP_SIZE (* 10416 1024)) ;; 10.416K + (defconstant LEVEL_HEAP_SIZE_DEBUG (* 25600 1024)) ;; 25.600K + ) + ) + (defmethod alloc-levels! level-group ((obj level-group) (compact-level-heaps symbol)) "Allocate the level heaps and load the common packages for levels." @@ -1234,8 +1245,8 @@ (load-package "common" global) ;; load COMMON unless we're debugging levels ) ;; allocate level heaps. turn on compact-level-heaps for use in 32MB systems - (let ((level-heap-size (if compact-level-heaps (* 10416 1024) - (* 25600 1024))) + (let ((level-heap-size (if compact-level-heaps LEVEL_HEAP_SIZE + LEVEL_HEAP_SIZE_DEBUG)) ) (dotimes (lev LEVEL_COUNT) (let ((level-heap (-> obj level lev heap))) diff --git a/goal_src/engine/pc/pckernel-h.gc b/goal_src/engine/pc/pckernel-h.gc index 9c87251df1..97d6ab9653 100644 --- a/goal_src/engine/pc/pckernel-h.gc +++ b/goal_src/engine/pc/pckernel-h.gc @@ -31,7 +31,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defglobalconstant PC_KERNEL_VERSION_BUILD #x0000) +(defglobalconstant PC_KERNEL_VERSION_BUILD #x0001) (defglobalconstant PC_KERNEL_VERSION_REVISION #x0001) (defglobalconstant PC_KERNEL_VERSION_MINOR #x0000) @@ -180,6 +180,7 @@ (win-height int32) (dpi-x float) ;; DPI width scale (dpi-y float) ;; DPI height scale + (aspect-setting symbol) ;; aspect ratio setting, for the original game (aspect-ratio-auto? symbol) ;; if on, aspect ratio is calculated automatically. (aspect-ratio float) ;; the desired aspect ratio. set auto to off and then this to 4/3 to force 4x3 aspect. (aspect-ratio-scale float) ;; aspect ratio compared to 4x3 diff --git a/goal_src/engine/pc/pckernel.gc b/goal_src/engine/pc/pckernel.gc index dae789fe4a..620efac8a7 100644 --- a/goal_src/engine/pc/pckernel.gc +++ b/goal_src/engine/pc/pckernel.gc @@ -155,9 +155,6 @@ ) ) ) - (if (and *debug-segment* (-> obj debug-pad-display)) - (debug-pad-display (-> *cpad-list* cpads 0)) - ) (none)) @@ -365,7 +362,7 @@ (set! (-> obj aspect-custom-y) (file-stream-read-int file)) ) (("aspect-auto") (set! (-> obj aspect-ratio-auto?) (file-stream-read-symbol file))) - (("aspect-game") (set! (-> *setting-control* default aspect-ratio) (file-stream-read-symbol file))) + (("aspect-game") (set! (-> obj aspect-setting) (file-stream-read-symbol file))) (("fullscreen") (set-fullscreen! obj (file-stream-read-symbol file))) (("letterbox") (set! (-> obj letterbox?) (file-stream-read-symbol file))) (("vsync") (set! (-> obj vsync?) (file-stream-read-symbol file))) @@ -592,7 +589,7 @@ (define *pc-settings* (new 'global 'pc-settings)) - +(read-from-file *pc-settings* PC_SETTINGS_FILE_NAME) ) diff --git a/goal_src/engine/sparticle/sparticle.gc b/goal_src/engine/sparticle/sparticle.gc index 34b6636a0c..05355a929a 100644 --- a/goal_src/engine/sparticle/sparticle.gc +++ b/goal_src/engine/sparticle/sparticle.gc @@ -62,6 +62,12 @@ arg2: is 3d? arg3: pointer to sprite allocations arg4: pointer to adgif allocation" + (#when PC_BIG_MEMORY + (when (not (-> *pc-settings* ps2-parts?)) + (*! arg0 16) ;; 16x more particles! + (*! arg1 16) ;; 16x more particles! + ) + ) (let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (let* ((v1-3 (/ (+ arg0 63) 64)) ;; num blocks (a0-2 (/ (+ arg1 63) 64)) diff --git a/goal_src/game.gp b/goal_src/game.gp index b05c6fdec5..9bf728f391 100644 --- a/goal_src/game.gp +++ b/goal_src/game.gp @@ -375,6 +375,127 @@ "flut_common/target-flut.gc" ) + +;;;;;;;;;;;;;;;;;;;;; +;; Beach +;;;;;;;;;;;;;;;;;;;;; + +(cgo "BEA.DGO" + "bea.gd" + ) + +(copy-vis-files "BEA") + +(goal-src-sequence + "levels/beach/" + :deps ("out/obj/ticky.o") + "air-h.gc" + "air.gc" + "wobbler.gc" + "twister.gc" + "beach-obs.gc" + "bird-lady.gc" + "bird-lady-beach.gc" + "mayor.gc" + "sculptor.gc" + "pelican.gc" + "lurkerworm.gc" + "lurkercrab.gc" + "lurkerpuppy.gc" + "beach-rocks.gc" + "seagull.gc" + "beach-part.gc" + ) + +(copy-textures 212 214 213 215) + +(copy-gos + "barrel-ag" + "beachcam-ag" + "bird-lady-ag" + "bird-lady-beach-ag" + "bladeassm-ag" + "ecoventrock-ag" + "flutflut-ag" + "flutflutegg-ag" + "grottopole-ag" + "harvester-ag" + "kickrock-ag" + "lrocklrg-ag" + "lurkercrab-ag" + "lurkerpuppy-ag" + "lurkerworm-ag" + "mayor-ag" + "pelican-ag" + "sculptor-ag" + "sculptor-muse-ag" + "seagull-ag" + "windmill-one-ag" + "beach-vis" + ) + + +;;;;;;;;;;;;;;;;;;;;; +;; Jungle +;;;;;;;;;;;;;;;;;;;;; + +(cgo "JUN.DGO" + "jun.gd") + +(copy-vis-files "JUN") + +(goal-src-sequence + "levels/jungle/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + + "jungle-elevator.gc" + "bouncer.gc" + "hopper.gc" + "junglesnake.gc" + "darkvine.gc" + "jungle-obs.gc" + "jungle-mirrors.gc" + "junglefish.gc" + "fisher-JUN.gc" + "jungle-part.gc" + ) + +(copy-textures 385 531 386 388 765) + +(copy-gos + "eichar-fish+0-ag" + "accordian-ag" + "bounceytarp-ag" + "catch-fisha-ag" + "catch-fishb-ag" + "catch-fishc-ag" + "darkvine-ag" + "fish-net-ag" + "fisher-ag" + "hopper-ag" + "junglecam-ag" + "junglefish-ag" + "junglesnake-ag" + "launcherdoor-ag" + "logtrap-ag" + "lurkerm-piston-ag" + "lurkerm-tall-sail-ag" + "maindoor-ag" + "medres-firecanyon-ag" + "periscope-ag" + "plat-button-ag" + "plat-eco-ag" + "precurbridge-ag" + "reflector-mirror-ag" + "ropebridge-52-ag" + "ropebridge-70-ag" + "sidedoor-ag" + "towertop-ag" + "water-anim-jungle-ag" + "jungle-vis" + ) + ;;;;;;;;;;;;;;;;;;;;; ;; Village 1 ;;;;;;;;;;;;;;;;;;;;; @@ -445,68 +566,6 @@ ) -;;;;;;;;;;;;;;;;;;;;; -;; Jungle -;;;;;;;;;;;;;;;;;;;;; - -(cgo "JUN.DGO" - "jun.gd") - -(copy-vis-files "JUN") - -(goal-src-sequence - "levels/jungle/" - :deps ;; no idea what these depend on, make it depend on the whole engine - ("out/obj/ticky.o") - - "jungle-elevator.gc" - "bouncer.gc" - "hopper.gc" - "junglesnake.gc" - "darkvine.gc" - "jungle-obs.gc" - "jungle-mirrors.gc" - "junglefish.gc" - "fisher-JUN.gc" - "jungle-part.gc" - ) - -(copy-textures 385 531 386 388 765) - -(copy-gos - "eichar-fish+0-ag" - "accordian-ag" - "bounceytarp-ag" - "catch-fisha-ag" - "catch-fishb-ag" - "catch-fishc-ag" - "darkvine-ag" - "fish-net-ag" - "fisher-ag" - "hopper-ag" - "junglecam-ag" - "junglefish-ag" - "junglesnake-ag" - "launcherdoor-ag" - "logtrap-ag" - "lurkerm-piston-ag" - "lurkerm-tall-sail-ag" - "maindoor-ag" - "medres-firecanyon-ag" - "periscope-ag" - "plat-button-ag" - "plat-eco-ag" - "precurbridge-ag" - "reflector-mirror-ag" - "ropebridge-52-ag" - "ropebridge-70-ag" - "sidedoor-ag" - "towertop-ag" - "water-anim-jungle-ag" - "jungle-vis" - ) - - ;;;;;;;;;;;;;;;;;;;;; ;; Jungle temple ;;;;;;;;;;;;;;;;;;;;; @@ -540,31 +599,6 @@ ) -;;;;;;;;;;;;;;;;;;;;; -;; intro only -;;;;;;;;;;;;;;;;;;;;; - -(cgo "INT.DGO" "int.gd") - -(copy-vis-files "INT") - -(goal-src-sequence - "levels/intro/" - :deps ;; no idea what these depend on, make it depend on the whole engine - ("out/obj/ticky.o") - - "evilbro.gc" - ) - -(copy-textures 1455 1457 1456 1454) - -(copy-gos - "evilbro-ag" - "evilsis-ag" - "intro-vis" - ) - - ;;;;;;;;;;;;;;;;;;;;; ;; misty island ;;;;;;;;;;;;;;;;;;;;; @@ -624,211 +658,42 @@ ;;;;;;;;;;;;;;;;;;;;; -;; Beach +;; swamp ;;;;;;;;;;;;;;;;;;;;; -(cgo "BEA.DGO" - "bea.gd" - ) +(cgo "SWA.DGO" "swa.gd") -(copy-vis-files "BEA") +(copy-vis-files "SWA") (goal-src-sequence - "levels/beach/" - :deps ("out/obj/ticky.o") - "air-h.gc" - "air.gc" - "wobbler.gc" - "twister.gc" - "beach-obs.gc" - "bird-lady.gc" - "bird-lady-beach.gc" - "mayor.gc" - "sculptor.gc" - "pelican.gc" - "lurkerworm.gc" - "lurkercrab.gc" - "lurkerpuppy.gc" - "beach-rocks.gc" - "seagull.gc" - "beach-part.gc" - ) - -(copy-textures 212 214 213 215) - -(copy-gos - "barrel-ag" - "beachcam-ag" - "bird-lady-ag" - "bird-lady-beach-ag" - "bladeassm-ag" - "ecoventrock-ag" - "flutflut-ag" - "flutflutegg-ag" - "grottopole-ag" - "harvester-ag" - "kickrock-ag" - "lrocklrg-ag" - "lurkercrab-ag" - "lurkerpuppy-ag" - "lurkerworm-ag" - "mayor-ag" - "pelican-ag" - "sculptor-ag" - "sculptor-muse-ag" - "seagull-ag" - "windmill-one-ag" - "beach-vis" - ) - -;;;;;;;;;;;;;;;;;;;;; -;; Fire Canyon -;;;;;;;;;;;;;;;;;;;;; - -(cgo "FIC.DGO" - "fic.gd" - ) - -(copy-vis-files "FIC") - -(copy-textures 1119) ;; might be common/zoomer hud?? also in misty, lavatube, ogre and racerpkg - -(goal-src-sequence - "levels/firecanyon/" - :deps ;; no idea what these depend on, make it depend on the whole engine - ("out/obj/ticky.o") - - "firecanyon-part.gc" - "assistant-firecanyon.gc" - "firecanyon-obs.gc" - - ) - -(copy-textures 815 822 854 1123) - -(copy-gos - "assistant-firecanyon-ag" - "balloon-ag" - "crate-darkeco-cluster-ag" - "spike-ag" - "firecanyon-vis") - -;;;;;;;;;;;;;;;;;;;;; -;; Training -;;;;;;;;;;;;;;;;;;;;; - -;; the definition of the DGO package for the level -(cgo "TRA.DGO" - "tra.gd") - -(copy-vis-files "TRA") - -;; The code -(goal-src-sequence - "levels/training/" - :deps ("out/obj/ticky.o") ;; makes us depend on the whole engine - - "training-obs.gc" - "training-part.gc" - ) - -;; the textures -(copy-textures 1309 1311 1310 1308 775) - -(copy-gos - "scarecrow-a-ag" - "scarecrow-b-ag" - "trainingcam-ag" - "water-anim-training-ag" - "training-vis" - ) - -;;;;;;;;;;;;;;;;;;;;; -;; Village 2 -;;;;;;;;;;;;;;;;;;;;; - -(cgo "VI2.DGO" "vi2.gd") - -(copy-vis-files "VI2") - -(goal-src-sequence - "levels/village2/" + "levels/swamp/" :deps ("out/obj/ticky.o") - "village2-part.gc" - "village2-obs.gc" - "village2-part2.gc" - "gambler.gc" - "warrior.gc" - "geologist.gc" - "swamp-blimp.gc" - "sage-bluehut.gc" - "flutflut-bluehut.gc" - "assistant-village2.gc" - "sunken-elevator.gc" + "swamp-obs.gc" + "swamp-bat.gc" + "swamp-rat.gc" + "swamp-rat-nest.gc" + "kermit.gc" + "swamp-part.gc" + "billy.gc" ) -(copy-textures 919 922 920 921 1476) +(copy-textures 358 659 629 630) (copy-gos - "allpontoons-ag" - "assistant-village2-ag" - "ceilingflag-ag" - "exit-chamber-dummy-ag" - "fireboulder-ag" - "flutflut-bluehut-ag" - "gambler-ag" - "geologist-ag" - "jaws-ag" - "medres-rolling-ag" - "medres-rolling1-ag" - "medres-village2-ag" - "ogreboss-village2-ag" - "pontoonfive-ag" - "pontoonten-ag" - "precursor-arm-ag" - "sage-bluehut-ag" - "sunken-elevator-ag" - "swamp-blimp-ag" - "swamp-rope-ag" - "swamp-tetherrock-ag" - "swamp-tetherrock-explode-ag" - "village2cam-ag" - "warrior-ag" - "water-anim-village2-ag" - "village2-vis" - ) - - -;;;;;;;;;;;;;;;;;;;;; -;; rolling hills -;;;;;;;;;;;;;;;;;;;;; - -(cgo "ROL.DGO" "rol.gd") - -(copy-vis-files "ROL") - -(goal-src-sequence - "levels/rolling/" - :deps ("out/obj/ticky.o") - "rolling-obs.gc" - "rolling-lightning-mole.gc" - "rolling-robber.gc" - "rolling-race-ring.gc" - ) - -(copy-textures 923 926 924 925 1353) - -(copy-gos - "dark-plant-ag" - "happy-plant-ag" - "lightning-mole-ag" - "pusher-ag" - "race-ring-ag" - "robber-ag" - "rolling-start-ag" - "rollingcam-ag" - "water-anim-rolling-ag" - "rolling-vis" + "eichar-pole+0-ag" + "balance-plat-ag" + "billy-ag" + "billy-sidekick-ag" + "farthy-snack-ag" + "kermit-ag" + "swamp-bat-ag" + "swamp-rat-ag" + "swamp-rat-nest-ag" + "swamp-rock-ag" + "swamp-spike-ag" + "swampcam-ag" + "tar-plat-ag" + "swamp-vis" ) @@ -923,178 +788,6 @@ ) -;;;;;;;;;;;;;;;;;;;;; -;; swamp -;;;;;;;;;;;;;;;;;;;;; - -(cgo "SWA.DGO" "swa.gd") - -(copy-vis-files "SWA") - -(goal-src-sequence - "levels/swamp/" - :deps ("out/obj/ticky.o") - "swamp-obs.gc" - "swamp-bat.gc" - "swamp-rat.gc" - "swamp-rat-nest.gc" - "kermit.gc" - "swamp-part.gc" - "billy.gc" - ) - -(copy-textures 358 659 629 630) - -(copy-gos - "eichar-pole+0-ag" - "balance-plat-ag" - "billy-ag" - "billy-sidekick-ag" - "farthy-snack-ag" - "kermit-ag" - "swamp-bat-ag" - "swamp-rat-ag" - "swamp-rat-nest-ag" - "swamp-rock-ag" - "swamp-spike-ag" - "swampcam-ag" - "tar-plat-ag" - "swamp-vis" - ) - - -;;;;;;;;;;;;;;;;;;;;; -;; ogre boss -;;;;;;;;;;;;;;;;;;;;; - -(cgo "OGR.DGO" "ogr.gd") - -(copy-vis-files "OGR") - -(goal-src-sequence - "levels/ogre/" - :deps ("out/obj/ticky.o") - "ogre-part.gc" - "ogreboss.gc" - "ogre-obs.gc" - "flying-lurker.gc" - ) - -(copy-textures 875 967 884 1117) - -(copy-gos - "flying-lurker-ag" - "medres-snow-ag" - "ogre-bridge-ag" - "ogre-bridgeend-ag" - "ogre-isle-ag" - "ogre-step-ag" - "ogreboss-ag" - "ogrecam-ag" - "plunger-lurker-ag" - "shortcut-boulder-ag" - "tntbarrel-ag" - "water-anim-ogre-ag" - "ogre-vis" - ) - - -;;;;;;;;;;;;;;;;;;;;; -;; Village 3 -;;;;;;;;;;;;;;;;;;;;; - -;; the definition for the DGO file. -(cgo "VI3.DGO" "vi3.gd") - -(copy-vis-files "VI3") - -;; the code -(goal-src-sequence - "levels/" - :deps ;; no idea what these depend on, make it depend on the whole engine - ("out/obj/ticky.o") - "village3/village3-part.gc" - "village3/village3-obs.gc" - "village3/minecart.gc" - "village3/miners.gc" - "village3/assistant-village3.gc" - "village3/sage-village3.gc" - ) - -(copy-textures 1208 1210 1209 1194) - -(copy-gos - "assistant-village3-ag" - "cavegem-ag" - "evilbro-village3-ag" - "evilsis-village3-ag" - "gondola-ag" - "gondolacables-ag" - "lavaspoutdrip-ag" - "medres-finalboss-ag" - "medres-ogre-ag" - "medres-ogre2-ag" - "medres-ogre3-ag" - "minecartsteel-ag" - "minershort-ag" - "minertall-ag" - "pistons-ag" - "sage-village3-ag" - "vil3-bridge-36-ag" - "water-anim-village3-ag" - "village3-vis" - ) - -;;;;;;;;;;;;;;;;;;;;; -;; Spider Cave -;;;;;;;;;;;;;;;;;;;;; - -(cgo "MAI.DGO" "mai.gd") - -(copy-vis-files "MAI") - - - -(goal-src-sequence - "levels/" - :deps ;; no idea what these depend on, make it depend on the whole engine - ("out/obj/ticky.o" - ) - "maincave/cavecrystal-light.gc" - "darkcave/darkcave-obs.gc" - "maincave/maincave-obs.gc" - "maincave/maincave-part.gc" - "maincave/spiderwebs.gc" - "maincave/dark-crystal.gc" - "maincave/baby-spider.gc" - "maincave/mother-spider-h.gc" - "maincave/mother-spider-egg.gc" - "maincave/mother-spider-proj.gc" - "maincave/mother-spider.gc" - "maincave/gnawer.gc" - "maincave/driller-lurker.gc" - ) - -(copy-textures 1313 1315 1314 1312 767) - -(copy-gos - "baby-spider-ag" - "cavetrapdoor-ag" - "dark-crystal-ag" - "driller-lurker-ag" - "gnawer-ag" - "launcherdoor-maincave-ag" - "maincavecam-ag" - "mother-spider-ag" - "plat-ag" - "spider-egg-ag" - "spiderwebs-ag" - "water-anim-maincave-ag" - "water-anim-maincave-water-ag" - "maincave-vis" - ) - - ;;;;;;;;;;;;;;;;;;;;; ;; snow mountain ;;;;;;;;;;;;;;;;;;;;; @@ -1149,6 +842,330 @@ ) +;;;;;;;;;;;;;;;;;;;;; +;; Fire Canyon +;;;;;;;;;;;;;;;;;;;;; + +(cgo "FIC.DGO" + "fic.gd" + ) + +(copy-vis-files "FIC") + +(copy-textures 1119) ;; might be common/zoomer hud?? also in misty, lavatube, ogre and racerpkg + +(goal-src-sequence + "levels/firecanyon/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + + "firecanyon-part.gc" + "assistant-firecanyon.gc" + "firecanyon-obs.gc" + + ) + +(copy-textures 815 822 854 1123) + +(copy-gos + "assistant-firecanyon-ag" + "balloon-ag" + "crate-darkeco-cluster-ag" + "spike-ag" + "firecanyon-vis") + + +;;;;;;;;;;;;;;;;;;;;; +;; ogre boss +;;;;;;;;;;;;;;;;;;;;; + +(cgo "OGR.DGO" "ogr.gd") + +(copy-vis-files "OGR") + +(goal-src-sequence + "levels/ogre/" + :deps ("out/obj/ticky.o") + "ogre-part.gc" + "ogreboss.gc" + "ogre-obs.gc" + "flying-lurker.gc" + ) + +(copy-textures 875 967 884 1117) + +(copy-gos + "flying-lurker-ag" + "medres-snow-ag" + "ogre-bridge-ag" + "ogre-bridgeend-ag" + "ogre-isle-ag" + "ogre-step-ag" + "ogreboss-ag" + "ogrecam-ag" + "plunger-lurker-ag" + "shortcut-boulder-ag" + "tntbarrel-ag" + "water-anim-ogre-ag" + "ogre-vis" + ) + + +;;;;;;;;;;;;;;;;;;;;; +;; Village 2 +;;;;;;;;;;;;;;;;;;;;; + +(cgo "VI2.DGO" "vi2.gd") + +(copy-vis-files "VI2") + +(goal-src-sequence + "levels/village2/" + :deps ("out/obj/ticky.o") + "village2-part.gc" + "village2-obs.gc" + "village2-part2.gc" + "gambler.gc" + "warrior.gc" + "geologist.gc" + "swamp-blimp.gc" + "sage-bluehut.gc" + "flutflut-bluehut.gc" + "assistant-village2.gc" + "sunken-elevator.gc" + ) + +(copy-textures 919 922 920 921 1476) + +(copy-gos + "allpontoons-ag" + "assistant-village2-ag" + "ceilingflag-ag" + "exit-chamber-dummy-ag" + "fireboulder-ag" + "flutflut-bluehut-ag" + "gambler-ag" + "geologist-ag" + "jaws-ag" + "medres-rolling-ag" + "medres-rolling1-ag" + "medres-village2-ag" + "ogreboss-village2-ag" + "pontoonfive-ag" + "pontoonten-ag" + "precursor-arm-ag" + "sage-bluehut-ag" + "sunken-elevator-ag" + "swamp-blimp-ag" + "swamp-rope-ag" + "swamp-tetherrock-ag" + "swamp-tetherrock-explode-ag" + "village2cam-ag" + "warrior-ag" + "water-anim-village2-ag" + "village2-vis" + ) + +;;;;;;;;;;;;;;;;;;;;; +;; rolling hills +;;;;;;;;;;;;;;;;;;;;; + +(cgo "ROL.DGO" "rol.gd") + +(copy-vis-files "ROL") + +(goal-src-sequence + "levels/rolling/" + :deps ("out/obj/ticky.o") + "rolling-obs.gc" + "rolling-lightning-mole.gc" + "rolling-robber.gc" + "rolling-race-ring.gc" + ) + +(copy-textures 923 926 924 925 1353) + +(copy-gos + "dark-plant-ag" + "happy-plant-ag" + "lightning-mole-ag" + "pusher-ag" + "race-ring-ag" + "robber-ag" + "rolling-start-ag" + "rollingcam-ag" + "water-anim-rolling-ag" + "rolling-vis" + ) + + +;;;;;;;;;;;;;;;;;;;;; +;; Village 3 +;;;;;;;;;;;;;;;;;;;;; + +;; the definition for the DGO file. +(cgo "VI3.DGO" "vi3.gd") + +(copy-vis-files "VI3") + +;; the code +(goal-src-sequence + "levels/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + "village3/village3-part.gc" + "village3/village3-obs.gc" + "village3/minecart.gc" + "village3/miners.gc" + "village3/assistant-village3.gc" + "village3/sage-village3.gc" + ) + +(copy-textures 1208 1210 1209 1194) + +(copy-gos + "assistant-village3-ag" + "cavegem-ag" + "evilbro-village3-ag" + "evilsis-village3-ag" + "gondola-ag" + "gondolacables-ag" + "lavaspoutdrip-ag" + "medres-finalboss-ag" + "medres-ogre-ag" + "medres-ogre2-ag" + "medres-ogre3-ag" + "minecartsteel-ag" + "minershort-ag" + "minertall-ag" + "pistons-ag" + "sage-village3-ag" + "vil3-bridge-36-ag" + "water-anim-village3-ag" + "village3-vis" + ) + + +;;;;;;;;;;;;;;;;;;;;; +;; Training +;;;;;;;;;;;;;;;;;;;;; + +;; the definition of the DGO package for the level +(cgo "TRA.DGO" + "tra.gd") + +(copy-vis-files "TRA") + +;; The code +(goal-src-sequence + "levels/training/" + :deps ("out/obj/ticky.o") ;; makes us depend on the whole engine + + "training-obs.gc" + "training-part.gc" + ) + +;; the textures +(copy-textures 1309 1311 1310 1308 775) + +(copy-gos + "scarecrow-a-ag" + "scarecrow-b-ag" + "trainingcam-ag" + "water-anim-training-ag" + "training-vis" + ) + +;;;;;;;;;;;;;;;;;;;;; +;; Spider Cave +;;;;;;;;;;;;;;;;;;;;; + +(cgo "MAI.DGO" "mai.gd") +(copy-vis-files "MAI") + +(goal-src-sequence + "levels/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o" + ) + "maincave/cavecrystal-light.gc" + "darkcave/darkcave-obs.gc" + "maincave/maincave-obs.gc" + "maincave/maincave-part.gc" + "maincave/spiderwebs.gc" + "maincave/dark-crystal.gc" + "maincave/baby-spider.gc" + "maincave/mother-spider-h.gc" + "maincave/mother-spider-egg.gc" + "maincave/mother-spider-proj.gc" + "maincave/mother-spider.gc" + "maincave/gnawer.gc" + "maincave/driller-lurker.gc" + ) + +(copy-textures 1313 1315 1314 1312 767) + +(copy-gos + "baby-spider-ag" + "cavetrapdoor-ag" + "dark-crystal-ag" + "driller-lurker-ag" + "gnawer-ag" + "launcherdoor-maincave-ag" + "maincavecam-ag" + "mother-spider-ag" + "plat-ag" + "spider-egg-ag" + "spiderwebs-ag" + "water-anim-maincave-ag" + "water-anim-maincave-water-ag" + "maincave-vis" + ) + + +;;;;;;;;;;;;;;;;;;;;; +;; dark cave +;;;;;;;;;;;;;;;;;;;;; + +(cgo "DAR.DGO" "dar.gd") +(copy-vis-files "DAR") + +(copy-textures 1306 1307 1305 1304 1352) + +(copy-gos + "caveelevator-ag" + "cavecrystal-ag" + "cavespatula-darkcave-ag" + "water-anim-darkcave-ag" + "darkcave-vis" + ) + +;;;;;;;;;;;;;;;;;;;;; +;; robo cave +;;;;;;;;;;;;;;;;;;;;; + +(cgo "ROB.DGO" "rob.gd") +(copy-vis-files "ROB") + +(goal-src-sequence + "levels/robocave/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + "cave-trap.gc" + "spider-egg.gc" + "robocave-part.gc" + ) + +(copy-textures 1318 1319 1317 1316) + +(copy-gos + "cavecrusher-ag" + "cavespatulatwo-ag" + "water-anim-robocave-ag" + "robocave-vis" + ) + + ;;;;;;;;;;;;;;;;;;;;; ;; lavatube ;;;;;;;;;;;;;;;;;;;;; @@ -1295,6 +1312,80 @@ "finalboss-vis" ) +;;;;;;;;;;;;;;;;;;;;; +;; intro only +;;;;;;;;;;;;;;;;;;;;; + +(cgo "INT.DGO" "int.gd") + +(copy-vis-files "INT") + +(goal-src-sequence + "levels/intro/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + + "evilbro.gc" + ) + +(copy-textures 1455 1457 1456 1454) + +(copy-gos + "evilbro-ag" + "evilsis-ag" + "intro-vis" + ) + +;;;;;;;;;;;;;;;;;;;;; +;; demo +;;;;;;;;;;;;;;;;;;;;; + +(cgo "DEM.DGO" "dem.gd") + +(copy-vis-files "DEM") + +(goal-src-sequence + "levels/demo/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + + "static-screen.gc" + "demo-obs.gc" + ) + +(copy-textures 1485 1486 1487 1599 1600 1601 1602 1603 1604 1605 1606 1607 1480 1479) + +(copy-gos + "demo-vis") + +;;;;;;;;;;;;;;;;;;;;; +;; title +;;;;;;;;;;;;;;;;;;;;; + +(cgo "TIT.DGO" "tit.gd") + +(copy-vis-files "TIT") + +(goal-src-sequence + "levels/title/" + :deps ;; no idea what these depend on, make it depend on the whole engine + ("out/obj/ticky.o") + + "title-obs.gc" + ) + +(copy-textures 1609 416 415 397 1499) + +(copy-gos + "logo-ag" + "logo-black-ag" + "logo-cam-ag" + "logo-volumes-ag" + "ndi-ag" + "ndi-cam-ag" + "ndi-volumes-ag" + "title-vis") + ;;;;;;;;;;;;;;;;;;;;; ;; Game Engine Code ;;;;;;;;;;;;;;;;;;;;; @@ -1457,6 +1548,7 @@ "nav/navigate-h.gc" "load/load-dgo.gc" "load/ramdisk.gc" + "pc/pckernel.gc" ;; added "sound/gsound.gc" "math/transformq.gc" "collide/collide-func.gc" @@ -1565,7 +1657,6 @@ "gfx/tie/prototype.gc" "collide/main-collide.gc" "game/video.gc" - "pc/pckernel.gc" ;; added "game/main.gc" "collide/collide-cache.gc" "entity/relocate.gc" @@ -1640,7 +1731,7 @@ (group-list "iso" `("out/iso/0COMMON.TXT" - ,@*all-cgos* + ,@(reverse *all-cgos*) ,@*all-vis* ,@*all-str*) ) diff --git a/goal_src/kernel/gcommon.gc b/goal_src/kernel/gcommon.gc index 33a9fe2e36..21e96a5086 100644 --- a/goal_src/kernel/gcommon.gc +++ b/goal_src/kernel/gcommon.gc @@ -16,6 +16,10 @@ ;; disable PS2 only code and enable PC-specific code (defglobalconstant PC_PORT #t) +;; whether we're allowed to use more memory than the original game or not +(defglobalconstant BIG_MEMORY #t) +(defglobalconstant PC_BIG_MEMORY (and PC_PORT BIG_MEMORY)) + ;; redirects access to EE memory mapped registers through get-vm-ptr to valid addresses that ;; are monitored in the runtime for debugging. (defglobalconstant USE_VM #t) diff --git a/goal_src/levels/common/static-screen.gc b/goal_src/levels/demo/static-screen.gc similarity index 100% rename from goal_src/levels/common/static-screen.gc rename to goal_src/levels/demo/static-screen.gc