Imp ports - Novice mark and wearable examine (#6118)

* Obvious Examine (#2462)

* Obvious Examine

* Feature creep is real

* Less words and better colors

* even fewer words, please

* Oops sorry yaml

* Refactor entire Obvious Examine system

* whitespace

---------

Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
# Conflicts:
#	Content.Shared/_Impstation/Examine/DetailedInspectComponent.cs
#	Content.Shared/_Impstation/Examine/DetailedInspectSystem.cs
#	Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl
#	Resources/Prototypes/Entities/Clothing/Neck/cloaks.yml
#	Resources/Prototypes/Entities/Clothing/Neck/medals.yml
#	Resources/Prototypes/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/Entities/Clothing/Neck/scarfs.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/cloaks.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/misc.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/scarfs.yml

* Novice's mark (#2626)

* Adding the item

* Update descriptions

* Add to trinket list, add to all trainee roles

* Add to PTech

* License fix

* And credit fix.

 Be nice it's my first sprite implementation lol
# Conflicts:
#	Resources/Prototypes/Catalog/VendingMachines/Inventories/cart.yml
#	Resources/Prototypes/Loadouts/loadout_groups.yml
#	Resources/Prototypes/Roles/Jobs/Engineering/technical_assistant.yml
#	Resources/Prototypes/Roles/Jobs/Medical/medical_intern.yml
#	Resources/Prototypes/_DV/Roles/Jobs/Cargo/cargo_assistant.yml
#	Resources/Prototypes/_Impstation/Entities/Clothing/Neck/pins.yml
#	Resources/Prototypes/_Impstation/Loadouts/Miscellaneous/trinkets.yml

* killing things i forgot to oops

* fix + select in loadouts for everyone

---------

Co-authored-by: January Nelson <inelsona@gmail.com>
Co-authored-by: beck <163376292+widgetbeck@users.noreply.github.com>
This commit is contained in:
freezer dog 2026-07-20 18:08:56 -04:00 committed by GitHub
parent ca91333906
commit 018d65d99b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
28 changed files with 597 additions and 24 deletions

View File

@ -0,0 +1,66 @@
using Robust.Shared.GameStates;
namespace Content.Shared._Impstation.Clothing;
/// <summary>
/// Adds examine text to the entity that wears item, for making things obvious.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
[Access(typeof(WearerGetsExamineTextSystem))]
public sealed partial class WearerGetsExamineTextComponent : Component
{
/// <summary>
/// The LocId that specifies what category of object this is.
/// i.e. "pin" or "scarf"
/// Should be redefined on a per-category basis, naturally.
/// </summary>
[DataField("thing")]
public LocId Category = "obvious-thing-default";
/// <summary>
/// The LocId that specifies what member of the category this is.
/// i.e. "lesbian pride"
/// Can be used to define text colors that are copied to all things
/// which share this specifier (i.e. the other items of the same pride).
/// (And summarily, makes accessibility-based changes for these colors a cinch.)
/// Should be defined by each thing that has this component.
/// </summary>
[DataField("thingType")]
public LocId Specifier = "obvious-type-default";
/// <summary>
/// The LocId that will be added to any wearing entity's examination.
/// Typically only needs redefining on a per-category basis,
/// but items that should have totally-unique obvious text can simply specify them here.
/// </summary>
[DataField("examineText", required: true)]
public LocId ExamineOnWearer = "obvious-desc-default";
/// <summary>
/// Reference to the entity wearing this clothing.
/// </summary>
[DataField, AutoNetworkedField]
public EntityUid? Wearer;
/// <summary>
/// The string that is attached to this item's ExamineOnWearer.
/// Typically doesn't need to be redefined.
/// </summary>
[DataField]
public LocId PrefixExamineOnWearer = "obvious-prefix-wearing";
/// <summary>
/// If true, an entity with this item in any slot (i.e. in pockets) will gain the examine text,
/// instead of when just equipped as clothing.
/// Should be used sparingly only when truly appropriate; this is effectively a half-measure for lack of a special pin slot.
/// </summary>
[DataField]
public bool PocketEvident;
/// <summary>
/// If true, the entity's description will inform examiners what others will see on the wearer (before they equip it).
/// If the item is contraband, the item will also warn that displaying it may cause undue attention.
/// Keep this false for good-natured jokes (i.e. the pride cloaks having funny, non-pride names)
/// </summary>
[DataField]
public bool WarnExamine = true;
}

View File

@ -0,0 +1,111 @@
using Content.Shared.Clothing.Components;
using Content.Shared.Examine;
using Content.Shared.IdentityManagement;
using Content.Shared.Inventory.Events;
using Content.Shared.Contraband;
using Content.Shared._Impstation.Examine;
using System.Text;
namespace Content.Shared._Impstation.Clothing;
/// <summary>
/// Adds examine text to the entity that wears item, for making things obvious.
/// </summary>
public sealed class WearerGetsExamineTextSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<WearerGetsExamineTextComponent, GotEquippedEvent>(OnEquipped);
SubscribeLocalEvent<WearerGetsExamineTextComponent, GotUnequippedEvent>(OnUnequipped);
SubscribeLocalEvent<WearerGetsExamineTextComponent, ExaminedEvent>(OnExamine);
}
private void OnEquipped(Entity<WearerGetsExamineTextComponent> entity, ref GotEquippedEvent args)
{
if (!TryComp(entity, out ClothingComponent? clothing))
return;
var isCorrectSlot = (clothing.Slots & args.SlotFlags) != Inventory.SlotFlags.NONE;
if (!entity.Comp.PocketEvident) //if it can't be evident in our pockets
{
// Make sure the clothing item was equipped to the right slot, and not just held in a hand.
if (!isCorrectSlot)
return;
}
entity.Comp.Wearer = args.Equipee;
Dirty(entity);
//GIVE THEM INSPECT TEXT
var obviousExamine = EnsureComp<ExtraExamineTextComponent>(args.Equipee);
obviousExamine.Lines.TryAdd(entity.Owner, //using try so that we don't cause an error if we move something from slot to slot
ConstructExamineText(entity, !isCorrectSlot, args.Equipee));
}
private string ConstructExamineText(Entity<WearerGetsExamineTextComponent> entity, bool prefixFallback, EntityUid affecting)
{
//parameters (these are the same between both constructions)
var user = Identity.Entity(affecting, EntityManager);
var nomen = Identity.Name(affecting, EntityManager);
var thing = Loc.GetString(entity.Comp.Category);
var type = Loc.GetString(entity.Comp.Specifier);
var stringSpec = entity.Comp.Specifier.ToString();
var shortType = stringSpec.Substring(stringSpec.LastIndexOf('-')); // necessary for working with colored text...
var prefix = Loc.GetString(prefixFallback ? "obvious-prefix-default" : entity.Comp.PrefixExamineOnWearer, // uses a different prefix if worn / displayed
("user", user),
("name", nomen),
("thing", thing),
("type", type));
var suffix = Loc.GetString(entity.Comp.ExamineOnWearer,
("user", user),
("name", nomen),
("thing", thing),
("type", type),
("short-type", shortType));
return prefix + " " + suffix;
}
private void OnUnequipped(Entity<WearerGetsExamineTextComponent> entity, ref GotUnequippedEvent args)
{
if (entity.Comp.Wearer is not { } wearer)
return;
if (TryComp(wearer, out ExtraExamineTextComponent? obviousExamine))
{
obviousExamine.Lines.Remove(entity.Owner);
}
entity.Comp.Wearer = null;
Dirty(entity);
}
private void OnExamine(Entity<WearerGetsExamineTextComponent> entity, ref ExaminedEvent args)
{
var currentlyWorn = entity.Comp.Wearer != null;
var outString = new StringBuilder(Loc.GetString(currentlyWorn ? "obvious-on-item-currently" : "obvious-on-item",
("used", Loc.GetString(entity.Comp.PocketEvident ? "obvious-reveal-pockets" : "obvious-reveal-default")),
("thing", entity.Comp.Category),
("me", Identity.Entity(entity, EntityManager))));
if (entity.Comp.WarnExamine)
{
if (!currentlyWorn && TryComp(entity, out ContrabandComponent? contra)) // if the item's contra and we're not wearing it yet
{
var contraLocId = "obvious-on-item-contra-" + contra.Severity; // apply additional text if the item is contraband to note that displaying it might be really bad
if (Loc.HasString(contraLocId)) // saves us the trouble of making a switch block for this
outString.Append(" " + Loc.GetString(contraLocId));
}
var affecting = currentlyWorn ? entity.Comp.Wearer.GetValueOrDefault() : args.Examiner;
var testOut = ConstructExamineText(entity, false, affecting);
outString.Append("\n" + Loc.GetString("obvious-on-item-for-others",
("will", currentlyWorn ? "can" : "will"), // i love hardcoding strings it's my favorite thing ever
("output", testOut)));
}
args.PushMarkup(outString.ToString());
}
}

View File

@ -0,0 +1,40 @@
using Robust.Shared.GameStates;
namespace Content.Shared._Impstation.Examine;
[RegisterComponent, NetworkedComponent]
public sealed partial class DetailedInspectComponent : Component
{
[DataField]
public LocId VerbText = "verbs-detailed-inspect";
[DataField]
public LocId VerbMessage = "verbs-detailed-inspect-message";
[DataField(required: true)]
public List<LocId> ExamineText;
/// <summary>
/// Whether or not the entries in ExamineText are separated by linebreaks.
/// </summary>
[DataField]
public bool LineBreak = true;
/// <summary>
/// Whether or not the entries in ExamineText are preceded by ticks.
/// </summary>
[DataField]
public bool TickEntries = false;
/// <summary>
/// Whether or not entries in the list are numbered.
/// </summary>
[DataField]
public bool NumberedEntries = false;
/// <summary>
/// Rooted directory of the icon for the verb.
/// </summary>
[DataField]
public string Icon = "/Textures/Interface/VerbIcons/dot.svg.192dpi.png";
}

View File

@ -0,0 +1,50 @@
using Content.Shared.Examine;
using Content.Shared.Verbs;
using Robust.Shared.Network;
using Robust.Shared.Utility;
namespace Content.Shared._Impstation.Examine;
public sealed partial class DetailedInspectSystem : EntitySystem
{
[Dependency] private readonly INetManager _net = default!;
[Dependency] private readonly ExamineSystemShared _examine = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DetailedInspectComponent, GetVerbsEvent<ExamineVerb>>(OnGetVerb);
}
public void OnGetVerb(Entity<DetailedInspectComponent> ent, ref GetVerbsEvent<ExamineVerb> args)
{
if (!args.CanInteract || !args.CanAccess || !_net.IsServer)
return;
var msg = new FormattedMessage();
var numberedIndex = 1;
foreach (var locId in ent.Comp.ExamineText)
{
if (ent.Comp.TickEntries)
msg.AddMarkupOrThrow("- ");
if (ent.Comp.NumberedEntries)
{
msg.AddMarkupOrThrow($"{numberedIndex}. ");
numberedIndex++;
}
msg.AddMarkupOrThrow(Loc.GetString(locId));
if (ent.Comp.LineBreak)
msg.PushNewline();
else
msg.AddMarkupOrThrow(" ");
}
_examine.AddDetailedExamineVerb(args, ent.Comp, msg, Loc.GetString(ent.Comp.VerbText), ent.Comp.Icon, Loc.GetString(ent.Comp.VerbMessage));
}
}

View File

@ -0,0 +1,24 @@
using Robust.Shared.GameStates;
using Content.Shared._Impstation.Clothing;
namespace Content.Shared._Impstation.Examine;
/// <summary>
/// Adds examine text to the entity, intentionally "obvious details".
/// Like, that's it. It's basic -- all it does is add the lines to the attached entity.
/// This is particularly used for assigning players unique examine text.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
[Access(typeof(ExtraExamineTextSystem), typeof(WearerGetsExamineTextSystem))]
public sealed partial class ExtraExamineTextComponent : Component
{
/// <summary>
/// The LocIds that will be added to the attached entity's examination.
///
/// The key is the source of the line, and the value is the text
/// (built by the component that creates this one).
/// </summary>
[DataField, AutoNetworkedField]
public Dictionary<EntityUid, LocId> Lines { get; set; } = new();
}

View File

@ -0,0 +1,33 @@
using Content.Shared.Examine;
using Content.Shared.IdentityManagement;
namespace Content.Shared._Impstation.Examine;
/// <summary>
/// Adds examine text to the entity, intentionally "obvious details".
/// Like, that's it. It's basic -- all it does is add the line to the attached entity.
/// This is particularly used for assigning players unique examine text.
/// </summary>
public sealed class ExtraExamineTextSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ExtraExamineTextComponent, ExaminedEvent>(OnExamine);
}
private void OnExamine(Entity<ExtraExamineTextComponent> entity, ref ExaminedEvent args)
{
if (entity.Comp.Lines.Count == 0)
{
RemCompDeferred<ExtraExamineTextComponent>(entity); // no more need for me!
return;
}
foreach (var l in entity.Comp.Lines)
{
args.PushMarkup(l.Value);
}
}
}

View File

@ -0,0 +1,65 @@
obvious-on-item = When {$used}, { SUBJECT($me) } will be [color=white]obvious[/color] to casual examination.
obvious-on-item-currently = { CAPITALIZE(SUBJECT($me)) } { CONJUGATE-BE($me) } [color=white]obvious[/color] to casual examination.
obvious-on-item-for-others = [italic][color=#777777]Others {$will} see:[/color] "{$output}"[/italic]
obvious-reveal-default = worn
obvious-reveal-pockets = worn or pocketed
obvious-on-item-contra-Syndicate = Might make you seem [color=#ff0000]evil[/color].
obvious-on-item-contra-Magical = Might make you seem [color=blue]mystical[/color].
obvious-on-item-contra-Major = Don't be surprised if [color=#cb0000]some people[/color] aren't a fan.
obvious-prefix-default = { CAPITALIZE(SUBJECT($user)) } { CONJUGATE-HAVE($user) }
obvious-prefix-wearing = { CAPITALIZE(SUBJECT($user)) } { CONJUGATE-BE($user) } wearing
## general descriptions
obvious-desc-default = { INDEFINITE($short-type) } { $type } { $thing }.
obvious-desc-colors = { INDEFINITE($thing) } { $thing } in { $type } colors.
obvious-desc-proves = { INDEFINITE($thing) } [color=white]{ $thing }[/color] that proves { SUBJECT($user) } { CONJUGATE-BE($user) } { INDEFINITE($short-type) } { $type }.
## item categories
obvious-thing-default = [italic]something-or-another[/italic]
obvious-thing-cloak = cloak
obvious-thing-pin = pin
obvious-thing-scarf = scarf
obvious-thing-badge = badge
obvious-thing-armband = armband
obvious-thing-medal = medal
## item types
obvious-type-default = [italic]nothing[/italic]
# prides
obvious-type-pride = [color=#d479d4]LGBTQ[/color] [color=white]pride[/color]
obvious-type-pride-aro = [color=#3DA542]aromantic[/color] [color=white]pride[/color]
obvious-type-pride-ace = [color=#efefef]asexual[/color] [color=#800080]pride[/color]
obvious-type-pride-aroace = [color=#efc337]aroace[/color] [color=#45bcee]pride[/color]
obvious-type-pride-lesbian = [color=#EF7627]lesbian[/color] [color=#B55690]pride[/color]
obvious-type-pride-bi = [color=#D60270]bisexual[/color] [color=#0038A8]pride[/color]
obvious-type-pride-pan = [color=#FF218C]pansexual[/color] [color=#21B1FF]pride[/color]
obvious-type-pride-gay = [color=#078D70]gay[/color] [color=#5049CC]pride[/color]
obvious-type-pride-omni = [color=#FE9ACE]omnisexual[/color] [color=8EA6FF]pride[/color]
obvious-type-pride-bear = [color=#FDDC62]bear[/color] [color=#613704]pride[/color]
obvious-type-pride-intersex = [color=#FFD800]intersex[/color] [color=#7902AA]pride[/color]
obvious-type-pride-nonbinary = [color=#FCF434]nonbinary[/color] [color=#9C59D1]pride[/color]
obvious-type-pride-trans = [color=#5BCEFA]transgender[/color] [color=#F5A9B8]pride[/color]
obvious-type-pride-gf = [color=#FF76A4]genderfluid[/color] [color=#2F3CBE]pride[/color]
obvious-type-pride-aut = [color=#FFD700]autism[/color] [color=white]pride[/color]
obvious-type-pride-straightally = [color=#7c7c7c]straight[/color] [color=#d479d4]LGBTQ ally[/color]
obvious-type-pride-gq = [color=#B57EDC]genderqueer[/color] [color=#4A8123]pride[/color]
# lawyers
obvious-type-law = [color=white]certified[/color] [color=#FFD700]lawyer[/color]
obvious-type-law-defense = [color=white]certified[/color] [color=#00C0C0]defense attorney[/color]
obvious-type-law-prosecution = [color=white]certified[/color] [color=#FF2222]prosecuting attorney[/color]
## SPECIFIC DESCRIPTIONS (skips the above description-builders)
obvious-x-scarf-lesbian-long = some [color=#EF7627]long[/color] [color=white]ba[/color][color=#B55690]con[/color].
obvious-x-medal-nothing = a [color=#FFD700]gleaming medal[/color]!
# medals should be in the description building functions but there's too many of them and this feature is already over-scope
# imp only items
obvious-x-pin-straight = a [color=#7c7c7c]straight[/color] [color=white]pride[/color] pin... [italic]Ew.[/italic]
obvious-x-cloak-straight = a cloak in the [color=#7c7c7c]straight[/color] [color=white]pride[/color] colors... [italic]Ew.[/italic]
obvious-x-pin-novice = a [color=#F4EE12]novice[/color] [color=#1CAC99]mark[/color], identifying as [color=#efefef]unskilled[/color]. [color=#1CAC99][italic]Be patient and considerate with { OBJECT($user) }.[/italic][/color]

View File

@ -6,6 +6,7 @@
PassengerIDCard: 5
ClothingHeadsetGrey: 5
ClothingHeadsetService: 5 # Delta-V
ClothingNeckNoviceMark: 5 # imp
RubberStampApproved: 1
RubberStampDenied: 1
BoxFolderPlasticClipboardEmpty: 2

View File

@ -136,7 +136,7 @@
sprite: Clothing/Neck/Cloaks/miner.rsi
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakTrans
name: vampire cloak
description: Worn by high ranking vampires of the transylvanian society of vampires.
@ -145,6 +145,8 @@
sprite: Clothing/Neck/Cloaks/trans.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakTrans # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-trans
- type: entity
parent: ClothingNeckBase
@ -214,7 +216,7 @@
proto: alien
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakAce
name: pilot's cloak
description: Cloak awarded to Nanotrasen's finest space aces.
@ -223,9 +225,11 @@
sprite: Clothing/Neck/Cloaks/ace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAce # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-ace
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakAro
name: werewolf cloak
description: This cloak lets others know you're a lone wolf.
@ -234,9 +238,11 @@
sprite: Clothing/Neck/Cloaks/aro.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAro # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aro
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakAroace
name: aeropilot's cloak # thank you happyman442 this was the best name idea ever
description: Cloak awarded to Nanotrasen's finest pilots on planets with inhabitable atmospheres.
@ -245,9 +251,11 @@
sprite: Clothing/Neck/Cloaks/aroace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAroace # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aroace
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakBi
name: poison cloak
description: The purple color is a clear indicator you are poisonous.
@ -256,9 +264,11 @@
sprite: Clothing/Neck/Cloaks/bi.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakBi # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-bi
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakIntersex
name: cyclops cloak
description: The circle on this cloak represents a cyclops' eye.
@ -267,9 +277,11 @@
sprite: Clothing/Neck/Cloaks/intersex.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakIntersex # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-intersex
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakLesbian
name: poet cloak
description: This cloak belonged to an ancient poet, you forgot which one.
@ -278,9 +290,11 @@
sprite: Clothing/Neck/Cloaks/les.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakLesbian # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-lesbian
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakGay
name: multi-level marketing cloak
description: This cloak is highly sought after in the Nanotrasen Marketing Offices.
@ -289,9 +303,11 @@
sprite: Clothing/Neck/Cloaks/gay.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakGay # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-gay
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakEnby
name: treasure hunter cloak
description: This cloak belonged to a greedy treasure hunter.
@ -300,9 +316,11 @@
sprite: Clothing/Neck/Cloaks/enby.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakEnby # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-nonbinary
- type: entity
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderCloakBase, BaseObviousCloak ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckCloakPan
name: chef's cloak
description: Meant to be worn alongside a frying pan.
@ -311,4 +329,7 @@
sprite: Clothing/Neck/Cloaks/pan.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakPan # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-pan

View File

@ -13,6 +13,11 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -30,6 +35,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -45,6 +54,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -60,6 +73,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -75,6 +92,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -90,6 +111,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -105,6 +130,10 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true
- type: entity
parent: ClothingNeckBase
@ -122,3 +151,8 @@
tags:
- Medal
- WhitelistChameleon
- type: WearerGetsExamineText # imp
thing: obvious-thing-medal
examineText: obvious-x-medal-nothing
pocketEvident: true

View File

@ -46,7 +46,7 @@
sprite: Clothing/Neck/Misc/bling.rsi
- type: entity
parent: ClothingNeckBase
parent: [ ClothingNeckBase, BaseObviousBadge ] # imp
id: ClothingNeckLawyerbadge
name: lawyer badge
description: A badge to show that the owner is a 'legitimate' lawyer who passed the NT bar exam required to practice law.
@ -57,6 +57,8 @@
sprite: Clothing/Neck/Misc/lawyerbadge.rsi
- type: TypingIndicatorClothing
proto: lawyer
- type: WearerGetsExamineText # imp
thingType: obvious-type-law
- type: entity
parent: ClothingNeckBase

View File

@ -11,6 +11,10 @@
sprite: Clothing/Neck/Misc/pins.rsi
- type: Clothing
sprite: Clothing/Neck/Misc/pins.rsi
- type: WearerGetsExamineText # imp
thing: obvious-thing-pin
examineText: obvious-desc-default
pocketEvident: true
- type: entity
parent: ClothingNeckPinBase
@ -46,6 +50,8 @@
equippedPrefix: lgbt
- type: ChameleonClothing
default: ClothingNeckLGBTPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride
- type: entity
parent: ClothingGenderPinBase
@ -59,6 +65,8 @@
equippedPrefix: ally
- type: ChameleonClothing
default: ClothingNeckAllyPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-straightally
- type: entity
parent: ClothingGenderPinBase
@ -72,6 +80,8 @@
equippedPrefix: aro
- type: ChameleonClothing
default: ClothingNeckAromanticPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aro
- type: entity
parent: ClothingGenderPinBase
@ -85,6 +95,8 @@
equippedPrefix: aroace
- type: ChameleonClothing
default: ClothingNeckAroacePin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aroace
- type: entity
parent: ClothingGenderPinBase
@ -98,6 +110,8 @@
equippedPrefix: asex
- type: ChameleonClothing
default: ClothingNeckAsexualPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-ace
- type: entity
parent: ClothingGenderPinBase
@ -111,6 +125,8 @@
equippedPrefix: bi
- type: ChameleonClothing
default: ClothingNeckBisexualPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-bi
- type: entity
parent: ClothingGenderPinBase
@ -124,6 +140,8 @@
equippedPrefix: gay
- type: ChameleonClothing
default: ClothingNeckGayPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-gay
- type: entity
parent: ClothingGenderPinBase
@ -137,6 +155,8 @@
equippedPrefix: inter
- type: ChameleonClothing
default: ClothingNeckIntersexPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-intersex
- type: entity
parent: ClothingGenderPinBase
@ -150,6 +170,8 @@
equippedPrefix: les
- type: ChameleonClothing
default: ClothingNeckLesbianPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-lesbian
- type: entity
parent: ClothingGenderPinBase
@ -163,6 +185,8 @@
equippedPrefix: non
- type: ChameleonClothing
default: ClothingNeckNonBinaryPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-nonbinary
- type: entity
parent: ClothingGenderPinBase
@ -176,6 +200,8 @@
equippedPrefix: pan
- type: ChameleonClothing
default: ClothingNeckPansexualPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-pan
- type: entity
parent: ClothingGenderPinBase
@ -202,6 +228,8 @@
equippedPrefix: omni
- type: ChameleonClothing
default: ClothingNeckOmnisexualPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-omni
- type: entity
parent: ClothingGenderPinBase
@ -215,6 +243,8 @@
equippedPrefix: gender
- type: ChameleonClothing
default: ClothingNeckGenderqueerPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-gq
- type: entity
parent: ClothingGenderPinBase
@ -241,6 +271,8 @@
equippedPrefix: trans
- type: ChameleonClothing
default: ClothingNeckTransPin
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-trans
- type: entity
parent: ClothingNeckPinBase
@ -252,6 +284,8 @@
state: autism
- type: Clothing
equippedPrefix: autism
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aut
- type: entity
parent: ClothingNeckPinBase
@ -263,6 +297,8 @@
state: goldautism
- type: Clothing
equippedPrefix: goldautism
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aut
- type: entity
parent: BaseItem

View File

@ -136,7 +136,7 @@
# Pride Scarves
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedAce
name: striped asexual scarf
description: A stylish striped asexual scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -147,9 +147,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/ace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAce # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-ace
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedAro
name: striped aromantic scarf
description: A stylish striped aromantic scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -160,9 +162,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/aro.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAro # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aro
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedAroace
name: striped aroace scarf
description: A stylish striped aroace scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -173,9 +177,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/aroace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAroace # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-aroace
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedBiSexual
name: striped bisexual scarf
description: A stylish striped bisexual scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -186,9 +192,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/bi.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedBiSexual # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-bi
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedGay
name: striped gay scarf
description: A stylish striped gay scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -199,9 +207,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/gay.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedGay # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-gay
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedInter
name: striped intersex scarf
description: A stylish striped intersex scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -212,9 +222,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/inter.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedInter # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-intersex
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedLesbian
name: striped lesbian scarf
description: A stylish striped lesbian scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -225,9 +237,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedLesbian # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-lesbian
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedPan
name: striped pan scarf
description: A stylish striped pan scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -238,9 +252,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/pan.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedPan # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-pan
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedNonBinary
name: striped non-binary scarf
description: A stylish striped non-binary scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -251,9 +267,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/non.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedNonBinary # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-nonbinary
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedRainbow
name: rainbow scarf
description: A stylish rainbow scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -264,9 +282,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/rainbow.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedRainbow # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedTrans
name: striped trans scarf
description: A stylish striped trans scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks.
@ -277,9 +297,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/trans.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedTrans # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
thingType: obvious-type-pride-trans
- type: entity
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
parent: [ ClothingGenderScarfBase, BaseObviousScarf ] # DeltaV - Chameleon pride clothing, porting imp's examine
id: ClothingNeckScarfStripedLesbianLong
name: long bacon
description: Long bacon! Perfect for sharing with your girlfriend!
@ -290,3 +312,6 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedLesbianLong # DeltaV - Chameleon pride clothing
- type: WearerGetsExamineText # imp
examineText: obvious-x-scarf-lesbian-long

View File

@ -85,6 +85,7 @@
- LighterInterdyne
- LighterNanotrasen
- MatchboxGorlex
- NoviceMark # from imp
# End DeltaV Additions
- type: loadoutGroup

View File

@ -25,6 +25,7 @@
equipment:
shoes: ClothingShoesBootsWork
id: TechnicalAssistantPDA
neck: ClothingNeckNoviceMark # imp
belt: ClothingBeltUtilityEngineering
ears: ClothingHeadsetEngineering
pocket2: BookEngineersHandbook

View File

@ -21,6 +21,7 @@
equipment:
shoes: ClothingShoesColorWhite
#id: MedicalInternPDA # DeltaV: different PDAs in loadouts
neck: ClothingNeckNoviceMark # imp
ears: ClothingHeadsetMedical
belt: ClothingBeltMedicalFilled
pocket2: BookMedicalReferenceBook

View File

@ -20,6 +20,7 @@
id: ResearchAssistantGear
equipment:
shoes: ClothingShoesColorWhite
neck: ClothingNeckNoviceMark # imp
id: ResearchAssistantPDA
ears: ClothingHeadsetScience
pocket2: BookScientistsGuidebook

View File

@ -28,6 +28,7 @@
id: SecurityCadetGear
equipment:
shoes: ClothingShoesBootsJackFilled
neck: ClothingNeckNoviceMark # imp
outerClothing: ClothingOuterArmorDuraVest # DeltaV - ClothingOuterArmorBasic replaced in favour of stab vest. Sucks to suck, cadets
id: SecurityCadetPDA
ears: ClothingHeadsetSecurity

View File

@ -1,5 +1,5 @@
- type: entity
parent: ClothingNeckBase
parent: [ ClothingNeckBase, BaseObviousBadge ] # imp
id: ClothingNeckProsecutorbadge
name: prosecutor badge
description: A badge to show that the owner is a 'legitimate' prosecutor who passed the NT bar exam required to practice law.
@ -10,6 +10,8 @@
sprite: _DV/Clothing/Neck/Misc/prosecutorbadge.rsi
- type: TypingIndicatorClothing
proto: lawyer
- type: WearerGetsExamineText # imp
thingType: obvious-type-law-prosecution
- type: entity
parent: ClothingNeckBase

View File

@ -14,6 +14,7 @@
id: CargoAssistantGear
equipment:
id: CargoAssistantPDA
neck: ClothingNeckNoviceMark # imp
ears: ClothingHeadsetCargo
pocket1: BookLogistics

View File

@ -0,0 +1,8 @@
- type: entity
id: BaseObviousCloak
abstract: true
components:
- type: WearerGetsExamineText
examineText: obvious-desc-colors
thing: obvious-thing-cloak
warnExamine: false # for funny jokes!

View File

@ -0,0 +1,7 @@
- type: entity
id: BaseObviousBadge
abstract: true
components:
- type: WearerGetsExamineText
examineText: obvious-desc-proves
thing: obvious-thing-badge

View File

@ -0,0 +1,12 @@
- type: entity
parent: ClothingNeckPinBase
id: ClothingNeckNoviceMark
name: novice's mark
description: A mark in CentComm's green and gold, for identifying yourself as unskilled to others. Take it (as a trinket) if you need to! # the rest of the description is handled by WearerGetsExamineText
components:
- type: Sprite
sprite: _Impstation/Clothing/Neck/Misc/novicemark.rsi
- type: Clothing
sprite: _Impstation/Clothing/Neck/Misc/novicemark.rsi
- type: WearerGetsExamineText
examineText: obvious-x-pin-novice

View File

@ -0,0 +1,7 @@
- type: entity
id: BaseObviousScarf
abstract: true
components:
- type: WearerGetsExamineText
examineText: obvious-desc-colors
thing: obvious-thing-scarf

View File

@ -0,0 +1,5 @@
- type: loadout
id: NoviceMark # no playtime lockout for needing time :)
storage:
back:
- ClothingNeckNoviceMark

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

View File

@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC0-1.0",
"copyright": "Made by normalgirl2171 for Impstation",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-NECK",
"directions": 4
}
]
}