From ae05fde45aebdc3f0ceedb206e25dc0a541a8c6c Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Mon, 14 Feb 2022 00:19:56 +0000 Subject: [PATCH] cleanup code, fix some bugs (and potential bugs), add actor LOD modifiers (#1163) --- game/appicon.png | Bin 0 -> 15822 bytes game/graphics/pipelines/opengl.cpp | 2 +- goal_src/engine/debug/default-menu.gc | 9 ++++----- goal_src/engine/draw/drawable.gc | 9 ++++++--- goal_src/engine/draw/process-drawable.gc | 21 ++++++++++++++++++--- goal_src/engine/engine/engines.gc | 4 +++- goal_src/engine/game/main.gc | 20 ++++---------------- goal_src/engine/gfx/hw/display.gc | 11 +++++++---- goal_src/engine/pc/pckernel-h.gc | 16 ++++++++++++++++ 9 files changed, 59 insertions(+), 33 deletions(-) create mode 100644 game/appicon.png diff --git a/game/appicon.png b/game/appicon.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa88c52eacfb3dc42aa8b1e43e9dd58494f6567 GIT binary patch literal 15822 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 literal 0 HcmV?d00001 diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index 611210dcd..66dd4151d 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -156,7 +156,7 @@ static std::shared_ptr gl_make_main_display(int width, return NULL; } - std::string image_path = fmt::format("{}/docs/favicon-nobg.png", file_util::get_project_path()); + std::string image_path = fmt::format("{}/game/appicon.png", file_util::get_project_path()); GLFWimage images[1]; images[0].pixels = diff --git a/goal_src/engine/debug/default-menu.gc b/goal_src/engine/debug/default-menu.gc index e347f5608..1e2f5ddb1 100644 --- a/goal_src/engine/debug/default-menu.gc +++ b/goal_src/engine/debug/default-menu.gc @@ -4355,17 +4355,16 @@ ;(flag "PS2 Sound effects" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-se?))) ;(flag "PS2 Hints" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-hints?))) ) - #| (menu "Level of detail" (flag "PS2 LOD " #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-lod-dist?))) - (int-var "LOD Tfrag" 0 dm-lod-int 0 1 #t 0 3) - (int-var "LOD Tie" 1 dm-lod-int 0 1 #t 0 3) - (int-var "LOD Ocean" 2 dm-lod-int 0 1 #t 0 3) + ;(int-var "LOD Tfrag" 0 dm-lod-int 0 1 #t 0 3) + ;(int-var "LOD Tie" 1 dm-lod-int 0 1 #t 0 3) + ;(int-var "LOD Ocean" 2 dm-lod-int 0 1 #t 0 3) (int-var "LOD Actor" 3 dm-lod-int 0 1 #t 0 3) ) - |# ;(flag "Alt load boundaries" #f ,(dm-lambda-boolean-flag (-> *pc-settings* new-lb?))) (flag "All actors" #f ,(dm-lambda-boolean-flag (-> *pc-settings* force-actors?))) + (flag "Display actor counts" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-actor-counts))) (function "Reset" #f (lambda () (reset *pc-settings*))) (function "Save" #f (lambda () (write-to-file *pc-settings* PC_SETTINGS_FILE_NAME))) (function "Load" #f (lambda () (read-from-file *pc-settings* PC_SETTINGS_FILE_NAME))) diff --git a/goal_src/engine/draw/drawable.gc b/goal_src/engine/draw/drawable.gc index ca7c395dc..d28bcebf6 100644 --- a/goal_src/engine/draw/drawable.gc +++ b/goal_src/engine/draw/drawable.gc @@ -751,9 +751,12 @@ (draw-bones arg1 arg3 cam-dist) ) (when (and (< lod-to-use (-> arg1 cur-lod)) (logtest? (-> arg1 status) (draw-status has-joint-channels))) - (let ((v1-82 *matrix-engine*)) - (set! (-> v1-82 (-> v1-82 length)) (process->handle sv-16)) - (+! (-> v1-82 length) 1) + ;; NOTE : added this check for PC port to prevent memory corruption + (if (< (-> *matrix-engine* length) MATRIX_ENGINE_AMOUNT) + (let ((v1-82 *matrix-engine*)) + (set! (-> v1-82 (-> v1-82 length)) (process->handle sv-16)) + (+! (-> v1-82 length) 1) + ) ) ) (lod-set! arg1 lod-to-use) diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 0f1c99abd..6e5fddecf 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -86,6 +86,10 @@ (defmethod lod-set! draw-control ((obj draw-control) (arg0 int)) ;; note: good spot to mess with lods here. + (with-pc + (if (not (-> *pc-settings* ps2-lod-dist?)) + (set! arg0 (-> *pc-settings* lod-force-actor))) + ) (let ((v1-1 (max 0 (min arg0 (-> obj lod-set max-lod))))) (set! (-> obj desired-lod) v1-1) (when (!= (-> obj cur-lod) v1-1) @@ -258,6 +262,14 @@ ) (defun execute-math-engine () + (#when PC_PORT + (with-dma-buffer-add-bucket ((debug-buf (-> (current-frame) debug-buf)) + (bucket-id debug-draw1)) + (when (-> *pc-settings* display-actor-counts) + (draw-string-xy (string-format "M: ~D/~D A: ~D" (-> *matrix-engine* length) MATRIX_ENGINE_AMOUNT (process-count *active-pool*)) debug-buf 8 (- 224 18) (font-color default) (font-flags shadow kerning)) + ) + ) + ) (let ((gp-0 *matrix-engine*)) (countdown (s5-0 (-> gp-0 length)) (let ((a0-1 (handle->process (-> gp-0 s5-0)))) @@ -985,9 +997,12 @@ ) ) ) - (let ((v1-24 *matrix-engine*)) - (set! (-> v1-24 (-> v1-24 length)) (process->handle self)) - (+! (-> v1-24 length) 1) + ;; NOTE : added matrix-engine check for PC port + (if (< (-> *matrix-engine* length) MATRIX_ENGINE_AMOUNT) + (let ((v1-24 *matrix-engine*)) + (set! (-> v1-24 (-> v1-24 length)) (process->handle self)) + (+! (-> v1-24 length) 1) + ) ) ) 0 diff --git a/goal_src/engine/engine/engines.gc b/goal_src/engine/engine/engines.gc index bcc034c51..9a016c076 100644 --- a/goal_src/engine/engine/engines.gc +++ b/goal_src/engine/engine/engines.gc @@ -8,12 +8,14 @@ ;; Allocate some engines. +(defconstant MATRIX_ENGINE_AMOUNT (* 1024 PROCESS_HEAP_MULT)) + ;; engine for drawing level backgrounds. (define *background-draw-engine* (new 'global 'engine 'draw 10)) ;; The matrix engine is not actually an engine, but instead an array of handles to processes that ;; need to have their joint math done and bones updated. -(define *matrix-engine* (new 'global 'boxed-array handle 1024)) +(define *matrix-engine* (new 'global 'boxed-array handle MATRIX_ENGINE_AMOUNT)) (set! (-> *matrix-engine* length) 0) ;; the camera engine contains all currently running camera entities. diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc index e100504f1..0af98447a 100644 --- a/goal_src/engine/game/main.gc +++ b/goal_src/engine/game/main.gc @@ -138,9 +138,7 @@ (cond ;; first, check if the controller fell out, and jak is spawned ((and (nonzero? (logand (-> *cpad-list* cpads 0 valid) 128)) *target*) - (if (or *progress-process* - (not (-> *setting-control* current allow-pause)) - ) + (if (or *progress-process* (not (-> *setting-control* current allow-pause))) *master-mode* 'pause ;; no controller, jak spawned, no progress open, pause allowed. ) @@ -234,13 +232,7 @@ ) ) ) - (set! *pause-lock* - (and *cheat-mode* - (nonzero? - (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons r2)) - ) - ) - ) + (set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2))) ) (('pause) (set! *last-master-mode* *master-mode*) @@ -272,9 +264,7 @@ ) ) ) - (set! *pause-lock* - (and *cheat-mode* (cpad-hold? 0 r2)) - ) + (set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2))) ) (('progress) (set-master-mode @@ -295,9 +285,7 @@ ) ) ) - (set! *pause-lock* - (and *cheat-mode* (cpad-hold? 0 r2)) - ) + (set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2))) ) ) 0 diff --git a/goal_src/engine/gfx/hw/display.gc b/goal_src/engine/gfx/hw/display.gc index c6c9e2c02..ade8e01ef 100644 --- a/goal_src/engine/gfx/hw/display.gc +++ b/goal_src/engine/gfx/hw/display.gc @@ -6,6 +6,9 @@ ;; dgos: GAME, ENGINE +(defconstant DMA_BUFFER_GLOBAL_SIZE (* PROCESS_HEAP_MULT 1712 1024)) +(defconstant DMA_BUFFER_DEBUG_SIZE (* 8 1024 1024)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TIME ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -273,14 +276,14 @@ ;; the main DMA buffers for each frame's drawing. The buckets in the calc buf will reference data in here. ;; the individual renderers use these buffers. ;; the reason for separate calc/global buf is unknown. - (set! (-> arg0 frames 0 frame global-buf) (new 'global 'dma-buffer #x1ac000)) - (set! (-> arg0 frames 1 frame global-buf) (new 'global 'dma-buffer #x1ac000)) + (set! (-> arg0 frames 0 frame global-buf) (new 'global 'dma-buffer DMA_BUFFER_GLOBAL_SIZE)) + (set! (-> arg0 frames 1 frame global-buf) (new 'global 'dma-buffer DMA_BUFFER_GLOBAL_SIZE)) ;; there are separate debug buffers in debug mode that live in the debug heap. ;; these are used to draw all of the debug stuff. (when *debug-segment* - (set! (-> arg0 frames 0 frame debug-buf) (new 'debug 'dma-buffer #x800000)) - (set! (-> arg0 frames 1 frame debug-buf) (new 'debug 'dma-buffer #x800000)) + (set! (-> arg0 frames 0 frame debug-buf) (new 'debug 'dma-buffer DMA_BUFFER_DEBUG_SIZE)) + (set! (-> arg0 frames 1 frame debug-buf) (new 'debug 'dma-buffer DMA_BUFFER_DEBUG_SIZE)) ) ) arg0 diff --git a/goal_src/engine/pc/pckernel-h.gc b/goal_src/engine/pc/pckernel-h.gc index fa0b69c53..4e76b1dd7 100644 --- a/goal_src/engine/pc/pckernel-h.gc +++ b/goal_src/engine/pc/pckernel-h.gc @@ -173,6 +173,7 @@ (deftype pc-settings (basic) ((version uint64) ;; version of this settings + ;; "generic" graphics settings (target-fps int16) ;; the target framerate of the game (width int32) ;; the width of the rendering, may not match window (height int32) @@ -190,6 +191,7 @@ (vsync? symbol) ;; vsync. (font-scale float) ;; font scaling. + ;; debug settings (os symbol) ;; windows, linux, macos (user symbol) ;; username. not system username, just debug thing. (debug? symbol) ;; more debug stuff just in case. @@ -201,7 +203,9 @@ (progress-force? symbol) (display-bug-report symbol) (display-heap-status symbol) + (display-actor-counts symbol) + ;; device settings (device-audio pc-device-info :inline) ;; used audio device (device-screen pc-device-info :inline) ;; used display device (device-gpu pc-device-info :inline) ;; used graphics device @@ -209,21 +213,25 @@ ;(device-keyboard pc-pad-info :inline) ;; keyboard input information. if nothing else, this must be usable. (stick-deadzone float) ;; analog stick deadzone. 0-1 + ;; audio settings (audio-latency-ms int16) ;; audio latency in milliseconds (audio-pan-override float) ;; audio pan modifier (audio-volume-override float) ;; audio volume modifier (audio-channel-nb int16) ;; audio channel amount. will be 48 on PS2 mode. + ;; graphics settings (gfx-renderer pc-gfx-renderer) ;; the renderer to use (gfx-resolution float) ;; for supersampling (gfx-anisotropy float) ;; for anisotropy + ;; ps2 settings (ps2-read-speed? symbol) ;; emulate DVD loads (ps2-parts? symbol) ;; if off, increase particle cap (ps2-music? symbol) ;; if off, use .wav files stored somewhere (ps2-se? symbol) ;; if off, use adjusted sound effects (ps2-hints? symbol) ;; if off, enables extra game hints + ;; lod settings (ps2-lod-dist? symbol) ;; use original lod distances (shrub-dist-mod float) ;; shrub render distance modifier (lod-dist-mod float) ;; non-shrub lod distance modifier @@ -232,6 +240,7 @@ (lod-force-ocean int8) ;; ocean lod tier override (lod-force-actor int8) ;; merc lod tier override + ;; misc settings (force-actors? symbol) ;; see actor-force-visible? (music-fade? symbol) ;; if off, music has no fade in (use-vis? symbol) ;; if off, don't use vis trees. this MUST be off for custom (non-cropping) aspect ratios. @@ -321,6 +330,7 @@ (set! (-> obj progress-force?) #f) (set! (-> obj display-bug-report) #f) (set! (-> obj display-heap-status) #f) + (set! (-> obj display-actor-counts) #f) (set! (-> obj font-scale) 1.0) (set! (-> obj aspect-custom-x) 1) (set! (-> obj aspect-custom-y) 1) @@ -433,6 +443,12 @@ (and (not (-> obj use-vis?)) (-> obj force-actors?)) ) +(defmacro with-pc (&rest body) + "encapsulates the code around PC-specific checks" + `(#when PC_PORT (when (and *pc-settings*) + ,@body + )) + ) )