From 87af3281fb9db399953bf77d5f7efff8822a6095 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Sat, 14 Oct 2023 04:22:43 -0700 Subject: [PATCH] use generic baby/child names when race doesn't have something specific --- docs/changelog.txt | 1 + library/modules/Units.cpp | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index 5d83dc4cf..a196691af 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -64,6 +64,7 @@ Template for new versions: - `sort`: new search widgets for artifacts on the world/raid screen ## Fixes +- `zone`: races without specific child or baby names will now get generic child/baby names instead of an empty string - `zone`: don't show animal assignment link for cages and restraints linked to dungeon zones (which aren't normally assignable) ## Misc Improvements diff --git a/library/modules/Units.cpp b/library/modules/Units.cpp index 83554ef78..a9d361706 100644 --- a/library/modules/Units.cpp +++ b/library/modules/Units.cpp @@ -1225,8 +1225,12 @@ string Units::getRaceBabyNameById(int32_t id) if (id >= 0 && (size_t)id < world->raws.creatures.all.size()) { df::creature_raw* raw = world->raws.creatures.all[id]; - if (raw) - return raw->general_baby_name[0]; + if (raw) { + string & baby_name = raw->general_baby_name[0]; + if (!baby_name.empty()) + return baby_name; + return getRaceReadableNameById(id) + " baby"; + } } return ""; } @@ -1242,8 +1246,12 @@ string Units::getRaceChildNameById(int32_t id) if (id >= 0 && (size_t)id < world->raws.creatures.all.size()) { df::creature_raw* raw = world->raws.creatures.all[id]; - if (raw) - return raw->general_child_name[0]; + if (raw) { + string & child_name = raw->general_child_name[0]; + if (!child_name.empty()) + return child_name; + return getRaceReadableNameById(id) + " child"; + } } return ""; } @@ -1266,7 +1274,10 @@ static string get_caste_name(df::unit* unit) { } string Units::getReadableName(df::unit* unit) { - string race_name = isChild(unit) ? getRaceChildName(unit) : get_caste_name(unit); + string race_name = isBaby(unit) ? getRaceBabyName(unit) : + (isChild(unit) ? getRaceChildName(unit) : get_caste_name(unit)); + if (race_name.empty()) + race_name = getRaceReadableName(unit); if (isHunter(unit)) race_name = "hunter " + race_name; if (isWar(unit))