From 0d16a52854ade78a2bd6cbd083f2718650f5cbee Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Tue, 30 Aug 2022 00:05:36 +0100 Subject: [PATCH] fix some pc settings not being saved/loaded correctly (#1815) * Update default-menu.gc * make fog hack slightly less aggressive * add `reload-text` back but kinda fixed * more unlocks for non-guaranteed musics * smarter language save & load * also save pc settings on autosave * more special music log cases * one more --- .../opengl_renderer/shaders/tfrag3.vert | 10 +++--- goal_src/jak1/engine/debug/default-menu.gc | 2 +- goal_src/jak1/engine/game/game-save.gc | 3 ++ goal_src/jak1/pc/pckernel-h.gc | 35 +++++++++++-------- goal_src/jak1/pc/pckernel.gc | 31 +++++++++++++--- goal_src/jak1/pc/subtitle.gc | 8 +++++ 6 files changed, 63 insertions(+), 26 deletions(-) diff --git a/game/graphics/opengl_renderer/shaders/tfrag3.vert b/game/graphics/opengl_renderer/shaders/tfrag3.vert index e78e96b363..3cf2104e3e 100644 --- a/game/graphics/opengl_renderer/shaders/tfrag3.vert +++ b/game/graphics/opengl_renderer/shaders/tfrag3.vert @@ -67,14 +67,14 @@ void main() { // time of day lookup fragment_color = texelFetch(tex_T1, time_of_day_index, 0); - // fog hack - if (fragment_color.r < 0.0075 && fragment_color.g < 0.0075 && fragment_color.b < 0.0075) { - fogginess = 0; - } - // color adjustment fragment_color *= 2; fragment_color.a *= 2; + + // fog hack + if (fragment_color.r < 0.005 && fragment_color.g < 0.005 && fragment_color.b < 0.005) { + fogginess = 0; + } tex_coord = tex_coord_in; } diff --git a/goal_src/jak1/engine/debug/default-menu.gc b/goal_src/jak1/engine/debug/default-menu.gc index 3880eb0d69..1af527ef56 100644 --- a/goal_src/jak1/engine/debug/default-menu.gc +++ b/goal_src/jak1/engine/debug/default-menu.gc @@ -4826,7 +4826,7 @@ )) (other-menu (-> (the-as debug-menu-item-submenu other-menu-node) submenu)) ) - (dotimes (i 35) + (dotimes (i (progress-screen max)) (debug-menu-append-item prog-menu (new-dm-func (new 'debug 'string 0 (enum->string progress-screen i)) i (lambda ((val progress-screen)) diff --git a/goal_src/jak1/engine/game/game-save.gc b/goal_src/jak1/engine/game/game-save.gc index 89c3cbb8c6..da46bd5692 100644 --- a/goal_src/jak1/engine/game/game-save.gc +++ b/goal_src/jak1/engine/game/game-save.gc @@ -1288,6 +1288,9 @@ (set! (-> self part matrix) (sprite-allocate-user-hvdf)) (cond ((= desired-mode 'auto-save) + ;; also save pc settings. + (with-pc + (commit-to-file *pc-settings*)) (if (not (-> *setting-control* current auto-save)) (go-virtual error (mc-status-code no-auto-save)) ) diff --git a/goal_src/jak1/pc/pckernel-h.gc b/goal_src/jak1/pc/pckernel-h.gc index 3b02f65786..193b9dbe9d 100644 --- a/goal_src/jak1/pc/pckernel-h.gc +++ b/goal_src/jak1/pc/pckernel-h.gc @@ -28,17 +28,21 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defglobalconstant PC_KERNEL_VERSION_BUILD #x0001) -(defglobalconstant PC_KERNEL_VERSION_REVISION #x0001) +(deftype pckernel-version (int64) + ((build int16 :offset 0) + (revision int16 :offset 16) + (minor int16 :offset 32) + (major int16 :offset 48) + ) + ) + +(defmacro static-pckernel-version (major minor rev build) + `(new 'static 'pckernel-version :major ,major :minor ,minor :revision ,rev :build ,build)) + ;; version: 1.10.2.1 +(defglobalconstant PC_KERNEL_VERSION (static-pckernel-version 1 10 2 1)) +(defconstant PC_KERNEL_VER_MAJOR (-> PC_KERNEL_VERSION major)) +(defconstant PC_KERNEL_VER_MINOR (-> PC_KERNEL_VERSION minor)) -(defglobalconstant PC_KERNEL_VERSION_MINOR #x000a) -(defglobalconstant PC_KERNEL_VERSION_MAJOR #x0001) -(defglobalconstant PC_KERNEL_VERSION (logior - (ash PC_KERNEL_VERSION_MAJOR 48) - (ash PC_KERNEL_VERSION_MINOR 32) - (ash PC_KERNEL_VERSION_REVISION 16) - (ash PC_KERNEL_VERSION_BUILD 0) - )) (defconstant PS2_VOICE_AMOUNT 48) (defconstant PC_VOICE_AMOUNT 256) @@ -203,7 +207,7 @@ ;; All of the configuration for the PC port in GOAL. Access things from here! ;; Includes some methods to change parameters. (deftype pc-settings (basic) - ((version uint64) ;; version of this settings + ((version pckernel-version) ;; version of this settings ;; "generic" graphics settings (target-fps int16) ;; the target framerate of the game @@ -382,11 +386,11 @@ ) (defconstant PC_TEMP_STRING_LEN 512) -(define *pc-temp-string* (new 'global 'string PC_TEMP_STRING_LEN (the-as string #f))) -(define *pc-settings* (the-as pc-settings #f)) -(format 0 "PC kernel version: ~D.~D~%" PC_KERNEL_VERSION_MAJOR PC_KERNEL_VERSION_MINOR) +(define *pc-temp-string* (new 'global 'string PC_TEMP_STRING_LEN (the string #f))) +(define *pc-settings* (the pc-settings #f)) +(format 0 "PC kernel version: ~D.~D~%" PC_KERNEL_VER_MAJOR PC_KERNEL_VER_MINOR) -(define *pc-temp-string-1* (new 'global 'string 2048 (the-as string #f))) +(define *pc-temp-string-1* (new 'global 'string 2048 (the string #f))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; resets @@ -496,6 +500,7 @@ (set! (-> obj hinttitles?) #t) (set! (-> obj subtitle-speaker?) 'auto) (set! (-> obj subtitle-language) (pc-subtitle-lang english)) + (set! (-> obj text-language) (pc-subtitle-lang english)) (reset-original-camera obj) (set! (-> obj money-starburst?) #f) (set! (-> obj extra-hud?) #f) diff --git a/goal_src/jak1/pc/pckernel.gc b/goal_src/jak1/pc/pckernel.gc index df6a4c78f5..ae13a0bedb 100644 --- a/goal_src/jak1/pc/pckernel.gc +++ b/goal_src/jak1/pc/pckernel.gc @@ -525,8 +525,16 @@ (add-to-music-log obj (-> *setting-control* current music) (the int (-> *setting-control* current sound-flava))) ;; special cases. for example, npc's that despawn and you can't hear their music anymore. - (if (task-closed? (game-task beach-ecorocks) (task-status need-introduction)) - (add-to-music-log obj 'village1 1)) + (if (task-closed? (game-task village1-buzzer) (task-status need-resolution)) + (add-to-music-log obj 'village1 (flava-lookup 'village1 (music-flava assistant)))) + (if (task-closed? (game-task village2-buzzer) (task-status need-resolution)) + (add-to-music-log obj 'village2 (flava-lookup 'village2 (music-flava assistant)))) + (if (task-closed? (game-task village3-buzzer) (task-status need-resolution)) + (add-to-music-log obj 'village3 (flava-lookup 'village3 (music-flava assistant)))) + (when (task-closed? (game-task beach-ecorocks) (task-status need-introduction)) + (add-to-music-log obj 'village1 1) + (add-to-music-log obj 'village1 (flava-lookup 'village1 (music-flava sage))) + ) (if (task-closed? (game-task jungle-plant) (task-status need-resolution)) (add-to-music-log obj 'jungleb 2)) (if (task-closed? (game-task beach-flutflut) (task-status need-resolution)) @@ -539,10 +547,14 @@ (add-to-music-log obj 'misty 4)) (if (task-closed? (game-task firecanyon-end) (task-status need-resolution)) (add-to-music-log obj 'firecanyon 2)) + (if (task-closed? (game-task village2-levitator) (task-status need-hint)) + (add-to-music-log obj 'village2 (flava-lookup 'village2 (music-flava sage)))) (if (task-closed? (game-task swamp-billy) (task-status need-resolution)) (add-to-music-log obj 'swamp 1)) (if (task-closed? (game-task swamp-battle) (task-status need-resolution)) (add-to-music-log obj 'swamp (flava-lookup 'swamp (music-flava swamp-battle)))) + (if (task-closed? (game-task village3-button) (task-status need-hint)) + (add-to-music-log obj 'village3 (flava-lookup 'village3 (music-flava sage)))) (if (task-closed? (game-task snow-bunnies) (task-status need-resolution)) (add-to-music-log obj 'snow (flava-lookup 'snow (music-flava snow-battle)))) (if (task-closed? (game-task citadel-sage-yellow) (task-status need-resolution)) @@ -555,6 +567,10 @@ (add-to-music-log obj 'citadel (flava-lookup 'citadel (music-flava sage)))) (if (task-closed? (game-task citadel-buzzer) (task-status need-resolution)) (add-to-music-log obj 'citadel (flava-lookup 'citadel (music-flava assistant)))) + (when (task-closed? (game-task finalboss-movies) (task-status unknown)) + (add-to-music-log obj 'finalboss (flava-lookup 'finalboss (music-flava finalboss-middle))) + (add-to-music-log obj 'finalboss (flava-lookup 'finalboss (music-flava finalboss-end))) + ) (when (and *target* (>= (float->int (send-event *target* 'query 'pickup (pickup-type fuel-cell))) 100)) (add-to-music-log obj 'credits 0) (add-to-music-log obj 'credits 1) @@ -782,14 +798,15 @@ (with-settings-scope (file) (case-str (file-stream-read-word file) (("settings") - (set! version (file-stream-read-int file)) + (set! version (the pckernel-version (file-stream-read-int file))) (cond - ((= (logand version #xffffffff00000000) (logand PC_KERNEL_VERSION #xffffffff00000000)) + ((and (= (-> version major) PC_KERNEL_VER_MAJOR) + (= (-> version minor) PC_KERNEL_VER_MINOR)) ;; minor difference ) (else ;; major difference - (format 0 "PC kernel version mismatch! Got ~D.~D vs ~D.~D~%" PC_KERNEL_VERSION_MAJOR PC_KERNEL_VERSION_MINOR (bit-field int version 32 16) (bit-field int version 48 16)) + (format 0 "PC kernel version mismatch! Got ~D.~D vs ~D.~D~%" PC_KERNEL_VER_MAJOR PC_KERNEL_VER_MINOR (-> version major) (-> version minor)) (file-stream-close file) (return #f) ) @@ -837,6 +854,8 @@ (("lod-force-tie") (set! (-> obj lod-force-tie) (file-stream-read-int file))) (("lod-force-ocean") (set! (-> obj lod-force-ocean) (file-stream-read-int file))) (("lod-force-actor") (set! (-> obj lod-force-actor) (file-stream-read-int file))) + (("game-language") (set! (-> *setting-control* default language) (the-as language-enum (file-stream-read-int file)))) + (("text-language") (set! (-> obj text-language) (the-as pc-subtitle-lang (file-stream-read-int file)))) (("subtitle-language") (set! (-> obj subtitle-language) (the-as pc-subtitle-lang (file-stream-read-int file)))) (("subtitle-speaker") (set! (-> obj subtitle-speaker?) (file-stream-read-symbol file))) (("stick-deadzone") (set! (-> obj stick-deadzone) (file-stream-read-float file))) @@ -992,6 +1011,8 @@ (format file " (music-fadeout? ~A)~%" (-> obj music-fadeout?)) (format file " (subtitles? ~A)~%" (-> obj subtitles?)) (format file " (hinttitles? ~A)~%" (-> obj hinttitles?)) + (format file " (game-language ~D)~%" (-> *setting-control* default language)) + (format file " (text-language ~D)~%" (-> obj text-language)) (format file " (subtitle-language ~D)~%" (-> obj subtitle-language)) (format file " (subtitle-speaker ~A)~%" (-> obj subtitle-speaker?)) diff --git a/goal_src/jak1/pc/subtitle.gc b/goal_src/jak1/pc/subtitle.gc index 8453653f3e..6376f60514 100644 --- a/goal_src/jak1/pc/subtitle.gc +++ b/goal_src/jak1/pc/subtitle.gc @@ -299,6 +299,14 @@ (+! (-> *subtitle-text* lang) (the-as pc-subtitle-lang 1))) (load-level-subtitle-files 0))) +(defmacro reload-text () + "rebuild and reload text." + `(begin + (mng) + (if *common-text* + (+! (-> *common-text* language-id) 1)) + (load-level-text-files 0))) +