Files
Delta-v/Content.Shared/Humanoid/NamingSystem.cs
T
portfiendandDEATHB4DEFEAT 690cbe995a Rodentia Species (#1511)
* add: basic rodent species

* add: rodentia base sprites

* add: basic rodent hand/foot markings

* add: ears i got em

* add: tail markings

* add: big ears

by request

* tweak: default markings, coloration

everything uses skin color by default when added except for these new "default" markings which use tattoo

* add: the rest of the basic body part markings

* add: snout textures

* add: pattern markings

* add: cheek detail

* add: sex variations for chest marking

* add: give rodentia the generic markings

* add: rodentia names

* add: damage, voice, mass, emotes to rodentia

* add: rummager ability for rodentia

* remove: temperature protection from rodentia

* add: some makeup markings for rodentia

* add: include rodentia in misc pools

* add: rodentia guidebook entries

* tweak: adjust rodentia marking points

* add: rodentia pie sprite

* tweak desc

* tweak: change rodentia name scheme

* tweak: adjust damage modifiers for rodentia

* add: rodentia always trigger mouse traps

* tweak: rodentia have unique speech verbs

* tweak: change rodentia inventory shape

* tweak: rodentia take more phys dmg overall

* tweak: made rodentia hungry

* add: mouth storage component on rodents

* add: server mouthstoragesystem

* add: force-dump mouth storage on trip

hmm the networking on this is a little ehh. but watever

* add: rodentia drop mouth items on damage

* add: blocked interactions if mouth is full

* fix: corrected accent oops

* tweak: tense

* fuck this import in particular

* tweak: spit damage threshold

* fix: no redundant open actions

* refactor: move this action into the types file

* add: rodentia get ability to hide under tables etc.

* tweak: change rodentia action icons

* refactor: im renaming this component and system lol

* refactor: rename this event too

i was gonna refactor the whole system to be more like climbing, but the climbing system is convoluted so im just gonna do this and put it aside

* tweak: fix the mouth storage icon
the number covers it

* tweak: check if colliding with table before un-sneaking

* fix: crawl action cooldown and popup text

* add: slowdown to sneak ability

* refactor: fix this namespace

* tweak: rummageable objects now use a cooldown

* fix: newlines

* Apply suggestions from code review

Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
Signed-off-by: portfiend <109661617+portfiend@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
Signed-off-by: portfiend <109661617+portfiend@users.noreply.github.com>

* fix: collision group variavbles

* add: proper "full body" sprite

* add: move blaze to head folder, "round face" marking

* add: whisker markings

* tweal: rodentia are 50% -> 33% hungrier

1.5x seemed excessive

* refactor(mouthStorage): move OnExamined from server to shared

* refactor(mousetrap): use HasComp

* refactor(mouthStorage): use a public api instead of event here

* refactor(yml): KILL REPETITION

* refactor(parts/rodentia): KILL REPETITION

---------

Signed-off-by: portfiend <109661617+portfiend@users.noreply.github.com>
Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
2024-09-07 23:04:34 -03:00

75 lines
3.6 KiB
C#

using Content.Shared.Humanoid.Prototypes;
using Content.Shared.Dataset;
using Robust.Shared.Random;
using Robust.Shared.Prototypes;
using Robust.Shared.Enums;
namespace Content.Shared.Humanoid
{
/// <summary>
/// Figure out how to name a humanoid with these extensions.
/// </summary>
public sealed class NamingSystem : EntitySystem
{
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
public string GetName(string species, Gender? gender = null)
{
// if they have an old species or whatever just fall back to human I guess?
// Some downstream is probably gonna have this eventually but then they can deal with fallbacks.
if (!_prototypeManager.TryIndex(species, out SpeciesPrototype? speciesProto))
{
speciesProto = _prototypeManager.Index<SpeciesPrototype>("Human");
Log.Warning($"Unable to find species {species} for name, falling back to Human");
}
switch (speciesProto.Naming)
{
case SpeciesNaming.First:
return Loc.GetString("namepreset-first",
("first", GetFirstName(speciesProto, gender)));
// Start of Nyano - Summary: for Oni naming
case SpeciesNaming.LastNoFirst:
return Loc.GetString("namepreset-lastnofirst",
("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto)));
// End of Nyano - Summary: for Oni naming
case SpeciesNaming.TheFirstofLast:
return Loc.GetString("namepreset-thefirstoflast",
("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto)));
case SpeciesNaming.FirstDashFirst:
return Loc.GetString("namepreset-firstdashfirst",
("first1", GetFirstName(speciesProto, gender)), ("first2", GetFirstName(speciesProto, gender)));
case SpeciesNaming.LastFirst: // DeltaV: Rodentia name scheme
return Loc.GetString("namepreset-lastfirst",
("last", GetLastName(speciesProto)), ("first", GetFirstName(speciesProto, gender)));
case SpeciesNaming.FirstLast:
default:
return Loc.GetString("namepreset-firstlast",
("first", GetFirstName(speciesProto, gender)), ("last", GetLastName(speciesProto)));
}
}
public string GetFirstName(SpeciesPrototype speciesProto, Gender? gender = null)
{
switch (gender)
{
case Gender.Male:
return _random.Pick(_prototypeManager.Index<DatasetPrototype>(speciesProto.MaleFirstNames).Values);
case Gender.Female:
return _random.Pick(_prototypeManager.Index<DatasetPrototype>(speciesProto.FemaleFirstNames).Values);
default:
if (_random.Prob(0.5f))
return _random.Pick(_prototypeManager.Index<DatasetPrototype>(speciesProto.MaleFirstNames).Values);
else
return _random.Pick(_prototypeManager.Index<DatasetPrototype>(speciesProto.FemaleFirstNames).Values);
}
}
public string GetLastName(SpeciesPrototype speciesProto)
{
return _random.Pick(_prototypeManager.Index<DatasetPrototype>(speciesProto.LastNames).Values);
}
}
}