From baf0df485858a7b9513f1a1dd90e1b97189aa15e Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 31 Mar 2025 15:38:42 -0400 Subject: [PATCH] Rename "Subrace" to "Tribe" Everything uses this terminology, from other projects to the game itself (internally and in the UI.) --- src/chardat.rs | 16 ++++++++-------- src/equipment.rs | 12 ++++++------ src/race.rs | 46 +++++++++++++++++++++++----------------------- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/chardat.rs b/src/chardat.rs index 37db36b..f96fecc 100644 --- a/src/chardat.rs +++ b/src/chardat.rs @@ -8,7 +8,7 @@ use crate::{ByteBuffer, ByteSpan}; use binrw::binrw; use binrw::{BinRead, BinWrite}; -use crate::race::{Gender, Race, Subrace}; +use crate::race::{Gender, Race, Tribe}; #[binrw] #[br(little)] @@ -27,8 +27,8 @@ pub struct CustomizeData { /// The height of the character from 0 to 100. pub height: u8, - /// The character's subrace. - pub subrace: Subrace, + /// The character's tribe. + pub tribe: Tribe, /// The character's selected face. pub face: u8, @@ -105,7 +105,7 @@ impl Default for CustomizeData { fn default() -> Self { Self { race: Race::Hyur, - subrace: Subrace::Midlander, + tribe: Tribe::Midlander, gender: Gender::Male, age: 1, height: 50, @@ -251,7 +251,7 @@ mod tests { assert_eq!(chardat.customize.gender, Gender::Male); assert_eq!(chardat.customize.age, 1); 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.hair, 1); assert!(!chardat.customize.enable_highlights); @@ -286,7 +286,7 @@ mod tests { assert_eq!(chardat.customize.gender, Gender::Female); assert_eq!(chardat.customize.age, 1); 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.hair, 5); assert!(!chardat.customize.enable_highlights); @@ -321,7 +321,7 @@ mod tests { assert_eq!(chardat.customize.gender, Gender::Male); assert_eq!(chardat.customize.age, 1); 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.hair, 8); assert!(!chardat.customize.enable_highlights); @@ -356,7 +356,7 @@ mod tests { assert_eq!(chardat.customize.gender, Gender::Female); assert_eq!(chardat.customize.age, 1); 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.hair, 8); assert!(!chardat.customize.enable_highlights); diff --git a/src/equipment.rs b/src/equipment.rs index 94bfed2..37b547b 100755 --- a/src/equipment.rs +++ b/src/equipment.rs @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Joshua Goins // 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)] #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -85,14 +85,14 @@ pub fn get_slot_from_abbreviation(abrev: &str) -> Option { pub fn build_equipment_path( model_id: i32, race: Race, - subrace: Subrace, + tribe: Tribe, gender: Gender, slot: Slot, ) -> String { format!( "chara/equipment/e{:04}/model/c{:04}e{:04}_{}.mdl", model_id, - get_race_id(race, subrace, gender).unwrap(), + get_race_id(race, tribe, gender).unwrap(), model_id, get_slot_abbreviation(slot) ) @@ -143,11 +143,11 @@ pub fn build_character_path( category: CharacterCategory, body_ver: i32, race: Race, - subrace: Subrace, + tribe: Tribe, gender: Gender, ) -> String { 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_prefix = get_character_category_prefix(category); format!( @@ -202,7 +202,7 @@ mod tests { #[test] fn test_equipment_path() { 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" ); } diff --git a/src/race.rs b/src/race.rs index 46a83ac..e374a86 100755 --- a/src/race.rs +++ b/src/race.rs @@ -17,9 +17,9 @@ pub enum Gender { #[brw(repr = u8)] #[derive(PartialEq, Eq, Clone, Debug)] #[repr(u8)] -/// The race's "subrace". Each race has two subraces, which are actually identical (even down to the ids!) -/// with the exception of Hyurs, which have two unique subraces that are really two separate races. -pub enum Subrace { +/// 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 very distinct tribes. +pub enum Tribe { Midlander = 1, Highlander = 2, Wildwood = 3, @@ -54,17 +54,17 @@ pub enum Race { 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. -pub fn get_race_id(race: Race, subrace: Subrace, gender: Gender) -> Option { - // TODO: should we check for invalid subraces like the Hyur branch does? +pub fn get_race_id(race: Race, tribe: Tribe, gender: Gender) -> Option { + // TODO: should we check for invalid tribes like the Hyur branch does? match race { - Race::Hyur => match subrace { - Subrace::Midlander => match gender { + Race::Hyur => match tribe { + Tribe::Midlander => match gender { Gender::Male => Some(101), Gender::Female => Some(201), }, - Subrace::Highlander => match gender { + Tribe::Highlander => match gender { Gender::Male => Some(301), Gender::Female => Some(401), }, @@ -103,25 +103,25 @@ pub fn get_race_id(race: Race, subrace: Subrace, gender: Gender) -> Option } } -/// Builds the path to the skeleton (sklb) file for a given `race`, `subrace` and `gender`. -pub fn build_skeleton_path(race: Race, subrace: Subrace, gender: Gender) -> String { +/// Builds the path to the skeleton (sklb) file for a given `race`, `tribe` and `gender`. +pub fn build_skeleton_path(race: Race, tribe: Tribe, gender: Gender) -> String { format!( "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]`. -pub fn get_supported_subraces(race: Race) -> [Subrace; 2] { +/// Returns the two tribes associated with a given `race`. For example, `Hyur` would return `[Midlander, Highlander]`. +pub fn get_supported_tribes(race: Race) -> [Tribe; 2] { match race { - Race::Hyur => [Subrace::Midlander, Subrace::Highlander], - Race::Elezen => [Subrace::Wildwood, Subrace::Duskwight], - Race::Lalafell => [Subrace::Plainsfolk, Subrace::Dunesfolk], - Race::Miqote => [Subrace::Seeker, Subrace::Keeper], - Race::Roegadyn => [Subrace::SeaWolf, Subrace::Hellsguard], - Race::AuRa => [Subrace::Raen, Subrace::Xaela], - Race::Hrothgar => [Subrace::Hellion, Subrace::Lost], - Race::Viera => [Subrace::Raen, Subrace::Veena], + Race::Hyur => [Tribe::Midlander, Tribe::Highlander], + Race::Elezen => [Tribe::Wildwood, Tribe::Duskwight], + Race::Lalafell => [Tribe::Plainsfolk, Tribe::Dunesfolk], + Race::Miqote => [Tribe::Seeker, Tribe::Keeper], + Race::Roegadyn => [Tribe::SeaWolf, Tribe::Hellsguard], + Race::AuRa => [Tribe::Raen, Tribe::Xaela], + Race::Hrothgar => [Tribe::Hellion, Tribe::Lost], + Race::Viera => [Tribe::Raen, Tribe::Veena], } } @@ -132,7 +132,7 @@ mod tests { #[test] fn test_convert_race_num() { assert_eq!( - get_race_id(Race::Roegadyn, Subrace::SeaWolf, Gender::Male), + get_race_id(Race::Roegadyn, Tribe::SeaWolf, Gender::Male), Some(901) ); }