1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-20 11:47:46 +00:00

Rename "Subrace" to "Tribe"

Everything uses this terminology, from other projects to the game itself
(internally and in the UI.)
This commit is contained in:
Joshua Goins 2025-03-31 15:38:42 -04:00
parent 50ea4dde40
commit baf0df4858
3 changed files with 37 additions and 37 deletions

View file

@ -8,7 +8,7 @@ use crate::{ByteBuffer, ByteSpan};
use binrw::binrw; use binrw::binrw;
use binrw::{BinRead, BinWrite}; use binrw::{BinRead, BinWrite};
use crate::race::{Gender, Race, Subrace}; use crate::race::{Gender, Race, Tribe};
#[binrw] #[binrw]
#[br(little)] #[br(little)]
@ -27,8 +27,8 @@ pub struct CustomizeData {
/// The height of the character from 0 to 100. /// The height of the character from 0 to 100.
pub height: u8, pub height: u8,
/// The character's subrace. /// The character's tribe.
pub subrace: Subrace, pub tribe: Tribe,
/// The character's selected face. /// The character's selected face.
pub face: u8, pub face: u8,
@ -105,7 +105,7 @@ impl Default for CustomizeData {
fn default() -> Self { fn default() -> Self {
Self { Self {
race: Race::Hyur, race: Race::Hyur,
subrace: Subrace::Midlander, tribe: Tribe::Midlander,
gender: Gender::Male, gender: Gender::Male,
age: 1, age: 1,
height: 50, height: 50,
@ -251,7 +251,7 @@ mod tests {
assert_eq!(chardat.customize.gender, Gender::Male); assert_eq!(chardat.customize.gender, Gender::Male);
assert_eq!(chardat.customize.age, 1); assert_eq!(chardat.customize.age, 1);
assert_eq!(chardat.customize.height, 50); assert_eq!(chardat.customize.height, 50);
assert_eq!(chardat.customize.subrace, Subrace::Midlander); assert_eq!(chardat.customize.tribe, Tribe::Midlander);
assert_eq!(chardat.customize.face, 5); assert_eq!(chardat.customize.face, 5);
assert_eq!(chardat.customize.hair, 1); assert_eq!(chardat.customize.hair, 1);
assert!(!chardat.customize.enable_highlights); assert!(!chardat.customize.enable_highlights);
@ -286,7 +286,7 @@ mod tests {
assert_eq!(chardat.customize.gender, Gender::Female); assert_eq!(chardat.customize.gender, Gender::Female);
assert_eq!(chardat.customize.age, 1); assert_eq!(chardat.customize.age, 1);
assert_eq!(chardat.customize.height, 50); assert_eq!(chardat.customize.height, 50);
assert_eq!(chardat.customize.subrace, Subrace::Xaela); assert_eq!(chardat.customize.tribe, Tribe::Xaela);
assert_eq!(chardat.customize.face, 3); assert_eq!(chardat.customize.face, 3);
assert_eq!(chardat.customize.hair, 5); assert_eq!(chardat.customize.hair, 5);
assert!(!chardat.customize.enable_highlights); assert!(!chardat.customize.enable_highlights);
@ -321,7 +321,7 @@ mod tests {
assert_eq!(chardat.customize.gender, Gender::Male); assert_eq!(chardat.customize.gender, Gender::Male);
assert_eq!(chardat.customize.age, 1); assert_eq!(chardat.customize.age, 1);
assert_eq!(chardat.customize.height, 50); assert_eq!(chardat.customize.height, 50);
assert_eq!(chardat.customize.subrace, Subrace::Plainsfolk); assert_eq!(chardat.customize.tribe, Tribe::Plainsfolk);
assert_eq!(chardat.customize.face, 1); assert_eq!(chardat.customize.face, 1);
assert_eq!(chardat.customize.hair, 8); assert_eq!(chardat.customize.hair, 8);
assert!(!chardat.customize.enable_highlights); assert!(!chardat.customize.enable_highlights);
@ -356,7 +356,7 @@ mod tests {
assert_eq!(chardat.customize.gender, Gender::Female); assert_eq!(chardat.customize.gender, Gender::Female);
assert_eq!(chardat.customize.age, 1); assert_eq!(chardat.customize.age, 1);
assert_eq!(chardat.customize.height, 50); assert_eq!(chardat.customize.height, 50);
assert_eq!(chardat.customize.subrace, Subrace::Rava); assert_eq!(chardat.customize.tribe, Tribe::Rava);
assert_eq!(chardat.customize.face, 1); assert_eq!(chardat.customize.face, 1);
assert_eq!(chardat.customize.hair, 8); assert_eq!(chardat.customize.hair, 8);
assert!(!chardat.customize.enable_highlights); assert!(!chardat.customize.enable_highlights);

View file

@ -1,7 +1,7 @@
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com> // SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later // SPDX-License-Identifier: GPL-3.0-or-later
use crate::race::{Gender, Race, Subrace, get_race_id}; use crate::race::{Gender, Race, Tribe, get_race_id};
#[repr(u8)] #[repr(u8)]
#[derive(Debug, Clone, PartialEq, Eq, Hash)] #[derive(Debug, Clone, PartialEq, Eq, Hash)]
@ -85,14 +85,14 @@ pub fn get_slot_from_abbreviation(abrev: &str) -> Option<Slot> {
pub fn build_equipment_path( pub fn build_equipment_path(
model_id: i32, model_id: i32,
race: Race, race: Race,
subrace: Subrace, tribe: Tribe,
gender: Gender, gender: Gender,
slot: Slot, slot: Slot,
) -> String { ) -> String {
format!( format!(
"chara/equipment/e{:04}/model/c{:04}e{:04}_{}.mdl", "chara/equipment/e{:04}/model/c{:04}e{:04}_{}.mdl",
model_id, model_id,
get_race_id(race, subrace, gender).unwrap(), get_race_id(race, tribe, gender).unwrap(),
model_id, model_id,
get_slot_abbreviation(slot) get_slot_abbreviation(slot)
) )
@ -143,11 +143,11 @@ pub fn build_character_path(
category: CharacterCategory, category: CharacterCategory,
body_ver: i32, body_ver: i32,
race: Race, race: Race,
subrace: Subrace, tribe: Tribe,
gender: Gender, gender: Gender,
) -> String { ) -> String {
let category_path = get_character_category_path(category); let category_path = get_character_category_path(category);
let race_id = get_race_id(race, subrace, gender).unwrap(); let race_id = get_race_id(race, tribe, gender).unwrap();
let category_abbreviation = get_character_category_abbreviation(category); let category_abbreviation = get_character_category_abbreviation(category);
let category_prefix = get_character_category_prefix(category); let category_prefix = get_character_category_prefix(category);
format!( format!(
@ -202,7 +202,7 @@ mod tests {
#[test] #[test]
fn test_equipment_path() { fn test_equipment_path() {
assert_eq!( assert_eq!(
build_equipment_path(0, Race::Hyur, Subrace::Midlander, Gender::Male, Slot::Body), build_equipment_path(0, Race::Hyur, Tribe::Midlander, Gender::Male, Slot::Body),
"chara/equipment/e0000/model/c0101e0000_top.mdl" "chara/equipment/e0000/model/c0101e0000_top.mdl"
); );
} }

View file

@ -17,9 +17,9 @@ pub enum Gender {
#[brw(repr = u8)] #[brw(repr = u8)]
#[derive(PartialEq, Eq, Clone, Debug)] #[derive(PartialEq, Eq, Clone, Debug)]
#[repr(u8)] #[repr(u8)]
/// The race's "subrace". Each race has two subraces, which are actually identical (even down to the ids!) /// The race's "tribe". Each race has two tribes, which are usually very similar (even down to the ids!)
/// with the exception of Hyurs, which have two unique subraces that are really two separate races. /// with the exception of Hyurs, which have two very distinct tribes.
pub enum Subrace { pub enum Tribe {
Midlander = 1, Midlander = 1,
Highlander = 2, Highlander = 2,
Wildwood = 3, Wildwood = 3,
@ -54,17 +54,17 @@ pub enum Race {
Viera = 8, Viera = 8,
} }
/// Gets a proper race identifier (such as 101, for Hyur-Midlander-Males) given a race, a subrace, /// Gets a proper race identifier (such as 101, for Hyur-Midlander-Males) given a race, a tribe,
/// and a gender. /// and a gender.
pub fn get_race_id(race: Race, subrace: Subrace, gender: Gender) -> Option<i32> { pub fn get_race_id(race: Race, tribe: Tribe, gender: Gender) -> Option<i32> {
// TODO: should we check for invalid subraces like the Hyur branch does? // TODO: should we check for invalid tribes like the Hyur branch does?
match race { match race {
Race::Hyur => match subrace { Race::Hyur => match tribe {
Subrace::Midlander => match gender { Tribe::Midlander => match gender {
Gender::Male => Some(101), Gender::Male => Some(101),
Gender::Female => Some(201), Gender::Female => Some(201),
}, },
Subrace::Highlander => match gender { Tribe::Highlander => match gender {
Gender::Male => Some(301), Gender::Male => Some(301),
Gender::Female => Some(401), Gender::Female => Some(401),
}, },
@ -103,25 +103,25 @@ pub fn get_race_id(race: Race, subrace: Subrace, gender: Gender) -> Option<i32>
} }
} }
/// Builds the path to the skeleton (sklb) file for a given `race`, `subrace` and `gender`. /// Builds the path to the skeleton (sklb) file for a given `race`, `tribe` and `gender`.
pub fn build_skeleton_path(race: Race, subrace: Subrace, gender: Gender) -> String { pub fn build_skeleton_path(race: Race, tribe: Tribe, gender: Gender) -> String {
format!( format!(
"chara/human/c{0:04}/skeleton/base/b0001/skl_c{0:04}b0001.sklb", "chara/human/c{0:04}/skeleton/base/b0001/skl_c{0:04}b0001.sklb",
get_race_id(race, subrace, gender).unwrap() get_race_id(race, tribe, gender).unwrap()
) )
} }
/// Returns the two subraces associated with a given `race`. For example, `Hyur` would return `[Midlander, Highlander]`. /// Returns the two tribes associated with a given `race`. For example, `Hyur` would return `[Midlander, Highlander]`.
pub fn get_supported_subraces(race: Race) -> [Subrace; 2] { pub fn get_supported_tribes(race: Race) -> [Tribe; 2] {
match race { match race {
Race::Hyur => [Subrace::Midlander, Subrace::Highlander], Race::Hyur => [Tribe::Midlander, Tribe::Highlander],
Race::Elezen => [Subrace::Wildwood, Subrace::Duskwight], Race::Elezen => [Tribe::Wildwood, Tribe::Duskwight],
Race::Lalafell => [Subrace::Plainsfolk, Subrace::Dunesfolk], Race::Lalafell => [Tribe::Plainsfolk, Tribe::Dunesfolk],
Race::Miqote => [Subrace::Seeker, Subrace::Keeper], Race::Miqote => [Tribe::Seeker, Tribe::Keeper],
Race::Roegadyn => [Subrace::SeaWolf, Subrace::Hellsguard], Race::Roegadyn => [Tribe::SeaWolf, Tribe::Hellsguard],
Race::AuRa => [Subrace::Raen, Subrace::Xaela], Race::AuRa => [Tribe::Raen, Tribe::Xaela],
Race::Hrothgar => [Subrace::Hellion, Subrace::Lost], Race::Hrothgar => [Tribe::Hellion, Tribe::Lost],
Race::Viera => [Subrace::Raen, Subrace::Veena], Race::Viera => [Tribe::Raen, Tribe::Veena],
} }
} }
@ -132,7 +132,7 @@ mod tests {
#[test] #[test]
fn test_convert_race_num() { fn test_convert_race_num() {
assert_eq!( assert_eq!(
get_race_id(Race::Roegadyn, Subrace::SeaWolf, Gender::Male), get_race_id(Race::Roegadyn, Tribe::SeaWolf, Gender::Male),
Some(901) Some(901)
); );
} }