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 = [
"log",
"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",
"quote",
"syn 1.0.109",
@ -2074,7 +2088,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
dependencies = [
"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",
"selectors",
]
@ -2199,7 +2226,21 @@ checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
dependencies = [
"log",
"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_codegen",
"tendril",
@ -2778,6 +2819,16 @@ dependencies = [
"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]]
name = "phf_generator"
version = "0.8.0"
@ -3398,7 +3449,7 @@ dependencies = [
"log",
"matches",
"phf 0.8.0",
"phf_codegen",
"phf_codegen 0.8.0",
"precomputed-hash",
"servo_arc",
"smallvec",
@ -3925,9 +3976,9 @@ checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
[[package]]
name = "tauri"
version = "1.4.1"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fbe522898e35407a8e60dc3870f7579fea2fc262a6a6072eccdd37ae1e1d91e"
checksum = "0238c5063bf9613054149a1b6bce4935922e532b7d8211f36989a490a79806be"
dependencies = [
"anyhow",
"bytes",
@ -3980,12 +4031,13 @@ dependencies = [
[[package]]
name = "tauri-build"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d2edd6a259b5591c8efdeb9d5702cb53515b82a6affebd55c7fd6d3a27b7d1b"
checksum = "defbfc551bd38ab997e5f8e458f87396d2559d05ce32095076ad6c30f7fc5f9c"
dependencies = [
"anyhow",
"cargo_toml",
"dirs-next",
"heck 0.4.1",
"json-patch",
"semver",
@ -3993,13 +4045,14 @@ dependencies = [
"serde_json",
"tauri-utils",
"tauri-winres",
"walkdir",
]
[[package]]
name = "tauri-codegen"
version = "1.4.0"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54ad2d49fdeab4a08717f5b49a163bdc72efc3b1950b6758245fcde79b645e1a"
checksum = "7b3475e55acec0b4a50fb96435f19631fb58cbcd31923e1a213de5c382536bbb"
dependencies = [
"base64 0.21.3",
"brotli",
@ -4023,9 +4076,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "1.4.0"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eb12a2454e747896929338d93b0642144bb51e0dddbb36e579035731f0d76b7"
checksum = "613740228de92d9196b795ac455091d3a5fbdac2654abb8bb07d010b62ab43af"
dependencies = [
"heck 0.4.1",
"proc-macro2",
@ -4037,9 +4090,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "0.14.0"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "108683199cb18f96d2d4134187bb789964143c845d2d154848dda209191fd769"
checksum = "07f8e9e53e00e9f41212c115749e87d5cd2a9eebccafca77a19722eeecd56d43"
dependencies = [
"gtk",
"http",
@ -4058,9 +4111,9 @@ dependencies = [
[[package]]
name = "tauri-runtime-wry"
version = "0.14.0"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7aa256a1407a3a091b5d843eccc1a5042289baf0a43d1179d9f0fcfea37c1b"
checksum = "8141d72b6b65f2008911e9ef5b98a68d1e3413b7a1464e8f85eb3673bb19a895"
dependencies = [
"cocoa",
"gtk",
@ -4078,19 +4131,20 @@ dependencies = [
[[package]]
name = "tauri-utils"
version = "1.4.0"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03fc02bb6072bb397e1d473c6f76c953cda48b4a2d0cce605df284aa74a12e84"
checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46"
dependencies = [
"brotli",
"ctor",
"dunce",
"glob",
"heck 0.4.1",
"html5ever",
"html5ever 0.26.0",
"infer",
"json-patch",
"kuchiki",
"kuchikiki",
"log",
"memchr",
"phf 0.10.1",
"proc-macro2",
@ -5211,9 +5265,9 @@ dependencies = [
[[package]]
name = "wry"
version = "0.24.3"
version = "0.24.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33748f35413c8a98d45f7a08832d848c0c5915501803d1faade5a4ebcd258cea"
checksum = "88ef04bdad49eba2e01f06e53688c8413bd6a87b0bc14b72284465cf96e3578e"
dependencies = [
"base64 0.13.1",
"block",
@ -5225,7 +5279,7 @@ dependencies = [
"gio",
"glib",
"gtk",
"html5ever",
"html5ever 0.25.2",
"http",
"kuchiki",
"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
[build-dependencies]
tauri-build = { version = "1.4.0", features = [] }
tauri-build = { version = "1.5.0", features = [] }
[dependencies]
backtrace = "0.3.69"
@ -32,7 +32,7 @@ serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.107"
sysinfo = "0.29.10"
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"
tokio = { version = "1", features = ["full"] }
walkdir = "2.4.0"

View file

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

View file

@ -392,3 +392,25 @@ pub async fn set_enabled_texture_packs(
})?;
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::config::cleanup_enabled_texture_packs,
commands::config::delete_old_data_directory,
commands::config::does_active_tooling_version_support_game,
commands::config::finalize_installation,
commands::config::get_active_tooling_version_folder,
commands::config::get_active_tooling_version,

View file

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

View file

@ -152,5 +152,14 @@
"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_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 GameSetup from "../components/games/setup/GameSetup.svelte";
import { onMount } from "svelte";
import { Spinner } from "flowbite-svelte";
import { Alert, Spinner } from "flowbite-svelte";
import { _ } from "svelte-i18n";
import {
doesActiveToolingVersionSupportGame,
getInstalledVersion,
getInstalledVersionFolder,
isGameInstalled,
@ -18,9 +20,12 @@
getActiveVersionFolder,
} from "$lib/rpc/versions";
import GameToolsNotSet from "../components/games/GameToolsNotSet.svelte";
import GameNotSupportedByTooling from "../components/games/GameNotSupportedByTooling.svelte";
import { VersionStore } from "$lib/stores/VersionStore";
const params = useParams();
$: $params, loadGameInfo();
let activeGame = SupportedGame.Jak1;
let componentLoaded = false;
@ -32,7 +37,15 @@
let versionMismatchDetected = false;
let gameInBeta = false;
let gameSupportedByTooling = false;
onMount(async () => {
loadGameInfo();
});
async function loadGameInfo() {
componentLoaded = false;
// Figure out what game we are displaying
if (
$params["game_name"] !== undefined &&
@ -44,6 +57,14 @@
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
const activeVersionExists = await ensureActiveVersionStillExists();
$VersionStore.activeVersionType = await getActiveVersionFolder();
@ -73,9 +94,9 @@
}
componentLoaded = true;
});
}
async function updateGameState(evt) {
async function updateGameState(event) {
gameInstalled = await isGameInstalled(getInternalName(activeGame));
}
@ -94,6 +115,8 @@
<div class="flex flex-col h-full justify-center items-center">
<Spinner color="yellow" size={"12"} />
</div>
{:else if !gameSupportedByTooling}
<GameNotSupportedByTooling />
{:else if $VersionStore.activeVersionName === null || $VersionStore.activeVersionType === null}
<GameToolsNotSet />
{:else if !gameInstalled}
@ -112,6 +135,35 @@
on:job={runGameJob}
/>
{: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
{activeGame}
on:change={updateGameState}