Make pride clothing be able to chameleon into similar pieces of pride clothing (#4845)

* Expedite gender reassignment (#36894)

* Remove Misgendering (#40425)

fix misgendering

* make pride scarfs and cloaks chameleon

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* add missing comments

* Attempt Toby's suggestion: rename chameleon stuff

* rename the chameleon verb & window

---------

Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
ConstantlyConfused 2025-12-07 02:09:34 -05:00 committed by GitHub
parent f976232d0c
commit 29a7d080d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 208 additions and 38 deletions

View File

@ -58,6 +58,13 @@ public sealed class ChameleonBoundUserInterface : BoundUserInterface
{
_menu?.UpdateState(targets, st.SelectedId);
}
// Begin Delta-V: Override for the name of the chameleon stuff, so you can have items use the chameleon system without being illegal.
if (_menu is { } menu && EntMan.TryGetComponent<ChameleonClothingComponent>(Owner, out var chameleon) && chameleon.WindowTitleOverride is { } titleOverride)
{
_menu.Title = Loc.GetString(titleOverride);
}
// End Delta-V
}
private void OnIdSelected(string selectedId)

View File

@ -65,6 +65,18 @@ public sealed partial class ChameleonClothingComponent : Component
/// </summary>
[AutoPausedField, DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
public TimeSpan NextEmpChange = TimeSpan.Zero;
/// <summary>
/// Delta-V: Override for the name of the chameleon stuff, so you can have items use the chameleon system without being illegal.
/// </summary>
[DataField]
public LocId? WindowTitleOverride;
/// <summary>
/// Delta-V: Override for the name of the chameleon stuff, so you can have items use the chameleon system without being illegal.
/// </summary>
[DataField]
public LocId? VerbNameOverride;
}
[Serializable, NetSerializable]

View File

@ -132,7 +132,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem
args.Verbs.Add(new InteractionVerb()
{
Text = Loc.GetString("chameleon-component-verb-text"),
Text = Loc.GetString(ent.Comp.VerbNameOverride ?? "chameleon-component-verb-text"), // Delta-V: Override for the name of the Chameleon Verb
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/settings.svg.192dpi.png")),
Act = () => UI.TryToggleUi(ent.Owner, ChameleonUiKey.Key, user)
});

View File

@ -0,0 +1,3 @@
change-pin-face = Change Pin Face
change-scarf-pattern = Change Scarf Pattern
change-cloak-pattern = Change Cloak Pattern

View File

@ -136,13 +136,15 @@
sprite: Clothing/Neck/Cloaks/miner.rsi
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakTrans
name: vampire cloak
description: Worn by high ranking vampires of the transylvanian society of vampires.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/trans.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakTrans # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
@ -209,83 +211,101 @@
proto: alien
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakAce
name: pilot's cloak
description: Cloak awarded to Nanotrasen's finest space aces.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/ace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAce # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakAro
name: werewolf cloak
description: This cloak lets others know you're a lone wolf.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/aro.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAro # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
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.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/aroace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakAroace # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakBi
name: poison cloak
description: The purple color is a clear indicator you are poisonous.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/bi.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakBi # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakIntersex
name: cyclops cloak
description: The circle on this cloak represents a cyclops' eye.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/intersex.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakIntersex # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakLesbian
name: poet cloak
description: This cloak belonged to an ancient poet, you forgot which one.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/les.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakLesbian # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakGay
name: multi-level marketing cloak
description: This cloak is highly sought after in the Nanotrasen Marketing Offices.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/gay.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakGay # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakEnby
name: treasure hunter cloak
description: This cloak belonged to a greedy treasure hunter.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/enby.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakEnby # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingNeckBase
parent: ClothingGenderCloakBase # DeltaV - Chameleon pride clothing
id: ClothingNeckCloakPan
name: chef's cloak
description: Meant to be worn alongside a frying pan.
components:
- type: Sprite
sprite: Clothing/Neck/Cloaks/pan.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckCloakPan # DeltaV - Chameleon pride clothing

View File

@ -14,6 +14,28 @@
- type: entity
parent: ClothingNeckPinBase
id: ClothingGenderPinBase
abstract: true
components:
- type: ChameleonClothing
slot: Neck
# default: ClothingNeckLGBTPin
requireTag: GenderPin
affectedByEmp: false
windowTitleOverride: change-pin-face # DeltaV - Rename the chameleon stuff so it's not illegal
verbNameOverride: change-pin-face # DeltaV - Rename the chameleon stuf so it's not illegal
- type: UserInterface
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
- type: Tag
tags:
- ClothMade #idk man its on the parent
- WhitelistChameleon
- GenderPin
- type: entity
parent: ClothingGenderPinBase
id: ClothingNeckLGBTPin
name: LGBT pin
description: Be gay do crime.
@ -22,9 +44,11 @@
state: lgbt
- type: Clothing
equippedPrefix: lgbt
- type: ChameleonClothing
default: ClothingNeckLGBTPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckAllyPin
name: straight ally pin
description: Be ally do crime.
@ -33,9 +57,11 @@
state: ally
- type: Clothing
equippedPrefix: ally
- type: ChameleonClothing
default: ClothingNeckAllyPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckAromanticPin
name: aromantic pin
description: Be aro do crime.
@ -44,9 +70,11 @@
state: aro
- type: Clothing
equippedPrefix: aro
- type: ChameleonClothing
default: ClothingNeckAromanticPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckAroacePin
name: aroace pin
description: Be aroace do crime.
@ -55,9 +83,11 @@
state: aroace
- type: Clothing
equippedPrefix: aroace
- type: ChameleonClothing
default: ClothingNeckAroacePin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckAsexualPin
name: asexual pin
description: Be ace do crime.
@ -66,9 +96,11 @@
state: asex
- type: Clothing
equippedPrefix: asex
- type: ChameleonClothing
default: ClothingNeckAsexualPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckBisexualPin
name: bisexual pin
description: Be bi do crime.
@ -77,9 +109,11 @@
state: bi
- type: Clothing
equippedPrefix: bi
- type: ChameleonClothing
default: ClothingNeckBisexualPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckGayPin
name: gay pin
description: Be gay~ do crime.
@ -88,9 +122,11 @@
state: gay
- type: Clothing
equippedPrefix: gay
- type: ChameleonClothing
default: ClothingNeckGayPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckIntersexPin
name: intersex pin
description: Be intersex do crime.
@ -99,9 +135,11 @@
state: inter
- type: Clothing
equippedPrefix: inter
- type: ChameleonClothing
default: ClothingNeckIntersexPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckLesbianPin
name: lesbian pin
description: Be lesbian do crime.
@ -110,9 +148,11 @@
state: les
- type: Clothing
equippedPrefix: les
- type: ChameleonClothing
default: ClothingNeckLesbianPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckNonBinaryPin
name: non-binary pin
description: "01100010 01100101 00100000 01100101 01101110 01100010 01111001 00100000 01100100 01101111 00100000 01100011 01110010 01101001 01101101 01100101"
@ -121,9 +161,11 @@
state: non
- type: Clothing
equippedPrefix: non
- type: ChameleonClothing
default: ClothingNeckNonBinaryPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckPansexualPin
name: pansexual pin
description: Be pan do crime.
@ -132,9 +174,11 @@
state: pan
- type: Clothing
equippedPrefix: pan
- type: ChameleonClothing
default: ClothingNeckPansexualPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckPluralPin
name: plural pin
description: Be plural, do crimes.
@ -143,9 +187,11 @@
state: plural
- type: Clothing
equippedPrefix: plural
- type: ChameleonClothing
default: ClothingNeckPluralPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckOmnisexualPin
name: omnisexual pin
description: Be omni do crime.
@ -154,9 +200,11 @@
state: omni
- type: Clothing
equippedPrefix: omni
- type: ChameleonClothing
default: ClothingNeckOmnisexualPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckGenderqueerPin
name: genderqueer pin
description: be crime, do gender
@ -165,9 +213,11 @@
state: gender
- type: Clothing
equippedPrefix: gender
- type: ChameleonClothing
default: ClothingNeckGenderqueerPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckGenderfluidPin
name: genderfluid pin
description: be gender, be fluid
@ -176,9 +226,11 @@
state: fluid
- type: Clothing
equippedPrefix: fluid
- type: ChameleonClothing
default: ClothingNeckGenderfluidPin
- type: entity
parent: ClothingNeckPinBase
parent: ClothingGenderPinBase
id: ClothingNeckTransPin
name: transgender pin
description: Be trans do crime.
@ -187,6 +239,8 @@
state: trans
- type: Clothing
equippedPrefix: trans
- type: ChameleonClothing
default: ClothingNeckTransPin
- type: entity
parent: ClothingNeckPinBase

View File

@ -136,7 +136,7 @@
# Pride Scarves
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -145,9 +145,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/ace.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/ace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAce # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -156,9 +158,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/aro.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/aro.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAro # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -167,9 +171,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/aroace.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/aroace.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedAroace # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -178,9 +184,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/bi.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/bi.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedBiSexual # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -189,9 +197,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/gay.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/gay.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedGay # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -200,9 +210,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/inter.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/inter.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedInter # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -211,9 +223,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedLesbian # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -222,9 +236,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/pan.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/pan.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedPan # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -233,9 +249,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/non.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/non.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedNonBinary # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -244,9 +262,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/rainbow.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/rainbow.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedRainbow # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
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.
@ -255,9 +275,11 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/trans.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/trans.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedTrans # DeltaV - Chameleon pride clothing
- type: entity
parent: ClothingScarfBase
parent: ClothingGenderScarfBase # DeltaV - Chameleon pride clothing
id: ClothingNeckScarfStripedLesbianLong
name: long bacon
description: Long bacon! Perfect for sharing with your girlfriend!
@ -266,3 +288,5 @@
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi
- type: Clothing
sprite: Clothing/Neck/Scarfs/PrideScarfs/lesbian-long.rsi
- type: ChameleonClothing # DeltaV - Chameleon pride clothing
default: ClothingNeckScarfStripedLesbianLong # DeltaV - Chameleon pride clothing

View File

@ -55,3 +55,24 @@
sprite: _DV/Clothing/Neck/Cloaks/witchcloak.rsi
- type: Clothing
sprite: _DV/Clothing/Neck/Cloaks/witchcloak.rsi
- type: entity
parent: ClothingNeckBase
id: ClothingGenderCloakBase
abstract: true
components:
- type: ChameleonClothing
slot: Neck
requireTag: GenderCloak
affectedByEmp: false
windowTitleOverride: change-cloak-pattern
verbNameOverride: change-cloak-pattern
- type: UserInterface
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
- type: Tag
tags:
- ClothMade # for whatever reason, these tags aren't being inhereted from the parent
- WhitelistChameleon
- GenderCloak

View File

@ -0,0 +1,20 @@
- type: entity
parent: ClothingScarfBase
id: ClothingGenderScarfBase
abstract: true
components:
- type: ChameleonClothing
slot: Neck
requireTag: GenderScarf
affectedByEmp: false
windowTitleOverride: change-scarf-pattern
verbNameOverride: change-scarf-pattern
- type: UserInterface
interfaces:
enum.ChameleonUiKey.Key:
type: ChameleonBoundUserInterface
- type: Tag
tags:
- ClothMade # for whatever reason, these tags aren't being inhereted from the parent
- WhitelistChameleon
- GenderScarf

View File

@ -221,3 +221,9 @@
- type: Tag # Ovinia, allows them to use specified emotes
id: OviniaEmotes
- type: Tag
id: GenderScarf
- type: Tag
id: GenderCloak

View File

@ -633,6 +633,9 @@
- type: Tag
id: GhostOnlyWarp
- type: Tag
id: GenderPin
- type: Tag
id: GlassAirlock