Skip to content

Bare-bones Food Critic ghost role.#709

Draft
deltaSpawn0040 wants to merge 22 commits into
Floof-Station:masterfrom
deltaSpawn0040:FoodCriticStationSpawn1.1Branch
Draft

Bare-bones Food Critic ghost role.#709
deltaSpawn0040 wants to merge 22 commits into
Floof-Station:masterfrom
deltaSpawn0040:FoodCriticStationSpawn1.1Branch

Conversation

@deltaSpawn0040

Copy link
Copy Markdown
Contributor

About the PR

The Food Critic is a ghost role meant to highlight the themes of Euphoria, namely the fact that HGI is a resort company. It is mainly a role-play-based role where the player is directed to put to the test the culinary capabilities of the station's Service department.

Why / Balance

The intention here is to give the game the opportunity to throw events at the station that don't involve death, destruction, or crime. This will be a boon for gameplay, as we will no longer have to choose between "disaster simulator" or "nothing ever happens". It seems right now that the plan is for there to be quite a few of these, this being just a taste (Pun unintended.)

Technical details

The implementation of this ghost role is mostly a simple YAML addition, with the addition of just a single component (Content.Shared/_Floof/Roles/Components/FoodCriticRoleComponent.cs) that holds no data purely for the purpose of mirroring the Sample Collector from when this role was being built as a copy of that. This component currently isn't used for anything aside from being attached to the Food Critic mind role and doesn't have a corresponding system, though nothing references it.

Issues and Future Changes

This implementation of the Food Critic is, as the title says, bare-bones. It's currently the intention for it to be made a full "antagonist" (in the game sense) with pinktext and the ability to spawn at arrivals in the future, rather than how it is implemented as a free agent ghost role in this PR. This was due to technical reasons as I attempted to use the Ninja as a base, as detailed here:

The Character Problem
I haven't been able to make the GhostRoleCharacterSpawnerComponent make the character it spawns be an antag. Specifically, it does spawn things if added to the spawner prototype, but those things are not affected by the AntagSelectionComponent. I have been copying the prototype for the Ninja to use as a base for the Food Critic as was suggested to me during the dev meeting before last, but the Ninja uses AntagLoadProfileRuleComponent, which does not do the same thing (it gets the same species as the player's selected character, at least, but does not copy the name and likely a lot of other things) and I haven't been able to find a way to change out one for the other.

The Spawn Location Problem
I haven't been able to find a spawn rule that's appropriate for a civil character. The closest solutions I have found are using AntagRandomSpawnComponent or having it spawn on its own shuttle. However, AntagRandomSpawnComponent makes it so they can spawn wherever, in any department, and that's just kind of weird and possibly very inconvenient. An alternative is them having a shuttle, but that is unnecessary and stations don't have too much docking space.

Conclusion
The creation of new functionality will be needed, breaking out of the realm of YAML and into C#, which halted my efforts as I am not an experienced programmer. I will be attempting to take a crack at it, or at the very least enlist the help of a more experienced developer, but that may take a while. For the time being, I've been instructed to PR the Food Critic role in its current state: It will spawn as a free agent in a random location on the station. It will use the player's currently selected character, just like the sample collector. The player will have enough information to come up with some decent RP with the Service department. One could say it is... serviceable bah dum tsss

Summary of Current Issues

The following issues may cause problems:

  • The Food Critic may spawn anywhere on the station. Anywhere. It uses RandomSpawnRule, meaning it could spawn somewhere inconvenient, restricted, or even dangerous. This was unavoidable without programming a new spawn rule.
  • The Food Critic has no ability to publish any form of review on its own, even in pinktext, because it is not an antag.
  • Direction is limited to the description of the role, it has no objectives and is technically a free agent.

Media

Click to show

food_critic_test_2.mp4

Requirements

  • I have tested all added content and changes.
  • I have added media to this PR or it does not require an ingame showcase.

Licensing:

Breaking changes

Changelog

🆑

  • add: Added the Food Critic as a ghost role.

…riptions it is a carbon copy of Sample Collector
@deltaSpawn0040

deltaSpawn0040 commented Jun 15, 2026

Copy link
Copy Markdown
Contributor Author

As a final thing before I open this, I guarantee y'all I've made a mistake somewhere. I don't know where, but somewhere. I have never made a PR even close to this large before, so I can't imagine I haven't, despite my best efforts. Please be vigilant, and good day to you.

@deltaSpawn0040 deltaSpawn0040 marked this pull request as ready for review June 15, 2026 23:17
@deltaSpawn0040 deltaSpawn0040 marked this pull request as draft June 15, 2026 23:38
@deltaSpawn0040

Copy link
Copy Markdown
Contributor Author

I have no idea why that test failed, I checked and StationEventComponent does have those fields.

@deltaSpawn0040 deltaSpawn0040 marked this pull request as ready for review June 15, 2026 23:49
@deltaSpawn0040

Copy link
Copy Markdown
Contributor Author

Hm. The YAMLLinter failed again, citing an inability to find the exact same two fields. Fields that I am so very sure this component has. I would say this is above my pay grade, but no one is getting paid for this so I guess I should just say I am sorry for leaving this here. My medication is wearing off, so this is looking more and more like a tomorrow problem for me, or a today problem for anyone who knows what's causing this. Maybe I spelled something wrong? Unlikely, because I'm fairly certain the FoodCriticSpawn prototype was partially copy-pasted.

duration: 1
earliestStart: 5
minimumPlayers: 20
OccursDuringRoundEnd: false

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

case matters should be
maxOccurrences: 1 not MaxOccurences: 1
and occursDuringRoundEnd not OccursDuringRoundEnd

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Could've sworn I checked case. Maybe I'm getting tired.

@deltaSpawn0040

Copy link
Copy Markdown
Contributor Author

"Failed AllItemsHaveSpritesTest" hm... I'll look at that later

LuuOW

This comment was marked as spam.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants