mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 11:26:18 -04:00
jak1/speedruns: Some final touches for speedrunning in jak 1 (#1830)
* jak1: put common speedrunning code into it's own file * jak1: enforce `60` fps while in speedrunning mode * jak1: when speedrunning, display the version until you get the first powercell * jak1: add an explicit option for skipping cutscenes * jak1: extend `game-option` to allow any menu option to be disabled * tests/jak1: allow whitelisting types to be redefined to satisfy typeconsistency checks * jak1: add file headers * jak1: cleanup bool checking * test: delete the es substitle file * test: add it back * jak1: missed one cleanup spot related to bool comparisons
This commit is contained in:
parent
f1f18e7e05
commit
0896bef2bf
|
@ -59,7 +59,10 @@ Type* TypeSystem::add_type(const std::string& name, std::unique_ptr<Type> type)
|
||||||
if (*kv->second != *type) {
|
if (*kv->second != *type) {
|
||||||
// exists, and we are trying to change it!
|
// exists, and we are trying to change it!
|
||||||
|
|
||||||
if (m_allow_redefinition) {
|
// Check if the type is allowed to be redefined
|
||||||
|
if (m_allow_redefinition ||
|
||||||
|
std::find(m_types_allowed_to_be_redefined.begin(), m_types_allowed_to_be_redefined.end(),
|
||||||
|
kv->second->get_name()) != m_types_allowed_to_be_redefined.end()) {
|
||||||
fmt::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n",
|
fmt::print("[TypeSystem] Type {} was originally\n{}\nand is redefined as\n{}\n",
|
||||||
kv->second->get_name(), kv->second->print(), type->print());
|
kv->second->get_name(), kv->second->print(), type->print());
|
||||||
// extra dangerous, we have allowed type redefinition!
|
// extra dangerous, we have allowed type redefinition!
|
||||||
|
|
|
@ -259,6 +259,10 @@ class TypeSystem {
|
||||||
|
|
||||||
int get_size_in_type(const Field& field) const;
|
int get_size_in_type(const Field& field) const;
|
||||||
|
|
||||||
|
void add_type_to_allowed_redefinition_list(const std::string& type_name) {
|
||||||
|
m_types_allowed_to_be_redefined.push_back(type_name);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string lca_base(const std::string& a, const std::string& b) const;
|
std::string lca_base(const std::string& a, const std::string& b) const;
|
||||||
bool typecheck_base_types(const std::string& expected,
|
bool typecheck_base_types(const std::string& expected,
|
||||||
|
@ -284,6 +288,7 @@ class TypeSystem {
|
||||||
|
|
||||||
std::vector<std::unique_ptr<Type>> m_old_types;
|
std::vector<std::unique_ptr<Type>> m_old_types;
|
||||||
|
|
||||||
|
std::vector<std::string> m_types_allowed_to_be_redefined;
|
||||||
bool m_allow_redefinition = false;
|
bool m_allow_redefinition = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1609,6 +1609,7 @@
|
||||||
(hint-0 #x1300)
|
(hint-0 #x1300)
|
||||||
(hint-511 #x14ff)
|
(hint-511 #x14ff)
|
||||||
(speedrunner-mode #x1500)
|
(speedrunner-mode #x1500)
|
||||||
|
(cutscene-skips #x1501)
|
||||||
;; GAME-TEXT-ID ENUM ENDS
|
;; GAME-TEXT-ID ENUM ENDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -359,6 +359,9 @@
|
||||||
(#x1500 "SPEEDRUNNER MODE"
|
(#x1500 "SPEEDRUNNER MODE"
|
||||||
"SPEEDRUNNER MODE")
|
"SPEEDRUNNER MODE")
|
||||||
|
|
||||||
|
(#x1501 "CUTSCENE SKIPS"
|
||||||
|
"CUTSCENE SKIPS")
|
||||||
|
|
||||||
;; -----------------
|
;; -----------------
|
||||||
;; test (DO NOT TRANSLATE)
|
;; test (DO NOT TRANSLATE)
|
||||||
|
|
||||||
|
|
|
@ -199,6 +199,8 @@
|
||||||
("pc-anim-util.o" "pc-anim-util") ;; added
|
("pc-anim-util.o" "pc-anim-util") ;; added
|
||||||
("autosplit-h.o" "autosplit-h") ;; added
|
("autosplit-h.o" "autosplit-h") ;; added
|
||||||
("autosplit.o" "autosplit") ;; added
|
("autosplit.o" "autosplit") ;; added
|
||||||
|
("speedruns-h.o" "speedruns-h") ;; added
|
||||||
|
("speedruns.o" "speedruns") ;; added
|
||||||
("pckernel.o" "pckernel") ;; added
|
("pckernel.o" "pckernel") ;; added
|
||||||
("mood-tables.o" "mood-tables")
|
("mood-tables.o" "mood-tables")
|
||||||
("mood.o" "mood")
|
("mood.o" "mood")
|
||||||
|
|
|
@ -195,6 +195,8 @@
|
||||||
("pc-anim-util.o" "pc-anim-util") ;; added
|
("pc-anim-util.o" "pc-anim-util") ;; added
|
||||||
("autosplit-h.o" "autosplit-h") ;; added
|
("autosplit-h.o" "autosplit-h") ;; added
|
||||||
("autosplit.o" "autosplit") ;; added
|
("autosplit.o" "autosplit") ;; added
|
||||||
|
("speedruns-h.o" "speedruns-h") ;; added
|
||||||
|
("speedruns.o" "speedruns") ;; added
|
||||||
("pckernel.o" "pckernel") ;; added
|
("pckernel.o" "pckernel") ;; added
|
||||||
("mood-tables.o" "mood-tables")
|
("mood-tables.o" "mood-tables")
|
||||||
("mood.o" "mood")
|
("mood.o" "mood")
|
||||||
|
|
|
@ -436,7 +436,9 @@
|
||||||
;; save a sort of timestamp just so we know whether it took at least 1 frame
|
;; save a sort of timestamp just so we know whether it took at least 1 frame
|
||||||
(#when PC_PORT
|
(#when PC_PORT
|
||||||
(define *play-anim-time* (current-time)))
|
(define *play-anim-time* (current-time)))
|
||||||
(if (#if PC_PORT #t (and *debug-segment* *cheat-mode*))
|
(if (#if PC_PORT
|
||||||
|
(= (-> *pc-settings* cutscene-skips?) #t)
|
||||||
|
(and *debug-segment* *cheat-mode*))
|
||||||
(ja-play-spooled-anim
|
(ja-play-spooled-anim
|
||||||
(the-as spool-anim arg1)
|
(the-as spool-anim arg1)
|
||||||
arg0
|
arg0
|
||||||
|
|
|
@ -4721,6 +4721,7 @@
|
||||||
(flag "br-portuguese" 13 dm-text-language)
|
(flag "br-portuguese" 13 dm-text-language)
|
||||||
)
|
)
|
||||||
(flag "Discord RPC" #t ,(dm-lambda-boolean-flag (-> *pc-settings* discord-rpc?)))
|
(flag "Discord RPC" #t ,(dm-lambda-boolean-flag (-> *pc-settings* discord-rpc?)))
|
||||||
|
(flag "Cutscene Skips" #t ,(dm-lambda-boolean-flag (-> *pc-settings* cutscene-skips?)))
|
||||||
(flag "Speedrunner Mode" #t ,(dm-lambda-boolean-flag (-> *pc-settings* speedrunner-mode?)))
|
(flag "Speedrunner Mode" #t ,(dm-lambda-boolean-flag (-> *pc-settings* speedrunner-mode?)))
|
||||||
(menu "PS2 settings"
|
(menu "PS2 settings"
|
||||||
;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?)))
|
;(flag "PS2 Load speed" #f ,(dm-lambda-boolean-flag (-> *pc-settings* ps2-read-speed?)))
|
||||||
|
|
|
@ -695,9 +695,13 @@
|
||||||
|
|
||||||
(with-profiler "menu"
|
(with-profiler "menu"
|
||||||
(with-pc
|
(with-pc
|
||||||
(if (and (-> *pc-settings* display-sha) *debug-segment*)
|
(cond ((and (= (-> *pc-settings* speedrunner-mode?) #t)
|
||||||
(draw-build-revision)))
|
(< (-> *autosplit-info-jak1* num-power-cells) 1))
|
||||||
|
;; display the revision before you collect your first powercell
|
||||||
|
(draw-build-revision))
|
||||||
|
((and (-> *pc-settings* display-sha) *debug-segment*)
|
||||||
|
;; otherwise, only draw if we are in debug mode and the setting isn't enabled
|
||||||
|
(draw-build-revision))))
|
||||||
(*menu-hook*)
|
(*menu-hook*)
|
||||||
(add-ee-profile-frame 'draw :g #x40)
|
(add-ee-profile-frame 'draw :g #x40)
|
||||||
|
|
||||||
|
|
|
@ -227,10 +227,11 @@
|
||||||
(param2 float :offset-assert 28)
|
(param2 float :offset-assert 28)
|
||||||
(param3 game-option-menu :offset-assert 32)
|
(param3 game-option-menu :offset-assert 32)
|
||||||
(value-to-modify pointer :offset-assert 36)
|
(value-to-modify pointer :offset-assert 36)
|
||||||
|
(option-disabled-func (function symbol) :offset-assert 40) ;; added in pc port
|
||||||
)
|
)
|
||||||
:method-count-assert 9
|
:method-count-assert 9
|
||||||
:size-assert #x28
|
:size-assert #x2C
|
||||||
:flag-assert #x900000028
|
:flag-assert #x90000002C
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1727,18 +1727,10 @@
|
||||||
(let ((gp-1 (-> *setting-control* default auto-save)))
|
(let ((gp-1 (-> *setting-control* default auto-save)))
|
||||||
(sound-volume-off)
|
(sound-volume-off)
|
||||||
(set! (-> *game-info* mode) 'play)
|
(set! (-> *game-info* mode) 'play)
|
||||||
;; Start a new game differently if speedrunning mode is active
|
|
||||||
(cond
|
(cond
|
||||||
|
;; Start a new game differently if speedrunning mode is active
|
||||||
((= (-> *pc-settings* speedrunner-mode?) #t)
|
((= (-> *pc-settings* speedrunner-mode?) #t)
|
||||||
(update-autosplit-jak1-new-game)
|
(speedrun-start-run))
|
||||||
;; spawn at the warp gate
|
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "game-start")
|
|
||||||
;; disable hints (this seems to be overriden by your slot 1 save though)
|
|
||||||
(set! (-> *setting-control* default play-hints) #f)
|
|
||||||
;; skip intro cutscene
|
|
||||||
(close-specific-task! (game-task intro) (task-status need-resolution))
|
|
||||||
;; enable auto saving by default
|
|
||||||
(set! (-> *setting-control* default auto-save) #t))
|
|
||||||
;; start the game normally
|
;; start the game normally
|
||||||
(else
|
(else
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")
|
||||||
|
|
|
@ -759,6 +759,7 @@
|
||||||
(hint-0 #x1300)
|
(hint-0 #x1300)
|
||||||
(hint-511 #x14ff)
|
(hint-511 #x14ff)
|
||||||
(speedrunner-mode #x1500)
|
(speedrunner-mode #x1500)
|
||||||
|
(cutscene-skips #x1501)
|
||||||
;; GAME-TEXT-ID ENUM ENDS
|
;; GAME-TEXT-ID ENUM ENDS
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -2039,9 +2039,11 @@
|
||||||
;; Custom or Modified Code
|
;; Custom or Modified Code
|
||||||
(goal-src "pc/features/autosplit-h.gc")
|
(goal-src "pc/features/autosplit-h.gc")
|
||||||
(goal-src "pc/features/autosplit.gc" "autosplit-h" "task-control-h")
|
(goal-src "pc/features/autosplit.gc" "autosplit-h" "task-control-h")
|
||||||
|
(goal-src "pc/features/speedruns-h.gc")
|
||||||
|
(goal-src "pc/features/speedruns.gc" "speedruns-h" "autosplit-h")
|
||||||
(goal-src "pc/pckernel-h.gc" "dma-buffer")
|
(goal-src "pc/pckernel-h.gc" "dma-buffer")
|
||||||
(goal-src "pc/util/pc-anim-util.gc" "target-h")
|
(goal-src "pc/util/pc-anim-util.gc" "target-h")
|
||||||
(goal-src "pc/pckernel.gc" "pc-anim-util" "settings" "video" "target-h" "autosplit-h")
|
(goal-src "pc/pckernel.gc" "pc-anim-util" "settings" "video" "target-h" "autosplit-h" "speedruns-h")
|
||||||
(goal-src "pc/subtitle.gc" "text" "pckernel" "hint-control" "loader-h" "gsound" "ambient")
|
(goal-src "pc/subtitle.gc" "text" "pckernel" "hint-control" "loader-h" "gsound" "ambient")
|
||||||
(goal-src "pc/progress-pc.gc" "progress" "pckernel")
|
(goal-src "pc/progress-pc.gc" "progress" "pckernel")
|
||||||
(goal-src "pc/util/anim-tester-x.gc" "pckernel" "gstring" "joint" "process-drawable" "art-h" "effect-control")
|
(goal-src "pc/util/anim-tester-x.gc" "pckernel" "gstring" "joint" "process-drawable" "art-h" "effect-control")
|
||||||
|
|
4
goal_src/jak1/pc/features/speedruns-h.gc
Normal file
4
goal_src/jak1/pc/features/speedruns-h.gc
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
;;-*-Lisp-*-
|
||||||
|
(in-package goal)
|
||||||
|
|
||||||
|
(define-extern speedrun-start-run (function none))
|
19
goal_src/jak1/pc/features/speedruns.gc
Normal file
19
goal_src/jak1/pc/features/speedruns.gc
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
;;-*-Lisp-*-
|
||||||
|
(in-package goal)
|
||||||
|
|
||||||
|
(defun speedrun-start-run ()
|
||||||
|
;; randomize game id so the autosplitter knows to restart
|
||||||
|
(update-autosplit-jak1-new-game)
|
||||||
|
;; spawn at the warp gate checkpoint
|
||||||
|
(initialize! *game-info* 'game (the-as game-save #f) "game-start")
|
||||||
|
;; disable hints (this seems to be overriden by your slot 1 save though)
|
||||||
|
(set! (-> *setting-control* default play-hints) #f)
|
||||||
|
;; ensure `force actors` is not enabled
|
||||||
|
(set! (-> *pc-settings* force-actors?) #f)
|
||||||
|
;; force FPS to `60`
|
||||||
|
(set-frame-rate! *pc-settings* 60)
|
||||||
|
;; skip intro cutscene
|
||||||
|
(close-specific-task! (game-task intro) (task-status need-resolution))
|
||||||
|
;; enable auto saving by default
|
||||||
|
(set! (-> *setting-control* default auto-save) #t)
|
||||||
|
(none))
|
|
@ -318,6 +318,7 @@
|
||||||
|
|
||||||
(discord-rpc? symbol) ;; enable discord rich presence integration
|
(discord-rpc? symbol) ;; enable discord rich presence integration
|
||||||
(speedrunner-mode? symbol) ;; enable speedrunner mode
|
(speedrunner-mode? symbol) ;; enable speedrunner mode
|
||||||
|
(cutscene-skips? symbol) ;; enable cutscene skips
|
||||||
|
|
||||||
(cheats pc-cheats)
|
(cheats pc-cheats)
|
||||||
(cheats-known pc-cheats)
|
(cheats-known pc-cheats)
|
||||||
|
@ -421,6 +422,7 @@
|
||||||
(set! (-> obj aspect-custom-y) 3)
|
(set! (-> obj aspect-custom-y) 3)
|
||||||
(set! (-> obj discord-rpc?) #t)
|
(set! (-> obj discord-rpc?) #t)
|
||||||
(set! (-> obj speedrunner-mode?) #f)
|
(set! (-> obj speedrunner-mode?) #f)
|
||||||
|
(set! (-> obj cutscene-skips?) #t)
|
||||||
(set! (-> obj window-lock?) #t)
|
(set! (-> obj window-lock?) #t)
|
||||||
|
|
||||||
(reset-gfx obj)
|
(reset-gfx obj)
|
||||||
|
|
|
@ -98,7 +98,6 @@
|
||||||
|
|
||||||
(defmethod set-frame-rate! pc-settings ((obj pc-settings) (rate int))
|
(defmethod set-frame-rate! pc-settings ((obj pc-settings) (rate int))
|
||||||
"set the target framerate."
|
"set the target framerate."
|
||||||
|
|
||||||
(pc-set-frame-rate rate)
|
(pc-set-frame-rate rate)
|
||||||
(if (and (!= 'fullscreen (-> obj display-mode))
|
(if (and (!= 'fullscreen (-> obj display-mode))
|
||||||
(!= (pc-get-screen-rate -1) rate))
|
(!= (pc-get-screen-rate -1) rate))
|
||||||
|
@ -874,6 +873,7 @@
|
||||||
(("hinttitles?") (set! (-> obj hinttitles?) (file-stream-read-symbol file)))
|
(("hinttitles?") (set! (-> obj hinttitles?) (file-stream-read-symbol file)))
|
||||||
(("discord-rpc?") (set! (-> obj discord-rpc?) (file-stream-read-symbol file)))
|
(("discord-rpc?") (set! (-> obj discord-rpc?) (file-stream-read-symbol file)))
|
||||||
(("speedrunner-mode?") (set! (-> obj speedrunner-mode?) (file-stream-read-symbol file)))
|
(("speedrunner-mode?") (set! (-> obj speedrunner-mode?) (file-stream-read-symbol file)))
|
||||||
|
(("cutscene-skips?") (set! (-> obj cutscene-skips?) (file-stream-read-symbol file)))
|
||||||
(("first-camera-h-inverted?") (set! (-> obj first-camera-h-inverted?) (file-stream-read-symbol file)))
|
(("first-camera-h-inverted?") (set! (-> obj first-camera-h-inverted?) (file-stream-read-symbol file)))
|
||||||
(("first-camera-v-inverted?") (set! (-> obj first-camera-v-inverted?) (file-stream-read-symbol file)))
|
(("first-camera-v-inverted?") (set! (-> obj first-camera-v-inverted?) (file-stream-read-symbol file)))
|
||||||
(("third-camera-h-inverted?") (set! (-> obj third-camera-h-inverted?) (file-stream-read-symbol file)))
|
(("third-camera-h-inverted?") (set! (-> obj third-camera-h-inverted?) (file-stream-read-symbol file)))
|
||||||
|
@ -1000,6 +1000,7 @@
|
||||||
(format file " (skip-movies? ~A)~%" (-> obj skip-movies?))
|
(format file " (skip-movies? ~A)~%" (-> obj skip-movies?))
|
||||||
(format file " (discord-rpc? ~A)~%" (-> obj discord-rpc?))
|
(format file " (discord-rpc? ~A)~%" (-> obj discord-rpc?))
|
||||||
(format file " (speedrunner-mode? ~A)~%" (-> obj speedrunner-mode?))
|
(format file " (speedrunner-mode? ~A)~%" (-> obj speedrunner-mode?))
|
||||||
|
(format file " (cutscene-skips? ~A)~%" (-> obj cutscene-skips?))
|
||||||
(format file " (first-camera-h-inverted? ~A)~%" (-> obj first-camera-h-inverted?))
|
(format file " (first-camera-h-inverted? ~A)~%" (-> obj first-camera-h-inverted?))
|
||||||
(format file " (first-camera-v-inverted? ~A)~%" (-> obj first-camera-v-inverted?))
|
(format file " (first-camera-v-inverted? ~A)~%" (-> obj first-camera-v-inverted?))
|
||||||
(format file " (third-camera-h-inverted? ~A)~%" (-> obj third-camera-h-inverted?))
|
(format file " (third-camera-h-inverted? ~A)~%" (-> obj third-camera-h-inverted?))
|
||||||
|
@ -1158,8 +1159,8 @@
|
||||||
|
|
||||||
) ;; when debug_segment
|
) ;; when debug_segment
|
||||||
|
|
||||||
(defun-debug draw-build-revision ()
|
(defun draw-build-revision ()
|
||||||
(with-dma-buffer-add-bucket ((buf (-> (current-frame) debug-buf))
|
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf))
|
||||||
(bucket-id debug-no-zbuf))
|
(bucket-id debug-no-zbuf))
|
||||||
(draw-string-xy *pc-settings-built-sha*
|
(draw-string-xy *pc-settings-built-sha*
|
||||||
buf
|
buf
|
||||||
|
|
|
@ -166,6 +166,7 @@
|
||||||
(define *misc-options* (new 'static 'boxed-array :type game-option
|
(define *misc-options* (new 'static 'boxed-array :type game-option
|
||||||
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id money-starburst) :scale #t)
|
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id money-starburst) :scale #t)
|
||||||
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id discord-rpc) :scale #t)
|
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id discord-rpc) :scale #t)
|
||||||
|
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id cutscene-skips) :scale #t)
|
||||||
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id speedrunner-mode) :scale #t)
|
(new 'static 'game-option :option-type (game-option-type on-off) :name (game-text-id speedrunner-mode) :scale #t)
|
||||||
(new 'static 'game-option :option-type (game-option-type button) :name (game-text-id back) :scale #t)
|
(new 'static 'game-option :option-type (game-option-type button) :name (game-text-id back) :scale #t)
|
||||||
)
|
)
|
||||||
|
@ -745,27 +746,37 @@
|
||||||
(set! (-> *game-options-pc* 5 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *game-options-pc* 5 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *game-options-pc* 6 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *game-options-pc* 6 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *game-options-pc* 7 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *game-options-pc* 7 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
|
|
||||||
(set! (-> *graphic-options-pc* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *graphic-options-pc* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *graphic-options-pc* 2 value-to-modify) (&-> *pc-settings* monitor))
|
(set! (-> *graphic-options-pc* 2 value-to-modify) (&-> *pc-settings* monitor))
|
||||||
(set! (-> *graphic-options-pc* 3 value-to-modify) (&-> *pc-settings* vsync?))
|
(set! (-> *graphic-options-pc* 3 value-to-modify) (&-> *pc-settings* vsync?))
|
||||||
(set! (-> *graphic-options-pc* 5 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *graphic-options-pc* 5 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *graphic-options-pc* 6 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *graphic-options-pc* 6 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
|
;; disable changes to frame-rate while in speedrunner mode
|
||||||
|
(set! (-> *graphic-options-pc* 6 option-disabled-func) (lambda () (-> *pc-settings* speedrunner-mode?)))
|
||||||
|
|
||||||
(set! (-> *graphic-options-no-frame-rate-pc* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *graphic-options-no-frame-rate-pc* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *graphic-options-no-frame-rate-pc* 2 value-to-modify) (&-> *pc-settings* vsync?))
|
(set! (-> *graphic-options-no-frame-rate-pc* 2 value-to-modify) (&-> *pc-settings* vsync?))
|
||||||
(set! (-> *graphic-options-no-frame-rate-pc* 4 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *graphic-options-no-frame-rate-pc* 4 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
|
|
||||||
(set! (-> *misc-options* 0 value-to-modify) (&-> *pc-settings* money-starburst?))
|
(set! (-> *misc-options* 0 value-to-modify) (&-> *pc-settings* money-starburst?))
|
||||||
(set! (-> *misc-options* 1 value-to-modify) (&-> *pc-settings* discord-rpc?))
|
(set! (-> *misc-options* 1 value-to-modify) (&-> *pc-settings* discord-rpc?))
|
||||||
(set! (-> *misc-options* 2 value-to-modify) (&-> *pc-settings* speedrunner-mode?))
|
(set! (-> *misc-options* 2 value-to-modify) (&-> *pc-settings* cutscene-skips?))
|
||||||
|
(set! (-> *misc-options* 3 value-to-modify) (&-> *pc-settings* speedrunner-mode?))
|
||||||
|
|
||||||
(set! (-> *camera-options* 0 value-to-modify) (&-> *pc-settings* first-camera-h-inverted?))
|
(set! (-> *camera-options* 0 value-to-modify) (&-> *pc-settings* first-camera-h-inverted?))
|
||||||
(set! (-> *camera-options* 1 value-to-modify) (&-> *pc-settings* first-camera-v-inverted?))
|
(set! (-> *camera-options* 1 value-to-modify) (&-> *pc-settings* first-camera-v-inverted?))
|
||||||
(set! (-> *camera-options* 2 value-to-modify) (&-> *pc-settings* third-camera-h-inverted?))
|
(set! (-> *camera-options* 2 value-to-modify) (&-> *pc-settings* third-camera-h-inverted?))
|
||||||
(set! (-> *camera-options* 3 value-to-modify) (&-> *pc-settings* third-camera-v-inverted?))
|
(set! (-> *camera-options* 3 value-to-modify) (&-> *pc-settings* third-camera-v-inverted?))
|
||||||
|
|
||||||
(set! (-> *accessibility-options* 0 value-to-modify) (&-> *pc-settings* money-starburst?))
|
(set! (-> *accessibility-options* 0 value-to-modify) (&-> *pc-settings* money-starburst?))
|
||||||
|
|
||||||
(set! (-> *gfx-ps2-options* 0 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *gfx-ps2-options* 0 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *gfx-ps2-options* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
(set! (-> *gfx-ps2-options* 1 value-to-modify) (&-> *progress-carousell* int-backup))
|
||||||
(set! (-> *gfx-ps2-options* 2 value-to-modify) (&-> *pc-settings* ps2-parts?))
|
(set! (-> *gfx-ps2-options* 2 value-to-modify) (&-> *pc-settings* ps2-parts?))
|
||||||
;(set! (-> *gfx-ps2-options* 3 value-to-modify) (&-> *pc-settings* force-envmap?))
|
;(set! (-> *gfx-ps2-options* 3 value-to-modify) (&-> *pc-settings* force-envmap?))
|
||||||
;(set! (-> *gfx-ps2-options* 3 value-to-modify) (&-> *pc-settings* force-actors?))
|
;(set! (-> *gfx-ps2-options* 3 value-to-modify) (&-> *pc-settings* force-actors?))
|
||||||
|
|
||||||
(set! (-> *sound-options-pc* 0 value-to-modify) (&-> *setting-control* default sfx-volume))
|
(set! (-> *sound-options-pc* 0 value-to-modify) (&-> *setting-control* default sfx-volume))
|
||||||
(set! (-> *sound-options-pc* 1 value-to-modify) (&-> *setting-control* default music-volume))
|
(set! (-> *sound-options-pc* 1 value-to-modify) (&-> *setting-control* default music-volume))
|
||||||
(set! (-> *sound-options-pc* 2 value-to-modify) (&-> *setting-control* default dialog-volume))
|
(set! (-> *sound-options-pc* 2 value-to-modify) (&-> *setting-control* default dialog-volume))
|
||||||
|
@ -1116,6 +1127,11 @@
|
||||||
)
|
)
|
||||||
((or (cpad-pressed? 0 x) (cpad-pressed? 0 circle))
|
((or (cpad-pressed? 0 x) (cpad-pressed? 0 circle))
|
||||||
;; pressed x or circle. advance!
|
;; pressed x or circle. advance!
|
||||||
|
;; first check if the option is disabled, if so leave early and do nothing
|
||||||
|
(when (and (!= (-> options (-> obj option-index) option-disabled-func) 0)
|
||||||
|
((-> options (-> obj option-index) option-disabled-func)))
|
||||||
|
(sound-play "menu-stats")
|
||||||
|
(return #f))
|
||||||
(cond
|
(cond
|
||||||
((not (-> obj selected-option))
|
((not (-> obj selected-option))
|
||||||
;; no option already selected.
|
;; no option already selected.
|
||||||
|
@ -1535,16 +1551,8 @@
|
||||||
(sound-volume-off)
|
(sound-volume-off)
|
||||||
(set! (-> *game-info* mode) 'play)
|
(set! (-> *game-info* mode) 'play)
|
||||||
;; Start a new game differently if speedrunning mode is active
|
;; Start a new game differently if speedrunning mode is active
|
||||||
(cond ((= (-> *pc-settings* speedrunner-mode?) #t)
|
(cond ((-> *pc-settings* speedrunner-mode?)
|
||||||
(update-autosplit-jak1-new-game)
|
(speedrun-start-run))
|
||||||
;; spawn at the warp gate
|
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "game-start")
|
|
||||||
;; disable hints (this seems to be overriden by your slot 1 save though)
|
|
||||||
(set! (-> *setting-control* default play-hints) #f)
|
|
||||||
;; skip intro cutscene
|
|
||||||
(close-specific-task! (game-task intro) (task-status need-resolution))
|
|
||||||
;; enable auto saving by default
|
|
||||||
(set! (-> *setting-control* default auto-save) #t))
|
|
||||||
;; start the game normally
|
;; start the game normally
|
||||||
(else
|
(else
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
||||||
|
@ -1562,16 +1570,8 @@
|
||||||
(sound-volume-off)
|
(sound-volume-off)
|
||||||
(set! (-> *game-info* mode) 'play)
|
(set! (-> *game-info* mode) 'play)
|
||||||
;; Start a new game differently if speedrunning mode is active
|
;; Start a new game differently if speedrunning mode is active
|
||||||
(cond ((= (-> *pc-settings* speedrunner-mode?) #t)
|
(cond ((-> *pc-settings* speedrunner-mode?)
|
||||||
(update-autosplit-jak1-new-game)
|
(speedrun-start-run))
|
||||||
;; spawn at the warp gate
|
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "game-start")
|
|
||||||
;; disable hints (this seems to be overriden by your slot 1 save though)
|
|
||||||
(set! (-> *setting-control* default play-hints) #f)
|
|
||||||
;; skip intro cutscene
|
|
||||||
(close-specific-task! (game-task intro) (task-status need-resolution))
|
|
||||||
;; enable auto saving by default
|
|
||||||
(set! (-> *setting-control* default auto-save) #t))
|
|
||||||
;; start the game normally
|
;; start the game normally
|
||||||
(else
|
(else
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
||||||
|
@ -1659,16 +1659,8 @@
|
||||||
(sound-volume-off)
|
(sound-volume-off)
|
||||||
(set! (-> *game-info* mode) 'play)
|
(set! (-> *game-info* mode) 'play)
|
||||||
;; Start a new game differently if speedrunning mode is active
|
;; Start a new game differently if speedrunning mode is active
|
||||||
(cond ((= (-> *pc-settings* speedrunner-mode?) #t)
|
(cond ((-> *pc-settings* speedrunner-mode?)
|
||||||
(update-autosplit-jak1-new-game)
|
(speedrun-start-run))
|
||||||
;; spawn at the warp gate
|
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "game-start")
|
|
||||||
;; disable hints (this seems to be overriden by your slot 1 save though)
|
|
||||||
(set! (-> *setting-control* default play-hints) #f)
|
|
||||||
;; skip intro cutscene
|
|
||||||
(close-specific-task! (game-task intro) (task-status need-resolution))
|
|
||||||
;; enable auto saving by default
|
|
||||||
(set! (-> *setting-control* default auto-save) #t))
|
|
||||||
;; start the game normally
|
;; start the game normally
|
||||||
(else
|
(else
|
||||||
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
(initialize! *game-info* 'game (the-as game-save #f) "intro-start")))
|
||||||
|
@ -1777,6 +1769,10 @@
|
||||||
(option-y y-off)
|
(option-y y-off)
|
||||||
(locked? #f)
|
(locked? #f)
|
||||||
)
|
)
|
||||||
|
;; Check if the option should be disabled
|
||||||
|
(when (and (!= (-> options index option-disabled-func) 0)
|
||||||
|
((-> options index option-disabled-func)))
|
||||||
|
(set! locked? #t))
|
||||||
(case (-> options index option-type)
|
(case (-> options index option-type)
|
||||||
(((game-option-type yes-no))
|
(((game-option-type yes-no))
|
||||||
;; yes-no option. text is either '->YES<- NO' or 'YES ->NO<-', not the most robust but this option is a strange hack anyway.
|
;; yes-no option. text is either '->YES<- NO' or 'YES ->NO<-', not the most robust but this option is a strange hack anyway.
|
||||||
|
|
|
@ -74,6 +74,9 @@ class Compiler {
|
||||||
void add_ignored_define_extern_symbol(const std::string& name) {
|
void add_ignored_define_extern_symbol(const std::string& name) {
|
||||||
m_allow_inconsistent_definition_symbols.insert(name);
|
m_allow_inconsistent_definition_symbols.insert(name);
|
||||||
}
|
}
|
||||||
|
void add_ignored_type_definition(const std::string& type_name) {
|
||||||
|
m_ts.add_type_to_allowed_redefinition_list(type_name);
|
||||||
|
}
|
||||||
Debugger& get_debugger() { return m_debugger; }
|
Debugger& get_debugger() { return m_debugger; }
|
||||||
listener::Listener& listener() { return m_listener; }
|
listener::Listener& listener() { return m_listener; }
|
||||||
void poke_target() { m_listener.send_poke(); }
|
void poke_target() { m_listener.send_poke(); }
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include "goalc/compiler/Compiler.h"
|
#include "goalc/compiler/Compiler.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
void add_expected_type_mismatches(Compiler& c) {
|
void add_common_expected_type_mismatches(Compiler& c) {
|
||||||
c.add_ignored_define_extern_symbol("draw-drawable-tree-tfrag");
|
c.add_ignored_define_extern_symbol("draw-drawable-tree-tfrag");
|
||||||
c.add_ignored_define_extern_symbol("draw-drawable-tree-trans-tfrag");
|
c.add_ignored_define_extern_symbol("draw-drawable-tree-trans-tfrag");
|
||||||
c.add_ignored_define_extern_symbol("draw-drawable-tree-dirt-tfrag");
|
c.add_ignored_define_extern_symbol("draw-drawable-tree-dirt-tfrag");
|
||||||
|
@ -9,18 +9,26 @@ void add_expected_type_mismatches(Compiler& c) {
|
||||||
c.add_ignored_define_extern_symbol("tfrag-init-buffer");
|
c.add_ignored_define_extern_symbol("tfrag-init-buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_jak1_expected_type_mismatches(Compiler& c) {
|
||||||
|
c.add_ignored_type_definition("game-option");
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO - debatably delete these now that jak 1 is complete
|
||||||
TEST(Jak1TypeConsistency, MANUAL_TEST_TypeConsistencyWithBuildFirst) {
|
TEST(Jak1TypeConsistency, MANUAL_TEST_TypeConsistencyWithBuildFirst) {
|
||||||
Compiler compiler(GameVersion::Jak1);
|
Compiler compiler(GameVersion::Jak1);
|
||||||
compiler.enable_throw_on_redefines();
|
compiler.enable_throw_on_redefines();
|
||||||
add_expected_type_mismatches(compiler);
|
add_common_expected_type_mismatches(compiler);
|
||||||
|
add_jak1_expected_type_mismatches(compiler);
|
||||||
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
||||||
compiler.run_test_no_load("decompiler/config/all-types.gc");
|
compiler.run_test_no_load("decompiler/config/all-types.gc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO - debatably delete these now that jak 1 is complete
|
||||||
TEST(Jak1TypeConsistency, TypeConsistency) {
|
TEST(Jak1TypeConsistency, TypeConsistency) {
|
||||||
Compiler compiler(GameVersion::Jak1);
|
Compiler compiler(GameVersion::Jak1);
|
||||||
compiler.enable_throw_on_redefines();
|
compiler.enable_throw_on_redefines();
|
||||||
add_expected_type_mismatches(compiler);
|
add_common_expected_type_mismatches(compiler);
|
||||||
|
add_jak1_expected_type_mismatches(compiler);
|
||||||
compiler.run_test_no_load("decompiler/config/all-types.gc");
|
compiler.run_test_no_load("decompiler/config/all-types.gc");
|
||||||
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
||||||
}
|
}
|
||||||
|
@ -28,7 +36,7 @@ TEST(Jak1TypeConsistency, TypeConsistency) {
|
||||||
TEST(Jak2TypeConsistency, TypeConsistency) {
|
TEST(Jak2TypeConsistency, TypeConsistency) {
|
||||||
Compiler compiler(GameVersion::Jak2);
|
Compiler compiler(GameVersion::Jak2);
|
||||||
compiler.enable_throw_on_redefines();
|
compiler.enable_throw_on_redefines();
|
||||||
add_expected_type_mismatches(compiler);
|
add_common_expected_type_mismatches(compiler);
|
||||||
compiler.run_test_no_load("decompiler/config/jak2/all-types.gc");
|
compiler.run_test_no_load("decompiler/config/jak2/all-types.gc");
|
||||||
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
compiler.run_test_no_load("test/goalc/source_templates/with_game/test-build-all-code.gc");
|
||||||
}
|
}
|
Loading…
Reference in a new issue