Skip to content

Group Howl Event - #5453

Merged
Rinary1 merged 8 commits into
ss14Starlight:starlight-devfrom
Ohelig:GroupHowlEvent
Aug 10, 2026
Merged

Group Howl Event#5453
Rinary1 merged 8 commits into
ss14Starlight:starlight-devfrom
Ohelig:GroupHowlEvent

Conversation

@Ohelig

@Ohelig Ohelig commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Short description

Adds an infrequent, calm random event that encourages all Vulpkanins, Proto-Vulpkanins, and dog-based animals to gather in a random location and howl together.

Why we need to add this

Vulp flavor, and mostly harmless. This event selects a random beacon on the station's main grid (so, excludes ATS) and sends a message to all Vulpkanins and Proto-Vulpkanins that they want to howl there. All vulps on the same map as the station's main grid will receive the message.

This is 100% vibe coded, but that doesn't mean untested.

Originally based on having the Vulpkanin/ProtoVulp species proto, but there was great demand to have it include Corgis, McGriff, etc. so I also gave the event to anyone with the DogEmotes tag. However, Borgis don't have that tag and if you give it to them, they lose a bunch of other emotes. Then I based it on the InventoryComponent Species, which basically catches all the dog-adjacent player-controllable entities, but is also not how that component is supposed to be used, so it might break in the future.

Suggestion thread: https://discord.com/channels/1272545509562777621/1533226265505562784

Media (Video/Screenshots)

image

Checks

  • I do not require assistance to complete the PR.
  • Before posting/requesting review of a PR, I have verified that the changes work.
  • I have added screenshots/videos of the changes, or this PR does not change in-game mechanics.
  • I affirm that my changes are licensed under the MIT License and grant permission for use in this repository under its conditions.

Changelog

🆑 Ohelig

  • add: Added a random, vulpkanin-specific event.

@Ohelig
Ohelig requested a review from a team August 2, 2026 00:38
@github-actions github-actions Bot added size/M S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. Changes: C# Changes: Prototypes labels Aug 2, 2026
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

The change adds the FullMoonHowl station event. It configures eligible inventory species and howl audio, selects matching station recipients, resolves a beacon location, and sends localized radio text with the howl sound.

Changes

Full Moon Howl Event

Layer / File(s) Summary
Event registration and configuration
Content.Server/_Starlight/GameTicking/Rules/Components/FullMoonHowlRuleComponent.cs, Resources/Prototypes/_Starlight/GameRules/passiveevent.yml, Resources/Prototypes/GameRules/events.yml
Registers FullMoonHowlRuleComponent and adds FullMoonHowl to calm event selection with its timing, weight, occurrence, sound, and eligible species settings.
Station targeting and recipient selection
Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs
Resolves a valid station and main grid, then selects attached entities on the station map whose inventory species is eligible.
Location announcement and howl delivery
Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs, Resources/Locale/en-US/_Starlight/station-events/events/fullmoonhowl.ftl
Finds an enabled navigation beacon or uses the localized default location, then sends styled radio text and plays the configured howl sound for matching recipients.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant FullMoonHowlRule
  participant StationData
  participant StationMapEntities
  participant NavigationBeacons
  participant MatchingRecipients
  FullMoonHowlRule->>StationData: resolve target station and main grid
  StationData-->>FullMoonHowlRule: return valid station data
  FullMoonHowlRule->>StationMapEntities: filter entities by station map and eligible species
  StationMapEntities-->>FullMoonHowlRule: return matching recipients
  FullMoonHowlRule->>NavigationBeacons: find enabled beacon location
  NavigationBeacons-->>FullMoonHowlRule: return beacon text or localized fallback
  FullMoonHowlRule->>MatchingRecipients: send announcement and howl sound
Loading
🚥 Pre-merge checks | ✅ 5 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
No Magic Numbers ⚠️ Warning The new system repeats the meaningful color value #ADD8E6 in the markup and Color.FromHex call without a named constant. Define a clearly named color constant or field and reuse it for both the formatted markup and Color.FromHex argument.
Avoid Service Locator ⚠️ Warning The rule correctly injects IChatManager and uses inherited injected random/audio services, but Loc.GetString hides ILocalizationManager at lines 96 and 98. Inject ILocalizationManager into FullMoonHowlRule and replace both Loc.GetString calls with the injected instance. The dependency structure is otherwise clear and well implemented.
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change as a group howl event.
Description check ✅ Passed The description accurately explains the new calm event, eligible entities, location behavior, and player-facing effect.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No Hardcoded Ecs Parameters ✅ Passed FullMoonHowlRule reads HowlSound and EligibleInventorySpecies from FullMoonHowlRuleComponent, and passiveevent.yml supplies the species values; no sound or species constants remain in the system.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

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.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs`:
- Around line 63-67: Move the eligible species out of the predicate in
FullMoonHowlRule and into a DataField collection on FullMoonHowlRuleComponent;
configure that collection with Vulpkanin and ProtoVulp in the FullMoonHowl
prototype, then have the rule check humanoid.Species against the
component-provided collection instead of hardcoded values.

In `@Resources/Locale/en-US/_Starlight/station-events/events/fullmoonhowl.ftl`:
- Line 2: Update the station-event-fullmoonhowl-default-location localization
fallback to use a location-neutral value such as “the station” instead of “Bar,”
ensuring recipients are not directed to a facility that may not exist.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 8f13b2c2-c79c-426d-a549-f0b18a890b43

📥 Commits

Reviewing files that changed from the base of the PR and between 017e399 and 3bef8bf.

📒 Files selected for processing (5)
  • Content.Server/_Starlight/GameTicking/Rules/Components/FullMoonHowlRuleComponent.cs
  • Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs
  • Resources/Locale/en-US/_Starlight/station-events/events/fullmoonhowl.ftl
  • Resources/Prototypes/GameRules/events.yml
  • Resources/Prototypes/_Starlight/GameRules/passiveevent.yml

Comment thread Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs Outdated
@UnbrokenEclipse

Copy link
Copy Markdown

This is hella cute <3

@Sparlight

Copy link
Copy Markdown
Contributor

as a corgi gamer I am requesting that MobCorgi and its descendants also get this :godo:

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 2, 2026
@salarua

salarua commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

I agree, any sentient canine should also get this

@Ohelig

Ohelig commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author
image works on corgis and dog pets now, but not Borgis since they get their emotes some other magical way. If I send this event to anyone that has a "howl" emote, that would also get every single protogen

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 2, 2026
@Ohelig

Ohelig commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

Works for borgis, vulps, protovulps, corgis, dog-based pets.

It checks your InventoryComponent SpeciesID. if vulp, dog, or puppy, you get invited to the howl. This also includes xenoborgis which can't howl, unfortunately.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 2, 2026
@Ohelig

Ohelig commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

Decided to let ghosts hear it too, for observer and admin purposes. Admins would get the event notification but not its location.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 4, 2026
Comment thread Content.Server/_Starlight/GameTicking/Rules/FullMoonHowlRule.cs Outdated
@starlightgithub starlightgithub Bot added S: Approved Status: Reviewed and approved by at least one maintainer or dev; a PR may require another approval. and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. labels Aug 10, 2026
@Rinary1
Rinary1 added this pull request to the merge queue Aug 10, 2026
Merged via the queue into ss14Starlight:starlight-dev with commit 00e332b Aug 10, 2026
23 checks passed
starlightgithub Bot added a commit that referenced this pull request Aug 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: C# Changes: Prototypes S: Approved Status: Reviewed and approved by at least one maintainer or dev; a PR may require another approval. S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants