THE WIZARD (#35406)

* Adds Survivor Antag

* Adds Survivor Role

* Adds Survivor Rule ECS, adds a survivor role event, adds make antagonist to  random global spawn spell

* Moves Survivor Ensurecomp to event handler. Makes Add Survivor Role a broadcast. Adds Survivor Component. Removes redundant briefing.

* Adds Survivor Antagonist role type for admins to keep track of this easier, adds it to Survivor.

* Adds access to survivor game rule system

* Adds Survivor Rule

* Adds end of round survivor text

* Adds end of round reporting logic. Adds logic to start the survivor rule.

* Changes desc from centcomm to shuttle

* survivor (S)

* Checks if they're alive on the shuttle instead of centcomm.

* ftl text selection based on number of survivors.

* Removed Survivor Antagonist, replaced it with Free Agent.

* Adds InvalidForGlobalSpawnSpell tag, checks for it on spawnspell, and adds it to a zombified person.

* Changes logic so we launch the game rule if it hasnt launched yet. Moves rule logic starting to server. Moved survivor rule logic out of event and into Start method.

* Fixes invalid entity issue

* Descs for Survivor Rule and Survivor comps

* Moves Survivor Rule to its own yml

* Checks for dead survivors, changes survivor checks for mind. Adds survivor comp to mind to fix any mindswap issues. Same for invalid survivor tag

* Changes shuttle xform call to just mapid

* Protoid fix

* THE WIZARD

* Wizard spawner

* adds the correct state

* Wizard preset and weight

* Fixes wizard rule

* Weight back to 100%

* Adds Random Metadata

* Wizard locs

* Puts requirements in the right place

* Adds wiz ghost spawner and mob

* wizard spawnpoint fix + shuttle mapping

* wizard loadout + fix wizard spawning + wizard random name

* comment

* Adds Wizard testing

* FIXES SHUTTLE ISSUE BASED REI

* THE WIZARD LOBBY SONG. Special thanks to song creator Chris Remo for allowing us to use this.

* Free Objective ECS + Base Free Objective

* Space Wizard Federation for Wiz Obj issuer.

* Wizard Objectives

* Moves wizard shuttle to base wizard rule. Gives Wizard their objectives. Removes WizardRule

* Renames midround to subgamemodes. Adds wizard sub game mode.

* Adds SubWizard to SubGameModesRule. Adds a SubGameMode with no wizard. Adds No SubGamemodeRule for Wizard preset

* Wizard midround event

* Fixes wizard midround

* Wizard Guidebook

* Removes todo

* Fixes text

* Removes wizard rule ECS, not needed

* Wizard jetpack

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com>
This commit is contained in:
keronshb
2025-02-26 00:34:07 -05:00
committed by GitHub
parent 6ea742d4b4
commit 68de58eb66
28 changed files with 491 additions and 54 deletions

View File

@@ -272,3 +272,4 @@
- id: OxygenTankFilled
- id: ClothingOuterHardsuitWizard
- id: ClothingMaskBreath
- id: JetpackVoidFilled

View File

@@ -0,0 +1,11 @@
- type: entity
id: SpawnPointWizard
parent: MarkerBase
name: wizard
components:
- type: SpawnPoint
- type: Sprite
layers:
- state: green
- sprite: Clothing/Head/Hats/wizardhat.rsi
state: icon

View File

@@ -207,4 +207,25 @@
layers:
- state: green
- sprite: Mobs/Silicon/chassis.rsi
state: derelict_icon
state: derelict_icon
- type: entity
categories: [ HideSpawnMenu, Spawner ]
parent: BaseAntagSpawner
id: SpawnPointGhostWizard
name: ghost role spawn point
suffix: wizard
components:
- type: GhostRole
name: ghost-role-information-wizard-name
description: ghost-role-information-wizard-desc
mindRoles:
- MindRoleGhostRoleSoloAntagonist
raffle:
settings: default
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: Clothing/Head/Hats/wizardhat.rsi
state: icon

View File

@@ -102,3 +102,15 @@
- type: NpcFactionMember
factions:
- Syndicate
# Wizard
- type: entity
categories: [ HideSpawnMenu ]
name: Wizard
parent: MobHuman
id: MobHumanWizard
components:
- type: RandomHumanoidAppearance
- type: NpcFactionMember
factions:
- Wizard

View File

@@ -38,6 +38,7 @@
- id: ZombieOutbreak
- id: LoneOpsSpawn
- id: DerelictCyborgSpawn
- id: WizardSpawn
- type: entity
id: BaseStationEvent
@@ -243,6 +244,44 @@
- type: RandomSpawnRule
prototype: MobRevenant
- type: entity
parent: BaseWizardRule
id: WizardSpawn
components:
- type: StationEvent
weight: 1 # rare
duration: 1
earliestStart: 30
reoccurrenceDelay: 60
minimumPlayers: 10
- type: AntagSelection
agentName: wizard-round-end-name
definitions:
- spawnerPrototype: SpawnPointGhostWizard
min: 1
max: 1
playerRatio: 1
pickPlayer: false
startingGear: WizardBlueGear
roleLoadout:
- RoleSurvivalExtended
briefing:
text: wizard-role-greeting
color: Turquoise
# TODO: Need Wizard Start sound
#sound: "/Audio/Ambience/Antag/wizard_start.ogg"
# TODO: WizardComp as needed
components:
- type: NpcFactionMember
factions:
- Wizard
- type: RandomMetadata
nameSegments:
- names_wizard_first
- names_wizard_last
mindRoles:
- MindRoleWizard
# disabled until event is rewritten to be more interesting
#- type: entity
# id: FalseAlarm

View File

@@ -1,32 +0,0 @@
- type: entity
parent: BaseGameRule
id: Thief
components:
- type: ThiefRule
- type: AntagObjectives
objectives:
- EscapeThiefShuttleObjective
- type: AntagRandomObjectives
sets:
- groups: ThiefBigObjectiveGroups
prob: 0.7
maxPicks: 1
- groups: ThiefObjectiveGroups
maxPicks: 10
maxDifficulty: 2.5
- type: AntagSelection
agentName: thief-round-end-agent-name
definitions:
- prefRoles: [ Thief ]
max: 3
playerRatio: 15
lateJoinAdditional: true
allowNonHumans: true
multiAntagSetting: NotExclusive
startingGear: ThiefGear
components:
- type: Pacified
mindRoles:
- MindRoleThief
briefing:
sound: "/Audio/Misc/thief_greeting.ogg"

View File

@@ -18,6 +18,17 @@
parent: BaseGameRule
id: SubGamemodesRule
components:
- type: SubGamemodes
rules:
- id: Thief
prob: 0.5
- id: SubWizard
prob: 0.05
- type: entity
parent: BaseGameRule
id: SubGamemodesRuleNoWizard
components:
- type: SubGamemodes
rules:
- id: Thief
@@ -238,6 +249,56 @@
components:
- type: SecretRule
- type: entity
abstract: true
parent: BaseGameRule
id: BaseWizardRule
components:
- type: AntagObjectives
objectives:
- WizardSurviveObjective
- WizardDemonstrateObjective
- type: LoadMapRule
gridPath: /Maps/Shuttles/wizard.yml
- type: RuleGrids
- type: AntagSelection
- type: AntagLoadProfileRule
speciesOverride: Human
- type: entity
parent: BaseWizardRule
id: Wizard
components:
- type: GameRule
minPlayers: 10
- type: AntagSelection
agentName: wizard-round-end-name
selectionTime: PrePlayerSpawn
definitions:
- prefRoles: [ Wizard ]
max: 1
playerRatio: 1
spawnerPrototype: SpawnPointGhostWizard
roleLoadout:
- RoleSurvivalExtended
briefing:
text: wizard-role-greeting
color: Turquoise
# TODO: Need Wizard Start sound
#sound: "/Audio/Ambience/Antag/wizard_start.ogg"
startingGear: WizardBlueGear
# TODO: WizardComp as needed
components:
- type: NpcFactionMember
factions:
- Wizard
- type: RandomMetadata
nameSegments:
- names_wizard_first
- names_wizard_last
mindRoles:
- MindRoleWizard
- type: entity
id: Zombie
parent: BaseGameRule

View File

@@ -0,0 +1,66 @@
- type: entity
parent: BaseGameRule
id: Thief
components:
- type: ThiefRule
- type: AntagObjectives
objectives:
- EscapeThiefShuttleObjective
- type: AntagRandomObjectives
sets:
- groups: ThiefBigObjectiveGroups
prob: 0.7
maxPicks: 1
- groups: ThiefObjectiveGroups
maxPicks: 10
maxDifficulty: 2.5
- type: AntagSelection
agentName: thief-round-end-agent-name
definitions:
- prefRoles: [ Thief ]
max: 3
playerRatio: 15
lateJoinAdditional: true
allowNonHumans: true
multiAntagSetting: NotExclusive
startingGear: ThiefGear
components:
- type: Pacified
mindRoles:
- MindRoleThief
briefing:
sound: "/Audio/Misc/thief_greeting.ogg"
# Needs testing
- type: entity
abstract: true
parent: BaseWizardRule
id: SubWizard
components:
- type: AntagSelection
agentName: wizard-round-end-name
selectionTime: PrePlayerSpawn
definitions:
- prefRoles: [ Wizard ]
max: 1
playerRatio: 1
spawnerPrototype: SpawnPointGhostWizard
roleLoadout:
- RoleSurvivalExtended
briefing:
text: wizard-role-greeting
color: Turquoise
# TODO: Need Wizard Start sound
#sound: "/Audio/Ambience/Antag/wizard_start.ogg"
startingGear: WizardBlueGear
# TODO: WizardComp as needed
components:
- type: NpcFactionMember
factions:
- Wizard
- type: RandomMetadata
nameSegments:
- names_wizard_first
- names_wizard_last
mindRoles:
- MindRoleWizard

View File

@@ -8,6 +8,7 @@
- Revolutionaries
- NuclearOperatives
- SpaceNinja
- Wizard
- Zombies
- MinorAntagonists
@@ -45,3 +46,8 @@
id: Thieves
name: guide-entry-thieves
text: "/ServerInfo/Guidebook/Antagonist/Thieves.xml"
- type: guideEntry
id: Wizard
name: guide-entry-wizard
text: "/ServerInfo/Guidebook/Antagonist/Wizard.xml"

View File

@@ -111,3 +111,11 @@
id: BaseCodeObjective
components:
- type: CodeCondition
# a free objective, which is a free greentext
- type: entity
abstract: true
parent: BaseObjective
id: BaseFreeObjective
components:
- type: FreeObjective

View File

@@ -0,0 +1,35 @@
- type: entity
abstract: true
parent: BaseObjective
id: BaseWizardObjective
components:
- type: Objective
# required but not used
difficulty: 1
issuer: objective-issuer-swf
- type: RoleRequirement
roles:
mindRoles:
- WizardRole
- type: entity
parent: [BaseWizardObjective, BaseSurviveObjective]
id: WizardSurviveObjective
name: Survive
description: The Space Wizards Federation want you to live!
components:
- type: Objective
icon:
sprite: Clothing/Head/Hats/wizardhat.rsi
state: icon
- type: entity
parent: [BaseWizardObjective, BaseFreeObjective]
id: WizardDemonstrateObjective
name: Demonstration
description: Give the station a good demonstration of your powers!
components:
- type: Objective
icon:
sprite: Objects/Magic/magicactions.rsi
state: fireball

View File

@@ -1,8 +1,19 @@
# TODO: Actual wizard coming later, this is just for the survival antags
- type: antag
id: Survivor
name: roles-antag-survivor-name
antagonist: true
objective: roles-antag-survivor-objective
# guides: [ ]
- type: antag
id: Wizard
name: roles-antag-wizard-name
antagonist: true
setPreference: true
objective: roles-antag-wizard-objective # TODO: maybe give random objs and stationary ones from AntagObjectives and AntagRandomObjectives
requirements: # I hate time locked roles but this should be enough time for someone to be acclimated
- !type:OverallPlaytimeRequirement
time: 18000 # 5h
guides: [ Wizard ]
# See wizard_startinggear for wiz start gear options

View File

@@ -4,13 +4,14 @@
equipment:
jumpsuit: ClothingUniformJumpsuitColorDarkBlue
head: ClothingHeadHatWizard
back: ClothingBackpack # Wizard backpack?
outerClothing: ClothingOuterWizard
shoes: ClothingShoesWizard
id: PassengerPDA
ears: ClothingHeadsetService
storage:
back:
- BoxSurvival
id: PassengerPDA # Maybe a wizard PDA of some sort?
ears: ClothingHeadsetAltCommand
belt: ClothingBeltWand
# pocket1: TODO: Include wizard teleport scroll
pocket2: WizardsGrimoire
- type: startingGear
id: WizardRedGear

View File

@@ -250,6 +250,19 @@
- type: MindRole
roleType: TeamAntagonist
# Wizards
- type: entity
parent: BaseMindRoleAntag
id: MindRoleWizard
name: Wizard Role
# description: these are all commented out
components:
- type: MindRole
antagPrototype: Wizard
exclusiveAntag: true
roleType: SoloAntagonist
- type: WizardRole
# Zombie Squad
- type: entity
parent: BaseMindRoleAntag

View File

@@ -4,6 +4,7 @@
- /Audio/Lobby/thunderdome.ogg
- /Audio/Lobby/absconditus.ogg
- /Audio/Lobby/space_asshole.ogg
- /Audio/Lobby/the_wizard.ogg
- /Audio/Lobby/endless_space.ogg
- /Audio/Lobby/singuloose.ogg
- /Audio/Lobby/comet_haley.ogg

View File

@@ -201,6 +201,21 @@
- SpaceTrafficControlEventScheduler
- BasicRoundstartVariation
- type: gamePreset
id: Wizard
alias:
- wizard
name: wizard-title
description: wizard-description
showInVote: false
rules:
- Wizard
- SubGamemodesRuleNoWizard #No Dual Wizards at the start, midround is fine
- BasicStationEventScheduler
- MeteorSwarmScheduler
- SpaceTrafficControlEventScheduler
- BasicRoundstartVariation
- type: gamePreset
id: Zombie
alias:

View File

@@ -2,7 +2,8 @@
id: Secret
weights:
Nukeops: 0.20
Traitor: 0.60
Traitor: 0.55
Zombie: 0.05
Survival: 0.10
Revolutionary: 0.05
Wizard: 0.05 # Why not, should probably be lower