config cleanup (#4146)

- jak 3 extractor config
- validation that extractor expected game matches the provided ISO (no
more drag and drop extractor for jak 2/3)
- jak 3 bug report template
This commit is contained in:
Matt Dallmeyer
2026-03-31 21:53:48 -07:00
committed by GitHub
parent 64bcd8c030
commit d1e03e14db
4 changed files with 136 additions and 9 deletions
@@ -0,0 +1,75 @@
name: "\U0001F41B Jak 3 Bug Report"
description: Create a bug report for Jak 3.
labels: ["jak3"]
type: 'bug'
body:
- type: checkboxes
attributes:
label: Acknowledgements
description: Take a couple minutes to help our maintainers work faster.
options:
- label: I have [searched](https://github.com/open-goal/jak-project/issues?q=is%3Aissue+is%3Aopen+label%3Abug+label%3Ajak3+sort%3Aupdated-desc+) for duplicate or closed bug reports
required: true
- label: I understand that I am supposed to provide my own legitimately obtained copy of the game
required: true
- type: textarea
attributes:
label: Describe the Bug
description: A clear and concise description of what the bug is. You may post screenshots or videos of the bug here.
validations:
required: true
- type: textarea
attributes:
label: How To Reproduce
description: Steps to reproduce the behavior. You can also post a video of it here.
validations:
required: true
- type: dropdown
attributes:
label: Does this problem occur on original hardware or PCSX2?
description: Some things that may seem like bugs are actually exactly how the original game behaved.
options:
- Yes, it's unique to OpenGOAL
- Didn't check
- Not needed, bug is obvious
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: A clear and concise description of the expected behavior.
placeholder: When I do X, Y should happen.
validations:
required: true
- type: textarea
attributes:
label: Environment Information
description: "You can upload the [Support Package](https://github.com/open-goal/launcher#asking-for-help) provided by the Launcher here, or you can provide the following information: CPU, GPU, OS Version, OpenGOAL Version (found in the window's title bar)"
validations:
required: true
- type: dropdown
attributes:
label: Game Version
options:
- NTSC 1.0 (black label)
- NTSC Greatest Hits version (red label)
- PAL
- KO
validations:
required: true
- type: dropdown
attributes:
label: Have you set the game to something other than `60fps`?
options:
- "No"
- "Yes"
validations:
required: true
+9 -6
View File
@@ -19,7 +19,7 @@
"disassemble_code": false,
// Run the decompiler
"decompile_code": true,
"decompile_code": false,
"find_functions": true,
@@ -39,7 +39,7 @@
// unpack game text to assets folder
"process_game_text": true,
// unpack game count to assets folder
"process_game_count": false,
"process_game_count": true,
// write goal imports for art groups
"process_art_groups": false,
// write goal imports for the part group table
@@ -54,7 +54,7 @@
"dump_part_group_table": false,
// set to false to skip adding .STR files to the decompiler database
"read_spools": true,
"read_spools": false,
// write out spool subtitle text, implies read_spools
"process_subtitle_text": false,
// write out spool subtitle images, implies read_spools
@@ -121,7 +121,7 @@
////////////////////////////
// turn this on to extract level background graphics data as .fr3 files in out/<game>/fr3
"levels_extract": false,
"levels_extract": true,
// turn this on if you want extracted levels to be saved out as .glb files in decompiler_out/<game>/levels
"rip_levels": false,
// should we also extract collision meshes to the .fr3 files?
@@ -154,8 +154,11 @@
"pal": {
"game_name": "jak3_pal",
"expected_elf_name": "SCES_524.60",
"is_pal": true,
"object_patches": {}
"is_pal": true
},
"ko": {
"game_name": "jak3_ko",
"expected_elf_name": "SCKA_200.40"
}
}
}
+40
View File
@@ -121,6 +121,46 @@ extractor_iso_database() {
"ko", // decompiler config
"jak2",
{}}}}},
// Jak 3 NTSC-U
{"SCUS-97330", // serial from ELF name
{{4975852519304227343, // hash of ELF
{"Jak 3", // canonical name
GAME_TERRITORY_SCEA,
749, // number of files
{61426067393410901}, // iso hash
"ntsc_v1", // decompiler config
"jak3",
{}}}}},
// // Jak 3 NTSC-U (Greatest Hits)
{"SCUS-97516", // serial from ELF name
{{4975852519304227343, // hash of ELF
{"Jak 3", // canonical name
GAME_TERRITORY_SCEA,
749, // number of files
{61426067393410901}, // iso hash
"ntsc_v1", // decompiler config
"jak3",
{}}}}},
// Jak 3 NTSC-K
{"SCKA-20040", // serial from ELF name
{{10389946801578948532, // hash of ELF
{"잭 3", // canonical name
GAME_TERRITORY_SCEI,
749, // number of files
{15744436203314864205}, // iso hash
"ko", // decompiler config
"jak3",
{}}}}},
// Jak 3 PAL
{"SCES-52460", // serial from ELF name
{{1406394940700478958, // hash of ELF
{"Jak 3", // canonical name
GAME_TERRITORY_SCEE,
746, // number of files
{9845530557249070761}, // iso hash
"pal", // decompiler config
"jak3",
{}}}}},
};
return database;
}
+12 -3
View File
@@ -14,7 +14,8 @@
// used for - decompiler_out/<jak1> and iso_data/<jak1>
const std::unordered_map<std::string, std::string> data_subfolders = {{"jak1", "jak1"},
{"jak2", "jak2"}};
{"jak2", "jak2"},
{"jak3", "jak3"}};
IsoFile extract_files(fs::path input_file_path, fs::path extracted_iso_path) {
lg::info(
@@ -32,6 +33,7 @@ IsoFile extract_files(fs::path input_file_path, fs::path extracted_iso_path) {
}
std::tuple<std::optional<ISOMetadata>, ExtractorErrorCode> validate(
const std::string& game_name,
const fs::path& extracted_iso_path,
const uint64_t expected_hash,
const int expected_num_files) {
@@ -78,6 +80,13 @@ std::tuple<std::optional<ISOMetadata>, ExtractorErrorCode> validate(
lg::info("\tSerial - {}", dbEntry->first);
lg::info("\tUses Decompiler Config Version - {}", version_info.decomp_config_version);
// Make sure the game provided matches the expected game (game arg must be provided for jak 2/3)
if (version_info.game_name != game_name) {
lg::error("Serial '{}' is for {}, expecting an ISO for {}", serial.value(),
version_info.game_name, game_name);
return {std::nullopt, ExtractorErrorCode::VALIDATION_SERIAL_MISSING_FROM_DB};
}
// - Number of Files
if (version_info.num_files != expected_num_files) {
lg::error("Extracted an unexpected number of files. Expected '{}', Actual '{}'",
@@ -290,7 +299,7 @@ int main(int argc, char** argv) {
const auto [hash, file_count] = calculate_extraction_hash(iso_file);
// Validate the result to determine the release
const auto [version_info, validate_code] =
validate(temp_iso_extract_location, hash, file_count);
validate(game_name, temp_iso_extract_location, hash, file_count);
if (validate_code == ExtractorErrorCode::VALIDATION_BAD_EXTRACTION ||
(flag_fail_on_validation && validate_code != ExtractorErrorCode::SUCCESS)) {
return static_cast<int>(validate_code);
@@ -334,7 +343,7 @@ int main(int argc, char** argv) {
// Get hash and file count
const auto [hash, file_count] = calculate_extraction_hash(iso_data_path);
// Validate
auto [version_info, validate_code] = validate(iso_data_path, hash, file_count);
auto [version_info, validate_code] = validate(game_name, iso_data_path, hash, file_count);
if (validate_code == ExtractorErrorCode::VALIDATION_BAD_EXTRACTION ||
(flag_fail_on_validation && validate_code != ExtractorErrorCode::SUCCESS)) {
return static_cast<int>(validate_code);