New event: Approaching unknown shuttle (#24490)

* setup codebase

* Add first shuttle

* tak

* sync striker

* sync 2

* pipipi

* Preloaded roundstart shuttles!

* Make it abstract "PreloaderGrid" not "PreloaderShuttle"

* to do

* added china cuisin shuttle

* fixes

* add disaster evacpod

* remove enemy

* final shuttles

* weight 5 -> 10

* move data to component

* remove autotrailer touching

* doc, respath

* fix frozen positioning

* fixes + cvar

* finally

* fix evacpod

* remove blacklistrules

* remove `UnknownShuttleSpawnRule`, refactor `LoadMapRule` to support preloaded grids

* use tryload

* cleanup

* fixes

* use preloadedgrid for loneops

* weight unknown shuttles differently (preliminal)

* leftover

* cleanup and raffling

* partial review

* singleton gridpreloader no station coupling

* fix grid atmoses

* `roleLoadout` support for `LoadoutComponent`, fix missing gear

* weighting changes

* init logic fix

---------

Co-authored-by: Kara <lunarautomaton6@gmail.com>
This commit is contained in:
Ed
2024-05-10 14:35:59 +03:00
committed by GitHub
parent d061aa437e
commit e522bbf90d
30 changed files with 8252 additions and 47 deletions

View File

@@ -838,3 +838,17 @@
- type: ConditionalSpawner
prototypes:
- MobLuminousEntity
- type: entity
name: clown spider spawner
id: SpawnClownSpider
parent: MarkerBase
components:
- type: Sprite
layers:
- state: green
- state: clown
sprite: Mobs/Animals/clownspider.rsi
- type: ConditionalSpawner
prototypes:
- MobClownSpider

View File

@@ -589,3 +589,307 @@
settings: default
- type: GhostTakeoverAvailable
- type: Cluwne
## Lost Cargo technician
- type: entity
name: lost cargo technician spawner
id: LostCargoTechnicianSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Objects/Tools/appraisal-tool.rsi
state: icon
- type: RandomSpawner
prototypes:
- RandomHumanoidLostCargoTechnician
chance: 1
- type: entity
id: RandomHumanoidLostCargoTechnician
name: lost cargo technician ghost role
components:
- type: Sprite
sprite: Objects/Tools/appraisal-tool.rsi
state: icon
- type: RandomHumanoidSpawner
settings: LostCargoTechnician
- type: randomHumanoidSettings
id: LostCargoTechnician
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-lost-cargo-technical-name
description: ghost-role-information-lost-cargo-technical-description
rules: ghost-role-information-lost-cargo-technical-rules
raffle:
settings: short
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobCargoTechnician ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last
# Clown troupe
- type: entity
name: clown troupe spawner
id: ClownTroupeSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Objects/Fun/bikehorn.rsi
state: icon
- type: RandomSpawner
prototypes:
- RandomHumanoidClownTroupe
rarePrototypes:
- RandomHumanoidClownTroupeBanana
rareChance: 0.3
- type: entity
id: RandomHumanoidClownTroupe
name: clown troupe ghost role
components:
- type: Sprite
sprite: Objects/Tools/appraisal-tool.rsi
state: icon
- type: RandomHumanoidSpawner
settings: ClownTroupe
- type: entity
id: RandomHumanoidClownTroupeBanana
name: banana clown troupe
parent: RandomHumanoidClownTroupe
components:
- type: RandomHumanoidSpawner
settings: ClownTroupeBanana
- type: randomHumanoidSettings
id: ClownTroupe
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-clown-troupe-name
description: ghost-role-information-clown-troupe-description
rules: ghost-role-information-clown-troupe-rules
raffle:
settings: short
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobClown ]
- type: RandomMetadata
nameSegments:
- names_clown
- type: randomHumanoidSettings
id: ClownTroupeBanana
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-clown-troupe-name
description: ghost-role-information-clown-troupe-description
rules: ghost-role-information-clown-troupe-rules
- type: GhostTakeoverAvailable
- type: Loadout
prototypes: [ BananaClown ]
- type: RandomMetadata
nameSegments:
- names_clown
# Traveling exotic chef
- type: entity
name: traveling chef spawner
id: TravelingChefSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Objects/Weapons/Melee/kitchen_knife.rsi
state: icon
- type: RandomSpawner
prototypes:
- RandomHumanoidTravelingChef
- type: entity
id: RandomHumanoidTravelingChef
name: traveling chef ghost role
components:
- type: Sprite
sprite: Objects/Tools/appraisal-tool.rsi
state: icon
- type: RandomHumanoidSpawner
settings: TravelingChef
- type: randomHumanoidSettings
id: TravelingChef
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-traveling-chef-name
description: ghost-role-information-traveling-chef-description
rules: ghost-role-information-traveling-chef-rules
raffle:
settings: short
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobChef ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last
# Disaster victim
- type: entity
name: disaster victim spawner
id: DisasterVictimSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Clothing/OuterClothing/Hardsuits/basic.rsi
state: icon
- type: RandomSpawner
prototypes:
- RandomHumanoidDisasterVictimRD
- RandomHumanoidDisasterVictimCMO
- RandomHumanoidDisasterVictimCaptain
- MobSkeletonCloset
- type: entity
id: RandomHumanoidDisasterVictimRD
name: disaster victim RD ghost role
components:
- type: Sprite
sprite: Clothing/OuterClothing/Hardsuits/basic.rsi
state: icon
- type: RandomHumanoidSpawner
settings: DisasterVictimResearchDirector
- type: entity
id: RandomHumanoidDisasterVictimCMO
parent: RandomHumanoidDisasterVictimRD
name: disaster victim CMO ghost role
components:
- type: RandomHumanoidSpawner
settings: DisasterVictimCMO
- type: entity
id: RandomHumanoidDisasterVictimCaptain
parent: RandomHumanoidDisasterVictimRD
name: disaster victim Captain ghost role
components:
- type: RandomHumanoidSpawner
settings: DisasterVictimCaptain
- type: randomHumanoidSettings
id: DisasterVictimResearchDirector
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-disaster-victim-name
description: ghost-role-information-disaster-victim-description
rules: ghost-role-information-disaster-victim-rules
raffle:
settings: default
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobResearchDirector ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last
- type: randomHumanoidSettings
id: DisasterVictimCMO
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-disaster-victim-name
description: ghost-role-information-disaster-victim-description
rules: ghost-role-information-disaster-victim-rules
raffle:
settings: default
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobChiefMedicalOfficer ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last
- type: randomHumanoidSettings
id: DisasterVictimCaptain
randomizeName: false
components:
- type: GhostRole
name: ghost-role-information-disaster-victim-name
description: ghost-role-information-disaster-victim-description
rules: ghost-role-information-disaster-victim-rules
raffle:
settings: default
- type: GhostTakeoverAvailable
- type: Loadout
roleLoadout: [ JobCaptain ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last
# Syndie Disaster Victim
- type: entity
name: syndie disaster victim spawner
id: SyndieDisasterVictimSpawner
parent: MarkerBase
components:
- type: Sprite
layers:
- state: red
- sprite: Structures/Decoration/banner.rsi
state: banner_syndicate
- type: RandomSpawner
prototypes:
- RandomHumanoidSyndieDisasterVictim
- type: entity
id: RandomHumanoidSyndieDisasterVictim
name: syndie disaster victim ghost role
components:
- type: Sprite
sprite: Structures/Decoration/banner.rsi
state: banner_syndicate
- type: RandomHumanoidSpawner
settings: SyndieDisasterVictim
- type: randomHumanoidSettings
id: SyndieDisasterVictim
randomizeName: false
components:
- type: NpcFactionMember
factions:
- Syndicate
- type: GhostRole
name: ghost-role-information-syndie-disaster-victim-name
description: ghost-role-information-syndie-disaster-victim-description
rules: ghost-role-information-syndie-disaster-victim-rules
raffle:
settings: short
- type: GhostTakeoverAvailable
- type: Loadout
prototypes: [ SyndicateOperativeGearCivilian ]
- type: RandomMetadata
nameSegments:
- names_first
- names_last

View File

@@ -126,4 +126,4 @@
id: BaseStationAllEventsEligible
abstract: true
components:
- type: StationEventEligible # For when someone makes this more granular in the future.
- type: StationEventEligible # For when someone makes this more granular in the future.

View File

@@ -404,7 +404,7 @@
minimumPlayers: 20
duration: 1
- type: LoadMapRule
mapPath: /Maps/Shuttles/striker.yml
preloadedGrid: ShuttleStriker
- type: NukeopsRule
roundEndBehavior: Nothing
- type: AntagSelection

View File

@@ -0,0 +1,74 @@
- type: entity
id: UnknownShuttleCargoLost
parent: BaseGameRule
noSpawn: true
components:
- type: StationEvent
startAnnouncement: station-event-unknown-shuttle-incoming
startAudio:
path: /Audio/Announcements/attention.ogg
weight: 5
reoccurrenceDelay: 30
duration: 1
- type: LoadMapRule
preloadedGrid: ShuttleCargoLost
- type: entity
id: UnknownShuttleTravelingCuisine
parent: BaseGameRule
noSpawn: true
components:
- type: StationEvent
startAnnouncement: station-event-unknown-shuttle-incoming
startAudio:
path: /Audio/Announcements/attention.ogg
weight: 5
reoccurrenceDelay: 30
duration: 1
- type: LoadMapRule
preloadedGrid: TravelingCuisine
- type: entity
id: UnknownShuttleDisasterEvacPod
parent: BaseGameRule
noSpawn: true
components:
- type: StationEvent
startAnnouncement: station-event-unknown-shuttle-incoming
startAudio:
path: /Audio/Announcements/attention.ogg
weight: 5
reoccurrenceDelay: 30
duration: 1
- type: LoadMapRule
preloadedGrid: DisasterEvacPod
- type: entity
id: UnknownShuttleHonki
parent: BaseGameRule
noSpawn: true
components:
- type: StationEvent
startAnnouncement: station-event-unknown-shuttle-incoming
startAudio:
path: /Audio/Announcements/attention.ogg
weight: 2
reoccurrenceDelay: 30
duration: 1
- type: LoadMapRule
preloadedGrid: Honki
- type: entity
id: UnknownShuttleSyndieEvacPod
parent: BaseGameRule
noSpawn: true
components:
- type: StationEvent
startAnnouncement: station-event-unknown-shuttle-incoming
startAudio:
path: /Audio/Announcements/attention.ogg
weight: 2
reoccurrenceDelay: 30
duration: 1
- type: LoadMapRule
preloadedGrid: SyndieEvacPod

View File

@@ -71,6 +71,15 @@
shoes: ClothingShoesBootsCombatFilled
gloves: ClothingHandsGlovesColorBlack
# Syndicate Operative Outfit - Civilian
- type: startingGear
id: SyndicateOperativeGearCivilian
equipment:
jumpsuit: ClothingUniformJumpsuitSyndieFormal
back: ClothingBackpackDuffelSyndicate
shoes: ClothingShoesBootsCombat
gloves: ClothingHandsGlovesColorBlack
#Syndicate Operative Outfit - Basic
- type: startingGear
id: SyndicateOperativeGearBasic

View File

@@ -0,0 +1,29 @@
- type: preloadedGrid
id: ShuttleStriker
path: /Maps/Shuttles/ShuttleEvent/striker.yml
copies: 2
- type: preloadedGrid
id: ShuttleCargoLost
path: /Maps/Shuttles/ShuttleEvent/lost_cargo.yml
copies: 2
- type: preloadedGrid
id: TravelingCuisine
path: /Maps/Shuttles/ShuttleEvent/traveling_china_cuisine.yml
copies: 2
- type: preloadedGrid
id: DisasterEvacPod
path: /Maps/Shuttles/ShuttleEvent/disaster_evacpod.yml
copies: 3
- type: preloadedGrid
id: Honki
path: /Maps/Shuttles/ShuttleEvent/honki.yml
copies: 1
- type: preloadedGrid
id: SyndieEvacPod
path: /Maps/Shuttles/ShuttleEvent/syndie_evacpod.yml
copies: 2