Skip to content

[IMP Port] Visitor Specific Species#1

Open
honeyed-lemons wants to merge 6 commits intosyndicate-ss14:masterfrom
honeyed-lemons:visitors
Open

[IMP Port] Visitor Specific Species#1
honeyed-lemons wants to merge 6 commits intosyndicate-ss14:masterfrom
honeyed-lemons:visitors

Conversation

@honeyed-lemons
Copy link

About the PR

Port of impstation/imp-station-14#3522.
Allows species to be declared non-roundstart and still be randomly generated for vistor shuttles and random ghostroles and such

Why / Balance

Well, you see, Macrocosm is going to have species that are non roundstart yet still want to be playable in game via ghost roles. This is good i think.

Technical details

Added two new datafields to the species component and modified the Random function in HumanoidCharacterProfile fairly extensively.

Media

Does.. not really need media? I can guarantee this is tested, however.

Requirements

Breaking changes

N/A

Changelog

🆑

  • tweak: Visitors can now be non-roundstart species.

honeyed-lemons and others added 5 commits March 13, 2026 19:32
…522)

* Allow non-roundstart species to roll midround

* Allow non-roundstart species to roll midround

* oops forgot some comments

* i forgot

* Reimplement blacklist. i hate expression lambdas.

* randomChance

* add ungu

(cherry picked from commit 046df23e45e19e59f453fe0f4d8aba4d85c046fe)
throw new ArgumentException("Could not get random humanoid settings");

var profile = HumanoidCharacterProfile.Random(prototype.SpeciesBlacklist);
var profile = HumanoidCharacterProfile.Random(prototype.SpeciesBlacklist, false); // MACRO
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
var profile = HumanoidCharacterProfile.Random(prototype.SpeciesBlacklist, false); // MACRO
var profile = HumanoidCharacterProfile.Random(prototype.SpeciesBlacklist, false); // MACRO, added false


// TODO: This should eventually not be a visual change only.
public static HumanoidCharacterProfile Random(HashSet<string>? ignoredSpecies = null)
// MACRO start, extensive changes.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move to line 224

// TODO: This should eventually not be a visual change only.
public static HumanoidCharacterProfile Random(HashSet<string>? ignoredSpecies = null)
// MACRO start, extensive changes.
public static HumanoidCharacterProfile Random(HashSet<string>? speciesBlacklist = null, bool? characterCreation = true)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public static HumanoidCharacterProfile Random(HashSet<string>? speciesBlacklist = null, bool? characterCreation = true)
public static HumanoidCharacterProfile Random(HashSet<string>? speciesBlacklist = null, bool? characterCreation = true) // MACRO visitor species: add charactercreation


var species = random.Pick(prototypeManager
.EnumeratePrototypes<SpeciesPrototype>()
.Where(x => ignoredSpecies == null ? x.RoundStart : x.RoundStart && !ignoredSpecies.Contains(x.ID))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comment out instead of deleting
macro start above this line, note that its for visitor species

Comment on lines +234 to +235
)
.ID;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

revert

if (characterCreation == true)
return x.RoundStart;
return random.NextFloat() < x.RandomChance && x.RandomViable;
})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

macro end here


return RandomWithSpecies(species);
}
// MACRO end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

delete

Comment on lines +110 to +114
/// <summary>
/// Whether or not the species is available for randomization.
/// </summary>
[DataField]
public bool RandomViable { get; private set; }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

name of this bool is kind of vague. what does 'randomization' mean in this context?
maybe rename or include in the comment whether or not youre talking about in game or character creation?

@mqole
Copy link
Contributor

mqole commented Mar 16, 2026

this pr does also include breaking changes inthat species can now be toggled on or off for visitor exclusive roles i believe

Copy link
Contributor

@hivehum hivehum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

test message to see if i got github relay working

@hivehum hivehum dismissed their stale review March 16, 2026 02:26

fake review

@mqole mqole added Licensed All code in this PR is licensed under MIT with permission obtained from all authors. S: Awaiting Changes and removed S: Needs Review labels Mar 17, 2026
portfiend added a commit to portfiend/macrocosm that referenced this pull request Mar 21, 2026
* Costume Bundles + Rearrange AutoDrobe (#1903)
This PR adds "costume bundles", a storage item for full costumes in a
single bag. Many items in the AutoDrobe have been replaced with their
respective costume bundles. You can also equip costume bundles in
loadouts.

In addition, the AutoDrobe's stock has been completely rearranged,
ideally to make things more intuitive. Clown / mime / musician stuff
first, then costume bundles, then everything else (roughly grouped by
item slot category).
Halloween feature. Also, the AutoDrobe's stock was very messy and
unintuitive and I felt it was good of a time as any to clean up.
New base entity for costume bundles, and then individual bundle
prototypes for each costume.

Some non-clothing entity prototypes were given a `CostumeItem` tag to
allow them to be inserted into costume bundles.

Many individual items in AutoDrobe and the theatrical performance crates
were replaced with bundles; ultimately, nothing should be actually
"lost". Also, rearranged AutoDrobe.

A new loadout category, "Costumes", with many costume bundles. You get
one. Some bundles have playtime requirements - namely the jester, circus
clown, and musician bundles.

Added a stupid C# check to prevent a debug assert error related to
attempting to set ContainerHeld's fill status before the container has
been initialized.

No inhands sorry I'm tired

Costume bundles:

<img width="744" height="616" alt="image"
src="https://github.com/user-attachments/assets/2c69b214-4020-46cb-a282-284363c8bbe9"
/>

Loadouts:

<img width="964" height="603" alt="image"
src="https://github.com/user-attachments/assets/ada069de-abd6-4c91-8e7b-94628c9d07f6"
/>

Rearranged AutoDrobe:

<details>
<summary>Click to expand</summary>

<img width="350" height="915" alt="image"
src="https://github.com/user-attachments/assets/4c74b69c-cb17-405a-a230-5a0ce96228df"
/>
<img width="343" height="901" alt="image"
src="https://github.com/user-attachments/assets/36ed6de4-d0c7-4c7c-aec5-e5ac4f053e7d"
/>
<img width="347" height="918" alt="image"
src="https://github.com/user-attachments/assets/efc6072f-e503-4929-a2ae-0f43071f43ee"
/>
<img width="349" height="913" alt="image"
src="https://github.com/user-attachments/assets/02fd95b7-e1be-4073-b119-f1125a118a4b"
/>
<img width="343" height="907" alt="image"
src="https://github.com/user-attachments/assets/0a55bac2-4bc2-477d-94cf-e5e1ab5321f4"
/>
<img width="334" height="965" alt="image"
src="https://github.com/user-attachments/assets/47e8d31e-6f25-4f14-9eac-ed8609d14c7f"
/>

</details>

Theatrical Performances Crate:

<img width="542" height="507" alt="image"
src="https://github.com/user-attachments/assets/514e1daa-ffd6-4828-8447-8d4929e79281"
/>
<!-- Confirm the following by placing an X in the brackets [X]: -->
- [x] I have read and am following the [Pull Request and Changelog
Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
- [x] I have added media to this PR or it does not require an ingame
showcase.
- [x] I have tested any changes or additions.
- [x] I can confirm this PR contains no AI-generated content, and did
not use any AI-generated content.
<!-- You should understand that not following the above may get your PR
closed at maintainer’s discretion -->
Only thing is the massive restructure of AutoDrobe inventory and mild
rearrangement of the contents of the theatrical performances crate - may
cause annoying merge conflicts later

**Changelog**
:cl:
- add: Many individual costume parts in the AutoDrobe and theatrical
performances crate have been replaced with "costume bundles", a storage
item for costume parts specifically.
- tweak: The AutoDrobe's inventory has been majorly consolidated and
rearranged. The items inside are sorted by clown, mime, and musician
items first, then costume bundles, then everything else.
- add: You can now take a costume bundle in your loadouts - find it
under Items! You know, in case an occasion that necessitates bringing
your own costume arises.

* comment out missing costumes

* out

* this oen actually exists

* add costume bundles to autodrobe

* and then i rearranged the shit

* forgot we on den lol

* document costume bundles

* add comment

* more comments

* replace StorageFill with EntityTableContainerFill

* replace monkey/performer suits with bundles in theatrical performances crate

* summary commment for job costumes

* use StorageFillVisualizer instead of ContainerHeld

* remove redundant costume icons

* i ficked it
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Licensed All code in this PR is licensed under MIT with permission obtained from all authors. S: Awaiting Changes size/S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants