diff --git a/Content.Server/GameTicking/Rules/SurvivorRuleSystem.cs b/Content.Server/GameTicking/Rules/SurvivorRuleSystem.cs index 00f652b6c6..81ad2b1be7 100644 --- a/Content.Server/GameTicking/Rules/SurvivorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/SurvivorRuleSystem.cs @@ -1,4 +1,4 @@ -using Content.Server.Antag; +using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; using Content.Server.Mind; using Content.Server.Roles; diff --git a/Content.Server/Objectives/Components/FreeObjectiveComponent.cs b/Content.Server/Objectives/Components/FreeObjectiveComponent.cs new file mode 100644 index 0000000000..ae5070ddf7 --- /dev/null +++ b/Content.Server/Objectives/Components/FreeObjectiveComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Objectives.Components; + +/// +/// A free greentext, that's it. +/// +[RegisterComponent] +public sealed partial class FreeObjectiveComponent : Component; diff --git a/Content.Server/Objectives/Systems/FreeObjectiveSystem.cs b/Content.Server/Objectives/Systems/FreeObjectiveSystem.cs new file mode 100644 index 0000000000..ae1753b5c4 --- /dev/null +++ b/Content.Server/Objectives/Systems/FreeObjectiveSystem.cs @@ -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(OnGetProgress); + } + + // You automatically greentext, there's not much else to it + private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) + { + args.Progress = 1f; + } +} diff --git a/Content.Server/Roles/WizardRoleComponent.cs b/Content.Server/Roles/WizardRoleComponent.cs new file mode 100644 index 0000000000..72a89ee2ca --- /dev/null +++ b/Content.Server/Roles/WizardRoleComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Roles; + +/// +/// Mind role to tag entities that they're a Wizard +/// +[RegisterComponent] +public sealed partial class WizardRoleComponent : Component; diff --git a/Resources/Audio/Lobby/attributions.yml b/Resources/Audio/Lobby/attributions.yml index 657d018861..722f70731a 100644 --- a/Resources/Audio/Lobby/attributions.yml +++ b/Resources/Audio/Lobby/attributions.yml @@ -14,6 +14,13 @@ 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. +- 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"] license: "CC-BY-NC-SA-3.0" copyright: "Absconditus by ZhayTee. Converted from MP3 to OGG." diff --git a/Resources/Audio/Lobby/the_wizard.ogg b/Resources/Audio/Lobby/the_wizard.ogg new file mode 100644 index 0000000000..f101df5f18 Binary files /dev/null and b/Resources/Audio/Lobby/the_wizard.ogg differ diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-wizard.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-wizard.ftl index c355f4b9b0..722db5fb46 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-wizard.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-wizard.ftl @@ -1,4 +1,4 @@ -## Survivor +## Survivor roles-antag-survivor-name = Survivor # 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. } -## 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) diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index ccf78c703f..b2f0932787 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -315,3 +315,5 @@ ghost-role-information-gingerbread-name = Gingerbread Man ghost-role-information-gingerbread-description = A being of pure holiday spirit. 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. diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index 0e7bdc8db0..004b6b39a5 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -136,6 +136,7 @@ guide-entry-revolutionaries = Revolutionaries guide-entry-minor-antagonists = Minor Antagonists guide-entry-space-ninja = Space Ninja guide-entry-thieves = Thieves +guide-entry-wizard = Wizard guide-entry-rules = Server Rules guide-entry-rules-core-only = Core Only Ruleset diff --git a/Resources/Maps/Shuttles/wizard.yml b/Resources/Maps/Shuttles/wizard.yml index fee421124e..2151d3fcd3 100644 --- a/Resources/Maps/Shuttles/wizard.yml +++ b/Resources/Maps/Shuttles/wizard.yml @@ -1,6 +1,17 @@ meta: - format: 6 - postmapinit: false + format: 7 + category: Grid + engineVersion: 247.1.0 + forkId: "" + forkVersion: "" + time: 02/23/2025 10:35:57 + entityCount: 791 +maps: [] +grids: +- 768 +orphans: +- 768 +nullspace: [] tilemap: 0: Space 23: FloorCaveDrought @@ -1933,6 +1944,13 @@ entities: rot: -1.5707963267948966 rad pos: 5.5,3.5 parent: 768 +- proto: ClockworkShield + entities: + - uid: 782 + components: + - type: Transform + pos: -2.780127,-2.51509 + parent: 768 - proto: ClothingBeltUtilityFilled entities: - uid: 635 @@ -3050,6 +3068,13 @@ entities: - type: Transform pos: 2.5,-8.5 parent: 768 +- proto: MirrorShield + entities: + - uid: 783 + components: + - type: Transform + pos: 1.3163121,-0.3900899 + parent: 768 - proto: NitrogenCanister entities: - uid: 601 @@ -3702,6 +3727,56 @@ entities: - type: Transform pos: -4.5,-13.5 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 entities: - uid: 779 @@ -3989,6 +4064,14 @@ entities: - type: Transform pos: 7.5,3.5 parent: 768 +- proto: SalvageHumanCorpseSpawner + entities: + - uid: 791 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-1.5 + parent: 768 - proto: SinkWide entities: - uid: 581 @@ -4030,14 +4113,7 @@ entities: - type: Transform pos: 6.5,-2.5 parent: 768 -- proto: SpawnPointCaptain - entities: - - uid: 767 - components: - - type: Transform - pos: -0.5,-9.5 - parent: 768 -- proto: SpawnPointLatejoin +- proto: SpawnPointWizard entities: - uid: 762 components: diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml index 41a11561e8..f334747024 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml @@ -272,3 +272,4 @@ - id: OxygenTankFilled - id: ClothingOuterHardsuitWizard - id: ClothingMaskBreath + - id: JetpackVoidFilled diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Conditional/wizard.yml b/Resources/Prototypes/Entities/Markers/Spawners/Conditional/wizard.yml new file mode 100644 index 0000000000..bf7dc4e632 --- /dev/null +++ b/Resources/Prototypes/Entities/Markers/Spawners/Conditional/wizard.yml @@ -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 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 0e38cd266d..bd3c76cd84 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -207,4 +207,25 @@ layers: - state: green - sprite: Mobs/Silicon/chassis.rsi - state: derelict_icon \ No newline at end of file + 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 diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 7fc8bf7d6c..a3b9a0a88a 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -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 diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 9a4ca97210..346d21e4c7 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -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 diff --git a/Resources/Prototypes/GameRules/midround.yml b/Resources/Prototypes/GameRules/midround.yml deleted file mode 100644 index 6cc53a3d10..0000000000 --- a/Resources/Prototypes/GameRules/midround.yml +++ /dev/null @@ -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" diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 611b3b6abd..8353deb17c 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -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 diff --git a/Resources/Prototypes/GameRules/subgamemodes.yml b/Resources/Prototypes/GameRules/subgamemodes.yml new file mode 100644 index 0000000000..70090f0e44 --- /dev/null +++ b/Resources/Prototypes/GameRules/subgamemodes.yml @@ -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 diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index 3f42287c47..4548bb292b 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -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" diff --git a/Resources/Prototypes/Objectives/base_objectives.yml b/Resources/Prototypes/Objectives/base_objectives.yml index 1fbd23dfce..1abbe74f3a 100644 --- a/Resources/Prototypes/Objectives/base_objectives.yml +++ b/Resources/Prototypes/Objectives/base_objectives.yml @@ -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 diff --git a/Resources/Prototypes/Objectives/wizard.yml b/Resources/Prototypes/Objectives/wizard.yml new file mode 100644 index 0000000000..03bcd64e71 --- /dev/null +++ b/Resources/Prototypes/Objectives/wizard.yml @@ -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 diff --git a/Resources/Prototypes/Roles/Antags/wizard.yml b/Resources/Prototypes/Roles/Antags/wizard.yml index e8ffe649e7..0ddf90ef2b 100644 --- a/Resources/Prototypes/Roles/Antags/wizard.yml +++ b/Resources/Prototypes/Roles/Antags/wizard.yml @@ -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 diff --git a/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml b/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml index a4e5e3c3ab..3e9ea6360a 100644 --- a/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml +++ b/Resources/Prototypes/Roles/Jobs/Fun/wizard_startinggear.yml @@ -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 diff --git a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml index ded64895f0..ea6780eb50 100644 --- a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml +++ b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml @@ -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 diff --git a/Resources/Prototypes/SoundCollections/lobby.yml b/Resources/Prototypes/SoundCollections/lobby.yml index f85a8b22af..bf0c27064c 100644 --- a/Resources/Prototypes/SoundCollections/lobby.yml +++ b/Resources/Prototypes/SoundCollections/lobby.yml @@ -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 diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 317912e07a..0fbc63c197 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -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: diff --git a/Resources/Prototypes/secret_weights.yml b/Resources/Prototypes/secret_weights.yml index 7af610af6c..fae71c8eea 100644 --- a/Resources/Prototypes/secret_weights.yml +++ b/Resources/Prototypes/secret_weights.yml @@ -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 diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml b/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml new file mode 100644 index 0000000000..2fc56e0d80 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Antagonist/Wizard.xml @@ -0,0 +1,30 @@ + + # The Wizard + + + [color=#457573][italic]IT'S WIZARD TIME MOTHERF-...[italic][/color] + + + + + 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 + + + + + [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! + + + + + + 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]. + +