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:
@@ -1,4 +1,4 @@
|
|||||||
using Content.Server.Antag;
|
using Content.Server.Antag;
|
||||||
using Content.Server.GameTicking.Rules.Components;
|
using Content.Server.GameTicking.Rules.Components;
|
||||||
using Content.Server.Mind;
|
using Content.Server.Mind;
|
||||||
using Content.Server.Roles;
|
using Content.Server.Roles;
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Content.Server.Objectives.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A free greentext, that's it.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class FreeObjectiveComponent : Component;
|
||||||
20
Content.Server/Objectives/Systems/FreeObjectiveSystem.cs
Normal file
20
Content.Server/Objectives/Systems/FreeObjectiveSystem.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using Content.Server.Objectives.Components;
|
||||||
|
using Content.Shared.Objectives.Components;
|
||||||
|
|
||||||
|
namespace Content.Server.Objectives.Systems;
|
||||||
|
|
||||||
|
public sealed class FreeObjectiveSystem : EntitySystem
|
||||||
|
{
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<FreeObjectiveComponent, ObjectiveGetProgressEvent>(OnGetProgress);
|
||||||
|
}
|
||||||
|
|
||||||
|
// You automatically greentext, there's not much else to it
|
||||||
|
private void OnGetProgress(Entity<FreeObjectiveComponent> ent, ref ObjectiveGetProgressEvent args)
|
||||||
|
{
|
||||||
|
args.Progress = 1f;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
Content.Server/Roles/WizardRoleComponent.cs
Normal file
7
Content.Server/Roles/WizardRoleComponent.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Content.Server.Roles;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Mind role to tag entities that they're a Wizard
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class WizardRoleComponent : Component;
|
||||||
@@ -14,6 +14,13 @@
|
|||||||
source: "https://idlethumbs.bandcamp.com/track/space-asshole"
|
source: "https://idlethumbs.bandcamp.com/track/space-asshole"
|
||||||
# The source is a direct link the the track, but not the "main" bandcamp of the author. Hence the link is also included separately in the copyright.
|
# The source is a direct link the the track, but not the "main" bandcamp of the author. Hence the link is also included separately in the copyright.
|
||||||
|
|
||||||
|
- files: ["the_wizard.ogg"]
|
||||||
|
license: "Custom"
|
||||||
|
copyright: "The Wizard by Chris Remo is used with special permission from the author, under the condition that the project remains non-commercial and open source. The author also requested that a link to his bandcamp be included: https://chrisremo.bandcamp.com/"
|
||||||
|
source: "https://idlethumbs.bandcamp.com/track/the-wizard"
|
||||||
|
# The source is a direct link the the track, but not the "main" bandcamp of the author. Hence the link is also included separately in the copyright.
|
||||||
|
# Got permission from Chris for this song as well on 02/25/25, requires same attributions
|
||||||
|
|
||||||
- files: ["absconditus.ogg"]
|
- files: ["absconditus.ogg"]
|
||||||
license: "CC-BY-NC-SA-3.0"
|
license: "CC-BY-NC-SA-3.0"
|
||||||
copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG."
|
copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG."
|
||||||
|
|||||||
BIN
Resources/Audio/Lobby/the_wizard.ogg
Normal file
BIN
Resources/Audio/Lobby/the_wizard.ogg
Normal file
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
## Survivor
|
## Survivor
|
||||||
|
|
||||||
roles-antag-survivor-name = Survivor
|
roles-antag-survivor-name = Survivor
|
||||||
# It's a Halo reference
|
# It's a Halo reference
|
||||||
@@ -31,6 +31,23 @@ survivor-round-end-alive-on-shuttle-count =
|
|||||||
*[other] [color=green]{$aliveCount}[/color] survivors made it out alive.
|
*[other] [color=green]{$aliveCount}[/color] survivors made it out alive.
|
||||||
}
|
}
|
||||||
|
|
||||||
## TODO: Wizard
|
## Wizard
|
||||||
|
|
||||||
|
objective-issuer-swf = [color=turquoise]The Space Wizards Federation[/color]
|
||||||
|
|
||||||
|
wizard-title = Wizard
|
||||||
|
wizard-description = There's a Wizard on the station! You never know what they might do.
|
||||||
|
|
||||||
|
roles-antag-wizard-name = Wizard
|
||||||
|
roles-antag-wizard-objective = Teach them a lesson they'll never forget.
|
||||||
|
|
||||||
|
wizard-role-greeting =
|
||||||
|
YER A WIZARD!
|
||||||
|
There's been tensions between the Space Wizards Federation and NanoTrasen.
|
||||||
|
So you've been selected by the Space Wizards Federation to pay a visit to the station.
|
||||||
|
Give them a good demonstration of your powers.
|
||||||
|
What you do is up to you, just remember the Space Wizards want you to make it out alive.
|
||||||
|
|
||||||
|
wizard-round-end-name = wizard
|
||||||
|
|
||||||
## TODO: Wizard Apprentice (Coming sometime post-wizard release)
|
## TODO: Wizard Apprentice (Coming sometime post-wizard release)
|
||||||
|
|||||||
@@ -315,3 +315,5 @@ ghost-role-information-gingerbread-name = Gingerbread Man
|
|||||||
ghost-role-information-gingerbread-description = A being of pure holiday spirit.
|
ghost-role-information-gingerbread-description = A being of pure holiday spirit.
|
||||||
Spread molassesy goodness and to all good cheer.
|
Spread molassesy goodness and to all good cheer.
|
||||||
|
|
||||||
|
ghost-role-information-wizard-name = Wizard
|
||||||
|
ghost-role-information-wizard-desc = YER A WIZARD! Show the station what your magic is made of.
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ guide-entry-revolutionaries = Revolutionaries
|
|||||||
guide-entry-minor-antagonists = Minor Antagonists
|
guide-entry-minor-antagonists = Minor Antagonists
|
||||||
guide-entry-space-ninja = Space Ninja
|
guide-entry-space-ninja = Space Ninja
|
||||||
guide-entry-thieves = Thieves
|
guide-entry-thieves = Thieves
|
||||||
|
guide-entry-wizard = Wizard
|
||||||
|
|
||||||
guide-entry-rules = Server Rules
|
guide-entry-rules = Server Rules
|
||||||
guide-entry-rules-core-only = Core Only Ruleset
|
guide-entry-rules-core-only = Core Only Ruleset
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
meta:
|
meta:
|
||||||
format: 6
|
format: 7
|
||||||
postmapinit: false
|
category: Grid
|
||||||
|
engineVersion: 247.1.0
|
||||||
|
forkId: ""
|
||||||
|
forkVersion: ""
|
||||||
|
time: 02/23/2025 10:35:57
|
||||||
|
entityCount: 791
|
||||||
|
maps: []
|
||||||
|
grids:
|
||||||
|
- 768
|
||||||
|
orphans:
|
||||||
|
- 768
|
||||||
|
nullspace: []
|
||||||
tilemap:
|
tilemap:
|
||||||
0: Space
|
0: Space
|
||||||
23: FloorCaveDrought
|
23: FloorCaveDrought
|
||||||
@@ -1933,6 +1944,13 @@ entities:
|
|||||||
rot: -1.5707963267948966 rad
|
rot: -1.5707963267948966 rad
|
||||||
pos: 5.5,3.5
|
pos: 5.5,3.5
|
||||||
parent: 768
|
parent: 768
|
||||||
|
- proto: ClockworkShield
|
||||||
|
entities:
|
||||||
|
- uid: 782
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
pos: -2.780127,-2.51509
|
||||||
|
parent: 768
|
||||||
- proto: ClothingBeltUtilityFilled
|
- proto: ClothingBeltUtilityFilled
|
||||||
entities:
|
entities:
|
||||||
- uid: 635
|
- uid: 635
|
||||||
@@ -3050,6 +3068,13 @@ entities:
|
|||||||
- type: Transform
|
- type: Transform
|
||||||
pos: 2.5,-8.5
|
pos: 2.5,-8.5
|
||||||
parent: 768
|
parent: 768
|
||||||
|
- proto: MirrorShield
|
||||||
|
entities:
|
||||||
|
- uid: 783
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
pos: 1.3163121,-0.3900899
|
||||||
|
parent: 768
|
||||||
- proto: NitrogenCanister
|
- proto: NitrogenCanister
|
||||||
entities:
|
entities:
|
||||||
- uid: 601
|
- uid: 601
|
||||||
@@ -3702,6 +3727,56 @@ entities:
|
|||||||
- type: Transform
|
- type: Transform
|
||||||
pos: -4.5,-13.5
|
pos: -4.5,-13.5
|
||||||
parent: 768
|
parent: 768
|
||||||
|
- proto: RandomPosterAny
|
||||||
|
entities:
|
||||||
|
- uid: 785
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: 3.141592653589793 rad
|
||||||
|
pos: -6.5,-4.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 786
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
pos: 4.5,-8.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 787
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: 3.141592653589793 rad
|
||||||
|
pos: -1.5,1.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 788
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: -1.5707963267948966 rad
|
||||||
|
pos: 1.5,3.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 789
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: -1.5707963267948966 rad
|
||||||
|
pos: -2.5,6.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 790
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: 3.141592653589793 rad
|
||||||
|
pos: -7.5,4.5
|
||||||
|
parent: 768
|
||||||
|
- proto: RandomPosterContraband
|
||||||
|
entities:
|
||||||
|
- uid: 767
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
pos: 0.5,-12.5
|
||||||
|
parent: 768
|
||||||
|
- uid: 784
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: 3.141592653589793 rad
|
||||||
|
pos: -3.5,-15.5
|
||||||
|
parent: 768
|
||||||
- proto: RandomSpawner
|
- proto: RandomSpawner
|
||||||
entities:
|
entities:
|
||||||
- uid: 779
|
- uid: 779
|
||||||
@@ -3989,6 +4064,14 @@ entities:
|
|||||||
- type: Transform
|
- type: Transform
|
||||||
pos: 7.5,3.5
|
pos: 7.5,3.5
|
||||||
parent: 768
|
parent: 768
|
||||||
|
- proto: SalvageHumanCorpseSpawner
|
||||||
|
entities:
|
||||||
|
- uid: 791
|
||||||
|
components:
|
||||||
|
- type: Transform
|
||||||
|
rot: 3.141592653589793 rad
|
||||||
|
pos: 6.5,-1.5
|
||||||
|
parent: 768
|
||||||
- proto: SinkWide
|
- proto: SinkWide
|
||||||
entities:
|
entities:
|
||||||
- uid: 581
|
- uid: 581
|
||||||
@@ -4030,14 +4113,7 @@ entities:
|
|||||||
- type: Transform
|
- type: Transform
|
||||||
pos: 6.5,-2.5
|
pos: 6.5,-2.5
|
||||||
parent: 768
|
parent: 768
|
||||||
- proto: SpawnPointCaptain
|
- proto: SpawnPointWizard
|
||||||
entities:
|
|
||||||
- uid: 767
|
|
||||||
components:
|
|
||||||
- type: Transform
|
|
||||||
pos: -0.5,-9.5
|
|
||||||
parent: 768
|
|
||||||
- proto: SpawnPointLatejoin
|
|
||||||
entities:
|
entities:
|
||||||
- uid: 762
|
- uid: 762
|
||||||
components:
|
components:
|
||||||
|
|||||||
@@ -272,3 +272,4 @@
|
|||||||
- id: OxygenTankFilled
|
- id: OxygenTankFilled
|
||||||
- id: ClothingOuterHardsuitWizard
|
- id: ClothingOuterHardsuitWizard
|
||||||
- id: ClothingMaskBreath
|
- id: ClothingMaskBreath
|
||||||
|
- id: JetpackVoidFilled
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -207,4 +207,25 @@
|
|||||||
layers:
|
layers:
|
||||||
- state: green
|
- state: green
|
||||||
- sprite: Mobs/Silicon/chassis.rsi
|
- 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
|
||||||
|
|||||||
@@ -102,3 +102,15 @@
|
|||||||
- type: NpcFactionMember
|
- type: NpcFactionMember
|
||||||
factions:
|
factions:
|
||||||
- Syndicate
|
- Syndicate
|
||||||
|
|
||||||
|
# Wizard
|
||||||
|
- type: entity
|
||||||
|
categories: [ HideSpawnMenu ]
|
||||||
|
name: Wizard
|
||||||
|
parent: MobHuman
|
||||||
|
id: MobHumanWizard
|
||||||
|
components:
|
||||||
|
- type: RandomHumanoidAppearance
|
||||||
|
- type: NpcFactionMember
|
||||||
|
factions:
|
||||||
|
- Wizard
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
- id: ZombieOutbreak
|
- id: ZombieOutbreak
|
||||||
- id: LoneOpsSpawn
|
- id: LoneOpsSpawn
|
||||||
- id: DerelictCyborgSpawn
|
- id: DerelictCyborgSpawn
|
||||||
|
- id: WizardSpawn
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
id: BaseStationEvent
|
id: BaseStationEvent
|
||||||
@@ -243,6 +244,44 @@
|
|||||||
- type: RandomSpawnRule
|
- type: RandomSpawnRule
|
||||||
prototype: MobRevenant
|
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
|
# disabled until event is rewritten to be more interesting
|
||||||
#- type: entity
|
#- type: entity
|
||||||
# id: FalseAlarm
|
# id: FalseAlarm
|
||||||
|
|||||||
@@ -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"
|
|
||||||
@@ -18,6 +18,17 @@
|
|||||||
parent: BaseGameRule
|
parent: BaseGameRule
|
||||||
id: SubGamemodesRule
|
id: SubGamemodesRule
|
||||||
components:
|
components:
|
||||||
|
- type: SubGamemodes
|
||||||
|
rules:
|
||||||
|
- id: Thief
|
||||||
|
prob: 0.5
|
||||||
|
- id: SubWizard
|
||||||
|
prob: 0.05
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: BaseGameRule
|
||||||
|
id: SubGamemodesRuleNoWizard
|
||||||
|
components:
|
||||||
- type: SubGamemodes
|
- type: SubGamemodes
|
||||||
rules:
|
rules:
|
||||||
- id: Thief
|
- id: Thief
|
||||||
@@ -238,6 +249,56 @@
|
|||||||
components:
|
components:
|
||||||
- type: SecretRule
|
- 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
|
- type: entity
|
||||||
id: Zombie
|
id: Zombie
|
||||||
parent: BaseGameRule
|
parent: BaseGameRule
|
||||||
|
|||||||
66
Resources/Prototypes/GameRules/subgamemodes.yml
Normal file
66
Resources/Prototypes/GameRules/subgamemodes.yml
Normal 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
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
- Revolutionaries
|
- Revolutionaries
|
||||||
- NuclearOperatives
|
- NuclearOperatives
|
||||||
- SpaceNinja
|
- SpaceNinja
|
||||||
|
- Wizard
|
||||||
- Zombies
|
- Zombies
|
||||||
- MinorAntagonists
|
- MinorAntagonists
|
||||||
|
|
||||||
@@ -45,3 +46,8 @@
|
|||||||
id: Thieves
|
id: Thieves
|
||||||
name: guide-entry-thieves
|
name: guide-entry-thieves
|
||||||
text: "/ServerInfo/Guidebook/Antagonist/Thieves.xml"
|
text: "/ServerInfo/Guidebook/Antagonist/Thieves.xml"
|
||||||
|
|
||||||
|
- type: guideEntry
|
||||||
|
id: Wizard
|
||||||
|
name: guide-entry-wizard
|
||||||
|
text: "/ServerInfo/Guidebook/Antagonist/Wizard.xml"
|
||||||
|
|||||||
@@ -111,3 +111,11 @@
|
|||||||
id: BaseCodeObjective
|
id: BaseCodeObjective
|
||||||
components:
|
components:
|
||||||
- type: CodeCondition
|
- type: CodeCondition
|
||||||
|
|
||||||
|
# a free objective, which is a free greentext
|
||||||
|
- type: entity
|
||||||
|
abstract: true
|
||||||
|
parent: BaseObjective
|
||||||
|
id: BaseFreeObjective
|
||||||
|
components:
|
||||||
|
- type: FreeObjective
|
||||||
|
|||||||
35
Resources/Prototypes/Objectives/wizard.yml
Normal file
35
Resources/Prototypes/Objectives/wizard.yml
Normal 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
|
||||||
@@ -1,8 +1,19 @@
|
|||||||
# TODO: Actual wizard coming later, this is just for the survival antags
|
|
||||||
|
|
||||||
- type: antag
|
- type: antag
|
||||||
id: Survivor
|
id: Survivor
|
||||||
name: roles-antag-survivor-name
|
name: roles-antag-survivor-name
|
||||||
antagonist: true
|
antagonist: true
|
||||||
objective: roles-antag-survivor-objective
|
objective: roles-antag-survivor-objective
|
||||||
# guides: [ ]
|
# 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
|
||||||
|
|||||||
@@ -4,13 +4,14 @@
|
|||||||
equipment:
|
equipment:
|
||||||
jumpsuit: ClothingUniformJumpsuitColorDarkBlue
|
jumpsuit: ClothingUniformJumpsuitColorDarkBlue
|
||||||
head: ClothingHeadHatWizard
|
head: ClothingHeadHatWizard
|
||||||
|
back: ClothingBackpack # Wizard backpack?
|
||||||
outerClothing: ClothingOuterWizard
|
outerClothing: ClothingOuterWizard
|
||||||
shoes: ClothingShoesWizard
|
shoes: ClothingShoesWizard
|
||||||
id: PassengerPDA
|
id: PassengerPDA # Maybe a wizard PDA of some sort?
|
||||||
ears: ClothingHeadsetService
|
ears: ClothingHeadsetAltCommand
|
||||||
storage:
|
belt: ClothingBeltWand
|
||||||
back:
|
# pocket1: TODO: Include wizard teleport scroll
|
||||||
- BoxSurvival
|
pocket2: WizardsGrimoire
|
||||||
|
|
||||||
- type: startingGear
|
- type: startingGear
|
||||||
id: WizardRedGear
|
id: WizardRedGear
|
||||||
|
|||||||
@@ -250,6 +250,19 @@
|
|||||||
- type: MindRole
|
- type: MindRole
|
||||||
roleType: TeamAntagonist
|
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
|
# Zombie Squad
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseMindRoleAntag
|
parent: BaseMindRoleAntag
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
- /Audio/Lobby/thunderdome.ogg
|
- /Audio/Lobby/thunderdome.ogg
|
||||||
- /Audio/Lobby/absconditus.ogg
|
- /Audio/Lobby/absconditus.ogg
|
||||||
- /Audio/Lobby/space_asshole.ogg
|
- /Audio/Lobby/space_asshole.ogg
|
||||||
|
- /Audio/Lobby/the_wizard.ogg
|
||||||
- /Audio/Lobby/endless_space.ogg
|
- /Audio/Lobby/endless_space.ogg
|
||||||
- /Audio/Lobby/singuloose.ogg
|
- /Audio/Lobby/singuloose.ogg
|
||||||
- /Audio/Lobby/comet_haley.ogg
|
- /Audio/Lobby/comet_haley.ogg
|
||||||
|
|||||||
@@ -201,6 +201,21 @@
|
|||||||
- SpaceTrafficControlEventScheduler
|
- SpaceTrafficControlEventScheduler
|
||||||
- BasicRoundstartVariation
|
- 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
|
- type: gamePreset
|
||||||
id: Zombie
|
id: Zombie
|
||||||
alias:
|
alias:
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
id: Secret
|
id: Secret
|
||||||
weights:
|
weights:
|
||||||
Nukeops: 0.20
|
Nukeops: 0.20
|
||||||
Traitor: 0.60
|
Traitor: 0.55
|
||||||
Zombie: 0.05
|
Zombie: 0.05
|
||||||
Survival: 0.10
|
Survival: 0.10
|
||||||
Revolutionary: 0.05
|
Revolutionary: 0.05
|
||||||
|
Wizard: 0.05 # Why not, should probably be lower
|
||||||
|
|||||||
30
Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml
Normal file
30
Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<Document>
|
||||||
|
# The Wizard
|
||||||
|
|
||||||
|
<Box>
|
||||||
|
[color=#457573][italic]IT'S WIZARD TIME MOTHERF-...[italic][/color]
|
||||||
|
</Box>
|
||||||
|
<Box>
|
||||||
|
<GuideEntityEmbed Entity="ToyFigurineWizard" Caption=""/>
|
||||||
|
</Box>
|
||||||
|
Wizards are a force of chaos and unpredictability. You never know what one is going to do next.
|
||||||
|
Generally sent by the [color=#40E0D0]Space Wizards Federation[/color] or some schmuck turned into one by rolling a nat 20 on a cursed die.
|
||||||
|
And since a Wizard is highly unpredictable, one may show up when you least expect it!
|
||||||
|
|
||||||
|
## The Grimoire
|
||||||
|
<Box>
|
||||||
|
<GuideEntityEmbed Entity="WizardsGrimoire" Caption="Wizards Grimoire"/>
|
||||||
|
</Box>
|
||||||
|
|
||||||
|
[bold]By wizard law of eld your Grimoire is bound to you.[/bold] This means you cannot share your Grimoire with anyone else. The spells and equipment inside are for you and you alone.
|
||||||
|
The Wizard's Grimoire is used to get all sorts of magical spells, equipment, and creatures. What's available to you is [italic]extremely powerful[/italic] so you only have 10 [color=#FF0000]W[/color][color=#FFA500]i[/color][color=#FFFF00]z[/color][color=#00FF00]€[/color][color=#0000FF]o[/color][color=#4B0082]i[/color][color=#8F00FF]n[/color]™ to spend on them.
|
||||||
|
Your only limit, other than the price, is your creativity. Try to find some combinations!
|
||||||
|
|
||||||
|
<Box>
|
||||||
|
<GuideEntityEmbed Entity="PonderingOrbWizard" Caption="The Pondering Orb"/>
|
||||||
|
</Box>
|
||||||
|
|
||||||
|
If you ever find yourself wanting to ponder, look no further! The [bold]Pondering Orb[/bold] allows the Wizard to tap into the Station's camera network to spy on others unsuspectingly.
|
||||||
|
Could be useful if you're trying to plan something out or stay one step ahead of [color=red]Security[/color].
|
||||||
|
|
||||||
|
</Document>
|
||||||
Reference in New Issue
Block a user