mirror of
https://github.com/open-goal/jak-project
synced 2026-08-11 19:39:38 -04:00
port pckernel to Jak 2 (#2248)
Adds the `pckernel` system to Jak 2, allowing you to do the PC-specific things that Jak 1 lets you do like change game resolution, etc. In other to reduce the amount of code duplication for something that we're gonna be changing a lot over time, I split it into a few more code files. In this new system, `pckernel-h.gc`, `pckernel-common.gc` (previously `pckernel.gc`) and `pc-debug-common.gc` are the files that should be shared across all games (I hacked the Jak 2 project to pull these files from the Jak 1 folder), while `pckernel-impl.gc`, `pckernel.gc` and `pc-debug-methods.gc` are their respective game-specific counterparts that should be loaded after. I'm not fully happy with this, I think it's slightly messy, but it cleanly separates code that should be game-specific and not accidentally copied around and code that should be the same for all games anyway.
This commit is contained in:
@@ -67,15 +67,20 @@ TypeSpec TypeSpec::substitute_for_method_call(const std::string& method_type) co
|
||||
}
|
||||
|
||||
bool TypeSpec::is_compatible_child_method(const TypeSpec& implementation,
|
||||
const std::string& child_type) const {
|
||||
const std::string& child_type,
|
||||
int* bad_arg_idx_out) const {
|
||||
bool ok = implementation.m_type == m_type ||
|
||||
(m_type == "_type_" && implementation.m_type == child_type);
|
||||
if (!ok || implementation.arg_count() != arg_count()) {
|
||||
if (bad_arg_idx_out)
|
||||
*bad_arg_idx_out = -1;
|
||||
return false;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < arg_count(); i++) {
|
||||
if (!get_arg(i).is_compatible_child_method(implementation.get_arg(i), child_type)) {
|
||||
if (bad_arg_idx_out)
|
||||
*bad_arg_idx_out = i;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,7 +79,8 @@ class TypeSpec {
|
||||
bool operator!=(const TypeSpec& other) const;
|
||||
bool operator==(const TypeSpec& other) const;
|
||||
bool is_compatible_child_method(const TypeSpec& implementation,
|
||||
const std::string& child_type) const;
|
||||
const std::string& child_type,
|
||||
int* bad_arg_idx_out = nullptr) const;
|
||||
std::string print() const;
|
||||
|
||||
void add_arg(const TypeSpec& ts) {
|
||||
|
||||
@@ -645,12 +645,21 @@ MethodInfo TypeSystem::define_method(Type* type,
|
||||
bool got_existing = try_lookup_method(type, method_name, &existing_info);
|
||||
|
||||
if (got_existing) {
|
||||
// make sure we aren't changing anything.
|
||||
if (!existing_info.type.is_compatible_child_method(ts, type->get_name())) {
|
||||
int bad_arg_idx = -99;
|
||||
// make sure we aren't changing anything that isn't the return type.
|
||||
if (!existing_info.type.is_compatible_child_method(ts, type->get_name(), &bad_arg_idx) &&
|
||||
bad_arg_idx != ts.arg_count() - 1) {
|
||||
throw_typesystem_error(
|
||||
"The method {} of type {} was originally defined as {}, but has been "
|
||||
"redefined as {}\n",
|
||||
method_name, type->get_name(), existing_info.type.print(), ts.print());
|
||||
"redefined as {} (see argument index {})\n",
|
||||
method_name, type->get_name(), existing_info.type.print(), ts.print(), bad_arg_idx);
|
||||
} else if (bad_arg_idx == ts.arg_count() - 1 &&
|
||||
!tc(existing_info.type.last_arg(), ts.last_arg())) {
|
||||
throw_typesystem_error(
|
||||
"The method {} of type {} was originally defined as returning {}, but has been redefined "
|
||||
"and returns {}\n",
|
||||
method_name, type->get_name(), existing_info.type.last_arg().print(),
|
||||
ts.last_arg().print());
|
||||
}
|
||||
|
||||
return existing_info;
|
||||
|
||||
@@ -6304,10 +6304,10 @@
|
||||
;; +++font-h:font-color
|
||||
(defenum font-color
|
||||
:type uint32
|
||||
(default-#cddbcd 0)
|
||||
(default 0)
|
||||
(#dadada 1)
|
||||
(#ededed 2)
|
||||
(precursor-#ec3b00 3)
|
||||
(red 3)
|
||||
(gold-#ba9200 4)
|
||||
(yellow-#f3f300 5)
|
||||
(green-#3df23d 6)
|
||||
@@ -6324,7 +6324,7 @@
|
||||
(#a6b5a6 17)
|
||||
(#757f75 18)
|
||||
(#5e3f5e 19)
|
||||
(#f0e387 20)
|
||||
(flat-yellow 20)
|
||||
(#3fbaed 21)
|
||||
(#3a3a3a 22)
|
||||
(#5c5c5c 23)
|
||||
|
||||
@@ -466,22 +466,6 @@ void render_game_frame(int game_width,
|
||||
options.gpu_sync = g_gfx_data->debug_gui.should_gl_finish();
|
||||
options.borderless_windows_hacks = windows_borderless_hack;
|
||||
|
||||
// hack for jak 2 resize
|
||||
if (g_game_version == GameVersion::Jak2) {
|
||||
float ratio = 0.75 * (float)window_fb_width / (float)window_fb_height;
|
||||
if (ratio > 1) {
|
||||
window_fb_width /= ratio;
|
||||
} else {
|
||||
window_fb_height *= ratio;
|
||||
}
|
||||
options.game_res_w = window_fb_width;
|
||||
options.game_res_h = window_fb_height;
|
||||
options.window_framebuffer_width = window_fb_width;
|
||||
options.window_framebuffer_height = window_fb_height;
|
||||
options.draw_region_width = window_fb_width;
|
||||
options.draw_region_height = window_fb_height;
|
||||
}
|
||||
|
||||
if (want_hotkey_screenshot && g_gfx_data->debug_gui.screenshot_hotkey_enabled) {
|
||||
options.save_screenshot = true;
|
||||
std::string screenshot_file_name = make_hotkey_screenshot_file_name();
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include "common/goal_constants.h"
|
||||
#include "common/util/Assert.h"
|
||||
|
||||
#include "game/kernel/common/Ptr.h"
|
||||
@@ -11,7 +12,7 @@ struct Symbol4 {
|
||||
T& value() { return *reinterpret_cast<T*>(&foo - 1); }
|
||||
const T& value() const { return *reinterpret_cast<T*>(&foo - 1); }
|
||||
const char* name_cstr() const {
|
||||
ASSERT_MSG(false, "nyi");
|
||||
return nullptr;
|
||||
return (const char*)(g_ee_main_mem + 4 +
|
||||
*reinterpret_cast<const u32*>(&foo + jak2::SYM_TO_STRING_OFFSET));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -367,6 +367,14 @@ void c_memmove(u32 dst, u32 src, u32 size) {
|
||||
memmove(Ptr<u8>(dst).c(), Ptr<u8>(src).c(), size);
|
||||
}
|
||||
|
||||
void set_game_resolution(s64 w, s64 h) {
|
||||
Gfx::set_game_resolution(w, h);
|
||||
}
|
||||
|
||||
void set_msaa(s64 samples) {
|
||||
Gfx::set_msaa(samples);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Returns size of window. Called from game thread
|
||||
*/
|
||||
@@ -540,7 +548,7 @@ u64 pc_filter_debug_string(u32 str_ptr, u32 dist_ptr) {
|
||||
|
||||
// Check distance first
|
||||
if (Gfx::g_debug_settings.debug_text_check_range) {
|
||||
if (dist / 4096.0 > Gfx::g_debug_settings.debug_text_max_range) {
|
||||
if (dist / 4096.F > Gfx::g_debug_settings.debug_text_max_range) {
|
||||
return s7.offset + true_symbol_offset(g_game_version);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,8 @@ u64 DecodeInactiveTimeout();
|
||||
void DecodeTime(u32 ptr);
|
||||
u64 read_ee_timer();
|
||||
void c_memmove(u32 dst, u32 src, u32 size);
|
||||
void set_game_resolution(s64 w, s64 h);
|
||||
void set_msaa(s64 samples);
|
||||
void get_window_size(u32 w_ptr, u32 h_ptr);
|
||||
void get_window_scale(u32 x_ptr, u32 y_ptr);
|
||||
void get_screen_size(s64 vmode_idx, u32 w_ptr, u32 h_ptr);
|
||||
|
||||
@@ -579,14 +579,6 @@ void set_fullscreen(u32 symptr, s64 screen) {
|
||||
}
|
||||
}
|
||||
|
||||
void set_game_resolution(s64 w, s64 h) {
|
||||
Gfx::set_game_resolution(w, h);
|
||||
}
|
||||
|
||||
void set_msaa(s64 samples) {
|
||||
Gfx::set_msaa(samples);
|
||||
}
|
||||
|
||||
void InitMachine_PCPort() {
|
||||
// PC Port added functions
|
||||
|
||||
|
||||
@@ -490,6 +490,23 @@ u64 kopen(u64 fs, u64 name, u64 mode) {
|
||||
return fs;
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC port functions START
|
||||
*/
|
||||
|
||||
/*!
|
||||
* Return the current OS as a symbol. Actually returns what it was compiled for!
|
||||
*/
|
||||
u64 get_os() {
|
||||
#ifdef _WIN32
|
||||
return intern_from_c("windows").offset;
|
||||
#elif __linux__
|
||||
return intern_from_c("linux").offset;
|
||||
#else
|
||||
return s7.offset;
|
||||
#endif
|
||||
}
|
||||
|
||||
void pc_set_levels(u32 lev_list) {
|
||||
std::vector<std::string> levels;
|
||||
for (int i = 0; i < 6; i++) {
|
||||
@@ -576,6 +593,28 @@ void update_discord_rpc(u32 discord_info) {
|
||||
}
|
||||
}
|
||||
|
||||
u32 get_fullscreen() {
|
||||
switch (Gfx::get_fullscreen()) {
|
||||
default:
|
||||
case GfxDisplayMode::Windowed:
|
||||
return intern_from_c("windowed").offset;
|
||||
case GfxDisplayMode::Borderless:
|
||||
return intern_from_c("borderless").offset;
|
||||
case GfxDisplayMode::Fullscreen:
|
||||
return intern_from_c("fullscreen").offset;
|
||||
}
|
||||
}
|
||||
|
||||
void set_fullscreen(u32 symptr, s64 screen) {
|
||||
if (symptr == intern_from_c("windowed").offset || symptr == s7.offset) {
|
||||
Gfx::set_fullscreen(GfxDisplayMode::Windowed, screen);
|
||||
} else if (symptr == intern_from_c("borderless").offset) {
|
||||
Gfx::set_fullscreen(GfxDisplayMode::Borderless, screen);
|
||||
} else if (symptr == intern_from_c("fullscreen").offset) {
|
||||
Gfx::set_fullscreen(GfxDisplayMode::Fullscreen, screen);
|
||||
}
|
||||
}
|
||||
|
||||
void InitMachine_PCPort() {
|
||||
// PC Port added functions
|
||||
|
||||
@@ -597,18 +636,22 @@ void InitMachine_PCPort() {
|
||||
make_function_symbol_from_c("pc-pad-input-index-get", (void*)Pad::input_mode_get_index);
|
||||
|
||||
// os stuff
|
||||
// make_function_symbol_from_c("pc-get-os", (void*)get_os);
|
||||
make_function_symbol_from_c("pc-get-os", (void*)get_os);
|
||||
make_function_symbol_from_c("pc-get-window-size", (void*)get_window_size);
|
||||
make_function_symbol_from_c("pc-get-window-scale", (void*)get_window_scale);
|
||||
// make_function_symbol_from_c("pc-get-fullscreen", (void*)get_fullscreen);
|
||||
make_function_symbol_from_c("pc-get-fullscreen", (void*)get_fullscreen);
|
||||
make_function_symbol_from_c("pc-get-screen-size", (void*)get_screen_size);
|
||||
make_function_symbol_from_c("pc-get-screen-rate", (void*)get_screen_rate);
|
||||
make_function_symbol_from_c("pc-get-screen-vmode-count", (void*)get_screen_vmode_count);
|
||||
make_function_symbol_from_c("pc-get-monitor-count", (void*)get_monitor_count);
|
||||
make_function_symbol_from_c("pc-set-window-size", (void*)Gfx::set_window_size);
|
||||
// make_function_symbol_from_c("pc-set-fullscreen", (void*)set_fullscreen);
|
||||
make_function_symbol_from_c("pc-set-fullscreen", (void*)set_fullscreen);
|
||||
make_function_symbol_from_c("pc-set-frame-rate", (void*)set_frame_rate);
|
||||
make_function_symbol_from_c("pc-set-vsync", (void*)set_vsync);
|
||||
make_function_symbol_from_c("pc-set-window-lock", (void*)set_window_lock);
|
||||
make_function_symbol_from_c("pc-set-game-resolution", (void*)set_game_resolution);
|
||||
make_function_symbol_from_c("pc-set-msaa", (void*)set_msaa);
|
||||
make_function_symbol_from_c("pc-get-unix-timestamp", (void*)get_unix_timestamp);
|
||||
|
||||
// graphics things
|
||||
make_function_symbol_from_c("pc-set-letterbox", (void*)Gfx::set_letterbox);
|
||||
@@ -649,6 +692,10 @@ void InitMachine_PCPort() {
|
||||
intern_from_c("*pc-settings-built-sha*")->value() = make_string_from_c(GIT_VERSION);
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC port functions END
|
||||
*/
|
||||
|
||||
void PutDisplayEnv(u32 /*ptr*/) {
|
||||
ASSERT(false);
|
||||
}
|
||||
|
||||
@@ -35,6 +35,9 @@
|
||||
"dma-bucket.o"
|
||||
"dma-disasm.o"
|
||||
"pckernel-h.o" ;; added
|
||||
"pckernel-impl.o" ;; added
|
||||
"pc-debug-common.o" ;; added
|
||||
"pc-debug-methods.o" ;; added
|
||||
"pad.o"
|
||||
"gs.o"
|
||||
"display-h.o"
|
||||
@@ -193,14 +196,15 @@
|
||||
"entity-table.o"
|
||||
"loader.o"
|
||||
"task-control-h.o"
|
||||
"speedruns-h.o" ;; added
|
||||
"game-info.o"
|
||||
"game-save.o"
|
||||
"settings.o"
|
||||
"pc-anim-util.o" ;; added
|
||||
"autosplit-h.o" ;; added
|
||||
"autosplit.o" ;; added
|
||||
"speedruns-h.o" ;; added
|
||||
"speedruns.o" ;; added
|
||||
"pckernel-common.o" ;; added
|
||||
"pckernel.o" ;; added
|
||||
"mood-tables.o"
|
||||
"mood.o"
|
||||
|
||||
@@ -31,6 +31,9 @@
|
||||
"dma-bucket.o"
|
||||
"dma-disasm.o"
|
||||
"pckernel-h.o" ;; added
|
||||
"pckernel-impl.o" ;; added
|
||||
"pc-debug-common.o" ;; added
|
||||
"pc-debug-methods.o" ;; added
|
||||
"pad.o"
|
||||
"gs.o"
|
||||
"display-h.o"
|
||||
@@ -197,6 +200,7 @@
|
||||
"autosplit-h.o" ;; added
|
||||
"autosplit.o" ;; added
|
||||
"speedruns.o" ;; added
|
||||
"pckernel-common.o" ;; added
|
||||
"pckernel.o" ;; added
|
||||
"mood-tables.o"
|
||||
"mood.o"
|
||||
|
||||
@@ -565,50 +565,8 @@
|
||||
0
|
||||
)
|
||||
|
||||
(defconstant MEM_BAR_WIDTH 152)
|
||||
(defconstant MEM_BAR_HEIGHT 8)
|
||||
(defconstant MEM_BAR_NUM 7)
|
||||
(defconstant MEM_BAR_BG_COL (static-rgba 64 64 64 64))
|
||||
(defconstant MEM_BAR_X (- 480 MEM_BAR_WIDTH))
|
||||
(defconstant MEM_BAR_Y (- 224 4 (* MEM_BAR_HEIGHT MEM_BAR_NUM)))
|
||||
(defmacro draw-memory-bar-generic (buf &key remain &key total &key name &key idx &key color)
|
||||
`(let* (
|
||||
(total (the float ,total))
|
||||
(remain (the float ,remain))
|
||||
(used-p (/ (- total remain) total))
|
||||
(used-x (the int (* used-p MEM_BAR_WIDTH)))
|
||||
(used-y (+ MEM_BAR_Y (* ,idx MEM_BAR_HEIGHT)))
|
||||
)
|
||||
(draw-sprite2d-xy ,buf MEM_BAR_X used-y used-x MEM_BAR_HEIGHT ,color)
|
||||
(draw-sprite2d-xy ,buf (+ MEM_BAR_X used-x) used-y (- MEM_BAR_WIDTH used-x) MEM_BAR_HEIGHT MEM_BAR_BG_COL)
|
||||
(draw-string-xy ,name ,buf MEM_BAR_X used-y (font-color red) (font-flags shadow kerning right))
|
||||
(draw-string-xy (string-format "~,,2f%" (* used-p 100)) ,buf (+ MEM_BAR_X used-x) used-y (font-color red) (font-flags shadow kerning middle))
|
||||
(draw-string-xy (string-format "~,,1fM" (/ total (* 1024 1024))) ,buf (+ MEM_BAR_X MEM_BAR_WIDTH) used-y (font-color red) (font-flags shadow kerning left))
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-kheap (buf heap &key (name #f) &key idx &key color)
|
||||
`(let ((heap ,heap))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (&- (-> heap top) (-> heap current))
|
||||
:total (&- (-> heap top) (-> heap base))
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-dead-pool-heap (buf heap &key (name #f) &key idx &key color)
|
||||
`(let* ((heap ,heap) (pool-total (memory-total heap)))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (- pool-total (memory-used heap))
|
||||
:total pool-total
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
|
||||
(defbehavior display-loop process ()
|
||||
"This is in progress..."
|
||||
"the main 'display loop' in GOAL. v-sync is done in this function, so all frames start and end here."
|
||||
|
||||
;; increase our stack size.
|
||||
(stack-size-set! (-> self main-thread) 512)
|
||||
@@ -705,8 +663,7 @@
|
||||
|
||||
(with-profiler "menu"
|
||||
(with-pc
|
||||
(if
|
||||
(and (-> *pc-settings* display-sha) *debug-segment*)
|
||||
(if (and (-> *pc-settings* display-sha) *debug-segment*)
|
||||
(draw-build-revision)))
|
||||
(*menu-hook*)
|
||||
(add-ee-profile-frame 'draw :g #x40)
|
||||
@@ -747,7 +704,7 @@
|
||||
)
|
||||
(if (#if (not PC_PORT)
|
||||
(= (-> *setting-control* current aspect-ratio) 'aspect4x3)
|
||||
(or (not (-> *pc-settings* use-vis?)) (and (-> *pc-settings* use-vis?) (= (-> *setting-control* current aspect-ratio) 'aspect4x3))))
|
||||
(or (= (-> *setting-control* current aspect-ratio) 'aspect4x3) (not (-> *pc-settings* use-vis?))))
|
||||
(letterbox)
|
||||
)
|
||||
)
|
||||
@@ -818,67 +775,11 @@
|
||||
|
||||
;; added
|
||||
(#when PC_PORT
|
||||
(when (-> *pc-settings* debug?)
|
||||
(draw *pc-settings* debug-buf)
|
||||
)
|
||||
(when (-> *pc-settings* display-actor-bank)
|
||||
(draw-string-xy (string-format "Actor Bank: ~,,1m/~,,1m (~D)" (-> *ACTOR-bank* pause-dist) (-> *ACTOR-bank* birth-dist) (-> *ACTOR-bank* birth-max)) debug-buf 512 (- 224 8) (font-color default) (font-flags shadow kerning right))
|
||||
)
|
||||
(when (-> *pc-settings* display-bug-report)
|
||||
(format *stdcon* "~0kbug-report ~A~%" *user*)
|
||||
(format *stdcon* "nick ~A continue ~S~%" (-> *load-state* vis-nick) (-> *game-info* current-continue name))
|
||||
(dotimes (i LEVEL_COUNT)
|
||||
(format *stdcon* "level ~D ~12A ~A~%" i (-> *level* level i name) (-> *level* level i display?))
|
||||
)
|
||||
(format *stdcon* "music ~A (f: ~D/~S)~%" (-> *setting-control* current music) (-> *setting-control* current sound-flava) (music-flava->string (the-as music-flava (-> *setting-control* default sound-flava))))
|
||||
(format *stdcon* "sound ~A ~A~%" *sound-bank-1* *sound-bank-2*)
|
||||
(let ((pos (target-pos 0)))
|
||||
(format *stdcon* "target ~m ~m ~m~%" (-> pos x) (-> pos y) (-> pos z))
|
||||
)
|
||||
(let ((pos (camera-pos)))
|
||||
(format *stdcon* "cam-trans ~m ~m ~m~%" (-> pos x) (-> pos y) (-> pos z))
|
||||
)
|
||||
(let ((rot (new 'stack 'quaternion)))
|
||||
(matrix->quaternion rot (-> *math-camera* camera-rot))
|
||||
(format *stdcon* "cam-rot ~f ~f ~f ~f~%" (-> rot x) (-> rot y) (-> rot z) (-> rot w))
|
||||
)
|
||||
(format *stdcon* "~1k")
|
||||
)
|
||||
(when (-> *pc-settings* display-heap-status)
|
||||
(draw-memory-bar-kheap debug-buf global :idx 0 :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-kheap debug-buf debug :idx 1 :color (static-rgba 255 32 32 64))
|
||||
(draw-memory-bar-kheap debug-buf (-> *level* level 0 heap) :name "l0" :idx 2 :color (static-rgba 32 255 255 64))
|
||||
(draw-memory-bar-kheap debug-buf (-> *level* level 1 heap) :name "l1" :idx 3 :color (static-rgba 255 32 255 64))
|
||||
(draw-memory-bar-dead-pool-heap debug-buf *nk-dead-pool* :name "actor" :idx 4 :color (static-rgba 32 255 32 64))
|
||||
(draw-memory-bar-generic debug-buf
|
||||
:remain (* 16 (dma-buffer-free (-> disp frames (-> disp on-screen) frame global-buf)))
|
||||
:total (length (-> disp frames (-> disp on-screen) frame global-buf))
|
||||
:name "dma-global" :idx 5 :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-generic debug-buf
|
||||
:remain (* 16 (dma-buffer-free (-> disp frames (-> disp on-screen) frame debug-buf)))
|
||||
:total (length (-> disp frames (-> disp on-screen) frame debug-buf))
|
||||
:name "dma-debug" :idx 6 :color (static-rgba 255 32 32 64))
|
||||
)
|
||||
(draw *pc-settings* debug-buf)
|
||||
(draw-memory *pc-settings* debug-buf)
|
||||
(print-debug-misc *pc-settings*)
|
||||
)
|
||||
|
||||
#|
|
||||
(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))
|
||||
)
|
||||
;; added, prints some level status.
|
||||
(dotimes (i 2)
|
||||
(let ((level-heap (-> *level* level i heap)))
|
||||
(format *stdcon* "~17Llevel ~d: ~A ~A ~,,2fK remaining~0L~%"
|
||||
i
|
||||
(-> *level* level i name)
|
||||
(-> *level* level i status)
|
||||
(* (1/ 1024) (&- (-> level-heap top) (-> level-heap current)))
|
||||
)
|
||||
)
|
||||
)
|
||||
|#
|
||||
|
||||
(display-file-info)
|
||||
) ;; end dma let
|
||||
) ;; end debug-segment
|
||||
|
||||
+15
-2
@@ -1915,7 +1915,16 @@
|
||||
"game/task/hint-control.gc"
|
||||
"entity/ambient.gc"
|
||||
"debug/assert.gc"
|
||||
"common-obs/generic-obs.gc"
|
||||
)
|
||||
|
||||
(goal-src "engine/common-obs/generic-obs.gc" "pc-anim-util" "assert")
|
||||
|
||||
(goal-src-sequence
|
||||
;; prefix
|
||||
"engine/"
|
||||
|
||||
:deps
|
||||
("$OUT/obj/generic-obs.o")
|
||||
"target/target-util.gc"
|
||||
"target/target-part.gc"
|
||||
"target/collide-reaction-target.gc"
|
||||
@@ -2045,14 +2054,18 @@
|
||||
(goal-src "pc/features/autosplit.gc" "autosplit-h" "task-control-h" "progress-static")
|
||||
(goal-src "pc/features/speedruns.gc" "speedruns-h" "autosplit-h")
|
||||
(goal-src "pc/pckernel-h.gc" "dma-buffer")
|
||||
(goal-src "pc/pckernel-impl.gc" "pckernel-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" "speedruns-h")
|
||||
(goal-src "pc/pckernel-common.gc" "pckernel-impl" "pc-anim-util" "settings" "video" "target-h" "autosplit-h" "speedruns-h")
|
||||
(goal-src "pc/pckernel.gc" "pckernel-common")
|
||||
(goal-src "pc/subtitle.gc" "text" "pckernel" "hint-control" "loader-h" "gsound" "ambient")
|
||||
(goal-src "pc/progress-pc.gc" "progress" "pckernel")
|
||||
(goal-src "pc/hud-classes-pc.gc" "pckernel" "hud" "battlecontroller" "generic-obs")
|
||||
(goal-src "pc/debug/anim-tester-x.gc" "pckernel" "gstring" "joint" "process-drawable" "art-h" "effect-control")
|
||||
(goal-src "pc/debug/entity-debug.gc" "debug" "main-h" "entity" "pckernel" "font")
|
||||
(goal-src "pc/debug/default-menu-pc.gc" "anim-tester-x" "part-tester" "entity-debug")
|
||||
(goal-src "pc/debug/pc-debug-common.gc" "pckernel-impl" "entity-h" "game-info-h" "level-h" "settings-h" "gsound-h" "target-util")
|
||||
(goal-src "pc/debug/pc-debug-methods.gc" "pc-debug-common")
|
||||
|
||||
(group-list "all-code"
|
||||
`(,@(reverse *all-gc*))
|
||||
|
||||
@@ -664,12 +664,13 @@
|
||||
(if (not *atx*) (atx-start))
|
||||
|
||||
(do-atx-list (item (-> *ATX-settings* list-ctrl))
|
||||
(if (or (and (>= (-> item group) (-> *level* level 0 heap base)) (< (-> item group) (-> *level* level 0 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 1 heap base)) (< (-> item group) (-> *level* level 1 heap top))))
|
||||
(dotimes (i (-> *level* length))
|
||||
(when (and (>= (-> item group) (-> *level* level i heap base)) (< (-> item group) (-> *level* level i heap top)))
|
||||
(atx-list-remove (-> *ATX-settings* list-ctrl) item)
|
||||
)
|
||||
(set! i (-> *level* length))
|
||||
))
|
||||
)
|
||||
(dotimes (i 2)
|
||||
(dotimes (i (-> *level* length))
|
||||
(doarray (ag (-> *level* level i art-group data-array))
|
||||
(atx-add-new-art-group (the art-group ag))
|
||||
)
|
||||
@@ -679,7 +680,7 @@
|
||||
(defun atx-add-common-group ()
|
||||
|
||||
(if (not *atx*) (atx-start))
|
||||
(doarray (ag (-> *level* level 2 art-group data-array))
|
||||
(doarray (ag (-> *level* level (-> *level* length) art-group data-array))
|
||||
(atx-add-new-art-group (the art-group ag))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -9,6 +9,17 @@
|
||||
|
||||
(define *debug-temp-string* (new 'debug 'string 4096 (the string #f)))
|
||||
|
||||
(defmethod set-entity! entity-debug-inspect ((obj entity-debug-inspect) (e entity))
|
||||
"set the entity to inspect"
|
||||
|
||||
(set! (-> obj entity) e)
|
||||
(unless e
|
||||
(set! *display-actor-anim* (the string #f)))
|
||||
(set! (-> obj scroll-y) 0)
|
||||
|
||||
e
|
||||
)
|
||||
|
||||
;; custom entity functions for pc port
|
||||
(defun-debug entity-inspect-draw ((inspect-info entity-debug-inspect))
|
||||
"draw text about an entity on screen"
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
Various debugging displays made for the pc port. This file is shared for all games.
|
||||
|#
|
||||
|
||||
;; debug-only file!
|
||||
(declare-file (debug))
|
||||
|
||||
;; ----------------------
|
||||
;; memory usage bars!
|
||||
;; ----------------------
|
||||
|
||||
(defconstant MEM_BAR_WIDTH 152) ;; total width of the bar
|
||||
(defconstant MEM_BAR_HEIGHT 8) ;; total height of the bar
|
||||
(defconstant MEM_BAR_NUM 7) ;; amount of bars (override later if wanted)
|
||||
(defconstant MEM_BAR_BG_COL (static-rgba 64 64 64 64)) ;; color for the empty part of the bar
|
||||
(defconstant MEM_BAR_X (- 480 MEM_BAR_WIDTH)) ;; x coord for left side of the bar list
|
||||
(defconstant MEM_BAR_Y (- 224 4 (* MEM_BAR_HEIGHT MEM_BAR_NUM))) ;; y coord for top side of the bar list
|
||||
|
||||
(defmacro draw-memory-bar-generic (buf &key remain &key total &key name &key idx &key color)
|
||||
"draw a memory usage bar"
|
||||
`(let* (
|
||||
(total (the float ,total))
|
||||
(remain (the float ,remain))
|
||||
(used-p (/ (- total remain) total))
|
||||
(used-x (the int (* used-p MEM_BAR_WIDTH)))
|
||||
(used-y (+ MEM_BAR_Y (* ,idx MEM_BAR_HEIGHT)))
|
||||
)
|
||||
(draw-sprite2d-xy ,buf MEM_BAR_X used-y used-x MEM_BAR_HEIGHT ,color)
|
||||
(draw-sprite2d-xy ,buf (+ MEM_BAR_X used-x) used-y (- MEM_BAR_WIDTH used-x) MEM_BAR_HEIGHT MEM_BAR_BG_COL)
|
||||
(draw-string-xy ,name ,buf MEM_BAR_X used-y (font-color red) (font-flags shadow kerning right))
|
||||
(draw-string-xy (string-format "~,,2f%" (* used-p 100)) ,buf (+ MEM_BAR_X used-x) used-y (font-color red) (font-flags shadow kerning middle))
|
||||
(draw-string-xy (string-format "~,,1fM" (/ total (* 1024 1024))) ,buf (+ MEM_BAR_X MEM_BAR_WIDTH) used-y (font-color red) (font-flags shadow kerning left))
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-kheap (buf heap &key (name #f) &key idx &key color)
|
||||
"draw a memory usage bar for a kheap"
|
||||
`(let ((heap ,heap))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (&- (-> heap top) (-> heap current))
|
||||
:total (&- (-> heap top) (-> heap base))
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-dead-pool-heap (buf heap &key (name #f) &key idx &key color)
|
||||
"draw a memory usage bar for a dead-pool-heap (actor heap)"
|
||||
`(let* ((heap ,heap) (pool-total (memory-total heap)))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (- pool-total (memory-used heap))
|
||||
:total pool-total
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,59 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
Various debugging displays made for the pc port. This file includes overrides or game-specific implementations.
|
||||
|#
|
||||
|
||||
;; debug-only file!
|
||||
(declare-file (debug))
|
||||
|
||||
|
||||
(defmethod print-debug-misc pc-settings-jak1 ((obj pc-settings-jak1))
|
||||
"prints various miscellaneous debug text to the game console, according to what's enabled in this object."
|
||||
|
||||
(when (-> obj display-bug-report)
|
||||
(format *stdcon* "~0kbug-report ~A~%" *user*)
|
||||
(format *stdcon* "nick ~A continue ~S~%" (-> *load-state* vis-nick) (-> *game-info* current-continue name))
|
||||
(dotimes (i (-> *level* length))
|
||||
(format *stdcon* "level ~D ~12A ~A~%" i (-> *level* level i name) (-> *level* level i display?))
|
||||
)
|
||||
(format *stdcon* "music ~A (f: ~D/~S)~%" (-> *setting-control* current music) (-> *setting-control* current sound-flava) (music-flava->string (the-as music-flava (-> *setting-control* default sound-flava))))
|
||||
(format *stdcon* "sound ~A ~A~%" *sound-bank-1* *sound-bank-2*)
|
||||
(let ((pos (target-pos 0)))
|
||||
(format *stdcon* "target ~m ~m ~m~%" (-> pos x) (-> pos y) (-> pos z))
|
||||
)
|
||||
(let ((pos (camera-pos)))
|
||||
(format *stdcon* "cam-trans ~m ~m ~m~%" (-> pos x) (-> pos y) (-> pos z))
|
||||
)
|
||||
(let ((rot (new 'stack 'quaternion)))
|
||||
(matrix->quaternion rot (-> *math-camera* camera-rot))
|
||||
(format *stdcon* "cam-rot ~f ~f ~f ~f~%" (-> rot x) (-> rot y) (-> rot z) (-> rot w))
|
||||
)
|
||||
(format *stdcon* "~1k")
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
(defconstant MEM_BAR_NUM 7) ;; amount of memory usage bars (override later if wanted)
|
||||
(defmethod draw-memory pc-settings ((obj pc-settings) (buf dma-buffer))
|
||||
"draw the memory heap status in the bottom right corner"
|
||||
|
||||
(when (-> obj display-heap-status)
|
||||
(draw-memory-bar-kheap buf global :idx 0 :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-kheap buf debug :idx 1 :color (static-rgba 255 32 32 64))
|
||||
(draw-memory-bar-kheap buf (-> *level* level 0 heap) :name "l0" :idx 2 :color (static-rgba 32 255 255 64))
|
||||
(draw-memory-bar-kheap buf (-> *level* level 1 heap) :name "l1" :idx 3 :color (static-rgba 255 32 255 64))
|
||||
(draw-memory-bar-dead-pool-heap buf *nk-dead-pool* :name "actor" :idx 4 :color (static-rgba 32 255 32 64))
|
||||
(draw-memory-bar-generic buf
|
||||
:remain (* 16 (dma-buffer-free (-> (current-frame) global-buf)))
|
||||
:total (length (-> (current-frame) global-buf))
|
||||
:name "dma-global" :idx 5 :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-generic buf
|
||||
:remain (* 16 (dma-buffer-free (-> (current-frame) debug-buf)))
|
||||
:total (length (-> (current-frame) debug-buf))
|
||||
:name "dma-debug" :idx 6 :color (static-rgba 255 32 32 64))
|
||||
#t)
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,918 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
|
||||
This file contains new code that we need for the PC port of the game specifically.
|
||||
It should be included as part of the game engine package (engine.cgo).
|
||||
|
||||
This file contains various types and functions to store PC-specific information
|
||||
and also to communicate between the game (GOAL) and the operating system.
|
||||
This way we can poll, change and display information about the system the game
|
||||
is running on, such as:
|
||||
- display devices and their settings, such as fullscreen, DPI, refresh rate, etc.
|
||||
- audio devices and their settings, such as audio latency, channel number, etc.
|
||||
- graphics devices and their settings, such as resolution, FPS, anisotropy, shaders, etc.
|
||||
- input devices and their settings, such as controllers, keyboards, mice, etc.
|
||||
- information about the game window (position, size)
|
||||
- PC-specific goodies, enhancements, fixes and settings.
|
||||
- whatever else.
|
||||
|
||||
If you do not want to include these PC things, you should exclude it from the build system.
|
||||
|
||||
|#
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; global variables
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; collision renderer things. debug only.
|
||||
(define *collision-renderer* #f)
|
||||
(define *collision-wireframe* #f)
|
||||
(define *collision-mode* (pc-collision-mode mode))
|
||||
|
||||
;; todo
|
||||
(defenum pc-pat-skip-hack
|
||||
:bitfield #t
|
||||
(noentity 0)
|
||||
(nocamera 1)
|
||||
(noedge 2)
|
||||
(nolineofsight 12)
|
||||
(unknowncamera 13)
|
||||
(unknown 15)
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; updates
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(defmethod set-display-mode! pc-settings ((obj pc-settings) (mode symbol))
|
||||
"sets the game's display mode"
|
||||
;; change the display mode.
|
||||
(set! (-> obj display-mode) mode)
|
||||
;; if windowed mode, set the size properly
|
||||
(when (= (-> obj display-mode) 'windowed)
|
||||
(pc-set-window-size (max PC_MIN_WIDTH (-> obj win-width)) (max PC_MIN_HEIGHT (-> obj win-height))))
|
||||
0)
|
||||
|
||||
(defmethod set-size! pc-settings ((obj pc-settings) (width int) (height int))
|
||||
"sets the size of the display window"
|
||||
(format 0 "Setting ~A size to ~D x ~D~%" (-> obj display-mode) width height)
|
||||
(cond
|
||||
((= 'windowed (-> obj display-mode))
|
||||
(set! (-> obj win-width) width)
|
||||
(set! (-> obj win-height) height)
|
||||
(pc-set-window-size (max PC_MIN_WIDTH (-> obj win-width)) (max PC_MIN_HEIGHT (-> obj win-height)))
|
||||
)
|
||||
(else
|
||||
(set! (-> obj width) width)
|
||||
(set! (-> obj height) height)
|
||||
)
|
||||
)
|
||||
(none))
|
||||
|
||||
(defmethod set-aspect! pc-settings ((obj pc-settings) (aw int) (ah int))
|
||||
"set the aspect ratio used for rendering. this forces native widescreen and takes width and height ratios."
|
||||
(let ((aspect (/ (the float aw) (the float ah))))
|
||||
(set-aspect-ratio! obj aspect)
|
||||
(set! (-> obj aspect-custom-x) aw)
|
||||
(set! (-> obj aspect-custom-y) ah)
|
||||
(set! (-> obj aspect-ratio-auto?) #f)
|
||||
(set! (-> obj use-vis?) #f)
|
||||
)
|
||||
(none))
|
||||
|
||||
(defmethod set-aspect-ratio! pc-settings ((obj pc-settings) (aspect float))
|
||||
"set the aspect ratio used for rendering."
|
||||
(set! (-> obj aspect-ratio) aspect)
|
||||
(set! (-> obj aspect-ratio-scale) (/ aspect ASPECT_4X3))
|
||||
(set! (-> obj aspect-ratio-reciprocal) (/ ASPECT_4X3 aspect))
|
||||
(none))
|
||||
|
||||
(defmethod set-window-lock! pc-settings ((obj pc-settings) (lock symbol))
|
||||
"set the aspect ratio used for rendering."
|
||||
(pc-set-window-lock lock)
|
||||
(set! (-> obj window-lock?) lock))
|
||||
|
||||
(defmethod set-frame-rate! pc-settings ((obj pc-settings) (rate int))
|
||||
"set the target framerate."
|
||||
(pc-set-frame-rate rate)
|
||||
(if (and (!= 'fullscreen (-> obj display-mode))
|
||||
(!= (pc-get-screen-rate -1) rate))
|
||||
(set! (-> obj vsync?) #f))
|
||||
(case rate
|
||||
((50)
|
||||
(set! (-> obj target-fps) rate)
|
||||
(set-game-setting! obj 'video-mode 'pal)
|
||||
)
|
||||
((60)
|
||||
(set! (-> obj target-fps) rate)
|
||||
(set-game-setting! obj 'video-mode 'ntsc)
|
||||
)
|
||||
(else
|
||||
(set! (-> obj target-fps) rate)
|
||||
(set-game-setting! obj 'video-mode 'custom)
|
||||
)
|
||||
)
|
||||
|
||||
rate)
|
||||
|
||||
(defmethod set-monitor! pc-settings ((obj pc-settings) (monitor int))
|
||||
"set the monitor to use when in fullscreen/borderless"
|
||||
(set! (-> obj monitor) monitor)
|
||||
(none))
|
||||
|
||||
(defmethod commit-to-file pc-settings ((obj pc-settings))
|
||||
"commits the current settings to the file"
|
||||
;; auto load settings if available
|
||||
|
||||
(format (clear *pc-temp-string-1*) "~S/pc-settings.gc" *pc-settings-folder*)
|
||||
(pc-mkdir-file-path *pc-temp-string-1*)
|
||||
(write-to-file obj *pc-temp-string-1*)
|
||||
(none))
|
||||
|
||||
(defmethod update-from-os pc-settings ((obj pc-settings))
|
||||
"Update settings from the C kernel to GOAL."
|
||||
|
||||
(set! (-> obj os) (pc-get-os))
|
||||
(pc-get-window-size (&-> obj real-width) (&-> obj real-height))
|
||||
(pc-get-window-scale (&-> obj dpi-x) (&-> obj dpi-y))
|
||||
|
||||
(when (-> obj use-vis?)
|
||||
(if (= (get-game-setting! obj 'aspect-ratio) 'aspect4x3)
|
||||
(set-aspect-ratio! obj ASPECT_4X3)
|
||||
(set-aspect-ratio! obj ASPECT_16X9)
|
||||
)
|
||||
)
|
||||
|
||||
(unless (or (zero? (-> obj real-width)) (zero? (-> obj real-height)))
|
||||
(let ((win-aspect (/ (the float (-> obj real-width)) (the float (-> obj real-height)))))
|
||||
(cond
|
||||
((and (not (-> obj use-vis?)) (-> obj aspect-ratio-auto?))
|
||||
;; the window determines the resolution
|
||||
(set-aspect-ratio! obj win-aspect)
|
||||
(set! (-> obj lbox-width) (-> obj real-width))
|
||||
(set! (-> obj lbox-height) (-> obj real-height))
|
||||
)
|
||||
((> win-aspect (-> obj aspect-ratio))
|
||||
;; too wide
|
||||
(set! (-> obj lbox-width) (the int (* (the float (-> obj real-height)) (-> obj aspect-ratio))))
|
||||
(set! (-> obj lbox-height) (-> obj real-height))
|
||||
)
|
||||
((< win-aspect (-> obj aspect-ratio))
|
||||
;; too tall
|
||||
(set! (-> obj lbox-width) (-> obj real-width))
|
||||
(set! (-> obj lbox-height) (the int (/ (the float (-> obj real-width)) (-> obj aspect-ratio))))
|
||||
)
|
||||
(else
|
||||
;; just right
|
||||
(set! (-> obj lbox-width) (-> obj real-width))
|
||||
(set! (-> obj lbox-height) (-> obj real-height))
|
||||
)
|
||||
)
|
||||
))
|
||||
|
||||
|
||||
(none))
|
||||
|
||||
(defmethod update-to-os pc-settings ((obj pc-settings))
|
||||
"Update settings from GOAL to the C kernel."
|
||||
|
||||
(cond
|
||||
((-> obj letterbox?)
|
||||
(pc-set-letterbox (-> obj lbox-width) (-> obj lbox-height))
|
||||
)
|
||||
(else
|
||||
(pc-set-letterbox (-> obj real-width) (-> obj real-height))
|
||||
)
|
||||
)
|
||||
|
||||
;; if monitor selection is out of bounds (e.g. if a monitor got disconnected),
|
||||
;; then default to the primary monitor
|
||||
(when (>= (-> obj monitor) (pc-get-monitor-count))
|
||||
(format 0 "Monitor selection out of bounds, defaulting to primary monitor.~%")
|
||||
(set! (-> obj monitor) 0)
|
||||
)
|
||||
|
||||
;; set fullscreen to what we want
|
||||
(pc-set-fullscreen (-> obj display-mode) (-> obj monitor))
|
||||
|
||||
;; set window size and fps automatically if the window lock is enabled.
|
||||
(when (-> obj window-lock?)
|
||||
(pc-set-vsync (-> obj vsync?))
|
||||
|
||||
(when (!= 'fullscreen (-> obj display-mode))
|
||||
(if (< (pc-get-screen-rate -1) (-> obj target-fps))
|
||||
(pc-set-vsync #f))
|
||||
(pc-set-frame-rate (-> obj target-fps)))
|
||||
)
|
||||
;; do game resolution
|
||||
(if (= (-> obj display-mode) 'windowed)
|
||||
(pc-set-game-resolution (-> obj real-width) (-> obj real-height))
|
||||
(pc-set-game-resolution (-> obj width) (-> obj height)))
|
||||
|
||||
;; set msaa sample rate. if invalid, just reset to 4.
|
||||
(let ((valid? #f))
|
||||
(dotimes (i 31)
|
||||
(if (= (-> obj gfx-msaa) (ash 1 i))
|
||||
(true! valid?))
|
||||
)
|
||||
|
||||
(if (not valid?) (set! (-> obj gfx-msaa) 4))
|
||||
(pc-set-msaa (-> obj gfx-msaa))
|
||||
)
|
||||
|
||||
(pc-discord-rpc-set (if (-> obj discord-rpc?) 1 0))
|
||||
|
||||
(when #t ;; (not (-> obj ps2-lod-dist?))
|
||||
(pc-renderer-tree-set-lod (pc-renderer-tree-type tfrag3) (-> obj lod-force-tfrag))
|
||||
(pc-renderer-tree-set-lod (pc-renderer-tree-type tie3) (-> obj lod-force-tie))
|
||||
)
|
||||
|
||||
(when *debug-segment*
|
||||
(pc-set-collision *collision-renderer*)
|
||||
(pc-set-collision-wireframe *collision-wireframe*)
|
||||
(pc-set-collision-mode *collision-mode*)
|
||||
)
|
||||
|
||||
(pc-sound-set-flava-hack (-> obj flava-hack))
|
||||
(let ((fade-hack 0))
|
||||
(unless (-> obj music-fadein?) (logior! fade-hack 1))
|
||||
(unless (-> obj music-fadeout?) (logior! fade-hack 2))
|
||||
(pc-sound-set-fade-hack fade-hack)
|
||||
)
|
||||
|
||||
(none))
|
||||
|
||||
;; where we store the input progress for the cheat codes. make sure there's enough space for all cheats.
|
||||
(define *pc-cheat-temp* (new 'global 'inline-array 'uint8 PC_CHEAT_MAX))
|
||||
|
||||
(defmacro pc-cheat-toggle-and-tune (cheats-var cheat)
|
||||
"quickly toggle a cheat code and play an appropriate sound"
|
||||
`(begin
|
||||
(cpad-clear! 0 r1)
|
||||
(logxor! ,cheats-var (pc-cheats ,cheat))
|
||||
(cheats-sound-play (logtest? ,cheats-var (pc-cheats ,cheat)))
|
||||
)
|
||||
)
|
||||
|
||||
(defun bcd->dec ((bcd uint))
|
||||
"Convert a number encoded in BCD to its decimal equivalent"
|
||||
(+ (* (shr (logand bcd #xf0) 4) 10) (logand bcd #x0f))
|
||||
)
|
||||
|
||||
(defmethod update pc-settings ((obj pc-settings))
|
||||
"Update settings to/from PC kernel. Call this at the start of every frame.
|
||||
This will update things like the aspect-ratio, which will be used for graphics code later."
|
||||
|
||||
(update-from-os obj)
|
||||
(update-to-os obj)
|
||||
|
||||
(set! (-> obj movie?) (movie?))
|
||||
|
||||
(update-discord-rpc obj)
|
||||
|
||||
;; update auto-splitter info
|
||||
(when (-> *pc-settings* speedrunner-mode?)
|
||||
(update-speedrun obj))
|
||||
|
||||
(when (not (-> obj use-vis?))
|
||||
(set! (-> (get-video-params) relative-x-scale) (-> obj aspect-ratio-reciprocal))
|
||||
(set! (-> (get-video-params) relative-x-scale-reciprical) (-> obj aspect-ratio-scale))
|
||||
(set! (-> *font-default-matrix* vector 0 x) (-> (get-video-params) relative-x-scale))
|
||||
)
|
||||
(when (not (-> obj use-vis?))
|
||||
(update-progress-video-hacks obj)
|
||||
)
|
||||
(cond
|
||||
((-> obj force-actors?)
|
||||
;; kinda overkill.
|
||||
(set! (-> *ACTOR-bank* birth-dist) (meters 10000))
|
||||
(set! (-> *ACTOR-bank* pause-dist) (meters 10000))
|
||||
(set! (-> *ACTOR-bank* birth-max) 1000)
|
||||
)
|
||||
((> (-> *ACTOR-bank* birth-dist) (meters 220)) ;; the original caps at 220m, exceeding that means it was using our hacks
|
||||
(set! (-> *ACTOR-bank* birth-dist) (meters 220))
|
||||
(set! (-> *ACTOR-bank* pause-dist) (meters 220))
|
||||
))
|
||||
|
||||
;; cheats.
|
||||
(update-cheats obj)
|
||||
;; music.
|
||||
(update-music-log obj)
|
||||
|
||||
(none))
|
||||
|
||||
(defmethod update-cheats pc-settings ((obj pc-settings))
|
||||
"run cheats."
|
||||
0)
|
||||
|
||||
|
||||
(defmethod add-to-music-log pc-settings ((obj pc-settings) (music symbol) (flava int))
|
||||
"add music and flava information to the music log.
|
||||
if music already exists, adds flava. if flava already exists, nothing happens."
|
||||
|
||||
;; go through our music log
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(cond
|
||||
;; an empty log entry! place the currently playing music there, and fill flava.
|
||||
((not (-> obj secrets music i name))
|
||||
(set! (-> obj secrets music i name) music)
|
||||
(set! (-> obj secrets music i flava-mask) (ash 1 flava))
|
||||
(return 0)
|
||||
)
|
||||
;; an existing log entry for the current music. fill flava.
|
||||
((= music (-> obj secrets music i name))
|
||||
(logior! (-> obj secrets music i flava-mask) (ash 1 flava))
|
||||
(return 0)
|
||||
)
|
||||
;; something else. maybe the wrong entry, in which case nothing to do.
|
||||
)
|
||||
)
|
||||
|
||||
0)
|
||||
|
||||
(defmethod update-music-log pc-settings ((obj pc-settings))
|
||||
"update music log settings."
|
||||
0)
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; functions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(when *debug-segment*
|
||||
|
||||
(defmethod draw pc-settings ((obj pc-settings) (buf dma-buffer))
|
||||
"debug draw some things on-screen"
|
||||
|
||||
(when (-> obj debug?)
|
||||
(clear *pc-temp-string*)
|
||||
(format *pc-temp-string* "game resolution: ~D x ~D~%" (-> obj width) (-> obj height))
|
||||
(format *pc-temp-string* "window size: ~D x ~D (~,,1f x ~,,1f)~%" (-> obj real-width) (-> obj real-height) (-> obj dpi-x) (-> obj dpi-y))
|
||||
(format *pc-temp-string* "target aspect: ~,,3f/~,,3f A: ~A/~A L: ~A~%" (-> obj aspect-ratio) (/ (the float (-> obj real-width)) (the float (-> obj real-height))) (-> obj aspect-ratio-auto?) (-> obj use-vis?) (-> obj letterbox?))
|
||||
(format *pc-temp-string* "display-type: ~A ~A~%" (-> obj display-mode) (-> obj vsync?))
|
||||
|
||||
(draw-string-xy *pc-temp-string* buf 0 (- 224 (* 8 4)) (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
(when (-> obj display-actor-bank)
|
||||
(draw-string-xy (string-format "Actor Bank: ~,,1m/~,,1m (~D)" (-> *ACTOR-bank* pause-dist) (-> *ACTOR-bank* birth-dist) (-> *ACTOR-bank* birth-max)) buf 512 (- 224 8) (font-color default) (font-flags shadow kerning right))
|
||||
)
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
|
||||
(defun find-music-log ((music symbol))
|
||||
"return #t if the given music is logged into the *pc-settings*, #f otherwise."
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(if (= music (-> *pc-settings* secrets music i name))
|
||||
(return #t)))
|
||||
#f)
|
||||
|
||||
(defun find-flava-log ((music symbol) (flava-idx int))
|
||||
"return #t if the given music's flava is logged into the *pc-settings*, #f otherwise."
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(if (= music (-> *pc-settings* secrets music i name))
|
||||
(return (logtest? (-> *pc-settings* secrets music i flava-mask) (ash 1 flava-idx)))))
|
||||
#f)
|
||||
|
||||
(defun-debug print-music-log ((out object))
|
||||
"prints the *pc-settings* music log."
|
||||
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(if (-> *pc-settings* secrets music i name)
|
||||
(format out "music log ~D: ~A (f #x~x)~%" i (-> *pc-settings* secrets music i name) (-> *pc-settings* secrets music i flava-mask)))
|
||||
)
|
||||
|
||||
0)
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; file IO
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
(defmacro file-stream-seek-until (fs func-name)
|
||||
`(let ((done? #f)
|
||||
(tell -1))
|
||||
|
||||
(until done?
|
||||
|
||||
(let ((read (file-stream-read ,fs (-> *pc-temp-string* data) PC_TEMP_STRING_LEN)))
|
||||
(cond
|
||||
((zero? read)
|
||||
(set! (-> *pc-temp-string* data read) 0)
|
||||
(true! done?)
|
||||
)
|
||||
(else
|
||||
(dotimes (i read)
|
||||
(when (,func-name (-> *pc-temp-string* data i))
|
||||
(true! done?)
|
||||
(set! tell (+ i (- (file-stream-tell ,fs) read)))
|
||||
(set! i read)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
(if (!= tell -1)
|
||||
(file-stream-seek ,fs tell SCE_SEEK_SET)
|
||||
tell
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro file-stream-read-until (fs func-name)
|
||||
`(let ((read (file-stream-read ,fs (-> *pc-temp-string* data) PC_TEMP_STRING_LEN)))
|
||||
(dotimes (i read)
|
||||
(when (,func-name (-> *pc-temp-string* data i))
|
||||
(set! (-> *pc-temp-string* data i) 0)
|
||||
(file-stream-seek ,fs (+ i (- (file-stream-tell ,fs) read)) SCE_SEEK_SET)
|
||||
(set! i read)
|
||||
)
|
||||
)
|
||||
*pc-temp-string*
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro is-whitespace-or-bracket? (c)
|
||||
`(or (is-whitespace-char? ,c) (= #x28 ,c) (= #x29 ,c))
|
||||
)
|
||||
|
||||
(defun file-stream-seek-past-whitespace ((file file-stream))
|
||||
(file-stream-seek-until file not-whitespace-char?)
|
||||
)
|
||||
|
||||
(defun file-stream-read-word ((file file-stream))
|
||||
(file-stream-read-until file is-whitespace-or-bracket?)
|
||||
;(format 0 "word ~A~%" *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defmacro file-stream-getc (fs)
|
||||
`(let ((buf 255))
|
||||
(file-stream-read ,fs (& buf) 1)
|
||||
;(format 0 "getc got #x~X~%" buf)
|
||||
buf
|
||||
)
|
||||
)
|
||||
|
||||
(defun file-stream-read-int ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->int *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defun file-stream-read-float ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->float *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defun file-stream-read-symbol ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->symbol *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defmacro pc-settings-read-throw-error (fs msg)
|
||||
"not an actual throw..."
|
||||
`(begin
|
||||
(format 0 "pc settings read error: ~S~%" ,msg)
|
||||
(file-stream-close ,fs)
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro with-settings-scope (bindings &rest body)
|
||||
(let ((fs (first bindings)))
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(when (!= #x28 (file-stream-getc ,fs))
|
||||
(pc-settings-read-throw-error ,fs "invalid char, ( not found")
|
||||
)
|
||||
|
||||
,@body
|
||||
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(when (!= #x29 (file-stream-getc ,fs))
|
||||
(pc-settings-read-throw-error ,fs "invalid char, ) not found")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro file-stream-get-next-char-ret (fs)
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(let ((c (file-stream-getc ,fs)))
|
||||
(file-stream-seek ,fs -1 SCE_SEEK_CUR)
|
||||
c))
|
||||
)
|
||||
|
||||
(defmacro file-stream-get-next-char (fs)
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(file-stream-getc ,fs)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dosettings (bindings &rest body)
|
||||
"iterate over a list of key-value pairs like so: (<key> <value>) (<key> <value>) ...
|
||||
the name of key is stored in *pc-temp-string*"
|
||||
(let ((fs (first bindings)))
|
||||
`(let ((c -1))
|
||||
(while (begin (file-stream-seek-past-whitespace ,fs) (set! c (file-stream-getc ,fs)) (= #x28 c))
|
||||
(file-stream-read-word ,fs)
|
||||
|
||||
,@body
|
||||
|
||||
(set! c (file-stream-get-next-char ,fs))
|
||||
(when (!= #x29 c)
|
||||
(pc-settings-read-throw-error ,fs (string-format "invalid char, ) not found, got #x~X ~A" c *pc-temp-string*))
|
||||
)
|
||||
)
|
||||
(file-stream-seek ,fs -1 SCE_SEEK_CUR)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod read-from-file pc-settings ((obj pc-settings) (filename string))
|
||||
"read settings from a file"
|
||||
|
||||
(if (not filename)
|
||||
(return #f))
|
||||
|
||||
(let ((file (new 'stack 'file-stream filename 'read)))
|
||||
(when (not (file-stream-valid? file))
|
||||
(return #f))
|
||||
|
||||
(let ((version PC_KERNEL_VERSION))
|
||||
(with-settings-scope (file)
|
||||
(case-str (file-stream-read-word file)
|
||||
(("settings")
|
||||
(set! version (the pckernel-version (file-stream-read-int file)))
|
||||
(cond
|
||||
((and (= (-> version major) PC_KERNEL_VER_MAJOR)
|
||||
(= (-> version minor) PC_KERNEL_VER_MINOR))
|
||||
;; minor or no difference
|
||||
)
|
||||
(else
|
||||
;; major difference
|
||||
(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)
|
||||
)
|
||||
)
|
||||
(dosettings (file)
|
||||
(handle-input-settings obj file)
|
||||
)
|
||||
;; upgrade settings if minor changes
|
||||
;; remember to delete this when major changes to the version number are made
|
||||
(when (and (= PC_KERNEL_VER_MAJOR 1)
|
||||
(= PC_KERNEL_VER_MINOR 10)
|
||||
(or (!= PC_KERNEL_VER_BUILD (-> version build))
|
||||
(!= PC_KERNEL_VER_REVISION (-> version revision))))
|
||||
;; 1.10 upgrade: turn envmap on
|
||||
(set! (-> obj force-envmap?) #t)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
(file-stream-close file)
|
||||
)
|
||||
|
||||
(format 0 "pc settings file read: ~A~%" filename)
|
||||
|
||||
;; restore the windowed mode resolution properly
|
||||
(when (= (-> obj display-mode) 'windowed)
|
||||
(pc-set-window-size (max PC_MIN_WIDTH (-> obj win-width)) (max PC_MIN_HEIGHT (-> obj win-height))))
|
||||
|
||||
#t
|
||||
)
|
||||
|
||||
(defmethod handle-input-settings pc-settings ((obj pc-settings) (file file-stream))
|
||||
"handle the text parsing input for the 'settings' group"
|
||||
|
||||
(case-str *pc-temp-string*
|
||||
(("fps") (set-frame-rate! obj (file-stream-read-int file)))
|
||||
(("window-size")
|
||||
(set! (-> obj win-width) (file-stream-read-int file))
|
||||
(set! (-> obj win-height) (file-stream-read-int file))
|
||||
)
|
||||
(("game-size")
|
||||
(set! (-> obj width) (file-stream-read-int file))
|
||||
(set! (-> obj height) (file-stream-read-int file))
|
||||
)
|
||||
(("msaa") (set! (-> obj gfx-msaa) (file-stream-read-int file)))
|
||||
(("aspect-state")
|
||||
;; game aspect
|
||||
(set-game-setting! obj 'aspect-ratio (file-stream-read-symbol file))
|
||||
;; aspect ratio
|
||||
(set! (-> obj aspect-custom-x) (file-stream-read-int file))
|
||||
(set! (-> obj aspect-custom-y) (file-stream-read-int file))
|
||||
;; aspect auto
|
||||
(set! (-> obj aspect-ratio-auto?) (file-stream-read-symbol file))
|
||||
|
||||
(unless (-> obj aspect-ratio-auto?)
|
||||
(set-aspect! obj (-> obj aspect-custom-x) (-> obj aspect-custom-y))
|
||||
)
|
||||
)
|
||||
(("display-mode") (set-display-mode! obj (file-stream-read-symbol file)))
|
||||
(("monitor") (set-monitor! obj (file-stream-read-int file)))
|
||||
(("letterbox") (set! (-> obj letterbox?) (file-stream-read-symbol file)))
|
||||
(("vsync") (set! (-> obj vsync?) (file-stream-read-symbol file)))
|
||||
(("font-scale") (set! (-> obj font-scale) (file-stream-read-float file)))
|
||||
(("audio-latency-ms") (set! (-> obj audio-latency-ms) (file-stream-read-int file)))
|
||||
(("audio-pan-override") (set! (-> obj audio-pan-override) (file-stream-read-float file)))
|
||||
(("audio-volume-override") (set! (-> obj audio-volume-override) (file-stream-read-float file)))
|
||||
(("audio-channel-nb") (set! (-> obj audio-channel-nb) (file-stream-read-int file)))
|
||||
(("gfx-renderer") (set! (-> obj gfx-renderer) (the-as pc-gfx-renderer (file-stream-read-int file))))
|
||||
(("gfx-resolution") (set! (-> obj gfx-resolution) (file-stream-read-float file)))
|
||||
(("gfx-anisotropy") (set! (-> obj gfx-anisotropy) (file-stream-read-float file)))
|
||||
(("shrub-dist-mod") (set! (-> obj shrub-dist-mod) (file-stream-read-float file)))
|
||||
(("lod-dist-mod") (set! (-> obj lod-dist-mod) (file-stream-read-float file)))
|
||||
(("lod-force-tfrag") (set! (-> obj lod-force-tfrag) (file-stream-read-int file)))
|
||||
(("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-game-language! obj (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-speaker") (set! (-> obj subtitle-speaker?) (file-stream-read-symbol file)))
|
||||
(("stick-deadzone") (set! (-> obj stick-deadzone) (file-stream-read-float file)))
|
||||
(("ps2-read-speed?") (set! (-> obj ps2-read-speed?) (file-stream-read-symbol file)))
|
||||
(("ps2-parts?") (set! (-> obj ps2-parts?) (file-stream-read-symbol file)))
|
||||
(("ps2-music?") (set! (-> obj ps2-music?) (file-stream-read-symbol file)))
|
||||
(("ps2-se?") (set! (-> obj ps2-se?) (file-stream-read-symbol file)))
|
||||
(("ps2-hints?") (set! (-> obj ps2-hints?) (file-stream-read-symbol file)))
|
||||
(("ps2-lod-dist?") (set! (-> obj ps2-lod-dist?) (file-stream-read-symbol file)))
|
||||
(("force-envmap?") (set! (-> obj force-envmap?) (file-stream-read-symbol file)))
|
||||
(("force-actors?") (set! (-> obj force-actors?) (file-stream-read-symbol file)))
|
||||
(("music-fade?") (file-stream-read-symbol file)) ;; TODO remove
|
||||
(("use-vis?") (set! (-> obj use-vis?) (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)))
|
||||
(("speedrunner-mode?") (set! (-> obj speedrunner-mode?) (file-stream-read-symbol file)))
|
||||
(("cutscene-skips?") (file-stream-read-symbol file)) ;; TODO remove
|
||||
(("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)))
|
||||
(("third-camera-h-inverted?") (set! (-> obj third-camera-h-inverted?) (file-stream-read-symbol file)))
|
||||
(("third-camera-v-inverted?") (set! (-> obj third-camera-v-inverted?) (file-stream-read-symbol file)))
|
||||
(("music-fadein?") (set! (-> obj music-fadein?) (file-stream-read-symbol file)))
|
||||
(("music-fadeout?") (set! (-> obj music-fadeout?) (file-stream-read-symbol file)))
|
||||
(("scenes-seen")
|
||||
(dotimes (i PC_SPOOL_LOG_LENGTH)
|
||||
(set! (-> obj scenes-seen i) (file-stream-read-int file))
|
||||
)
|
||||
)
|
||||
(("secrets")
|
||||
(dosettings (file)
|
||||
(case-str *pc-temp-string*
|
||||
(("hard-rats?") (set! (-> obj secrets hard-rats?) (file-stream-read-symbol file)))
|
||||
(("hero-mode?") (set! (-> obj secrets hero-mode?) (file-stream-read-symbol file)))
|
||||
(("hud-map?") (set! (-> obj secrets hud-map?) (file-stream-read-symbol file)))
|
||||
(("hud-counters?") (set! (-> obj secrets hud-counters?) (file-stream-read-symbol file)))
|
||||
(("hud-watch?") (set! (-> obj secrets hud-watch?) (file-stream-read-symbol file)))
|
||||
(("watch-12hr?") (set! (-> obj secrets watch-12hr?) (file-stream-read-symbol file)))
|
||||
(("art") (set! (-> obj secrets art) (the-as pc-jak1-concept-art (file-stream-read-int file))))
|
||||
(("hard-fish-hiscore") (set! (-> obj secrets hard-fish-hiscore) (file-stream-read-int file)))
|
||||
(("hard-rats-hiscore") (set! (-> obj secrets hard-rats-hiscore) (file-stream-read-int file)))
|
||||
(("hard-rats-hiwave") (set! (-> obj secrets hard-rats-hiwave) (file-stream-read-int file)))
|
||||
(("cheats")
|
||||
(set! (-> obj cheats-known) (the pc-cheats (file-stream-read-int file)))
|
||||
(set! (-> obj cheats) (logand (-> obj cheats-known) (file-stream-read-int file)))
|
||||
)
|
||||
(("music")
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(when (!= #x29 (file-stream-get-next-char-ret file))
|
||||
(with-settings-scope (file)
|
||||
(set! (-> obj secrets music i name) (file-stream-read-symbol file))
|
||||
(set! (-> obj secrets music i flava-mask) (file-stream-read-int file))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(("panic")
|
||||
(when (file-stream-read-symbol file)
|
||||
(reset obj)
|
||||
(set-display-mode! obj #f)
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
)
|
||||
0)
|
||||
|
||||
(defmethod handle-output-settings pc-settings ((obj pc-settings) (file file-stream))
|
||||
"handle the text writing output for the 'settings' group"
|
||||
|
||||
(format file " (fps ~D)~%" (-> obj target-fps))
|
||||
(format file " (msaa ~D)~%" (-> obj gfx-msaa))
|
||||
(format file " (aspect-state ~A ~D ~D ~A)~%" (get-game-setting! obj 'aspect-ratio)
|
||||
(-> obj aspect-custom-x) (-> obj aspect-custom-y)
|
||||
(-> obj aspect-ratio-auto?))
|
||||
(format file " (display-mode ~A)~%" (-> obj display-mode))
|
||||
(format file " (window-size ~D ~D)~%" (-> obj win-width) (-> obj win-height))
|
||||
(format file " (game-size ~D ~D)~%" (-> obj width) (-> obj height))
|
||||
(format file " (monitor ~D)~%" (-> obj monitor))
|
||||
(format file " (letterbox ~A)~%" (-> obj letterbox?))
|
||||
(format file " (vsync ~A)~%" (-> obj vsync?))
|
||||
(format file " (font-scale ~f)~%" (-> obj font-scale))
|
||||
|
||||
(format file " (audio-latency-ms ~D)~%" (-> obj audio-latency-ms))
|
||||
(format file " (audio-pan-override ~f)~%" (-> obj audio-pan-override))
|
||||
(format file " (audio-volume-override ~f)~%" (-> obj audio-volume-override))
|
||||
(format file " (audio-channel-nb ~D)~%" (-> obj audio-channel-nb))
|
||||
|
||||
(format file " (gfx-renderer ~D)~%" (-> obj gfx-renderer))
|
||||
(format file " (gfx-resolution ~f)~%" (-> obj gfx-resolution))
|
||||
(format file " (gfx-anisotropy ~f)~%" (-> obj gfx-anisotropy))
|
||||
(format file " (shrub-dist-mod ~f)~%" (-> obj shrub-dist-mod))
|
||||
(format file " (lod-dist-mod ~f)~%" (-> obj lod-dist-mod))
|
||||
(format file " (lod-force-tfrag ~D)~%" (-> obj lod-force-tfrag))
|
||||
(format file " (lod-force-tie ~D)~%" (-> obj lod-force-tie))
|
||||
(format file " (lod-force-ocean ~D)~%" (-> obj lod-force-ocean))
|
||||
(format file " (lod-force-actor ~D)~%" (-> obj lod-force-actor))
|
||||
|
||||
(format file " (stick-deadzone ~f)~%" (-> obj stick-deadzone))
|
||||
|
||||
(format file " (ps2-read-speed? ~A)~%" (-> obj ps2-read-speed?))
|
||||
(format file " (ps2-parts? ~A)~%" (-> obj ps2-parts?))
|
||||
(format file " (ps2-music? ~A)~%" (-> obj ps2-music?))
|
||||
(format file " (ps2-se? ~A)~%" (-> obj ps2-se?))
|
||||
(format file " (ps2-hints? ~A)~%" (-> obj ps2-hints?))
|
||||
(format file " (ps2-lod-dist? ~A)~%" (-> obj ps2-lod-dist?))
|
||||
(format file " (force-envmap? ~A)~%" (-> obj force-envmap?))
|
||||
(format file " (use-vis? ~A)~%" (-> obj use-vis?))
|
||||
(format file " (discord-rpc? ~A)~%" (-> obj discord-rpc?))
|
||||
(format file " (speedrunner-mode? ~A)~%" (-> obj speedrunner-mode?))
|
||||
(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 " (third-camera-h-inverted? ~A)~%" (-> obj third-camera-h-inverted?))
|
||||
(format file " (third-camera-v-inverted? ~A)~%" (-> obj third-camera-v-inverted?))
|
||||
(format file " (force-actors? ~A)~%" (-> obj force-actors?))
|
||||
(format file " (music-fadein? ~A)~%" (-> obj music-fadein?))
|
||||
(format file " (music-fadeout? ~A)~%" (-> obj music-fadeout?))
|
||||
(format file " (hinttitles? ~A)~%" (-> obj hinttitles?))
|
||||
(format file " (game-language ~D)~%" (get-game-language! obj))
|
||||
(format file " (text-language ~D)~%" (-> obj text-language))
|
||||
(format file " (subtitle-speaker ~A)~%" (-> obj subtitle-speaker?))
|
||||
|
||||
#|
|
||||
(format file " (scenes-seen")
|
||||
(dotimes (i PC_SPOOL_LOG_LENGTH)
|
||||
(if (zero? (mod i 16))
|
||||
(format file "~% ")
|
||||
)
|
||||
(format file " ~D" (-> obj scenes-seen i))
|
||||
)
|
||||
(format file "~% )~%")
|
||||
|#
|
||||
|
||||
(format file " (secrets~%")
|
||||
#|
|
||||
(format file " (art #x~X)~%" (-> obj secrets art))
|
||||
(format file " (hard-rats? ~A)~%" (-> obj secrets hard-rats?))
|
||||
(format file " (hero-mode? ~A)~%" (-> obj secrets hero-mode?))
|
||||
(format file " (hud-map? ~A)~%" (-> obj secrets hud-map?))
|
||||
(format file " (hud-counters? ~A)~%" (-> obj secrets hud-counters?))
|
||||
(format file " (hard-fish-hiscore ~D)~%" (-> obj secrets hard-fish-hiscore))
|
||||
(format file " (hard-rats-hiscore ~D)~%" (-> obj secrets hard-rats-hiscore))
|
||||
(format file " (hard-rats-hiwave ~D)~%" (-> obj secrets hard-rats-hiwave))
|
||||
|#
|
||||
(format file " (cheats #x~x #x~x)~%" (-> obj cheats-known) (-> obj cheats))
|
||||
|
||||
(format file " (music~%")
|
||||
(dotimes (i PC_MUSIC_LOG_LENGTH)
|
||||
(if (-> obj secrets music i name)
|
||||
(format file " (~A #x~X)~%" (-> obj secrets music i name) (-> obj secrets music i flava-mask))
|
||||
)
|
||||
)
|
||||
|
||||
(format file " )~%")
|
||||
|
||||
(format file " )~%")
|
||||
0)
|
||||
|
||||
(defmethod write-to-file pc-settings ((obj pc-settings) (filename string))
|
||||
"write settings to a file"
|
||||
|
||||
(if (not filename)
|
||||
(return #f))
|
||||
|
||||
(let ((file (new 'stack 'file-stream filename 'write)))
|
||||
(if (not (file-stream-valid? file))
|
||||
(return #f))
|
||||
|
||||
(format file "(settings #x~X~%" PC_KERNEL_VERSION)
|
||||
|
||||
(handle-output-settings obj file)
|
||||
|
||||
(format file " )~%")
|
||||
(file-stream-close file)
|
||||
)
|
||||
|
||||
(format 0 "pc settings file write: ~A~%" filename)
|
||||
|
||||
#t
|
||||
)
|
||||
|
||||
(defmethod load-settings pc-settings ((obj pc-settings))
|
||||
"load"
|
||||
|
||||
(format (clear *pc-temp-string-1*) "~S/pc-settings.gc" *pc-settings-folder*)
|
||||
(if (pc-filepath-exists? *pc-temp-string-1*)
|
||||
(begin
|
||||
(format 0 "[PC] PC Settings found at '~S'...loading!~%" *pc-temp-string-1*)
|
||||
(unless (read-from-file obj *pc-temp-string-1*)
|
||||
(format 0 "[PC] PC Settings found at '~S' but could not be loaded, using defaults!~%" *pc-temp-string-1*)
|
||||
(reset obj)))
|
||||
(format 0 "[PC] PC Settings not found at '~S'...initializing with defaults!~%" *pc-temp-string-1*))
|
||||
0)
|
||||
|
||||
(defmethod new pc-settings ((allocation symbol) (type-to-make type))
|
||||
"make a new pc-settings"
|
||||
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
||||
(reset obj)
|
||||
;; auto load settings if available
|
||||
;; if saved settings are corrupted or not found, use defaults
|
||||
|
||||
(load-settings obj)
|
||||
|
||||
obj))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; entity debugging
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(when *debug-segment*
|
||||
|
||||
(deftype entity-debug-inspect (basic)
|
||||
(
|
||||
(scroll-y int16)
|
||||
(scroll-y-max int16)
|
||||
(entity entity)
|
||||
(show-actor-info symbol)
|
||||
)
|
||||
(:methods
|
||||
(new (symbol type) _type_)
|
||||
(set-entity! (_type_ entity) entity)
|
||||
(update-pad (_type_ int) none)
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod new entity-debug-inspect ((allocation symbol) (type-to-make type))
|
||||
"make a new entity-debug-inspect object"
|
||||
|
||||
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
||||
|
||||
(set! (-> obj scroll-y) 0)
|
||||
(set! (-> obj scroll-y-max) 0)
|
||||
(set! (-> obj entity) (the entity #f))
|
||||
(set! (-> obj show-actor-info) #f)
|
||||
obj
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod update-pad entity-debug-inspect ((obj entity-debug-inspect) (pad-idx int))
|
||||
"respond to pad inputs"
|
||||
|
||||
;; scroll up
|
||||
(if (cpad-pressed? pad-idx l1)
|
||||
(1-! (-> obj scroll-y)))
|
||||
;; scroll down
|
||||
(if (cpad-pressed? pad-idx r1)
|
||||
(1+! (-> obj scroll-y)))
|
||||
;; toggle actor info
|
||||
(if (cpad-pressed? pad-idx l3)
|
||||
(not! (-> obj show-actor-info)))
|
||||
|
||||
(minmax! (-> obj scroll-y) 0 (-> obj scroll-y-max))
|
||||
|
||||
(none))
|
||||
|
||||
|
||||
(define *entity-debug-inspect* (new 'debug 'entity-debug-inspect))
|
||||
|
||||
) ;; when debug_segment
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,8 +38,9 @@
|
||||
|
||||
(defmacro static-pckernel-version (major minor rev build)
|
||||
`(new 'static 'pckernel-version :major ,major :minor ,minor :revision ,rev :build ,build))
|
||||
;; version: 1.10.3.1
|
||||
(defglobalconstant PC_KERNEL_VERSION (static-pckernel-version 1 10 3 1))
|
||||
(defconstant PC_KERNEL_INVALID_VERSION (static-pckernel-version #xffff #xffff #xffff #xffff))
|
||||
;; version: invalid
|
||||
(defconstant PC_KERNEL_VERSION PC_KERNEL_INVALID_VERSION)
|
||||
(defconstant PC_KERNEL_VER_MAJOR (-> PC_KERNEL_VERSION major))
|
||||
(defconstant PC_KERNEL_VER_MINOR (-> PC_KERNEL_VERSION minor))
|
||||
(defconstant PC_KERNEL_VER_REVISION (-> PC_KERNEL_VERSION revision))
|
||||
@@ -64,8 +65,6 @@
|
||||
(defconstant PC_SPOOL_LOG_LENGTH 170)
|
||||
|
||||
|
||||
(defconstant PC_SETTINGS_FILE_NAME "game_config/pc-settings.txt")
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; types and enums
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@@ -296,20 +295,14 @@
|
||||
|
||||
;; misc settings
|
||||
(force-actors? symbol) ;; skips vis check for actor entity
|
||||
(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.
|
||||
(skip-movies? symbol) ;; if on, enable cutscene skipping
|
||||
(subtitles? symbol) ;; if on, cutscene subtitles will show up
|
||||
(hinttitles? symbol) ;; if on, non-cutscene subtitles will show up
|
||||
(text-language pc-subtitle-lang) ;; language for game text
|
||||
(subtitle-language pc-subtitle-lang) ;; language for subtitles
|
||||
(subtitle-speaker? symbol) ;; #f (force off), #t (force on), auto (on for offscreen)
|
||||
(first-camera-h-inverted? symbol) ;; first-person horizontal camera inverted
|
||||
(first-camera-v-inverted? symbol) ;; first-person vertical camera inverted
|
||||
(third-camera-h-inverted? symbol) ;; third-person horizontal camera inverted
|
||||
(third-camera-v-inverted? symbol) ;; third-person vertical camera inverted
|
||||
(money-starburst? symbol) ;; add a starburst to the money
|
||||
(extra-hud? symbol) ;; extra hud elements.
|
||||
(music-fadeout? symbol) ;; music fadeout toggle.
|
||||
(music-fadein? symbol) ;; music fadein toggle.
|
||||
|
||||
@@ -335,6 +328,9 @@
|
||||
(update (_type_) none)
|
||||
(update-from-os (_type_) none)
|
||||
(update-to-os (_type_) none)
|
||||
(update-discord-rpc (_type_) object)
|
||||
(update-speedrun (_type_) object)
|
||||
(update-progress-video-hacks (_type_) object)
|
||||
(reset (_type_) none)
|
||||
(reset-audio (_type_) none)
|
||||
(reset-input (_type_) none)
|
||||
@@ -343,7 +339,9 @@
|
||||
(reset-misc (_type_) none)
|
||||
(reset-original-camera (_type_) none)
|
||||
(reset-extra (_type_) none)
|
||||
(draw (_type_ dma-buffer) none)
|
||||
(print-debug-misc (_type_) object)
|
||||
(draw (_type_ dma-buffer) object)
|
||||
(draw-memory (_type_ dma-buffer) symbol)
|
||||
(set-display-mode! (_type_ symbol) int)
|
||||
(set-size! (_type_ int int) none)
|
||||
(set-aspect! (_type_ int int) none)
|
||||
@@ -351,8 +349,14 @@
|
||||
(set-window-lock! (_type_ symbol) symbol)
|
||||
(set-frame-rate! (_type_ int) int)
|
||||
(set-monitor! (_type_ int) none)
|
||||
(set-game-setting! (_type_ symbol symbol) object)
|
||||
(get-game-setting! (_type_ symbol) symbol)
|
||||
(set-game-language! (_type_ language-enum) language-enum)
|
||||
(get-game-language! (_type_) language-enum)
|
||||
(read-from-file (_type_ string) symbol)
|
||||
(write-to-file (_type_ string) symbol)
|
||||
(handle-input-settings (_type_ file-stream) object)
|
||||
(handle-output-settings (_type_ file-stream) object)
|
||||
(update-cheats (_type_) int)
|
||||
(update-music-log (_type_) int)
|
||||
(add-to-music-log (_type_ symbol int) int)
|
||||
@@ -361,37 +365,10 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; information about a cutscene. placeholder. TODO look at jak 2
|
||||
(deftype pc-scene-info (structure)
|
||||
((name string)
|
||||
(commands pair)
|
||||
(level0 symbol)
|
||||
(level1 symbol)
|
||||
(level0-disp symbol)
|
||||
(level1-disp symbol)
|
||||
)
|
||||
)
|
||||
|
||||
(deftype discord-info (structure)
|
||||
((fuel (pointer float))
|
||||
(money-total (pointer float))
|
||||
(buzzer-total (pointer float))
|
||||
(deaths (pointer int32))
|
||||
(status string)
|
||||
(level string)
|
||||
(cutscene? symbol)
|
||||
(ogreboss? symbol)
|
||||
(plant-boss? symbol)
|
||||
(racer? symbol)
|
||||
(flutflut? symbol)
|
||||
(time-of-day (pointer float))
|
||||
)
|
||||
)
|
||||
|
||||
(defconstant PC_TEMP_STRING_LEN 512)
|
||||
(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)
|
||||
|
||||
(format 0 "pckernel version: ~D.~D~%" PC_KERNEL_VER_MAJOR PC_KERNEL_VER_MINOR)
|
||||
|
||||
(define *pc-temp-string-1* (new 'global 'string 2048 (the string #f)))
|
||||
|
||||
@@ -450,7 +427,7 @@
|
||||
(set! (-> obj letterbox?) #t)
|
||||
|
||||
(pc-get-screen-size -1 (&-> obj width) (&-> obj height))
|
||||
(set-display-mode! obj 'fullscreen)
|
||||
(set-display-mode! obj 'borderless)
|
||||
(set! (-> obj gfx-msaa) 2) ;; 2x msaa
|
||||
|
||||
(none))
|
||||
@@ -497,20 +474,10 @@
|
||||
"Set the default misc settings"
|
||||
|
||||
(set! (-> obj force-actors?) #f)
|
||||
(set! (-> obj music-fade?) #f)
|
||||
(set! (-> obj skip-movies?) #t)
|
||||
(set! (-> obj text-language) (case *jak1-territory*
|
||||
((GAME_TERRITORY_SCEE) (pc-subtitle-lang uk-english))
|
||||
(else (pc-subtitle-lang english))))
|
||||
(set! (-> obj subtitles?) *debug-segment*)
|
||||
(set! (-> obj text-language) (pc-subtitle-lang english))
|
||||
(set! (-> obj hinttitles?) #t)
|
||||
(set! (-> obj subtitle-speaker?) 'auto)
|
||||
(set! (-> obj subtitle-language) (case *jak1-territory*
|
||||
((GAME_TERRITORY_SCEE) (pc-subtitle-lang uk-english))
|
||||
(else (pc-subtitle-lang english))))
|
||||
(reset-original-camera obj)
|
||||
(set! (-> obj money-starburst?) #f)
|
||||
(set! (-> obj extra-hud?) #f)
|
||||
(none))
|
||||
|
||||
(defmethod reset-original-camera pc-settings ((obj pc-settings))
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
This file has the game-specific implementation of the pckernel (see pckernel-h.gc and pckernel.gc).
|
||||
|#
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; constants
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; version: 1.10.3.1
|
||||
(defconstant PC_KERNEL_VERSION (static-pckernel-version 1 10 3 1))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; types and enums
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; The Jak 1 version of the pc-settings object.
|
||||
(deftype pc-settings-jak1 (pc-settings)
|
||||
(
|
||||
(skip-movies? symbol) ;; if on, enable cutscene skipping
|
||||
(subtitles? symbol) ;; if on, cutscene subtitles will show up
|
||||
(subtitle-language pc-subtitle-lang) ;; language for subtitles
|
||||
(money-starburst? symbol) ;; add a starburst to the money
|
||||
(extra-hud? symbol) ;; extra hud elements.
|
||||
)
|
||||
)
|
||||
|
||||
(define *pc-settings* (the pc-settings-jak1 #f))
|
||||
|
||||
|
||||
;; jak 1 discord rpc structure
|
||||
(deftype discord-info (structure)
|
||||
((fuel (pointer float))
|
||||
(money-total (pointer float))
|
||||
(buzzer-total (pointer float))
|
||||
(deaths (pointer int32))
|
||||
(status string)
|
||||
(level string)
|
||||
(cutscene? symbol)
|
||||
(ogreboss? symbol)
|
||||
(plant-boss? symbol)
|
||||
(racer? symbol)
|
||||
(flutflut? symbol)
|
||||
(time-of-day (pointer float))
|
||||
)
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; resets
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defmethod reset-misc pc-settings-jak1 ((obj pc-settings-jak1))
|
||||
"Set the default misc settings"
|
||||
|
||||
((method-of-type pc-settings reset-misc) obj)
|
||||
(set! (-> obj text-language) (case *jak1-territory*
|
||||
((GAME_TERRITORY_SCEE) (pc-subtitle-lang uk-english))
|
||||
(else (pc-subtitle-lang english))))
|
||||
(set! (-> obj skip-movies?) #t)
|
||||
(set! (-> obj subtitles?) *debug-segment*)
|
||||
(set! (-> obj subtitle-language) (case *jak1-territory*
|
||||
((GAME_TERRITORY_SCEE) (pc-subtitle-lang uk-english))
|
||||
(else (pc-subtitle-lang english))))
|
||||
(set! (-> obj money-starburst?) #f)
|
||||
(set! (-> obj extra-hud?) #f)
|
||||
(none))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; other
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defun get-video-params () *video-parms*)
|
||||
|
||||
|
||||
+144
-957
File diff suppressed because it is too large
Load Diff
@@ -29,8 +29,10 @@
|
||||
"dma-buffer.o"
|
||||
"dma-bucket.o"
|
||||
"dma-disasm.o"
|
||||
"pad.o"
|
||||
"pckernel-h.o" ;; added
|
||||
"pckernel-impl.o" ;; added
|
||||
"pc-debug-common.o" ;; added
|
||||
"pad.o"
|
||||
"gs.o"
|
||||
"display-h.o"
|
||||
"geometry.o"
|
||||
@@ -242,6 +244,7 @@
|
||||
"sky-data.o"
|
||||
"sky-tng.o"
|
||||
"load-state.o"
|
||||
"pc-debug-methods.o" ;; added
|
||||
"level-info.o"
|
||||
"level.o"
|
||||
"text.o"
|
||||
@@ -325,6 +328,7 @@
|
||||
"prototype.o"
|
||||
"main-collide.o"
|
||||
"video.o"
|
||||
"pckernel-common.o" ;; added
|
||||
"pckernel.o" ;; added
|
||||
"main.o"
|
||||
"collide-cache.o"
|
||||
|
||||
@@ -29,8 +29,10 @@
|
||||
"dma-buffer.o"
|
||||
"dma-bucket.o"
|
||||
"dma-disasm.o"
|
||||
"pad.o"
|
||||
"pckernel-h.o" ;; added
|
||||
"pckernel-impl.o" ;; added
|
||||
"pc-debug-common.o" ;; added
|
||||
"pad.o"
|
||||
"gs.o"
|
||||
"display-h.o"
|
||||
"geometry.o"
|
||||
@@ -242,6 +244,7 @@
|
||||
"sky-data.o"
|
||||
"sky-tng.o"
|
||||
"load-state.o"
|
||||
"pc-debug-methods.o" ;; added
|
||||
"level-info.o"
|
||||
"level.o"
|
||||
"text.o"
|
||||
@@ -325,6 +328,7 @@
|
||||
"prototype.o"
|
||||
"main-collide.o"
|
||||
"video.o"
|
||||
"pckernel-common.o" ;; added
|
||||
"pckernel.o" ;; added
|
||||
"main.o"
|
||||
"collide-cache.o"
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
36
|
||||
310
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -983,7 +983,7 @@
|
||||
(defun-debug add-debug-text-sphere ((enable symbol) (bucket bucket-id) (position vector) (radius meters) (text string) (color rgba))
|
||||
"Add a debug sphere at the given point, with some text. The color is for the sphere - the text is color 0."
|
||||
(add-debug-sphere enable bucket position radius color)
|
||||
(add-debug-text-3d enable bucket text position (font-color default-#cddbcd) (the-as vector2h #f))
|
||||
(add-debug-text-3d enable bucket text position (font-color default) (the-as vector2h #f))
|
||||
#f
|
||||
)
|
||||
|
||||
@@ -1618,7 +1618,7 @@
|
||||
(+ y -4)
|
||||
(cond
|
||||
((= v1-7 1)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
)
|
||||
((= v1-7 2)
|
||||
(font-color yellow-#f3f300)
|
||||
@@ -1627,7 +1627,7 @@
|
||||
(font-color green-#3df23d)
|
||||
)
|
||||
(else
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
)
|
||||
)
|
||||
(font-flags shadow)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -289,7 +289,7 @@
|
||||
(let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
||||
(set! (-> v0-0 name) arg0)
|
||||
(set! (-> v0-0 parent) #f)
|
||||
(set! (-> v0-0 refresh-delay) 23)
|
||||
(set! (-> v0-0 refresh-delay) (#if PC_PORT 1 23))
|
||||
(set! (-> v0-0 refresh-ctr) (-> v0-0 refresh-delay))
|
||||
(set! (-> v0-0 id) (the-as int arg1))
|
||||
(set! (-> v0-0 activate-func) arg2)
|
||||
@@ -484,7 +484,7 @@
|
||||
(let ((v1-2 (/ arg2 8)))
|
||||
(set! (-> gp-0 name) arg0)
|
||||
(set! (-> gp-0 parent) #f)
|
||||
(set! (-> gp-0 refresh-delay) 31)
|
||||
(set! (-> gp-0 refresh-delay) (#if PC_PORT 1 31))
|
||||
(set! (-> gp-0 refresh-ctr) (-> gp-0 refresh-delay))
|
||||
(set! (-> gp-0 id) arg1)
|
||||
(set! v1-2 (cond
|
||||
|
||||
@@ -1106,7 +1106,7 @@
|
||||
(res-lump-struct sv-16 'name string)
|
||||
(-> (the-as process-drawable arg0) root trans)
|
||||
(if (logtest? (-> sv-16 extra perm status) (entity-perm-status bit-0 bit-1))
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-color #dadada)
|
||||
)
|
||||
(new 'static 'vector2h :data (new 'static 'array int16 2 0 8))
|
||||
|
||||
@@ -1655,7 +1655,7 @@
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -1679,7 +1679,7 @@
|
||||
20
|
||||
80
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -23,23 +23,39 @@
|
||||
|
||||
(defun letterbox ()
|
||||
"Draw letterbox bars."
|
||||
(let* ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(gp-0 (-> s5-0 base))
|
||||
)
|
||||
(draw-sprite2d-xy-absolute s5-0 0 0 512 46 (new 'static 'rgba :a #x80))
|
||||
(draw-sprite2d-xy-absolute s5-0 0 370 512 47 (new 'static 'rgba :a #x80))
|
||||
(let ((a3-2 (-> s5-0 base)))
|
||||
(let ((v1-7 (the-as dma-packet (-> s5-0 base))))
|
||||
(set! (-> v1-7 dma) (new 'static 'dma-tag :id (dma-tag-id next)))
|
||||
(set! (-> v1-7 vif0) (new 'static 'vif-tag))
|
||||
(set! (-> v1-7 vif1) (new 'static 'vif-tag))
|
||||
(set! (-> s5-0 base) (the-as pointer (&+ v1-7 16)))
|
||||
(with-dma-buffer-add-bucket ((dma-buf (-> (current-frame) global-buf))
|
||||
(bucket-id screen-filter))
|
||||
(#cond
|
||||
((not PC_PORT)
|
||||
(draw-sprite2d-xy-absolute dma-buf 0 0 512 46 (new 'static 'rgba :a #x80))
|
||||
(draw-sprite2d-xy-absolute dma-buf 0 370 512 47 (new 'static 'rgba :a #x80))
|
||||
)
|
||||
(dma-bucket-insert-tag
|
||||
(-> *display* frames (-> *display* on-screen) bucket-group)
|
||||
(bucket-id screen-filter)
|
||||
gp-0
|
||||
(the-as (pointer dma-tag) a3-2)
|
||||
(#t
|
||||
(if (-> *pc-settings* use-vis?)
|
||||
;; original game mode. dont do anything.
|
||||
(begin
|
||||
(draw-sprite2d-xy-absolute dma-buf 0 0 512 46 (new 'static 'rgba :a #x80))
|
||||
(draw-sprite2d-xy-absolute dma-buf 0 370 512 47 (new 'static 'rgba :a #x80)))
|
||||
;; native mode. force 16x9 letterboxing always.
|
||||
(begin
|
||||
(cond
|
||||
((< (-> *pc-settings* aspect-ratio) ASPECT_16X9)
|
||||
;; too tall. needs vertical letterboxing.
|
||||
(let ((lbx-h (the int (* 112.0 (- 1.0 (/ (-> *pc-settings* aspect-ratio) ASPECT_16X9))))))
|
||||
(draw-sprite2d-xy dma-buf 0 0 512 lbx-h (new 'static 'rgba :a #x80))
|
||||
(draw-sprite2d-xy dma-buf 0 (- 448 lbx-h) 512 lbx-h (new 'static 'rgba :a #x80))
|
||||
)
|
||||
)
|
||||
((> (-> *pc-settings* aspect-ratio) ASPECT_16X9)
|
||||
;; too wide. needs horizontal letterboxing.
|
||||
(let ((lbx-w (the int (* 256.0 (- 1.0 (/ ASPECT_16X9 (-> *pc-settings* aspect-ratio)))))))
|
||||
(draw-sprite2d-xy dma-buf 0 0 lbx-w 448 (new 'static 'rgba :a #x80))
|
||||
(draw-sprite2d-xy dma-buf (- 512 lbx-w) 0 lbx-w 448 (new 'static 'rgba :a #x80))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -1276,48 +1292,6 @@
|
||||
;; - display-frame-start
|
||||
;; )
|
||||
|
||||
(defconstant MEM_BAR_WIDTH 152)
|
||||
(defconstant MEM_BAR_HEIGHT 15)
|
||||
(defconstant MEM_BAR_NUM 11)
|
||||
(defconstant MEM_BAR_BG_COL (static-rgba 64 64 64 64))
|
||||
(defconstant MEM_BAR_X (- 475 MEM_BAR_WIDTH))
|
||||
(defconstant MEM_BAR_Y (- 424 4 (* MEM_BAR_HEIGHT MEM_BAR_NUM)))
|
||||
(defmacro draw-memory-bar-generic (buf &key remain &key total &key name &key idx &key color)
|
||||
`(let* (
|
||||
(total (the float ,total))
|
||||
(remain (the float ,remain))
|
||||
(used-p (/ (- total remain) total))
|
||||
(used-x (the int (* used-p MEM_BAR_WIDTH)))
|
||||
(used-y (+ MEM_BAR_Y (* ,idx MEM_BAR_HEIGHT)))
|
||||
)
|
||||
(draw-sprite2d-xy ,buf MEM_BAR_X used-y used-x MEM_BAR_HEIGHT ,color)
|
||||
(draw-sprite2d-xy ,buf (+ MEM_BAR_X used-x) used-y (- MEM_BAR_WIDTH used-x) MEM_BAR_HEIGHT MEM_BAR_BG_COL)
|
||||
(draw-string-xy ,name ,buf MEM_BAR_X used-y (font-color precursor-#ec3b00) (font-flags shadow kerning right))
|
||||
(draw-string-xy (string-format "~,,2f%" (* used-p 100)) ,buf (+ MEM_BAR_X used-x) used-y (font-color precursor-#ec3b00) (font-flags shadow kerning middle))
|
||||
(draw-string-xy (string-format "~,,1fM" (/ total (* 1024 1024))) ,buf (+ MEM_BAR_X MEM_BAR_WIDTH) used-y (font-color precursor-#ec3b00) (font-flags shadow kerning left))
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-kheap (buf heap &key (name #f) &key idx &key color)
|
||||
`(let ((heap ,heap))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (&- (-> heap top) (-> heap current))
|
||||
:total (&- (-> heap top) (-> heap base))
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
(defmacro draw-memory-bar-dead-pool-heap (buf heap &key (name #f) &key idx &key color)
|
||||
`(let* ((heap ,heap) (pool-total (memory-total heap)))
|
||||
(draw-memory-bar-generic ,buf
|
||||
:remain (- pool-total (memory-used heap))
|
||||
:total pool-total
|
||||
:name ,(if name name (symbol->string heap))
|
||||
:idx ,idx
|
||||
:color ,color)
|
||||
)
|
||||
)
|
||||
|
||||
(defun end-display ((arg0 display))
|
||||
"Update debug drawing:
|
||||
- debug draws (triangles, spheres, etc)
|
||||
@@ -1368,44 +1342,14 @@
|
||||
(when *display-deci-count*
|
||||
(let ((s2-0 draw-string-xy))
|
||||
(format (clear *temp-string*) "~D" *deci-count*)
|
||||
(s2-0 *temp-string* s3-0 448 210 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s2-0 *temp-string* s3-0 448 210 (font-color default) (font-flags shadow))
|
||||
)
|
||||
)
|
||||
|
||||
(#when PC_PORT
|
||||
(when (-> *pc-settings* display-heap-status)
|
||||
(let ((idx 0))
|
||||
(draw-memory-bar-kheap s3-0 global :idx idx :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-kheap s3-0 debug :idx (+! idx 1) :color (static-rgba 255 32 32 64))
|
||||
(if (!= (-> *level* level 0 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 0 heap) :name "l0" :idx (+! idx 1) :color (static-rgba 32 255 255 64))
|
||||
)
|
||||
(if (!= (-> *level* level 1 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 1 heap) :name "l1" :idx (+! idx 1) :color (static-rgba 255 32 255 64))
|
||||
)
|
||||
(if (!= (-> *level* level 2 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 2 heap) :name "l2" :idx (+! idx 1) :color (static-rgba 255 255 32 64))
|
||||
)
|
||||
(if (!= (-> *level* level 3 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 3 heap) :name "l3" :idx (+! idx 1) :color (static-rgba 32 255 255 64))
|
||||
)
|
||||
(if (!= (-> *level* level 4 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 4 heap) :name "l4" :idx (+! idx 1) :color (static-rgba 255 32 255 64))
|
||||
)
|
||||
(if (!= (-> *level* level 5 status) 'inactive)
|
||||
(draw-memory-bar-kheap s3-0 (-> *level* level 5 heap) :name "l5" :idx (+! idx 1) :color (static-rgba 255 255 32 64))
|
||||
)
|
||||
(draw-memory-bar-dead-pool-heap s3-0 *nk-dead-pool* :name "actor" :idx (+! idx 1) :color (static-rgba 32 255 32 64))
|
||||
(draw-memory-bar-generic s3-0
|
||||
:remain (* 16 (dma-buffer-free (-> *display* frames (-> *display* on-screen) global-buf)))
|
||||
:total (length (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
:name "dma-global" :idx (+! idx 1) :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-generic s3-0
|
||||
:remain (* 16 (dma-buffer-free (-> *display* frames (-> *display* on-screen) debug-buf)))
|
||||
:total (length (-> *display* frames (-> *display* on-screen) debug-buf))
|
||||
:name "dma-debug" :idx (+! idx 1) :color (static-rgba 255 32 32 64))
|
||||
)
|
||||
)
|
||||
(draw *pc-settings* s3-0)
|
||||
(draw-memory *pc-settings* s3-0)
|
||||
(print-debug-misc *pc-settings*)
|
||||
)
|
||||
(display-file-info)
|
||||
)
|
||||
@@ -1430,7 +1374,7 @@
|
||||
352
|
||||
320
|
||||
)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-flags shadow kerning middle large)
|
||||
)
|
||||
)
|
||||
@@ -1450,7 +1394,7 @@
|
||||
buf
|
||||
(the int (-> *font-context* origin x))
|
||||
s2-2
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -1461,7 +1405,7 @@
|
||||
buf
|
||||
(the int (-> *font-context* origin x))
|
||||
a3-6
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -1589,6 +1533,16 @@
|
||||
)
|
||||
(letterbox)
|
||||
)
|
||||
(if (#if (not PC_PORT)
|
||||
(and (= (-> *setting-control* user-current aspect-ratio) 'aspect4x3)
|
||||
(or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))
|
||||
)
|
||||
(or (and (= (-> *setting-control* user-current aspect-ratio) 'aspect4x3)
|
||||
(or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))
|
||||
)
|
||||
(not (-> *pc-settings* use-vis?))))
|
||||
(letterbox)
|
||||
)
|
||||
)
|
||||
|
||||
;; blackout drawing
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
(the-as bucket-id s3-0)
|
||||
*temp-string*
|
||||
(-> obj process root trans)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
)
|
||||
@@ -407,7 +407,7 @@ using the fractional component of `idx` as the interpolant, return this result
|
||||
(the-as bucket-id s3-0)
|
||||
*temp-string*
|
||||
(-> obj process root trans)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
;; +++font-color
|
||||
(defenum font-color
|
||||
:type uint32
|
||||
(default-#cddbcd 0)
|
||||
(default 0)
|
||||
(#dadada 1)
|
||||
(#ededed 2)
|
||||
(precursor-#ec3b00 3)
|
||||
(red 3)
|
||||
(gold-#ba9200 4)
|
||||
(yellow-#f3f300 5)
|
||||
(green-#3df23d 6)
|
||||
@@ -32,7 +32,7 @@
|
||||
(#a6b5a6 17)
|
||||
(#757f75 18)
|
||||
(#5e3f5e 19)
|
||||
(#f0e387 20)
|
||||
(flat-yellow 20)
|
||||
(#3fbaed 21)
|
||||
(#3a3a3a 22)
|
||||
(#5c5c5c 23)
|
||||
|
||||
@@ -129,3 +129,23 @@
|
||||
(defmacro current-frame ()
|
||||
`(-> *display* frames (-> *display* on-screen))
|
||||
)
|
||||
|
||||
(defmacro current-time ()
|
||||
`(-> *display* base-frame-counter)
|
||||
)
|
||||
|
||||
(defmacro integral-current-time ()
|
||||
`(-> *display* integral-frame-counter)
|
||||
)
|
||||
|
||||
(defmacro real-current-time ()
|
||||
`(-> *display* real-frame-counter)
|
||||
)
|
||||
|
||||
|
||||
;; debug stuff really
|
||||
(defmacro get-screen-x (frac)
|
||||
`(the int (* ,frac 512)))
|
||||
|
||||
(defmacro get-screen-y (frac)
|
||||
`(the int (* ,frac 224)))
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
)
|
||||
|
||||
(define *font-context*
|
||||
(new 'global 'font-context *font-default-matrix* 0 0 0.0 (font-color default-#cddbcd) (font-flags shadow kerning))
|
||||
(new 'global 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
|
||||
(defun draw-sprite2d-xy ((arg0 dma-buffer) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 rgba))
|
||||
|
||||
@@ -67,6 +67,31 @@
|
||||
(set! (-> arg0 y-ratio) (* 0.75 (-> arg0 x-ratio)))
|
||||
(set! (-> arg0 y-ratio) (* 0.5625 (-> arg0 x-ratio)))
|
||||
)
|
||||
(with-pc
|
||||
(cond
|
||||
((-> *pc-settings* use-vis?)
|
||||
;; using game vis, cannot allow seeing more of the view
|
||||
;; crops excess aspect ratio at the top and bottom
|
||||
;(set! (-> arg0 y-ratio) (* (1/ (-> *pc-settings* aspect-ratio)) (-> arg0 x-ratio)))
|
||||
)
|
||||
((-> *pc-settings* movie?)
|
||||
;; this mess is just so that we can force the original 16x9 cropping during cutscenes.
|
||||
(if (<= (-> *pc-settings* aspect-ratio) ASPECT_16X9)
|
||||
(set! (-> arg0 y-ratio) (* (1/ (-> *pc-settings* aspect-ratio)) (-> arg0 x-ratio)))
|
||||
(begin
|
||||
(set! (-> arg0 y-ratio) (* (1/ ASPECT_16X9) (-> arg0 x-ratio)))
|
||||
(*! (-> arg0 x-ratio) (/ (-> *pc-settings* aspect-ratio) ASPECT_16X9))
|
||||
)
|
||||
)
|
||||
)
|
||||
(else
|
||||
;; not using game vis, allow *extended* aspect ratios
|
||||
;; there is no vertical cropping, and you can see more of the sides
|
||||
(set! (-> arg0 y-ratio) (* (1/ ASPECT_4X3) (-> arg0 x-ratio))) ;; same cropping as 4x3
|
||||
(*! (-> arg0 x-ratio) (/ (-> *pc-settings* aspect-ratio) ASPECT_4X3)) ;; extend fov! shows more on the sides.
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; compute culling constants. these seem unused...
|
||||
(let ((f1-3 (-> arg0 x-ratio))
|
||||
|
||||
@@ -633,7 +633,7 @@
|
||||
(the-as bucket-id s2-0)
|
||||
*temp-string*
|
||||
(the-as vector s5-1)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -261,7 +261,7 @@ Seen take in - `true-func` which takes no args TODO - seems fishy
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(draw-string-xy *temp-string* arg0 32 (+ (* 12 s4-0) 8) (font-color precursor-#ec3b00) (font-flags shadow))
|
||||
(draw-string-xy *temp-string* arg0 32 (+ (* 12 s4-0) 8) (font-color red) (font-flags shadow))
|
||||
)
|
||||
)
|
||||
0
|
||||
|
||||
@@ -799,7 +799,7 @@
|
||||
20
|
||||
290
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -828,7 +828,7 @@
|
||||
(set! (-> s2-0 color) (font-color #000000))
|
||||
(set! (-> s2-0 origin x) (+ 1.0 (-> s2-0 origin x)))
|
||||
(set! (-> s2-0 origin y) (+ 1.0 (-> s2-0 origin y)))
|
||||
(set! (-> s2-0 color) (font-color default-#cddbcd))
|
||||
(set! (-> s2-0 color) (font-color default))
|
||||
(set! (-> s2-0 flags) (font-flags shadow kerning middle left large))
|
||||
(print-game-text (the-as string s3-0) s2-0 #f 44 (bucket-id bucket-322))
|
||||
(gui-control-method-12
|
||||
@@ -1452,7 +1452,7 @@
|
||||
36
|
||||
60
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -846,7 +846,7 @@
|
||||
arg0
|
||||
(+ (* s5-0 16) 16)
|
||||
48
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -859,7 +859,7 @@
|
||||
arg0
|
||||
(+ (* s5-1 16) 16)
|
||||
64
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -871,7 +871,7 @@
|
||||
(-> *level* sound-bank 1)
|
||||
(-> *level* sound-bank 2)
|
||||
)
|
||||
(s5-2 *temp-string* arg0 16 88 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-2 *temp-string* arg0 16 88 (font-color default) (font-flags shadow))
|
||||
)
|
||||
(let ((s5-3 draw-string-xy))
|
||||
(format
|
||||
@@ -884,7 +884,7 @@
|
||||
(-> *setting-control* user-current sound-excitement)
|
||||
(-> *setting-control* user-current mode-sound-bank)
|
||||
)
|
||||
(s5-3 *temp-string* arg0 16 104 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-3 *temp-string* arg0 16 104 (font-color default) (font-flags shadow))
|
||||
)
|
||||
0
|
||||
)
|
||||
@@ -897,7 +897,7 @@
|
||||
(-> *sound-iop-info* freemem)
|
||||
(shr (-> *sound-iop-info* freemem) 10)
|
||||
)
|
||||
(s5-0 *temp-string* arg0 32 96 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-0 *temp-string* arg0 32 96 (font-color default) (font-flags shadow))
|
||||
)
|
||||
(let ((s5-1 draw-string-xy))
|
||||
(format
|
||||
@@ -906,7 +906,7 @@
|
||||
(-> *sound-iop-info* freemem2)
|
||||
(shr (-> *sound-iop-info* freemem2) 10)
|
||||
)
|
||||
(s5-1 *temp-string* arg0 32 64 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-1 *temp-string* arg0 32 64 (font-color default) (font-flags shadow))
|
||||
)
|
||||
0
|
||||
)
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
(when (> (-> obj points-in-combo) 0.0)
|
||||
(format *temp-string* "~%~S~D" "~[~38L" (the int (-> obj points-in-combo))))
|
||||
;; Print it finally
|
||||
(let ((font-ctx (new 'stack 'font-context *font-default-matrix* 0 325 0.0 (font-color default-#cddbcd) (font-flags shadow kerning middle))))
|
||||
(let ((font-ctx (new 'stack 'font-context *font-default-matrix* 0 325 0.0 (font-color default) (font-flags shadow kerning middle))))
|
||||
(print-game-text-scaled *temp-string* 1.0 font-ctx 320))
|
||||
(none))
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -985,7 +985,7 @@
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
6
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -594,7 +594,7 @@
|
||||
(set! (-> obj sprites 0 flags) (the-as uint 4))
|
||||
(alloc-string-if-needed obj 0)
|
||||
(set! (-> obj strings 0 flags) (font-flags kerning right large))
|
||||
(set! (-> obj strings 0 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 0 color) (font-color red))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
@@ -739,11 +739,11 @@
|
||||
(alloc-string-if-needed obj 0)
|
||||
(set! (-> obj strings 0 scale) 0.5)
|
||||
(set! (-> obj strings 0 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 0 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 0 color) (font-color red))
|
||||
(alloc-string-if-needed obj 1)
|
||||
(set! (-> obj strings 1 scale) 0.75)
|
||||
(set! (-> obj strings 1 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 1 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 1 color) (font-color red))
|
||||
(let ((s5-0 format)
|
||||
(gp-1 (clear (-> obj strings 1 text)))
|
||||
(s4-0 "~S")
|
||||
@@ -795,11 +795,11 @@
|
||||
(alloc-string-if-needed obj 0)
|
||||
(set! (-> obj strings 0 scale) 0.5)
|
||||
(set! (-> obj strings 0 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 0 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 0 color) (font-color red))
|
||||
(alloc-string-if-needed obj 1)
|
||||
(set! (-> obj strings 1 scale) 0.75)
|
||||
(set! (-> obj strings 1 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 1 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 1 color) (font-color red))
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
@@ -722,7 +722,7 @@
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1318,7 +1318,7 @@
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -671,8 +671,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-0 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -687,8 +687,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-0 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -722,8 +722,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-1 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -738,8 +738,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-1 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
|
||||
@@ -124,9 +124,74 @@
|
||||
(define-extern *boot-video-mode* "Defined in the kernel" int)
|
||||
(define-extern *kernel-boot-message* symbol)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; PC Port functions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(defenum pc-renderer-tree-type
|
||||
(none 0)
|
||||
(tfrag3 1)
|
||||
(tie3 2)
|
||||
(invalid))
|
||||
|
||||
(defenum pc-collision-mode
|
||||
(none 0)
|
||||
(mode 1)
|
||||
(event 2)
|
||||
(material 3)
|
||||
(skip 4))
|
||||
|
||||
(defenum pc-gfx-hack
|
||||
(no-tex 0))
|
||||
|
||||
(define-extern __read-ee-timer (function uint))
|
||||
(define-extern __mem-move (function pointer pointer uint none))
|
||||
(define-extern __send-gfx-dma-chain (function object object none))
|
||||
(define-extern __pc-texture-upload-now (function object object none))
|
||||
(define-extern __pc-texture-relocate (function object object object none))
|
||||
(define-extern __pc-get-mips2c (function string function))
|
||||
(define-extern __pc-set-levels (function (pointer string) none))
|
||||
(define-extern pc-pad-input-mode-set (function symbol none))
|
||||
(define-extern pc-pad-input-pad-set (function int none))
|
||||
(define-extern pc-pad-input-mode-get (function int))
|
||||
(define-extern pc-pad-input-key-get (function int))
|
||||
(define-extern pc-pad-input-index-get (function int))
|
||||
(define-extern pc-pad-input-map-save! (function none))
|
||||
(define-extern pc-pad-get-mapped-button (function int int int))
|
||||
(define-extern pc-get-fullscreen (function symbol))
|
||||
(define-extern pc-get-screen-size (function int (pointer int32) (pointer int32) none))
|
||||
(define-extern pc-get-screen-rate (function int int))
|
||||
(define-extern pc-get-screen-vmode-count (function int))
|
||||
(define-extern pc-get-monitor-count (function int))
|
||||
(define-extern pc-get-os (function symbol))
|
||||
(define-extern pc-get-window-size (function (pointer int32) (pointer int32) none))
|
||||
(define-extern pc-get-window-scale (function (pointer float) (pointer float) none))
|
||||
(define-extern pc-set-window-size (function int int none))
|
||||
(define-extern pc-set-fullscreen (function symbol int none))
|
||||
(define-extern pc-set-frame-rate (function int none))
|
||||
(define-extern pc-set-vsync (function symbol none))
|
||||
(define-extern pc-renderer-tree-set-lod (function pc-renderer-tree-type int none))
|
||||
(define-extern pc-set-letterbox (function int int none))
|
||||
(define-extern pc-set-collision (function symbol none))
|
||||
(define-extern pc-set-collision-wireframe (function symbol none))
|
||||
(define-extern pc-get-collision-mask (function pc-collision-mode int symbol))
|
||||
(define-extern pc-set-collision-mask (function pc-collision-mode int symbol none))
|
||||
(define-extern pc-set-collision-mode (function pc-collision-mode none))
|
||||
(define-extern pc-filepath-exists? (function string symbol))
|
||||
(define-extern pc-mkdir-file-path (function string none))
|
||||
(define-extern pc-filter-debug-string? (function string float symbol))
|
||||
(declare-type discord-info structure)
|
||||
(define-extern pc-discord-rpc-update (function discord-info none))
|
||||
(define-extern pc-discord-rpc-set (function int none))
|
||||
(define-extern pc-filepath-exists? (function string symbol))
|
||||
(define-extern pc-mkdir-file-path (function string none))
|
||||
(define-extern pc-sound-set-flava-hack (function int none))
|
||||
(define-extern pc-sound-set-fade-hack (function int none))
|
||||
(define-extern pc-set-window-lock (function symbol none))
|
||||
(define-extern pc-set-game-resolution (function int int none))
|
||||
(define-extern pc-set-msaa (function int none))
|
||||
(define-extern pc-set-gfx-hack (function pc-gfx-hack symbol none))
|
||||
|
||||
(define-extern pc-get-unix-timestamp (function int))
|
||||
|
||||
(define-extern file-stream-open (function file-stream string symbol file-stream))
|
||||
(define-extern file-stream-close (function file-stream file-stream))
|
||||
@@ -207,7 +272,6 @@
|
||||
(define-extern unload (function string none))
|
||||
|
||||
(define-extern reset-graph (function int int int int none))
|
||||
(define-extern __pc-set-levels (function (pointer string) none))
|
||||
|
||||
|
||||
;; PC stuff
|
||||
@@ -221,9 +285,3 @@
|
||||
(define-extern *pc-settings-folder* string)
|
||||
(define-extern *pc-settings-built-sha* string)
|
||||
|
||||
(define-extern pc-filepath-exists? (function string symbol))
|
||||
(define-extern pc-mkdir-file-path (function string none))
|
||||
(define-extern pc-filter-debug-string? (function string float symbol))
|
||||
(declare-type discord-info structure)
|
||||
(define-extern pc-discord-rpc-update (function discord-info none))
|
||||
(define-extern pc-discord-rpc-set (function int none))
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
*temp-string*
|
||||
gp-0
|
||||
(if (logtest? (-> obj flags) (nav-node-flag-byte blocked))
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-color cyan-#00fefe)
|
||||
)
|
||||
(the-as vector2h #f)
|
||||
|
||||
@@ -1140,7 +1140,7 @@ Process is recycled and moved to reserved, if it deactivates."
|
||||
sv-84
|
||||
(if (< (-> sv-20 user-count) (-> sv-20 max-user-count))
|
||||
(font-color yellow-#f3f300)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
|
||||
@@ -345,7 +345,7 @@ This commonly includes things such as:
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -201,7 +201,7 @@
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -291,7 +291,7 @@
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -402,7 +402,7 @@
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -296,7 +296,7 @@
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
@@ -311,7 +311,7 @@
|
||||
(set! (-> v1-16 height) (the float 80))
|
||||
)
|
||||
(let ((a0-12 s1-0))
|
||||
(set! (-> a0-12 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> a0-12 color) (font-color red))
|
||||
)
|
||||
(let ((a0-13 s1-0))
|
||||
(set! (-> a0-13 flags) (font-flags kerning middle left large))
|
||||
@@ -448,7 +448,7 @@
|
||||
(alloc-string-if-needed obj s5-0)
|
||||
)
|
||||
(set! (-> obj strings 0 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 0 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 0 color) (font-color red))
|
||||
(set! (-> obj strings 1 flags) (font-flags kerning large))
|
||||
(set! (-> obj strings 1 color) (font-color #dadada))
|
||||
(set! (-> obj strings 2 flags) (font-flags kerning large))
|
||||
|
||||
@@ -581,7 +581,7 @@
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -530,7 +530,7 @@
|
||||
64
|
||||
312
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -229,7 +229,7 @@ This commonly includes things such as:
|
||||
32
|
||||
290
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -535,7 +535,7 @@
|
||||
64
|
||||
312
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -38,6 +38,18 @@
|
||||
)
|
||||
)
|
||||
|
||||
(defun make-src-sequence-elt-jak1 (current previous prefix)
|
||||
"Helper for goal-src-sequence"
|
||||
`(let ((output-file ,(gc-file->o-file current)))
|
||||
(set! *all-gc* (cons output-file *all-gc*))
|
||||
(defstep :in ,(string-append "goal_src/jak1/" prefix current)
|
||||
:tool 'goalc
|
||||
:out (list output-file)
|
||||
:dep '(,(gc-file->o-file previous))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
;; TODO - deps should probably just treated as a proper list to refactor duplication
|
||||
(defmacro goal-src-sequence (prefix &key (deps '()) &rest sequence)
|
||||
"Add a sequence of GOAL files (each depending on the previous) in the given directory,
|
||||
@@ -51,7 +63,13 @@
|
||||
|
||||
(while (not (null? in-iter))
|
||||
;; (fmt #t "{} dep on {}\n" (first in-iter) prev)
|
||||
(let ((next (make-src-sequence-elt (first in-iter) prev prefix)))
|
||||
(let* ((cur-src-file (first in-iter))
|
||||
;; grotesque temp hack
|
||||
(next (if (or (eq? "pc/pckernel-h.gc" cur-src-file)
|
||||
(eq? "pc/pckernel-common.gc" cur-src-file)
|
||||
(eq? "pc/debug/pc-debug-common.gc" cur-src-file))
|
||||
(make-src-sequence-elt-jak1 cur-src-file prev prefix)
|
||||
(make-src-sequence-elt cur-src-file prev prefix))))
|
||||
(set-cdr! iter (cons next '()))
|
||||
(set! iter (cdr iter))
|
||||
)
|
||||
@@ -170,8 +188,25 @@
|
||||
(cond
|
||||
((string-ends-with? file-name ".o")
|
||||
;; build up a list of all gsrc files needing to be compiled
|
||||
(let ((gsrc-path (get-gsrc-path (symbol->string (first (string-split file-name "."))))))
|
||||
(set! gsrc-seq-args (cons gsrc-path gsrc-seq-args))))
|
||||
(let ((base-name (symbol->string (first (string-split file-name ".")))))
|
||||
(cond
|
||||
;; hardcoded cases to grab from jak1... really dont want to copy-paste these all the time!
|
||||
((or (eq? base-name "pckernel-h")
|
||||
(eq? base-name "pckernel-common")
|
||||
(eq? base-name "pc-debug-common"))
|
||||
(let ((old-path (get-gsrc-folder))
|
||||
(gsrc-path (begin (set-gsrc-folder! "goal_src/jak1")
|
||||
(get-gsrc-path base-name))))
|
||||
(set! gsrc-seq-args (cons gsrc-path gsrc-seq-args))
|
||||
(set-gsrc-folder! old-path)
|
||||
)
|
||||
)
|
||||
(#t
|
||||
(let ((gsrc-path (get-gsrc-path base-name)))
|
||||
(set! gsrc-seq-args (cons gsrc-path gsrc-seq-args)))
|
||||
)
|
||||
))
|
||||
)
|
||||
((string-starts-with? file-name "tpage-")
|
||||
;; copy textures
|
||||
(let ((tpage-id (second (string-split (symbol->string (first (string-split file-name "."))) "-"))))
|
||||
|
||||
@@ -274,7 +274,7 @@
|
||||
))
|
||||
|
||||
(when (not (-> lst head))
|
||||
(draw-string-xy warning buf 21 (+ 28 4 14) (font-color precursor-#ec3b00) (font-flags shadow kerning))
|
||||
(draw-string-xy warning buf 21 (+ 28 4 14) (font-color red) (font-flags shadow kerning))
|
||||
(1+! items-drawn))
|
||||
|
||||
)
|
||||
@@ -666,16 +666,13 @@
|
||||
(if (not *atx*) (atx-start))
|
||||
|
||||
(do-atx-list (item (-> *ATX-settings* list-ctrl))
|
||||
(if (or (and (>= (-> item group) (-> *level* level 0 heap base)) (< (-> item group) (-> *level* level 0 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 1 heap base)) (< (-> item group) (-> *level* level 1 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 2 heap base)) (< (-> item group) (-> *level* level 2 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 3 heap base)) (< (-> item group) (-> *level* level 3 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 4 heap base)) (< (-> item group) (-> *level* level 4 heap top)))
|
||||
(and (>= (-> item group) (-> *level* level 5 heap base)) (< (-> item group) (-> *level* level 5 heap top))))
|
||||
(dotimes (i (-> *level* length))
|
||||
(when (and (>= (-> item group) (-> *level* level i heap base)) (< (-> item group) (-> *level* level i heap top)))
|
||||
(atx-list-remove (-> *ATX-settings* list-ctrl) item)
|
||||
)
|
||||
(set! i (-> *level* length))
|
||||
))
|
||||
)
|
||||
(dotimes (i 6)
|
||||
(dotimes (i (-> *level* length))
|
||||
(doarray (ag (-> *level* level i art-group data-array))
|
||||
(atx-add-new-art-group (the art-group ag))
|
||||
)
|
||||
@@ -685,7 +682,7 @@
|
||||
(defun atx-add-common-group ()
|
||||
|
||||
(if (not *atx*) (atx-start))
|
||||
(doarray (ag (-> *level* level 2 art-group data-array))
|
||||
(doarray (ag (-> *level* level (-> *level* length) art-group data-array))
|
||||
(atx-add-new-art-group (the art-group ag))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -197,6 +197,7 @@
|
||||
(= (-> *entity-debug-inspect* entity) e)
|
||||
)
|
||||
|
||||
(define *entity-debug-display-part* #t)
|
||||
(defun build-entity-list ()
|
||||
"Fill the entity pick menu"
|
||||
;; clear old list
|
||||
@@ -438,11 +439,11 @@
|
||||
;; )
|
||||
;; )
|
||||
;;
|
||||
;; (defun dm-subtitle-setting ((setting symbol) (msg debug-menu-msg))
|
||||
;; (when (= msg (debug-menu-msg press))
|
||||
;; (set! (-> *pc-settings* subtitle-speaker?) setting))
|
||||
;; (= (-> *pc-settings* subtitle-speaker?) setting)
|
||||
;; )
|
||||
(defun dm-subtitle-setting ((setting symbol) (msg debug-menu-msg))
|
||||
(when (= msg (debug-menu-msg press))
|
||||
(set! (-> *pc-settings* subtitle-speaker?) setting))
|
||||
(= (-> *pc-settings* subtitle-speaker?) setting)
|
||||
)
|
||||
|
||||
;; (defun dm-mood-override-palette-pick-func ((bpal int) (msg debug-menu-msg))
|
||||
;; (let* ((pal (/ bpal 8))
|
||||
@@ -592,83 +593,71 @@
|
||||
;; (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-entity-menu *debug-menu-context*))
|
||||
;; Scene menu TODO
|
||||
|
||||
(debug-menu-append-item (-> *debug-menu-context* root-menu)
|
||||
(debug-menu-make-from-template *debug-menu-context*
|
||||
'(menu "PC Settings"
|
||||
;; (flag "Debug" #f ,(dm-lambda-boolean-flag (-> *pc-settings* debug?)))
|
||||
;; (flag "Use native vis" #f ,(dm-lambda-boolean-flag (-> *pc-settings* use-vis?)))
|
||||
;; (function "Toggle game aspect" #f ,(lambda ()
|
||||
;; (cond
|
||||
;; ((= (-> *setting-control* default aspect-ratio) 'aspect4x3)
|
||||
;; (set! (-> *setting-control* default aspect-ratio) 'aspect16x9)
|
||||
;; )
|
||||
;; (else
|
||||
;; (set! (-> *setting-control* default aspect-ratio) 'aspect4x3)
|
||||
;; )
|
||||
;; )
|
||||
;; (set-aspect-ratio (-> *setting-control* default aspect-ratio))
|
||||
;; ))
|
||||
;; (flag "Auto aspect" #f ,(dm-lambda-boolean-flag (-> *pc-settings* aspect-ratio-auto?)))
|
||||
;; (menu "Aspect test"
|
||||
;; (function "4 x 3" #f ,(lambda () (set-aspect! *pc-settings* 4 3)))
|
||||
;; (function "16 x 9" #f ,(lambda () (set-aspect! *pc-settings* 16 9)))
|
||||
;; (function "64 x 27 (21:9)" #f ,(lambda () (set-aspect! *pc-settings* 64 27)))
|
||||
;; (function "16 x 10" #f ,(lambda () (set-aspect! *pc-settings* 16 10)))
|
||||
;; (function "2 x 1" #f ,(lambda () (set-aspect! *pc-settings* 2 1)))
|
||||
;; (function "37 x 20" #f ,(lambda () (set-aspect! *pc-settings* 37 20)))
|
||||
;; (function "21 x 9" #f ,(lambda () (set-aspect! *pc-settings* 21 9)))
|
||||
;; (function "64 x 18" #f ,(lambda () (set-aspect! *pc-settings* 64 18)))
|
||||
;; (int-var "Custom aspect X" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-x)) 20 1 #t 1 1000)
|
||||
;; (int-var "Custom aspect Y" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-y)) 20 1 #t 1 1000)
|
||||
;; (function "Custom" #f ,(lambda () (set-aspect! *pc-settings* (-> *pc-settings* aspect-custom-x) (-> *pc-settings* aspect-custom-y))))
|
||||
;; )
|
||||
;; (menu "Fullscreen"
|
||||
;; (function "Windowed" #f ,(lambda () (set-display-mode! *pc-settings* 'windowed)))
|
||||
;; (function "Fullscreen" #f ,(lambda () (set-display-mode! *pc-settings* 'fullscreen)))
|
||||
;; (function "Borderless" #f ,(lambda () (set-display-mode! *pc-settings* 'borderless)))
|
||||
;; )
|
||||
;; (menu "Sizes"
|
||||
;; (function "640 x 480" #f ,(lambda () (set-size! *pc-settings* 640 480)))
|
||||
;; (function "640 x 360" #f ,(lambda () (set-size! *pc-settings* 640 360)))
|
||||
;; (function "720 x 540" #f ,(lambda () (set-size! *pc-settings* 720 540)))
|
||||
;; (function "960 x 540" #f ,(lambda () (set-size! *pc-settings* 960 540)))
|
||||
;; (function "800 x 600" #f ,(lambda () (set-size! *pc-settings* 800 600)))
|
||||
;; (function "960 x 720" #f ,(lambda () (set-size! *pc-settings* 960 720)))
|
||||
;; (function "1280 x 720" #f ,(lambda () (set-size! *pc-settings* 1280 720)))
|
||||
;; (function "1024 x 768" #f ,(lambda () (set-size! *pc-settings* 1024 768)))
|
||||
;; (function "1366 x 768" #f ,(lambda () (set-size! *pc-settings* 1366 768)))
|
||||
;; (function "1280 x 960" #f ,(lambda () (set-size! *pc-settings* 1280 960)))
|
||||
;; (function "1440 x 1080" #f ,(lambda () (set-size! *pc-settings* 1440 1080)))
|
||||
;; (function "1920 x 1080" #f ,(lambda () (set-size! *pc-settings* 1920 1080)))
|
||||
;; (function "1920 x 1440" #f ,(lambda () (set-size! *pc-settings* 1920 1440)))
|
||||
;; (function "2560 x 1440" #f ,(lambda () (set-size! *pc-settings* 2560 1440)))
|
||||
;; (function "2880 x 2160" #f ,(lambda () (set-size! *pc-settings* 2880 2160)))
|
||||
;; (function "3840 x 2160" #f ,(lambda () (set-size! *pc-settings* 3840 2160)))
|
||||
;; (function "512 x 224" #f ,(lambda () (set-size! *pc-settings* 512 224)))
|
||||
;; (function "512 x 256" #f ,(lambda () (set-size! *pc-settings* 512 256)))
|
||||
;; (function "512 x 448" #f ,(lambda () (set-size! *pc-settings* 512 448)))
|
||||
;; (function "512 x 512" #f ,(lambda () (set-size! *pc-settings* 512 512)))
|
||||
;; )
|
||||
;; (flag "Letterbox" #f ,(dm-lambda-boolean-flag (-> *pc-settings* letterbox?)))
|
||||
;; (flag "Skip movies" #f ,(dm-lambda-boolean-flag (-> *pc-settings* skip-movies?)))
|
||||
;; (flag "Money starburst" #f ,(dm-lambda-boolean-flag (-> *pc-settings* money-starburst?)))
|
||||
;; (flag "Subtitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* subtitles?)))
|
||||
;; (flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
|
||||
;; (menu "Subtitle speaker"
|
||||
;; (flag "Off" #f dm-subtitle-setting)
|
||||
;; (flag "On" #t dm-subtitle-setting)
|
||||
;; (flag "Auto" auto dm-subtitle-setting)
|
||||
;; )
|
||||
;; (menu "Subtitle language"
|
||||
;; (flag "english" 0 dm-subtitle-language)
|
||||
;; (flag "french" 1 dm-subtitle-language)
|
||||
;; (flag "german" 2 dm-subtitle-language)
|
||||
;; (flag "spanish" 3 dm-subtitle-language)
|
||||
;; (flag "uk-english" 6 dm-subtitle-language)
|
||||
;; (flag "br-portuguese" 13 dm-subtitle-language)
|
||||
;; )
|
||||
(flag "Debug" #f ,(dm-lambda-boolean-flag (-> *pc-settings* debug?)))
|
||||
(flag "Use native vis" #f ,(dm-lambda-boolean-flag (-> *pc-settings* use-vis?)))
|
||||
(function "Toggle game aspect" #f ,(lambda ()
|
||||
(cond
|
||||
((= (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
|
||||
(set! (-> *setting-control* user-default aspect-ratio) 'aspect16x9)
|
||||
)
|
||||
(else
|
||||
(set! (-> *setting-control* user-default aspect-ratio) 'aspect4x3)
|
||||
)
|
||||
)
|
||||
(set-aspect-ratio (-> *setting-control* user-default aspect-ratio))
|
||||
))
|
||||
(flag "Auto aspect" #f ,(dm-lambda-boolean-flag (-> *pc-settings* aspect-ratio-auto?)))
|
||||
(menu "Aspect test"
|
||||
(function "4 x 3" #f ,(lambda () (set-aspect! *pc-settings* 4 3)))
|
||||
(function "16 x 9" #f ,(lambda () (set-aspect! *pc-settings* 16 9)))
|
||||
(function "64 x 27 (21:9)" #f ,(lambda () (set-aspect! *pc-settings* 64 27)))
|
||||
(function "16 x 10" #f ,(lambda () (set-aspect! *pc-settings* 16 10)))
|
||||
(function "2 x 1" #f ,(lambda () (set-aspect! *pc-settings* 2 1)))
|
||||
(function "37 x 20" #f ,(lambda () (set-aspect! *pc-settings* 37 20)))
|
||||
(function "21 x 9" #f ,(lambda () (set-aspect! *pc-settings* 21 9)))
|
||||
(function "64 x 18" #f ,(lambda () (set-aspect! *pc-settings* 64 18)))
|
||||
(int-var "Custom aspect X" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-x)) 20 1 #t 1 1000)
|
||||
(int-var "Custom aspect Y" #f ,(dm-lambda-int-var (-> *pc-settings* aspect-custom-y)) 20 1 #t 1 1000)
|
||||
(function "Custom" #f ,(lambda () (set-aspect! *pc-settings* (-> *pc-settings* aspect-custom-x) (-> *pc-settings* aspect-custom-y))))
|
||||
)
|
||||
(menu "Fullscreen"
|
||||
(function "Windowed" #f ,(lambda () (set-display-mode! *pc-settings* 'windowed)))
|
||||
(function "Fullscreen" #f ,(lambda () (set-display-mode! *pc-settings* 'fullscreen)))
|
||||
(function "Borderless" #f ,(lambda () (set-display-mode! *pc-settings* 'borderless)))
|
||||
)
|
||||
(menu "Sizes"
|
||||
(function "640 x 480" #f ,(lambda () (set-size! *pc-settings* 640 480)))
|
||||
(function "640 x 360" #f ,(lambda () (set-size! *pc-settings* 640 360)))
|
||||
(function "720 x 540" #f ,(lambda () (set-size! *pc-settings* 720 540)))
|
||||
(function "960 x 540" #f ,(lambda () (set-size! *pc-settings* 960 540)))
|
||||
(function "800 x 600" #f ,(lambda () (set-size! *pc-settings* 800 600)))
|
||||
(function "960 x 720" #f ,(lambda () (set-size! *pc-settings* 960 720)))
|
||||
(function "1280 x 720" #f ,(lambda () (set-size! *pc-settings* 1280 720)))
|
||||
(function "1024 x 768" #f ,(lambda () (set-size! *pc-settings* 1024 768)))
|
||||
(function "1366 x 768" #f ,(lambda () (set-size! *pc-settings* 1366 768)))
|
||||
(function "1280 x 960" #f ,(lambda () (set-size! *pc-settings* 1280 960)))
|
||||
(function "1440 x 1080" #f ,(lambda () (set-size! *pc-settings* 1440 1080)))
|
||||
(function "1920 x 1080" #f ,(lambda () (set-size! *pc-settings* 1920 1080)))
|
||||
(function "1920 x 1440" #f ,(lambda () (set-size! *pc-settings* 1920 1440)))
|
||||
(function "2560 x 1440" #f ,(lambda () (set-size! *pc-settings* 2560 1440)))
|
||||
(function "2880 x 2160" #f ,(lambda () (set-size! *pc-settings* 2880 2160)))
|
||||
(function "3840 x 2160" #f ,(lambda () (set-size! *pc-settings* 3840 2160)))
|
||||
(function "512 x 224" #f ,(lambda () (set-size! *pc-settings* 512 224)))
|
||||
(function "512 x 256" #f ,(lambda () (set-size! *pc-settings* 512 256)))
|
||||
(function "512 x 448" #f ,(lambda () (set-size! *pc-settings* 512 448)))
|
||||
(function "512 x 512" #f ,(lambda () (set-size! *pc-settings* 512 512)))
|
||||
)
|
||||
(flag "Letterbox" #f ,(dm-lambda-boolean-flag (-> *pc-settings* letterbox?)))
|
||||
(flag "Hinttitles" #f ,(dm-lambda-boolean-flag (-> *pc-settings* hinttitles?)))
|
||||
(menu "Subtitle speaker"
|
||||
(flag "Off" #f dm-subtitle-setting)
|
||||
(flag "On" #t dm-subtitle-setting)
|
||||
(flag "Auto" auto dm-subtitle-setting)
|
||||
)
|
||||
;; (menu "Text language"
|
||||
;; (flag "english" 0 dm-text-language)
|
||||
;; (flag "french" 1 dm-text-language)
|
||||
@@ -716,29 +705,28 @@
|
||||
;; (flag "150" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set-frame-rate! *pc-settings* 150))
|
||||
;; (= (-> *pc-settings* target-fps) 150)))
|
||||
;; )
|
||||
;; (menu "MSAA"
|
||||
;; (flag "Off" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 1))
|
||||
;; (= (-> *pc-settings* gfx-msaa) 1)))
|
||||
;; (flag "x2" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 2))
|
||||
;; (= (-> *pc-settings* gfx-msaa) 2)))
|
||||
;; (flag "x4" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 4))
|
||||
;; (= (-> *pc-settings* gfx-msaa) 4)))
|
||||
;; (flag "x8" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 8))
|
||||
;; (= (-> *pc-settings* gfx-msaa) 8)))
|
||||
;; (flag "x16" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 16))
|
||||
;; (= (-> *pc-settings* gfx-msaa) 16)))
|
||||
;; )
|
||||
;; (flag "V-sync" #f ,(dm-lambda-boolean-flag (-> *pc-settings* vsync?)))
|
||||
;; ;(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)))
|
||||
;; (flag "Display git commit" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-sha)))
|
||||
;; (flag "Extra hud elements" #f ,(dm-lambda-boolean-flag (-> *pc-settings* extra-hud?)))
|
||||
;; (flag "Music fadein" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadein?)))
|
||||
;; (flag "Music fadeout" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadeout?)))
|
||||
;; (function "Reset" #f ,(lambda () (reset *pc-settings*)))
|
||||
(menu "MSAA"
|
||||
(flag "Off" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 1))
|
||||
(= (-> *pc-settings* gfx-msaa) 1)))
|
||||
(flag "x2" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 2))
|
||||
(= (-> *pc-settings* gfx-msaa) 2)))
|
||||
(flag "x4" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 4))
|
||||
(= (-> *pc-settings* gfx-msaa) 4)))
|
||||
(flag "x8" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 8))
|
||||
(= (-> *pc-settings* gfx-msaa) 8)))
|
||||
(flag "x16" #f ,(lambda (arg (msg debug-menu-msg)) (when (= msg (debug-menu-msg press)) (set! (-> *pc-settings* gfx-msaa) 16))
|
||||
(= (-> *pc-settings* gfx-msaa) 16)))
|
||||
)
|
||||
(flag "V-sync" #f ,(dm-lambda-boolean-flag (-> *pc-settings* vsync?)))
|
||||
;(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)))
|
||||
(flag "Display git commit" #f ,(dm-lambda-boolean-flag (-> *pc-settings* display-sha)))
|
||||
(flag "Music fadein" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadein?)))
|
||||
(flag "Music fadeout" #f ,(dm-lambda-boolean-flag (-> *pc-settings* music-fadeout?)))
|
||||
(function "Reset" #f ,(lambda () (reset *pc-settings*)))
|
||||
(function "Save" #f ,(lambda () (commit-to-file *pc-settings*)))
|
||||
;; (function "Load" #f ,(lambda () (load-settings *pc-settings*)))
|
||||
(function "Load" #f ,(lambda () (load-settings *pc-settings*)))
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -785,10 +773,10 @@
|
||||
)
|
||||
)
|
||||
|
||||
;; (debug-menu-append-item (-> (the debug-menu-item-submenu (ref (-> *debug-menu-context* root-menu items) 4)) submenu)
|
||||
;; (debug-menu-append-item (debug-menu-find-from-template *debug-menu-context* '("Collision"))
|
||||
;; (debug-menu-make-collision-renderer-menu *debug-menu-context*))
|
||||
|
||||
(debug-menu-append-item (-> (the debug-menu-item-submenu (car (-> *debug-menu-context* root-menu items))) submenu)
|
||||
(debug-menu-append-item (debug-menu-find-from-template *debug-menu-context* '("Artist"))
|
||||
(debug-menu-make-anim-tester-x-menu *debug-menu-context*))
|
||||
|
||||
)
|
||||
|
||||
@@ -11,6 +11,15 @@
|
||||
|
||||
(define *debug-temp-string* (new 'debug 'string 4096 (the string #f)))
|
||||
|
||||
(defmethod set-entity! entity-debug-inspect ((obj entity-debug-inspect) (e entity))
|
||||
"set the entity to inspect"
|
||||
|
||||
(set! (-> obj entity) e)
|
||||
(set! (-> obj scroll-y) 0)
|
||||
|
||||
e
|
||||
)
|
||||
|
||||
;; custom entity functions for pc port
|
||||
(defun-debug entity-inspect-draw ((inspect-info entity-debug-inspect))
|
||||
"draw text about an entity on screen"
|
||||
@@ -21,7 +30,7 @@
|
||||
;; draw trans
|
||||
(add-debug-x #t (bucket-id debug-no-zbuf1) (-> e trans) (static-rgba 255 255 0 128))
|
||||
(if (or (not (-> inspect-info show-actor-info)) (!= (-> e type) entity-actor) (and (= (-> e type) entity-actor) (not (-> (the entity-actor e) extra process))))
|
||||
(add-debug-text-3d #t (bucket-id debug-no-zbuf1) name (-> e trans) (font-color precursor-#ec3b00) (new 'static 'vector2h :y 8)))
|
||||
(add-debug-text-3d #t (bucket-id debug-no-zbuf1) name (-> e trans) (font-color red) (new 'static 'vector2h :y 8)))
|
||||
|
||||
;; start writing text
|
||||
(let* ((begin-y (- 16 (* (-> inspect-info scroll-y) 16))) (cur-y begin-y) (y-adv 16))
|
||||
@@ -30,7 +39,7 @@
|
||||
;; basic info, actor id, etc
|
||||
(draw-string-xy
|
||||
(string-format "~3L~A~0L ~A~%tags: ~D size: ~D aid: #x~x~%R1/L1 scroll L3 toggle display-actor-info~%--------------------" (-> e type) name (length e) (asize-of e) (-> e aid))
|
||||
debug-buf 352 cur-y (font-color default-#cddbcd) (font-flags shadow kerning middle))
|
||||
debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
|
||||
(+! cur-y (* 10 6))
|
||||
(cond
|
||||
((type-type? (-> e type) entity-actor)
|
||||
@@ -38,7 +47,7 @@
|
||||
;; print info for entity-actors
|
||||
(draw-string-xy
|
||||
(string-format "etype: ~A~%vis: ~D task: ~S" (-> actor etype) (-> actor vis-id) (game-task->string (-> actor task)))
|
||||
debug-buf 352 cur-y (font-color default-#cddbcd) (font-flags shadow kerning middle))
|
||||
debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
|
||||
(+! cur-y (* 10 3))
|
||||
)
|
||||
)
|
||||
@@ -244,7 +253,7 @@
|
||||
)
|
||||
|
||||
;; draw a string for each tag instead of all at once. allows using smaller strings.
|
||||
(draw-string-xy *debug-temp-string* debug-buf 352 cur-y (font-color default-#cddbcd) (font-flags shadow kerning middle))
|
||||
(draw-string-xy *debug-temp-string* debug-buf 352 cur-y (font-color default) (font-flags shadow kerning middle))
|
||||
(+! cur-y y-adv)
|
||||
(set! y-adv 14)
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
Various debugging displays made for the pc port. This file includes overrides or game-specific implementations.
|
||||
|#
|
||||
|
||||
;; debug-only file!
|
||||
(declare-file (debug))
|
||||
|
||||
(defmethod print-debug-misc pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
"prints various miscellaneous debug text to the game console, according to what's enabled in this object."
|
||||
|
||||
(when (-> obj display-bug-report)
|
||||
#f)
|
||||
)
|
||||
|
||||
(defconstant MEM_BAR_NUM 11) ;; amount of memory usage bars (override later if wanted)
|
||||
(defmethod draw-memory pc-settings-jak2 ((obj pc-settings-jak2) (buf dma-buffer))
|
||||
"draw the memory heap status in the bottom right corner"
|
||||
|
||||
(when (-> obj display-heap-status)
|
||||
(let ((idx 0)
|
||||
(level-heap-colors (new 'static 'array rgba 6 (static-rgba 32 255 255 64)
|
||||
(static-rgba 255 32 255 64)
|
||||
(static-rgba 255 255 32 64)
|
||||
(static-rgba 32 255 255 64)
|
||||
(static-rgba 255 32 255 64)
|
||||
(static-rgba 255 255 32 64)
|
||||
)))
|
||||
(draw-memory-bar-kheap buf global :idx idx :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-kheap buf debug :idx (1+! idx) :color (static-rgba 255 32 32 64))
|
||||
(dotimes (i (-> *level* length))
|
||||
(if (!= (-> *level* level i status) 'inactive) (draw-memory-bar-kheap buf (-> *level* level i heap) :name (string-format "l~D" i) :idx (1+! idx) :color (-> level-heap-colors i)))
|
||||
)
|
||||
(draw-memory-bar-dead-pool-heap buf *nk-dead-pool* :name "actor" :idx (1+! idx) :color (static-rgba 32 255 32 64))
|
||||
(draw-memory-bar-generic buf
|
||||
:remain (* 16 (dma-buffer-free (-> *display* frames (-> *display* on-screen) global-buf)))
|
||||
:total (length (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
:name "dma-global" :idx (1+! idx) :color (static-rgba 32 32 255 64))
|
||||
(draw-memory-bar-generic buf
|
||||
:remain (* 16 (dma-buffer-free (-> *display* frames (-> *display* on-screen) debug-buf)))
|
||||
:total (length (-> *display* frames (-> *display* on-screen) debug-buf))
|
||||
:name "dma-debug" :idx (1+! idx) :color (static-rgba 255 32 32 64))
|
||||
)
|
||||
#t)
|
||||
)
|
||||
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
|
||||
This file contains code that we need for the PC port of the game specifically.
|
||||
It should be included as part of the game engine package (engine.cgo).
|
||||
|
||||
This file contains various types and functions to store PC-specific information
|
||||
and also to communicate between the game (GOAL) and the operating system.
|
||||
This way we can poll, change and display information about the system the game
|
||||
is running on, such as:
|
||||
- display devices and their settings, such as fullscreen, DPI, refresh rate, etc.
|
||||
- audio devices and their settings, such as audio latency, channel number, etc.
|
||||
- graphics devices and their settings, such as resolution, FPS, anisotropy, shaders, etc.
|
||||
- input devices and their settings, such as controllers, keyboards, mice, etc.
|
||||
- information about the game window (position, size)
|
||||
- PC-specific goodies, enhancements, fixes and settings.
|
||||
- whatever else.
|
||||
|
||||
If you do not want to include these PC things, you should exclude it from the build system.
|
||||
|
||||
|#
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; constants
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(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: 0.0.0.2
|
||||
(defglobalconstant PC_KERNEL_VERSION (static-pckernel-version 0 0 0 2))
|
||||
(defconstant PC_KERNEL_VER_MAJOR (-> PC_KERNEL_VERSION major))
|
||||
(defconstant PC_KERNEL_VER_MINOR (-> PC_KERNEL_VERSION minor))
|
||||
|
||||
|
||||
;; 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 pckernel-version) ;; version of this settings
|
||||
|
||||
(discord-rpc? symbol) ;; enable discord rich presence integration
|
||||
(jetboard-trick-text? symbol) ;; enable rendering jetboard trick combo during minigame
|
||||
(display-heap-status symbol)
|
||||
)
|
||||
|
||||
(:methods
|
||||
(new (symbol type) _type_)
|
||||
(update (_type_) none)
|
||||
(update-to-os (_type_) none)
|
||||
(reset (_type_) none)
|
||||
(read-from-file (_type_ string) symbol)
|
||||
(load-settings (_type_) int)
|
||||
(write-to-file (_type_ string) symbol)
|
||||
(commit-to-file (_type_) none)
|
||||
)
|
||||
)
|
||||
|
||||
(deftype discord-info (structure)
|
||||
((orb-count (pointer float))
|
||||
(gem-count (pointer float))
|
||||
(death-count (pointer int32))
|
||||
(status string)
|
||||
(level string)
|
||||
(cutscene? symbol)
|
||||
(time-of-day (pointer float))
|
||||
(percent-complete float)))
|
||||
|
||||
(defconstant PC_TEMP_STRING_LEN 512)
|
||||
(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 string #f)))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; resets
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defmethod reset pc-settings ((obj pc-settings))
|
||||
"Set the default settings"
|
||||
(set! (-> obj version) PC_KERNEL_VERSION)
|
||||
(set! (-> obj discord-rpc?) #t)
|
||||
(set! (-> obj jetboard-trick-text?) #t)
|
||||
(set! (-> obj display-heap-status) #f)
|
||||
(none))
|
||||
|
||||
(defmacro with-pc (&rest body)
|
||||
"encapsulates the code around PC-specific checks"
|
||||
`(#when PC_PORT (when (and *pc-settings*)
|
||||
,@body
|
||||
))
|
||||
)
|
||||
@@ -0,0 +1,65 @@
|
||||
;;-*-Lisp-*-
|
||||
(in-package goal)
|
||||
|
||||
#|
|
||||
This file has the game-specific implementation of the pckernel (see pckernel-h.gc and pckernel.gc).
|
||||
|#
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; constants
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; version: 0.1.0.2
|
||||
(defconstant PC_KERNEL_VERSION (static-pckernel-version 0 1 0 2))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; types and enums
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; The Jak 2 version of the pc-settings object.
|
||||
(deftype pc-settings-jak2 (pc-settings)
|
||||
(
|
||||
(jetboard-trick-text? symbol) ;; enable rendering jetboard trick combo during minigame
|
||||
)
|
||||
)
|
||||
|
||||
(define *pc-settings* (the pc-settings-jak2 #f))
|
||||
|
||||
|
||||
;; jak 2 discord rpc structure
|
||||
(deftype discord-info (structure)
|
||||
((orb-count (pointer float))
|
||||
(gem-count (pointer float))
|
||||
(death-count (pointer int32))
|
||||
(status string)
|
||||
(level string)
|
||||
(cutscene? symbol)
|
||||
(time-of-day (pointer float))
|
||||
(percent-complete float)
|
||||
)
|
||||
)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; resets
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defmethod reset-misc pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
"Set the default misc settings"
|
||||
|
||||
((method-of-type pc-settings reset-misc) obj)
|
||||
(set! (-> obj jetboard-trick-text?) #t)
|
||||
(none))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; other
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defun get-video-params () *video-params*)
|
||||
|
||||
|
||||
|
||||
+89
-344
@@ -3,42 +3,62 @@
|
||||
|
||||
#|
|
||||
|
||||
This file contains new code that we need for the PC port of the game specifically.
|
||||
It should be included as part of the game engine package (engine.cgo).
|
||||
|
||||
This file contains various types and functions to store PC-specific information
|
||||
and also to communicate between the game (GOAL) and the operating system.
|
||||
This way we can poll, change and display information about the system the game
|
||||
is running on, such as:
|
||||
- display devices and their settings, such as fullscreen, DPI, refresh rate, etc.
|
||||
- audio devices and their settings, such as audio latency, channel number, etc.
|
||||
- graphics devices and their settings, such as resolution, FPS, anisotropy, shaders, etc.
|
||||
- input devices and their settings, such as controllers, keyboards, mice, etc.
|
||||
- information about the game window (position, size)
|
||||
- PC-specific goodies, enhancements, fixes and settings.
|
||||
- whatever else.
|
||||
|
||||
If you do not want to include these PC things, you should exclude it from the build system.
|
||||
This file runs the game-specific version of the pckernel.
|
||||
See pckernel-common.gc for the bulk of the pckernel.
|
||||
|
||||
|#
|
||||
|
||||
|
||||
(defmethod update-to-os pc-settings ((obj pc-settings))
|
||||
"Update settings from GOAL to the C kernel."
|
||||
(pc-discord-rpc-set (if (-> obj discord-rpc?) 1 0))
|
||||
(none))
|
||||
|
||||
(defmethod update pc-settings ((obj pc-settings))
|
||||
"Update settings to/from PC kernel. Call this at the start of every frame.
|
||||
This will update things like the aspect-ratio, which will be used for graphics code later."
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; methods
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(update-to-os obj)
|
||||
|
||||
(defmethod set-game-setting! pc-settings-jak2 ((obj pc-settings-jak2) (setting symbol) (value symbol))
|
||||
(case setting
|
||||
(('video-mode)
|
||||
(set! (-> *setting-control* user-current video-mode) #f)
|
||||
(set! (-> *setting-control* user-default video-mode) value)
|
||||
)
|
||||
(('aspect-ratio)
|
||||
(set! (-> *setting-control* user-default aspect-ratio) value)
|
||||
)
|
||||
(else
|
||||
(format #t "unknown setting ~A (~A) to set-game-setting!" setting value))
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod get-game-setting! pc-settings-jak2 ((obj pc-settings-jak2) (setting symbol))
|
||||
(case setting
|
||||
(('video-mode)
|
||||
(-> *setting-control* user-default video-mode)
|
||||
)
|
||||
(('aspect-ratio)
|
||||
(-> *setting-control* user-default aspect-ratio)
|
||||
)
|
||||
(else
|
||||
(format #t "unknown setting ~A to get-game-setting!" setting)
|
||||
#f)
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod set-game-language! pc-settings-jak2 ((obj pc-settings-jak2) (lang language-enum))
|
||||
(set! (-> *setting-control* user-default language) lang)
|
||||
)
|
||||
|
||||
(defmethod get-game-language! pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
(-> *setting-control* user-default language)
|
||||
)
|
||||
|
||||
(defmethod update-discord-rpc pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
"update discord rpc module"
|
||||
|
||||
(let ((info (new 'stack 'discord-info)))
|
||||
(set! (-> info orb-count) (&-> *game-info* skill-total))
|
||||
(set! (-> info gem-count) (&-> *game-info* gem-total))
|
||||
(set! (-> info death-count) (&-> *game-info* total-deaths))
|
||||
(set! (-> info status) "Playing Jak 2™")
|
||||
(set! (-> info status) "Playing Jak II™")
|
||||
;; grab the name of the level we're in
|
||||
(if (and *level* (level-get-target-inside *level*))
|
||||
(set! (-> info level) (symbol->string (-> (level-get-target-inside *level*) name)))
|
||||
@@ -50,343 +70,68 @@
|
||||
;; TODO - wrapping in `with-profiler` causes an error, fix it
|
||||
(pc-discord-rpc-update info)
|
||||
)
|
||||
|
||||
(none))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; file IO
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
(defmacro file-stream-seek-until (fs func-name)
|
||||
`(let ((done? #f)
|
||||
(tell -1))
|
||||
|
||||
(until done?
|
||||
|
||||
(let ((read (file-stream-read ,fs (-> *pc-temp-string* data) PC_TEMP_STRING_LEN)))
|
||||
(cond
|
||||
((zero? read)
|
||||
(set! (-> *pc-temp-string* data read) 0)
|
||||
(true! done?)
|
||||
)
|
||||
(else
|
||||
(dotimes (i read)
|
||||
(when (,func-name (-> *pc-temp-string* data i))
|
||||
(true! done?)
|
||||
(set! tell (+ i (- (file-stream-tell ,fs) read)))
|
||||
(set! i read)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
(if (!= tell -1)
|
||||
(file-stream-seek ,fs tell SCE_SEEK_SET)
|
||||
tell
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro file-stream-read-until (fs func-name)
|
||||
`(let ((read (file-stream-read ,fs (-> *pc-temp-string* data) PC_TEMP_STRING_LEN)))
|
||||
(dotimes (i read)
|
||||
(when (,func-name (-> *pc-temp-string* data i))
|
||||
(set! (-> *pc-temp-string* data i) 0)
|
||||
(file-stream-seek ,fs (+ i (- (file-stream-tell ,fs) read)) SCE_SEEK_SET)
|
||||
(set! i read)
|
||||
)
|
||||
)
|
||||
*pc-temp-string*
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro is-whitespace-or-bracket? (c)
|
||||
`(or (is-whitespace-char? ,c) (= #x28 ,c) (= #x29 ,c))
|
||||
)
|
||||
|
||||
(defun file-stream-seek-past-whitespace ((file file-stream))
|
||||
(file-stream-seek-until file not-whitespace-char?)
|
||||
)
|
||||
|
||||
(defun file-stream-read-word ((file file-stream))
|
||||
(file-stream-read-until file is-whitespace-or-bracket?)
|
||||
;(format 0 "word ~A~%" *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defmacro file-stream-getc (fs)
|
||||
`(let ((buf 255))
|
||||
(file-stream-read ,fs (& buf) 1)
|
||||
;(format 0 "getc got #x~X~%" buf)
|
||||
buf
|
||||
)
|
||||
)
|
||||
|
||||
(defun file-stream-read-int ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->int *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defun file-stream-read-float ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->float *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defun file-stream-read-symbol ((file file-stream))
|
||||
(file-stream-seek-past-whitespace file)
|
||||
(file-stream-read-word file)
|
||||
(string->symbol *pc-temp-string*)
|
||||
)
|
||||
|
||||
(defmacro pc-settings-read-throw-error (fs msg)
|
||||
"not an actual throw..."
|
||||
`(begin
|
||||
(format 0 "pc settings read error: ~S~%" ,msg)
|
||||
(file-stream-close ,fs)
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro with-settings-scope (bindings &rest body)
|
||||
(let ((fs (first bindings)))
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(when (!= #x28 (file-stream-getc ,fs))
|
||||
(pc-settings-read-throw-error ,fs "invalid char, ( not found")
|
||||
)
|
||||
|
||||
,@body
|
||||
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(when (!= #x29 (file-stream-getc ,fs))
|
||||
(pc-settings-read-throw-error ,fs "invalid char, ) not found")
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro file-stream-get-next-char-ret (fs)
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(let ((c (file-stream-getc ,fs)))
|
||||
(file-stream-seek ,fs -1 SCE_SEEK_CUR)
|
||||
c))
|
||||
)
|
||||
|
||||
(defmacro file-stream-get-next-char (fs)
|
||||
`(begin
|
||||
(file-stream-seek-past-whitespace ,fs)
|
||||
(file-stream-getc ,fs)
|
||||
)
|
||||
)
|
||||
|
||||
(defmacro dosettings (bindings &rest body)
|
||||
"iterate over a list of key-value pairs like so: (<key> <value>) (<key> <value>) ...
|
||||
the name of key is stored in *pc-temp-string*"
|
||||
(let ((fs (first bindings)))
|
||||
`(let ((c -1))
|
||||
(while (begin (file-stream-seek-past-whitespace ,fs) (set! c (file-stream-getc ,fs)) (= #x28 c))
|
||||
(file-stream-read-word ,fs)
|
||||
|
||||
,@body
|
||||
|
||||
(set! c (file-stream-get-next-char ,fs))
|
||||
(when (!= #x29 c)
|
||||
(pc-settings-read-throw-error ,fs (string-format "invalid char, ) not found, got #x~X ~A" c *pc-temp-string*))
|
||||
)
|
||||
)
|
||||
(file-stream-seek ,fs -1 SCE_SEEK_CUR)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod read-from-file pc-settings ((obj pc-settings) (filename string))
|
||||
"read settings from a file"
|
||||
|
||||
(if (not filename)
|
||||
(return #f))
|
||||
|
||||
(let ((file (new 'stack 'file-stream filename 'read)))
|
||||
(when (not (file-stream-valid? file))
|
||||
(return #f))
|
||||
|
||||
(let ((version PC_KERNEL_VERSION))
|
||||
(with-settings-scope (file)
|
||||
(case-str (file-stream-read-word file)
|
||||
(("settings")
|
||||
(set! version (the pckernel-version (file-stream-read-int file)))
|
||||
(cond
|
||||
((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_VER_MAJOR PC_KERNEL_VER_MINOR (-> version major) (-> version minor))
|
||||
(file-stream-close file)
|
||||
(return #f)
|
||||
)
|
||||
)
|
||||
(dosettings (file)
|
||||
(case-str *pc-temp-string*
|
||||
(("discord-rpc?") (set! (-> obj discord-rpc?) (file-stream-read-symbol file)))
|
||||
(("jetboard-trick-text?") (set! (-> obj jetboard-trick-text?) (file-stream-read-symbol file)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
(file-stream-close file)
|
||||
)
|
||||
|
||||
(format 0 "pc settings file read: ~A~%" filename)
|
||||
|
||||
#t
|
||||
)
|
||||
|
||||
(defmethod write-to-file pc-settings ((obj pc-settings) (filename string))
|
||||
"write settings to a file"
|
||||
|
||||
(if (not filename)
|
||||
(return #f))
|
||||
|
||||
(let ((file (new 'stack 'file-stream filename 'write)))
|
||||
(if (not (file-stream-valid? file))
|
||||
(return #f))
|
||||
|
||||
(format file "(settings #x~X~%" (-> obj version))
|
||||
(format file " (discord-rpc? ~A)~%" (-> obj discord-rpc?))
|
||||
(format file " (jetboard-trick-text? ~A)~%" (-> obj jetboard-trick-text?))
|
||||
(format file " )~%")
|
||||
(file-stream-close file)
|
||||
)
|
||||
|
||||
(format 0 "pc settings file write: ~A~%" filename)
|
||||
|
||||
#t
|
||||
)
|
||||
|
||||
(defmethod commit-to-file pc-settings ((obj pc-settings))
|
||||
"commits the current settings to the file"
|
||||
;; auto load settings if available
|
||||
|
||||
(format (clear *pc-temp-string-1*) "~S/pc-settings.gc" *pc-settings-folder*)
|
||||
(pc-mkdir-file-path *pc-temp-string-1*)
|
||||
;; symbol -> string in C++ nyi for jak2 symbols
|
||||
;; (write-to-file obj *pc-temp-string-1*)
|
||||
(none))
|
||||
|
||||
(defmethod load-settings pc-settings ((obj pc-settings))
|
||||
"load"
|
||||
|
||||
(format (clear *pc-temp-string-1*) "~S/pc-settings.gc" *pc-settings-folder*)
|
||||
(if (pc-filepath-exists? *pc-temp-string-1*)
|
||||
(begin
|
||||
(format 0 "[PC] PC Settings found at '~S'...loading!~%" *pc-temp-string-1*)
|
||||
(unless (read-from-file obj *pc-temp-string-1*)
|
||||
(format 0 "[PC] PC Settings found at '~S' but could not be loaded, using defaults!~%" *pc-temp-string-1*)
|
||||
(reset obj)))
|
||||
(format 0 "[PC] PC Settings not found at '~S'...initializing with defaults!~%" *pc-temp-string-1*))
|
||||
0)
|
||||
|
||||
(defmethod new pc-settings ((allocation symbol) (type-to-make type))
|
||||
"make a new pc-settings"
|
||||
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
||||
(reset obj)
|
||||
;; auto load settings if available
|
||||
;; if saved settings are corrupted or not found, use defaults
|
||||
(defmethod update-speedrun pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
"update speedrun module"
|
||||
|
||||
(load-settings obj)
|
||||
#f
|
||||
)
|
||||
|
||||
obj))
|
||||
(defmethod update-progress-video-hacks pc-settings-jak2 ((obj pc-settings-jak2))
|
||||
"update the graphics hacks used for the progress menu. ugh."
|
||||
|
||||
#f
|
||||
)
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; file I/O
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(defmethod handle-input-settings pc-settings-jak2 ((obj pc-settings-jak2) (file file-stream))
|
||||
"handle the text parsing input for the 'settings' group"
|
||||
|
||||
((method-of-type pc-settings handle-input-settings) obj file)
|
||||
(case-str *pc-temp-string*
|
||||
(("jetboard-trick-text?") (set! (-> obj jetboard-trick-text?) (file-stream-read-symbol file)))
|
||||
)
|
||||
0)
|
||||
|
||||
(defmethod handle-output-settings pc-settings-jak2 ((obj pc-settings-jak2) (file file-stream))
|
||||
"handle the text writing output for the 'settings' group"
|
||||
|
||||
((method-of-type pc-settings handle-output-settings) obj file)
|
||||
(format file " (jetboard-trick-text? ~A)~%" (-> obj jetboard-trick-text?))
|
||||
0)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; PC settings
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
(define *pc-settings* (new 'global 'pc-settings))
|
||||
(define *pc-settings* (new 'global 'pc-settings-jak2))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; entity debugging
|
||||
;;;; other
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(when *debug-segment*
|
||||
|
||||
(deftype entity-debug-inspect (basic)
|
||||
((scroll-y int16)
|
||||
(scroll-y-max int16)
|
||||
(entity entity)
|
||||
(show-actor-info symbol)
|
||||
)
|
||||
(:methods
|
||||
(new (symbol type) _type_)
|
||||
(set-entity! (_type_ entity) entity)
|
||||
(update-pad (_type_ int) none)
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod new entity-debug-inspect ((allocation symbol) (type-to-make type))
|
||||
"make a new entity-debug-inspect object"
|
||||
|
||||
(let ((obj (object-new allocation type-to-make (the-as int (-> type-to-make size)))))
|
||||
|
||||
(set! (-> obj scroll-y) 0)
|
||||
(set! (-> obj scroll-y-max) 0)
|
||||
(set! (-> obj entity) (the entity #f))
|
||||
(set! (-> obj show-actor-info) #f)
|
||||
obj
|
||||
)
|
||||
)
|
||||
|
||||
(defmethod set-entity! entity-debug-inspect ((obj entity-debug-inspect) (e entity))
|
||||
"set the entity to inspect"
|
||||
|
||||
(set! (-> obj entity) e)
|
||||
(unless e
|
||||
(set! *debug-actor* (the string #f)))
|
||||
(set! (-> obj scroll-y) 0)
|
||||
|
||||
e
|
||||
)
|
||||
|
||||
(defmethod update-pad entity-debug-inspect ((obj entity-debug-inspect) (pad-idx int))
|
||||
"respond to pad inputs"
|
||||
|
||||
;; scroll up
|
||||
(if (cpad-pressed? pad-idx l1)
|
||||
(1-! (-> obj scroll-y)))
|
||||
;; scroll down
|
||||
(if (cpad-pressed? pad-idx r1)
|
||||
(1+! (-> obj scroll-y)))
|
||||
;; toggle actor info
|
||||
(if (cpad-pressed? pad-idx l3)
|
||||
(not! (-> obj show-actor-info)))
|
||||
|
||||
(minmax! (-> obj scroll-y) 0 (-> obj scroll-y-max))
|
||||
|
||||
(none))
|
||||
|
||||
(define *entity-debug-display-part* #f) ;; toggle for displaying part ents in the entity list
|
||||
(define *entity-debug-inspect* (new 'debug 'entity-debug-inspect))
|
||||
|
||||
) ;; when debug_segment
|
||||
(defun draw-build-revision ()
|
||||
(with-dma-buffer-add-bucket ((buf (-> (current-frame) global-buf))
|
||||
(bucket-id debug-no-zbuf1))
|
||||
(draw-string-xy *pc-settings-built-sha*
|
||||
buf
|
||||
0 10
|
||||
(font-color flat-yellow)
|
||||
(font-flags shadow kerning))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;; process pools
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
;; the actor pool for PC processes! it has space for 4 processes, with 16K of space.
|
||||
(define *pc-dead-pool* (new 'global 'dead-pool 4 (* 16 1024) "*pc-dead-pool*"))
|
||||
(define *pc-dead-pool* (new 'global 'dead-pool 4 (* 16 1024) "*pc-dead-pool*"))
|
||||
|
||||
|
||||
+39
-17
@@ -76,6 +76,11 @@ MakeSystem::MakeSystem(const std::string& username) : m_goos(username) {
|
||||
return handle_set_gsrc_folder(obj, args, env);
|
||||
});
|
||||
|
||||
m_goos.register_form("get-gsrc-folder", [=](const goos::Object& obj, goos::Arguments& args,
|
||||
const std::shared_ptr<goos::EnvironmentObject>& env) {
|
||||
return handle_get_gsrc_folder(obj, args, env);
|
||||
});
|
||||
|
||||
m_goos.set_global_variable_to_symbol("ASSETS", "#t");
|
||||
|
||||
set_constant("*iso-data*", file_util::get_file_path({"iso_data"}));
|
||||
@@ -209,28 +214,13 @@ goos::Object MakeSystem::handle_get_gsrc_path(const goos::Object& form,
|
||||
goos::Arguments& args,
|
||||
const std::shared_ptr<goos::EnvironmentObject>& env) {
|
||||
if (m_gsrc_folder.empty()) {
|
||||
throw std::runtime_error("`set-gsrc-folder!` was not called before a `get-src-path`");
|
||||
throw std::runtime_error("`set-gsrc-folder!` was not called before a `get-gsrc-path`");
|
||||
}
|
||||
m_goos.eval_args(&args, env);
|
||||
va_check(form, args, {goos::ObjectType::STRING}, {});
|
||||
|
||||
const auto& file_name = args.unnamed.at(0).as_string()->data;
|
||||
|
||||
// Keep things fast by scanning the gsrc directory _once_ on the first call
|
||||
if (m_gsrc_files.empty()) {
|
||||
auto folder = file_util::get_file_path(m_gsrc_folder);
|
||||
auto src_files = file_util::find_files_recursively(folder, std::regex(".*\\.gc"));
|
||||
|
||||
for (const auto& path : src_files) {
|
||||
auto name = file_util::base_name_no_ext(path.u8string());
|
||||
auto gsrc_path =
|
||||
file_util::convert_to_unix_path_separators(file_util::split_path_at(path, m_gsrc_folder));
|
||||
// TODO - this is only "safe" because the current OpenGOAL system requires globally unique
|
||||
// file names
|
||||
m_gsrc_files.emplace(name, gsrc_path);
|
||||
}
|
||||
}
|
||||
|
||||
if (m_gsrc_files.count(file_name) != 0) {
|
||||
return goos::StringObject::make_new(m_gsrc_files.at(file_name));
|
||||
} else {
|
||||
@@ -271,7 +261,39 @@ goos::Object MakeSystem::handle_set_gsrc_folder(
|
||||
|
||||
const auto& folder = args.unnamed.at(0).as_string()->data;
|
||||
m_gsrc_folder = str_util::split(folder, '/');
|
||||
return goos::Object::make_empty_list();
|
||||
m_gsrc_files.clear();
|
||||
|
||||
auto folder_scan = file_util::get_file_path(m_gsrc_folder);
|
||||
auto src_files = file_util::find_files_recursively(folder_scan, std::regex(".*\\.gc"));
|
||||
|
||||
for (const auto& path : src_files) {
|
||||
auto name = file_util::base_name_no_ext(path.u8string());
|
||||
auto gsrc_path =
|
||||
file_util::convert_to_unix_path_separators(file_util::split_path_at(path, m_gsrc_folder));
|
||||
// TODO - this is only "safe" because the current OpenGOAL system requires globally unique
|
||||
// file names
|
||||
m_gsrc_files.emplace(name, gsrc_path);
|
||||
}
|
||||
|
||||
return args.unnamed.at(0);
|
||||
}
|
||||
|
||||
goos::Object MakeSystem::handle_get_gsrc_folder(
|
||||
const goos::Object& form,
|
||||
goos::Arguments& args,
|
||||
const std::shared_ptr<goos::EnvironmentObject>& env) {
|
||||
m_goos.eval_args(&args, env);
|
||||
va_check(form, args, {}, {});
|
||||
|
||||
std::string out;
|
||||
int idx = 0;
|
||||
for (const auto& part : m_gsrc_folder) {
|
||||
if (idx++ > 0) {
|
||||
out += '/';
|
||||
}
|
||||
out += part;
|
||||
}
|
||||
return goos::StringObject::make_new(out);
|
||||
}
|
||||
|
||||
void MakeSystem::get_dependencies(const std::string& master_target,
|
||||
|
||||
@@ -46,6 +46,10 @@ class MakeSystem {
|
||||
goos::Arguments& args,
|
||||
const std::shared_ptr<goos::EnvironmentObject>& env);
|
||||
|
||||
goos::Object handle_get_gsrc_folder(const goos::Object& obj,
|
||||
goos::Arguments& args,
|
||||
const std::shared_ptr<goos::EnvironmentObject>& env);
|
||||
|
||||
std::vector<std::string> get_dependencies(const std::string& target) const;
|
||||
std::vector<std::string> filter_dependencies(const std::vector<std::string>& all_deps);
|
||||
|
||||
|
||||
+3
-11
@@ -276,17 +276,9 @@
|
||||
;; definition for method 17 of type talker
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
(defmethod talker-method-17 talker ((obj talker))
|
||||
(let ((gp-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
36
|
||||
310
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-0
|
||||
(new 'stack 'font-context *font-default-matrix* 36 310 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((f0-0 320.0))
|
||||
(let ((v1-2 gp-0))
|
||||
|
||||
+13
-21
@@ -42,8 +42,7 @@
|
||||
|
||||
;; definition (debug) for function add-debug-point
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ a0-6 8) 0) at op 152
|
||||
;; WARN: Failed store: (s.w! (+ a0-6 12) 0) at op 153
|
||||
;; ERROR: Failed store: (s.w! (+ a0-6 8) 0) at op 152
|
||||
(defun-debug add-debug-point ((enable-draw symbol) (bucket bucket-id) (pt vector))
|
||||
(if (not enable-draw)
|
||||
(return #f)
|
||||
@@ -157,8 +156,7 @@
|
||||
|
||||
;; definition (debug) for function internal-draw-debug-line
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ a0-29 8) 0) at op 271
|
||||
;; WARN: Failed store: (s.w! (+ a0-29 12) 0) at op 272
|
||||
;; ERROR: Failed store: (s.w! (+ a0-29 8) 0) at op 271
|
||||
(defun-debug internal-draw-debug-line ((bucket bucket-id) (start vector) (end vector) (start-color rgba) (mode symbol) (end-color rgba))
|
||||
(local-vars (var-end vector) (sv-128 vector) (sv-144 vector))
|
||||
(set! var-end end)
|
||||
@@ -292,8 +290,7 @@
|
||||
|
||||
;; definition (debug) for function internal-draw-debug-text-3d
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ v1-12 8) 0) at op 54
|
||||
;; WARN: Failed store: (s.w! (+ v1-12 12) 0) at op 55
|
||||
;; ERROR: Failed store: (s.w! (+ v1-12 8) 0) at op 54
|
||||
(defun-debug internal-draw-debug-text-3d ((bucket bucket-id) (text string) (position vector) (color font-color) (screen-offset vector2h))
|
||||
(let ((screen-pos (new 'stack-no-clear 'vector4w)))
|
||||
(set! (-> screen-pos quad) (the-as uint128 0))
|
||||
@@ -352,8 +349,7 @@
|
||||
|
||||
;; definition (debug) for function add-debug-flat-triangle
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ a0-13 8) 0) at op 153
|
||||
;; WARN: Failed store: (s.w! (+ a0-13 12) 0) at op 154
|
||||
;; ERROR: Failed store: (s.w! (+ a0-13 8) 0) at op 153
|
||||
(defun-debug add-debug-flat-triangle ((enable symbol) (bucket bucket-id) (p0 vector) (p1 vector) (p2 vector) (color rgba))
|
||||
(local-vars (sv-160 vector) (sv-176 vector))
|
||||
(set! sv-160 p0)
|
||||
@@ -660,8 +656,7 @@
|
||||
|
||||
;; definition (debug) for function add-debug-line2d
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ v1-12 8) 0) at op 115
|
||||
;; WARN: Failed store: (s.w! (+ v1-12 12) 0) at op 116
|
||||
;; ERROR: Failed store: (s.w! (+ v1-12 8) 0) at op 115
|
||||
(defun-debug add-debug-line2d ((enable symbol) (bucket bucket-id) (start vector4w) (end vector4w) (color vector4w))
|
||||
(if (not enable)
|
||||
(return #f)
|
||||
@@ -1025,7 +1020,7 @@
|
||||
;; definition (debug) for function add-debug-text-sphere
|
||||
(defun-debug add-debug-text-sphere ((enable symbol) (bucket bucket-id) (position vector) (radius meters) (text string) (color rgba))
|
||||
(add-debug-sphere enable bucket position radius color)
|
||||
(add-debug-text-3d enable bucket text position (font-color default-#cddbcd) (the-as vector2h #f))
|
||||
(add-debug-text-3d enable bucket text position (font-color default) (the-as vector2h #f))
|
||||
#f
|
||||
)
|
||||
|
||||
@@ -1443,8 +1438,7 @@
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Stack slot offset 32 signed mismatch
|
||||
;; WARN: Stack slot offset 32 signed mismatch
|
||||
;; WARN: Failed store: (s.w! (+ v1-9 8) 0) at op 47
|
||||
;; WARN: Failed store: (s.w! (+ v1-9 12) 0) at op 48
|
||||
;; ERROR: Failed store: (s.w! (+ v1-9 8) 0) at op 47
|
||||
(defun-debug debug-percent-bar ((enable symbol) (bucket bucket-id) (x int) (y int) (percentage float) (color rgba) (width int) (height int))
|
||||
(local-vars (sv-16 int) (sv-32 float))
|
||||
(set! sv-16 y)
|
||||
@@ -1468,8 +1462,7 @@
|
||||
|
||||
;; definition (debug) for function debug-pad-display
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Failed store: (s.w! (+ v1-16 8) 0) at op 75
|
||||
;; WARN: Failed store: (s.w! (+ v1-16 12) 0) at op 76
|
||||
;; ERROR: Failed store: (s.w! (+ v1-16 8) 0) at op 75
|
||||
(defun-debug debug-pad-display ((pad cpad-info))
|
||||
(let ((stick-history (new 'static 'inline-array vector 32
|
||||
(new 'static 'vector)
|
||||
@@ -1619,6 +1612,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 3 of type debug-vertex-stats
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod inspect debug-vertex-stats ((obj debug-vertex-stats))
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~Tlength: ~D~%" (-> obj length))
|
||||
@@ -1741,8 +1735,7 @@
|
||||
;; definition (debug) for function add-debug-cursor
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; WARN: Failed store: (s.w! (+ v1-9 8) 0) at op 38
|
||||
;; WARN: Failed store: (s.w! (+ v1-9 12) 0) at op 39
|
||||
;; ERROR: Failed store: (s.w! (+ v1-9 8) 0) at op 38
|
||||
(defun-debug add-debug-cursor ((enable symbol) (bucket bucket-id) (x int) (y int) (arg4 int))
|
||||
(when enable
|
||||
(with-dma-buffer-add-bucket ((buf (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
@@ -1757,7 +1750,7 @@
|
||||
(+ y -4)
|
||||
(cond
|
||||
((= v1-7 1)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
)
|
||||
((= v1-7 2)
|
||||
(font-color yellow-#f3f300)
|
||||
@@ -1766,7 +1759,7 @@
|
||||
(font-color green-#3df23d)
|
||||
)
|
||||
(else
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
)
|
||||
)
|
||||
(font-flags shadow)
|
||||
@@ -1901,8 +1894,7 @@
|
||||
;; definition (debug) for function add-debug-bound
|
||||
;; INFO: Used lq/sq
|
||||
;; WARN: Return type mismatch int vs none.
|
||||
;; WARN: Failed store: (s.w! (+ v1-29 8) 0) at op 110
|
||||
;; WARN: Failed store: (s.w! (+ v1-29 12) 0) at op 111
|
||||
;; ERROR: Failed store: (s.w! (+ v1-29 8) 0) at op 110
|
||||
;; WARN: Function add-debug-bound has a return type of none, but the expression builder found a return statement.
|
||||
(defun-debug add-debug-bound ((buf bucket-id) (pts (inline-array vector)) (c0 int) (c1 rgba) (flash rgba) (arg5 int))
|
||||
(local-vars (sv-16 pointer) (sv-32 int))
|
||||
|
||||
+2
-10
@@ -53,16 +53,8 @@
|
||||
(set! (-> gp-0 root-menu) #f)
|
||||
(set! (-> gp-0 joypad-func) #f)
|
||||
(set! (-> gp-0 joypad-item) #f)
|
||||
(set! (-> gp-0 font) (new
|
||||
'debug
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
(set! (-> gp-0 font)
|
||||
(new 'debug 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
(set! (-> gp-0 joypad-number) 0)
|
||||
gp-0
|
||||
|
||||
+3
-1
@@ -71,6 +71,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 3 of type actor-group
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod inspect actor-group ((obj actor-group))
|
||||
(format #t "[~8x] ~A~%" obj (-> obj type))
|
||||
(format #t "~Tlength: ~D~%" (-> obj length))
|
||||
@@ -530,6 +531,7 @@
|
||||
)
|
||||
|
||||
;; definition for method 2 of type process
|
||||
;; INFO: this function exists in multiple non-identical object files
|
||||
(defmethod print process ((obj process))
|
||||
(cond
|
||||
((and (-> obj top-thread) (!= (-> obj status) 'dead))
|
||||
@@ -1307,7 +1309,7 @@
|
||||
(res-lump-struct sv-16 'name string)
|
||||
(-> (the-as process-drawable arg0) root trans)
|
||||
(if (logtest? (-> sv-16 extra perm status) (entity-perm-status bit-0 bit-1))
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-color #dadada)
|
||||
)
|
||||
(new 'static 'vector2h :data (new 'static 'array int16 2 0 8))
|
||||
|
||||
+7
-24
@@ -1878,21 +1878,12 @@
|
||||
)
|
||||
|
||||
;; definition for function auto-save-post
|
||||
;; WARN: Failed store: (s.w! (+ v1-45 8) 0) at op 192
|
||||
;; WARN: Failed store: (s.w! (+ v1-45 12) 0) at op 193
|
||||
;; ERROR: Failed store: (s.w! (+ v1-45 8) 0) at op 192
|
||||
(defbehavior auto-save-post auto-save ()
|
||||
(when (and (= *cheat-mode* 'debug) (cpad-hold? 0 l3))
|
||||
(let ((gp-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-0
|
||||
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-5 gp-0))
|
||||
(set! (-> v1-5 width) (the float 440))
|
||||
@@ -1906,17 +1897,9 @@
|
||||
)
|
||||
)
|
||||
(when (and (= (-> self mode) 'auto-save) (not (and (-> self next-state) (= (-> self next-state name) 'done))))
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
20
|
||||
80
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 20 80 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-17 gp-1))
|
||||
(set! (-> v1-17 scale) 0.8)
|
||||
|
||||
+4
-4
@@ -1259,7 +1259,7 @@
|
||||
(when *display-deci-count*
|
||||
(let ((s2-0 draw-string-xy))
|
||||
(format (clear *temp-string*) "~D" *deci-count*)
|
||||
(s2-0 *temp-string* s3-0 448 210 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s2-0 *temp-string* s3-0 448 210 (font-color default) (font-flags shadow))
|
||||
)
|
||||
)
|
||||
(display-file-info)
|
||||
@@ -1283,7 +1283,7 @@
|
||||
352
|
||||
320
|
||||
)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-flags shadow kerning middle large)
|
||||
)
|
||||
)
|
||||
@@ -1303,7 +1303,7 @@
|
||||
s3-1
|
||||
(the int (-> *font-context* origin x))
|
||||
s2-2
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -1314,7 +1314,7 @@
|
||||
s3-1
|
||||
(the int (-> *font-context* origin x))
|
||||
a3-6
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@
|
||||
(the-as bucket-id s3-0)
|
||||
*temp-string*
|
||||
(-> obj process root trans)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
)
|
||||
@@ -424,7 +424,7 @@ using the fractional component of `idx` as the interpolant, return this result
|
||||
(the-as bucket-id s3-0)
|
||||
*temp-string*
|
||||
(-> obj process root trans)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
)
|
||||
|
||||
+3
-11
@@ -69,17 +69,9 @@
|
||||
)
|
||||
|
||||
;; definition for symbol *font-context*, type font-context
|
||||
(define *font-context* (new
|
||||
'global
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(define *font-context*
|
||||
(new 'global 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
|
||||
;; definition for function draw-sprite2d-xy
|
||||
;; WARN: Return type mismatch pointer vs none.
|
||||
|
||||
+1
-8
@@ -615,14 +615,7 @@
|
||||
(s2-0 318)
|
||||
)
|
||||
(format (clear *temp-string*) "~2j~s error for ~s" arg0 (-> self name))
|
||||
(s4-0
|
||||
s3-0
|
||||
(the-as bucket-id s2-0)
|
||||
*temp-string*
|
||||
(the-as vector s5-1)
|
||||
(font-color precursor-#ec3b00)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
(s4-0 s3-0 (the-as bucket-id s2-0) *temp-string* (the-as vector s5-1) (font-color red) (the-as vector2h #f))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
+3
-11
@@ -216,17 +216,9 @@ Seen take in - `true-func` which takes no args TODO - seems fishy
|
||||
(kill-current-talker (the-as symbol '()) '(daxter voicebox ambient) 'exit)
|
||||
(talker-surpress!)
|
||||
(when (can-display-query? self (the-as string #f) -99.0)
|
||||
(let ((s5-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((s5-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-84 s5-1))
|
||||
(set! (-> v1-84 width) (the float 340))
|
||||
|
||||
+1
-1
@@ -154,7 +154,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(draw-string-xy *temp-string* arg0 32 (+ (* 12 s4-0) 8) (font-color precursor-#ec3b00) (font-flags shadow))
|
||||
(draw-string-xy *temp-string* arg0 32 (+ (* 12 s4-0) 8) (font-color red) (font-flags shadow))
|
||||
)
|
||||
)
|
||||
0
|
||||
|
||||
+7
-23
@@ -956,17 +956,9 @@
|
||||
(when (and (>= f30-0 (-> v1-16 start-frame)) (< f30-0 (-> v1-16 end-frame)))
|
||||
(let ((s3-0 (-> v1-16 message s5-0)))
|
||||
(when (and s3-0 (nonzero? s3-0))
|
||||
(let ((s2-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
20
|
||||
290
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((s2-0
|
||||
(new 'stack 'font-context *font-default-matrix* 20 290 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-20 s2-0))
|
||||
(set! (-> v1-20 width) (the float 465))
|
||||
@@ -992,7 +984,7 @@
|
||||
(set! (-> s2-0 color) (font-color #000000))
|
||||
(set! (-> s2-0 origin x) (+ 1.0 (-> s2-0 origin x)))
|
||||
(set! (-> s2-0 origin y) (+ 1.0 (-> s2-0 origin y)))
|
||||
(set! (-> s2-0 color) (font-color default-#cddbcd))
|
||||
(set! (-> s2-0 color) (font-color default))
|
||||
(set! (-> s2-0 flags) (font-flags shadow kerning middle left large))
|
||||
(print-game-text (the-as string s3-0) s2-0 #f 44 (bucket-id bucket-322))
|
||||
(gui-control-method-12
|
||||
@@ -1611,17 +1603,9 @@
|
||||
(when (and (< (- (-> self clock frame-counter) (-> self subtitle-change-time)) (seconds 2))
|
||||
(< (mod (- (-> self clock frame-counter) (-> self subtitle-change-time)) 300) 210)
|
||||
)
|
||||
(let ((gp-6 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
36
|
||||
60
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-6
|
||||
(new 'stack 'font-context *font-default-matrix* 36 60 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-121 gp-6))
|
||||
(set! (-> v1-121 width) (the float 440))
|
||||
|
||||
+6
-6
@@ -1147,7 +1147,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
arg0
|
||||
(+ (* s5-0 16) 16)
|
||||
48
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -1160,7 +1160,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
arg0
|
||||
(+ (* s5-1 16) 16)
|
||||
64
|
||||
(font-color default-#cddbcd)
|
||||
(font-color default)
|
||||
(font-flags shadow)
|
||||
)
|
||||
)
|
||||
@@ -1172,7 +1172,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
(-> *level* sound-bank 1)
|
||||
(-> *level* sound-bank 2)
|
||||
)
|
||||
(s5-2 *temp-string* arg0 16 88 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-2 *temp-string* arg0 16 88 (font-color default) (font-flags shadow))
|
||||
)
|
||||
(let ((s5-3 draw-string-xy))
|
||||
(format
|
||||
@@ -1185,7 +1185,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
(-> *setting-control* user-current sound-excitement)
|
||||
(-> *setting-control* user-current mode-sound-bank)
|
||||
)
|
||||
(s5-3 *temp-string* arg0 16 104 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-3 *temp-string* arg0 16 104 (font-color default) (font-flags shadow))
|
||||
)
|
||||
0
|
||||
)
|
||||
@@ -1199,7 +1199,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
(-> *sound-iop-info* freemem)
|
||||
(shr (-> *sound-iop-info* freemem) 10)
|
||||
)
|
||||
(s5-0 *temp-string* arg0 32 96 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-0 *temp-string* arg0 32 96 (font-color default) (font-flags shadow))
|
||||
)
|
||||
(let ((s5-1 draw-string-xy))
|
||||
(format
|
||||
@@ -1208,7 +1208,7 @@ otherwise, an explicit [[vector]] can be provided"
|
||||
(-> *sound-iop-info* freemem2)
|
||||
(shr (-> *sound-iop-info* freemem2) 10)
|
||||
)
|
||||
(s5-1 *temp-string* arg0 32 64 (font-color default-#cddbcd) (font-flags shadow))
|
||||
(s5-1 *temp-string* arg0 32 64 (font-color default) (font-flags shadow))
|
||||
)
|
||||
0
|
||||
)
|
||||
|
||||
+3
-11
@@ -188,17 +188,9 @@
|
||||
(can-display-query? self (the-as string #f) -99.0)
|
||||
(-> *setting-control* user-current pilot)
|
||||
)
|
||||
(let ((gp-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-0
|
||||
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-31 gp-0))
|
||||
(set! (-> v1-31 width) (the float 340))
|
||||
|
||||
+3
-15
@@ -1165,17 +1165,9 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-21 gp-1))
|
||||
(set! (-> v1-21 width) (the float 340))
|
||||
@@ -2823,7 +2815,3 @@ This commonly includes things such as:
|
||||
(none)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+3
-15
@@ -7,17 +7,9 @@
|
||||
(s5-0 3839)
|
||||
(f28-0 0.0)
|
||||
(s3-0 #t)
|
||||
(s4-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
6
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(s4-0
|
||||
(new 'stack 'font-context *font-default-matrix* 6 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-2 s4-0))
|
||||
(set! (-> v1-2 width) (the float 500))
|
||||
@@ -1064,7 +1056,3 @@
|
||||
(sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0)
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+3
-12
@@ -1396,8 +1396,7 @@
|
||||
)
|
||||
|
||||
;; definition for function end-scan
|
||||
;; WARN: Failed store: (s.w! (+ v1-8 8) 0) at op 19
|
||||
;; WARN: Failed store: (s.w! (+ v1-8 12) 0) at op 20
|
||||
;; ERROR: Failed store: (s.w! (+ v1-8 8) 0) at op 19
|
||||
(defun end-scan ((arg0 hud-box) (arg1 float))
|
||||
(with-dma-buffer-add-bucket ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf))
|
||||
(bucket-id progress)
|
||||
@@ -1432,16 +1431,8 @@
|
||||
(s4-0 (-> self current-options y-center))
|
||||
(s5-0 (-> self current-options y-space))
|
||||
)
|
||||
(set! sv-144 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
(set! sv-144
|
||||
(new 'stack 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
(set! sv-148 (- s4-0 (/ (* s5-0 (length gp-0)) 2)))
|
||||
(set! sv-152 (new 'stack-no-clear 'hud-box))
|
||||
|
||||
+8
-8
@@ -681,8 +681,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-0 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -697,8 +697,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-0 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -732,8 +732,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-1 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
@@ -748,8 +748,8 @@
|
||||
488
|
||||
arg1
|
||||
(if (>= f30-1 100.0)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color default-#cddbcd)
|
||||
(font-color red)
|
||||
(font-color default)
|
||||
)
|
||||
(font-flags shadow right)
|
||||
)
|
||||
|
||||
+1
-5
@@ -126,7 +126,7 @@
|
||||
*temp-string*
|
||||
gp-0
|
||||
(if (logtest? (-> obj flags) (nav-node-flag-byte blocked))
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
(font-color cyan-#00fefe)
|
||||
)
|
||||
(the-as vector2h #f)
|
||||
@@ -1469,7 +1469,3 @@ and patched at runtime after loading."
|
||||
)
|
||||
(none)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1224,7 +1224,7 @@ Process is recycled and moved to reserved, if it deactivates."
|
||||
sv-84
|
||||
(if (< (-> sv-20 user-count) (-> sv-20 max-user-count))
|
||||
(font-color yellow-#f3f300)
|
||||
(font-color precursor-#ec3b00)
|
||||
(font-color red)
|
||||
)
|
||||
(the-as vector2h #f)
|
||||
)
|
||||
|
||||
+3
-11
@@ -389,17 +389,9 @@ This commonly includes things such as:
|
||||
(can-display-query? obj (the-as string #f) (/ 1.0 (-> s5-0 floats 3)))
|
||||
)
|
||||
)
|
||||
(let ((s3-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((s3-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-97 s3-1))
|
||||
(set! (-> v1-97 width) (the float 340))
|
||||
|
||||
+12
-44
@@ -82,17 +82,9 @@
|
||||
(send-event *target* 'change-mode 'darkjak #f 65)
|
||||
)
|
||||
(when (= (get-status *gui-control* (-> self sound-id 0)) (gui-status active))
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> gp-1 flags) (font-flags shadow kerning large))
|
||||
(let ((v1-14 gp-1))
|
||||
@@ -196,17 +188,9 @@
|
||||
(send-event *target* 'change-mode 'darkjak #f 65)
|
||||
)
|
||||
(when (= (get-status *gui-control* (-> self sound-id 0)) (gui-status active))
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> gp-1 flags) (font-flags shadow kerning large))
|
||||
(let ((v1-14 gp-1))
|
||||
@@ -289,17 +273,9 @@
|
||||
(send-event *target* 'change-mode 'darkjak #f 65)
|
||||
)
|
||||
(when (= (get-status *gui-control* (-> self sound-id 0)) (gui-status active))
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> gp-1 flags) (font-flags shadow kerning large))
|
||||
(let ((v1-14 gp-1))
|
||||
@@ -404,17 +380,9 @@
|
||||
(send-event *target* 'change-mode 'darkjak #f 65)
|
||||
)
|
||||
(when (= (get-status *gui-control* (-> self sound-id 0)) (gui-status active))
|
||||
(let ((gp-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> gp-1 flags) (font-flags shadow kerning large))
|
||||
(let ((v1-14 gp-1))
|
||||
|
||||
+3
-16
@@ -313,16 +313,7 @@
|
||||
(s3-0 (+ s4-0 3))
|
||||
)
|
||||
(let ((s1-0
|
||||
(new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
0
|
||||
0
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
(new 'stack 'font-context *font-default-matrix* 0 0 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> obj strings 0 scale) 0.0)
|
||||
@@ -335,7 +326,7 @@
|
||||
(set! (-> v1-16 height) (the float 80))
|
||||
)
|
||||
(let ((a0-12 s1-0))
|
||||
(set! (-> a0-12 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> a0-12 color) (font-color red))
|
||||
)
|
||||
(let ((a0-13 s1-0))
|
||||
(set! (-> a0-13 flags) (font-flags kerning middle left large))
|
||||
@@ -476,7 +467,7 @@
|
||||
(alloc-string-if-needed obj s5-0)
|
||||
)
|
||||
(set! (-> obj strings 0 flags) (font-flags kerning middle large))
|
||||
(set! (-> obj strings 0 color) (font-color precursor-#ec3b00))
|
||||
(set! (-> obj strings 0 color) (font-color red))
|
||||
(set! (-> obj strings 1 flags) (font-flags kerning large))
|
||||
(set! (-> obj strings 1 color) (font-color #dadada))
|
||||
(set! (-> obj strings 2 flags) (font-flags kerning large))
|
||||
@@ -484,7 +475,3 @@
|
||||
0
|
||||
(none)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+3
-11
@@ -621,17 +621,9 @@
|
||||
(new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f))
|
||||
(-> self on-close)
|
||||
)
|
||||
(let ((gp-0 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
320
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((gp-0
|
||||
(new 'stack 'font-context *font-default-matrix* 32 320 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(let ((v1-51 gp-0))
|
||||
(set! (-> v1-51 width) (the float 340))
|
||||
|
||||
+2
-10
@@ -552,16 +552,8 @@
|
||||
(return (the-as object (-> self selected)))
|
||||
)
|
||||
)
|
||||
(set! sv-112 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
64
|
||||
312
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
(set! sv-112
|
||||
(new 'stack 'font-context *font-default-matrix* 64 312 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
(let ((v1-25 sv-112))
|
||||
(set! (-> v1-25 width) (the float 384))
|
||||
|
||||
+3
-11
@@ -286,17 +286,9 @@ This commonly includes things such as:
|
||||
;; definition for method 30 of type training-manager
|
||||
(defmethod render-text training-manager ((obj training-manager) (arg0 game-text-id))
|
||||
(when (= (get-status *gui-control* (-> obj gui-id)) (gui-status active))
|
||||
(let ((s5-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
290
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((s5-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 290 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> s5-1 flags) (font-flags shadow kerning left large))
|
||||
(let ((v1-4 s5-1))
|
||||
|
||||
+3
-11
@@ -100,17 +100,9 @@
|
||||
;; definition for method 28 of type hoverboard-training-manager
|
||||
(defmethod render-text hoverboard-training-manager ((obj hoverboard-training-manager) (arg0 game-text-id))
|
||||
(when (= (get-status *gui-control* (-> obj gui-id)) (gui-status active))
|
||||
(let ((s5-1 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
32
|
||||
280
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
)
|
||||
(let ((s5-1
|
||||
(new 'stack 'font-context *font-default-matrix* 32 280 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
)
|
||||
(set! (-> s5-1 flags) (font-flags shadow kerning large))
|
||||
(let ((v1-4 s5-1))
|
||||
|
||||
+2
-10
@@ -560,16 +560,8 @@
|
||||
)
|
||||
)
|
||||
(when (< (mod (-> self clock frame-counter) 300) 210)
|
||||
(set! sv-112 (new
|
||||
'stack
|
||||
'font-context
|
||||
*font-default-matrix*
|
||||
64
|
||||
312
|
||||
0.0
|
||||
(font-color default-#cddbcd)
|
||||
(font-flags shadow kerning)
|
||||
)
|
||||
(set! sv-112
|
||||
(new 'stack 'font-context *font-default-matrix* 64 312 0.0 (font-color default) (font-flags shadow kerning))
|
||||
)
|
||||
(let ((v1-35 sv-112))
|
||||
(set! (-> v1-35 width) (the float 384))
|
||||
|
||||
Reference in New Issue
Block a user