From d19d02d6a2bab2de86eb35c65e17afc0203e8a12 Mon Sep 17 00:00:00 2001 From: Vigers Ray Date: Sat, 14 Dec 2024 20:36:55 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=9A=D1=83=D0=BB=D1=8C=D1=82=20=D0=BA?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterface/Controls/RadialMenu.cs | 7 +- .../_Sunrise/BloodCult/CultPentagramSystem.cs | 65 + .../Items/VeilShifter/VeilVisualizerSystem.cs | 40 + .../Items/VeilShifter/VeilVisualsComponent.cs | 13 + .../VoidTorch/VoidTorchVisualizerSystem.cs | 23 + .../VoidTorch/VoidTorchVisualsComponent.cs | 13 + .../_Sunrise/BloodCult/Narsie/NarsieLayer.cs | 6 + .../BloodCult/Narsie/NarsieVisualizer.cs | 69 + .../_Sunrise/BloodCult/PentagramComponent.cs | 9 + .../BloodCult/Pylon/PylonVisualizerSystem.cs | 41 + .../BloodCult/Pylon/PylonVisualsComponent.cs | 13 + .../_Sunrise/BloodCult/ShowCultHudSystem.cs | 29 + .../CultCraftStructureVisualizerSystem.cs | 23 + .../CultCraftStructureVisualsComponent.cs | 13 + .../_Sunrise/BloodCult/UI/Altar/AltarBUI.cs | 53 + .../UI/Altar/AltarListingControl.xaml | 9 + .../UI/Altar/AltarListingControl.xaml.cs | 20 + .../BloodCult/UI/Altar/AltarWindow.xaml | 7 + .../BloodCult/UI/Altar/AltarWindow.xaml.cs | 89 ++ .../_Sunrise/BloodCult/UI/BloodCultMenu.xaml | 13 + .../BloodCult/UI/BloodCultMenu.xaml.cs | 70 + .../BloodSpellSelectorBUI.cs | 63 + .../ConstructSelector/ConstructSelectorBui.cs | 58 + .../UI/CountSelector/CountSelectorBUI.cs | 47 + .../UI/CountSelector/CountSelectorWindow.xaml | 10 + .../CountSelector/CountSelectorWindow.xaml.cs | 26 + .../UI/CultistFactory/CultistFactoryBUI.cs | 97 ++ .../ListViewSelector/ListViewSelectorBUI.cs | 54 + .../ListViewSelectorWindow.xaml | 9 + .../ListViewSelectorWindow.xaml.cs | 63 + .../UI/NameSelector/NameSelectorBUI.cs | 44 + .../UI/NameSelector/NameSelectorWindow.xaml | 9 + .../NameSelector/NameSelectorWindow.xaml.cs | 26 + .../UI/SpellSelector/SpellSelectorBUI.cs | 71 + .../StructureCraftBoundUserInterface.cs | 137 ++ .../SummonCultistListWindow.xaml | 9 + .../SummonCultistListWindow.xaml.cs | 36 + .../SummonCultistListWindowBUI.cs | 42 + .../TeleportRunesListWindow.xaml | 9 + .../TeleportRunesListWindow.xaml.cs | 41 + .../TeleportRunesListWindowBUI.cs | 42 + .../UI/TeleportSpell/TeleportSpellEui.cs | 40 + .../BloodCult/UI/Torch/TorchWindow.xaml | 9 + .../BloodCult/UI/Torch/TorchWindow.xaml.cs | 34 + .../BloodCult/UI/Torch/TorchWindowBUI.cs | 42 + .../Systems/AdminVerbSystem.Antags.cs | 17 + Content.Server/Body/Systems/StomachSystem.cs | 42 + Content.Server/RoundEnd/RoundEndSystem.cs | 26 + .../BecomeDustOnDeathComponent.cs | 11 + .../BecomeDustOnDeathSystem.cs | 19 + .../_Sunrise/BloodCult/ConstructComponent.cs | 8 + .../BloodCult/CultistRoleComponent.cs | 8 + .../GameRule/BloodCultRuleComponent.cs | 70 + .../BloodCult/GameRule/BloodCultRuleSystem.cs | 373 +++++ .../HolyWater/BibleWaterConvertComponent.cs | 11 + .../BloodCult/HolyWater/DeconvertCultist.cs | 64 + .../BloodCult/HolyWater/HolyWaterSystem.cs | 53 + .../Components/CultRobeModifierComponent.cs | 13 + .../Components/ReturnItemOnThrowComponent.cs | 8 + .../Items/Components/ShuttleCurseComponent.cs | 11 + .../TorchCultistsProviderComponent.cs | 25 + .../Items/Systems/CultBloodSpearSystem.cs | 129 ++ .../Items/Systems/CultBloodSpellSystem.cs | 342 +++++ .../Items/Systems/CultRobeModifierSystem.cs | 81 ++ .../Items/Systems/CultSpellProviderSystem.cs | 166 +++ .../Items/Systems/CultWeaponSystem.cs | 109 ++ .../Items/Systems/ReturnItemOnThrowSystem.cs | 42 + .../Items/Systems/ShuttleCurseSystem.cs | 80 ++ .../Systems/TorchCultistsProviderSystem.cs | 265 ++++ .../Items/Systems/VoidTeleportSystem.cs | 167 +++ .../Juggernaut/JaggernautComponent.cs | 11 + .../BloodCult/Juggernaut/JuggernautSystem.cs | 21 + .../KillCultistTargetConditionComponent.cs | 13 + .../KillCultistTargetConditionSystem.cs | 101 ++ .../_Sunrise/BloodCult/PentagramComponent.cs | 9 + .../_Sunrise/BloodCult/Pylon/PylonSystem.cs | 283 ++++ .../Runes/Comps/CultBarrierComponent.cs | 7 + .../Comps/CultRuneApocalypseComponent.cs | 11 + .../Runes/Comps/CultRuneBarrierComponent.cs | 4 + .../Runes/Comps/CultRuneBaseComponent.cs | 17 + .../Runes/Comps/CultRuneBloodBoilComponent.cs | 26 + .../Runes/Comps/CultRuneBuffComponent.cs | 8 + .../Runes/Comps/CultRuneOfferingComponent.cs | 17 + .../Runes/Comps/CultRuneReviveComponent.cs | 10 + .../Runes/Comps/CultRuneSummoningComponent.cs | 8 + .../CultRuneSummoningProviderComponent.cs | 8 + .../Runes/Comps/CultRuneTeleportComponent.cs | 11 + .../CultTeleportRuneProviderComponent.cs | 11 + .../Comps/RuneDrawerProviderComponent.cs | 13 + .../Runes/Comps/SoulShardComponent.cs | 7 + .../Runes/Systems/BloodCultSystem.Actions.cs | 241 ++++ .../Runes/Systems/BloodCultSystem.Barrier.cs | 84 ++ .../Runes/Systems/BloodCultSystem.Buff.cs | 109 ++ .../Systems/BloodCultSystem.Constructs.cs | 60 + .../BloodCultSystem.ConstructsAbilities.cs | 164 +++ .../Runes/Systems/BloodCultSystem.Narsie.cs | 26 + .../Runes/Systems/BloodCultSystem.Rune.cs | 1218 +++++++++++++++++ .../Systems/BloodCultSystem.SoulShard.cs | 62 + .../Runes/Systems/BloodCultSystem.cs | 122 ++ .../Structures/CultStructureCraftSystem.cs | 31 + .../Structures/RunicDoorComponent.cs | 6 + .../BloodCult/Structures/RunicDoorSystem.cs | 74 + .../Structures/RunicGirderComponent.cs | 11 + .../BloodCult/Structures/RunicGirderSystem.cs | 30 + .../Structures/RunicMetalComponent.cs | 13 + .../CultistFactoryComponent.cs | 25 + .../TimedProduction/CultistFactorySystem.cs | 121 ++ .../_Sunrise/BloodCult/UI/TeleportSpellEui.cs | 102 ++ .../IncorporealSystem/IncorporealComponent.cs | 8 + .../IncorporealSystem/IncorporealSystem.cs | 70 + .../SharpeningSystem/SharpenerComponent.cs | 24 + .../SharpeningSystem/SharpeningSystem.cs | 99 ++ Content.Shared/Body/Events/BodyInitEvent.cs | 6 + .../Body/Systems/SharedBodySystem.Body.cs | 5 + Content.Shared/Doors/DoorEvents.cs | 4 +- .../Doors/Systems/SharedDoorSystem.cs | 2 +- Content.Shared/IoC/SharedContentIoC.cs | 4 +- Content.Shared/Stunnable/SharedStunSystem.cs | 7 + .../_Sunrise/BloodCult/Actions/CultActions.cs | 32 + .../BloodCult/Actions/CultMagicBloodEvent.cs | 11 + .../Components/BloodCultistComponent.cs | 60 + .../Components/BloodSpearOwnerComponent.cs | 14 + .../Components/ConstructShellComponent.cs | 17 + .../BloodCult/Components/CultBuffComponent.cs | 18 + .../Components/CultEmpowerComponent.cs | 8 + .../Components/CultMemberComponent.cs | 22 + .../_Sunrise/BloodCult/ConstructsEvents.cs | 42 + .../CultistFactoryProductionPrototype.cs | 27 + .../BloodCult/Items/CultBloodOrbComponent.cs | 10 + .../Items/CultBloodSpearComponent.cs | 19 + .../Items/CultBloodSpellComponent.cs | 84 ++ .../Items/CultSpellProviderComponent.cs | 25 + .../BloodCult/Items/CultWeaponComponent.cs | 23 + .../BloodCult/Items/SharedSoulShard.cs | 9 + .../Items/TorchWindowSerializables.cs | 39 + .../BloodCult/Items/VoidTeleportComponent.cs | 49 + .../Pentagram/SharedPentagramComponent.cs | 3 + .../BloodCult/Pylon/SharedPylonComponent.cs | 73 + .../_Sunrise/BloodCult/Runes/CultDrawEvent.cs | 10 + .../BloodCult/Runes/CultEraseEvent.cs | 10 + .../BloodCult/Runes/CultRuneInvokeEvent.cs | 16 + .../Runes/SummonNarsieDoAfterEvent.cs | 9 + .../_Sunrise/BloodCult/SharedNarsie.cs | 24 + .../Structures/CultStructurePrototype.cs | 20 + .../Structures/CultStructureSerializables.cs | 9 + .../BloodCult/Systems/CultMemberSystem.cs | 49 + .../BloodCult/Systems/CultistSystem.cs | 34 + .../Systems/CultistWordGeneratorManager.cs | 55 + .../_Sunrise/BloodCult/UI/AltarBUIState.cs | 42 + .../_Sunrise/BloodCult/UI/ConstructUi.cs | 19 + .../BloodCult/UI/CultistFactoryBUIState.cs | 25 + .../BloodCult/UI/ListViewSelectorBUIState.cs | 33 + .../_Sunrise/BloodCult/UI/NameSelector.cs | 127 ++ .../BloodCult/UI/TeleportSpellEuiState.cs | 21 + Resources/Audio/_Sunrise/BloodCult/40sec.ogg | Bin 0 -> 219784 bytes Resources/Audio/_Sunrise/BloodCult/blood.ogg | Bin 0 -> 13657 bytes .../BloodCult/blood_cult_greeting.ogg | Bin 0 -> 155160 bytes .../Audio/_Sunrise/BloodCult/butcher.ogg | Bin 0 -> 9666 bytes Resources/Audio/_Sunrise/BloodCult/curse.ogg | Bin 0 -> 8992 bytes .../Audio/_Sunrise/BloodCult/enter_blood.ogg | Bin 0 -> 20837 bytes .../Audio/_Sunrise/BloodCult/finisheddraw.ogg | Bin 0 -> 31013 bytes Resources/Audio/_Sunrise/BloodCult/magic.ogg | Bin 0 -> 24183 bytes .../_Sunrise/BloodCult/narsie_summoned.ogg | Bin 0 -> 49654 bytes .../Audio/_Sunrise/BloodCult/startdraw.ogg | Bin 0 -> 25351 bytes Resources/Audio/_Sunrise/BloodCult/veilin.ogg | Bin 0 -> 11239 bytes .../Audio/_Sunrise/BloodCult/veilout.ogg | Bin 0 -> 11211 bytes .../Audio/_Sunrise/BloodCult/wraith_phase.ogg | Bin 0 -> 11078 bytes .../_sunrise/blood-cult/abilities.ftl | 14 + .../_sunrise/blood-cult/admin-verb.ftl | 2 + .../_strings/_sunrise/blood-cult/antags.ftl | 2 + .../_strings/_sunrise/blood-cult/archives.ftl | 2 + .../_sunrise/blood-cult/construct.ftl | 3 + .../_sunrise/blood-cult/constructs.ftl | 8 + .../_sunrise/blood-cult/cult-structure.ftl | 24 + .../_strings/_sunrise/blood-cult/cult.ftl | 65 + .../_sunrise/blood-cult/cultist-factory.ftl | 11 + .../_strings/_sunrise/blood-cult/effects.ftl | 1 + .../_sunrise/blood-cult/holy-water.ftl | 3 + .../_sunrise/blood-cult/preset-cult.ftl | 2 + .../_strings/_sunrise/blood-cult/pylon.ftl | 4 + .../_strings/_sunrise/blood-cult/reagents.ftl | 2 + .../_sunrise/blood-cult/runes-entities.ftl | 11 + .../_sunrise/blood-cult/shuttle-curse.ftl | 8 + .../_strings/_sunrise/blood-cult/tile.ftl | 1 + .../_sunrise/blood-cult/veil-shifter.ftl | 5 + .../_sunrise/blood-cult/void-torch.ftl | 9 + .../_strings/_sunrise/blood-cult/weapon.ftl | 8 + Resources/Prototypes/Alerts/alerts.yml | 3 +- .../Prototypes/Entities/Mobs/Species/base.yml | 8 + .../Entities/Structures/Walls/walls.yml | 5 + Resources/Prototypes/Reagents/medicine.yml | 8 +- .../BloodCult/Actions/constuct_actions.yml | 102 ++ .../BloodCult/Actions/cult_actions.yml | 165 +++ .../BloodCult/Construction/Cult/graphs.yml | 137 ++ .../Construction/Cult/structures.yml | 107 ++ .../Entities/Cult/Altars/cult_altars.yml | 293 ++++ .../Entities/Cult/Effects/effects.yml | 105 ++ .../Entities/Cult/Effects/shield.yml | 68 + .../Entities/Cult/Items/altar_craft.yml | 27 + .../Entities/Cult/Items/blood_magic.yml | 32 + .../BloodCult/Entities/Cult/Items/bola.yml | 12 + .../BloodCult/Entities/Cult/Items/cuff.yml | 33 + .../Entities/Cult/Items/forge_craft.yml | 69 + .../Entities/Cult/Items/projectiles.yml | 19 + .../Entities/Cult/Items/soul_shard.yml | 41 + .../Entities/Cult/Items/tome_craft.yml | 215 +++ .../BloodCult/Entities/Cult/Items/weapon.yml | 177 +++ .../Entities/Cult/Runes/cult_runes.yml | 150 ++ .../BloodCult/Entities/Cult/antag.yml | 6 + .../BloodCult/Entities/Cult/constructs.yml | 212 +++ .../BloodCult/Entities/Cult/drinks_flask.yml | 31 + .../Entities/Cult/other_structures.yml | 87 ++ .../BloodCult/Entities/Cult/weapon.yml | 31 + .../_Sunrise/BloodCult/Object/wetstone.yml | 28 + .../_Sunrise/BloodCult/Tiles/cult.yml | 12 + .../Prototypes/_Sunrise/BloodCult/alerts.yml | 5 + .../Prototypes/_Sunrise/BloodCult/bodies.yml | 22 + .../_Sunrise/BloodCult/faction_icon.yml | 15 + .../_Sunrise/BloodCult/game_presets.yml | 15 + .../_Sunrise/BloodCult/mind_roles.yml | 10 + .../Prototypes/_Sunrise/BloodCult/narsie.yml | 47 + .../_Sunrise/BloodCult/objectivies.yml | 25 + .../_Sunrise/BloodCult/reagents.yml | 33 + .../_Sunrise/BloodCult/roundstart.yml | 30 + .../Prototypes/_Sunrise/BloodCult/tags.yml | 2 + .../_Sunrise/BloodCult/tool_qualities.yml | 6 + .../Prototypes/_Sunrise/secret_weights.yml | 8 +- .../Prototypes/_Sunrise/vote_weights.yml | 24 +- Resources/Prototypes/ai_factions.yml | 22 + Resources/Prototypes/status_effects.yml | 3 + .../_Sunrise/BloodCult/Alerts/buff.png | Bin 0 -> 891 bytes .../Effects/airlock_glow.rsi/doorglow.png | Bin 0 -> 3191 bytes .../Effects/airlock_glow.rsi/meta.json | 28 + .../Effects/cult_inout.rsi/cultin.png | Bin 0 -> 5277 bytes .../Effects/cult_inout.rsi/cultout.png | Bin 0 -> 4490 bytes .../Effects/cult_inout.rsi/meta.json | 103 ++ .../BloodCult/Effects/shield.rsi/meta.json | 25 + .../Effects/shield.rsi/shield-cult.png | Bin 0 -> 2271 bytes .../Effects/tiles_spawn.rsi/floorglow.png | Bin 0 -> 1181 bytes .../Effects/tiles_spawn.rsi/meta.json | 28 + .../BloodCult/Effects/wall_glow.rsi/meta.json | 28 + .../Effects/wall_glow.rsi/wallglow.png | Bin 0 -> 3360 bytes .../Entities/blood_magic.rsi/icon.png | Bin 0 -> 706 bytes .../Entities/blood_magic.rsi/inhand-left.png | Bin 0 -> 845 bytes .../Entities/blood_magic.rsi/inhand-right.png | Bin 0 -> 843 bytes .../Entities/blood_magic.rsi/meta.json | 66 + .../construct_cult.rsi/construct_cult.png | Bin 0 -> 857 bytes .../Entities/construct_cult.rsi/meta.json | 22 + .../Entities/mirror_shield.rsi/icon-off.png | Bin 0 -> 529 bytes .../Entities/mirror_shield.rsi/icon.png | Bin 0 -> 1104 bytes .../Entities/mirror_shield.rsi/meta.json | 85 ++ .../mirror_shield.rsi/mirror-inhand-left.png | Bin 0 -> 2435 bytes .../mirror_shield.rsi/mirror-inhand-right.png | Bin 0 -> 2543 bytes .../Entities/runic_metal.rsi/meta.json | 65 + .../Entities/runic_metal.rsi/runic.png | Bin 0 -> 1777 bytes .../Entities/runic_metal.rsi/runic_2.png | Bin 0 -> 1777 bytes .../Entities/runic_metal.rsi/runic_3.png | Bin 0 -> 1777 bytes .../Entities/shuttle_curse.rsi/icon-off.png | Bin 0 -> 422 bytes .../Entities/shuttle_curse.rsi/icon.png | Bin 0 -> 905 bytes .../Entities/shuttle_curse.rsi/meta.json | 24 + .../Entities/summoning_orb.rsi/icon.png | Bin 0 -> 1127 bytes .../Entities/summoning_orb.rsi/meta.json | 23 + .../Entities/veil_shifter.rsi/icon-on.png | Bin 0 -> 583 bytes .../Entities/veil_shifter.rsi/icon.png | Bin 0 -> 301 bytes .../Entities/veil_shifter.rsi/meta.json | 25 + .../Entities/void_torch.rsi/icon-on.png | Bin 0 -> 1338 bytes .../Entities/void_torch.rsi/icon.png | Bin 0 -> 246 bytes .../Entities/void_torch.rsi/meta.json | 27 + .../Entities/wetstone.rsi/cult_sharpener.png | Bin 0 -> 1157 bytes .../wetstone.rsi/cult_sharpener_used.png | Bin 0 -> 220 bytes .../BloodCult/Entities/wetstone.rsi/meta.json | 36 + .../Entities/wetstone.rsi/sharpener.png | Bin 0 -> 190 bytes .../Entities/wetstone.rsi/sharpener_used.png | Bin 0 -> 190 bytes .../Structures/blood_altar.rsi/icon-off.png | Bin 0 -> 383 bytes .../Structures/blood_altar.rsi/icon.png | Bin 0 -> 945 bytes .../Structures/blood_altar.rsi/meta.json | 27 + .../Structures/cult_airlock.rsi/assembly.png | Bin 0 -> 1313 bytes .../cult_airlock.rsi/bolted_open_unlit.png | Bin 0 -> 120 bytes .../cult_airlock.rsi/bolted_unlit.png | Bin 0 -> 298 bytes .../Structures/cult_airlock.rsi/closed.png | Bin 0 -> 1339 bytes .../cult_airlock.rsi/closed_unlit.png | Bin 0 -> 120 bytes .../Structures/cult_airlock.rsi/closing.png | Bin 0 -> 2850 bytes .../cult_airlock.rsi/closing_unlit.png | Bin 0 -> 946 bytes .../cult_airlock.rsi/deny_unlit.png | Bin 0 -> 675 bytes .../cult_airlock.rsi/emergency_open_unlit.png | Bin 0 -> 120 bytes .../cult_airlock.rsi/emergency_unlit.png | Bin 0 -> 312 bytes .../Structures/cult_airlock.rsi/meta.json | 197 +++ .../Structures/cult_airlock.rsi/open.png | Bin 0 -> 442 bytes .../cult_airlock.rsi/open_unlit.png | Bin 0 -> 120 bytes .../Structures/cult_airlock.rsi/opening.png | Bin 0 -> 2818 bytes .../cult_airlock.rsi/opening_unlit.png | Bin 0 -> 962 bytes .../cult_airlock.rsi/panel_closed.png | Bin 0 -> 328 bytes .../cult_airlock.rsi/panel_closing.png | Bin 0 -> 576 bytes .../cult_airlock.rsi/panel_open.png | Bin 0 -> 120 bytes .../cult_airlock.rsi/panel_opening.png | Bin 0 -> 617 bytes .../Structures/cult_airlock.rsi/sparks.png | Bin 0 -> 1154 bytes .../cult_airlock.rsi/sparks_broken.png | Bin 0 -> 448 bytes .../cult_airlock.rsi/sparks_damaged.png | Bin 0 -> 507 bytes .../cult_airlock.rsi/sparks_open.png | Bin 0 -> 420 bytes .../Structures/cult_airlock.rsi/welded.png | Bin 0 -> 356 bytes .../Structures/cult_girder.rsi/cultgirder.png | Bin 0 -> 657 bytes .../Structures/cult_girder.rsi/meta.json | 14 + .../Structures/forge.rsi/icon-off.png | Bin 0 -> 475 bytes .../BloodCult/Structures/forge.rsi/icon.png | Bin 0 -> 877 bytes .../BloodCult/Structures/forge.rsi/meta.json | 24 + .../BloodCult/Structures/pylon.rsi/meta.json | 33 + .../BloodCult/Structures/pylon.rsi/pylon.png | Bin 0 -> 851 bytes .../Structures/pylon.rsi/pylon_off.png | Bin 0 -> 354 bytes .../Structures/tome_altar.rsi/icon-off.png | Bin 0 -> 425 bytes .../Structures/tome_altar.rsi/icon.png | Bin 0 -> 758 bytes .../Structures/tome_altar.rsi/meta.json | 24 + .../BloodCult/Tiles/cult_tile.rsi/cult.png | Bin 0 -> 1786 bytes .../BloodCult/Tiles/cult_tile.rsi/meta.json | 14 + .../actions_cult.rsi/abyssal_gaze.png | Bin 0 -> 659 bytes .../actions_cult.rsi/areaconvert.png | Bin 0 -> 1249 bytes .../BloodCult/actions_cult.rsi/armor.png | Bin 0 -> 602 bytes .../BloodCult/actions_cult.rsi/artificer.png | Bin 0 -> 503 bytes .../BloodCult/actions_cult.rsi/back.png | Bin 0 -> 2177 bytes .../BloodCult/actions_cult.rsi/barrier.png | Bin 0 -> 619 bytes .../actions_cult.rsi/blood_barrage.png | Bin 0 -> 284 bytes .../actions_cult.rsi/blood_charge.png | Bin 0 -> 488 bytes .../actions_cult.rsi/blood_dagger.png | Bin 0 -> 531 bytes .../actions_cult.rsi/blood_rites.png | Bin 0 -> 819 bytes .../BloodCult/actions_cult.rsi/bloodspear.png | Bin 0 -> 756 bytes .../BloodCult/actions_cult.rsi/carve.png | Bin 0 -> 452 bytes .../BloodCult/actions_cult.rsi/cuff.png | Bin 0 -> 425 bytes .../BloodCult/actions_cult.rsi/cult_comms.png | Bin 0 -> 462 bytes .../BloodCult/actions_cult.rsi/cult_mark.png | Bin 0 -> 352 bytes .../BloodCult/actions_cult.rsi/cultfist.png | Bin 0 -> 963 bytes .../actions_cult.rsi/cultforcewall.png | Bin 0 -> 856 bytes .../BloodCult/actions_cult.rsi/cultvote.png | Bin 0 -> 455 bytes .../actions_cult.rsi/death_dagger.png | Bin 0 -> 567 bytes .../BloodCult/actions_cult.rsi/deathtome.png | Bin 0 -> 1398 bytes .../BloodCult/actions_cult.rsi/dominate.png | Bin 0 -> 1849 bytes .../BloodCult/actions_cult.rsi/draw.png | Bin 0 -> 500 bytes .../BloodCult/actions_cult.rsi/emp.png | Bin 0 -> 350 bytes .../BloodCult/actions_cult.rsi/equip.png | Bin 0 -> 854 bytes .../BloodCult/actions_cult.rsi/firetome.png | Bin 0 -> 667 bytes .../actions_cult.rsi/floorconstruct.png | Bin 0 -> 1546 bytes .../BloodCult/actions_cult.rsi/gone.png | Bin 0 -> 2025 bytes .../actions_cult.rsi/hell_dagger.png | Bin 0 -> 634 bytes .../BloodCult/actions_cult.rsi/helltome.png | Bin 0 -> 1071 bytes .../BloodCult/actions_cult.rsi/horror.png | Bin 0 -> 637 bytes .../actions_cult.rsi/lesserconstruct.png | Bin 0 -> 559 bytes .../BloodCult/actions_cult.rsi/manip.png | Bin 0 -> 582 bytes .../BloodCult/actions_cult.rsi/meta.json | 160 +++ .../BloodCult/actions_cult.rsi/phaseshift.png | Bin 0 -> 1378 bytes .../BloodCult/actions_cult.rsi/revealing.png | Bin 0 -> 400 bytes .../BloodCult/actions_cult.rsi/revive.png | Bin 0 -> 661 bytes .../BloodCult/actions_cult.rsi/shackles.png | Bin 0 -> 643 bytes .../BloodCult/actions_cult.rsi/sintouch.png | Bin 0 -> 874 bytes .../BloodCult/actions_cult.rsi/stun.png | Bin 0 -> 1428 bytes .../actions_cult.rsi/summonsoulstone.png | Bin 0 -> 410 bytes .../BloodCult/actions_cult.rsi/teleport.png | Bin 0 -> 405 bytes .../BloodCult/actions_cult.rsi/telerune.png | Bin 0 -> 670 bytes .../BloodCult/actions_cult.rsi/tome.png | Bin 0 -> 822 bytes .../BloodCult/actions_cult.rsi/transmute.png | Bin 0 -> 630 bytes .../BloodCult/actions_cult.rsi/veiling.png | Bin 0 -> 417 bytes .../BloodCult/apocalypse.rsi/apoc.png | Bin 0 -> 3358 bytes .../BloodCult/apocalypse.rsi/meta.json | 14 + .../BloodCult/blood_spear.rsi/icon.png | Bin 0 -> 441 bytes .../BloodCult/blood_spear.rsi/inhand-left.png | Bin 0 -> 556 bytes .../blood_spear.rsi/inhand-right.png | Bin 0 -> 553 bytes .../BloodCult/blood_spear.rsi/meta.json | 30 + .../blood_spear.rsi/wielded-inhand-left.png | Bin 0 -> 590 bytes .../blood_spear.rsi/wielded-inhand-right.png | Bin 0 -> 590 bytes .../_Sunrise/BloodCult/cult_hud.rsi/cult.png | Bin 0 -> 295 bytes .../BloodCult/cult_hud.rsi/cultmaster.png | Bin 0 -> 306 bytes .../_Sunrise/BloodCult/cult_hud.rsi/meta.json | 23 + .../equipped-BACKPACK.png | Bin 0 -> 907 bytes .../BloodCult/hammer_juggernaut.rsi/icon.png | Bin 0 -> 538 bytes .../hammer_juggernaut.rsi/inhand-left.png | Bin 0 -> 1204 bytes .../hammer_juggernaut.rsi/inhand-right.png | Bin 0 -> 1268 bytes .../BloodCult/hammer_juggernaut.rsi/meta.json | 26 + .../BloodCult/holy_flask.rsi/icon.png | Bin 0 -> 539 bytes .../BloodCult/holy_flask.rsi/meta.json | 13 + .../_Sunrise/BloodCult/interface.rsi/icon.png | Bin 0 -> 814 bytes .../BloodCult/interface.rsi/meta.json | 14 + .../_Sunrise/BloodCult/mobs.rsi/artificer.png | Bin 0 -> 2230 bytes .../_Sunrise/BloodCult/mobs.rsi/banshee.png | Bin 0 -> 1485 bytes .../_Sunrise/BloodCult/mobs.rsi/behemoth.png | Bin 0 -> 3936 bytes .../BloodCult/mobs.rsi/boneshaper.png | Bin 0 -> 2410 bytes .../BloodCult/mobs.rsi/envoy_of_death.png | Bin 0 -> 4383 bytes .../_Sunrise/BloodCult/mobs.rsi/floating.png | Bin 0 -> 5068 bytes .../BloodCult/mobs.rsi/ghost-narsie.png | Bin 0 -> 3407 bytes .../_Sunrise/BloodCult/mobs.rsi/golem.png | Bin 0 -> 2152 bytes .../_Sunrise/BloodCult/mobs.rsi/harvester.png | Bin 0 -> 3021 bytes .../BloodCult/mobs.rsi/hell_knight.png | Bin 0 -> 3559 bytes .../_Sunrise/BloodCult/mobs.rsi/ifrit.png | Bin 0 -> 11877 bytes .../mobs.rsi/incarnation_of_pain.png | Bin 0 -> 3160 bytes .../BloodCult/mobs.rsi/infernal_rift_in.png | Bin 0 -> 17953 bytes .../BloodCult/mobs.rsi/infernal_rift_out.png | Bin 0 -> 2290 bytes .../_Sunrise/BloodCult/mobs.rsi/lost_soul.png | Bin 0 -> 2394 bytes .../_Sunrise/BloodCult/mobs.rsi/meta.json | 632 +++++++++ .../BloodCult/mobs.rsi/necrophage.png | Bin 0 -> 4747 bytes .../BloodCult/mobs.rsi/phase_shift.png | Bin 0 -> 23609 bytes .../BloodCult/mobs.rsi/phase_shift2.png | Bin 0 -> 23600 bytes .../_Sunrise/BloodCult/mobs.rsi/shade.png | Bin 0 -> 662 bytes .../_Sunrise/BloodCult/mobs.rsi/shade2.png | Bin 0 -> 1764 bytes .../BloodCult/mobs.rsi/shade_angelic.png | Bin 0 -> 677 bytes .../BloodCult/mobs.rsi/shade_dead.png | Bin 0 -> 234 bytes .../BloodCult/mobs.rsi/shadowstep_in.png | Bin 0 -> 9212 bytes .../BloodCult/mobs.rsi/shadowstep_out.png | Bin 0 -> 9190 bytes .../_Sunrise/BloodCult/mobs.rsi/summoner.png | Bin 0 -> 3819 bytes .../_Sunrise/BloodCult/narsie.rsi/meta.json | 57 + .../_Sunrise/BloodCult/narsie.rsi/narsie.png | Bin 0 -> 114966 bytes .../narsie.rsi/narsie_spawn_anim.png | Bin 0 -> 274429 bytes .../BloodCult/pentagram.rsi/halo1.png | Bin 0 -> 8253 bytes .../BloodCult/pentagram.rsi/halo2.png | Bin 0 -> 8179 bytes .../BloodCult/pentagram.rsi/halo3.png | Bin 0 -> 8275 bytes .../BloodCult/pentagram.rsi/halo4.png | Bin 0 -> 8199 bytes .../BloodCult/pentagram.rsi/halo5.png | Bin 0 -> 8201 bytes .../BloodCult/pentagram.rsi/halo6.png | Bin 0 -> 8275 bytes .../BloodCult/pentagram.rsi/meta.json | 419 ++++++ .../_Sunrise/BloodCult/rune.rsi/barrier.png | Bin 0 -> 669 bytes .../BloodCult/rune.rsi/blood_boil.png | Bin 0 -> 616 bytes .../_Sunrise/BloodCult/rune.rsi/empower.png | Bin 0 -> 655 bytes .../_Sunrise/BloodCult/rune.rsi/meta.json | 35 + .../_Sunrise/BloodCult/rune.rsi/offering.png | Bin 0 -> 625 bytes .../_Sunrise/BloodCult/rune.rsi/revive.png | Bin 0 -> 632 bytes .../BloodCult/rune.rsi/spirit_realm.png | Bin 0 -> 683 bytes .../_Sunrise/BloodCult/rune.rsi/summon.png | Bin 0 -> 637 bytes .../_Sunrise/BloodCult/rune.rsi/teleport.png | Bin 0 -> 646 bytes .../BloodCult/soulstone.rsi/meta.json | 24 + .../BloodCult/soulstone.rsi/soulstone.png | Bin 0 -> 346 bytes .../BloodCult/soulstone.rsi/soulstone2.png | Bin 0 -> 815 bytes .../_Sunrise/BloodCult/stuff.rsi/altar.png | Bin 0 -> 3135 bytes .../BloodCult/stuff.rsi/altar_off.png | Bin 0 -> 1278 bytes .../_Sunrise/BloodCult/stuff.rsi/amulet.png | Bin 0 -> 941 bytes .../_Sunrise/BloodCult/stuff.rsi/archives.png | Bin 0 -> 2400 bytes .../BloodCult/stuff.rsi/archives_off.png | Bin 0 -> 1682 bytes .../BloodCult/stuff.rsi/blood_blade.png | Bin 0 -> 511 bytes .../BloodCult/stuff.rsi/blood_dagger.png | Bin 0 -> 531 bytes .../BloodCult/stuff.rsi/bloodspear0.png | Bin 0 -> 441 bytes .../BloodCult/stuff.rsi/bloodspear1.png | Bin 0 -> 441 bytes .../BloodCult/stuff.rsi/cultgirder.png | Bin 0 -> 657 bytes .../BloodCult/stuff.rsi/cultstone.png | Bin 0 -> 453 bytes .../BloodCult/stuff.rsi/death_blade.png | Bin 0 -> 553 bytes .../BloodCult/stuff.rsi/death_dagger.png | Bin 0 -> 567 bytes .../_Sunrise/BloodCult/stuff.rsi/forge.png | Bin 0 -> 2486 bytes .../BloodCult/stuff.rsi/forge_off.png | Bin 0 -> 1625 bytes .../BloodCult/stuff.rsi/hell_altar.png | Bin 0 -> 3490 bytes .../BloodCult/stuff.rsi/hell_altar_off.png | Bin 0 -> 813 bytes .../BloodCult/stuff.rsi/hell_archives.png | Bin 0 -> 2431 bytes .../BloodCult/stuff.rsi/hell_archives_off.png | Bin 0 -> 1135 bytes .../BloodCult/stuff.rsi/hell_blade.png | Bin 0 -> 852 bytes .../BloodCult/stuff.rsi/hell_dagger.png | Bin 0 -> 634 bytes .../BloodCult/stuff.rsi/hell_forge.png | Bin 0 -> 2976 bytes .../BloodCult/stuff.rsi/hell_forge_off.png | Bin 0 -> 1244 bytes .../BloodCult/stuff.rsi/hell_girder.png | Bin 0 -> 1284 bytes .../BloodCult/stuff.rsi/hell_pylon.png | Bin 0 -> 2175 bytes .../BloodCult/stuff.rsi/hell_pylon_off.png | Bin 0 -> 421 bytes .../_Sunrise/BloodCult/stuff.rsi/hole.png | Bin 0 -> 3169 bytes .../_Sunrise/BloodCult/stuff.rsi/meta.json | 295 ++++ .../BloodCult/stuff.rsi/mirror_shield.png | Bin 0 -> 1104 bytes .../_Sunrise/BloodCult/stuff.rsi/pylon.png | Bin 0 -> 2464 bytes .../BloodCult/stuff.rsi/pylon_off.png | Bin 0 -> 520 bytes .../BloodCult/stuff.rsi/reaper_altar.png | Bin 0 -> 1091 bytes .../BloodCult/stuff.rsi/reaper_altar_off.png | Bin 0 -> 1023 bytes .../BloodCult/stuff.rsi/reaper_archives.png | Bin 0 -> 2084 bytes .../stuff.rsi/reaper_archives_off.png | Bin 0 -> 1398 bytes .../BloodCult/stuff.rsi/reaper_cultgirder.png | Bin 0 -> 658 bytes .../BloodCult/stuff.rsi/reaper_forge.png | Bin 0 -> 2784 bytes .../BloodCult/stuff.rsi/reaper_forge_off.png | Bin 0 -> 1090 bytes .../BloodCult/stuff.rsi/reaper_pylon.png | Bin 0 -> 2064 bytes .../BloodCult/stuff.rsi/reaper_pylon_off.png | Bin 0 -> 673 bytes .../_Sunrise/BloodCult/stuff.rsi/shifter.png | Bin 0 -> 583 bytes .../BloodCult/stuff.rsi/shifter_drained.png | Bin 0 -> 301 bytes .../BloodCult/stuff.rsi/shuttlecurse.png | Bin 0 -> 905 bytes .../BloodCult/stuff.rsi/summoning_orb.png | Bin 0 -> 1127 bytes .../_Sunrise/BloodCult/suka.rsi/bullet.png | Bin 0 -> 919 bytes .../_Sunrise/BloodCult/suka.rsi/meta.json | 21 + 472 files changed, 13489 insertions(+), 22 deletions(-) create mode 100644 Content.Client/_Sunrise/BloodCult/CultPentagramSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualizerSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualsComponent.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualizerSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualsComponent.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Narsie/NarsieLayer.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Narsie/NarsieVisualizer.cs create mode 100644 Content.Client/_Sunrise/BloodCult/PentagramComponent.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualizerSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualsComponent.cs create mode 100644 Content.Client/_Sunrise/BloodCult/ShowCultHudSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualizerSystem.cs create mode 100644 Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualsComponent.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Altar/AltarBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/BloodSpellSelector/BloodSpellSelectorBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/ConstructSelector/ConstructSelectorBui.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/CultistFactory/CultistFactoryBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/ListViewSelector/ListViewSelectorBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/ListViewSelector/ListViewSelectorWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/ListViewSelector/ListViewSelectorWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/NameSelector/NameSelectorBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/NameSelector/NameSelectorWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/NameSelector/NameSelectorWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/SpellSelector/SpellSelectorBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/StructureRadial/StructureCraftBoundUserInterface.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/SummonCultistList/SummonCultistListWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/SummonCultistList/SummonCultistListWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/SummonCultistList/SummonCultistListWindowBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/TeleportRunesList/TeleportRunesListWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/TeleportRunesList/TeleportRunesListWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/TeleportRunesList/TeleportRunesListWindowBUI.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/TeleportSpell/TeleportSpellEui.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Torch/TorchWindow.xaml create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Torch/TorchWindow.xaml.cs create mode 100644 Content.Client/_Sunrise/BloodCult/UI/Torch/TorchWindowBUI.cs create mode 100644 Content.Server/_Sunrise/BecomeDustOnDeathSystem/BecomeDustOnDeathComponent.cs create mode 100644 Content.Server/_Sunrise/BecomeDustOnDeathSystem/BecomeDustOnDeathSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/ConstructComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/CultistRoleComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/GameRule/BloodCultRuleSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/HolyWater/BibleWaterConvertComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/HolyWater/DeconvertCultist.cs create mode 100644 Content.Server/_Sunrise/BloodCult/HolyWater/HolyWaterSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Components/CultRobeModifierComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Components/ReturnItemOnThrowComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Components/ShuttleCurseComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Components/TorchCultistsProviderComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/CultBloodSpearSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/CultBloodSpellSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/CultRobeModifierSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/CultSpellProviderSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/CultWeaponSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/ReturnItemOnThrowSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/ShuttleCurseSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/TorchCultistsProviderSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Items/Systems/VoidTeleportSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Juggernaut/JaggernautComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Juggernaut/JuggernautSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Objectives/Components/KillCultistTargetConditionComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Objectives/Systems/KillCultistTargetConditionSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/PentagramComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Pylon/PylonSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultBarrierComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneApocalypseComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneBarrierComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneBaseComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneBloodBoilComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneBuffComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneOfferingComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneReviveComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneSummoningComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneSummoningProviderComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultRuneTeleportComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/CultTeleportRuneProviderComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/RuneDrawerProviderComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Comps/SoulShardComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Actions.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Barrier.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Buff.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Constructs.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.ConstructsAbilities.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Narsie.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.Rune.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.SoulShard.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Runes/Systems/BloodCultSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/CultStructureCraftSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/RunicDoorComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/RunicDoorSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/RunicGirderComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/RunicGirderSystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/Structures/RunicMetalComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/TimedProduction/CultistFactoryComponent.cs create mode 100644 Content.Server/_Sunrise/BloodCult/TimedProduction/CultistFactorySystem.cs create mode 100644 Content.Server/_Sunrise/BloodCult/UI/TeleportSpellEui.cs create mode 100644 Content.Server/_Sunrise/IncorporealSystem/IncorporealComponent.cs create mode 100644 Content.Server/_Sunrise/IncorporealSystem/IncorporealSystem.cs create mode 100644 Content.Server/_Sunrise/SharpeningSystem/SharpenerComponent.cs create mode 100644 Content.Server/_Sunrise/SharpeningSystem/SharpeningSystem.cs create mode 100644 Content.Shared/Body/Events/BodyInitEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Actions/CultActions.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Actions/CultMagicBloodEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/BloodCultistComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/BloodSpearOwnerComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/ConstructShellComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/CultBuffComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/CultEmpowerComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Components/CultMemberComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/ConstructsEvents.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/CultistFactoryProductionPrototype.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/CultBloodOrbComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/CultBloodSpearComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/CultBloodSpellComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/CultSpellProviderComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/CultWeaponComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/SharedSoulShard.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/TorchWindowSerializables.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Items/VoidTeleportComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Pentagram/SharedPentagramComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Pylon/SharedPylonComponent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Runes/CultDrawEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Runes/CultEraseEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Runes/CultRuneInvokeEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Runes/SummonNarsieDoAfterEvent.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/SharedNarsie.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Structures/CultStructurePrototype.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Structures/CultStructureSerializables.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Systems/CultMemberSystem.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Systems/CultistSystem.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/Systems/CultistWordGeneratorManager.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/AltarBUIState.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/ConstructUi.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/CultistFactoryBUIState.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/ListViewSelectorBUIState.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/NameSelector.cs create mode 100644 Content.Shared/_Sunrise/BloodCult/UI/TeleportSpellEuiState.cs create mode 100644 Resources/Audio/_Sunrise/BloodCult/40sec.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/blood.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/blood_cult_greeting.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/butcher.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/curse.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/enter_blood.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/finisheddraw.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/magic.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/narsie_summoned.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/startdraw.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/veilin.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/veilout.ogg create mode 100644 Resources/Audio/_Sunrise/BloodCult/wraith_phase.ogg create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/abilities.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/admin-verb.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/antags.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/archives.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/construct.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/constructs.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/cult-structure.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/cult.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/cultist-factory.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/effects.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/holy-water.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/preset-cult.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/pylon.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/reagents.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/runes-entities.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/shuttle-curse.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/tile.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/veil-shifter.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/void-torch.ftl create mode 100644 Resources/Locale/ru-RU/_strings/_sunrise/blood-cult/weapon.ftl create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Actions/constuct_actions.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Actions/cult_actions.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Construction/Cult/graphs.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Construction/Cult/structures.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Altars/cult_altars.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Effects/effects.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Effects/shield.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/altar_craft.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/blood_magic.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/bola.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/cuff.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/forge_craft.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/projectiles.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/soul_shard.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/tome_craft.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Items/weapon.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/Runes/cult_runes.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/antag.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/constructs.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/drinks_flask.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/other_structures.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Entities/Cult/weapon.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Object/wetstone.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/Tiles/cult.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/alerts.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/bodies.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/faction_icon.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/game_presets.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/mind_roles.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/narsie.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/objectivies.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/reagents.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/roundstart.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/tags.yml create mode 100644 Resources/Prototypes/_Sunrise/BloodCult/tool_qualities.yml create mode 100644 Resources/Textures/_Sunrise/BloodCult/Alerts/buff.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/airlock_glow.rsi/doorglow.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/airlock_glow.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/cult_inout.rsi/cultin.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/cult_inout.rsi/cultout.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/cult_inout.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/shield.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/shield.rsi/shield-cult.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/tiles_spawn.rsi/floorglow.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/tiles_spawn.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/wall_glow.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Effects/wall_glow.rsi/wallglow.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/blood_magic.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/blood_magic.rsi/inhand-left.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/blood_magic.rsi/inhand-right.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/blood_magic.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/construct_cult.rsi/construct_cult.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/construct_cult.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/mirror_shield.rsi/icon-off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/mirror_shield.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/mirror_shield.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/mirror_shield.rsi/mirror-inhand-left.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/mirror_shield.rsi/mirror-inhand-right.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/runic_metal.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/runic_metal.rsi/runic.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/runic_metal.rsi/runic_2.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/runic_metal.rsi/runic_3.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/shuttle_curse.rsi/icon-off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/shuttle_curse.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/shuttle_curse.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/summoning_orb.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/summoning_orb.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/veil_shifter.rsi/icon-on.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/veil_shifter.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/veil_shifter.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/void_torch.rsi/icon-on.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/void_torch.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/void_torch.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/wetstone.rsi/cult_sharpener.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/wetstone.rsi/cult_sharpener_used.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/wetstone.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/wetstone.rsi/sharpener.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Entities/wetstone.rsi/sharpener_used.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/blood_altar.rsi/icon-off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/blood_altar.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/blood_altar.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/assembly.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/bolted_open_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/bolted_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/closed.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/closed_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/closing.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/closing_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/deny_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/emergency_open_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/emergency_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/open.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/open_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/opening.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/opening_unlit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/panel_closed.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/panel_closing.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/panel_open.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/panel_opening.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/sparks.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/sparks_broken.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/sparks_damaged.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/sparks_open.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_airlock.rsi/welded.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_girder.rsi/cultgirder.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/cult_girder.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/forge.rsi/icon-off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/forge.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/forge.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/pylon.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/pylon.rsi/pylon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/pylon.rsi/pylon_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/tome_altar.rsi/icon-off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/tome_altar.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Structures/tome_altar.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/Tiles/cult_tile.rsi/cult.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/Tiles/cult_tile.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/abyssal_gaze.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/areaconvert.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/armor.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/artificer.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/back.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/barrier.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/blood_barrage.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/blood_charge.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/blood_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/blood_rites.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/bloodspear.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/carve.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cuff.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cult_comms.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cult_mark.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cultfist.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cultforcewall.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/cultvote.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/death_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/deathtome.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/dominate.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/draw.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/emp.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/equip.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/firetome.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/floorconstruct.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/gone.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/hell_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/helltome.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/horror.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/lesserconstruct.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/manip.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/phaseshift.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/revealing.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/revive.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/shackles.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/sintouch.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/stun.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/summonsoulstone.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/teleport.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/telerune.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/tome.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/transmute.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/actions_cult.rsi/veiling.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/apocalypse.rsi/apoc.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/apocalypse.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/inhand-left.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/inhand-right.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/wielded-inhand-left.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/blood_spear.rsi/wielded-inhand-right.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/cult_hud.rsi/cult.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/cult_hud.rsi/cultmaster.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/cult_hud.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/hammer_juggernaut.rsi/equipped-BACKPACK.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/hammer_juggernaut.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/hammer_juggernaut.rsi/inhand-left.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/hammer_juggernaut.rsi/inhand-right.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/hammer_juggernaut.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/holy_flask.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/holy_flask.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/interface.rsi/icon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/interface.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/artificer.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/banshee.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/behemoth.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/boneshaper.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/envoy_of_death.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/floating.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/ghost-narsie.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/golem.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/harvester.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/hell_knight.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/ifrit.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/incarnation_of_pain.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/infernal_rift_in.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/infernal_rift_out.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/lost_soul.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/necrophage.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/phase_shift.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/phase_shift2.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shade.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shade2.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shade_angelic.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shade_dead.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shadowstep_in.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/shadowstep_out.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/mobs.rsi/summoner.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/narsie.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/narsie.rsi/narsie.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/narsie.rsi/narsie_spawn_anim.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo1.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo2.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo3.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo4.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo5.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/halo6.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/pentagram.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/barrier.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/blood_boil.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/empower.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/offering.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/revive.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/spirit_realm.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/summon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/rune.rsi/teleport.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/soulstone.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/soulstone.rsi/soulstone.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/soulstone.rsi/soulstone2.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/altar.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/altar_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/amulet.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/archives.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/archives_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/blood_blade.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/blood_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/bloodspear0.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/bloodspear1.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/cultgirder.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/cultstone.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/death_blade.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/death_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/forge.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/forge_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_altar.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_altar_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_archives.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_archives_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_blade.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_dagger.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_forge.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_forge_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_girder.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_pylon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hell_pylon_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/hole.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/meta.json create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/mirror_shield.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/pylon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/pylon_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_altar.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_altar_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_archives.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_archives_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_cultgirder.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_forge.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_forge_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_pylon.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/reaper_pylon_off.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/shifter.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/shifter_drained.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/shuttlecurse.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/stuff.rsi/summoning_orb.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/suka.rsi/bullet.png create mode 100644 Resources/Textures/_Sunrise/BloodCult/suka.rsi/meta.json diff --git a/Content.Client/UserInterface/Controls/RadialMenu.cs b/Content.Client/UserInterface/Controls/RadialMenu.cs index 5f56ad7f866..bbe3c0e1e35 100644 --- a/Content.Client/UserInterface/Controls/RadialMenu.cs +++ b/Content.Client/UserInterface/Controls/RadialMenu.cs @@ -3,6 +3,7 @@ using Robust.Client.UserInterface.CustomControls; using System.Linq; using System.Numerics; +using Robust.Client.Graphics; namespace Content.Client.UserInterface.Controls; @@ -16,7 +17,7 @@ public class RadialMenu : BaseWindow /// /// Set a style class to be applied to the contextual button when it is set to move the user back through previous layers of the radial menu - /// + /// public string? BackButtonStyleClass { get @@ -60,8 +61,8 @@ public string? CloseButtonStyleClass /// A free floating menu which enables the quick display of one or more radial containers /// /// - /// Only one radial container is visible at a time (each container forming a separate 'layer' within - /// the menu), along with a contextual button at the menu center, which will either return the user + /// Only one radial container is visible at a time (each container forming a separate 'layer' within + /// the menu), along with a contextual button at the menu center, which will either return the user /// to the previous layer or close the menu if there are no previous layers left to traverse. /// To create a functional radial menu, simply parent one or more named radial containers to it, /// and populate the radial containers with RadialMenuButtons. Setting the TargetLayer field of these diff --git a/Content.Client/_Sunrise/BloodCult/CultPentagramSystem.cs b/Content.Client/_Sunrise/BloodCult/CultPentagramSystem.cs new file mode 100644 index 00000000000..61442b9fb95 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/CultPentagramSystem.cs @@ -0,0 +1,65 @@ +using System.Numerics; +using Robust.Client.GameObjects; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Client._Sunrise.BloodCult; + +public sealed class CultPentagramSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _robustRandom = default!; + + private const string Rsi = "_Sunrise/BloodCult/pentagram.rsi"; + private static readonly string[] States = + { + "halo1", + "halo2", + "halo3", + "halo4", + "halo5", + "halo6" + }; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(PentagramAdded); + SubscribeLocalEvent(PentagramRemoved); + } + + private void PentagramAdded(EntityUid uid, PentagramComponent component, ComponentStartup args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (sprite.LayerMapTryGet(PentagramKey.Key, out var _)) + return; + + var adj = sprite.Bounds.Height / 2 + ((1.0f/32) * 10.0f); + + var randomIndex = _robustRandom.Next(0, States.Length); + + var randomState = States[randomIndex]; + + var layer = sprite.AddLayer(new SpriteSpecifier.Rsi(new ResPath(Rsi), randomState)); + + sprite.LayerMapSet(PentagramKey.Key, layer); + sprite.LayerSetOffset(layer, new Vector2(0.0f, adj)); + } + + private void PentagramRemoved(EntityUid uid, PentagramComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (!sprite.LayerMapTryGet(PentagramKey.Key, out var layer)) + return; + + sprite.RemoveLayer(layer); + } + + private enum PentagramKey + { + Key + } +} diff --git a/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualizerSystem.cs b/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualizerSystem.cs new file mode 100644 index 00000000000..1d98e6e9de1 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualizerSystem.cs @@ -0,0 +1,40 @@ +using Content.Shared._Sunrise.BloodCult.Items; +using Robust.Client.GameObjects; + +namespace Content.Client._Sunrise.BloodCult.Items.VeilShifter; + +public sealed class VeilVisualizerSystem : VisualizerSystem +{ + private const string StateOn = "icon-on"; + private const string StateOff = "icon"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, VoidTeleportComponent component, ComponentInit args) + { + if (!TryComp(uid, out var sprite) + || !AppearanceSystem.TryGetData(uid, VeilVisuals.Activated, out var activated)) + return; + + sprite.LayerSetState(VeilVisualsLayers.Activated, activated ? StateOn : StateOff); + } + + protected override void OnAppearanceChange(EntityUid uid, VeilVisualsComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, VeilVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(VeilVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum VeilVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualsComponent.cs b/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualsComponent.cs new file mode 100644 index 00000000000..bad151df58a --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Items/VeilShifter/VeilVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._Sunrise.BloodCult.Items.VeilShifter; + +[RegisterComponent] +public sealed partial class VeilVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon-on"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon"; +} diff --git a/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualizerSystem.cs b/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualizerSystem.cs new file mode 100644 index 00000000000..0d61250eb48 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualizerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared._Sunrise.BloodCult.Items; +using Robust.Client.GameObjects; + +namespace Content.Client._Sunrise.BloodCult.Items.VoidTorch; + +public sealed class VoidTorchVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, VoidTorchVisualsComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, VoidTorchVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(VoidTorchVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum VoidTorchVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualsComponent.cs b/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualsComponent.cs new file mode 100644 index 00000000000..add595d2b36 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Items/VoidTorch/VoidTorchVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._Sunrise.BloodCult.Items.VoidTorch; + +[RegisterComponent] +public sealed partial class VoidTorchVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon-on"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon"; +} diff --git a/Content.Client/_Sunrise/BloodCult/Narsie/NarsieLayer.cs b/Content.Client/_Sunrise/BloodCult/Narsie/NarsieLayer.cs new file mode 100644 index 00000000000..86f10f081a7 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Narsie/NarsieLayer.cs @@ -0,0 +1,6 @@ +namespace Content.Client._Sunrise.BloodCult.Narsie; + +public enum NarsieLayer +{ + Default +} diff --git a/Content.Client/_Sunrise/BloodCult/Narsie/NarsieVisualizer.cs b/Content.Client/_Sunrise/BloodCult/Narsie/NarsieVisualizer.cs new file mode 100644 index 00000000000..a5c51bb0930 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Narsie/NarsieVisualizer.cs @@ -0,0 +1,69 @@ +using Content.Shared._Sunrise.BloodCult; +using Robust.Client.Animations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; + +namespace Content.Client._Sunrise.BloodCult.Narsie; + +public sealed class NarsieVisualizer : VisualizerSystem +{ + [Dependency] private readonly AnimationPlayerSystem _animationSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAnimationCompleted); + } + + private void OnAnimationCompleted(EntityUid uid, NarsieComponent component, AnimationCompletedEvent args) + { + SetDefaultState(Comp(uid)); + } + + protected override void OnAppearanceChange(EntityUid uid, NarsieComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if(args.Sprite == null) return; + + if (!args.AppearanceData.TryGetValue(NarsieVisualState.VisualState, out var narsieVisualsObject) || narsieVisualsObject is not NarsieVisuals narsieVisual) + return; + + switch (narsieVisual) + { + case NarsieVisuals.Spawning: + PlaySpawnAnimation(uid); + break; + case NarsieVisuals.Spawned: + if(_animationSystem.HasRunningAnimation(uid, "narsie_spawn")) break; + SetDefaultState(args.Sprite); + break; + } + + } + + private void PlaySpawnAnimation(EntityUid uid) + { + _animationSystem.Play(uid, NarsieSpawnAnimation, "narsie_spawn"); + } + + private void SetDefaultState(SpriteComponent component) + { + component.LayerSetVisible(NarsieLayer.Default, true); + component.LayerSetState(NarsieLayer.Default, new RSI.StateId("narsie")); + component.LayerSetAutoAnimated(NarsieLayer.Default, true); + } + + private static readonly Animation NarsieSpawnAnimation = new() + { + Length = TimeSpan.FromSeconds(3.5), + AnimationTracks = + { + new AnimationTrackSpriteFlick() + { + LayerKey = NarsieLayer.Default, + KeyFrames = {new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("narsie_spawn_anim"), 0f)} + } + } + }; +} diff --git a/Content.Client/_Sunrise/BloodCult/PentagramComponent.cs b/Content.Client/_Sunrise/BloodCult/PentagramComponent.cs new file mode 100644 index 00000000000..37579a0578a --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/PentagramComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared._Sunrise.BloodCult.Pentagram; +using Robust.Shared.GameStates; + +namespace Content.Client._Sunrise.BloodCult; + +[NetworkedComponent, RegisterComponent] +public sealed partial class PentagramComponent : SharedPentagramComponent +{ +} diff --git a/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualizerSystem.cs b/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualizerSystem.cs new file mode 100644 index 00000000000..d787bccd5a2 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualizerSystem.cs @@ -0,0 +1,41 @@ +using Content.Shared._Sunrise.BloodCult.Pylon; +using Robust.Client.GameObjects; +using SharedPylonComponent = Content.Shared._Sunrise.BloodCult.Pylon.SharedPylonComponent; + +namespace Content.Client._Sunrise.BloodCult.Pylon; + +public sealed class PylonVisualizerSystem : VisualizerSystem +{ + private const string StateOn = "pylon"; + private const string StateOff = "pylon_off"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, SharedPylonComponent component, ComponentInit args) + { + if (!TryComp(uid, out var sprite) + || !AppearanceSystem.TryGetData(uid, PylonVisualsLayers.Activated, out var activated)) + return; + + sprite.LayerSetState(PylonVisualsLayers.Activated, activated ? StateOn : StateOff); + } + + protected override void OnAppearanceChange(EntityUid uid, PylonVisualsComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, PylonVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(PylonVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum PylonVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualsComponent.cs b/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualsComponent.cs new file mode 100644 index 00000000000..f5c63e906c9 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Pylon/PylonVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._Sunrise.BloodCult.Pylon; + +[RegisterComponent] +public sealed partial class PylonVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "pylon"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "pylon_off"; +} diff --git a/Content.Client/_Sunrise/BloodCult/ShowCultHudSystem.cs b/Content.Client/_Sunrise/BloodCult/ShowCultHudSystem.cs new file mode 100644 index 00000000000..47745109ca8 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/ShowCultHudSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared._Sunrise.BloodCult.Components; +using Content.Shared.StatusIcon.Components; +using Robust.Client.Player; +using Robust.Shared.Prototypes; + +namespace Content.Client._Sunrise.BloodCult; +public sealed class ShowCultHudSystem : EntitySystem +{ + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetStatusIconsEvent); + } + + private void OnGetStatusIconsEvent(EntityUid uid, BloodCultistComponent bloodCultistComponent, ref GetStatusIconsEvent args) + { + var ent = _player.LocalSession?.AttachedEntity; + if (!HasComp(ent)) + return; + + if (_prototype.TryIndex(bloodCultistComponent.StatusIcon, out var iconPrototype)) + args.StatusIcons.Add(iconPrototype); + } +} + diff --git a/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualizerSystem.cs b/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualizerSystem.cs new file mode 100644 index 00000000000..f22cccc4fd2 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualizerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared._Sunrise.BloodCult; +using Robust.Client.GameObjects; + +namespace Content.Client._Sunrise.BloodCult.Structures; + +public sealed class CultCraftStructureVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, CultCraftStructureVisualsComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, CultCraftStructureVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(CultCraftStructureVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum CultCraftStructureVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualsComponent.cs b/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualsComponent.cs new file mode 100644 index 00000000000..26368afbd75 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/Structures/CultCraftStructureVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._Sunrise.BloodCult.Structures; + +[RegisterComponent] +public sealed partial class CultCraftStructureVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon-off"; +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarBUI.cs b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarBUI.cs new file mode 100644 index 00000000000..5c701673cc4 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarBUI.cs @@ -0,0 +1,53 @@ +using Content.Shared._Sunrise.BloodCult.UI; +using JetBrains.Annotations; + +namespace Content.Client._Sunrise.BloodCult.UI.Altar; + +[UsedImplicitly] +public sealed class AltarBUI : BoundUserInterface +{ + private AltarWindow? _window; + + public AltarBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = new AltarWindow(); + + _window.OnClose += Close; + _window.OnItemSelected += OnItemSelected; + } + + private void OnItemSelected(string item) + { + var evt = new AltarBuyRequest(item); + SendMessage(evt); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + _window?.Dispose(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is AltarListingBUIState listingState) + { + _window?.SetListing(listingState.Items); + } + else if(state is AltarTimerBUIState timerState) + { + _window?.SetTimer(timerState.NextTimeUse); + } + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml new file mode 100644 index 00000000000..04353875206 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml.cs b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml.cs new file mode 100644 index 00000000000..56a9be69c1b --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarListingControl.xaml.cs @@ -0,0 +1,20 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client._Sunrise.BloodCult.UI.Altar; + +[GenerateTypedNameReferences] +public partial class AltarListingControl : Control +{ + public AltarListingControl(EntityPrototype prototype, Robust.Client.Graphics.Texture icon, Action? clickAction) + { + RobustXamlLoader.Load(this); + + ToolTip = $"{prototype.Name}\n{prototype.Description}"; + + BuyListingButton.TextureNormal = icon; + BuyListingButton.OnButtonDown += _ => clickAction?.Invoke(prototype.ID); + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml new file mode 100644 index 00000000000..715cfdfd930 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml @@ -0,0 +1,7 @@ + + + + + diff --git a/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml.cs b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml.cs new file mode 100644 index 00000000000..4b20e55faa2 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/Altar/AltarWindow.xaml.cs @@ -0,0 +1,89 @@ +using Content.Client.TextScreen; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Client._Sunrise.BloodCult.UI.Altar; + +[GenerateTypedNameReferences] +public partial class AltarWindow : DefaultWindow +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly SpriteSystem _spriteSystem = default!; + [Dependency] private readonly PrototypeManager _prototypeManager = default!; + + + public event Action? OnItemSelected; + private TimeSpan? _nextTimeUse = null!; + + private List _listingControls = new(); + + public AltarWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + if (_nextTimeUse == null) return; + + var remainingTime = _nextTimeUse.Value - _gameTiming.CurTime; + + if (remainingTime.TotalSeconds < 0) + { + remainingTime = TimeSpan.Zero; + } + + var remainingTimeText = TextScreenSystem.TimeToString(remainingTime); + + TimerLabel.SetMessage(remainingTimeText); + } + + public void SetListing(List prototypes) + { + foreach (var prototypeId in prototypes) + { + var prototype = _prototypeManager.Index(prototypeId); + if(prototype == null) return; + var prototypeIcon = _spriteSystem.GetPrototypeIcon(prototype).Default; + AddListingControl(prototype); + } + } + + public void AddListingControl(EntityPrototype entityPrototype) + { + var icon = _spriteSystem.GetPrototypeIcon(entityPrototype).Default; + var control = new AltarListingControl(entityPrototype, icon, OnItemSelected); + + ListingContainer.AddChild(control); + _listingControls.Add(control); + } + + public void SetTimer(TimeSpan? timer) + { + _nextTimeUse = timer; + + if (timer == null) + { + TimerLabel.SetMessage("Алтарь готов к использованию"); + SetListingButtonsState(true); + return; + } + + SetListingButtonsState(false); + } + + private void SetListingButtonsState(bool enabled) + { + foreach (var listingControl in _listingControls) + { + listingControl.BuyListingButton.Disabled = enabled; + } + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml b/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml new file mode 100644 index 00000000000..d56fc832898 --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml.cs b/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml.cs new file mode 100644 index 00000000000..8440f7fdcfc --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/BloodCultMenu.xaml.cs @@ -0,0 +1,70 @@ +using System.Numerics; +using Content.Client.UserInterface.Controls; +using Content.Shared.Chat.Prototypes; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client._Sunrise.BloodCult.UI; + +[GenerateTypedNameReferences] +public sealed partial class BloodCultMenu : RadialMenu +{ + [Dependency] private readonly EntityManager _entManager = default!; + + private EntityUid _owner; + + public BloodCultMenu() + { + IoCManager.InjectDependencies(this); + RobustXamlLoader.Load(this); + } + + public void SetEntity(EntityUid uid) + { + _owner = uid; + + if (!_entManager.EntityExists(_owner)) + { + Close(); + return; + } + } + + public RadialMenuTextureButton AddButton(string tooltip, Robust.Client.Graphics.Texture texture) + { + var button = new RadialMenuTextureButton() + { + StyleClasses = { "RadialMenuButton" }, + SetSize = new Vector2(64f, 64f), + ToolTip = tooltip, + }; + var scale = Vector2.One; + + if (texture.Width <= 32) + { + scale *= 2; + } + + var tex = new TextureRect + { + VerticalAlignment = VAlignment.Center, + HorizontalAlignment = HAlignment.Center, + Texture = texture, + TextureScale = scale, + }; + + button.AddChild(tex); + var main = FindControl("Main"); + main.AddChild(button); + + return button; + } +} + + +public sealed class EmoteMenuButton : RadialMenuTextureButton +{ + public ProtoId ProtoId { get; set; } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/BloodSpellSelector/BloodSpellSelectorBUI.cs b/Content.Client/_Sunrise/BloodCult/UI/BloodSpellSelector/BloodSpellSelectorBUI.cs new file mode 100644 index 00000000000..8d39b2478bd --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/BloodSpellSelector/BloodSpellSelectorBUI.cs @@ -0,0 +1,63 @@ +using Content.Shared._Sunrise.BloodCult.Items; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Shared.Prototypes; + +namespace Content.Client._Sunrise.BloodCult.UI.BloodSpellSelector; + +public sealed class BloodSpellSelectorBUI : BoundUserInterface +{ + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + private BloodCultMenu? _menu; + + public BloodSpellSelectorBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + _menu = this.CreateWindow(); + + var protoMan = IoCManager.Resolve(); + var entityMan = IoCManager.Resolve(); + var sprite = entityMan.System(); + + if (protoMan.TryIndex("CultBloodOrb", out EntityPrototype? bloodOrb)) + { + var texture = sprite.GetPrototypeIcon(bloodOrb); + var button = _menu.AddButton($"{bloodOrb.Name} (50)", texture.Default); + + button.OnPressed += _ => + { + SendMessage(new CultBloodSpellCreateOrbBuiMessage()); + Close(); + }; + } + + if (protoMan.TryIndex("BloodSpear", out EntityPrototype? bloodSpear)) + { + var texture = sprite.GetPrototypeIcon(bloodSpear); + var button = _menu.AddButton($"{bloodSpear.Name} (150)", texture.Default); + + button.OnPressed += _ => + { + SendMessage(new CultBloodSpellCreateBloodSpearBuiMessage()); + Close(); + }; + } + + var vpSize = _displayManager.ScreenSize; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + _menu?.Close(); + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/ConstructSelector/ConstructSelectorBui.cs b/Content.Client/_Sunrise/BloodCult/UI/ConstructSelector/ConstructSelectorBui.cs new file mode 100644 index 00000000000..1fd6bb9d26e --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/ConstructSelector/ConstructSelectorBui.cs @@ -0,0 +1,58 @@ +using Content.Shared._Sunrise.BloodCult.Components; +using Content.Shared._Sunrise.BloodCult.UI; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Client._Sunrise.BloodCult.UI.ConstructSelector; + +public sealed class ConstructSelectorBui : BoundUserInterface +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IClyde _displayManager = default!; + [Dependency] private readonly IInputManager _inputManager = default!; + private SpriteSystem _spriteSystem = default!; + + private bool _selected; + private BloodCultMenu? _menu; + + public ConstructSelectorBui(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } + + protected override void Open() + { + base.Open(); + _menu = this.CreateWindow(); + + _spriteSystem = _entityManager.EntitySysManager.GetEntitySystem(); + var shellComponent = _entityManager.GetComponent(Owner); + + _menu.OnClose += () => + { + if(_selected) + return; + + SendMessage(new ConstructFormSelectedEvent(_random.Pick(shellComponent.ConstructForms))); + }; + + foreach (var form in shellComponent.ConstructForms) + { + var formPrototype = _prototypeManager.Index(form); + var button = _menu.AddButton(formPrototype.Name, _spriteSystem.GetPrototypeIcon(formPrototype).Default); + + button.OnPressed += _ => + { + _selected = true; + SendMessage(new ConstructFormSelectedEvent(form)); + _menu.Close(); + }; + } + + var vpSize = _displayManager.ScreenSize; + _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorBUI.cs b/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorBUI.cs new file mode 100644 index 00000000000..2e11085468e --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorBUI.cs @@ -0,0 +1,47 @@ +using Content.Shared._Sunrise.BloodCult.Items; +namespace Content.Client._Sunrise.BloodCult.UI.CountSelector; + +public sealed class CountSelectorBUI : BoundUserInterface +{ + public CountSelectorBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + private CountSelectorWindow? _window; + + protected override void Open() + { + base.Open(); + + _window = new(); + _window.OpenCentered(); + _window.OnCountChange += OnNameSelected; + _window.OnClose += Close; + } + + private void OnNameSelected(string name) + { + if (int.TryParse(name, out var count) && count >= 50) + { + SendMessage(new CountSelectorMessage(count)); + Close(); + } + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + if (state is not CountSelectorBuiState cast || _window == null) + { + return; + } + + _window.UpdateState(cast.Count); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + _window?.Close(); + } +} diff --git a/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorWindow.xaml b/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorWindow.xaml new file mode 100644 index 00000000000..5e5cc0e397f --- /dev/null +++ b/Content.Client/_Sunrise/BloodCult/UI/CountSelector/CountSelectorWindow.xaml @@ -0,0 +1,10 @@ + + +