mirror of
https://github.com/open-goal/jak-project
synced 2026-07-11 07:25:37 -04:00
[game] pc port progress menu (#1281)
* fix typo * more typo * shorten discord rpc text * allow expanding enums after the fact (untested) * make `game_text` work similar to subtitles * update progress decomp * update some types + `do-not-decompile` in bitfield * fixes and fall back to original progress code * update `progress` decomp with new enums * update config files * fix enums and debug menu * always allocate (but not use) a lot of particles * small rework to display mode options * revert resolution/aspect-ratio symbol mess * begin the override stuff * make `progress-draw` more readable * more fixes * codacy good boy points * first step overriding code * finish progress overrides, game options menu fully functional! * minor fixes * Update game.gp * Update sparticle-launcher.gc * clang * change camera controls text * oops * some cleanup * derp * nice job * implement menu scrolling lol * make scrollable menus less cramped, fix arrows * make some carousell things i guess * add msaa carousell to test * oops * Update progress-pc.gc * make `pc-get-screen-size` (untested) * resolution menu * input fixes * return when selecting resolution * scroll fixes * Update progress-pc.gc * add "fit to screen" button * bug * complete resolutions menu * aspect ratio menu * subtitles language * subtitle speaker * final adjustments * ref test * fix tests * fix ref! * reduce redundancy a bit * fix mem leaks? * save settings on progress exit * fix init reorder * remove unused code * rename goal project-like files to the project extension * sha display toggle * aspect ratio settings fixes * dont store text db's in compiler * properly save+load native aspect stuff
This commit is contained in:
@@ -737,7 +737,10 @@ void PutDisplayEnv(u32 ptr) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC Port function to get a 300MHz timer value.
|
||||
* PC PORT FUNCTIONS BEGIN
|
||||
*/
|
||||
/*!
|
||||
* Get a 300MHz timer value.
|
||||
*/
|
||||
u64 read_ee_timer() {
|
||||
u64 ns = ee_clock_timer.getNs();
|
||||
@@ -745,14 +748,14 @@ u64 read_ee_timer() {
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC Port function to do a fast memory copy.
|
||||
* Do a fast memory copy.
|
||||
*/
|
||||
void c_memmove(u32 dst, u32 src, u32 size) {
|
||||
memmove(Ptr<u8>(dst).c(), Ptr<u8>(src).c(), size);
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC Port function to return the current OS as a symbol.
|
||||
* Return the current OS as a symbol. Actually returns what it was compiled for!
|
||||
*/
|
||||
u64 get_os() {
|
||||
#ifdef _WIN32
|
||||
@@ -765,7 +768,7 @@ u64 get_os() {
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC Port function
|
||||
* Returns size of window.
|
||||
*/
|
||||
void get_window_size(u32 w_ptr, u32 h_ptr) {
|
||||
if (w_ptr) {
|
||||
@@ -779,7 +782,7 @@ void get_window_size(u32 w_ptr, u32 h_ptr) {
|
||||
}
|
||||
|
||||
/*!
|
||||
* PC Port function
|
||||
* Returns scale of window. This is for DPI stuff.
|
||||
*/
|
||||
void get_window_scale(u32 x_ptr, u32 y_ptr) {
|
||||
float* x = x_ptr ? Ptr<float>(x_ptr).c() : NULL;
|
||||
@@ -787,6 +790,23 @@ void get_window_scale(u32 x_ptr, u32 y_ptr) {
|
||||
Gfx::get_window_scale(x, y);
|
||||
}
|
||||
|
||||
/*!
|
||||
* Returns resolution of the monitor.
|
||||
*/
|
||||
void get_screen_size(s64 vmode_idx, u32 w_ptr, u32 h_ptr, u32 c_ptr) {
|
||||
s32 *w_out = 0, *h_out = 0, *c_out = 0;
|
||||
if (w_ptr) {
|
||||
w_out = Ptr<s32>(w_ptr).c();
|
||||
}
|
||||
if (h_ptr) {
|
||||
h_out = Ptr<s32>(h_ptr).c();
|
||||
}
|
||||
if (c_ptr) {
|
||||
c_out = Ptr<s32>(c_ptr).c();
|
||||
}
|
||||
Gfx::get_screen_size(vmode_idx, w_out, h_out, c_out);
|
||||
}
|
||||
|
||||
void update_discord_rpc(u32 discord_info) {
|
||||
if (gDiscordRpcEnabled) {
|
||||
DiscordRichPresence rpc;
|
||||
@@ -814,7 +834,7 @@ void update_discord_rpc(u32 discord_info) {
|
||||
strcat(state, std::to_string(cells).c_str());
|
||||
strcat(state, " | Orbs: ");
|
||||
strcat(state, std::to_string(orbs).c_str());
|
||||
strcat(state, " | Scout flies: ");
|
||||
strcat(state, " | Flies: ");
|
||||
strcat(state, std::to_string(scout_flies).c_str());
|
||||
}
|
||||
rpc.state = state;
|
||||
@@ -846,6 +866,28 @@ void mkdir_path(u32 filepath) {
|
||||
file_util::create_dir_if_needed_for_file(filepath_str);
|
||||
}
|
||||
|
||||
u32 get_fullscreen() {
|
||||
switch (Gfx::get_fullscreen()) {
|
||||
default:
|
||||
case Gfx::DisplayMode::Windowed:
|
||||
return intern_from_c("windowed").offset;
|
||||
case Gfx::DisplayMode::Borderless:
|
||||
return intern_from_c("borderless").offset;
|
||||
case Gfx::DisplayMode::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(Gfx::DisplayMode::Windowed, screen);
|
||||
} else if (symptr == intern_from_c("borderless").offset) {
|
||||
Gfx::set_fullscreen(Gfx::DisplayMode::Borderless, screen);
|
||||
} else if (symptr == intern_from_c("fullscreen").offset) {
|
||||
Gfx::set_fullscreen(Gfx::DisplayMode::Fullscreen, screen);
|
||||
}
|
||||
}
|
||||
|
||||
void InitMachine_PCPort() {
|
||||
// PC Port added functions
|
||||
make_function_symbol_from_c("__read-ee-timer", (void*)read_ee_timer);
|
||||
@@ -869,9 +911,11 @@ void InitMachine_PCPort() {
|
||||
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-screen-size", (void*)get_screen_size);
|
||||
make_function_symbol_from_c("pc-set-window-size", (void*)Gfx::set_window_size);
|
||||
make_function_symbol_from_c("pc-set-letterbox", (void*)Gfx::set_letterbox);
|
||||
make_function_symbol_from_c("pc-set-fullscreen", (void*)Gfx::set_fullscreen);
|
||||
make_function_symbol_from_c("pc-set-fullscreen", (void*)set_fullscreen);
|
||||
make_function_symbol_from_c("pc-renderer-tree-set-lod", (void*)Gfx::SetLod);
|
||||
|
||||
// file related functions
|
||||
@@ -897,6 +941,9 @@ void InitMachine_PCPort() {
|
||||
intern_from_c("*pc-settings-folder*")->value = make_string_from_c(settings_path.string().c_str());
|
||||
intern_from_c("*pc-settings-built-sha*")->value = make_string_from_c(GIT_SHORT_SHA);
|
||||
}
|
||||
/*!
|
||||
* PC PORT FUNCTIONS END
|
||||
*/
|
||||
|
||||
void vif_interrupt_callback() {
|
||||
// added for the PC port for faking VIF interrupts from the graphics system.
|
||||
|
||||
Reference in New Issue
Block a user