2023-08-06 08:25:04 -04:00
|
|
|
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2022-10-25 11:03:05 -04:00
|
|
|
use std::fs;
|
|
|
|
use std::path::Path;
|
2022-07-21 19:58:07 -04:00
|
|
|
|
2023-08-06 08:25:04 -04:00
|
|
|
use binrw::binrw;
|
|
|
|
|
2022-08-09 21:51:52 -04:00
|
|
|
#[binrw]
|
|
|
|
#[brw(repr(u8))]
|
2022-07-21 20:08:14 -04:00
|
|
|
#[repr(u8)]
|
2023-04-09 15:33:43 -04:00
|
|
|
#[derive(Copy, Clone)]
|
2023-09-22 18:15:23 -04:00
|
|
|
/// The language the game data is written for. Some of these languages are supported in the Global region.
|
2022-07-19 19:29:41 -04:00
|
|
|
pub enum Language {
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Used for data that is language-agnostic, such as item data.
|
2022-07-19 19:29:41 -04:00
|
|
|
None,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Japanese language.
|
2022-07-19 19:29:41 -04:00
|
|
|
Japanese,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// English language.
|
2022-07-19 19:29:41 -04:00
|
|
|
English,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// German language.
|
2022-07-19 19:29:41 -04:00
|
|
|
German,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// French language.
|
2022-07-19 19:29:41 -04:00
|
|
|
French,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Chinese (Simplified) language.
|
2022-07-19 19:29:41 -04:00
|
|
|
ChineseSimplified,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Chinese (Traditional) language.
|
2022-07-19 19:29:41 -04:00
|
|
|
ChineseTraditional,
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Korean language.
|
2022-07-19 19:29:41 -04:00
|
|
|
Korean,
|
|
|
|
}
|
|
|
|
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Returns the shorthand language code for `language`. For example, English becomes "en".
|
2022-07-21 19:58:07 -04:00
|
|
|
pub fn get_language_code(lang: &Language) -> &'static str {
|
|
|
|
match &lang {
|
2022-07-19 19:29:41 -04:00
|
|
|
Language::None => "",
|
|
|
|
Language::Japanese => "ja",
|
|
|
|
Language::English => "en",
|
|
|
|
Language::German => "de",
|
|
|
|
Language::French => "fr",
|
|
|
|
Language::ChineseSimplified => "chs",
|
|
|
|
Language::ChineseTraditional => "cht",
|
2022-08-16 11:52:07 -04:00
|
|
|
Language::Korean => "ko",
|
2022-07-19 19:29:41 -04:00
|
|
|
}
|
2022-08-09 21:51:52 -04:00
|
|
|
}
|
|
|
|
|
2023-09-22 18:15:23 -04:00
|
|
|
/// The region of the game. Used to denote the region a patch is meant for.
|
2022-08-09 21:51:52 -04:00
|
|
|
#[binrw]
|
|
|
|
#[brw(repr = i16)]
|
2022-09-15 16:26:31 -04:00
|
|
|
#[derive(Debug, PartialEq, Eq)]
|
2022-08-09 21:51:52 -04:00
|
|
|
pub enum Region {
|
2025-03-06 18:52:26 -05:00
|
|
|
/// The global region, used for any region not specified.
|
|
|
|
Global = -1,
|
|
|
|
/// Korea and China clients.
|
|
|
|
KoreaChina = 1,
|
2022-08-09 21:51:52 -04:00
|
|
|
}
|
2022-10-25 11:03:05 -04:00
|
|
|
|
|
|
|
/// Reads a version file.
|
|
|
|
pub fn read_version(p: &Path) -> Option<String> {
|
|
|
|
fs::read_to_string(p).ok()
|
|
|
|
}
|
2024-04-15 19:40:34 -04:00
|
|
|
|
|
|
|
#[binrw]
|
2024-04-17 17:21:43 -04:00
|
|
|
#[brw(repr = u8)]
|
2025-03-08 08:57:41 -05:00
|
|
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
2024-04-15 19:40:34 -04:00
|
|
|
pub enum Platform {
|
2025-03-06 16:26:07 -05:00
|
|
|
/// Windows and macOS
|
|
|
|
Win32 = 0x0,
|
|
|
|
/// Playstation 3
|
|
|
|
PS3 = 0x1,
|
|
|
|
/// Playstation 4
|
|
|
|
PS4 = 0x2,
|
|
|
|
/// Playstation 5
|
|
|
|
PS5 = 0x3,
|
|
|
|
/// Xbox
|
|
|
|
Xbox = 0x4,
|
2024-04-15 19:40:34 -04:00
|
|
|
}
|
2024-04-15 19:43:16 -04:00
|
|
|
|
|
|
|
pub fn get_platform_string(id: &Platform) -> &'static str {
|
|
|
|
match &id {
|
|
|
|
Platform::Win32 => "win32",
|
2024-04-16 22:16:42 -04:00
|
|
|
Platform::PS3 => "ps3",
|
2025-03-06 16:26:07 -05:00
|
|
|
Platform::PS4 => "ps4",
|
|
|
|
Platform::PS5 => "ps5",
|
|
|
|
Platform::Xbox => "lys",
|
2024-04-15 19:43:16 -04:00
|
|
|
}
|
2024-04-20 13:18:03 -04:00
|
|
|
}
|