Skip to content
Draft
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
eeffcd5
jakx: initial decompiler and project support
VodBox Aug 11, 2024
daa8693
jakx: begin all-types.gc definition work
VodBox Aug 11, 2024
12c8b7b
jakx: parse text extraction
VodBox Aug 21, 2024
050ce96
jakx: correct level max
VodBox Aug 22, 2024
8433ce1
jakx: more type definition work
VodBox Aug 22, 2024
dc24fb6
jakx: audio extraction
VodBox Aug 23, 2024
cc5f423
jakx: update sparticle decomp fields
VodBox Aug 24, 2024
fa3d75b
refactor: Add jakx stub code
yodaxtah Jun 21, 2025
246fb8f
Merge branch 'master' into jakx-ckernel
yodaxtah Jun 21, 2025
acf3b4b
[jakx] Edit game/kernel/fileio.cpp
yodaxtah Jun 22, 2025
7ab238a
[jakx] Edit game/kernel/jakx/kboot.cpp
yodaxtah Jun 22, 2025
713eed9
[jakx] Edit game/kernel/jakx/kdgo.cpp
yodaxtah Jun 22, 2025
fe35467
[jakx] Edit game/kernel/common/fileio.cpp
yodaxtah Jun 22, 2025
54754fd
[jakx] Edit game/kernel/common/kdgo.cpp
yodaxtah Jun 22, 2025
e6e6401
[jakx] Edit game/kernel/common/kdsnetm.cpp
yodaxtah Jun 22, 2025
cb47c8e
[jakx] Edit game/kernel/common/klisten.cpp
yodaxtah Jun 22, 2025
e0bbc40
[jakx] Edit game/kernel/common/kmachine.cpp
yodaxtah Jun 28, 2025
9c4681a
[jakx] Edit game/kernel/common/kmalloc.cpp
yodaxtah Jun 28, 2025
ca78701
[jakx] Edit game/kernel/common/kscheme.cpp
yodaxtah Jun 28, 2025
061c2f3
[jakx] Edit game/kernel/common/klisten.cpp
yodaxtah Jun 29, 2025
d817f6b
[jakx] Define kmkdir
yodaxtah Jul 5, 2025
3fc990f
[jakx] Define USE_OVERLORD2_W
yodaxtah Jul 5, 2025
6106da8
[jakx] Edit game/kernel/jakx/kmachine.cpp
yodaxtah Jul 5, 2025
4414e1d
[jakx] Define missing sceMkDir
yodaxtah Jul 5, 2025
efa4654
[jakx] Dirty fix compilation for Ubuntu setup
yodaxtah Sep 14, 2025
496e992
Merge branch 'master' into jakx-ckernel
yodaxtah Sep 14, 2025
100c949
Merge branch 'master' into jakx-ckernel
xTVaser Dec 30, 2025
66d80b3
Merge remote-tracking branch 'origin/master' into jakx-ckernel
xTVaser Jan 1, 2026
723a537
jakx: remove fontutils and PAL decompilation type cast files
xTVaser Jan 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .vs/launch.vs.json
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,19 @@
"--config-override \"{\\\"decompile_code\\\": false, \\\"levels_extract\\\": true, \\\"allowed_objects\\\": []}\""
]
},
{
"type": "default",
"project": "CMakeLists.txt",
"projectTarget": "decompiler.exe (bin\\decompiler.exe)",
"name": "Decompiler - Jak X",
"args": [
"${workspaceRoot}/decompiler/config/jakx/jakx_config.jsonc",
"${workspaceRoot}/iso_data",
"${workspaceRoot}/decompiler_out",
"--version",
"pal"
]
},
{
"type": "default",
"project": "CMakeLists.txt",
Expand Down
2 changes: 2 additions & 0 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ tasks:
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak2'
set-game-jak3:
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jak3'
set-game-jakx:
- '{{.PYTHON}} ./scripts/tasks/update-env.py --game jakx'
set-decomp-ntscv1:
desc: "aka black label"
cmds:
Expand Down
5 changes: 3 additions & 2 deletions common/audio/audio_formats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ void write_wave_file(const std::vector<s16>& left_samples,
}

std::pair<std::vector<s16>, std::vector<s16>> decode_adpcm(BinaryReader& reader,
const bool stereo) {
const bool stereo,
const u32 version) {
std::vector<s16> left_samples;
std::vector<s16> right_samples;
s32 left_sample_prev[2] = {0, 0};
Expand Down Expand Up @@ -85,7 +86,7 @@ std::pair<std::vector<s16>, std::vector<s16>> decode_adpcm(BinaryReader& reader,
break;
}

if (stereo && bytes_read == 0x2000) {
if (stereo && bytes_read == (version == 3 ? 0x1000 : 0x2000)) {
// switch streams
processing_left_chunk = !processing_left_chunk;
bytes_read = 0;
Expand Down
4 changes: 3 additions & 1 deletion common/audio/audio_formats.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ void write_wave_file(const std::vector<s16>& left_samples,
s32 sample_rate,
const fs::path& name);

std::pair<std::vector<s16>, std::vector<s16>> decode_adpcm(BinaryReader& reader, const bool mono);
std::pair<std::vector<s16>, std::vector<s16>> decode_adpcm(BinaryReader& reader,
const bool mono,
const u32 version);

std::vector<u8> encode_adpcm(const std::vector<s16>& samples);
11 changes: 11 additions & 0 deletions common/goal_constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,15 @@ constexpr int LEVEL_MAX = 10;
constexpr int LEVEL_TOTAL = LEVEL_MAX + 1;
} // namespace jak3

namespace jakx {
// for now, we don't have the ability to extend the size of the symbol table
constexpr s32 GOAL_MAX_SYMBOLS = 0x4000;
// amount of levels in level heap
constexpr int LEVEL_MAX = 10;
// total amount of levels, including ones outside level heap (default-level)
constexpr int LEVEL_TOTAL = LEVEL_MAX + 1;
} // namespace jakx

constexpr s32 max_symbols(GameVersion version) {
switch (version) {
case GameVersion::Jak1:
Expand All @@ -79,6 +88,8 @@ constexpr s32 max_symbols(GameVersion version) {
return jak2::GOAL_MAX_SYMBOLS;
case GameVersion::Jak3:
return jak3::GOAL_MAX_SYMBOLS;
case GameVersion::JakX:
return jakx::GOAL_MAX_SYMBOLS;
}
}

Expand Down
176 changes: 176 additions & 0 deletions common/symbols.h
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,180 @@ constexpr int FIX_SYM_NETWORK_BOOTSTRAP = 0x294;

} // namespace jak3_symbols

namespace jakx_symbols {

constexpr int FIX_SYM_EMPTY_CAR = -0x8;
constexpr int S7_OFF_FIX_SYM_EMPTY_PAIR = -0x6 - 1;
constexpr int FIX_SYM_EMPTY_CDR = -0x4;
constexpr int FIX_SYM_FALSE = 0x0; // GOAL boolean #f (note that this is equal to the $s7 register)
constexpr int FIX_SYM_TRUE = 0x4; // GOAL boolean #t
constexpr int FIX_SYM_FUNCTION_TYPE = 0x8;
constexpr int FIX_SYM_BASIC = 0xc;
constexpr int FIX_SYM_STRING_TYPE = 0x10;
constexpr int FIX_SYM_SYMBOL_TYPE = 0x14;
constexpr int FIX_SYM_TYPE_TYPE = 0x18;
constexpr int FIX_SYM_OBJECT_TYPE = 0x1c;
constexpr int FIX_SYM_LINK_BLOCK = 0x20;
constexpr int FIX_SYM_INTEGER = 0x24;
constexpr int FIX_SYM_SINTEGER = 0x28;
constexpr int FIX_SYM_UINTEGER = 0x2c;
constexpr int FIX_SYM_BINTEGER = 0x30;
constexpr int FIX_SYM_INT8 = 0x34;
constexpr int FIX_SYM_INT16 = 0x38;
constexpr int FIX_SYM_INT32 = 0x3c;
constexpr int FIX_SYM_INT64 = 0x40;
constexpr int FIX_SYM_INT128 = 0x44;
constexpr int FIX_SYM_UINT8 = 0x48;
constexpr int FIX_SYM_UINT16 = 0x4c;
constexpr int FIX_SYM_UINT32 = 0x50;
constexpr int FIX_SYM_UINT64 = 0x54;
constexpr int FIX_SYM_UINT128 = 0x58;
constexpr int FIX_SYM_FLOAT = 0x5c;
constexpr int FIX_SYM_PROCESS_TREE = 0x60;
constexpr int FIX_SYM_PROCESS_TYPE = 0x64;
constexpr int FIX_SYM_THREAD = 0x68;
constexpr int FIX_SYM_STRUCTURE = 0x6c;
constexpr int FIX_SYM_PAIR_TYPE = 0x70;
constexpr int FIX_SYM_POINTER = 0x74;
constexpr int FIX_SYM_NUMBER = 0x78;
constexpr int FIX_SYM_ARRAY = 0x7c;
constexpr int FIX_SYM_VU_FUNCTION = 0x80;
constexpr int FIX_SYM_CONNECTABLE = 0x84;
constexpr int FIX_SYM_STACK_FRAME = 0x88;
constexpr int FIX_SYM_FILE_STREAM = 0x8c;
constexpr int FIX_SYM_HEAP = 0x90;
constexpr int FIX_SYM_NOTHING_FUNC = 0x94;
constexpr int FIX_SYM_DELETE_BASIC = 0x98;
constexpr int FIX_SYM_STATIC = 0x9c;
constexpr int FIX_SYM_GLOBAL_HEAP = 0xa0;
constexpr int FIX_SYM_DEBUG = 0xa4;
constexpr int FIX_SYM_LOADING_LEVEL = 0xa8;
constexpr int FIX_SYM_LOADING_PACKAGE = 0xac;
constexpr int FIX_SYM_PROCESS_LEVEL_HEAP = 0xb0;
constexpr int FIX_SYM_STACK = 0xb4;
constexpr int FIX_SYM_SCRATCH = 0xb8;
constexpr int FIX_SYM_SCRATCH_TOP = 0xbc;
constexpr int FIX_SYM_ZERO_FUNC = 0xc0;
constexpr int FIX_SYM_ASIZE_OF_BASIC_FUNC = 0xc4;
constexpr int FIX_SYM_COPY_BASIC_FUNC = 0xc8; // bugged name
constexpr int FIX_SYM_LEVEL = 0xcc;
constexpr int FIX_SYM_ART_GROUP = 0xd0;
constexpr int FIX_SYM_TEXTURE_PAGE_DIR = 0xd4;
constexpr int FIX_SYM_TEXTURE_PAGE = 0xd8;
constexpr int FIX_SYM_SOUND = 0xdc;
constexpr int FIX_SYM_DGO = 0xe0;
constexpr int FIX_SYM_TOP_LEVEL = 0xe4;
constexpr int FIX_SYM_QUOTE = 0xe8;
constexpr int FIX_SYM_LISTENER_LINK_BLOCK = 0xec;
constexpr int FIX_SYM_LISTENER_FUNCTION = 0xf0;
constexpr int FIX_SYM_STACK_TOP = 0xf4;
constexpr int FIX_SYM_STACK_BASE = 0xf8;
constexpr int FIX_SYM_STACK_SIZE = 0xfc;
constexpr int FIX_SYM_KERNEL_FUNCTION = 0x100;
constexpr int FIX_SYM_KERNEL_PACKAGES = 0x104;
constexpr int FIX_SYM_KERNEL_BOOT_MESSAGE = 0x108;
constexpr int FIX_SYM_KERNEL_BOOT_MODE = 0x10c;
constexpr int FIX_SYM_KERNEL_BOOT_LEVEL = 0x110;
constexpr int FIX_SYM_KERNEL_BOOT_ART_GROUP = 0x114;
constexpr int FIX_SYM_KERNEL_DEBUG = 0x118;
constexpr int FIX_SYM_KERNEL_VERSION = 0x11c;
constexpr int FIX_SYM_KERNEL_DISPATCHER = 0x120;
constexpr int FIX_SYM_SYNC_DISPATCHER = 0x124;
constexpr int FIX_SYM_PRINT_COLLUMN = 0x128;
constexpr int FIX_SYM_DEBUG_SEGMENT = 300;
constexpr int FIX_SYM_ENABLE_METHOD_SET = 0x130;
constexpr int FIX_SYM_SQL_RESULT = 0x134;
constexpr int FIX_SYM_COLLAPSE_QUOTE = 0x138;
constexpr int FIX_SYM_LEVEL_TYPE_LIST = 0x13C;
constexpr int FIX_SYM_DECI_COUNT = 0x140;
constexpr int FIX_SYM_USER = 0x144;
constexpr int FIX_SYM_VIDEO_MODE = 0x148;
constexpr int FIX_SYM_BOOT_VIDEO_MODE = 0x14C;
constexpr int FIX_SYM_BOOT = 0x150;
constexpr int FIX_SYM_DEMO = 0x154;
constexpr int FIX_SYM_DEMO_SHARED = 0x158;
constexpr int FIX_SYM_PREVIEW = 0x15C;
constexpr int FIX_SYM_KIOSK = 0x160;
constexpr int FIX_SYM_PLAY_BOOT = 0x164;
constexpr int FIX_SYM_SIN = 0x168;
constexpr int FIX_SYM_COS = 0x16C;
constexpr int FIX_SYM_PUT_DISPLAY_ENV = 0x170;
constexpr int FIX_SYM_SYNCV = 0x174;
constexpr int FIX_SYM_SYNC_PATH = 0x178;
constexpr int FIX_SYM_RESET_PATH = 0x17C;
constexpr int FIX_SYM_RESET_GRAPH = 0x180;
constexpr int FIX_SYM_DMA_SYNC = 0x184;
constexpr int FIX_SYM_GS_PUT_IMR = 0x188;
constexpr int FIX_SYM_GS_GET_IMR = 0x18C;
constexpr int FIX_SYM_GS_STORE_IMAGE = 400;
constexpr int FIX_SYM_FLUSH_CACHE = 0x194;
constexpr int FIX_SYM_CPAD_OPEN = 0x198;
constexpr int FIX_SYM_CPAD_GET_DATA = 0x19C;
constexpr int FIX_SYM_MOUSE_GET_DATA = 0x1A0;
constexpr int FIX_SYM_KEYBD_GET_DATA = 0x1A4;
constexpr int FIX_SYM_INSTALL_HANDLER = 0x1A8;
constexpr int FIX_SYM_INSTALL_DEBUG_HANDLER = 0x1AC;
constexpr int FIX_SYM_FILE_STREAM_OPEN = 0x1B0;
constexpr int FIX_SYM_FILE_STREAM_CLOSE = 0x1B4;
constexpr int FIX_SYM_FILE_STREAM_LENGTH = 0x1B8;
constexpr int FIX_SYM_FILE_STREAM_SEEK = 0x1BC;
constexpr int FIX_SYM_FILE_STREAM_READ = 0x1C0;
constexpr int FIX_SYM_FILE_STREAM_WRITE = 0x1C4;
constexpr int FIX_SYM_SCF_GET_LANGUAGE = 0x1C8;
constexpr int FIX_SYM_SCF_GET_TIME = 0x1CC;
constexpr int FIX_SYM_SCF_GET_ASPECT = 0x1D0;
constexpr int FIX_SYM_SCF_GET_VOLUME = 0x1D4;
constexpr int FIX_SYM_SCF_GET_TERRITORY = 0x1D8;
constexpr int FIX_SYM_SCF_GET_TIMEOUT = 0x1DC;
constexpr int FIX_SYM_SCF_GET_INACTIVE_TIMEOUT = 0x1E0;
constexpr int FIX_SYM_DMA_TO_IOP = 0x1E4;
constexpr int FIX_SYM_KERNEL_SHUTDOWN = 0x1E8;
constexpr int FIX_SYM_AYBABTU = 0x1EC;
constexpr int FIX_SYM_STRING_TO_SYMBOL = 0x1F0;
constexpr int FIX_SYM_SYMBOL_TO_STRING = 500;
constexpr int FIX_SYM_PRINT = 0x1F8;
constexpr int FIX_SYM_INSPECT = 0x1FC;
constexpr int FIX_SYM_LOAD = 0x200;
constexpr int FIX_SYM_LOADB = 0x204;
constexpr int FIX_SYM_LOADO = 0x208;
constexpr int FIX_SYM_UNLOAD = 0x20C;
constexpr int FIX_SYM_FORMAT = 0x210;
constexpr int FIX_SYM_MALLOC = 0x214;
constexpr int FIX_SYM_KMALLOC = 0x218;
constexpr int FIX_SYM_KMEMOPEN = 0x21C;
constexpr int FIX_SYM_KMEMCLOSE = 0x220;
constexpr int FIX_SYM_NEW_DYNAMIC_STRUCTURE = 0x224;
constexpr int FIX_SYM_METHOD_SET = 0x228;
constexpr int FIX_SYM_LINK = 0x22C;
constexpr int FIX_SYM_LINK_BUSY = 0x230;
constexpr int FIX_SYM_LINK_RESET = 0x234;
constexpr int FIX_SYM_LINK_BEGIN = 0x238;
constexpr int FIX_SYM_LINK_RESUME = 0x23C;
constexpr int FIX_SYM_DGO_LOAD = 0x240;
constexpr int FIX_SYM_SQL_QUERY = 0x244;
constexpr int FIX_SYM_MC_RUN = 0x248;
constexpr int FIX_SYM_MC_FORMAT = 0x24C;
constexpr int FIX_SYM_MC_UNFORMAT = 0x250;
constexpr int FIX_SYM_MC_CREATE_FILE = 0x254;
constexpr int FIX_SYM_MC_SAVE = 600;
constexpr int FIX_SYM_MC_LOAD = 0x25C;
constexpr int FIX_SYM_MC_CHECK_RESULT = 0x260;
constexpr int FIX_SYM_MC_GET_SLOT_INFO = 0x264;
constexpr int FIX_SYM_MC_MAKEFILE = 0x268;
constexpr int FIX_SYM_KSET_LANGUAGE = 0x26C;
constexpr int FIX_SYM_RPC_CALL = 0x270;
constexpr int FIX_SYM_RPC_BUSY = 0x274;
constexpr int FIX_SYM_TEST_LOAD_DGO_C = 0x278;
constexpr int FIX_SYM_SYMLINK2 = 0x27c;
constexpr int FIX_SYM_SYMLINK3 = 0x280;
constexpr int FIX_SYM_ULTIMATE_MEMCPY = 0x284;
constexpr int FIX_SYM_PLAY = 0x288;
constexpr int FIX_SYM_SYMBOL_STRING = 0x28c;
constexpr int FIX_SYM_KERNEL_SYMBOL_WARNINGS = 0x290;
constexpr int FIX_SYM_NETWORK_BOOTSTRAP = 0x294;

} // namespace jakx_symbols

constexpr int false_symbol_offset() {
return jak1_symbols::FIX_SYM_FALSE;
}
Expand All @@ -334,6 +508,7 @@ constexpr int true_symbol_offset(GameVersion version) {
return jak1_symbols::FIX_SYM_TRUE;
case GameVersion::Jak2:
case GameVersion::Jak3:
case GameVersion::JakX:
return jak2_symbols::FIX_SYM_TRUE;
}
}
Expand All @@ -344,6 +519,7 @@ constexpr int empty_pair_offset_from_s7(GameVersion version) {
return jak1_symbols::FIX_SYM_EMPTY_PAIR;
case GameVersion::Jak2:
case GameVersion::Jak3:
case GameVersion::JakX:
// minus 1 for the symbol table pointer's offset.
return jak2_symbols::S7_OFF_FIX_SYM_EMPTY_PAIR;
}
Expand Down
1 change: 1 addition & 0 deletions common/type_system/TypeSystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1100,6 +1100,7 @@ void TypeSystem::add_builtin_types(GameVersion version) {
break;
case GameVersion::Jak2:
case GameVersion::Jak3:
case GameVersion::JakX:
symbol_type = add_builtin_structure("object", "symbol", true);
symbol_type->override_offset(1);
break;
Expand Down
23 changes: 21 additions & 2 deletions common/util/FontUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ const std::unordered_map<std::string, GameTextVersion> sTextVerEnumMap = {
{"jak1-v1", GameTextVersion::JAK1_V1},
{"jak1-v2", GameTextVersion::JAK1_V2},
{"jak2", GameTextVersion::JAK2},
{"jak3", GameTextVersion::JAK3}};
{"jak3", GameTextVersion::JAK3},
{"jakx", GameTextVersion::JAKX}};

const std::string& get_text_version_name(GameTextVersion version) {
for (auto& [name, ver] : sTextVerEnumMap) {
Expand Down Expand Up @@ -2003,6 +2004,21 @@ GameTextFontBank g_font_bank_jak3(GameTextVersion::JAK3,
&s_replace_info_jak2,
&s_passthrus_jak2);

/*!
* ================================
* GAME TEXT FONT BANK - JAK X
* ================================
* This font is used in:
* - Jak X
*/

// TODO cyrillic

GameTextFontBank g_font_bank_jakx(GameTextVersion::JAKX,
&s_encode_info_jak2,
&s_replace_info_jak2,
&s_passthrus_jak2);

/*!
* ========================
* GAME TEXT FONT BANK LIST
Expand All @@ -2014,7 +2030,8 @@ std::map<GameTextVersion, GameTextFontBank*> g_font_banks = {
{GameTextVersion::JAK1_V1, &g_font_bank_jak1_v1},
{GameTextVersion::JAK1_V2, &g_font_bank_jak1_v2},
{GameTextVersion::JAK2, &g_font_bank_jak2},
{GameTextVersion::JAK3, &g_font_bank_jak3}};
{GameTextVersion::JAK3, &g_font_bank_jak3},
{GameTextVersion::JAKX, &g_font_bank_jakx}};

const GameTextFontBank* get_font_bank(GameTextVersion version) {
return g_font_banks.at(version);
Expand All @@ -2029,6 +2046,8 @@ const GameTextFontBank* get_font_bank_from_game_version(GameVersion version) {
return get_font_bank(GameTextVersion::JAK2);
case GameVersion::Jak3:
return get_font_bank(GameTextVersion::JAK3);
case GameVersion::JakX:
return get_font_bank(GameTextVersion::JAKX);
default:
ASSERT_MSG(false, "Unsupported game for get_font_bank_from_game_version");
}
Expand Down
3 changes: 2 additions & 1 deletion common/util/dgo_util.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ std::string get_object_file_name(const std::string& original_name, const u8* dat
const std::string art_group_text_strings[] = {
fmt::format("/src/next/data/art-group{}/", versions::jak1::ART_FILE_VERSION),
fmt::format("/src/jak2/final/art-group{}/", versions::jak2::ART_FILE_VERSION),
fmt::format("/src/jak3/final/art-group{}/", versions::jak3::ART_FILE_VERSION)};
fmt::format("/src/jak3/final/art-group{}/", versions::jak3::ART_FILE_VERSION),
fmt::format("/src/jakx/final/art-group{}/", versions::jakx::ART_FILE_VERSION)};
const std::string suffix = "-ag.go";

for (auto& art_group_text : art_group_text_strings) {
Expand Down
8 changes: 7 additions & 1 deletion common/versions/versions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ GameVersion game_name_to_version(const std::string& name) {
return GameVersion::Jak2;
} else if (name == "jak3") {
return GameVersion::Jak3;
} else if (name == "jakx") {
return GameVersion::JakX;
} else {
ASSERT_MSG(false, fmt::format("invalid game name: {}", name));
}
Expand All @@ -29,6 +31,8 @@ std::string version_to_game_name(GameVersion v) {
return "jak2";
case GameVersion::Jak3:
return "jak3";
case GameVersion::JakX:
return "jakx";
default:
ASSERT_MSG(false, fmt::format("no game_name for version: {} found", fmt::underlying(v)));
}
Expand All @@ -42,14 +46,16 @@ std::string version_to_game_name_external(GameVersion v) {
return "Jak 2";
case GameVersion::Jak3:
return "Jak 3";
case GameVersion::JakX:
return "Jak X";
default:
ASSERT_MSG(false, fmt::format("no game_name for version: {} found", fmt::underlying(v)));
}
}

std::vector<std::string> valid_game_version_names() {
return {game_version_names[GameVersion::Jak1], game_version_names[GameVersion::Jak2],
game_version_names[GameVersion::Jak3]};
game_version_names[GameVersion::Jak3], game_version_names[GameVersion::JakX]};
}

std::string build_revision() {
Expand Down
Loading
Loading