jak2: prepare for jak 2 support (#341)

This commit is contained in:
Tyler Wilding 2023-10-09 20:54:07 -06:00 committed by GitHub
parent 3f5c4cc1fc
commit 578855deba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 207 additions and 36 deletions

100
src-tauri/Cargo.lock generated
View file

@ -1732,7 +1732,21 @@ checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
dependencies = [ dependencies = [
"log", "log",
"mac", "mac",
"markup5ever", "markup5ever 0.10.1",
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "html5ever"
version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
dependencies = [
"log",
"mac",
"markup5ever 0.11.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 1.0.109", "syn 1.0.109",
@ -2074,7 +2088,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358" checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
dependencies = [ dependencies = [
"cssparser", "cssparser",
"html5ever", "html5ever 0.25.2",
"matches",
"selectors",
]
[[package]]
name = "kuchikiki"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8"
dependencies = [
"cssparser",
"html5ever 0.26.0",
"indexmap 1.9.3",
"matches", "matches",
"selectors", "selectors",
] ]
@ -2199,7 +2226,21 @@ checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
dependencies = [ dependencies = [
"log", "log",
"phf 0.8.0", "phf 0.8.0",
"phf_codegen", "phf_codegen 0.8.0",
"string_cache",
"string_cache_codegen",
"tendril",
]
[[package]]
name = "markup5ever"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
dependencies = [
"log",
"phf 0.10.1",
"phf_codegen 0.10.0",
"string_cache", "string_cache",
"string_cache_codegen", "string_cache_codegen",
"tendril", "tendril",
@ -2778,6 +2819,16 @@ dependencies = [
"phf_shared 0.8.0", "phf_shared 0.8.0",
] ]
[[package]]
name = "phf_codegen"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
dependencies = [
"phf_generator 0.10.0",
"phf_shared 0.10.0",
]
[[package]] [[package]]
name = "phf_generator" name = "phf_generator"
version = "0.8.0" version = "0.8.0"
@ -3398,7 +3449,7 @@ dependencies = [
"log", "log",
"matches", "matches",
"phf 0.8.0", "phf 0.8.0",
"phf_codegen", "phf_codegen 0.8.0",
"precomputed-hash", "precomputed-hash",
"servo_arc", "servo_arc",
"smallvec", "smallvec",
@ -3925,9 +3976,9 @@ checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
[[package]] [[package]]
name = "tauri" name = "tauri"
version = "1.4.1" version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fbe522898e35407a8e60dc3870f7579fea2fc262a6a6072eccdd37ae1e1d91e" checksum = "0238c5063bf9613054149a1b6bce4935922e532b7d8211f36989a490a79806be"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
@ -3980,12 +4031,13 @@ dependencies = [
[[package]] [[package]]
name = "tauri-build" name = "tauri-build"
version = "1.4.0" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d2edd6a259b5591c8efdeb9d5702cb53515b82a6affebd55c7fd6d3a27b7d1b" checksum = "defbfc551bd38ab997e5f8e458f87396d2559d05ce32095076ad6c30f7fc5f9c"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cargo_toml", "cargo_toml",
"dirs-next",
"heck 0.4.1", "heck 0.4.1",
"json-patch", "json-patch",
"semver", "semver",
@ -3993,13 +4045,14 @@ dependencies = [
"serde_json", "serde_json",
"tauri-utils", "tauri-utils",
"tauri-winres", "tauri-winres",
"walkdir",
] ]
[[package]] [[package]]
name = "tauri-codegen" name = "tauri-codegen"
version = "1.4.0" version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54ad2d49fdeab4a08717f5b49a163bdc72efc3b1950b6758245fcde79b645e1a" checksum = "7b3475e55acec0b4a50fb96435f19631fb58cbcd31923e1a213de5c382536bbb"
dependencies = [ dependencies = [
"base64 0.21.3", "base64 0.21.3",
"brotli", "brotli",
@ -4023,9 +4076,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-macros" name = "tauri-macros"
version = "1.4.0" version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eb12a2454e747896929338d93b0642144bb51e0dddbb36e579035731f0d76b7" checksum = "613740228de92d9196b795ac455091d3a5fbdac2654abb8bb07d010b62ab43af"
dependencies = [ dependencies = [
"heck 0.4.1", "heck 0.4.1",
"proc-macro2", "proc-macro2",
@ -4037,9 +4090,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime" name = "tauri-runtime"
version = "0.14.0" version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "108683199cb18f96d2d4134187bb789964143c845d2d154848dda209191fd769" checksum = "07f8e9e53e00e9f41212c115749e87d5cd2a9eebccafca77a19722eeecd56d43"
dependencies = [ dependencies = [
"gtk", "gtk",
"http", "http",
@ -4058,9 +4111,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime-wry" name = "tauri-runtime-wry"
version = "0.14.0" version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7aa256a1407a3a091b5d843eccc1a5042289baf0a43d1179d9f0fcfea37c1b" checksum = "8141d72b6b65f2008911e9ef5b98a68d1e3413b7a1464e8f85eb3673bb19a895"
dependencies = [ dependencies = [
"cocoa", "cocoa",
"gtk", "gtk",
@ -4078,19 +4131,20 @@ dependencies = [
[[package]] [[package]]
name = "tauri-utils" name = "tauri-utils"
version = "1.4.0" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03fc02bb6072bb397e1d473c6f76c953cda48b4a2d0cce605df284aa74a12e84" checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46"
dependencies = [ dependencies = [
"brotli", "brotli",
"ctor", "ctor",
"dunce", "dunce",
"glob", "glob",
"heck 0.4.1", "heck 0.4.1",
"html5ever", "html5ever 0.26.0",
"infer", "infer",
"json-patch", "json-patch",
"kuchiki", "kuchikiki",
"log",
"memchr", "memchr",
"phf 0.10.1", "phf 0.10.1",
"proc-macro2", "proc-macro2",
@ -5211,9 +5265,9 @@ dependencies = [
[[package]] [[package]]
name = "wry" name = "wry"
version = "0.24.3" version = "0.24.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33748f35413c8a98d45f7a08832d848c0c5915501803d1faade5a4ebcd258cea" checksum = "88ef04bdad49eba2e01f06e53688c8413bd6a87b0bc14b72284465cf96e3578e"
dependencies = [ dependencies = [
"base64 0.13.1", "base64 0.13.1",
"block", "block",
@ -5225,7 +5279,7 @@ dependencies = [
"gio", "gio",
"glib", "glib",
"gtk", "gtk",
"html5ever", "html5ever 0.25.2",
"http", "http",
"kuchiki", "kuchiki",
"libc", "libc",

View file

@ -12,7 +12,7 @@ rust-version = "1.61"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[build-dependencies] [build-dependencies]
tauri-build = { version = "1.4.0", features = [] } tauri-build = { version = "1.5.0", features = [] }
[dependencies] [dependencies]
backtrace = "0.3.69" backtrace = "0.3.69"
@ -32,7 +32,7 @@ serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.107" serde_json = "1.0.107"
sysinfo = "0.29.10" sysinfo = "0.29.10"
tar = "0.4.40" tar = "0.4.40"
tauri = { version = "1.4.1", features = ["api-all", "devtools", "reqwest-client"] } tauri = { version = "1.5.1", features = ["api-all", "devtools", "reqwest-client"] }
thiserror = "1.0.49" thiserror = "1.0.49"
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
walkdir = "2.4.0" walkdir = "2.4.0"

View file

@ -289,6 +289,8 @@ pub async fn extract_and_validate_iso(
let mut args = vec![ let mut args = vec![
path_to_iso.clone(), path_to_iso.clone(),
"--game".to_string(),
game_name.clone(),
"--extract".to_string(), "--extract".to_string(),
"--validate".to_string(), "--validate".to_string(),
"--proj-path".to_string(), "--proj-path".to_string(),
@ -387,6 +389,8 @@ pub async fn run_decompiler(
command command
.args([ .args([
source_path, source_path,
"--game".to_string(),
game_name.clone(),
"--decompile".to_string(), "--decompile".to_string(),
"--proj-path".to_string(), "--proj-path".to_string(),
data_folder.to_string_lossy().into_owned(), data_folder.to_string_lossy().into_owned(),
@ -473,6 +477,8 @@ pub async fn run_compiler(
command command
.args([ .args([
source_path, source_path,
"--game".to_string(),
game_name.clone(),
"--compile".to_string(), "--compile".to_string(),
"--proj-path".to_string(), "--proj-path".to_string(),
data_folder.to_string_lossy().into_owned(), data_folder.to_string_lossy().into_owned(),

View file

@ -392,3 +392,25 @@ pub async fn set_enabled_texture_packs(
})?; })?;
Ok(()) Ok(())
} }
#[tauri::command]
pub async fn does_active_tooling_version_support_game(
config: tauri::State<'_, tokio::sync::Mutex<LauncherConfig>>,
game_name: String,
) -> Result<bool, CommandError> {
let config_lock = config.lock().await;
// If we can't determine the version, assume its our first release
let active_version = config_lock
.active_version
.as_ref()
.ok_or(CommandError::Configuration(
"No active version set, can't perform operation".to_owned(),
))?;
let tooling_version = Version::parse(active_version.strip_prefix('v').unwrap_or(&active_version))
.unwrap_or(Version::new(0, 0, 1));
match game_name.as_str() {
"jak1" => Ok(true),
"jak2" => Ok(tooling_version.minor >= 1 && tooling_version.patch >= 44),
_ => Ok(false),
}
}

View file

@ -140,6 +140,7 @@ fn main() {
commands::binaries::update_data_directory, commands::binaries::update_data_directory,
commands::config::cleanup_enabled_texture_packs, commands::config::cleanup_enabled_texture_packs,
commands::config::delete_old_data_directory, commands::config::delete_old_data_directory,
commands::config::does_active_tooling_version_support_game,
commands::config::finalize_installation, commands::config::finalize_installation,
commands::config::get_active_tooling_version_folder, commands::config::get_active_tooling_version_folder,
commands::config::get_active_tooling_version, commands::config::get_active_tooling_version,

View file

@ -29,7 +29,10 @@
window.sessionStorage.setItem("refreshHack", "true"); window.sessionStorage.setItem("refreshHack", "true");
} }
// Set locale from settings // Set locale from settings
setLocale(await getLocale()); const locale = await getLocale();
if (locale !== null) {
setLocale(locale);
}
}); });
if (!isInDebugMode()) { if (!isInDebugMode()) {
@ -82,12 +85,6 @@
primary={false} primary={false}
let:params let:params
/> />
<Route
path="/jak2"
component={GameInProgress}
primary={false}
let:params
/>
<Route <Route
path="/settings/:tab" path="/settings/:tab"
component={Settings} component={Settings}

View file

@ -152,5 +152,14 @@
"update_changelog_header_pullRequest": "Pull Request", "update_changelog_header_pullRequest": "Pull Request",
"update_description": "View the changes below and click the button to update to the latest version. The launcher will restart when finished.", "update_description": "View the changes below and click the button to update to the latest version. The launcher will restart when finished.",
"update_header": "Launcher Update Available", "update_header": "Launcher Update Available",
"update_versionLabel": "Version" "update_versionLabel": "Version",
"gameControls_toolingTooOld_button_setVersion": "Set Version",
"gameControls_toolingTooOld_header": "Tooling Version Does Not Support Game!",
"gameControls_toolingTooOld_subheader": "Head over to the following settings page to download the latest release",
"gameControls_beta_headerA": "Jak 2 is in Beta!",
"gameControls_beta_headerB": "You will encounter minor bugs and instability.",
"gameControls_beta_issueTracker_linkPreText": "For a list of all known issues, see",
"gameControls_beta_issueTracker_linkText": "here",
"gameControls_beta_bugReport_linkPreText": "To submit a non-duplicate bug report, see",
"gameControls_beta_bugReport_linkText": "here"
} }

View file

@ -0,0 +1,18 @@
<script>
import { Button } from "flowbite-svelte";
import { _ } from "svelte-i18n";
</script>
<div class="flex flex-col h-full justify-center items-center p-5 text-center">
<h1 class="text-2xl font-black mb-5 text-outline">
{$_("gameControls_toolingTooOld_header")}
</h1>
<p class="mb-10">
{$_("gameControls_toolingTooOld_subheader")}
</p>
<Button
class="border-solid border-2 border-slate-500 rounded bg-slate-900 hover:bg-slate-800 text-sm text-white font-semibold px-5 py-2"
href="/settings/versions"
>{$_("gameControls_toolingTooOld_button_setVersion")}</Button
>
</div>

View file

@ -244,3 +244,15 @@ export async function setEnabledTexturePacks(
}, },
); );
} }
export async function doesActiveToolingVersionSupportGame(
gameName: string,
): Promise<boolean> {
return await invoke_rpc(
"does_active_tooling_version_support_game",
{
gameName: gameName,
},
() => false,
);
}

View file

@ -4,8 +4,10 @@
import GameControls from "../components/games/GameControls.svelte"; import GameControls from "../components/games/GameControls.svelte";
import GameSetup from "../components/games/setup/GameSetup.svelte"; import GameSetup from "../components/games/setup/GameSetup.svelte";
import { onMount } from "svelte"; import { onMount } from "svelte";
import { Spinner } from "flowbite-svelte"; import { Alert, Spinner } from "flowbite-svelte";
import { _ } from "svelte-i18n";
import { import {
doesActiveToolingVersionSupportGame,
getInstalledVersion, getInstalledVersion,
getInstalledVersionFolder, getInstalledVersionFolder,
isGameInstalled, isGameInstalled,
@ -18,9 +20,12 @@
getActiveVersionFolder, getActiveVersionFolder,
} from "$lib/rpc/versions"; } from "$lib/rpc/versions";
import GameToolsNotSet from "../components/games/GameToolsNotSet.svelte"; import GameToolsNotSet from "../components/games/GameToolsNotSet.svelte";
import GameNotSupportedByTooling from "../components/games/GameNotSupportedByTooling.svelte";
import { VersionStore } from "$lib/stores/VersionStore"; import { VersionStore } from "$lib/stores/VersionStore";
const params = useParams(); const params = useParams();
$: $params, loadGameInfo();
let activeGame = SupportedGame.Jak1; let activeGame = SupportedGame.Jak1;
let componentLoaded = false; let componentLoaded = false;
@ -32,7 +37,15 @@
let versionMismatchDetected = false; let versionMismatchDetected = false;
let gameInBeta = false;
let gameSupportedByTooling = false;
onMount(async () => { onMount(async () => {
loadGameInfo();
});
async function loadGameInfo() {
componentLoaded = false;
// Figure out what game we are displaying // Figure out what game we are displaying
if ( if (
$params["game_name"] !== undefined && $params["game_name"] !== undefined &&
@ -44,6 +57,14 @@
activeGame = SupportedGame.Jak1; activeGame = SupportedGame.Jak1;
} }
if (activeGame === SupportedGame.Jak2) {
gameInBeta = true;
}
gameSupportedByTooling = await doesActiveToolingVersionSupportGame(
getInternalName(activeGame),
);
// First off, check that they've downloaded and have a jak-project release set // First off, check that they've downloaded and have a jak-project release set
const activeVersionExists = await ensureActiveVersionStillExists(); const activeVersionExists = await ensureActiveVersionStillExists();
$VersionStore.activeVersionType = await getActiveVersionFolder(); $VersionStore.activeVersionType = await getActiveVersionFolder();
@ -73,9 +94,9 @@
} }
componentLoaded = true; componentLoaded = true;
}); }
async function updateGameState(evt) { async function updateGameState(event) {
gameInstalled = await isGameInstalled(getInternalName(activeGame)); gameInstalled = await isGameInstalled(getInternalName(activeGame));
} }
@ -94,6 +115,8 @@
<div class="flex flex-col h-full justify-center items-center"> <div class="flex flex-col h-full justify-center items-center">
<Spinner color="yellow" size={"12"} /> <Spinner color="yellow" size={"12"} />
</div> </div>
{:else if !gameSupportedByTooling}
<GameNotSupportedByTooling />
{:else if $VersionStore.activeVersionName === null || $VersionStore.activeVersionType === null} {:else if $VersionStore.activeVersionName === null || $VersionStore.activeVersionType === null}
<GameToolsNotSet /> <GameToolsNotSet />
{:else if !gameInstalled} {:else if !gameInstalled}
@ -112,6 +135,35 @@
on:job={runGameJob} on:job={runGameJob}
/> />
{:else} {:else}
{#if gameInBeta}
<Alert color="red" rounded={false} class="border-t-4">
<span class="font-bold">{$_("gameControls_beta_headerA")}</span>
<em>{$_("gameControls_beta_headerB")}</em>
<br />
<ul>
<li>
{$_("gameControls_beta_issueTracker_linkPreText")}
<a
class="text-blue-400"
href="https://github.com/orgs/open-goal/projects/3/views/8?query=is%3Aopen+sort%3Aupdated-desc"
target="_blank"
rel="noopener noreferrer"
>{$_("gameControls_beta_issueTracker_linkText")}</a
>
</li>
<li>
{$_("gameControls_beta_bugReport_linkPreText")}
<a
class="text-blue-400"
href="https://github.com/open-goal/jak-project/issues/new?assignees=&labels=bug%2Cjak2&projects=&template=jak2-bug-report.yml"
target="_blank"
rel="noopener noreferrer"
>{$_("gameControls_beta_bugReport_linkText")}</a
>
</li>
</ul>
</Alert>
{/if}
<GameControls <GameControls
{activeGame} {activeGame}
on:change={updateGameState} on:change={updateGameState}