From 3623a25033d8001dbfb5313652ee7a960d2925d2 Mon Sep 17 00:00:00 2001 From: gogenych Date: Tue, 10 Jun 2025 13:40:19 +0300 Subject: [PATCH 01/27] copper loadout fix (#1414) * copper loadout fix * name fix --- .../_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml | 1 + .../_CP14/Entities/Objects/Weapons/ModularPresets/rapier.yml | 3 ++- .../_CP14/Entities/Objects/Weapons/ModularPresets/skimitar.yml | 1 + .../_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml index d5a7f2d21c..abd3e5f281 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/pickaxe.yml @@ -24,6 +24,7 @@ - state: icon - sprite: _CP14/Objects/ModularTools/Blade/Pickaxe/metall_pickaxe.rsi state: icon + color: "#e28f08" - type: CP14ModularCraftAutoAssemble details: - BladeCopperPickaxe \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/rapier.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/rapier.yml index 97f633ed52..34a27badd0 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/rapier.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/rapier.yml @@ -16,7 +16,7 @@ - type: entity id: CP14ModularCopperRapier parent: CP14ModularGripWooden - name: iron rapier + name: copper rapier description: You'll be lucky if it even pierces the paper. components: - type: Sprite @@ -24,6 +24,7 @@ - state: icon - sprite: _CP14/Objects/ModularTools/Blade/Rapier/metall_rapier.rsi state: icon + color: "#e28f08" - type: CP14ModularCraftAutoAssemble details: - BladeCopperRapier diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/skimitar.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/skimitar.yml index 20899afe8f..961e2e65f4 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/skimitar.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/skimitar.yml @@ -24,6 +24,7 @@ - state: icon - sprite: _CP14/Objects/ModularTools/Blade/Skimitar/metall_skimitar.rsi state: icon + color: "#e28f08" - type: CP14ModularCraftAutoAssemble details: - BladeCopperSkimitar diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml index bdd72cdd7f..7760d0a63f 100644 --- a/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml +++ b/Resources/Prototypes/_CP14/Entities/Objects/Weapons/ModularPresets/sword.yml @@ -16,7 +16,7 @@ - type: entity id: CP14ModularCopperSword parent: CP14ModularGripWooden - name: iron sword + name: copper sword description: You'll be lucky if it even pierces the paper. components: - type: Sprite @@ -24,6 +24,7 @@ - state: icon - sprite: _CP14/Objects/ModularTools/Blade/Sword/metall_sword.rsi state: icon + color: "#e28f08" - type: CP14ModularCraftAutoAssemble details: - BladeCopperSword From c7302e16a67e574a094cf14494dc493a163e1e0b Mon Sep 17 00:00:00 2001 From: CrystallEdge Server Date: Tue, 10 Jun 2025 13:41:27 +0300 Subject: [PATCH 02/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 94ee3d3dec..9aff4247f1 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -320,3 +320,10 @@ id: 8084 time: '2025-06-10T08:07:13.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1412 +- author: gogenych + changes: + - message: Copper tools and weapons are now displayed correctly in loadout + type: Fix + id: 8085 + time: '2025-06-10T10:40:19.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1414 From d89ef56907c283e5b322d2e4b5b127e37deade6f Mon Sep 17 00:00:00 2001 From: firebat4321 Date: Tue, 10 Jun 2025 07:14:07 -0400 Subject: [PATCH 03/27] Firebolt (#1354) * added firebolt spell yml, added to spellbook tree * Added new sprites for Firebolt action/spellbook, in-game bolt sprite. * Missing comma from fire .json file. * Updated firebolt IDs to use own ID instead of Fireball's ID. * Spell doesn't break on move now. * Updated on soundHit effect * Corrected Fireball IDs to Firebolt * Updated copyright entries * Update firebolt.yml --------- Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com> --- .../Entities/Actions/Spells/Fire/firebolt.yml | 98 ++++++++++++++++++ .../Prototypes/_CP14/Skill/pyrokinetic.yml | 14 +++ .../Actions/Spells/fire.rsi/firebolt.png | Bin 0 -> 474 bytes .../_CP14/Actions/Spells/fire.rsi/meta.json | 7 +- .../Effects/Magic/firebolt.rsi/firebolt.png | Bin 0 -> 583 bytes .../Effects/Magic/firebolt.rsi/meta.json | 14 +++ 6 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml create mode 100644 Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png create mode 100644 Resources/Textures/_CP14/Effects/Magic/firebolt.rsi/firebolt.png create mode 100644 Resources/Textures/_CP14/Effects/Magic/firebolt.rsi/meta.json diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml new file mode 100644 index 0000000000..896ecd6f81 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml @@ -0,0 +1,98 @@ +- type: entity + id: CP14ActionSpellFirebolt + name: Firebolt + description: A staple of a pyrokinetic's arsenal - a small but potent bolt of fire. + components: + - type: Sprite + sprite: _CP14/Actions/Spells/fire.rsi + state: fireball + - type: CP14MagicEffectCastSlowdown + speedMultiplier: 0.75 + - type: CP14MagicEffectManaCost + manaCost: 10 + - type: CP14MagicEffect + magicType: Fire + effects: + - !type:CP14SpellProjectile + prototype: CP14Firebolt + - !type:CP14SpellSpawnEntityOnUser + spawns: + - CP14ImpactEffectFirebolt + - type: CP14MagicEffectVerbalAspect + endSpeech: "Ignis acus!" + - type: CP14MagicEffectCastingVisual + proto: CP14RuneFirebolt + - type: CP14MagicEffectPacifiedBlock + - type: EntityWorldTargetAction + repeat: true + checkCanAccess: false + raiseOnUser: true + range: 60 + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + icon: + sprite: _CP14/Actions/Spells/fire.rsi + state: firebolt + event: !type:CP14DelayedEntityWorldTargetActionEvent + cooldown: 1.0 + breakOnMove: false + +- type: entity + id: CP14RuneFirebolt + parent: CP14BaseMagicRune + categories: [ HideSpawnMenu ] + save: false + components: + - type: PointLight + color: "#eea911" + - type: Sprite + layers: + - state: medium_circle + color: "#fdda5d" + shader: unshaded + +- type: entity + id: CP14ImpactEffectFirebolt + parent: CP14BaseMagicImpact + categories: [ HideSpawnMenu ] + save: false + components: + - type: Sprite + layers: + - state: wave_up + color: "#eea911" + shader: unshaded + +- type: entity + id: CP14Firebolt + parent: BaseBullet + name: firebolt + categories: [ HideSpawnMenu ] + save: false + components: + - type: PointLight + color: "#E25822" + radius: 1.1 + energy: 1.0 + - type: Projectile + damage: + types: + Heat: 10 + soundHit: + path: /Audio/Weapons/Guns/Hits/energy_metal1.ogg + - type: Sprite + sprite: _CP14/Effects/Magic/firebolt.rsi + layers: + - state: firebolt + shader: unshaded + +- type: entity + parent: CP14BaseSpellScrollFire + id: CP14SpellScrollFirebolt + name: firebolt spell scroll + components: + - type: CP14SpellStorage + spells: + - CP14ActionSpellFirebolt + diff --git a/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml b/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml index 2aa5256173..c1a5dc55df 100644 --- a/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml +++ b/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml @@ -102,6 +102,20 @@ - !type:NeedPrerequisite prerequisite: PyrokineticT2 +- type: cp14Skill + id: CP14ActionSpellFirebolt + skillUiPosition: 6, 6 + tree: Pyrokinetic + icon: + sprite: _CP14/Actions/Spells/fire.rsi + state: firebolt + effects: + - !type:AddAction + action: CP14ActionSpellFirebolt + restrictions: + - !type:NeedPrerequisite + prerequisite: PyrokineticT2 + # T3 - type: cp14Skill diff --git a/Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png b/Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png new file mode 100644 index 0000000000000000000000000000000000000000..ac658353bc073ac170ac7c430315b63ab638d84f GIT binary patch literal 474 zcmV<00VV#4P)pGj7da6R9Hu2U>F6XAu!TIfRUU4_#ej5fUJ*k6)K+;Gg(Mc3{v}l zGQ)plJs*!qlru2AAk`SSdXho_-SQ7dB>M$dJ})BMcA!S09RRcZ$x)pap8s#TDYY2p zXp$TNvRuacN)1Z<=MwJ;Y$3%&Oz?qxkIiyW6cD2ypBkbPA-d&^a9=+sXg@s1*fP|k zC_c>42+BPKqu_CbPBU__BP_>lH%?1ITKqF18aGa70GWl?0mN7ivJB)Cyq3b;3bP!_ zXOx?c+X3&xCHn+yo)^OOl9J`95(3!ryuknGtw7(tB^dEY3dl+W=)S*u)S_Pa|3d+g zxzx)4FgIe&1;{}UQV6mfCU%F>;)AmFiAIn(EE`hdD2#FdvR^X=gFaAt<>36x87InZhcT*!Uk+HyQ$?Api;i0BB&PVa4vR Qp#T5?07*qoM6N<$g4Te_x*DLql_w!zVToKY}HKP!y3&OpP>dcjV$3B(SZEC42L^DM5kW2{(rPp?Ko5}^W5f_vLm%$iN}8;< zYc++1N70x9Dazne=s|<0ps$ayPWD=hkULYvuvP+E0DSSaIRNJNS*Hr144TP_(-}Kc zG$QScun&pk2^0bZK#;o}6pUb}JXQcMmJbRN#8$=)@D&mSpN60*;M?yb2;d@8A6o_P z5~-uSovld0swGXq&RAj`0-;<1KHvSb-&(w-HO{dxFRS5?D^e%{+$U1U<(<@q)QCE> z(h?RIMvONSxpPH*wX@vB-OT|4{sN36njI-XD7g0(^uGsD>=Z@~@E8#2hQ$oz7Do!e zx8GAhV9@$Wj}*W~_{A4+aYyzUdRG++cozM(J9VZC zGxUW*T)lGk^ly9tQLC8dWrL#Yy6OG#YQLfUCmlMjQUyE_y1kBkQ7$f@fo*6~5kFXk zps2ZjA>~!G2Qdo>wpWtBj Date: Tue, 10 Jun 2025 14:15:13 +0300 Subject: [PATCH 04/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 9aff4247f1..ee6c6717ba 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -327,3 +327,10 @@ id: 8085 time: '2025-06-10T10:40:19.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1414 +- author: firebat4321 + changes: + - message: Added new combat-focused T2 Pryokinetic spell, Firebolt! + type: Add + id: 8086 + time: '2025-06-10T11:14:08.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1354 From 1ea82919279c89c1f8d412fd6b0c8f3ed3166c31 Mon Sep 17 00:00:00 2001 From: Sefaia Date: Fri, 13 Jun 2025 02:34:32 -0500 Subject: [PATCH 05/27] Added Big Crossbow Bolts to whitelist and created a new Entity spawn item for a quiver filled with iron big crossbow bolts. (#1418) --- .../_CP14/Entities/Clothing/Belt/quiver.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Resources/Prototypes/_CP14/Entities/Clothing/Belt/quiver.yml b/Resources/Prototypes/_CP14/Entities/Clothing/Belt/quiver.yml index 7f30df98d8..2663adffed 100644 --- a/Resources/Prototypes/_CP14/Entities/Clothing/Belt/quiver.yml +++ b/Resources/Prototypes/_CP14/Entities/Clothing/Belt/quiver.yml @@ -26,6 +26,7 @@ tags: - CP14CrossbowBolt - CP14Arrow + - CP14BigCrossbowBolt - type: Appearance - type: StorageContainerVisuals maxFillLevels: 3 @@ -74,3 +75,14 @@ contents: - id: CP14CrossboltIron amount: 32 + +- type: entity + parent: CP14ClothingBeltQuiver + id: CP14ClothingBeltQuiverBigCrossbolt + categories: [ ForkFiltered ] + suffix: Full. Iron. BigCrossbolt + components: + - type: StorageFill + contents: + - id: CP14BigCrossboltIron + amount: 16 From 7391b5a065b3d8ae572618ef394dc048f9eca1e4 Mon Sep 17 00:00:00 2001 From: CrystallEdge Server Date: Fri, 13 Jun 2025 10:35:38 +0300 Subject: [PATCH 06/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index ee6c6717ba..7140baba1e 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -334,3 +334,13 @@ id: 8086 time: '2025-06-10T11:14:08.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1354 +- author: Sefaia + changes: + - message: Added Quiver filled with Big Iron Crossbow Bolts to Entity Spawn Menu + for Admins/Testers + type: Add + - message: Fixed Quiver to hold Big Crossbow Bolts. + type: Fix + id: 8087 + time: '2025-06-13T07:34:32.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1418 From 8ab09396987be956e11c066876179b1a83506cb8 Mon Sep 17 00:00:00 2001 From: SenorJaba Date: Fri, 13 Jun 2025 12:24:36 +0300 Subject: [PATCH 07/27] Merchant's monocle and ability (#1413) * New trading stuff * Crafts skill tree * More trading fixes, baby! * Last trading fix I hope * Merchants' supremacy * Gimme money * Readonly --- .../_CP14/Trading/CP14PriceScannerSystem.cs | 63 ++++++++++++++++++ .../Currency/CP14SharedCurrencySystem.cs | 14 ++-- .../Components/CP14PriceScannerComponent.cs | 6 ++ .../en-US/_CP14/currency/currency_comp.ftl | 2 +- .../Locale/en-US/_CP14/skill/skill_meta.ftl | 5 +- .../Locale/en-US/_CP14/skill/skill_tree.ftl | 14 ++-- Resources/Locale/en-US/_CP14/trading/ui.ftl | 4 +- .../ru-RU/_CP14/_PROTO/entities/entities.ftl | 3 + .../Locale/ru-RU/_CP14/skill/skill_meta.ftl | 5 +- .../Locale/ru-RU/_CP14/skill/skill_tree.ftl | 17 +++-- Resources/Locale/ru-RU/_CP14/trading/ui.ftl | 4 +- .../_CP14/Catalog/Fills/closets.yml | 1 - .../_CP14/Entities/Clothing/Eyes/eyes.yml | 19 ++++++ .../_CP14/Loadouts/Jobs/alchemist.yml | 19 ------ .../_CP14/Loadouts/role_loadouts.yml | 2 +- .../_CP14/Roles/Jobs/Traders/merchant.yml | 3 + .../{blacksmithing.yml => craftsmanship.yml} | 49 +++++++++++--- .../Prototypes/_CP14/Skill/skill_tree.yml | 31 ++++++--- .../Prototypes/_CP14/Skill/thaumaturgy.yml | 15 ----- .../Prototypes/_CP14/Trading/brad_potions.yml | 22 ++++++ .../Prototypes/_CP14/Trading/contracts.yml | 2 +- .../Prototypes/_CP14/Trading/thaumaturgy.yml | 11 +++ .../merchant_monocle.rsi/equipped-EYES.png | Bin 0 -> 303 bytes .../Eyes/merchant_monocle.rsi/icon.png | Bin 0 -> 219 bytes .../Eyes/merchant_monocle.rsi/meta.json | 18 +++++ 25 files changed, 249 insertions(+), 80 deletions(-) create mode 100644 Content.Server/_CP14/Trading/CP14PriceScannerSystem.cs create mode 100644 Content.Shared/_CP14/Trading/Components/CP14PriceScannerComponent.cs rename Resources/Prototypes/_CP14/Skill/{blacksmithing.yml => craftsmanship.yml} (58%) delete mode 100644 Resources/Prototypes/_CP14/Skill/thaumaturgy.yml create mode 100644 Resources/Textures/_CP14/Clothing/Eyes/merchant_monocle.rsi/equipped-EYES.png create mode 100644 Resources/Textures/_CP14/Clothing/Eyes/merchant_monocle.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Clothing/Eyes/merchant_monocle.rsi/meta.json diff --git a/Content.Server/_CP14/Trading/CP14PriceScannerSystem.cs b/Content.Server/_CP14/Trading/CP14PriceScannerSystem.cs new file mode 100644 index 0000000000..90baf91166 --- /dev/null +++ b/Content.Server/_CP14/Trading/CP14PriceScannerSystem.cs @@ -0,0 +1,63 @@ +using System.Text; +using Content.Server.Cargo.Systems; +using Content.Shared._CP14.Currency; +using Content.Shared.Examine; +using Content.Shared.Interaction; +using Content.Shared.Inventory; +using Content.Shared.Tag; +using Content.Shared._CP14.Trading.Components; + + +namespace Content.Server._CP14.Trading; + +public sealed class CP14PriceScannerSystem : EntitySystem +{ + [Dependency] private readonly PricingSystem _price = default!; + [Dependency] private readonly TagSystem _tag = default!; + [Dependency] private readonly InventorySystem _invSystem = default!; + [Dependency] private readonly CP14SharedCurrencySystem _currency = default!; + + + public override void Initialize() + { + SubscribeLocalEvent(OnExamined); + } + + private bool IsAbleExamine(EntityUid uid) + { + if (_invSystem.TryGetSlotEntity(uid, "eyes", out var huds) + && HasComp(huds)) + { + return true; + } + else if (HasComp(uid)) + { + return true; + } + + return false; + } + + private void OnExamined(EntityUid eid, MetaDataComponent component, ExaminedEvent args) + { + if (!IsAbleExamine(args.Examiner)) + { + return; + } + else if (_tag.HasTag(args.Examined, "CP14Coin")) + { + return; + } + + var getPrice = _price.GetPrice(args.Examined); + + var price = Math.Round(getPrice); + + var priceMsg = Loc.GetString("cp14-currency-examine-title"); + + priceMsg += _currency.GetCurrencyPrettyString((int)price); + + args.PushMarkup(priceMsg); + } + +} diff --git a/Content.Shared/_CP14/Currency/CP14SharedCurrencySystem.cs b/Content.Shared/_CP14/Currency/CP14SharedCurrencySystem.cs index 7db235fc84..ff51a576ed 100644 --- a/Content.Shared/_CP14/Currency/CP14SharedCurrencySystem.cs +++ b/Content.Shared/_CP14/Currency/CP14SharedCurrencySystem.cs @@ -14,8 +14,7 @@ public partial class CP14SharedCurrencySystem : EntitySystem { var total = currency; - if (total <= 0) - return string.Empty; + var sb = new StringBuilder(); var gp = total / 100; total %= 100; @@ -25,14 +24,15 @@ public partial class CP14SharedCurrencySystem : EntitySystem var cp = total; - var sb = new StringBuilder(); - if (gp > 0) - sb.Append( " " + Loc.GetString("cp14-currency-examine-gp", ("coin", gp))); + sb.Append(" " + Loc.GetString("cp14-currency-examine-gp", ("coin", gp))); if (sp > 0) - sb.Append( " " + Loc.GetString("cp14-currency-examine-sp", ("coin", sp))); + sb.Append(" " + Loc.GetString("cp14-currency-examine-sp", ("coin", sp))); if (cp > 0) - sb.Append( " " + Loc.GetString("cp14-currency-examine-cp", ("coin", cp))); + sb.Append(" " + Loc.GetString("cp14-currency-examine-cp", ("coin", cp))); + if (gp <= 0 && sp <= 0 && cp <= 0) + sb.Append(" " + Loc.GetString("cp14-trading-empty-price")); + return sb.ToString(); return sb.ToString(); } diff --git a/Content.Shared/_CP14/Trading/Components/CP14PriceScannerComponent.cs b/Content.Shared/_CP14/Trading/Components/CP14PriceScannerComponent.cs new file mode 100644 index 0000000000..3c7668dbbc --- /dev/null +++ b/Content.Shared/_CP14/Trading/Components/CP14PriceScannerComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Trading.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CP14PriceScannerComponent : Component { } diff --git a/Resources/Locale/en-US/_CP14/currency/currency_comp.ftl b/Resources/Locale/en-US/_CP14/currency/currency_comp.ftl index b8976db6ad..628de32fbe 100644 --- a/Resources/Locale/en-US/_CP14/currency/currency_comp.ftl +++ b/Resources/Locale/en-US/_CP14/currency/currency_comp.ftl @@ -4,7 +4,7 @@ cp14-currency-examine-gp = [color=#ebad3b]{$coin}gp[/color] cp14-currency-examine-sp = [color=#bad1d6]{$coin}sp[/color] cp14-currency-examine-cp = [color=#824e27]{$coin}cp[/color] -cp14-currency-converter-insert = {$cash}cp ddeposited! +cp14-currency-converter-insert = {$cash}cp deposited! cp14-verb-categories-currency-converter = Withdraw currency: cp14-currency-converter-get-cp = As cp (1cp) cp14-currency-converter-get-sp = As sp (10cp) diff --git a/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl b/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl index 50644b7e6e..cd5ea1be7d 100644 --- a/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl +++ b/Resources/Locale/en-US/_CP14/skill/skill_meta.ftl @@ -31,4 +31,7 @@ cp14-skill-copper-melt-name = Copper melting cp14-skill-iron-melt-name = Iron melting cp14-skill-gold-melt-name = Gold melting cp14-skill-mithril-melt-name = Mithril melting -cp14-skill-glass-melt-name = Glasswork \ No newline at end of file +cp14-skill-glass-melt-name = Glasswork + +cp14-skill-trader-wit-name = Trader's wit +cp14-skill-trader-wit-desc = You are able to estimate the exact value of any item in the empire at a first glance. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl b/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl index a29e6edd76..ca386fa6ac 100644 --- a/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl +++ b/Resources/Locale/en-US/_CP14/skill/skill_tree.ftl @@ -29,8 +29,14 @@ cp14-skill-tree-martial-desc = Master the secrets of deadly weapons, or make you # Job -cp14-skill-tree-thaumaturgy-name = Alchemy -cp14-skill-tree-thaumaturgy-desc = The art of creating magical potions that can kill, raise from the dead, or turn creatures into sheep. +#cp14-skill-tree-thaumaturgy-name = Alchemy +#cp14-skill-tree-thaumaturgy-desc = The art of creating magical potions that can kill, raise from the dead, or turn creatures into sheep. -cp14-skill-tree-blacksmithing-name = Blacksmithing -cp14-skill-tree-blacksmithing-desc = The art of turning metal into various useful things. \ No newline at end of file +#cp14-skill-tree-blacksmithing-name = Blacksmithing +#cp14-skill-tree-blacksmithing-desc = The art of turning metal into various useful things. + +#cp14-skill-tree-trading-name = Trading +#cp14-skill-tree-trading-desc = The art of understanding where, when and for how much to sell and buy different items. + +cp14-skill-tree-craftsman-name = Craftsmanship +cp14-skill-tree-craftsman-desc = Learn the arts and crafts that let you create and use all kinds of useful things. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/trading/ui.ftl b/Resources/Locale/en-US/_CP14/trading/ui.ftl index a8dd5a8f04..0cf8c06490 100644 --- a/Resources/Locale/en-US/_CP14/trading/ui.ftl +++ b/Resources/Locale/en-US/_CP14/trading/ui.ftl @@ -8,4 +8,6 @@ cp14-trading-faction-prefix = Trading with: cp14-trading-failure-popup-money = Not enough funds on the platform! -cp14-trading-contract-use = Trade with "{$name}" unlocked! \ No newline at end of file +cp14-trading-contract-use = Trade with "{$name}" unlocked! + +cp14-trading-empty-price = None! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/_PROTO/entities/entities.ftl b/Resources/Locale/ru-RU/_CP14/_PROTO/entities/entities.ftl index ca45030507..320ff2fb53 100644 --- a/Resources/Locale/ru-RU/_CP14/_PROTO/entities/entities.ftl +++ b/Resources/Locale/ru-RU/_CP14/_PROTO/entities/entities.ftl @@ -754,6 +754,9 @@ ent-CP14ClothingEyesAlchemyGlasses = алхимические очки ent-CP14ClothingEyesAlchemyMonocle = алхимический монокль .desc = Специальный магический монокль, позволяющий четко видеть состав любых смесей. +ent-CP14ClothingEyesMerchantMonocle = монокль торговца + .desc = Магический увеличительный монокль высочайшего качества, позволяющий вам определить точную цену любого товара. + ent-CP14ClothingEyesThaumaturgyGlasses = тауматургические очки .desc = Очки, позволяющие сканировать магические предметы и существ, чтобы четко видеть количество оставшейся в них энергии. diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl index c62c84b2e0..20d16236c4 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/skill_meta.ftl @@ -31,4 +31,7 @@ cp14-skill-copper-melt-name = Плавка меди cp14-skill-iron-melt-name = Плавка железа cp14-skill-gold-melt-name = Плавка золота cp14-skill-mithril-melt-name = Плавка мифрила -cp14-skill-glass-melt-name = Работа со стеклом \ No newline at end of file +cp14-skill-glass-melt-name = Работа со стеклом + +cp14-skill-trader-wit-name = Торговая смекалка +cp14-skill-trader-wit-desc = Вы способны одним взглядом оценить и вычислить точную стоимость предмета в империи. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl index fc6e87d21d..acd5460f0b 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/skill_tree.ftl @@ -1,6 +1,3 @@ -cp14-skill-tree-blaksmithing-name = Кузнечное дело -cp14-skill-tree-blaksmithing-desc = Исследуйте и создавайте новые предметы из металла. - # Magic cp14-skill-tree-pyrokinetic-name = Пирокинетика @@ -31,8 +28,14 @@ cp14-skill-tree-martial-desc = Овладейте секретами смерт # Job -cp14-skill-tree-thaumaturgy-name = Алхимия -cp14-skill-tree-thaumaturgy-desc = Исскуство создания волшебных зелий, способных убивать, воскрешать из мертвых или превращать существ в овечек. +#cp14-skill-tree-thaumaturgy-name = Алхимия +#cp14-skill-tree-thaumaturgy-desc = Исскуство создания волшебных зелий, способных убивать, воскрешать из мертвых или превращать существ в овечек. -cp14-skill-tree-blacksmithing-name = Кузнечное дело -cp14-skill-tree-blacksmithing-desc = Исскуство превращения металла в различные полезные вещи. \ No newline at end of file +#cp14-skill-tree-blacksmithing-name = Кузнечное дело +#cp14-skill-tree-blacksmithing-desc = Исскуство превращения металла в различные полезные вещи. + +#cp14-skill-tree-trading-name = Торговля +#cp14-skill-tree-trading-desc = Исскуство познания где, когда, и за сколько продавать и покупать различные предметы. + +cp14-skill-tree-craftsman-name = Ремесленничество +cp14-skill-tree-craftsman-desc = Изучайте навыки и умения для создания и использования различных полезных вещей. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/trading/ui.ftl b/Resources/Locale/ru-RU/_CP14/trading/ui.ftl index a512847922..42f8dd7b80 100644 --- a/Resources/Locale/ru-RU/_CP14/trading/ui.ftl +++ b/Resources/Locale/ru-RU/_CP14/trading/ui.ftl @@ -8,4 +8,6 @@ cp14-trading-faction-prefix = Торговля с: cp14-trading-failure-popup-money = Недостаточно средств на платформе! -cp14-trading-contract-use = Торговля с "{$name}" разблокирована! \ No newline at end of file +cp14-trading-contract-use = Торговля с "{$name}" разблокирована! + +cp14-trading-empty-price = Отсутствует! \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml index 9af536d05e..b2187da044 100644 --- a/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml +++ b/Resources/Prototypes/_CP14/Catalog/Fills/closets.yml @@ -47,7 +47,6 @@ - id: CP14StampDenied - id: CP14StampApproved - id: CP14ManaOperationGlove - - id: AppraisalTool - id: CP14PaperFolderRed amount: 2 - id: CP14PaperFolderBlue diff --git a/Resources/Prototypes/_CP14/Entities/Clothing/Eyes/eyes.yml b/Resources/Prototypes/_CP14/Entities/Clothing/Eyes/eyes.yml index 93e0d1dd15..205c481146 100644 --- a/Resources/Prototypes/_CP14/Entities/Clothing/Eyes/eyes.yml +++ b/Resources/Prototypes/_CP14/Entities/Clothing/Eyes/eyes.yml @@ -62,6 +62,8 @@ - type: Clothing sprite: _CP14/Clothing/Eyes/alchemy_glasses.rsi - type: SolutionScanner + - type: StaticPrice + price: 30 - type: GuideHelp guides: - CP14_RU_Alchemy @@ -79,6 +81,8 @@ - type: Clothing sprite: _CP14/Clothing/Eyes/alchemy_monocle.rsi - type: SolutionScanner + - type: StaticPrice + price: 30 - type: GuideHelp guides: - CP14_RU_Alchemy @@ -122,3 +126,18 @@ sprite: _CP14/Clothing/Eyes/eye_patch.rsi - type: Clothing sprite: _CP14/Clothing/Eyes/eye_patch.rsi + +- type: entity + parent: CP14ClothingEyesBase + id: CP14ClothingEyesMerchantMonocle + name: merchant's monocle + description: High-quality magnifiyng monocle infused with magic to help you determine the exact price of any item. + components: + - type: Sprite + sprite: _CP14/Clothing/Eyes/merchant_monocle.rsi + - type: Clothing + sprite: _CP14/Clothing/Eyes/merchant_monocle.rsi + - type: CP14PriceScanner + - type: StaticPrice + price: 30 + - type: VisionCorrection diff --git a/Resources/Prototypes/_CP14/Loadouts/Jobs/alchemist.yml b/Resources/Prototypes/_CP14/Loadouts/Jobs/alchemist.yml index 137089b23b..79a99423f2 100644 --- a/Resources/Prototypes/_CP14/Loadouts/Jobs/alchemist.yml +++ b/Resources/Prototypes/_CP14/Loadouts/Jobs/alchemist.yml @@ -37,25 +37,6 @@ equipment: cloak: CP14ClothingCloakAlchemistMantle -# Eyes - -- type: loadoutGroup - id: CP14AlchemistEyes - name: cp14-loadout-alchemist-eyes - loadouts: - - CP14ClothingEyesAlchemyGlasses - - CP14ClothingEyesAlchemyMonocle - -- type: loadout - id: CP14ClothingEyesAlchemyGlasses - equipment: - eyes: CP14ClothingEyesAlchemyGlasses - -- type: loadout - id: CP14ClothingEyesAlchemyMonocle - equipment: - eyes: CP14ClothingEyesAlchemyMonocle - # Belt - type: loadoutGroup diff --git a/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml b/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml index 1c80592644..b7c384f055 100644 --- a/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/_CP14/Loadouts/role_loadouts.yml @@ -34,7 +34,7 @@ groups: - CP14AlchemistHead # - CP14GeneralOuterClothing - - CP14AlchemistEyes # + - CP14GeneralEyes # - CP14AlchemistCloak # - CP14GeneralGloves - CP14GeneralShirt diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Traders/merchant.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Traders/merchant.yml index f62212e0cc..337f986836 100644 --- a/Resources/Prototypes/_CP14/Roles/Jobs/Traders/merchant.yml +++ b/Resources/Prototypes/_CP14/Roles/Jobs/Traders/merchant.yml @@ -12,6 +12,9 @@ time: 3600 # 1 hours special: - !type:CP14AddGlobalReputationSpecial + - !type:CP14LearnSkillsSpecial + skills: + - TraderWit - type: startingGear id: CP14MerchantGear diff --git a/Resources/Prototypes/_CP14/Skill/blacksmithing.yml b/Resources/Prototypes/_CP14/Skill/craftsmanship.yml similarity index 58% rename from Resources/Prototypes/_CP14/Skill/blacksmithing.yml rename to Resources/Prototypes/_CP14/Skill/craftsmanship.yml index 6cf804e1a8..1319dd4bc1 100644 --- a/Resources/Prototypes/_CP14/Skill/blacksmithing.yml +++ b/Resources/Prototypes/_CP14/Skill/craftsmanship.yml @@ -1,7 +1,22 @@ +- type: cp14Skill + id: TraderWit + skillUiPosition: 0, 0 + tree: Craftsmanship + name: cp14-skill-trader-wit-name + desc: cp14-skill-trader-wit-desc + learnCost: 1 + icon: + sprite: _CP14/Objects/Economy/pp_coin.rsi + state: coin8 + effects: + - !type:AddComponents + components: + - type: CP14PriceScanner + - type: cp14Skill id: CopperMelting - skillUiPosition: 1, 0 - tree: Blacksmithing + skillUiPosition: 4, 0 + tree: Craftsmanship name: cp14-skill-copper-melt-name learnCost: 0.5 icon: @@ -12,8 +27,8 @@ - type: cp14Skill id: IronMelting - skillUiPosition: 1, 2 - tree: Blacksmithing + skillUiPosition: 4, 2 + tree: Craftsmanship name: cp14-skill-iron-melt-name learnCost: 0.5 icon: @@ -27,8 +42,8 @@ - type: cp14Skill id: GoldMelting - skillUiPosition: 0, 4 - tree: Blacksmithing + skillUiPosition: 3, 4 + tree: Craftsmanship name: cp14-skill-gold-melt-name learnCost: 0.5 icon: @@ -42,8 +57,8 @@ - type: cp14Skill id: MithrilMelting - skillUiPosition: 2, 4 - tree: Blacksmithing + skillUiPosition: 5, 4 + tree: Craftsmanship name: cp14-skill-mithril-melt-name learnCost: 0.5 icon: @@ -57,8 +72,8 @@ - type: cp14Skill id: GlassMelting - skillUiPosition: 3, 0 - tree: Blacksmithing + skillUiPosition: 6, 0 + tree: Craftsmanship name: cp14-skill-glass-melt-name learnCost: 0.5 icon: @@ -67,3 +82,17 @@ effects: - !type:UnlockRecipes +- type: cp14Skill + id: AlchemyVision + skillUiPosition: 10, 0 + tree: Craftsmanship + name: cp14-skill-alchemy-vision-name + desc: cp14-skill-alchemy-vision-desc + learnCost: 1 + icon: + sprite: _CP14/Clothing/Eyes/alchemy_glasses.rsi + state: icon + effects: + - !type:AddComponents + components: + - type: SolutionScanner \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Skill/skill_tree.yml b/Resources/Prototypes/_CP14/Skill/skill_tree.yml index 223474eee3..3a59a71c23 100644 --- a/Resources/Prototypes/_CP14/Skill/skill_tree.yml +++ b/Resources/Prototypes/_CP14/Skill/skill_tree.yml @@ -72,15 +72,26 @@ # -- type: cp14SkillTree - id: Thaumaturgy - name: cp14-skill-tree-thaumaturgy-name - desc: cp14-skill-tree-thaumaturgy-desc - color: "#7c52bf" +#- type: cp14SkillTree +# id: Thaumaturgy +# name: cp14-skill-tree-thaumaturgy-name +# desc: cp14-skill-tree-thaumaturgy-desc +# color: "#7c52bf" + +#- type: cp14SkillTree +# id: Blacksmithing +# name: cp14-skill-tree-blacksmithing-name +# desc: cp14-skill-tree-blacksmithing-desc +# color: "#6b3200" + +#- type: cp14SkillTree +# id: Trading +# name: cp14-skill-tree-trading-name +# desc: cp14-skill-tree-trading-desc +# color: "#f5edaa" - type: cp14SkillTree - id: Blacksmithing - name: cp14-skill-tree-blacksmithing-name - desc: cp14-skill-tree-blacksmithing-desc - color: "#6b3200" - + id: Craftsmanship + name: cp14-skill-tree-craftsman-name + desc: cp14-skill-tree-craftsman-desc + color: "#a04b00" diff --git a/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml b/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml deleted file mode 100644 index d9dd600b3c..0000000000 --- a/Resources/Prototypes/_CP14/Skill/thaumaturgy.yml +++ /dev/null @@ -1,15 +0,0 @@ -- type: cp14Skill - id: AlchemyVision - skillUiPosition: 0, 0 - tree: Thaumaturgy - name: cp14-skill-alchemy-vision-name - desc: cp14-skill-alchemy-vision-desc - learnCost: 1 - icon: - sprite: _CP14/Clothing/Eyes/alchemy_glasses.rsi - state: icon - effects: - - !type:AddComponents - components: - - type: SolutionScanner - diff --git a/Resources/Prototypes/_CP14/Trading/brad_potions.yml b/Resources/Prototypes/_CP14/Trading/brad_potions.yml index d92d5aff34..76bca77408 100644 --- a/Resources/Prototypes/_CP14/Trading/brad_potions.yml +++ b/Resources/Prototypes/_CP14/Trading/brad_potions.yml @@ -139,6 +139,28 @@ service: !type:CP14BuyItemsService product: CP14Syringe +- type: cp14TradingPosition + id: CP14ClothingEyesAlchemyGlasses + faction: BradPotions + reputationLevel: 1 + uiPosition: 9 + icon: + sprite: _CP14/Clothing/Eyes/alchemy_glasses.rsi + state: icon + service: !type:CP14BuyItemsService + product: CP14ClothingEyesAlchemyGlasses + +- type: cp14TradingPosition + id: CP14ClothingEyesAlchemyMonocle + faction: BradPotions + reputationLevel: 1 + uiPosition: 10 + icon: + sprite: _CP14/Clothing/Eyes/alchemy_monocle.rsi + state: icon + service: !type:CP14BuyItemsService + product: CP14ClothingEyesAlchemyMonocle + # Rep 2 - type: cp14TradingPosition diff --git a/Resources/Prototypes/_CP14/Trading/contracts.yml b/Resources/Prototypes/_CP14/Trading/contracts.yml index a357cc77a5..af0f86b118 100644 --- a/Resources/Prototypes/_CP14/Trading/contracts.yml +++ b/Resources/Prototypes/_CP14/Trading/contracts.yml @@ -51,4 +51,4 @@ state: house service: !type:CP14BuyItemsService product: CP14TradeContractHomeDecor - count: 1 + count: 1 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Trading/thaumaturgy.yml b/Resources/Prototypes/_CP14/Trading/thaumaturgy.yml index e3a55570c2..300348a192 100644 --- a/Resources/Prototypes/_CP14/Trading/thaumaturgy.yml +++ b/Resources/Prototypes/_CP14/Trading/thaumaturgy.yml @@ -113,6 +113,17 @@ # Rep 1 +- type: cp14TradingPosition + id: CP14ClothingEyesMerchantMonocle + faction: Thaumaturgy + reputationLevel: 1 + uiPosition: 1 + icon: + sprite: _CP14/Clothing/Eyes/merchant_monocle.rsi + state: icon + service: !type:CP14BuyItemsService + product: CP14ClothingEyesMerchantMonocle + - type: cp14TradingPosition id: CP14ManaOperationGlove faction: Thaumaturgy diff --git a/Resources/Textures/_CP14/Clothing/Eyes/merchant_monocle.rsi/equipped-EYES.png b/Resources/Textures/_CP14/Clothing/Eyes/merchant_monocle.rsi/equipped-EYES.png new file mode 100644 index 0000000000000000000000000000000000000000..3d89ed45d34dfb75145f9bd6ae8399dafb3c885d GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|UV6GXhE&XX zduu;eQ-H|vkIo`nUA^C5x^ZpwPc6Sjfp1K19DU_NT0A)%hDrt2zD?dC|4x7S9XV&u z{^Ik$b}KP7d|G1?pw0W`dhry~6`wXwWwW~7pIkcW>wdk3mzZLNy-I9O{49#yskSD2 z*>tO&PnM>?zO*^i<%!7AUcMR6OU|Xe&i;7Yd+$CQpi>~=*Rr$Uwyi7Yocijck~VM2 zF6q=<9mVrO>YbnWY&!d8!@7kr!lxctOuTEd`t^zJk=uVK=lNW!xOe>4oA;l~Ip?l= rc3W=IjO(4Oe+~hS&e!LMntH#AiFbO7rlauuJ0KBHS3j3^P6fax z6P{ Date: Fri, 13 Jun 2025 12:25:41 +0300 Subject: [PATCH 08/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 7140baba1e..8e27116958 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -344,3 +344,19 @@ id: 8087 time: '2025-06-13T07:34:32.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1418 +- author: SenorJaba + changes: + - message: Merchant's monocle has been added to replace appraisal tool. + type: Add + - message: Added a new trader's wit skill which works similarly to merchant's monocle. + type: Add + - message: Alchemist's glasses and monocle, and merchant's monocle were added into + the buying platform. + type: Add + - message: Appraisal tool has been removed from the merchant's closet. + type: Remove + - message: Alchemist's glasses and monocle were removed from the alchemist's loadout. + type: Remove + id: 8088 + time: '2025-06-13T09:24:36.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1413 From 542bd2d9482183a0361facf07893c3b9fbe7f5db Mon Sep 17 00:00:00 2001 From: Fr0goo <153249069+Fr0goo@users.noreply.github.com> Date: Fri, 13 Jun 2025 06:25:33 -0400 Subject: [PATCH 09/27] Flem Creature (#1402) * added Flem Creature a weird looking fish creature that will spawn in the demiplanes with open skies and herbals. that will attack you if you get too close * fixed placement of lines should be in the right places now * changed location of fish outfit, ajusted the sprite, and made it not foldable * added flem modifier and fixed some thingy * Update attributions.yml * Update mobs.yml --------- Co-authored-by: Red <96445749+TheShuEd@users.noreply.github.com> --- .../Audio/_CP14/Animals/attributions.yml | 5 + Resources/Audio/_CP14/Animals/flem1.ogg | Bin 0 -> 49094 bytes Resources/Audio/_CP14/Animals/flem2.ogg | Bin 0 -> 26804 bytes Resources/Audio/_CP14/Animals/flem3.ogg | Bin 0 -> 24202 bytes .../en-US/_CP14/demiplane/modifiers.ftl | 1 + .../Entities/Clothing/Head/Produced/armor.yml | 25 ++ .../Entities/Clothing/Head/Roles/general.yml | 1 + .../Clothing/OuterClothing/Roles/general.yml | 2 + .../Entities/Clothing/OuterClothing/armor.yml | 19 ++ .../Markers/Spawners/demiplane_rifts.yml | 14 ++ .../_CP14/Entities/Markers/Spawners/mobs.yml | 16 ++ .../_CP14/Entities/Mobs/NPC/Flem.yml | 100 ++++++++ .../Entities/Objects/Consumable/Food/meat.yml | 232 ++++++++++++++++++ .../Demiplane/Modifiers/Danger/mobs.yml | 20 ++ .../Recipes/Workbench/CookingTable/pies.yml | 18 ++ .../_CP14/Recipes/Workbench/sewing_table.yml | 28 +++ .../_CP14/SoundCollections/animals.yml | 8 + Resources/Prototypes/_CP14/ai_factions.yml | 15 ++ .../fish_mask.rsi/equipped-HELMET-carcat.png | Bin 0 -> 1191 bytes .../fish_mask.rsi/equipped-HELMET-goblin.png | Bin 0 -> 1026 bytes .../Armor/fish_mask.rsi/equipped-HELMET.png | Bin 0 -> 1271 bytes .../Produced/Armor/fish_mask.rsi/icon.png | Bin 0 -> 454 bytes .../Produced/Armor/fish_mask.rsi/meta.json | 26 ++ .../equipped-OUTERCLOTHING-carcat.png | Bin 0 -> 1141 bytes .../equipped-OUTERCLOTHING-goblin.png | Bin 0 -> 875 bytes .../fish_suit.rsi/equipped-OUTERCLOTHING.png | Bin 0 -> 951 bytes .../OuterClothing/fish_suit.rsi/icon.png | Bin 0 -> 423 bytes .../OuterClothing/fish_suit.rsi/meta.json | 26 ++ .../_CP14/Mobs/Monster/flem.rsi/flem_dead.png | Bin 0 -> 592 bytes .../_CP14/Mobs/Monster/flem.rsi/flem_live.png | Bin 0 -> 2718 bytes .../_CP14/Mobs/Monster/flem.rsi/meta.json | 18 ++ .../Consumable/Food/meat.rsi/flem_head.png | Bin 0 -> 497 bytes .../Food/meat.rsi/flem_head_cooked.png | Bin 0 -> 497 bytes .../Consumable/Food/meat.rsi/flem_leg.png | Bin 0 -> 234 bytes .../Food/meat.rsi/flem_leg_cooked.png | Bin 0 -> 267 bytes .../Consumable/Food/meat.rsi/flem_torso.png | Bin 0 -> 414 bytes .../Food/meat.rsi/flem_torso_cooked.png | Bin 0 -> 478 bytes .../Food/meat.rsi/flem_torso_cut.png | Bin 0 -> 350 bytes .../Food/meat.rsi/flem_torso_cut_cooked.png | Bin 0 -> 383 bytes .../Consumable/Food/meat.rsi/meta.json | 24 ++ 40 files changed, 598 insertions(+) create mode 100644 Resources/Audio/_CP14/Animals/flem1.ogg create mode 100644 Resources/Audio/_CP14/Animals/flem2.ogg create mode 100644 Resources/Audio/_CP14/Animals/flem3.ogg create mode 100644 Resources/Prototypes/_CP14/Entities/Mobs/NPC/Flem.yml create mode 100644 Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET-carcat.png create mode 100644 Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET-goblin.png create mode 100644 Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/equipped-OUTERCLOTHING-carcat.png create mode 100644 Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/equipped-OUTERCLOTHING-goblin.png create mode 100644 Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/icon.png create mode 100644 Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Mobs/Monster/flem.rsi/flem_dead.png create mode 100644 Resources/Textures/_CP14/Mobs/Monster/flem.rsi/flem_live.png create mode 100644 Resources/Textures/_CP14/Mobs/Monster/flem.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_head.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_head_cooked.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_leg.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_leg_cooked.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cooked.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut.png create mode 100644 Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut_cooked.png diff --git a/Resources/Audio/_CP14/Animals/attributions.yml b/Resources/Audio/_CP14/Animals/attributions.yml index 40e12e1430..9e92d865f1 100644 --- a/Resources/Audio/_CP14/Animals/attributions.yml +++ b/Resources/Audio/_CP14/Animals/attributions.yml @@ -67,3 +67,8 @@ license: "CC-BY-4.0" copyright: 'by iainmccurdy of Freesound.org. Cropped and mixed from stereo to mono.' source: "https://freesound.org/people/iainmccurdy/sounds/743820/" + +- files: ["flem1.ogg, flem2.ogg, flem3.ogg"] + license: "CC0-1.0" + copyright: 'by muckypete7 of Freesound.org. Cropped and mixed from stereo to mono.' + source: "https://freesound.org/people/mucky_pete7/sounds/574208/" diff --git a/Resources/Audio/_CP14/Animals/flem1.ogg b/Resources/Audio/_CP14/Animals/flem1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fb2fe0158836bbf19d23a371cb8b195c02b3890d GIT binary patch literal 49094 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

d)izk9^wosCp0-R_f3}HcB$S^W~|> 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 ovcsJ@J%V&Nz)wB-+Tfs)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/Audio/_CP14/Animals/flem3.ogg b/Resources/Audio/_CP14/Animals/flem3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8a2d6855ed799b5537d0eb8640605f6f0b5456f5 GIT binary patch literal 24202 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 FV1fe-OO5~l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET-goblin.png b/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET-goblin.png new file mode 100644 index 0000000000000000000000000000000000000000..00c468d1d316843542167c539597dad803304c99 GIT binary patch literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGojKx9jP7LeL$-HD>VBX{D;uumf z=j|QC9HBr7_7C>QSXFLtTxoI4>GHj`gwJjAqXUl|e0EvPC@IR2v9>U@D0%VV!pX*o zB?U%>FBVKRC@IwNy=8G@iEqyAE@n?|lcz-oD)^qr^6y}tQhq)7|9;LY_L}#_GdOr{)?dw8Sh-U3x7d;thO51y^3$&OSbtAv+%h}I-Q@rC?auyt{-2h* z%FUwYlwlhEf&EYI@#wSDD(7i=NgMorHka{$PTamJNBhLPEo%NA3O@T@^_o)gqBQqe z388x)d_5*Ch!b3lKXfr(r|XB*0@+06&rUhLGV3pUUtzb1UYzWIN4h3us!dVoPsgyG zZhJpk?KQOuov+;;cjt~Vo9YCHw+8&?Z4-bId{2g3dso=;<>~yg>yK}Z-M*zX<%FbT z*hVuy{)6j&hL!HEFFHTq~|w8}=<-tDIa|d|oFaZqA+;pI&bKS@Cn5@S3>O>+}+V!gm4| z7Kp5BUtqJvpC{o)^*+(5i4|dW=Hh;8PIE%)6|_%tGu_%*_)+r9QoqctTw2fPt}i|7 zz4raayd%@60%NB)OFho_+H7Hwxjj*JrFJ*&g+@)j#K`bALTaLws+a)RcYU@OHP?aS zrMlK0Dbir$?n^-N|A_F`9H>UU8&+q_+#$B^Tvy!3**B^!nB^5w0{Tl33n;rbBj nuinvGHTC*yWhFEqbx}XE@1EAvik~NenVP}V)z4*}Q$iB}n(fgv literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET.png b/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..1f90f622b1c426b5a3331962f38cd9e10550a3a2 GIT binary patch literal 1271 zcmVPx(u}MThRCt{2+%ae*RTu~Gf5hUl879Hq&B7KAXO0jLav>5;#)A~65EN_#iDDNl zEG(?Hh>#+ng_Xq?79q7F*oG~-4 zxc?6Vd6{M2_r3SN+1(-^Ktx1DM0D*&(zvNrsYcfHlpfa)j!^&hi&W-H!)srCAHDV9 z9X>(5h(|0U@gs>LtgzN3Gv=_y#1Y9u{Z8VYNh(cOiGuD{(~SU_QIGnM#X zmcF4{{3JE5OHU?jd21(9u@)vvUDw|I^b<7Relz;@v-doiz0i00jOy%zRP262vONs#GI;W#!7rQ3{hK80I*DYLvzIgRp%8 z-*fdijx`qe=lWXMz7U;P^byoJK1AT3cLlE`lgJvYQjPNE5`rLrVHj89RO28BFk{cd zv*Zqu$W3yq>rv4v<7pKD#AWT&YH;ffgg<_hi7I&GyPqNeC|kDy#3#RB4y}`>emphm z#{huezx-(E9EPrd-0FHXW6#5DG<5|ihB@9fRwrr3p2t4cqpWO#*J$eB4Z}d=_z=nW zvSbCQ*XPTF58D4B@(9{@9^=8sAL?=P6cr{*`t+FjB4+I(9{%vN#Iz#R;v0qmGhggq z0e7Z#4!-BYL$hnsh9R;6Gxj_h^<$kx;GcJ$e8u-%{T$tQ9!pF;w07$hV})1r>GnN$ zVC=wU6|`HYBJ+#A2Uv467|o5sFpPn(3xWWhu!H*EerDbSfcPWmtM^_9fM>=J0RQ~) zCtBMZBJqnD-@e6(Aqq6tV*kCf+$Uy|rT6xKGQuzi7|Rlah~tv8SxyOqhs zS8jUzL_|bHL_|bHL_|bHL_|bHL_|bHL_|bHFQiod+hciaNB2{ZZf{Ur6U6)~?2?RHJ)~ z_feQE!Ku{%Ty`AU+jZccxLxI(Rm)pDk$d7|Z`T2EnS)cSp)gs(y~X>YZFj^QHUYq_ zy`+D4YBgQLK%8J!D?y$7VGjTu?<-I;C%qV6Xy|tIAGPj zK#kK#Kw58{;hC?;DmRs@1knn3;yl8vy`%#LZqCB@>W#Z!ZW2T`ps=G%0RJo7Wv zF|n8G{x~RhAZ}X&KrDw;7D8Px$fJsC_RA__&A96~~i9Zv-DJX69S&N*NHkOY)cN-3q3QtFS|%A;uaz89y* zkC!L8^hk*p@80)ftKI;>bsTDk2S9#7M2oHt4-oiEcFiIHvzKu$A-1Io)voU1qxLbC z{VJ~G0A#}to?N_lZ|%{NA{Jm()9z%)uH(>Z+qBv?R=pt}Vn?db*T*NX;}N@NF}w2s zM#+?Fv61)=1pbo1UjoUa(`wsm>(kLhw4Ydj&eI}ii`K=$EE1FiDsUbZep>@5UPwyI1=6UtTGBHXfQ5X@05e1|0`pQc5YMl=|Pk0rks=j8W?Z{r~^~07*qoM6N<$f;(2l2><{9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/meta.json b/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/meta.json new file mode 100644 index 0000000000..c2910829fc --- /dev/null +++ b/Resources/Textures/_CP14/Clothing/Head/Produced/Armor/fish_mask.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "All right reserved", + "copyright": "Created by Frogoo", + "size": { + "x": 48, + "y": 48 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "equipped-HELMET-carcat", + "directions": 4 + }, + { + "name": "equipped-HELMET-goblin", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/equipped-OUTERCLOTHING-carcat.png b/Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/equipped-OUTERCLOTHING-carcat.png new file mode 100644 index 0000000000000000000000000000000000000000..d79f9316eed70463b28efc5619fcb47d77f9c72a GIT binary patch literal 1141 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 Z`~lQw3^?T4eEk3b002ovPDHLkV1nXQzQ_Oo literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/icon.png b/Resources/Textures/_CP14/Clothing/OuterClothing/fish_suit.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..844ce06d7b94a28380028a9daae7d9d7e0170fb3 GIT binary patch literal 423 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_head_cooked.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_head_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..73414215c24e65b8f53df7757738b15ba87c27e4 GIT binary patch literal 497 zcmVPx$t4TybR9J=WlR-|xKp2Hz4b`MlYzzrCwj{VBQFd%RfVUv*IgxvBK@2x=i3uwg z6qN>q+Cr03!nnX0X*(T?8(s8m+RnWB|8L$*fn2$A{jsD&%-vRl(DzIABrp<`q0DG@(~vn&s_+ZuPh z@DehR9i;)uS_P&C0BT~+G}XlA6#@kA95~g5KqV=RPAq0z|30NAurGQ5@E0;%B6H6+ zuE3q6-J2x-IxaxFH<2CyQn}csKzDm)oHNhoXvXGB#iK+Gm&lQC+vS4^?|}V2-ahHT n+lR<56mR#ra^=dE>tE;#Qf08qy_J8z00000NkvXXu0mjf)}P!N literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_leg.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_leg.png new file mode 100644 index 0000000000000000000000000000000000000000..a754176833f7fd23ead9ea1e3f07b286a8a4d1d8 GIT binary patch literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}OFUg1Ln2z= zo-^b+I|_o+;sfb>l9^eR&^C iSM!-3lSuw|O7=5@(e8MmxrspcGI+ZBxvX=&onI%tivw%D^2q^Q5 z$HYZ+^d~;AzxMx~x1R7*jzzKsHerwLL9&w>q?x;WIJ%Y^eE5Ibyv^SKobP0l+XkKF~(id literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso.png new file mode 100644 index 0000000000000000000000000000000000000000..10c9c8940d0666c54384e9964411e3ffa82dc3ad GIT binary patch literal 414 zcmV;P0b%}$P)Px$SV=@dR9J=Wls`+uKp2OAii2%mQZOk(2gN@KI=Bhq;I8PGD1HmUp`XG*{0ffl z4lX)5C`hH~5NWR`(YilE@Q;jj=Tf>iU}X+3y8dpXqRu z#9uILE07{7y{QxlD%A>BPtPZIjg!DvI)va1akt|vB1Hnh8HmWKe(Dj3_daAJ1QF>z zSLDxI$qCLNrF05*63_us8YQ%-VV%c4W6O?W?bE2$&eX68n~TOzn}2H__W=CNi^1iY zb$_R66}8%hpJ{1(6GWtg-yWXEo^c6x7MLbeCd}jUcswS)0lb8TX!IT;7XSbN07*qo IM6N<$g0w@eUH||9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cooked.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..344eb30815379c2261c1fede4399a52ebf12e736 GIT binary patch literal 478 zcmV<40U`d0P)Px$m`OxIR9J=Wls`+uKp2OgiczRqDzr30>!OJG2N%JuOLxW1$=#3OC-4)9yPF@v z#X%fgM2Ax9VhgqyY)sQYZ1fyzkEGUKii68N%iVkT-uwIAT`r)}Xf*#!Vw~j4>8=RJ zAFobiUU=`Uom`JqGgfl-xG1{G2`N&mwE?g@KIxh1NbXW$9)RVOt5~&_N!8<`c&xQ# zY^zRT@`u18`v$z(nw1;Q;5>G#{XOvFtbEF6x*ec^ft z*TWG87yB!bS2MN&M;HWki*ETz9&K1?SRWv$TNDa&_)ZHIBd@^j_?Whbkz&3R z;a&HHq50h4@bX1jKi1#syp)Z6Oj|1{jC4*4-&KC@G>&*|1Eb80Bc{=4G@4<20pc>H UF4DVlKmY&$07*qoM6N<$f=pH3qyPW_ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..6b5baabd776bb4c56b68aeb41b6c91e5ef2dd014 GIT binary patch literal 350 zcmV-k0iphhP)Px$7)eAyR9J=Wld(#}KpclZ!L8u}X)7o~sF4nWqo5A%f{)?QcM#lshYrP8aCCQY z(aAwUjG}`=t||0L3Z3F07aD80ggOY`HyzyX?)x3wA1oG&#q!@-suMoCxXsG;R4f6w zIzFs*XQlA0SjCdp#}I&YIHJ+=3R%A!)GA^O9SklrE!0vITl+heODvn@Yn@F1?yqkE zXtX>=VK|rdf`IM4T>u>6^8WHdL z#gb_{S-ikBosg(;;blJw;p=lINm5BVi}90eob;29Y=n`dn>LUVRcz#-I{w)@Z#qwwP1V=t!Pm?2W$p8QV07*qoM6N<$f}Hx5y#N3J literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut_cooked.png b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/flem_torso_cut_cooked.png new file mode 100644 index 0000000000000000000000000000000000000000..11b106e901ae3d8d82fe10c6b3426ba11ab55381 GIT binary patch literal 383 zcmV-_0f7FAP)Px$IY~r8R9J=WlgmoOKp2I;G;IoLT1vejYAS-L3w7U}ui(lT@eN$~2tI%-SH6QA zH?9;hxG7$cc%g(gi6l0T3vEbgWm0eF^H literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/meta.json b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/meta.json index 8c9437e21a..6713b24a90 100644 --- a/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/Consumable/Food/meat.rsi/meta.json @@ -147,6 +147,30 @@ }, { "name": "different_meat_slice" + }, + { + "name": "flem_head" + }, + { + "name": "flem_head_cooked" + }, + { + "name": "flem_torso" + }, + { + "name": "flem_torso_cut" + }, + { + "name": "flem_torso_cut_cooked" + }, + { + "name": "flem_torso_cooked" + }, + { + "name": "flem_leg" + }, + { + "name": "flem_leg_cooked" } ] } \ No newline at end of file From 32be823619a5f50e503e8b7a910322c2c30e18d2 Mon Sep 17 00:00:00 2001 From: CrystallEdge Server Date: Fri, 13 Jun 2025 13:26:38 +0300 Subject: [PATCH 10/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 8e27116958..8c93e98eef 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -360,3 +360,14 @@ id: 8088 time: '2025-06-13T09:24:36.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1413 +- author: Fr0goo + changes: + - message: Added new creature named Flem! You can find them in demiplanes. + type: Add + - message: Added fish suit and mask! + type: Add + - message: Added a probaly temporary way to make fish pie! + type: Add + id: 8089 + time: '2025-06-13T10:25:33.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1402 From 422a0c5e1056d180fec997798096df4a47169fa2 Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Fri, 13 Jun 2025 14:15:48 +0300 Subject: [PATCH 11/27] Gods and religions (#1405) * basic religion vision * block god interactions * skill tree mob specify * silvania setup?? * clustering shader optimization * gods department & job * random gods jobs * Luxian god * Update Nature.png * Update sphere_of_light.yml * god chat * Update ChatSystem.cs * OBSERVATION * public observation and basic follower api * shader tweaks * improve shaders * spawning and praying on altars * altars ppvs override * move pvs overridiation from altars to observers * shader coloration * spectral z mover * god magic radius restricted * guide how to believe in god * sends messages to god when smoeone wanna become follower * follower doAfter * goodbye luxian, welcome lumera * goodbye silvania, welcome merkas * som polish and renamings * gods fast travel * Update altar.ftl * some lumera sfx * renouncing patrons! * renounce followers * followewr percentage calculation * remove from player-facing * fix * Update sphere_of_light.yml * Update base.yml --- .../Religion/CP14ClientReligionGodSystem.cs | 83 ++++++++ .../CP14ReligionEntityBoundUserInterface.cs | 35 ++++ .../Religion/CP14ReligionEntityWindow.xaml | 28 +++ .../Religion/CP14ReligionEntityWindow.xaml.cs | 69 +++++++ .../Religion/CP14ReligionVisionOverlay.cs | 148 +++++++++++++++ .../Systems/Skill/CP14SkillUIController.cs | 28 +-- Content.Server/Chat/Systems/ChatSystem.cs | 14 ++ .../Components/SpawnPointComponent.cs | 3 + .../EntitySystems/SpawnPointSystem.cs | 9 + .../CP14DemiplaneTravelingSystem.cs | 3 + .../CP14StationRandomJobsComponent.cs | 26 +++ .../RandomJobs/CP14StationRandomJobsSystem.cs | 52 +++++ .../_CP14/Religion/CP14ReligionSystem.UI.cs | 75 ++++++++ .../_CP14/Religion/CP14ReligionSystem.cs | 177 ++++++++++++++++++ .../CP14StationZLevelsSystem.Actions.cs | 31 ++- Content.Shared/Verbs/VerbCategory.cs | 6 - .../CP14SharedMagicSystem.Checks.cs | 19 ++ ...4MagicEffectReligionRestrictedComponent.cs | 12 ++ .../MagicSpell/Spells/CP14SpellGodRenounce.cs | 23 +++ .../MagicSpell/Spells/CP14SpellGodTouch.cs | 24 +++ .../Components/CP14ReligionAltarComponent.cs | 16 ++ .../Components/CP14ReligionEntityComponent.cs | 27 +++ .../CP14ReligionFollowerComponent.cs | 25 +++ .../CP14ReligionObserverComponent.cs | 19 ++ .../CP14ReligionPendingFollowerComponent.cs | 17 ++ .../Components/CP14ReligionVisionComponent.cs | 14 ++ .../Prototypes/CP14ReligionPrototype.cs | 18 ++ .../CP14SharedReligionGodSystem.Altars.cs | 106 +++++++++++ .../CP14SharedReligionGodSystem.Followers.cs | 154 +++++++++++++++ ...CP14SharedReligionGodSystem.Observation.cs | 96 ++++++++++ .../Systems/CP14SharedReligionGodSystem.UI.cs | 23 +++ .../Systems/CP14SharedReligionGodSystem.cs | 46 +++++ .../_CP14/Skill/CP14SharedSkillSystem.cs | 4 + .../_CP14/Skill/CP14SkillSystem.Admin.cs | 42 ----- .../Components/CP14SkillStorageComponent.cs | 8 +- .../Prototypes/CP14SkillTreePrototype.cs | 3 - .../Restrictions/GodFollowerPercentage.cs | 27 +++ .../Locale/en-US/_CP14/headset/radio.ftl | 1 + .../Locale/en-US/_CP14/job/department.ftl | 5 +- Resources/Locale/en-US/_CP14/job/job.ftl | 10 +- .../Locale/en-US/_CP14/religion/altar.ftl | 19 ++ .../Locale/en-US/_CP14/skill/requirements.ftl | 3 +- .../en-US/_CP14/skill/skill_meta_gods.ftl | 3 + .../Locale/ru-RU/_CP14/headset/radio.ftl | 1 + .../Locale/ru-RU/_CP14/job/department.ftl | 5 +- Resources/Locale/ru-RU/_CP14/job/job.ftl | 10 +- .../Locale/ru-RU/_CP14/religion/altar.ftl | 19 ++ .../Locale/ru-RU/_CP14/skill/requirements.ftl | 3 +- .../ru-RU/_CP14/skill/skill_meta_gods.ftl | 3 + Resources/Prototypes/_CP14/Alerts/alerts.yml | 8 + .../Spells/Demigods/Lumera/renounce.yml | 45 +++++ .../Actions/Spells/Demigods/Lumera/touch.yml | 49 +++++ .../Actions/Spells/Demigods/Lumera/warp.yml | 12 ++ .../Actions/Spells/Demigods/generic.yml | 13 ++ .../Entities/Mobs/Player/Demigods/gods.yml | 113 +++++++++++ .../_CP14/Entities/Mobs/Species/base.yml | 1 - .../Prototypes/_CP14/Entities/Mobs/base.yml | 10 + .../_CP14/Entities/Stations/base.yml | 14 ++ .../_CP14/Entities/Structures/Flora/trees.yml | 1 - .../Structures/Specific/Religion/base.yml | 35 ++++ .../Specific/Religion/primordial.yml | 35 ++++ .../Prototypes/_CP14/Religion/religions.yml | 5 + .../_CP14/Roles/Jobs/Demigods/lumera.yml | 16 ++ .../_CP14/Roles/Jobs/Demigods/merkas.yml | 16 ++ .../_CP14/Roles/Jobs/departments.yml | 16 +- .../_CP14/Roles/play_time_tracker.yml | 6 + .../Prototypes/_CP14/Shaders/shaders.yml | 5 + .../_CP14/Skill/{ => Basic}/atlethic.yml | 0 .../_CP14/Skill/{ => Basic}/craftsmanship.yml | 0 .../_CP14/Skill/{ => Basic}/dimension.yml | 0 .../_CP14/Skill/{ => Basic}/healing.yml | 0 .../Skill/{ => Basic}/hydrosophistry.yml | 0 .../_CP14/Skill/{ => Basic}/illusion.yml | 0 .../_CP14/Skill/{ => Basic}/martial_arts.yml | 0 .../_CP14/Skill/{ => Basic}/metamagic.yml | 0 .../_CP14/Skill/{ => Basic}/pyrokinetic.yml | 0 .../Skill/{skill_tree.yml => Basic/trees.yml} | 24 --- .../_CP14/Skill/Demigods/lumera.yml | 75 ++++++++ .../_CP14/Skill/Demigods/merkas.yml | 12 ++ .../Prototypes/_CP14/Skill/Demigods/trees.yml | 12 ++ .../Prototypes/_CP14/StatusIcon/god_job.yml | 15 ++ Resources/Prototypes/_CP14/radio_channels.yml | 7 + .../DemigodSpells/lumera.rsi/meta.json | 29 +++ .../DemigodSpells/lumera.rsi/renounce.png | Bin 0 -> 422 bytes .../Actions/DemigodSpells/lumera.rsi/t1.png | Bin 0 -> 229 bytes .../Actions/DemigodSpells/lumera.rsi/t2.png | Bin 0 -> 358 bytes .../Actions/DemigodSpells/lumera.rsi/t3.png | Bin 0 -> 375 bytes .../DemigodSpells/lumera.rsi/touch.png | Bin 0 -> 359 bytes .../Actions/DemigodSpells/lumera.rsi/warp.png | Bin 0 -> 477 bytes .../Effects/Magic/cast_impact.rsi/meta.json | 15 ++ .../Effects/Magic/cast_impact.rsi/stars.png | Bin 0 -> 3230 bytes .../Alerts/divine_offer.rsi/meta.json | 19 ++ .../Alerts/divine_offer.rsi/offer.png | Bin 0 -> 396 bytes .../Alerts/divine_offer.rsi/unoffer.png | Bin 0 -> 776 bytes .../Misc/job_god_icons.rsi/Lumera.png | Bin 0 -> 247 bytes .../Misc/job_god_icons.rsi/Merkas.png | Bin 0 -> 214 bytes .../Misc/job_god_icons.rsi/meta.json | 17 ++ .../Mobs/Demigods/temp_icons.rsi/lumera.png | Bin 0 -> 1990 bytes .../Mobs/Demigods/temp_icons.rsi/merkas.png | Bin 0 -> 1096 bytes .../Mobs/Demigods/temp_icons.rsi/meta.json | 19 ++ .../Textures/_CP14/Shaders/religion.swsl | 84 +++++++++ 101 files changed, 2217 insertions(+), 103 deletions(-) create mode 100644 Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs create mode 100644 Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs create mode 100644 Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml create mode 100644 Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs create mode 100644 Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs create mode 100644 Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs create mode 100644 Content.Server/_CP14/RandomJobs/CP14StationRandomJobsSystem.cs create mode 100644 Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs create mode 100644 Content.Server/_CP14/Religion/CP14ReligionSystem.cs create mode 100644 Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodRenounce.cs create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionAltarComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionEntityComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionObserverComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionPendingFollowerComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionVisionComponent.cs create mode 100644 Content.Shared/_CP14/Religion/Prototypes/CP14ReligionPrototype.cs create mode 100644 Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs create mode 100644 Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs create mode 100644 Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs create mode 100644 Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs create mode 100644 Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs create mode 100644 Content.Shared/_CP14/Skill/Restrictions/GodFollowerPercentage.cs create mode 100644 Resources/Locale/en-US/_CP14/headset/radio.ftl create mode 100644 Resources/Locale/en-US/_CP14/religion/altar.ftl create mode 100644 Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/headset/radio.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/religion/altar.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/warp.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml create mode 100644 Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml create mode 100644 Resources/Prototypes/_CP14/Religion/religions.yml create mode 100644 Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml create mode 100644 Resources/Prototypes/_CP14/Roles/Jobs/Demigods/merkas.yml rename Resources/Prototypes/_CP14/Skill/{ => Basic}/atlethic.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/craftsmanship.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/dimension.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/healing.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/hydrosophistry.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/illusion.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/martial_arts.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/metamagic.yml (100%) rename Resources/Prototypes/_CP14/Skill/{ => Basic}/pyrokinetic.yml (100%) rename Resources/Prototypes/_CP14/Skill/{skill_tree.yml => Basic/trees.yml} (75%) create mode 100644 Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml create mode 100644 Resources/Prototypes/_CP14/Skill/Demigods/merkas.yml create mode 100644 Resources/Prototypes/_CP14/Skill/Demigods/trees.yml create mode 100644 Resources/Prototypes/_CP14/StatusIcon/god_job.yml create mode 100644 Resources/Prototypes/_CP14/radio_channels.yml create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/renounce.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t1.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t2.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t3.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/touch.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/warp.png create mode 100644 Resources/Textures/_CP14/Effects/Magic/cast_impact.rsi/stars.png create mode 100644 Resources/Textures/_CP14/Interface/Alerts/divine_offer.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Interface/Alerts/divine_offer.rsi/offer.png create mode 100644 Resources/Textures/_CP14/Interface/Alerts/divine_offer.rsi/unoffer.png create mode 100644 Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/Lumera.png create mode 100644 Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/Merkas.png create mode 100644 Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/lumera.png create mode 100644 Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/merkas.png create mode 100644 Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Shaders/religion.swsl diff --git a/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs b/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs new file mode 100644 index 0000000000..3be4e03fdb --- /dev/null +++ b/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs @@ -0,0 +1,83 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Client._CP14.Religion; + +public sealed partial class CP14ClientReligionGodSystem : CP14SharedReligionGodSystem +{ + [Dependency] private readonly IOverlayManager _overlayMgr = default!; + [Dependency] private readonly IPlayerManager _player = default!; + + private CP14ReligionVisionOverlay? _overlay; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnOverlayInit); + SubscribeLocalEvent(OnOverlayRemove); + } + + protected override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) { } + + public override void Shutdown() + { + base.Shutdown(); + _overlayMgr.RemoveOverlay(); + } + + private void OnPlayerAttached(Entity ent, ref LocalPlayerAttachedEvent args) + { + AddOverlay(); + } + + private void OnPlayerDetached(Entity ent, ref LocalPlayerDetachedEvent args) + { + RemoveOverlay(); + } + + private void OnOverlayInit(Entity ent, ref ComponentInit args) + { + var attachedEnt = _player.LocalEntity; + + if (attachedEnt != ent.Owner) + return; + + AddOverlay(); + } + + private void OnOverlayRemove(Entity ent, ref ComponentRemove args) + { + var attachedEnt = _player.LocalEntity; + + if (attachedEnt != ent.Owner) + return; + + RemoveOverlay(); + } + + private void AddOverlay() + { + if (_overlay != null) + return; + + _overlay = new CP14ReligionVisionOverlay(); + _overlayMgr.AddOverlay(_overlay); + } + + private void RemoveOverlay() + { + if (_overlay == null) + return; + + _overlayMgr.RemoveOverlay(_overlay); + _overlay = null; + } +} diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs b/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs new file mode 100644 index 0000000000..ba517f05d8 --- /dev/null +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs @@ -0,0 +1,35 @@ +using Content.Client._CP14.DemiplaneTraveling; +using Content.Shared._CP14.DemiplaneTraveling; +using Content.Shared._CP14.Religion.Systems; +using Robust.Client.UserInterface; + +namespace Content.Client._CP14.Religion; + +public sealed class CP14ReligionEntityBoundUserInterface : BoundUserInterface +{ + private CP14ReligionEntityWindow? _window; + + public CP14ReligionEntityBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + + _window.OnTeleportAttempt += netId => SendMessage(new CP14ReligionEntityTeleportAttempt(netId)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_window == null || state is not CP14ReligionEntityUiState mapState) + return; + + _window?.UpdateState(mapState); + } +} diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml new file mode 100644 index 0000000000..5242a4bbdf --- /dev/null +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml @@ -0,0 +1,28 @@ + + + + + + + + + + + diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs new file mode 100644 index 0000000000..18f98380bb --- /dev/null +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs @@ -0,0 +1,69 @@ +using Content.Shared._CP14.Religion.Systems; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client._CP14.Religion; + +[GenerateTypedNameReferences] +public sealed partial class CP14ReligionEntityWindow : DefaultWindow +{ + [Dependency] private readonly ILogManager _log = default!; + private ISawmill Sawmill { get; init; } + + public event Action? OnTeleportAttempt; + + public CP14ReligionEntityWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + + Sawmill = _log.GetSawmill("cp14_religion_entity_window"); + } + + public void UpdateState(CP14ReligionEntityUiState state) + { + AltarsContainer.RemoveAllChildren(); + FollowersContainer.RemoveAllChildren(); + + Altars.Visible = state.Altars.Count > 0; + Followers.Visible = state.Followers.Count > 0; + + foreach (var (netId, name) in state.Altars) + { + var btn = new Button + { + Text = name, + HorizontalAlignment = HAlignment.Center + }; + + btn.OnPressed += _ => + { + OnTeleportAttempt?.Invoke(netId); + }; + AltarsContainer.AddChild(btn); + } + + foreach (var (netId, name) in state.Followers) + { + var btn = new Button + { + Text = name, + HorizontalAlignment = HAlignment.Center + }; + + btn.OnPressed += _ => + { + OnTeleportAttempt?.Invoke(netId); + }; + FollowersContainer.AddChild(btn); + } + Status.Text = GetStatusText(state); + } + + private string GetStatusText(CP14ReligionEntityUiState state) + { + return Loc.GetString("cp14-god-ui-follower-percentage", ("count", state.FollowerPercentage * 100)); + } +} diff --git a/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs b/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs new file mode 100644 index 0000000000..ce1b5405fc --- /dev/null +++ b/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs @@ -0,0 +1,148 @@ +using System.Numerics; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; + +namespace Content.Client._CP14.Religion; + +public sealed class CP14ReligionVisionOverlay : Overlay +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + private readonly SharedTransformSystem _transform; + + ///

+ /// Maximum number of observers zones that can be shown on screen at a time. + /// If this value is changed, the shader itself also needs to be updated. + /// + public const int MaxCount = 64; + + public override bool RequestScreenTexture => true; + public override OverlaySpace Space => OverlaySpace.WorldSpace; + + private readonly ProtoId? _religion = null; + + private readonly ShaderInstance _religionShader; + private readonly Vector2[] _positions = new Vector2[MaxCount]; + private readonly float[] _radii = new float[MaxCount]; + private int _count = 0; + public CP14ReligionVisionOverlay() + { + IoCManager.InjectDependencies(this); + + _religionShader = _proto.Index("CP14ReligionVision").InstanceUnique(); + + _transform = _entManager.System(); + + if (_entManager.TryGetComponent(_player.LocalEntity, out var vision)) + { + _religion = vision.Religion; + } + } + + + protected override bool BeforeDraw(in OverlayDrawArgs args) + { + if (args.Viewport.Eye == null) + return false; + + _count = 0; + + var clusters = new List(); + var religionQuery = _entManager.AllEntityQueryEnumerator(); + while (religionQuery.MoveNext(out var uid, out var rel, out var xform)) + { + if (_religion is null) + continue; + + var observation = rel.Observation; + if (!observation.ContainsKey(_religion.Value)) + continue; + + if (!rel.Active || xform.MapID != args.MapId) + continue; + + var mapPos = _transform.GetWorldPosition(uid); + + // To be clear, this needs to use "inside-viewport" pixels. + // In other words, specifically NOT IViewportControl.WorldToScreen (which uses outer coordinates). + var tempCoords = args.Viewport.WorldToLocal(mapPos); + tempCoords.Y = args.Viewport.Size.Y - tempCoords.Y; // Local space to fragment space. + + // try find cluster to merge with + bool merged = false; + foreach (var cluster in clusters) + { + if ((cluster.Position - tempCoords).Length() < 150f) + { + cluster.Add(tempCoords, rel.Observation[_religion.Value]); + merged = true; + break; + } + } + + if (!merged) + clusters.Add(new Cluster(tempCoords, rel.Observation[_religion.Value])); + + if (clusters.Count >= MaxCount) + break; + } + + _count = 0; + foreach (var cluster in clusters) + { + _positions[_count] = cluster.Position; + _radii[_count] = cluster.Radius; + _count++; + } + + return true; + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (ScreenTexture == null || args.Viewport.Eye == null) + return; + + if (!_entManager.TryGetComponent(_player.LocalEntity, out var visionComponent)) + return; + + _religionShader?.SetParameter("shaderColor", visionComponent.ShaderColor); + _religionShader?.SetParameter("renderScale", args.Viewport.RenderScale * args.Viewport.Eye.Scale); + _religionShader?.SetParameter("count", _count); + _religionShader?.SetParameter("position", _positions); + _religionShader?.SetParameter("radius", _radii); + _religionShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); + + var worldHandle = args.WorldHandle; + worldHandle.UseShader(_religionShader); + worldHandle.DrawRect(args.WorldAABB, Color.White); + worldHandle.UseShader(null); + } + + private sealed class Cluster + { + public Vector2 Position; + public float Radius; + public int Count; + + public Cluster(Vector2 pos, float radius) + { + Position = pos; + Radius = radius; + Count = 1; + } + + public void Add(Vector2 pos, float radius) + { + Position = (Position * Count + pos) / (Count + 1); + Radius = Math.Max(Radius, radius); + Count++; + } + } +} diff --git a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs index 3dfd6f5667..27c0992964 100644 --- a/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs +++ b/Content.Client/_CP14/UserInterface/Systems/Skill/CP14SkillUIController.cs @@ -37,7 +37,6 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered _allSkills = []; - private IEnumerable _allTrees = []; private CP14SkillPrototype? _selectedSkill; private CP14SkillTreePrototype? _selectedSkillTree; @@ -72,7 +71,6 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered(); - _allTrees = _proto.EnumeratePrototypes().OrderBy(tree => Loc.GetString(tree.Name)); } public void OnStateExited(GameplayState state) @@ -293,9 +291,9 @@ public sealed class CP14SkillUIController : UIController, IOnStateEntered { - SelectTree(tree, storage); + SelectTree(indexedTree); }; _window.TreeTabsContainer.AddChild(treeButton2); } } - private void SelectTree(CP14SkillTreePrototype tree, CP14SkillStorageComponent storage) + private void SelectTree(ProtoId tree) { if (_window == null) return; - _selectedSkillTree = tree; - _window.ParallaxBackground.ParallaxPrototype = tree.Parallax; - _window.TreeName.Text = Loc.GetString(tree.Name); + if (!_proto.TryIndex(tree, out var indexedTree)) + return; + + _selectedSkillTree = indexedTree; + _window.ParallaxBackground.ParallaxPrototype = indexedTree.Parallax; + _window.TreeName.Text = Loc.GetString(indexedTree.Name); UpdateGraphControl(); } diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index fd8c1b9d5c..05547fc46b 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -6,10 +6,12 @@ using Content.Server.Administration.Managers; using Content.Server.Chat.Managers; using Content.Server.GameTicking; using Content.Server.Players.RateLimiting; +using Content.Server.Radio.EntitySystems; using Content.Server.Speech.Prototypes; using Content.Server.Speech.EntitySystems; using Content.Server.Station.Components; using Content.Server.Station.Systems; +using Content.Shared._CP14.Religion.Components; using Content.Shared.ActionBlocker; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -60,6 +62,9 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly ReplacementAccentSystem _wordreplacement = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private readonly ExamineSystemShared _examineSystem = default!; + //CP14 + [Dependency] private readonly RadioSystem _radio = default!; + //CP14 end public const int VoiceRange = 10; // how far voice goes in world units public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units @@ -174,6 +179,15 @@ public sealed partial class ChatSystem : SharedChatSystem bool ignoreActionBlocker = false ) { + //CP14 Zone + if (HasComp(source)) + { + TryProccessRadioMessage(source, message, out var modMessage, out var channel); + _radio.SendRadioMessage(source, modMessage, "CP14Gods", source); + return; + } + //CP14 Zone end + if (HasComp(source)) { // Ghosts can only send dead chat messages, so we'll forward it to InGame OOC. diff --git a/Content.Server/Spawners/Components/SpawnPointComponent.cs b/Content.Server/Spawners/Components/SpawnPointComponent.cs index c6d14dfeb3..16b24d6d62 100644 --- a/Content.Server/Spawners/Components/SpawnPointComponent.cs +++ b/Content.Server/Spawners/Components/SpawnPointComponent.cs @@ -27,4 +27,7 @@ public enum SpawnPointType LateJoin, Job, Observer, + //CP14 + Always, //Always use only these spawn point, and latejoin, and roundstart + //CP14 end } diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs index bd905e2982..56c01f64de 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs @@ -32,6 +32,15 @@ public sealed class SpawnPointSystem : EntitySystem if (args.Station != null && _stationSystem.GetOwningStation(uid, xform) != args.Station) continue; + //CP14 always spawn gods on gods spawnpoints + if (spawnPoint.SpawnType == SpawnPointType.Always && (args.Job == null || spawnPoint.Job == args.Job)) + { + possiblePositions.Clear(); + possiblePositions.Add(xform.Coordinates); + break; + } + //CP14end + if (_gameTicker.RunLevel == GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.LateJoin) { possiblePositions.Add(xform.Coordinates); diff --git a/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs b/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs index 2361534bfd..6e6516c753 100644 --- a/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs +++ b/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs @@ -6,6 +6,7 @@ using Content.Server.Popups; using Content.Shared._CP14.Demiplane; using Content.Shared._CP14.Demiplane.Components; using Content.Shared._CP14.DemiplaneTraveling; +using Content.Shared._CP14.Religion.Components; using Content.Shared.Ghost; using Content.Shared.Item; using Content.Shared.Movement.Pulling.Components; @@ -58,6 +59,8 @@ public sealed partial class CP14DemiplaneTravelingSystem : EntitySystem { if (HasComp(ent)) continue; + if (HasComp(ent)) //TODO: make some generic way to whitelist entities from teleporting + continue; if (!_mind.TryGetMind(ent, out var mindId, out var mind)) continue; diff --git a/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs new file mode 100644 index 0000000000..12c5d8582f --- /dev/null +++ b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs @@ -0,0 +1,26 @@ + +using Content.Shared.Destructible.Thresholds; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.RandomJobs; + +[RegisterComponent, Access(typeof(CP14StationRandomJobsSystem))] +public sealed partial class CP14StationRandomJobsComponent : Component +{ + [DataField] + public List Entries = new(); +} + +[Serializable, DataDefinition] +public sealed partial class CP14RandomJobEntry +{ + [DataField(required: true)] + public List> Jobs = default!; + + [DataField(required: true)] + public MinMax Count = new(1, 1); + + [DataField] + public float Prob = 1f; +} diff --git a/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsSystem.cs b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsSystem.cs new file mode 100644 index 0000000000..3440696304 --- /dev/null +++ b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsSystem.cs @@ -0,0 +1,52 @@ + +using Content.Server.Station.Events; +using Content.Server.Station.Systems; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server._CP14.RandomJobs; + +public sealed partial class CP14StationRandomJobsSystem : EntitySystem +{ + [Dependency] private readonly StationJobsSystem _jobs = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit, after: new[] { typeof(StationJobsSystem) }); + } + + private void OnInit(StationInitializedEvent args) + { + if (!TryComp(args.Station, out var randomJobs)) + return; + + foreach (var entry in randomJobs.Entries) + { + if (!_random.Prob(entry.Prob)) + continue; + + var count = entry.Count.Next(_random); + + var tempList = new List>(entry.Jobs); + + for (var i = 0; i < count; i++) + { + if (tempList.Count == 0) + break; + + var job = _random.Pick(tempList); + tempList.Remove(job); + + if (!_proto.TryIndex(job, out var jobProto)) + continue; + + _jobs.TryAdjustJobSlot(args.Station, jobProto, 1, createSlot: true); + } + } + } +} diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs new file mode 100644 index 0000000000..2716e4cfcb --- /dev/null +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs @@ -0,0 +1,75 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.Follower; +using Robust.Server.GameObjects; + +namespace Content.Server._CP14.Religion; + +public sealed partial class CP14ReligionGodSystem +{ + [Dependency] private readonly UserInterfaceSystem _userInterface = default!; + [Dependency] private readonly FollowerSystem _follower = default!; + private void InitializeUI() + { + SubscribeLocalEvent(OnOpenInterface); + SubscribeLocalEvent(OnTeleportAttempt); + } + + private void OnTeleportAttempt(Entity ent, ref CP14ReligionEntityTeleportAttempt args) + { + var target = GetEntity(args.Entity); + + var canTeleport = false; + if (TryComp(target, out var altar)) + { + if (altar.Religion == ent.Comp.Religion) + { + canTeleport = true; + } + } + else if (TryComp(target, out var follower)) + { + if (follower.Religion == ent.Comp.Religion) + { + canTeleport = true; + } + } + + if (!canTeleport) + return; + + _follower.StartFollowingEntity(ent, target); + } + + private void OnOpenInterface(Entity ent, ref OpenBoundInterfaceMessage args) + { + if (ent.Comp.Religion is null) + return; + + var altars = new Dictionary(); + var queryAltars = EntityQueryEnumerator(); + while (queryAltars.MoveNext(out var uid, out var altar, out var meta)) + { + if (altar.Religion != ent.Comp.Religion) + continue; + + altars.TryAdd(GetNetEntity(uid), meta.EntityName); + } + + var followers = new Dictionary(); + var queryFollowers = EntityQueryEnumerator(); + while (queryFollowers.MoveNext(out var uid, out var follower, out var meta)) + { + if (follower.Religion != ent.Comp.Religion) + continue; + + followers.TryAdd(GetNetEntity(uid), meta.EntityName); + } + + var followerPercentage = GetFollowerPercentage(ent); + ent.Comp.FollowerPercentage = followerPercentage; + Dirty(ent); + + _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage)); + } +} diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs new file mode 100644 index 0000000000..a64d086016 --- /dev/null +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs @@ -0,0 +1,177 @@ +using Content.Server.Chat.Managers; +using Content.Server.Speech; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.Chat; +using Robust.Server.GameStates; +using Robust.Shared.Network; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Server._CP14.Religion; + +public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem +{ + [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly PvsOverrideSystem _pvs = default!; + + public override void Initialize() + { + base.Initialize(); + InitializeUI(); + + SubscribeLocalEvent(OnObserverInit); + SubscribeLocalEvent(OnObserverHandleState); + + SubscribeLocalEvent(OnGodInit); + SubscribeLocalEvent(OnGodShutdown); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + + SubscribeLocalEvent(OnListen); + } + + private void OnObserverHandleState(Entity ent, ref AfterAutoHandleStateEvent args) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var god)) + { + UpdatePvsOverrides(new Entity(uid, god)); + } + } + + private void OnObserverInit(Entity ent, ref ComponentInit args) + { + foreach (var (religion, _) in ent.Comp.Observation) + { + var gods = GetGods(religion); + + foreach (var god in gods) + { + UpdatePvsOverrides(god); + } + } + } + + private void OnGodInit(Entity ent, ref ComponentInit args) + { + AddPvsOverrides(ent); + } + + private void OnGodShutdown(Entity ent, ref ComponentShutdown args) + { + RemovePvsOverrides(ent); + } + + private void OnPlayerAttached(Entity ent, ref PlayerAttachedEvent args) + { + AddPvsOverrides(ent); + } + + private void OnPlayerDetached(Entity ent, ref PlayerDetachedEvent args) + { + RemovePvsOverrides(ent); + } + + private void OnListen(Entity ent, ref ListenEvent args) + { + if (ent.Comp.Religion is null) + return; + + var wrappedMessage = + Loc.GetString("cp14-altar-wrapped-message", ("name", MetaData(args.Source).EntityName), ("msg", args.Message)); + + SendMessageToGods(ent.Comp.Religion.Value, wrappedMessage, args.Source); + } + + protected override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) + { + var gods = GetGods(religion); + + HashSet channels = new(); + foreach (var god in gods) + { + if (!TryComp(god, out var godActor)) + continue; + + channels.Add(godActor.PlayerSession.Channel); + } + + _chat.ChatMessageToMany(ChatChannel.Notifications, msg, msg, source, false, true, channels, colorOverride: Color.Aqua); + } + + public float GetFollowerPercentage(Entity god) + { + var total = 0; + var followers = 0; + + var allHumans = Mind.GetAliveHumans(); + foreach (var human in allHumans) + { + total++; + + if (!TryComp(human.Comp.CurrentEntity, out var relFollower)) + continue; + if (relFollower.Religion != god.Comp.Religion) + continue; + + followers++; + } + + if (total == 0) + return 0f; + + return (float)followers / total; + } + + private void AddPvsOverrides(Entity ent) + { + if (ent.Comp.Religion is null) + return; + + if (!TryComp(ent, out var actor)) + return; + + ent.Comp.Session = actor.PlayerSession; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var observer)) + { + if (!observer.Observation.ContainsKey(ent.Comp.Religion.Value)) + continue; + + if (observer.Observation[ent.Comp.Religion.Value] <= 6.5f) //Maybe there is a variable for the distance outside the screen in PVS, I don't know. This number works best + continue; + + ent.Comp.PvsOverridedObservers.Add(uid); + _pvs.AddSessionOverride(uid, actor.PlayerSession); + } + } + + private void RemovePvsOverrides(Entity ent) + { + if (ent.Comp.Religion is null) + return; + + if (ent.Comp.Session is null) + return; + + foreach (var altar in ent.Comp.PvsOverridedObservers) + { + _pvs.RemoveSessionOverride(altar, ent.Comp.Session); + } + + ent.Comp.Session = null; + ent.Comp.PvsOverridedObservers.Clear(); + } + + private void UpdatePvsOverrides(Entity ent) + { + if (ent.Comp.Session is null) + return; + + RemovePvsOverrides(ent); + AddPvsOverrides(ent); + } +} diff --git a/Content.Server/_CP14/ZLevels/EntitySystems/CP14StationZLevelsSystem.Actions.cs b/Content.Server/_CP14/ZLevels/EntitySystems/CP14StationZLevelsSystem.Actions.cs index 682d9e2383..b083cb61f8 100644 --- a/Content.Server/_CP14/ZLevels/EntitySystems/CP14StationZLevelsSystem.Actions.cs +++ b/Content.Server/_CP14/ZLevels/EntitySystems/CP14StationZLevelsSystem.Actions.cs @@ -1,4 +1,3 @@ -using System.Numerics; using Content.Shared._CP14.ZLevel; using Content.Shared.Ghost; using Robust.Shared.Map; @@ -9,11 +8,13 @@ public sealed partial class CP14StationZLevelsSystem { private void InitActions() { - SubscribeLocalEvent(OnZLevelUp); - SubscribeLocalEvent(OnZLevelDown); + SubscribeLocalEvent(OnZLevelUpGhost); + SubscribeLocalEvent(OnZLevelDownGhost); + SubscribeLocalEvent(OnZLevelUp); + SubscribeLocalEvent(OnZLevelDown); } - private void OnZLevelDown(Entity ent, ref CP14ZLevelActionDown args) + private void OnZLevelDownGhost(Entity ent, ref CP14ZLevelActionDown args) { if (args.Handled) return; @@ -23,7 +24,27 @@ public sealed partial class CP14StationZLevelsSystem args.Handled = true; } - private void OnZLevelUp(Entity ent, ref CP14ZLevelActionUp args) + private void OnZLevelUpGhost(Entity ent, ref CP14ZLevelActionUp args) + { + if (args.Handled) + return; + + ZLevelMove(ent, 1); + + args.Handled = true; + } + + private void OnZLevelDown(Entity ent, ref CP14ZLevelActionDown args) + { + if (args.Handled) + return; + + ZLevelMove(ent, -1); + + args.Handled = true; + } + + private void OnZLevelUp(Entity ent, ref CP14ZLevelActionUp args) { if (args.Handled) return; diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 880f21f58d..3a2fdb8f4e 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -49,12 +49,6 @@ namespace Content.Shared.Verbs public static readonly VerbCategory CP14RitualBook = new("cp14-verb-categories-ritual-book", null); public static readonly VerbCategory CP14CurrencyConvert = new("cp14-verb-categories-currency-converter", null); //CP14 - - public static readonly VerbCategory CP14AdminSkillAdd = - new ("cp14-verb-categories-admin-skill-add", null, iconsOnly: true) { Columns = 6 }; - - public static readonly VerbCategory CP14AdminSkillRemove = - new ("cp14-verb-categories-admin-skill-remove", null, iconsOnly: true) { Columns = 6 }; //CP14 verbs public static readonly VerbCategory Admin = diff --git a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs index efa751e987..c80a3e0cce 100644 --- a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs +++ b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs @@ -1,5 +1,8 @@ using Content.Shared._CP14.MagicSpell.Components; using Content.Shared._CP14.MagicSpell.Events; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; using Content.Shared.CombatMode.Pacification; using Content.Shared.Damage.Components; using Content.Shared.Hands.Components; @@ -7,12 +10,14 @@ using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; using Content.Shared.Speech.Muting; +using Robust.Shared.Prototypes; namespace Content.Shared._CP14.MagicSpell; public abstract partial class CP14SharedMagicSystem { [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly CP14SharedReligionGodSystem _god = default!; private void InitializeChecks() { @@ -22,12 +27,14 @@ public abstract partial class CP14SharedMagicSystem SubscribeLocalEvent(OnStaminaCheck); SubscribeLocalEvent(OnPacifiedCheck); SubscribeLocalEvent(OnMobStateCheck); + SubscribeLocalEvent(OnReligionRestrictedCheck); //Verbal speaking SubscribeLocalEvent(OnVerbalAspectStartCast); SubscribeLocalEvent(OnVerbalAspectAfterCast); SubscribeLocalEvent(OnEmoteStartCast); SubscribeLocalEvent(OnEmoteEndCast); + } /// @@ -148,6 +155,18 @@ public abstract partial class CP14SharedMagicSystem } } + private void OnReligionRestrictedCheck(Entity ent, ref CP14CastMagicEffectAttemptEvent args) + { + + if (!TryComp(args.Performer, out var religionComp)) + return; + + if (args.Position is not null && _god.InVision(args.Position.Value, (args.Performer, religionComp))) + return; + + args.Cancel(); + } + private void OnVerbalAspectStartCast(Entity ent, ref CP14StartCastMagicEffectEvent args) { diff --git a/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs new file mode 100644 index 0000000000..ec18a93490 --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared._CP14.MagicSpellStorage; +using Content.Shared.FixedPoint; + +namespace Content.Shared._CP14.MagicSpell.Components; + +/// +/// If the user belongs to a religion, this spell can only be used within the area of influence of that religion +/// +[RegisterComponent, Access(typeof(CP14SharedMagicSystem), typeof(CP14SpellStorageSystem))] +public sealed partial class CP14MagicEffectReligionRestrictedComponent : Component +{ +} diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodRenounce.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodRenounce.cs new file mode 100644 index 0000000000..747d7fff7e --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodRenounce.cs @@ -0,0 +1,23 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Systems; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellGodRenounce : CP14SpellEffect +{ + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (args.Target is null) + return; + + if (!entManager.TryGetComponent(args.User, out var god) || god.Religion is null) + return; + + if (!entManager.TryGetComponent(args.Target.Value, out var follower) || follower.Religion != god.Religion) + return; + + var religionSys = entManager.System(); + + religionSys.ToDisbelieve(args.Target.Value); + } +} diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs new file mode 100644 index 0000000000..4121e3b52a --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs @@ -0,0 +1,24 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellGodTouch : CP14SpellEffect +{ + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (args.Target is null) + return; + + if (!entManager.TryGetComponent(args.User, out var god) || god.Religion is null) + return; + + var ev = new CP14GodTouchEvent(god.Religion.Value); + entManager.EventBus.RaiseLocalEvent(args.Target.Value, ev); + } +} +public sealed class CP14GodTouchEvent(ProtoId religion) : EntityEventArgs +{ + public ProtoId Religion = religion; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionAltarComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionAltarComponent.cs new file mode 100644 index 0000000000..b561fa3f7c --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionAltarComponent.cs @@ -0,0 +1,16 @@ +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionAltarComponent : Component +{ + [DataField, AutoNetworkedField] + public ProtoId? Religion; + + [DataField, AutoNetworkedField] + public bool CanBeConverted = true; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionEntityComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionEntityComponent.cs new file mode 100644 index 0000000000..2f04dd8440 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionEntityComponent.cs @@ -0,0 +1,27 @@ +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionEntityComponent : Component +{ + [DataField(required: true)] + public ProtoId? Religion; + + public HashSet PvsOverridedObservers = new(); + public ICommonSession? Session; + + /// + /// Number of followers as a percentage. Automatically calculated on the server and sent to the client for data synchronization. + /// + [DataField, AutoNetworkedField] + public FixedPoint2 FollowerPercentage = 0; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs new file mode 100644 index 0000000000..4a8a452848 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// Determines whether the entity is a follower of God, or may never be able to become one +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionFollowerComponent : Component +{ + [DataField, AutoNetworkedField] + public ProtoId? Religion; + + [DataField, AutoNetworkedField] + public HashSet> RejectedReligions = new(); + + [DataField] + public EntProtoId RenounceActionProto = "CP14ActionRenounceFromGod"; + + [DataField] + public EntityUid? RenounceAction; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionObserverComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionObserverComponent.cs new file mode 100644 index 0000000000..5d9b31e6c5 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionObserverComponent.cs @@ -0,0 +1,19 @@ +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// Allows the god of a particular religion to see within a radius around the observer. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true), Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionObserverComponent : Component +{ + [DataField, AutoNetworkedField] + public Dictionary, float> Observation = new(); //DAMNATION + + [DataField, AutoNetworkedField] + public bool Active = true; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionPendingFollowerComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionPendingFollowerComponent.cs new file mode 100644 index 0000000000..f7c384cac4 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionPendingFollowerComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.Alert; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// This entity has not yet become a follower of God, but wants to become one. Confirmation from god is expected +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionPendingFollowerComponent : Component +{ + [DataField, AutoNetworkedField] + public ProtoId? Religion; +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionVisionComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionVisionComponent.cs new file mode 100644 index 0000000000..9c7727b37b --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionVisionComponent.cs @@ -0,0 +1,14 @@ +using Content.Shared._CP14.Religion.Systems; +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// Limits the vision of entities, allowing them to see only areas within a radius around observers of their religion. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionVisionComponent : Component +{ + [DataField] + public Vector3 ShaderColor = new (1f, 1f, 1f); +} diff --git a/Content.Shared/_CP14/Religion/Prototypes/CP14ReligionPrototype.cs b/Content.Shared/_CP14/Religion/Prototypes/CP14ReligionPrototype.cs new file mode 100644 index 0000000000..01639cb564 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Prototypes/CP14ReligionPrototype.cs @@ -0,0 +1,18 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Prototypes; + +/// +/// +/// +[Prototype("cp14Religion")] +public sealed partial class CP14ReligionPrototype : IPrototype +{ + [IdDataField] public string ID { get; } = default!; + + [DataField] + public float FollowerObservationRadius = 8f; + + [DataField] + public float AltarObservationRadius = 25f; +} diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs new file mode 100644 index 0000000000..135b587c12 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs @@ -0,0 +1,106 @@ + +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared.DoAfter; +using Content.Shared.Verbs; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Religion.Systems; + +public abstract partial class CP14SharedReligionGodSystem +{ + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + private void InitializeAltars() + { + SubscribeLocalEvent>(GetBaseVerb); + SubscribeLocalEvent>(GetAltVerb); + } + + private void GetBaseVerb(Entity ent, ref GetVerbsEvent args) + { + + } + + private void GetAltVerb(Entity ent, ref GetVerbsEvent args) + { + if (ent.Comp.Religion is null) + return; + + var disabled = !CanBecomeFollower(args.User, ent.Comp.Religion.Value); + + if (!disabled && TryComp(args.User, out var pendingFollower)) + { + if (pendingFollower.Religion is not null) + disabled = true; + } + + if (disabled) + return; + + var user = args.User; + args.Verbs.Add(new AlternativeVerb() + { + Text = Loc.GetString("cp14-altar-become-follower"), + Message = Loc.GetString("cp14-altar-become-follower-desc"), + Act = () => + { + var doAfterArgs = new DoAfterArgs(EntityManager, user, 5f, new CP14AltarOfferDoAfter(), ent, used: ent) + { + BreakOnDamage = true, + BreakOnMove = true, + }; + _doAfter.TryStartDoAfter(doAfterArgs); + }, + }); + } + + public bool TryConvertAltar(EntityUid target, ProtoId religion) + { + if (!_proto.TryIndex(religion, out var indexedReligion)) + return false; + + EnsureComp(target, out var altar); + + if (!altar.CanBeConverted) + return false; + + var oldReligion = altar.Religion; + altar.Religion = religion; + Dirty(target, altar); + + EditObservation(target, religion, indexedReligion.AltarObservationRadius); + + var ev = new CP14ReligionChangedEvent(oldReligion, religion); + RaiseLocalEvent(target, ev); + + return true; + } + + public void DeconvertAltar(EntityUid target) + { + if (!TryComp(target, out var altar)) + return; + + if (altar.Religion is null) + return; + + if (!_proto.TryIndex(altar.Religion, out var indexedReligion)) + return; + + EditObservation(target, altar.Religion.Value, -indexedReligion.AltarObservationRadius); + + var oldReligion = altar.Religion; + altar.Religion = null; + + var ev = new CP14ReligionChangedEvent(oldReligion, null); + RaiseLocalEvent(target, ev); + + Dirty(target, altar); + } +} + +[Serializable, NetSerializable] +public sealed partial class CP14AltarOfferDoAfter : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs new file mode 100644 index 0000000000..da7a10a3e9 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs @@ -0,0 +1,154 @@ +using Content.Shared._CP14.MagicSpell.Spells; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared.Actions; +using Content.Shared.Alert; +using Content.Shared.Mind; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Systems; + +public abstract partial class CP14SharedReligionGodSystem +{ + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] protected readonly SharedMindSystem Mind = default!; + private void InitializeFollowers() + { + SubscribeLocalEvent(OnPendingFollowerInit); + SubscribeLocalEvent(OnPendingFollowerShutdown); + SubscribeLocalEvent(OnBreakDivineOffer); + SubscribeLocalEvent(OnGodTouch); + + SubscribeLocalEvent(OnOfferDoAfter); + + SubscribeLocalEvent(OnRenounceFromGod); + } + + private void OnRenounceFromGod(Entity ent, ref CP14RenounceFromGodEvent args) + { + ToDisbelieve(ent); + } + + private void OnOfferDoAfter(Entity ent, ref CP14AltarOfferDoAfter args) + { + if (args.Handled || args.Cancelled) + return; + + if (ent.Comp.Religion is null) + return; + + TryAddPendingFollower(args.User, ent.Comp.Religion.Value); + + args.Handled = true; + } + + private void OnGodTouch(Entity ent, ref CP14GodTouchEvent args) + { + if (args.Religion != ent.Comp.Religion) + return; + + TryToBelieve(ent); + } + + private void OnBreakDivineOffer(Entity ent, ref CP14BreakDivineOfferEvent args) + { + RemCompDeferred(ent); + + if (ent.Comp.Religion is null) + return; + + SendMessageToGods(ent.Comp.Religion.Value, Loc.GetString("cp14-unoffer-soul-god-message", ("name", MetaData(ent).EntityName)), ent); + } + + private void OnPendingFollowerInit(Entity ent, ref MapInitEvent args) + { + _alerts.ShowAlert(ent, "CP14DivineOffer"); + } + + private void OnPendingFollowerShutdown(Entity ent, ref ComponentShutdown args) + { + _alerts.ClearAlert(ent, "CP14DivineOffer"); + } + + private bool CanBecomeFollower(EntityUid target, ProtoId religion) + { + if (HasComp(target)) + return false; + + EnsureComp(target, out var follower); + + return !follower.RejectedReligions.Contains(religion); + } + + private void TryAddPendingFollower(EntityUid target, ProtoId religion) + { + if (!CanBecomeFollower(target, religion)) + return; + + EnsureComp(target, out var pendingFollower); + pendingFollower.Religion = religion; + + SendMessageToGods(religion, Loc.GetString("cp14-offer-soul-god-message", ("name", MetaData(target).EntityName)), target); + } + + private bool TryToBelieve(Entity pending) + { + if (pending.Comp.Religion is null) + return false; + + if (!_proto.TryIndex(pending.Comp.Religion, out var indexedReligion)) + return false; + + if (!CanBecomeFollower(pending, pending.Comp.Religion.Value)) + return false; + + EnsureComp(pending, out var follower); + + var oldReligion = follower.Religion; + follower.Religion = pending.Comp.Religion; + Dirty(pending, follower); + + EditObservation(pending, pending.Comp.Religion.Value, indexedReligion.FollowerObservationRadius); + + var ev = new CP14ReligionChangedEvent(oldReligion, pending.Comp.Religion); + RaiseLocalEvent(pending, ev); + + RemCompDeferred(pending); + SendMessageToGods(pending.Comp.Religion.Value, Loc.GetString("cp14-become-follower-message", ("name", MetaData(pending).EntityName)), pending); + + _actions.AddAction(pending, ref follower.RenounceAction, follower.RenounceActionProto); + return true; + } + + public void ToDisbelieve(EntityUid target) + { + if (!TryComp(target, out var follower)) + return; + + if (follower.Religion is null) + return; + + if (!_proto.TryIndex(follower.Religion, out var indexedReligion)) + return; + + SendMessageToGods(follower.Religion.Value, Loc.GetString("cp14-remove-follower-message", ("name", MetaData(target).EntityName)), target); + EditObservation(target, follower.Religion.Value, -indexedReligion.FollowerObservationRadius); + + var oldReligion = follower.Religion; + follower.Religion = null; + if (oldReligion is not null) + follower.RejectedReligions.Add(oldReligion.Value); + + var ev = new CP14ReligionChangedEvent(oldReligion, null); + RaiseLocalEvent(target, ev); + + Dirty(target, follower); + + _actions.RemoveAction(target, follower.RenounceAction); + } +} + +public sealed partial class CP14BreakDivineOfferEvent : BaseAlertEvent; + +public sealed partial class CP14RenounceFromGodEvent : InstantActionEvent; diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs new file mode 100644 index 0000000000..c2ee697f4a --- /dev/null +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs @@ -0,0 +1,96 @@ +using System.Numerics; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Content.Shared.Interaction; +using Content.Shared.Verbs; +using Robust.Shared.Map; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Systems; + +public abstract partial class CP14SharedReligionGodSystem +{ + private void InitializeObservation() + { + SubscribeLocalEvent(OnGodInRange); + SubscribeLocalEvent(OnGodMenu); + } + + private void OnGodInRange(Entity ent, ref InRangeOverrideEvent args) + { + args.Handled = true; + + args.InRange = InVision(args.Target, ent); + } + + private void OnGodMenu(Entity ent, ref MenuVisibilityEvent args) + { + args.Visibility &= ~MenuVisibility.NoFov; + } + + public void EditObservation(EntityUid target, ProtoId religion, float range) + { + EnsureComp(target, out var observer); + + if (observer.Observation.ContainsKey(religion)) + { + var newRange = Math.Clamp(observer.Observation[religion] + range, 0, float.MaxValue); + + if (newRange <= 0) + { + observer.Observation.Remove(religion); + } + else + { + observer.Observation[religion] = newRange; + } + } + else + { + // Otherwise, add a new observation for the religion. + observer.Observation.Add(religion, range); + } + Dirty(target, observer); + } + + public bool InVision(EntityUid target, Entity user) + { + var position = Transform(target).Coordinates; + + return InVision(position, user); + } + + public bool InVision(EntityCoordinates coords, Entity user) + { + if (!HasComp(user)) + return true; + + var userXform = Transform(user); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var observer, out var xform)) + { + if (!observer.Active) + continue; + + if (xform.MapID != userXform.MapID) + continue; + + if (user.Comp.Religion is null) + continue; + + if (!observer.Observation.ContainsKey(user.Comp.Religion.Value)) + continue; + + + var obsPos = _transform.GetWorldPosition(uid); + var targetPos = coords.Position; + if (Vector2.Distance(obsPos, targetPos) <= observer.Observation[user.Comp.Religion.Value]) + { + // If the observer is within range of the target, they can see it. + return true; + } + } + + return false; + } +} diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs new file mode 100644 index 0000000000..3667d1ecf4 --- /dev/null +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs @@ -0,0 +1,23 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared._CP14.Religion.Systems; + +[Serializable, NetSerializable] +public enum CP14ReligionEntityUiKey +{ + Key, +} + +[Serializable, NetSerializable] +public sealed class CP14ReligionEntityUiState(Dictionary altars, Dictionary followers, float followerPercentage) : BoundUserInterfaceState +{ + public Dictionary Altars = altars; + public Dictionary Followers = followers; + public float FollowerPercentage = followerPercentage; +} + +[Serializable, NetSerializable] +public sealed class CP14ReligionEntityTeleportAttempt(NetEntity entity) : BoundUserInterfaceMessage +{ + public readonly NetEntity Entity = entity; +} diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs new file mode 100644 index 0000000000..9f38e06caa --- /dev/null +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs @@ -0,0 +1,46 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Prototypes; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Systems; + +public abstract partial class CP14SharedReligionGodSystem : EntitySystem +{ + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + + public override void Initialize() + { + base.Initialize(); + InitializeObservation(); + InitializeFollowers(); + InitializeAltars(); + } + + public HashSet> GetGods(ProtoId religion) + { + HashSet> gods = new(); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var god)) + { + if (god.Religion != religion) + continue; + + gods.Add(new Entity(uid, god)); + } + + return gods; + } + + protected abstract void SendMessageToGods(ProtoId religion, string msg, EntityUid source); +} + +/// +/// It is invoked on altars and followers when they change their religion. +/// +public sealed class CP14ReligionChangedEvent(ProtoId? oldRel, ProtoId? newRel) : EntityEventArgs +{ + public ProtoId? OldReligion = oldRel; + public ProtoId? NewReligion = newRel; +} diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs index 1649c30677..0a581fc08c 100644 --- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs +++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs @@ -174,6 +174,10 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem if (HaveSkill(target, skill, component)) return false; + //Check if the skill is in the available skill trees + if (!component.AvailableSkillTrees.Contains(skill.Tree)) + return false; + //Check max cap if (component.SkillsSumExperience + skill.LearnCost > component.ExperienceMaxCap) return false; diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs index 326377d8a4..4c78e77ba3 100644 --- a/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs +++ b/Content.Shared/_CP14/Skill/CP14SkillSystem.Admin.cs @@ -51,58 +51,16 @@ public abstract partial class CP14SharedSkillSystem var target = args.Target; - //Add Skill - foreach (var skill in _allSkills) - { - if (ent.Comp.LearnedSkills.Contains(skill)) - continue; - - var name = Loc.GetString(GetSkillName(skill)); - args.Verbs.Add(new Verb - { - Text = name, - Message = name + ": " + Loc.GetString(GetSkillDescription(skill)), - Category = VerbCategory.CP14AdminSkillAdd, - Icon = skill.Icon, - Act = () => - { - TryAddSkill(target, skill); - }, - }); - } - - //Remove Skill - foreach (var skill in ent.Comp.LearnedSkills) - { - if (!_proto.TryIndex(skill, out var indexedSkill)) - continue; - - var name = Loc.GetString(GetSkillName(skill)); - args.Verbs.Add(new Verb - { - Text = name, - Message = name + ": " + Loc.GetString(GetSkillDescription(skill)), - Category = VerbCategory.CP14AdminSkillRemove, - Icon = indexedSkill.Icon, - Act = () => - { - TryRemoveSkill(target, skill); - }, - }); - } - //Reset/Remove All Skills args.Verbs.Add(new Verb { Text = "Reset skills", Message = "Remove all learned skills", - Category = VerbCategory.CP14AdminSkillRemove, Icon = new SpriteSpecifier.Rsi(new("/Textures/_CP14/Interface/Misc/reroll.rsi"), "reroll"), Act = () => { TryResetSkills(target); }, }); - } } diff --git a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs index bfb11e4776..12b8c47bd6 100644 --- a/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs +++ b/Content.Shared/_CP14/Skill/Components/CP14SkillStorageComponent.cs @@ -14,9 +14,15 @@ namespace Content.Shared._CP14.Skill.Components; [Access(typeof(CP14SharedSkillSystem), typeof(CP14SharedResearchSystem))] public sealed partial class CP14SkillStorageComponent : Component { + /// + /// Skill trees displayed in the skill tree interface. Only skills from these trees can be learned by this player. + /// + [DataField] + public HashSet> AvailableSkillTrees = new(); + /// /// Tracks skills that are learned without spending memory points. - /// the skills that are here are DUBLED in the LearnedSkills, + /// the skills that are here are DOUBLED in the LearnedSkills, /// [DataField, AutoNetworkedField] public List> FreeLearnedSkills = new(); diff --git a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs index 8a00c6e2b6..6057dc0e67 100644 --- a/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs +++ b/Content.Shared/_CP14/Skill/Prototypes/CP14SkillTreePrototype.cs @@ -41,7 +41,4 @@ public sealed partial class CP14SkillTreePrototype : IPrototype [DataField] public SoundSpecifier LearnSound = new SoundCollectionSpecifier("CP14LearnSkill"); - - [DataField] - public SpriteSpecifier? Icon = null; } diff --git a/Content.Shared/_CP14/Skill/Restrictions/GodFollowerPercentage.cs b/Content.Shared/_CP14/Skill/Restrictions/GodFollowerPercentage.cs new file mode 100644 index 0000000000..aafe472d7d --- /dev/null +++ b/Content.Shared/_CP14/Skill/Restrictions/GodFollowerPercentage.cs @@ -0,0 +1,27 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Skill.Prototypes; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Skill.Restrictions; + +public sealed partial class GodFollowerPercentage : CP14SkillRestriction +{ + [DataField] + public FixedPoint2 Percentage = 0.5f; + public override bool Check(IEntityManager entManager, EntityUid target, CP14SkillPrototype skill) + { + if (!entManager.TryGetComponent(target, out var god)) + return false; + + if (god.Religion is null) + return false; + + return god.FollowerPercentage >= Percentage; + } + + public override string GetDescription(IEntityManager entManager, IPrototypeManager protoManager) + { + return Loc.GetString("cp14-skill-req-god-follower-percentage", ("count", Percentage * 100)); + } +} diff --git a/Resources/Locale/en-US/_CP14/headset/radio.ftl b/Resources/Locale/en-US/_CP14/headset/radio.ftl new file mode 100644 index 0000000000..298b150008 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/headset/radio.ftl @@ -0,0 +1 @@ +cp14-chat-radio-gods = Divine \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/job/department.ftl b/Resources/Locale/en-US/_CP14/job/department.ftl index bc604e6f8c..4e2b78f247 100644 --- a/Resources/Locale/en-US/_CP14/job/department.ftl +++ b/Resources/Locale/en-US/_CP14/job/department.ftl @@ -11,4 +11,7 @@ department-CP14Guard = Guards department-CP14Guard-desc = Protectors and warriors who oversee security and law and order in all corners of the Empire. department-CP14Artisan = Artisans -department-CP14Artisan-desc = People who have learnt peaceful professions, people who help the settlement with their knowledge and skills. \ No newline at end of file +department-CP14Artisan-desc = People who have learnt peaceful professions, people who help the settlement with their knowledge and skills. + +department-CP14Demigods = Patrons +department-CP14Demigods-desc = Higher beings playing their own games, where ordinary creatures are merely pawns in their plans. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/job/job.ftl b/Resources/Locale/en-US/_CP14/job/job.ftl index 76908b9b79..b34b558a59 100644 --- a/Resources/Locale/en-US/_CP14/job/job.ftl +++ b/Resources/Locale/en-US/_CP14/job/job.ftl @@ -34,4 +34,12 @@ cp14-job-name-blacksmith = Blacksmith cp14-job-desc-blacksmith = Create and improve equipment for everyone in need! You have the power of metal and fire in your hands, and only you know how to use them carefully to create masterpieces. cp14-job-name-apprentice = Apprentice -cp14-job-desc-apprentice = A peaceful citizen of the empire, just beginning to learn the subtleties of various sciences. Choose a specialisation in equipment, and try to help others in their work, in exchange for a salary and invaluable experience. \ No newline at end of file +cp14-job-desc-apprentice = A peaceful citizen of the empire, just beginning to learn the subtleties of various sciences. Try to help others in their work, in exchange for a salary and invaluable experience. + +# Demigods + +cp14-job-name-god-merkas = Merkas +cp14-job-desc-god-merkas = God of purity and healing. TODO + +cp14-job-name-god-lumera = Lumera +cp14-job-desc-god-lumera = Patroness of the night and the starry sky. TODO \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/religion/altar.ftl b/Resources/Locale/en-US/_CP14/religion/altar.ftl new file mode 100644 index 0000000000..26d64f8228 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/religion/altar.ftl @@ -0,0 +1,19 @@ +cp14-altar-wrapped-message = [bold]{$name}[/bold] prays, {$msg} +cp14-offer-soul-god-message = [bold]{$name}[/bold] [color=green]wants to become your follower[/color]. Touch him to establish a connection. +cp14-unoffer-soul-god-message = [bold]{$name}[/bold] [color=red]has changed his mind about becoming your follower.[/color] +cp14-become-follower-message = [bold]{$name}[/bold] [color=green]becomes your follower[/color]! +cp14-remove-follower-message = [bold]{$name}[/bold] [color=red]rejects you and will never be able to return to you![/color] + +cp14-renounce-action-popup = YOU ARE RENOUNCING YOUR PATRON! To confirm, perform the action again. +cp-renounce-action-god-popup = YOU ARE REJECTING YOUR FOLLOWER! To confirm, perform the action again. + +cp14-god-ui-title = Fast Travel +cp14-god-ui-follower = Followers +cp14-god-ui-altars = Altars +cp14-god-ui-follower-percentage = Follower percentage: {$count}% + +cp14-altar-become-follower = Become a follower +cp14-altar-become-follower-desc = You offer yourself into the service of your patron. If he agrees, your bond will be strengthened. + +cp14-alert-offer = Offer of patronage +cp14-alert-offer-desc = You want to become a follower of the patron, but there is no response from him yet. Click to cancel the offer. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/skill/requirements.ftl b/Resources/Locale/en-US/_CP14/skill/requirements.ftl index e9756629bf..0e15c7f90e 100644 --- a/Resources/Locale/en-US/_CP14/skill/requirements.ftl +++ b/Resources/Locale/en-US/_CP14/skill/requirements.ftl @@ -1,4 +1,5 @@ cp14-skill-req-prerequisite = Skill "{$name}" must be learned cp14-skill-req-species = You must be the race of “{$name}” cp14-skill-req-researched = A study needs to be done on the research table -cp14-skill-req-impossible = Unable to explore during a round at the current moment \ No newline at end of file +cp14-skill-req-impossible = Unable to explore during a round at the current moment +cp14-skill-req-god-follower-percentage = The number of your followers should be more than {$count}% \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl b/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl new file mode 100644 index 0000000000..4ed5976601 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl @@ -0,0 +1,3 @@ +cp14-skill-lumera-t1-name = The origins of the secret night +cp14-skill-lumera-t2-name = The waxing moon +cp14-skill-lumera-t3-name = The full moon of Lumera \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/headset/radio.ftl b/Resources/Locale/ru-RU/_CP14/headset/radio.ftl new file mode 100644 index 0000000000..09c8f115ab --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/headset/radio.ftl @@ -0,0 +1 @@ +cp14-chat-radio-gods = Божественный \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/job/department.ftl b/Resources/Locale/ru-RU/_CP14/job/department.ftl index d8f03718fe..1463c2921b 100644 --- a/Resources/Locale/ru-RU/_CP14/job/department.ftl +++ b/Resources/Locale/ru-RU/_CP14/job/department.ftl @@ -11,4 +11,7 @@ department-CP14Guard = Стража department-CP14Guard-desc = Защитники и войны, следящие за безопасностью и правопорядком во всех уголках империи. department-CP14Artisan = Ремесленники -department-CP14Artisan-desc = Освоившие мирные профессии, люди, которые помогают поселению своими знаниями и умениями. \ No newline at end of file +department-CP14Artisan-desc = Освоившие мирные профессии, люди, которые помогают поселению своими знаниями и умениями. + +department-CP14Demigods = Покровители +department-CP14Demigods-desc = Высшие сущности, играющие в свои собственные игры, где обычные существа лишь пешки в их планах. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/job/job.ftl b/Resources/Locale/ru-RU/_CP14/job/job.ftl index 985eab7686..abfc220bb7 100644 --- a/Resources/Locale/ru-RU/_CP14/job/job.ftl +++ b/Resources/Locale/ru-RU/_CP14/job/job.ftl @@ -34,4 +34,12 @@ cp14-job-name-blacksmith = Кузнец cp14-job-desc-blacksmith = Создавайте и улучшайте экипировку для всех нуждающихся! В ваших руках мощь металла и огня, и только вы знаете как аккуратно использовать их, чтобы создавать шедевры. cp14-job-name-apprentice = Подмастерье -cp14-job-desc-apprentice = Мирный житель империи, только начинающий постигать тонкости различных наук. Выберите специализацию в экипировке, и постарайтесь помочь другим в их работе, в обмен на зарплату и бесценный опыт. \ No newline at end of file +cp14-job-desc-apprentice = Мирный житель империи, только начинающий постигать тонкости различных наук. Постарайтесь помочь другим в их работе, в обмен на зарплату и бесценный опыт. + +# Demigods + +cp14-job-name-god-merkas = Меркас +cp14-job-desc-god-merkas = Бог света и исцеления. TODO + +cp14-job-name-god-lumera = Лумера +cp14-job-desc-god-lumera = Покровительница ночи и звёздного неба. TODO \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/religion/altar.ftl b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl new file mode 100644 index 0000000000..54c2e671ed --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl @@ -0,0 +1,19 @@ +cp14-altar-wrapped-message = [bold]{$name}[/bold] молится, {$msg} +cp14-offer-soul-god-message = [bold]{$name}[/bold] [color=green]хочет стать вашим последователем[/color]. Прикоснитесь к нему, чтобы установить связь. +cp14-unoffer-soul-god-message = [bold]{$name}[/bold] [color=red]передумал становиться вашим последователем.[/color] +cp14-become-follower-message = [bold]{$name}[/bold] [color=green]становится вашим последователем[/color]! +cp14-remove-follower-message = [bold]{$name}[/bold] [color=red]отвергает вас, и больше никогда не сможет вернться к вам![/color] + +cp14-renounce-action-popup = ВЫ ОТРЕКАЕТЕСЬ ОТ ПОКРОВИТЕЛЯ! Для подтверждения выполните действие еще раз. +cp-renounce-action-god-popup = ВЫ ОТВЕРГАЕТЕ СВОЕГО ПОСЛЕДОВАТЕЛЯ! Для подтверждения выполните действие еще раз. + +cp14-god-ui-title = Быстрое перемещение +cp14-god-ui-follower = Последователи +cp14-god-ui-altars = Алтари +cp14-god-ui-follower-percentage = Процент последователей: {$count}% + +cp14-altar-become-follower = Стать последователем +cp14-altar-become-follower-desc = Вы предлагаете себя в службу покровителю. Если он согласится, ваша связь укрепится. + +cp14-alert-offer = Предложение о покровительстве +cp14-alert-offer-desc = Вы хотите стать последователем покровителя, но пока от него нет ответа. Нажмите, чтобы отменить предложение. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl b/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl index f174639cf1..1eede4ac12 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/requirements.ftl @@ -1,4 +1,5 @@ cp14-skill-req-prerequisite = Навык "{$name}" должен быть изучен cp14-skill-req-species = Вы должны быть расы "{$name}" cp14-skill-req-researched = Необходимо провести исследование на исследовательском столе -cp14-skill-req-impossible = Невозможно изучить во время раунда на текущий момент \ No newline at end of file +cp14-skill-req-impossible = Невозможно изучить во время раунда на текущий момент +cp14-skill-req-god-follower-percentage = Количество ваших последователей должно быть больше {$count}% \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl new file mode 100644 index 0000000000..7b0f26b259 --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl @@ -0,0 +1,3 @@ +cp14-skill-lumera-t1-name = Истоки тайной ночи +cp14-skill-lumera-t2-name = Растущая луна +cp14-skill-lumera-t3-name = Полнолуние Лумеры \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Alerts/alerts.yml b/Resources/Prototypes/_CP14/Alerts/alerts.yml index e6336b3570..9d37b892cd 100644 --- a/Resources/Prototypes/_CP14/Alerts/alerts.yml +++ b/Resources/Prototypes/_CP14/Alerts/alerts.yml @@ -48,3 +48,11 @@ name: alerts-hunger-name description: alerts-hunger-desc +- type: alert + id: CP14DivineOffer + icons: + - sprite: /Textures/_CP14/Interface/Alerts/divine_offer.rsi + state: offer + name: cp14-alert-offer + description: cp14-alert-offer-desc + clickEvent: !type:CP14BreakDivineOfferEvent \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml new file mode 100644 index 0000000000..3b59a05282 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml @@ -0,0 +1,45 @@ +- type: entity + id: CP14ActionSpellGodLumeraRenounce + name: Renunciation of a follower + description: You are rejecting the chosen follower. They lose the opportunity to become your follower at any time. + components: + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14LumeraRenounceImpact + - !type:CP14SpellGodRenounce + - type: ConfirmableAction + popup: cp-renounce-action-god-popup + - type: EntityWorldTargetAction + repeat: true + checkCanAccess: false + itemIconStyle: BigAction + range: 100 + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: renounce + event: !type:CP14EntityWorldTargetActionEvent + cooldown: 0.5 + +- type: entity + id: CP14LumeraRenounceImpact + categories: [ ForkFiltered ] + parent: CP14BaseMagicImpact + save: false + components: + - type: PointLight + color: "#94154e" + enabled: true + radius: 5 + energy: 4 + netsync: false + - type: Sprite + layers: + - state: stars + color: "#94154e" + shader: unshaded + - type: LightFade + duration: 1 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml new file mode 100644 index 0000000000..b899f6a462 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml @@ -0,0 +1,49 @@ +- type: entity + id: CP14ActionSpellGodLumeraTouch + name: Touch of Lumera + description: "Multitasking effects on the world: depending on what you click on, the effect may vary. Using it on an empty space will create a glowing sign that attracts the attention of mortals." + components: + - type: CP14MagicEffectReligionRestricted + - type: CP14MagicEffectManaCost + manaCost: 5 + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14LumeraTouchImpact + - !type:CP14SpellGodTouch + - !type:CP14SpellApplyEntityEffect + effects: + - !type:Jitter + - type: EntityWorldTargetAction + repeat: true + checkCanAccess: false + itemIconStyle: BigAction + range: 100 + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: touch + event: !type:CP14EntityWorldTargetActionEvent + cooldown: 0.5 + +- type: entity + id: CP14LumeraTouchImpact + categories: [ ForkFiltered ] + parent: CP14BaseMagicImpact + save: false + components: + - type: PointLight + color: "#3843a8" + enabled: true + radius: 5 + energy: 4 + netsync: false + - type: Sprite + layers: + - state: stars + color: "#3843a8" + shader: unshaded + - type: LightFade + duration: 1 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/warp.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/warp.yml new file mode 100644 index 0000000000..de354f4db0 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/warp.yml @@ -0,0 +1,12 @@ +- type: entity + id: CP14ActionSpellGodLumeraWarp + name: Fast travel + description: Allows you to quickly teleport to your altars and followers. + components: + - type: InstantAction + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: warp + priority: -8 + event: !type:ToggleIntrinsicUIEvent + key: enum.CP14ReligionEntityUiKey.Key \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml new file mode 100644 index 0000000000..1f3db51599 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml @@ -0,0 +1,13 @@ +- type: entity + id: CP14ActionRenounceFromGod + name: Renounce patron + description: You renounce your patron by severing your connection with him. After that, you can never become his follower again, but you can become a follower of another patron. + components: + - type: InstantAction + icon: + sprite: _CP14/Interface/Alerts/divine_offer.rsi + state: unoffer + priority: -8 + event: !type:CP14RenounceFromGodEvent + - type: ConfirmableAction + popup: cp14-renounce-action-popup \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml new file mode 100644 index 0000000000..b8663233ad --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml @@ -0,0 +1,113 @@ +- type: entity + id: CP14MobGodBase + parent: + - Incorporeal + - BaseMob + - CP14MobMagical + name: god + description: The supreme entity formed from the beliefs, desires, and fears of the human race. + abstract: true + components: + - type: Sprite + sprite: _CP14/Mobs/Demigods/temp_icons.rsi + color: "#ffffff99" + - type: PointLight + radius: 10 + softness: 1 + castShadows: false + - type: Input + context: "ghost" + - type: Spectral + - type: MovementSpeedModifier + baseWalkSpeed: 3 + baseSprintSpeed: 6 + friction: 0.5 + acceleration: 3 + - type: NoSlip + - type: Eye + drawFov: false + visMask: + - Normal + - Ghost + - type: Visibility + layer: 2 #ghost vis layer + - type: ContentEye + maxZoom: 1.2, 1.2 + - type: Speech + speechVerb: Ghost + - type: CP14ReligionVision + - type: CP14MagicEnergyContainer + magicAlert: CP14MagicEnergy + maxEnergy: 1000 + energy: 1000 + unsafeSupport: false + - type: CP14MagicEnergyDraw + energy: 5 + delay: 6 # 20m to full restore + - type: IntrinsicRadioTransmitter + channels: + - CP14Gods + - type: IntrinsicRadioReceiver + - type: ActiveRadio + receiveAllChannels: true + globalReceive: true + channels: + - CP14Gods + - type: CP14SpellStorage + grantAccessToSelf: true + spells: + - CP14ActionZLevelUp + - CP14ActionZLevelDown + - ActionToggleLighting + - ActionToggleFov + - type: CP14DemiplaneStabilizer # teleports gods outside when the demiplane closes + enabled: false + - type: UserInterface + interfaces: + enum.CP14ReligionEntityUiKey.Key: + type: CP14ReligionEntityBoundUserInterface + +- type: entity + parent: CP14MobGodBase + id: CP14MobGodMerkas + name: Merkas + categories: [ HideSpawnMenu ] + description: Merkas is the god of purity and healing. In his presence, decay is destroyed. He does not save — he purifies. Those who remain can start anew. + components: + - type: Sprite + layers: + - state: merkas + shader: unshaded + - type: PointLight + color: "#9bf2b5" + - type: CP14SkillStorage + availableSkillTrees: + - GodMerkas + - type: CP14ReligionEntity + religion: Merkas + - type: CP14ReligionVision + shaderColor: 0.02, 0.36, 0.05 + +- type: entity + parent: CP14MobGodBase + id: CP14MobGodLumera + name: Lumera + description: The goddess of the night and the night sky. Her stars hold so many secrets, which she protects with her wings. + components: + - type: Sprite + layers: + - state: lumera + shader: unshaded + - type: PointLight + color: "#4367ba" + - type: CP14SkillStorage + availableSkillTrees: + - GodLumera + - type: CP14ReligionEntity + religion: Lumera + - type: CP14ReligionVision + shaderColor: 0.29, 0.66, 0.87 + - type: IntrinsicUI + uis: + enum.CP14ReligionEntityUiKey.Key: + toggleAction: CP14ActionSpellGodLumeraWarp \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml index b7c92bfd61..822bad3780 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Species/base.yml @@ -231,7 +231,6 @@ types: Cold: 0.25 Bloodloss: 0.25 - - type: CP14SkillStorage - type: CP14TradingReputation diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/base.yml b/Resources/Prototypes/_CP14/Entities/Mobs/base.yml index 5b13e55d92..08b348a2a9 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/base.yml @@ -57,6 +57,16 @@ delay: 3 # 5m to full restore - type: CP14MagicUnsafeDamage - type: CP14MagicUnsafeSleep + - type: CP14SkillStorage + availableSkillTrees: + - Pyrokinetic + - Hydrosophistry + - Illusion + - Metamagic + - Healing + - Atlethic + - MartialArts + - Craftsmanship - type: entity diff --git a/Resources/Prototypes/_CP14/Entities/Stations/base.yml b/Resources/Prototypes/_CP14/Entities/Stations/base.yml index f3ed2fed25..68f5be042e 100644 --- a/Resources/Prototypes/_CP14/Entities/Stations/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Stations/base.yml @@ -10,6 +10,7 @@ - CP14BaseStationCommonObjectives - CP14BaseStationDemiplaneMap - CP14BaseStationEconomy + #- CP14BaseStationGods - type: entity id: CP14BaseStationCommonObjectives @@ -35,3 +36,16 @@ abstract: true components: - type: CP14StationEconomy + +#- type: entity +# id: CP14BaseStationGods +# abstract: true +# components: +# - type: CP14StationRandomJobs +# entries: +# - jobs: +# - CP14GodMerkas +# - CP14GodLumera +# count: +# min: 2 +# max: 2 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Flora/trees.yml b/Resources/Prototypes/_CP14/Entities/Structures/Flora/trees.yml index 7d4833105f..4011a695e9 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Flora/trees.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Flora/trees.yml @@ -470,4 +470,3 @@ CP14BirchWoodLog: min: 3 max: 6 - diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml new file mode 100644 index 0000000000..5debef049a --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml @@ -0,0 +1,35 @@ +- type: entity + id: CP14BaseAltar + parent: BaseStructure + abstract: true + name: altar + description: TODO + categories: [ ForkFiltered ] + components: + - type: Sprite + noRot: true + drawdepth: Mobs + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 60 + mask: + - MachineMask + layer: + - MachineLayer + - type: CP14ReligionAltar + - type: ActiveListener + range: 1 + +- type: entity + parent: CP14BaseAltar + id: CP14BaseAltarPrimordial + abstract: true + components: + - type: CP14ReligionAltar + canBeConverted: false + - type: SpawnPoint + spawn_type: Always \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml new file mode 100644 index 0000000000..c71fad7530 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml @@ -0,0 +1,35 @@ +- type: entity + parent: CP14BaseAltarPrimordial + id: CP14AltarPrimordialGodLumera + name: primordial statue of Lumera + description: "The enchanting statue of Lumera, patroness of the starry sky, night, and mysteries. She does not demand worship—she simply observes. And waits for you to ask." + components: + - type: Sprite + sprite: Structures/Furniture/Altars/Gods/convertaltar.rsi + layers: + - state: white + - type: CP14ReligionAltar + religion: Lumera + - type: CP14ReligionObserver + observation: + Lumera: 25 + - type: SpawnPoint + job_id: CP14GodLumera + +- type: entity + parent: CP14BaseAltarPrimordial + id: CP14AltarPrimordialGodMerkas + name: primordial statue of Merkas + description: A beautiful, overgrown statue of Sylvania, revered as a goddess of nature. + components: + - type: Sprite + sprite: Structures/Furniture/Altars/Gods/nanotrasen.rsi + layers: + - state: druid + - type: CP14ReligionAltar + religion: Merkas + - type: CP14ReligionObserver + observation: + Merkas: 25 + - type: SpawnPoint + job_id: CP14GodMerkas \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Religion/religions.yml b/Resources/Prototypes/_CP14/Religion/religions.yml new file mode 100644 index 0000000000..da2846cb79 --- /dev/null +++ b/Resources/Prototypes/_CP14/Religion/religions.yml @@ -0,0 +1,5 @@ +- type: cp14Religion + id: Merkas + +- type: cp14Religion + id: Lumera \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml new file mode 100644 index 0000000000..90c4e7e1ca --- /dev/null +++ b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml @@ -0,0 +1,16 @@ +- type: job + id: CP14GodLumera + name: cp14-job-name-god-lumera + description: cp14-job-desc-god-lumera + setPreference: false + playTimeTracker: CP14GodLumera + requirements: + - !type:OverallPlaytimeRequirement + time: 36000 # 10 hrs + canBeAntag: false + icon: CP14JobIconGodLumera + jobEntity: CP14MobGodLumera + joinNotifyCrew: false + requireAdminNotify: true + jobPreviewEntity: CP14MobGodLumera + applyTraits: false \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/merkas.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/merkas.yml new file mode 100644 index 0000000000..de2828a4d5 --- /dev/null +++ b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/merkas.yml @@ -0,0 +1,16 @@ +- type: job + id: CP14GodMerkas + name: cp14-job-name-god-merkas + description: cp14-job-desc-god-merkas + setPreference: false + playTimeTracker: CP14GodMerkas + requirements: + - !type:OverallPlaytimeRequirement + time: 36000 # 10 hrs + canBeAntag: false + icon: CP14JobIconGodMerkas + jobEntity: CP14MobGodMerkas + joinNotifyCrew: false + requireAdminNotify: true + jobPreviewEntity: CP14MobGodMerkas + applyTraits: false \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml b/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml index c769d2d731..839585efda 100644 --- a/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml @@ -1,3 +1,14 @@ +- type: department + id: CP14Demigods + name: department-CP14Demigods + description: department-CP14Demigods-desc + weight: 666 # >:) + color: "#ffffff" + editorHidden: true #temp + roles: + - CP14GodLumera + - CP14GodMerkas + - type: department id: CP14Command name: department-CP14Command @@ -5,6 +16,7 @@ primary: false weight: 10 color: "#3ec8fa" + editorHidden: true #temp roles: - CP14GuardCommander - CP14Guildmaster @@ -15,6 +27,7 @@ description: department-CP14Guard-desc weight: 9 color: "#576384" + editorHidden: true #temp roles: - CP14GuardCommander - CP14Guard @@ -40,5 +53,4 @@ color: "#588151" roles: - CP14Guildmaster - - CP14Adventurer - + - CP14Adventurer \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Roles/play_time_tracker.yml b/Resources/Prototypes/_CP14/Roles/play_time_tracker.yml index 521b6a568c..e0b11fe95f 100644 --- a/Resources/Prototypes/_CP14/Roles/play_time_tracker.yml +++ b/Resources/Prototypes/_CP14/Roles/play_time_tracker.yml @@ -37,3 +37,9 @@ - type: playTimeTracker id: CP14JobMerchant +# Gods +- type: playTimeTracker + id: CP14GodMerkas + +- type: playTimeTracker + id: CP14GodLumera \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Shaders/shaders.yml b/Resources/Prototypes/_CP14/Shaders/shaders.yml index 468675576d..abe9eaf7b2 100644 --- a/Resources/Prototypes/_CP14/Shaders/shaders.yml +++ b/Resources/Prototypes/_CP14/Shaders/shaders.yml @@ -19,3 +19,8 @@ FalloffStrength: 0.75 FalloffPow: 3.0 HDR: 1.5 + +- type: shader + id: CP14ReligionVision + kind: source + path: "/Textures/_CP14/Shaders/religion.swsl" \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Skill/atlethic.yml b/Resources/Prototypes/_CP14/Skill/Basic/atlethic.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/atlethic.yml rename to Resources/Prototypes/_CP14/Skill/Basic/atlethic.yml diff --git a/Resources/Prototypes/_CP14/Skill/craftsmanship.yml b/Resources/Prototypes/_CP14/Skill/Basic/craftsmanship.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/craftsmanship.yml rename to Resources/Prototypes/_CP14/Skill/Basic/craftsmanship.yml diff --git a/Resources/Prototypes/_CP14/Skill/dimension.yml b/Resources/Prototypes/_CP14/Skill/Basic/dimension.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/dimension.yml rename to Resources/Prototypes/_CP14/Skill/Basic/dimension.yml diff --git a/Resources/Prototypes/_CP14/Skill/healing.yml b/Resources/Prototypes/_CP14/Skill/Basic/healing.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/healing.yml rename to Resources/Prototypes/_CP14/Skill/Basic/healing.yml diff --git a/Resources/Prototypes/_CP14/Skill/hydrosophistry.yml b/Resources/Prototypes/_CP14/Skill/Basic/hydrosophistry.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/hydrosophistry.yml rename to Resources/Prototypes/_CP14/Skill/Basic/hydrosophistry.yml diff --git a/Resources/Prototypes/_CP14/Skill/illusion.yml b/Resources/Prototypes/_CP14/Skill/Basic/illusion.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/illusion.yml rename to Resources/Prototypes/_CP14/Skill/Basic/illusion.yml diff --git a/Resources/Prototypes/_CP14/Skill/martial_arts.yml b/Resources/Prototypes/_CP14/Skill/Basic/martial_arts.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/martial_arts.yml rename to Resources/Prototypes/_CP14/Skill/Basic/martial_arts.yml diff --git a/Resources/Prototypes/_CP14/Skill/metamagic.yml b/Resources/Prototypes/_CP14/Skill/Basic/metamagic.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/metamagic.yml rename to Resources/Prototypes/_CP14/Skill/Basic/metamagic.yml diff --git a/Resources/Prototypes/_CP14/Skill/pyrokinetic.yml b/Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml similarity index 100% rename from Resources/Prototypes/_CP14/Skill/pyrokinetic.yml rename to Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml diff --git a/Resources/Prototypes/_CP14/Skill/skill_tree.yml b/Resources/Prototypes/_CP14/Skill/Basic/trees.yml similarity index 75% rename from Resources/Prototypes/_CP14/Skill/skill_tree.yml rename to Resources/Prototypes/_CP14/Skill/Basic/trees.yml index 3a59a71c23..fa7cf18678 100644 --- a/Resources/Prototypes/_CP14/Skill/skill_tree.yml +++ b/Resources/Prototypes/_CP14/Skill/Basic/trees.yml @@ -3,72 +3,48 @@ name: cp14-skill-tree-pyrokinetic-name desc: cp14-skill-tree-pyrokinetic-desc color: "#d6933c" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: pyro - type: cp14SkillTree id: Hydrosophistry name: cp14-skill-tree-hydrosophistry-name desc: cp14-skill-tree-hydrosophistry-desc color: "#1554a1" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: water - type: cp14SkillTree id: Illusion name: cp14-skill-tree-illusion-name desc: cp14-skill-tree-illusion-desc color: "#f55faf" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: light - type: cp14SkillTree id: Metamagic name: cp14-skill-tree-metamagic-name desc: cp14-skill-tree-metamagic-desc color: "#56e5f5" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: meta - type: cp14SkillTree id: Healing name: cp14-skill-tree-healing-name desc: cp14-skill-tree-healing-desc color: "#51cf72" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: heal - type: cp14SkillTree id: Atlethic name: cp14-skill-tree-atlethic-name desc: cp14-skill-tree-atlethic-desc color: "#b32e37" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: atlethic #- type: cp14SkillTree # id: Dimension # name: cp14-skill-tree-dimension-name # desc: cp14-skill-tree-dimension-desc # color: "#ac66be" -# icon: -# sprite: _CP14/Actions/skill_tree.rsi -# state: dimension - type: cp14SkillTree id: MartialArts name: cp14-skill-tree-martial-name desc: cp14-skill-tree-martial-desc color: "#f54242" - icon: - sprite: _CP14/Actions/skill_tree.rsi - state: martial # diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml new file mode 100644 index 0000000000..4aa20b8d1c --- /dev/null +++ b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml @@ -0,0 +1,75 @@ +# T1 + +- type: cp14Skill + id: LumeraT1 + skillUiPosition: 1, 0 + tree: GodLumera + name: cp14-skill-lumera-t1-name + learnCost: 0.5 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: t1 + +- type: cp14Skill + id: LumeraTouch + skillUiPosition: 0, 3 + tree: GodLumera + learnCost: 0.0 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: touch + effects: + - !type:AddAction + action: CP14ActionSpellGodLumeraTouch + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT1 + +- type: cp14Skill + id: LumeraRenounce + skillUiPosition: 2, 3 + tree: GodLumera + learnCost: 0.0 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: renounce + effects: + - !type:AddAction + action: CP14ActionSpellGodLumeraRenounce + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT1 + +# T2 + +- type: cp14Skill + id: LumeraT2 + skillUiPosition: 7, 0 + tree: GodLumera + name: cp14-skill-lumera-t2-name + learnCost: 0.5 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: t2 + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT1 + - !type:GodFollowerPercentage + percentage: 0.3 + +# T3 + +- type: cp14Skill + id: LumeraT3 + skillUiPosition: 13, 0 + tree: GodLumera + name: cp14-skill-lumera-t3-name + learnCost: 0.5 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: t3 + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT2 + - !type:GodFollowerPercentage + percentage: 0.6 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/merkas.yml b/Resources/Prototypes/_CP14/Skill/Demigods/merkas.yml new file mode 100644 index 0000000000..53c5d70e09 --- /dev/null +++ b/Resources/Prototypes/_CP14/Skill/Demigods/merkas.yml @@ -0,0 +1,12 @@ +- type: cp14Skill + id: NatureGodT1 + skillUiPosition: 1, 0 + tree: GodMerkas + name: cp14-skill-life-t1-name + learnCost: 0.5 + icon: + sprite: _CP14/Actions/skill_tree.rsi + state: heal + effects: + - !type:AddAction + action: CP14ActionSpellBloodPurification \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml b/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml new file mode 100644 index 0000000000..45f51c7847 --- /dev/null +++ b/Resources/Prototypes/_CP14/Skill/Demigods/trees.yml @@ -0,0 +1,12 @@ +- type: cp14SkillTree + id: GodMerkas + name: cp14-job-name-god-merkas + desc: cp14-job-desc-god-merkas + color: "#51cf72" + +- type: cp14SkillTree + id: GodLumera + name: cp14-job-name-god-lumera + desc: cp14-job-desc-god-lumera + color: "#5632a8" + parallax: Default \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/StatusIcon/god_job.yml b/Resources/Prototypes/_CP14/StatusIcon/god_job.yml new file mode 100644 index 0000000000..071828dcdd --- /dev/null +++ b/Resources/Prototypes/_CP14/StatusIcon/god_job.yml @@ -0,0 +1,15 @@ +- type: jobIcon + parent: CP14JobIcon + id: CP14JobIconGodMerkas + icon: + sprite: /Textures/_CP14/Interface/Misc/job_god_icons.rsi + state: Merkas + jobName: cp14-job-name-god-merkas + +- type: jobIcon + parent: CP14JobIcon + id: CP14JobIconGodLumera + icon: + sprite: /Textures/_CP14/Interface/Misc/job_god_icons.rsi + state: Lumera + jobName: cp14-job-name-god-lumera \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/radio_channels.yml b/Resources/Prototypes/_CP14/radio_channels.yml new file mode 100644 index 0000000000..d0f0b2b09a --- /dev/null +++ b/Resources/Prototypes/_CP14/radio_channels.yml @@ -0,0 +1,7 @@ +- type: radioChannel + id: CP14Gods + name: cp14-chat-radio-gods + keycode: 'g' + frequency: 666 + color: "#fad634" + longRange: true diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json new file mode 100644 index 0000000000..9e51bb79c9 --- /dev/null +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "All right reserved", + "copyright": "Created by TheShuEd", + "states": [ + { + "name": "touch" + }, + { + "name": "warp" + }, + { + "name": "renounce" + }, + { + "name": "t1" + }, + { + "name": "t2" + }, + { + "name": "t3" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/renounce.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/renounce.png new file mode 100644 index 0000000000000000000000000000000000000000..04a67e9dfcf158f2e40729151cfa1df558d1de53 GIT binary patch literal 422 zcmV;X0a^ZuP)Px$U`a$lR9J=WRXuCNFcdtOLj4aqb_*p_p<9!dkR_f&$L`rZ7Z3RX-o2+=$ZRhm zr0t%m1aBVw57bE=ia;^?cv75@!3V}*KfgQc-AO=)4g@Un9cPSjYCU6&FY+C!{+d!$ zRyCHJ|Hfe$1~&5LW{739@wO~lE`O(M=lt`c!}a)G7*-#$i1 zn;_f{0I#Ea*wUc`DTX?75jAQ=TY+lkl!%^;+(iUgpl{A?`-HgU=cJhlmzPzI`D|kR zCdmrkySoJdyhRTOwJM)nQ3UA7$MK4fh0Pl@j9J)^&+ppMM5=# z)}f1zOni(8>j;|0k;&da_WW2OP99JZJU#ZUH70mDS4ZNL1m_gU*$I8gJ6r_*0AhGb^vCRM Q#{d8T07*qoM6N<$f~DiT@c;k- literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t1.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e39d4d0b9dbdf31d8acb1a9f59aba3699b9c95e GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}^F3W0Ln2y} z6C`*Z+?}fbKYQA}AMZo9yt8L!W^UfL^ zZ&A9)a!M3m)6J7d4jed8@aB!_A`{M+9}I#{Gak9+Deus2As> z#ewd@22y*juq{@!;__fpRz7%PS7V2+2>T+%9_a(SQkWCfg+Z21-6*#At^3yE1J=u# aIT_Y0NSO64K0_VoR0dC1KbLh*2~7a}wOFPx$AW1|)R9J=0mmv;=FcgM=&{NYpz_KivnA;p`ci;GO~TVM;S@>+yRA-o_J0C0Z(+g4&CWWZ-S~P=UQi#!+ zy+FAFl1vu>UhfZS(*C@2xB{Ru?Z`yVH^t(6RLR8ia^6`{_BC38ptME=oHE!ZE6vl5YiB)L1efK(UL6fjw1`EOs( zHaezRnSLM+xwytdcwF*Jwg%G$fZO$Co8M)w{yAM!UyJL;vLF>FG5`Po07*qoM6N<$ Ef*O&ORR910 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t3.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/t3.png new file mode 100644 index 0000000000000000000000000000000000000000..49057930600e7f0a45d3d404183457af07b2ab68 GIT binary patch literal 375 zcmV--0f_#IP)Px$F-b&0R9J=0S1S^OFc4kPRn;7T>2wBB*E&@1z%8O9(cB`ILsZmNFvD~>02+l) zRXPJD$>u|oXT$D$>^A|30aHJ7$_8GNmIDCX?&RT{L-;I7%PAZ9)X)5TNZG)pmMfvY z1PRU*0O0w0ql}K{L*h#Smh(T@Bj-_Z8rKfSKvc5mAX{<9MMc@bNs(=yHQfkxl^gj) zf2<;Q5t6!)H{H1TJt;EuY(c5C9YC15p^X6cPnvH0i3rA4D*&5!TU%v_ObSm1T|p`Z z_*y=yT0nKdo=^&qwV4TIK16i2ZQ_~+T`Ou+;1UIlZCry$Mr0EOtj$7zOmSW1iOS*n z%w!n_U&mU=(&Fnv5(oCaAZ|r5#6?&R@g&2**Mbt9DFDFrazY#WdL1n|gFj9~;sbXL V)C2-%{}ccK002ovPDHLkV1j-HnhgK| literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/touch.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/touch.png new file mode 100644 index 0000000000000000000000000000000000000000..f41f19d474bd660a545c205c6aecddfbb2807100 GIT binary patch literal 359 zcmV-t0hs=YP)Px$AxT6*R9J=Wma%SwFcd{^s!CZpb>;&qt5Sw+Kr(pB+_itW7O0M4SbLFz5Q&dKj3v7qPx$mq|oHR9J=WRIyIPFbvHhr0c-M%mS1ZG3w^K3f1J+D?jc z(A}~B`tOdt(|?K&!MX_{#=dPjAySwPx>SV=@dRCt{2o%wPbxe>;HqOS3^cGiiLR4K`8*blN#=?8J%!>-yR>+E`MOVCB` zA3$@O@XT;d3`Xp)YDyHvqX*~@eW4*R7z_r3!C){L3t2w{i zV3-?5fQ4i36?6!4kp18Zki#VO#ZqN=&TVp${h$eu%Ov!{l4UQ7;%IIe1cM2%9PsEaulhx=d zOHmX@W6EzXP)|IR6y#Fn7YvnuRs!U-5*;#@NP@8nX=VWi;vtauA>6|fNo<%IOIMnl zHq{vny)Z<9$54KAfeZ%2aV9)Aj5J7^2A^lIosk$+BDL(Bs~8xrJ9lznl*RI=M{P}-B&Ik(A?@NHzu zS@{K3_c68H2kinuH|3vNmZ`7=+3V(E>IEk$0hTZkOG6t4$T$9ih6|w_R6vcW5aXO<;erA}1gNy;f1g!A=5U1hiY6$_OQl1rXjFAI5>13i`CkBk176|>|2N=O8X7U}jw6Ifd?hzRVQJ4$86Iujr$z9|12;5`di{V7+SCwS%mH}F@y^4tTz zl7CEej9>L1;VsxXUh$9cF3=5dmr{Y+K&}4b`kdg&E8{J0oQ@5W$lrIu|Akln*WvL} zAS>uIyz;*aKcC@O)#Drk;YfjW{PH+lkMQ>;Zbf$Y5D;4dapO+Zb1T?i!FJ9a$u&fv zF;0cJ04|(!7Yhi4#m5vs{{*i<&+#Pq4Y+a6-8HSCGp11WcSsgXR{wKKWvX=}W=^5T z@(Wov1i8btrp5|X$seBUH3yw7Kv42`z*|bcU)-XcApzng@H^h+`HWw6p5raSb3$gQ zZe^Jxg{mf2{QMid(yxOo=Xfh{&Te+7O7=NZsImZwqRV~Bc!~w68~f2ysJ(7lk>Fi; z>J9LNbMCcHjW)qKcOh3F8M-1Ukr3b`@H3tWYrNvW!Ux5VDOc7ih{8R^Ta71pB24Xe zh~>HiuJN(UO?dv4(k(irVqT*xlDz&bT*vA)qaz})UggE=9JA{Jed7kH$4AlYPt@x> z>vM0`2NKA2fsX~c!~+*3wj9CC-vVFo?#}Pw_cOdgKVdgG+d&xMbG+ieq_i66b?+Hb zb|JtmB>}D}vp%9Yb$+xc&KcfXJPDVOrqXJRh>iNGQ_k9LsdUd2c{PEBygHrQ8M9

Oc;{Fq#Qk|Rt0a|%(!gY-&MZBtN*~RTS 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 L>gTe~DWM4fVpLK1 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/meta.json b/Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/meta.json new file mode 100644 index 0000000000..752f9b0614 --- /dev/null +++ b/Resources/Textures/_CP14/Interface/Misc/job_god_icons.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "size": { + "x": 13, + "y": 13 + }, + "license": "CC-BY-SA-4.0", + "copyright": "Created by TheShuEd (Github)", + "states": [ + { + "name": "Merkas" + }, + { + "name": "Lumera" + } + ] +} diff --git a/Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/lumera.png b/Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/lumera.png new file mode 100644 index 0000000000000000000000000000000000000000..47725ded6eafb4509253ac3a91f5da4e90936b50 GIT binary patch literal 1990 zcmV;%2RZnOP)Px+fJsC_RCt{2T{~_gIS{1{1J+r51v%0t!bFQXN{4#@hdPR}(ZI=0WM9E&u_H|| zOQTd>e-_!@13h4{veYE2SgayhY`!h!ibZkLtK!4-e8%7XJbmxhUN%O_f0tb$CHS9$ zs#~TZZnG-7A_ma_A0HoQ_+Jg$=+}O?w$lPj8?AbH+G9fy?EKwscT*eve19!(FQ*F^ zYzaI2<8;1%cr2xqvfJ&t&k>p~R#?Ij?nCMs)&pt*Sn%`xH6rT;C}U;R>jl?l<{U=# zA%+-&YQg<+I%f*Z8DW2%x`&`_T{LK3Ev|wN(=#dT{y3dA*QLtUPy_3s>b`$?OkeV8 zx@2`etjD4Q>j4pgKHp!<=lg5<@$~KMyZ`=u@>UaWe?(nU-I8~4APvwe@LzxbLw@!m zqvJ;HOQ1JbBUsuN=K#D)fSV*M?^l zaq#F8H3BZ+ehVL{s~Ac!>hI_-k}Avn4P~+zVYDt7(92BAP$)1bU^WiZ^Vt#( zD3?A=&u7XI@O!T=`{Q)pAE#NpumkJopQrCPRNU9v;Reqg7C4Gp2R8>)p<5=^&-Yh# zj>*tP8@YA8PsxG}0iQce&$EgCR$89bza{I!4z+p?*GXDv(w3;Lx|A~Se9jo2#Rd$A z7>Db)QMyW5QtJ8iiATcy!{gAo#tJAu zmJxnmiafu-)Osnujez?G=eb-RP%EQ4&b!8@gy-tc1lNv5erO!2d^H000vHMEZ{{OO zoOH65qaX>-P12szGVWPP2aDmkIL`HlWx)|Xl*c3K?d3FcH)|alEGJ8mXQN)H<;2t# z5}3nG9w4oBqM=6`fq3LtPL{N1EjsiFf394R1k3tbQ=rAoJ?F*TvpsacOIx^uw?H+3 zWY!bF^w0ghC8A%mz&-OkGZt07e0iwcs%0*(Wr~Zfz9+@%? zYTgNZC*WxK>6s0U)}0+nA<~qk^4=WQdR0mC0z4074V3E*nT65C06krHDfH55RUWY9 z6{Qh(6DV{sKy))S>WUKn&eHk4Zt-;UfF-USMS$Pfu)fWZh0u{CwezEnBrPveEdg%C zTRWdx0a-Ew6ha=rH6*2#E7rOMZRz|{;^DJPXK*8IE$;zo7%Bg-e9o3Tzo+b*=#)`t zNdQK%s(rwkuoaKJq7mJ!yk)+ik+P@r1xe_^x08t_xQ?!Kz`}4FU~POmS!FY1j>zf` zL2KjNX)W6tc3Sz4!Xaoad^D%neW-H&02Y8g?R~fUoj&R)) zn(qf_uyO}Q`F1o=Z%9j_B8%$?wk^SRL&n3m<2i^~;yl*VrWSrYm&q~A7c?^YcJN(V zu1+XJ1h_1&8@6p7FjD8k@2p(%b~t45?PNUf zSpiAENBE9rSCm>IxhVDG7FC{;$I_`7xD8sAQ@vK+Gcj>r(SCB7XCsJX$io5kqCca(ACV$TJc~^Bv7rL0jY7;XrN3vQOSJ_>S2Bfx}k# zb||#GFs31!@2E>Qv|JY1nX7L2Es7R|W^-=KPQAd?n{Ouqt}QJU0riVy zh$*B^!b|b(M9{)_R7&nLw2RVLz92i&D;&+Y(-R|fNv&)NzMT>1saLm+*q_q*rS#S1 Y7nQOyW5CmeRsaA107*qoM6N<$f;qLsF8}}l literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/merkas.png b/Resources/Textures/_CP14/Mobs/Demigods/temp_icons.rsi/merkas.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2d27105db3d6c9766c02019a2725234f251030 GIT binary patch literal 1096 zcmV-O1h@N%P)Px(0!c(cRCt{2T|08zFbu_JQs@#ceLR;gT}5P9 z@G~RFqmEbpe=A;10)G7Bcji-qpEG`h7R15(>*oasH>;Q1RL4dkAlq5`UB?7-J@g=abOW!8ED31%E;bDui-!XMUai+}RX~fEfZS4QfnOS`fAhEC|KgrS(t(n}9sGulK=6 zZ$+)(XJ1?EnqG)hKsM+Zjw+>nB@@t-)iXRx)Z+uE!cRL7*fY|yJ$bN6oPgF?FdFuH zza&Hm=$#9XFc|mRD7Bl)B4C7oYJ(dC(=%ZY1X|mmLck2;z#07?K#+jCCmtDWop~jW zY^i;bJWXR0&@z68g;~o7i6n~Wf{YOa7(=8*V9rFnJ|Eg^7w7y}6{EZX!-ce;(SnQ- z1Q-WI5lM)~FW}MWcCSI~1K+YCQY);9k3P~pq`a|uYIOs9VJ=>mG9O{yl2Zr zuRU6oO3FH{Xj2bH(+k?V*69^cmT@j+uXB6}lwwWUUzcJXGm@a?v*;Kwx<14nG(|g9 z*8ww-pzQS;;nqo}=LIlhz+N3Sk1Q26@If4LVh_wf| zLPmnn@G- Date: Fri, 13 Jun 2025 16:35:39 +0300 Subject: [PATCH 12/27] infinity mana restriction --- .../Prototypes/_CP14/Damage/containers.yml | 5 +++ .../Entities/Mobs/Player/Demigods/gods.yml | 31 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/_CP14/Damage/containers.yml b/Resources/Prototypes/_CP14/Damage/containers.yml index 7817e90c0c..9977dbe5c0 100644 --- a/Resources/Prototypes/_CP14/Damage/containers.yml +++ b/Resources/Prototypes/_CP14/Damage/containers.yml @@ -16,3 +16,8 @@ - Toxin - Genetic - CP14Magic + +- type: damageContainer + id: CP14Spectral + supportedGroups: + - CP14Magic \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml index b8663233ad..6f38da3e6e 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml @@ -40,10 +40,35 @@ magicAlert: CP14MagicEnergy maxEnergy: 1000 energy: 1000 - unsafeSupport: false + unsafeSupport: true + - type: Damageable + damageContainer: CP14Spectral + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive + 100: Dead + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/eye_close.ogg + params: + volume: -6 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: CP14MagicUnsafeDamage + damagePerEnergy: + types: + CP14ManaDepletion: 1 - type: CP14MagicEnergyDraw - energy: 5 - delay: 6 # 20m to full restore + energy: -3 + delay: 2 # 10m to empty + safe: false - type: IntrinsicRadioTransmitter channels: - CP14Gods From b932d56f15c40f3a9309b8e272e96409230d777f Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:21:09 +0300 Subject: [PATCH 13/27] Gods part 2 (#1420) * spooky scary patreons * Update CP14ReligionSystem.cs * goodbye radio channel * gods? no! Mana parasites! Muahahaha * Update gods.yml * Update primordial.yml --- .../Religion/CP14ReligionEntityWindow.xaml.cs | 6 +- Content.Server/Chat/Systems/ChatSystem.cs | 23 +++---- .../_CP14/Religion/CP14ReligionSystem.UI.cs | 10 ++- .../_CP14/Religion/CP14ReligionSystem.cs | 63 +++++++++++++++++++ .../CP14ReligionFollowerComponent.cs | 19 ++++++ .../CP14ReligionSpeakerComponent.cs | 28 +++++++++ .../Systems/CP14SharedReligionGodSystem.UI.cs | 3 +- .../Locale/en-US/_CP14/headset/radio.ftl | 1 - .../Locale/en-US/_CP14/religion/altar.ftl | 1 + .../Locale/ru-RU/_CP14/headset/radio.ftl | 1 - .../Locale/ru-RU/_CP14/religion/altar.ftl | 1 + .../Actions/Spells/Demigods/Lumera/speak.yml | 21 +++++++ .../Entities/Mobs/Player/Demigods/gods.yml | 21 +++---- .../Specific/Religion/primordial.yml | 4 +- Resources/Prototypes/_CP14/radio_channels.yml | 7 --- 15 files changed, 166 insertions(+), 43 deletions(-) create mode 100644 Content.Shared/_CP14/Religion/Components/CP14ReligionSpeakerComponent.cs delete mode 100644 Resources/Locale/en-US/_CP14/headset/radio.ftl delete mode 100644 Resources/Locale/ru-RU/_CP14/headset/radio.ftl create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml delete mode 100644 Resources/Prototypes/_CP14/radio_channels.yml diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs index 18f98380bb..dd2545b5c4 100644 --- a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs @@ -1,3 +1,4 @@ +using System.Text; using Content.Shared._CP14.Religion.Systems; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.Controls; @@ -64,6 +65,9 @@ public sealed partial class CP14ReligionEntityWindow : DefaultWindow private string GetStatusText(CP14ReligionEntityUiState state) { - return Loc.GetString("cp14-god-ui-follower-percentage", ("count", state.FollowerPercentage * 100)); + var sb = new StringBuilder(); + sb.Append(Loc.GetString("cp14-god-ui-follower-percentage", ("count", state.FollowerPercentage * 100)) + "\n"); + sb.Append(Loc.GetString("cp14-god-ui-mana-percentage", ("count", state.ManaPercentage * 100)) + "\n"); + return sb.ToString(); } } diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 05547fc46b..0a7087f152 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -1,17 +1,15 @@ using System.Globalization; using System.Linq; using System.Text; +using Content.Server._CP14.Religion; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Chat.Managers; using Content.Server.GameTicking; -using Content.Server.Players.RateLimiting; -using Content.Server.Radio.EntitySystems; using Content.Server.Speech.Prototypes; using Content.Server.Speech.EntitySystems; using Content.Server.Station.Components; using Content.Server.Station.Systems; -using Content.Shared._CP14.Religion.Components; using Content.Shared.ActionBlocker; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -62,9 +60,6 @@ public sealed partial class ChatSystem : SharedChatSystem [Dependency] private readonly ReplacementAccentSystem _wordreplacement = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; [Dependency] private readonly ExamineSystemShared _examineSystem = default!; - //CP14 - [Dependency] private readonly RadioSystem _radio = default!; - //CP14 end public const int VoiceRange = 10; // how far voice goes in world units public const int WhisperClearRange = 2; // how far whisper goes while still being understandable, in world units @@ -179,15 +174,6 @@ public sealed partial class ChatSystem : SharedChatSystem bool ignoreActionBlocker = false ) { - //CP14 Zone - if (HasComp(source)) - { - TryProccessRadioMessage(source, message, out var modMessage, out var channel); - _radio.SendRadioMessage(source, modMessage, "CP14Gods", source); - return; - } - //CP14 Zone end - if (HasComp(source)) { // Ghosts can only send dead chat messages, so we'll forward it to InGame OOC. @@ -207,6 +193,13 @@ public sealed partial class ChatSystem : SharedChatSystem if (!CanSendInGame(message, shell, player)) return; + //CP14 Prevent god from default speaking. In waiting of chatcode refactor + var ev = new CP14SpokeAttemptEvent(message, desiredType, player); + RaiseLocalEvent(source, ev); + if (ev.Cancelled) + return; + //CP14 end + ignoreActionBlocker = CheckIgnoreSpeechBlocker(source, ignoreActionBlocker); // this method is a disaster diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs index 2716e4cfcb..d1dbd762b9 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs @@ -1,5 +1,7 @@ +using Content.Shared._CP14.MagicEnergy.Components; using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Systems; +using Content.Shared.FixedPoint; using Content.Shared.Follower; using Robust.Server.GameObjects; @@ -70,6 +72,12 @@ public sealed partial class CP14ReligionGodSystem ent.Comp.FollowerPercentage = followerPercentage; Dirty(ent); - _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage)); + FixedPoint2 manaPercentage = 0f; + if (TryComp(ent, out var manaContainerComponent)) + { + manaPercentage = manaContainerComponent.Energy / manaContainerComponent.MaxEnergy; + } + + _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage, (float)manaPercentage)); } } diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs index a64d086016..35284d3701 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs @@ -1,5 +1,8 @@ +using Content.Server._CP14.MagicEnergy; using Content.Server.Chat.Managers; +using Content.Server.Chat.Systems; using Content.Server.Speech; +using Content.Shared._CP14.MagicEnergy.Components; using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Prototypes; using Content.Shared._CP14.Religion.Systems; @@ -8,13 +11,18 @@ using Robust.Server.GameStates; using Robust.Shared.Network; using Robust.Shared.Player; using Robust.Shared.Prototypes; +using Robust.Shared.Timing; namespace Content.Server._CP14.Religion; public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem { [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly ChatSystem _chatSys = default!; [Dependency] private readonly PvsOverrideSystem _pvs = default!; + [Dependency] private readonly CP14MagicEnergySystem _magicEnergy = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; public override void Initialize() { @@ -28,10 +36,57 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem SubscribeLocalEvent(OnGodShutdown); SubscribeLocalEvent(OnPlayerAttached); SubscribeLocalEvent(OnPlayerDetached); + SubscribeLocalEvent(OnSpokeAttempt); SubscribeLocalEvent(OnListen); } + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var follower, out var energy)) + { + if (follower.NextUpdateTime >= _gameTiming.CurTime) + continue; + + if (follower.Religion is null) + continue; + + follower.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(follower.ManaTransferDelay); + + foreach (var god in GetGods(follower.Religion.Value)) + { + _magicEnergy.TransferEnergy((uid, energy), god.Owner, follower.EnergyToGodTransfer, out _, out _, safe: true); + } + } + } + + private void OnSpokeAttempt(Entity ent, ref CP14SpokeAttemptEvent args) + { + args.Cancel(); + + if (!TryComp(ent, out var god) || god.Religion is null) + return; + + if (ent.Comp.RestrictedReligionZone && !InVision(ent, (ent, god))) + return; + + _magicEnergy.ChangeEnergy(ent.Owner, -ent.Comp.ManaCost, out _, out _); + + var speaker = Spawn(ent.Comp.Speaker); + _transform.DropNextTo(speaker, ent.Owner); + + var message = args.Message; + var type = args.Type; + Timer.Spawn(333, + () => + { + _chatSys.TrySendInGameICMessage(speaker, message, type, ChatTransmitRange.Normal, nameOverride: MetaData(ent).EntityName, ignoreActionBlocker: true); + }); + } + private void OnObserverHandleState(Entity ent, ref AfterAutoHandleStateEvent args) { var query = EntityQueryEnumerator(); @@ -175,3 +230,11 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem AddPvsOverrides(ent); } } + +public sealed class CP14SpokeAttemptEvent(string message, InGameICChatType type, ICommonSession? player) : CancellableEntityEventArgs +{ + public string Message = message; + public InGameICChatType Type = type; + public ICommonSession? Player = player; +} + diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs index 4a8a452848..bd54272429 100644 --- a/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs @@ -1,5 +1,6 @@ using Content.Shared._CP14.Religion.Prototypes; using Content.Shared._CP14.Religion.Systems; +using Content.Shared.FixedPoint; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -22,4 +23,22 @@ public sealed partial class CP14ReligionFollowerComponent : Component [DataField] public EntityUid? RenounceAction; + + ///

+ /// how much energy does the entity transfer to its god + /// + [DataField] + public FixedPoint2 EnergyToGodTransfer = 0.5f; + + /// + /// how often will the entity transfer mana to its patreon + /// + [DataField] + public float ManaTransferDelay = 3f; + + /// + /// the time of the next magic energy change + /// + [DataField] + public TimeSpan NextUpdateTime { get; set; } = TimeSpan.Zero; } diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionSpeakerComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionSpeakerComponent.cs new file mode 100644 index 0000000000..f7c06110dc --- /dev/null +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionSpeakerComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.FixedPoint; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._CP14.Religion.Components; + +/// +/// Disables standard communication. Instead, attempts to say anything will consume mana, will be limited by the zone +/// of influence of religion, and will be spoken through the created entity of the “speaker.” +/// +[RegisterComponent, NetworkedComponent, Access(typeof(CP14SharedReligionGodSystem))] +public sealed partial class CP14ReligionSpeakerComponent : Component +{ + [DataField] + public FixedPoint2 ManaCost = 5f; + + [DataField(required: true)] + public EntProtoId Speaker; + + /// + /// You can only talk within the sphere of influence of religion. + /// + [DataField] + public bool RestrictedReligionZone = true; +} + + diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs index 3667d1ecf4..bd465d5bf5 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs @@ -9,11 +9,12 @@ public enum CP14ReligionEntityUiKey } [Serializable, NetSerializable] -public sealed class CP14ReligionEntityUiState(Dictionary altars, Dictionary followers, float followerPercentage) : BoundUserInterfaceState +public sealed class CP14ReligionEntityUiState(Dictionary altars, Dictionary followers, float followerPercentage, float manaPercentage) : BoundUserInterfaceState { public Dictionary Altars = altars; public Dictionary Followers = followers; public float FollowerPercentage = followerPercentage; + public float ManaPercentage = manaPercentage; } [Serializable, NetSerializable] diff --git a/Resources/Locale/en-US/_CP14/headset/radio.ftl b/Resources/Locale/en-US/_CP14/headset/radio.ftl deleted file mode 100644 index 298b150008..0000000000 --- a/Resources/Locale/en-US/_CP14/headset/radio.ftl +++ /dev/null @@ -1 +0,0 @@ -cp14-chat-radio-gods = Divine \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/religion/altar.ftl b/Resources/Locale/en-US/_CP14/religion/altar.ftl index 26d64f8228..fd0691d6b5 100644 --- a/Resources/Locale/en-US/_CP14/religion/altar.ftl +++ b/Resources/Locale/en-US/_CP14/religion/altar.ftl @@ -11,6 +11,7 @@ cp14-god-ui-title = Fast Travel cp14-god-ui-follower = Followers cp14-god-ui-altars = Altars cp14-god-ui-follower-percentage = Follower percentage: {$count}% +cp14-god-ui-mana-percentage = Divine energy: {$count}% cp14-altar-become-follower = Become a follower cp14-altar-become-follower-desc = You offer yourself into the service of your patron. If he agrees, your bond will be strengthened. diff --git a/Resources/Locale/ru-RU/_CP14/headset/radio.ftl b/Resources/Locale/ru-RU/_CP14/headset/radio.ftl deleted file mode 100644 index 09c8f115ab..0000000000 --- a/Resources/Locale/ru-RU/_CP14/headset/radio.ftl +++ /dev/null @@ -1 +0,0 @@ -cp14-chat-radio-gods = Божественный \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/religion/altar.ftl b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl index 54c2e671ed..32628eabad 100644 --- a/Resources/Locale/ru-RU/_CP14/religion/altar.ftl +++ b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl @@ -11,6 +11,7 @@ cp14-god-ui-title = Быстрое перемещение cp14-god-ui-follower = Последователи cp14-god-ui-altars = Алтари cp14-god-ui-follower-percentage = Процент последователей: {$count}% +cp14-god-ui-mana-percentage = Божественная энергия: {$count}% cp14-altar-become-follower = Стать последователем cp14-altar-become-follower-desc = Вы предлагаете себя в службу покровителю. Если он согласится, ваша связь укрепится. diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml new file mode 100644 index 0000000000..f57b5e4883 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml @@ -0,0 +1,21 @@ +- type: entity + id: CP14LumeraSpeakImpact + categories: [ ForkFiltered ] + parent: CP14BaseMagicImpact + save: false + components: + - type: PointLight + color: "#3843a8" + enabled: true + radius: 5 + energy: 4 + netsync: false + - type: Sprite + layers: + - state: stars + color: "#3843a8" + shader: unshaded + - type: LightFade + duration: 1 + - type: TimedDespawn + lifetime: 2 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml index 6f38da3e6e..abe437ee0c 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml @@ -38,8 +38,8 @@ - type: CP14ReligionVision - type: CP14MagicEnergyContainer magicAlert: CP14MagicEnergy - maxEnergy: 1000 - energy: 1000 + maxEnergy: 500 + energy: 500 unsafeSupport: true - type: Damageable damageContainer: CP14Spectral @@ -66,18 +66,9 @@ types: CP14ManaDepletion: 1 - type: CP14MagicEnergyDraw - energy: -3 - delay: 2 # 10m to empty + energy: -1.5 + delay: 3 safe: false - - type: IntrinsicRadioTransmitter - channels: - - CP14Gods - - type: IntrinsicRadioReceiver - - type: ActiveRadio - receiveAllChannels: true - globalReceive: true - channels: - - CP14Gods - type: CP14SpellStorage grantAccessToSelf: true spells: @@ -135,4 +126,6 @@ - type: IntrinsicUI uis: enum.CP14ReligionEntityUiKey.Key: - toggleAction: CP14ActionSpellGodLumeraWarp \ No newline at end of file + toggleAction: CP14ActionSpellGodLumeraWarp + - type: CP14ReligionSpeaker + speaker: CP14LumeraSpeakImpact \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml index c71fad7530..e140e91fb5 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml @@ -12,7 +12,7 @@ religion: Lumera - type: CP14ReligionObserver observation: - Lumera: 25 + Lumera: 10 - type: SpawnPoint job_id: CP14GodLumera @@ -30,6 +30,6 @@ religion: Merkas - type: CP14ReligionObserver observation: - Merkas: 25 + Merkas: 10 - type: SpawnPoint job_id: CP14GodMerkas \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/radio_channels.yml b/Resources/Prototypes/_CP14/radio_channels.yml deleted file mode 100644 index d0f0b2b09a..0000000000 --- a/Resources/Prototypes/_CP14/radio_channels.yml +++ /dev/null @@ -1,7 +0,0 @@ -- type: radioChannel - id: CP14Gods - name: cp14-chat-radio-gods - keycode: 'g' - frequency: 666 - color: "#fad634" - longRange: true From fc0beb5ccfba8af23cf7de51dcac00e393081958 Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 14 Jun 2025 02:11:36 +0300 Subject: [PATCH 14/27] Gods part 3 (#1421) * apprice action, dead notice * fix refollowing * mist lumera action --- .../Religion/CP14ClientReligionGodSystem.cs | 2 +- .../_CP14/Religion/CP14ReligionSystem.UI.cs | 2 +- .../_CP14/Religion/CP14ReligionSystem.cs | 7 +- .../CP14SharedMagicSystem.InstantActions.cs | 18 +++++ .../MagicSpell/Events/CP14ActionsEvents.cs | 6 ++ .../Spells/CP14SpellSendMessageToGod.cs | 25 ++++++ .../Spells/CP14SpellTransferManaToGod.cs | 37 +++++++++ .../CP14ReligionFollowerComponent.cs | 6 ++ .../CP14SharedReligionGodSystem.Altars.cs | 7 -- .../CP14SharedReligionGodSystem.Followers.cs | 47 +++++++++++ .../Systems/CP14SharedReligionGodSystem.UI.cs | 7 +- .../Systems/CP14SharedReligionGodSystem.cs | 2 +- .../Locale/en-US/_CP14/religion/altar.ftl | 3 + .../Locale/ru-RU/_CP14/religion/altar.ftl | 3 + .../Spells/Demigods/Lumera/darkmist.yml | 73 ++++++++++++++++++ .../Actions/Spells/Demigods/generic.yml | 28 ++++++- .../_CP14/Skill/Demigods/lumera.yml | 15 ++++ .../DemigodSpells/generic.rsi/appeal.png | Bin 0 -> 318 bytes .../DemigodSpells/generic.rsi/meta.json | 14 ++++ .../DemigodSpells/lumera.rsi/meta.json | 3 + .../Actions/DemigodSpells/lumera.rsi/mist.png | Bin 0 -> 554 bytes 21 files changed, 288 insertions(+), 17 deletions(-) create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellSendMessageToGod.cs create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellTransferManaToGod.cs create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/darkmist.yml create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/appeal.png create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mist.png diff --git a/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs b/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs index 3be4e03fdb..d2beb082c0 100644 --- a/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs +++ b/Content.Client/_CP14/Religion/CP14ClientReligionGodSystem.cs @@ -25,7 +25,7 @@ public sealed partial class CP14ClientReligionGodSystem : CP14SharedReligionGodS SubscribeLocalEvent(OnOverlayRemove); } - protected override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) { } + public override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) { } public override void Shutdown() { diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs index d1dbd762b9..4d46b02b5c 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs @@ -78,6 +78,6 @@ public sealed partial class CP14ReligionGodSystem manaPercentage = manaContainerComponent.Energy / manaContainerComponent.MaxEnergy; } - _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage, (float)manaPercentage)); + _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage, manaPercentage)); } } diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs index 35284d3701..53857f0d1f 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs @@ -7,6 +7,7 @@ using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Prototypes; using Content.Shared._CP14.Religion.Systems; using Content.Shared.Chat; +using Content.Shared.FixedPoint; using Robust.Server.GameStates; using Robust.Shared.Network; using Robust.Shared.Player; @@ -140,7 +141,7 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem SendMessageToGods(ent.Comp.Religion.Value, wrappedMessage, args.Source); } - protected override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) + public override void SendMessageToGods(ProtoId religion, string msg, EntityUid source) { var gods = GetGods(religion); @@ -156,7 +157,7 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem _chat.ChatMessageToMany(ChatChannel.Notifications, msg, msg, source, false, true, channels, colorOverride: Color.Aqua); } - public float GetFollowerPercentage(Entity god) + public FixedPoint2 GetFollowerPercentage(Entity god) { var total = 0; var followers = 0; @@ -177,7 +178,7 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem if (total == 0) return 0f; - return (float)followers / total; + return followers / total; } private void AddPvsOverrides(Entity ent) diff --git a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.InstantActions.cs b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.InstantActions.cs index 747f2ea102..ab77d55096 100644 --- a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.InstantActions.cs +++ b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.InstantActions.cs @@ -10,6 +10,7 @@ public abstract partial class CP14SharedMagicSystem { SubscribeLocalEvent(OnMagicInstantAction); SubscribeLocalEvent(OnMagicEntityWorldTargetAction); + SubscribeLocalEvent(OnMagicWorldTargetAction); SubscribeLocalEvent(OnMagicEntityTargetAction); } @@ -47,6 +48,23 @@ public abstract partial class CP14SharedMagicSystem _action.CP14StartCustomDelay(args.Action, args.Cooldown); } + private void OnMagicWorldTargetAction(CP14WorldTargetActionEvent args) + { + if (args.Handled) + return; + + if (!TryComp(args.Action, out var magicEffect)) + return; + + var spellArgs = new CP14SpellEffectBaseArgs(args.Performer, magicEffect.SpellStorage, null, args.Target); + + if (!CanCastSpell((args.Action, magicEffect), spellArgs)) + return; + + CastSpell((args.Action, magicEffect), spellArgs); + _action.CP14StartCustomDelay(args.Action, args.Cooldown); + } + private void OnMagicEntityTargetAction(CP14EntityTargetActionEvent args) { if (args.Handled) diff --git a/Content.Shared/_CP14/MagicSpell/Events/CP14ActionsEvents.cs b/Content.Shared/_CP14/MagicSpell/Events/CP14ActionsEvents.cs index 5bc14516f5..9669dd32eb 100644 --- a/Content.Shared/_CP14/MagicSpell/Events/CP14ActionsEvents.cs +++ b/Content.Shared/_CP14/MagicSpell/Events/CP14ActionsEvents.cs @@ -13,6 +13,12 @@ public sealed partial class CP14EntityWorldTargetActionEvent : EntityWorldTarget public TimeSpan Cooldown { get; private set; } = TimeSpan.FromSeconds(1f); } +public sealed partial class CP14WorldTargetActionEvent : WorldTargetActionEvent, ICP14MagicEffect +{ + [DataField] + public TimeSpan Cooldown { get; private set; } = TimeSpan.FromSeconds(1f); +} + public sealed partial class CP14EntityTargetActionEvent : EntityTargetActionEvent, ICP14MagicEffect { [DataField] diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellSendMessageToGod.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellSendMessageToGod.cs new file mode 100644 index 0000000000..2298a3116e --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellSendMessageToGod.cs @@ -0,0 +1,25 @@ +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Systems; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellSendMessageToGod : CP14SpellEffect +{ + [DataField] + public LocId? Message; + + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (!entManager.TryGetComponent(args.User, out var follower)) + return; + if (!entManager.TryGetComponent(args.User, out var metaData)) + return; + + if (follower.Religion is null) + return; + + var religionSys = entManager.System(); + + religionSys.SendMessageToGods(follower.Religion.Value, Loc.GetString("cp14-call-follower-message", ("name", metaData.EntityName)) + " " + Loc.GetString(Message?? ""), args.User.Value); + } +} diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellTransferManaToGod.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellTransferManaToGod.cs new file mode 100644 index 0000000000..4a8803979b --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellTransferManaToGod.cs @@ -0,0 +1,37 @@ +using Content.Shared._CP14.MagicEnergy; +using Content.Shared._CP14.Religion.Components; +using Content.Shared._CP14.Religion.Systems; +using Content.Shared.FixedPoint; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellTransferManaToGod : CP14SpellEffect +{ + [DataField] + public FixedPoint2 Amount = 10f; + + [DataField] + public bool Safe = false; + + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (args.User is null) + return; + + if (!entManager.TryGetComponent(args.User, out var follower)) + return; + + if (follower.Religion is null) + return; + + var religionSys = entManager.System(); + var magicEnergySys = entManager.System(); + + var gods = religionSys.GetGods(follower.Religion.Value); + var manaAmount = Amount / gods.Count; + foreach (var god in gods) + { + magicEnergySys.TransferEnergy(args.User.Value, god.Owner, manaAmount, out _, out _, safe: Safe); + } + } +} diff --git a/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs index bd54272429..2f9a4d1c93 100644 --- a/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs +++ b/Content.Shared/_CP14/Religion/Components/CP14ReligionFollowerComponent.cs @@ -21,9 +21,15 @@ public sealed partial class CP14ReligionFollowerComponent : Component [DataField] public EntProtoId RenounceActionProto = "CP14ActionRenounceFromGod"; + [DataField] + public EntProtoId AppealToGofProto = "CP14ActionAppealToGod"; + [DataField] public EntityUid? RenounceAction; + [DataField] + public EntityUid? AppealAction; + /// /// how much energy does the entity transfer to its god /// diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs index 135b587c12..a653d63f48 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs @@ -1,4 +1,3 @@ - using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Prototypes; using Content.Shared.DoAfter; @@ -13,15 +12,9 @@ public abstract partial class CP14SharedReligionGodSystem [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; private void InitializeAltars() { - SubscribeLocalEvent>(GetBaseVerb); SubscribeLocalEvent>(GetAltVerb); } - private void GetBaseVerb(Entity ent, ref GetVerbsEvent args) - { - - } - private void GetAltVerb(Entity ent, ref GetVerbsEvent args) { if (ent.Comp.Religion is null) diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs index da7a10a3e9..981f2f3ee5 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs @@ -3,7 +3,10 @@ using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Prototypes; using Content.Shared.Actions; using Content.Shared.Alert; +using Content.Shared.Follower; using Content.Shared.Mind; +using Content.Shared.Mobs; +using Content.Shared.Verbs; using Robust.Shared.Prototypes; namespace Content.Shared._CP14.Religion.Systems; @@ -13,6 +16,8 @@ public abstract partial class CP14SharedReligionGodSystem [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] protected readonly SharedMindSystem Mind = default!; + [Dependency] private readonly FollowerSystem _follower = default!; + private void InitializeFollowers() { SubscribeLocalEvent(OnPendingFollowerInit); @@ -23,6 +28,43 @@ public abstract partial class CP14SharedReligionGodSystem SubscribeLocalEvent(OnOfferDoAfter); SubscribeLocalEvent(OnRenounceFromGod); + SubscribeLocalEvent>(OnGetAltVerbs); + SubscribeLocalEvent(OnFollowerStateChange); + } + + private void OnFollowerStateChange(Entity ent, ref MobStateChangedEvent args) + { + if (ent.Comp.Religion is null) + return; + + switch (args.NewMobState) + { + case MobState.Critical: + SendMessageToGods(ent.Comp.Religion.Value, Loc.GetString("cp14-critical-follower-message", ("name", MetaData(ent).EntityName)), ent); + break; + + case MobState.Dead: + SendMessageToGods(ent.Comp.Religion.Value, Loc.GetString("cp14-dead-follower-message", ("name", MetaData(ent).EntityName)), ent); + break; + } + } + + private void OnGetAltVerbs(EntityUid uid, CP14ReligionFollowerComponent component, GetVerbsEvent args) + { + if (!TryComp(args.User, out var god)) + return; + + if (god.Religion != component.Religion) + return; + + args.Verbs.Add(new AlternativeVerb + { + Text = Loc.GetString("admin-player-actions-follow"), + Act = () => + { + _follower.StartFollowingEntity(args.User, uid); + }, + }); } private void OnRenounceFromGod(Entity ent, ref CP14RenounceFromGodEvent args) @@ -78,6 +120,9 @@ public abstract partial class CP14SharedReligionGodSystem EnsureComp(target, out var follower); + if (follower.Religion is not null) + return false; + return !follower.RejectedReligions.Contains(religion); } @@ -118,6 +163,7 @@ public abstract partial class CP14SharedReligionGodSystem SendMessageToGods(pending.Comp.Religion.Value, Loc.GetString("cp14-become-follower-message", ("name", MetaData(pending).EntityName)), pending); _actions.AddAction(pending, ref follower.RenounceAction, follower.RenounceActionProto); + _actions.AddAction(pending, ref follower.AppealAction, follower.AppealToGofProto); return true; } @@ -146,6 +192,7 @@ public abstract partial class CP14SharedReligionGodSystem Dirty(target, follower); _actions.RemoveAction(target, follower.RenounceAction); + _actions.RemoveAction(target, follower.AppealAction); } } diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs index bd465d5bf5..bc5d83c6f6 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.UI.cs @@ -1,3 +1,4 @@ +using Content.Shared.FixedPoint; using Robust.Shared.Serialization; namespace Content.Shared._CP14.Religion.Systems; @@ -9,12 +10,12 @@ public enum CP14ReligionEntityUiKey } [Serializable, NetSerializable] -public sealed class CP14ReligionEntityUiState(Dictionary altars, Dictionary followers, float followerPercentage, float manaPercentage) : BoundUserInterfaceState +public sealed class CP14ReligionEntityUiState(Dictionary altars, Dictionary followers, FixedPoint2 followerPercentage, FixedPoint2 manaPercentage) : BoundUserInterfaceState { public Dictionary Altars = altars; public Dictionary Followers = followers; - public float FollowerPercentage = followerPercentage; - public float ManaPercentage = manaPercentage; + public FixedPoint2 FollowerPercentage = followerPercentage; + public FixedPoint2 ManaPercentage = manaPercentage; } [Serializable, NetSerializable] diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs index 9f38e06caa..88e49d8402 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.cs @@ -33,7 +33,7 @@ public abstract partial class CP14SharedReligionGodSystem : EntitySystem return gods; } - protected abstract void SendMessageToGods(ProtoId religion, string msg, EntityUid source); + public abstract void SendMessageToGods(ProtoId religion, string msg, EntityUid source); } /// diff --git a/Resources/Locale/en-US/_CP14/religion/altar.ftl b/Resources/Locale/en-US/_CP14/religion/altar.ftl index fd0691d6b5..3f8301ee75 100644 --- a/Resources/Locale/en-US/_CP14/religion/altar.ftl +++ b/Resources/Locale/en-US/_CP14/religion/altar.ftl @@ -3,6 +3,9 @@ cp14-offer-soul-god-message = [bold]{$name}[/bold] [color=green]wants to become cp14-unoffer-soul-god-message = [bold]{$name}[/bold] [color=red]has changed his mind about becoming your follower.[/color] cp14-become-follower-message = [bold]{$name}[/bold] [color=green]becomes your follower[/color]! cp14-remove-follower-message = [bold]{$name}[/bold] [color=red]rejects you and will never be able to return to you![/color] +cp14-call-follower-message = [bold]{$name}[/bold] appeals to you! +cp14-critical-follower-message = [bold]{$name}[/bold] is falling into critical condition! +cp14-dead-follower-message = [bold]{$name}[/bold] is dead! cp14-renounce-action-popup = YOU ARE RENOUNCING YOUR PATRON! To confirm, perform the action again. cp-renounce-action-god-popup = YOU ARE REJECTING YOUR FOLLOWER! To confirm, perform the action again. diff --git a/Resources/Locale/ru-RU/_CP14/religion/altar.ftl b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl index 32628eabad..df2322485d 100644 --- a/Resources/Locale/ru-RU/_CP14/religion/altar.ftl +++ b/Resources/Locale/ru-RU/_CP14/religion/altar.ftl @@ -3,6 +3,9 @@ cp14-offer-soul-god-message = [bold]{$name}[/bold] [color=green]хочет ст cp14-unoffer-soul-god-message = [bold]{$name}[/bold] [color=red]передумал становиться вашим последователем.[/color] cp14-become-follower-message = [bold]{$name}[/bold] [color=green]становится вашим последователем[/color]! cp14-remove-follower-message = [bold]{$name}[/bold] [color=red]отвергает вас, и больше никогда не сможет вернться к вам![/color] +cp14-call-follower-message = [bold]{$name}[/bold] взывает к вам! +cp14-critical-follower-message = [bold]{$name}[/bold] падает в критическое состояние! +cp14-dead-follower-message = [bold]{$name}[/bold] погибает! cp14-renounce-action-popup = ВЫ ОТРЕКАЕТЕСЬ ОТ ПОКРОВИТЕЛЯ! Для подтверждения выполните действие еще раз. cp-renounce-action-god-popup = ВЫ ОТВЕРГАЕТЕ СВОЕГО ПОСЛЕДОВАТЕЛЯ! Для подтверждения выполните действие еще раз. diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/darkmist.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/darkmist.yml new file mode 100644 index 0000000000..8673a34bc7 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/darkmist.yml @@ -0,0 +1,73 @@ +- type: entity + id: CP14ActionSpellGodLumeraDarkmist + name: Impenetrable darkness + description: You summon a thick fog that obscures vision and disorients mortals. + components: + - type: CP14MagicEffectReligionRestricted + - type: CP14MagicEffectManaCost + manaCost: 10 + - type: CP14MagicEffect + telegraphyEffects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectFlashLight + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14LumeraDarkMist + - type: WorldTargetAction + repeat: true + checkCanAccess: false + range: 100 + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/Eldritch/voidblink.ogg + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: mist + event: !type:CP14WorldTargetActionEvent + cooldown: 0.15 + +- type: entity + parent: + - BaseStructure + - BaseShadow + id: CP14LumeraDarkMist + categories: [ HideSpawnMenu ] + components: + - type: SyncSprite + - type: TimedDespawn + lifetime: 60 + - type: Occluder + - type: Sprite + drawdepth: Effects + sprite: Effects/spookysmoke.rsi + layers: + - state: spookysmoke + color: "#3266a8" + map: [base] + - type: OptionsVisualizer + visuals: + base: + - options: Default + data: { state: spookysmoke } + - options: ReducedMotion + data: { state: spookysmoke_static } + - type: Physics + bodyType: Static + canCollide: false + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.5,-0.5,0.5,0.5" + layer: + - SlipLayer + mask: + - ItemMask + density: 1000 + hard: false + - type: Tag + tags: + - HideContextMenu diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml index 1f3db51599..39c3318f20 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml @@ -10,4 +10,30 @@ priority: -8 event: !type:CP14RenounceFromGodEvent - type: ConfirmableAction - popup: cp14-renounce-action-popup \ No newline at end of file + popup: cp14-renounce-action-popup + +- type: entity + id: CP14ActionAppealToGod + name: Appeal to god + description: You call upon your patron! He will hear your call wherever he may be. + components: + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14ImpactEffectSphereOfLight + - !type:CP14SpellTransferManaToGod + amount: 20 + safe: false + - !type:CP14SpellSendMessageToGod + - type: InstantAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + icon: + sprite: _CP14/Actions/DemigodSpells/generic.rsi + state: appeal + priority: -8 + event: !type:CP14DelayedInstantActionEvent + cooldown: 15 + castDelay: 1.5 + breakOnMove: true \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml index 4aa20b8d1c..71040be411 100644 --- a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml +++ b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml @@ -57,6 +57,21 @@ - !type:GodFollowerPercentage percentage: 0.3 +- type: cp14Skill + id: LumeraDarkMist + skillUiPosition: 6, 3 + tree: GodLumera + learnCost: 1.0 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: mist + effects: + - !type:AddAction + action: CP14ActionSpellGodLumeraDarkmist + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT2 + # T3 - type: cp14Skill diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/appeal.png b/Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/appeal.png new file mode 100644 index 0000000000000000000000000000000000000000..905788b6f2f7eedc03bcc97ac22fcc7d12133080 GIT binary patch literal 318 zcmV-E0m1%>P)Px#_(?=TR9J=WlsyiDKoCYhl*E$CMibnUm~aA=LYu8U3J2i|-oTp5LLeT1gvx^8 zDX7*8LkK?uXtbEu!A^GG&dw~rFbwl!G-{wDz1w2D+t>dWX%xnR?~WCiPe~2{`qJF2 zjP>#PxSz)e%qT%^$*Jp;1RUwzC>v4Z1`AM6H?|6-E1+`lE~@&SOR3sozant;Pw%P9 zrBr4R^iEl?K#@k_P?1CkQgQ&$hi=|P_2d9xXPH)t7?uS9XcHn?cD(~lB8d>Hl<0%h z199NHT~|@0QCO{lon;!O0f7k>pgh5pMkEQ;$7|~QKUknD@yX;2!!Uor3#6i8e6~%` Q761SM07*qoM6N<$f+aA9WB>pF literal 0 HcmV?d00001 diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/meta.json new file mode 100644 index 0000000000..70a3e715dd --- /dev/null +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/generic.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "All right reserved", + "copyright": "Created by TheShuEd", + "states": [ + { + "name": "appeal" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json index 9e51bb79c9..c43657ae34 100644 --- a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json @@ -16,6 +16,9 @@ { "name": "renounce" }, + { + "name": "mist" + }, { "name": "t1" }, diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mist.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mist.png new file mode 100644 index 0000000000000000000000000000000000000000..78491c7003c745efd53df5e77181703fdd5781e8 GIT binary patch literal 554 zcmV+_0@eMAP)Px$^uN@^=1o~DyD z;VP>LLI|YF6;`GQbI#4p?1u!B!WV>N-P`xMnc3L|IO~s9JLRR`I9W*JtJ!q;D*&Ib zUx(}4tKvV+P?HM?dRQZ%nb*Vq0H5!=Av~`$007u$%hVMDz>)&VoEn?7&z7kRgbKjT z(fIA@MVueRkriq_omBipfKl>z04RsnWG+EqDo|Q9YShq05=0P3#kdAx1d!AlCkvWy zG|0ER(!55e?F8Ox=3-5V05{!xF(TaD1)|l=jj6bhUfQf5YOQ9T25}@77dOneyW$7% zlLqZwu1nhlDd$oo5Q>}D!~TF4^C;{e0FFCC1n}*A2-WDc#bTsQil?Ab1JwNeqfr#0 zmVYjq9)vJ$$x;nabGielxm0j;jLyYqn7U^v0=;pvpkK`w^p$OkZq^US!${kD0LMmS zgV79wI8vKZB?7jdZ`%P<5o(%GC)MLv>wvz}0Qi94Y+9POrmvAJn)OC1mPnNBHe~c04OaTws4+u sB^Lo)flSiA_9Osb7&Mnsde*t<807*qoM6N<$f@C%Jwg3PC literal 0 HcmV?d00001 From 7760e8f6283b3fd681217d8dab5fa48e64989a8d Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 14 Jun 2025 14:21:25 +0300 Subject: [PATCH 15/27] God part 4 (#1422) * projectile spell improve * mind improve --- .../CP14SharedMagicSystem.Checks.cs | 11 +- .../Spells/CP14SpellAddMemoryPoint.cs | 22 ++++ .../MagicSpell/Spells/CP14SpellProjectile.cs | 30 ++++- .../_CP14/Skill/CP14SharedSkillSystem.cs | 15 +++ .../Audio/_CP14/Effects/attributions.yml | 7 +- .../Audio/_CP14/Effects/ritual_begin.ogg | Bin 0 -> 178407 bytes Resources/Audio/_CP14/Effects/ritual_end.ogg | Bin 0 -> 38025 bytes Resources/Locale/en-US/_CP14/skill/ui.ftl | 4 +- Resources/Locale/ru-RU/_CP14/skill/ui.ftl | 4 +- .../Spells/Demigods/Lumera/mind_upgrade.yml | 123 ++++++++++++++++++ .../Structures/Specific/Religion/base.yml | 2 +- .../Specific/Religion/primordial.yml | 34 ++--- .../_CP14/Skill/Demigods/lumera.yml | 17 ++- .../DemigodSpells/lumera.rsi/meta.json | 3 + .../DemigodSpells/lumera.rsi/mind_upgrade.png | Bin 0 -> 573 bytes 15 files changed, 244 insertions(+), 28 deletions(-) create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs create mode 100644 Resources/Audio/_CP14/Effects/ritual_begin.ogg create mode 100644 Resources/Audio/_CP14/Effects/ritual_end.ogg create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mind_upgrade.png diff --git a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs index c80a3e0cce..8ce8d72002 100644 --- a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs +++ b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs @@ -157,11 +157,18 @@ public abstract partial class CP14SharedMagicSystem private void OnReligionRestrictedCheck(Entity ent, ref CP14CastMagicEffectAttemptEvent args) { - if (!TryComp(args.Performer, out var religionComp)) return; - if (args.Position is not null && _god.InVision(args.Position.Value, (args.Performer, religionComp))) + var position = args.Position; + + if (args.Target is not null) + position ??= Transform(args.Target.Value).Coordinates; + + if (position is null) + return; + + if (_god.InVision(position.Value, (args.Performer, religionComp))) return; args.Cancel(); diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs new file mode 100644 index 0000000000..590a699fd0 --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellAddMemoryPoint.cs @@ -0,0 +1,22 @@ +using Content.Shared._CP14.Skill; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellAddMemoryPoint : CP14SpellEffect +{ + [DataField] + public float AddedPoints = 0.5f; + + [DataField] + public float Limit = 6.5f; + + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (args.Target is null) + return; + + var skillSys = entManager.System(); + + skillSys.AddMemoryPoints(args.Target.Value, AddedPoints, Limit); + } +} diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellProjectile.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellProjectile.cs index 50deac91d5..1e77e3991c 100644 --- a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellProjectile.cs +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellProjectile.cs @@ -1,7 +1,9 @@ +using System.Numerics; using Content.Shared.Weapons.Ranged.Systems; using Robust.Shared.Map; using Robust.Shared.Physics.Systems; using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Shared._CP14.MagicSpell.Spells; @@ -10,6 +12,15 @@ public sealed partial class CP14SpellProjectile : CP14SpellEffect [DataField(required: true)] public EntProtoId Prototype; + [DataField] + public float ProjectileSpeed = 20f; + + [DataField] + public float Spread = 0f; + + [DataField] + public int ProjectileCount = 1; + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) { EntityCoordinates? targetPoint = null; @@ -27,6 +38,7 @@ public sealed partial class CP14SpellProjectile : CP14SpellEffect var physics = entManager.System(); var gunSystem = entManager.System(); var mapManager = IoCManager.Resolve(); + var random = IoCManager.Resolve(); if (!entManager.TryGetComponent(args.User, out var xform)) return; @@ -40,14 +52,24 @@ public sealed partial class CP14SpellProjectile : CP14SpellEffect // If applicable, this ensures the projectile is parented to grid on spawn, instead of the map. var fromMap = transform.ToMapCoordinates(fromCoords); + var spawnCoords = mapManager.TryFindGridAt(fromMap, out var gridUid, out _) ? transform.WithEntityId(fromCoords, gridUid) : new(mapManager.GetMapEntityId(fromMap.MapId), fromMap.Position); + for (var i = 0; i < ProjectileCount; i++) + { + //Apply spread to target point + var offsetedTargetPoint = targetPoint.Value.Offset(new Vector2( + (float) (random.NextDouble() * 2 - 1) * Spread, + (float) (random.NextDouble() * 2 - 1) * Spread)); - var ent = entManager.SpawnAtPosition(Prototype, spawnCoords); - var direction = targetPoint.Value.ToMapPos(entManager, transform) - - spawnCoords.ToMapPos(entManager, transform); - gunSystem.ShootProjectile(ent, direction, userVelocity, args.User.Value, args.User); + var ent = entManager.SpawnAtPosition(Prototype, spawnCoords); + + var direction = offsetedTargetPoint.ToMapPos(entManager, transform) - + spawnCoords.ToMapPos(entManager, transform); + + gunSystem.ShootProjectile(ent, direction, userVelocity, args.User.Value, args.User, ProjectileSpeed); + } } } diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs index 0a581fc08c..575903e9e1 100644 --- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs +++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs @@ -3,6 +3,7 @@ using System.Text; using Content.Shared._CP14.Skill.Components; using Content.Shared._CP14.Skill.Prototypes; using Content.Shared.FixedPoint; +using Content.Shared.Popups; using Robust.Shared.Prototypes; namespace Content.Shared._CP14.Skill; @@ -268,6 +269,20 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem } return true; } + + /// + /// Increases the number of memory points for a character, limited to a certain amount. + /// + public void AddMemoryPoints(EntityUid target, FixedPoint2 points, FixedPoint2 limit, CP14SkillStorageComponent? component = null) + { + if (!Resolve(target, ref component, false)) + return; + + component.ExperienceMaxCap = FixedPoint2.Min(component.ExperienceMaxCap + points, limit); + Dirty(target, component); + + _popup.PopupEntity(Loc.GetString("cp14-skill-popup-added-points", ("count", points)), target, target); + } } [ByRefEvent] diff --git a/Resources/Audio/_CP14/Effects/attributions.yml b/Resources/Audio/_CP14/Effects/attributions.yml index 1c3c18d4ea..2962b1a785 100644 --- a/Resources/Audio/_CP14/Effects/attributions.yml +++ b/Resources/Audio/_CP14/Effects/attributions.yml @@ -91,4 +91,9 @@ - files: ["cash.ogg"] license: "CC0-1.0" copyright: 'Created by Zott820 on Freesound.org' - source: "https://freesound.org/people/Zott820/sounds/209578/" \ No newline at end of file + source: "https://freesound.org/people/Zott820/sounds/209578/" + +- files: ["ritual_begin.ogg", "ritual_end.ogg"] + license: "CC-BY-4.0" + copyright: 'Created by SilverIllusionist on Freesound.org' + source: "https://freesound.org/people/SilverIllusionist/sounds/671928/" \ No newline at end of file diff --git a/Resources/Audio/_CP14/Effects/ritual_begin.ogg b/Resources/Audio/_CP14/Effects/ritual_begin.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1c56bd3fa186b44dfcb1a38e68a8e3c651d52f90 GIT binary patch literal 178407 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_CP14/Effects/ritual_end.ogg b/Resources/Audio/_CP14/Effects/ritual_end.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bc433868fdca97a3c730f93b12516f56e99564d1 GIT binary patch literal 38025 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 LNkvXXu0mjfe0l@4 literal 0 HcmV?d00001 From 374ab05f244d9c65de9692945a8e1c35cad0b920 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+TornadoTechnology@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:06:19 +1000 Subject: [PATCH 16/27] git: remove issue templates (#1330) --- .github/ISSUE_TEMPLATE/config.yml | 7 ------- .github/ISSUE_TEMPLATE/issue_report.md | 20 ------------------- .../toolshed-feature-request.md | 18 ----------------- 3 files changed, 45 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/issue_report.md delete mode 100644 .github/ISSUE_TEMPLATE/toolshed-feature-request.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 09c9e76b19..0000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,7 +0,0 @@ -contact_links: - - name: Report a Security Vulnerability - url: https://github.com/space-wizards/space-station-14/blob/master/SECURITY.md - about: Please report security vulnerabilities privately so we can fix them before they are publicly disclosed. - - name: Request a Feature - url: https://discord.gg/rGvu9hKffJ - about: Submit feature requests on our Discord server (https://discord.gg/rGvu9hKffJ). diff --git a/.github/ISSUE_TEMPLATE/issue_report.md b/.github/ISSUE_TEMPLATE/issue_report.md deleted file mode 100644 index 9bc805b74e..0000000000 --- a/.github/ISSUE_TEMPLATE/issue_report.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Report an Issue -about: "..." -title: '' -labels: '' -assignees: '' - ---- - -## Description - - -**Reproduction** - - -**Screenshots** - - -**Additional context** - diff --git a/.github/ISSUE_TEMPLATE/toolshed-feature-request.md b/.github/ISSUE_TEMPLATE/toolshed-feature-request.md deleted file mode 100644 index dae84c3e25..0000000000 --- a/.github/ISSUE_TEMPLATE/toolshed-feature-request.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: Toolshed feature request -about: Suggest a feature for Toolshed (for game admins/developers) -title: "[TOOLSHED REQUEST]" -labels: Toolshed -assignees: moonheart08 - ---- - -**Is your feature request related to a problem/bug? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the command you'd like** -A clear and concise description of what you want and what it should do. -If you're a technical user (i.e. programmer) including type signatures is helpful. - -**Additional context** -Add any other context or screenshots about the feature request here. From 71abce8db8114b32d5c77f58fb7e8fec1901b1ba Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sat, 14 Jun 2025 19:04:33 +0300 Subject: [PATCH 17/27] Skill scanning + bugfixes (#1424) --- .../_CP14/Religion/CP14ReligionSystem.cs | 8 +- .../Inventory/InventorySystem.Relay.cs | 2 + .../ResearchTable/CP14SharedResearchSystem.cs | 72 ++++++++++++++++++ .../Components/CP14SkillScannerComponent.cs | 11 +++ .../en-US/_CP14/skill/skill_meta_gods.ftl | 5 +- Resources/Locale/en-US/_CP14/skill/ui.ftl | 5 +- .../ru-RU/_CP14/skill/skill_meta_gods.ftl | 5 +- Resources/Locale/ru-RU/_CP14/skill/ui.ftl | 5 +- .../Entities/Mobs/Player/admin_ghost.yml | 1 + .../Spells/Demigods/Lumera/mind_upgrade.yml | 3 +- .../Actions/Spells/Demigods/generic.yml | 2 +- .../Entities/Mobs/Player/Demigods/gods.yml | 4 - .../_CP14/Skill/Demigods/lumera.yml | 18 +++++ .../DemigodSpells/lumera.rsi/meta.json | 3 + .../DemigodSpells/lumera.rsi/mind_scan.png | Bin 0 -> 507 bytes 15 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 Content.Shared/_CP14/Skill/Components/CP14SkillScannerComponent.cs create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mind_scan.png diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs index 53857f0d1f..394c6931e9 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs @@ -159,20 +159,20 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem public FixedPoint2 GetFollowerPercentage(Entity god) { - var total = 0; - var followers = 0; + FixedPoint2 total = 0; + FixedPoint2 followers = 0; var allHumans = Mind.GetAliveHumans(); foreach (var human in allHumans) { - total++; + total += 1; if (!TryComp(human.Comp.CurrentEntity, out var relFollower)) continue; if (relFollower.Religion != god.Comp.Religion) continue; - followers++; + followers += 1; } if (total == 0) diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 38897746e0..14463f3b70 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -1,5 +1,6 @@ using Content.Shared._CP14.MagicEssence; using Content.Shared._CP14.MagicSpell.Events; +using Content.Shared._CP14.ResearchTable; using Content.Shared.Armor; using Content.Shared.Atmos; using Content.Shared.Chat; @@ -37,6 +38,7 @@ public partial class InventorySystem //CP14 Relayed events SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); //CP14 End SubscribeLocalEvent(RelayInventoryEvent); diff --git a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs index 04c032a6ea..f2103f0fc2 100644 --- a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs +++ b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs @@ -1,12 +1,78 @@ +using System.Text; +using Content.Shared._CP14.Skill; +using Content.Shared._CP14.Skill.Components; using Content.Shared._CP14.Skill.Prototypes; using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Inventory; +using Content.Shared.Verbs; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared._CP14.ResearchTable; public abstract class CP14SharedResearchSystem : EntitySystem { + [Dependency] private readonly ExamineSystemShared _examine = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly CP14SharedSkillSystem _skill = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnSkillScan); + SubscribeLocalEvent>((e, c, ev) => OnSkillScan(e, c, ev.Args)); + + SubscribeLocalEvent>(OnExamined); + } + + private void OnExamined(Entity ent, ref GetVerbsEvent args) + { + var scanEvent = new CP14SkillScanEvent(); + RaiseLocalEvent(args.User, scanEvent); + + if (!scanEvent.CanScan) + return; + + var markup = GetSkillExamine(ent); + + _examine.AddDetailedExamineVerb( + args, + ent.Comp, + markup, + Loc.GetString("cp14-skill-examine"), + "/Textures/Interface/students-cap.svg.192dpi.png"); + } + + private FormattedMessage GetSkillExamine(Entity ent) + { + var msg = new FormattedMessage(); + + var sb = new StringBuilder(); + + sb.Append(Loc.GetString("cp14-skill-examine-title") + "\n"); + + foreach (var skill in ent.Comp.LearnedSkills) + { + if (!_proto.TryIndex(skill, out var indexedSkill)) + continue; + + if(!_proto.TryIndex(indexedSkill.Tree, out var indexedTree)) + continue; + + var skillName = _skill.GetSkillName(skill); + sb.Append($"• [color={indexedTree.Color.ToHex()}]{skillName}[/color]\n"); + } + msg.AddMarkupOrThrow(sb.ToString()); + return msg; + } + + private void OnSkillScan(EntityUid uid, CP14SkillScannerComponent component, CP14SkillScanEvent args) + { + args.CanScan = true; + } } [Serializable, NetSerializable] @@ -17,3 +83,9 @@ public sealed partial class CP14ResearchDoAfterEvent : DoAfterEvent public override DoAfterEvent Clone() => this; } + +public sealed class CP14SkillScanEvent : EntityEventArgs, IInventoryRelayEvent +{ + public bool CanScan; + public SlotFlags TargetSlots { get; } = SlotFlags.EYES; +} diff --git a/Content.Shared/_CP14/Skill/Components/CP14SkillScannerComponent.cs b/Content.Shared/_CP14/Skill/Components/CP14SkillScannerComponent.cs new file mode 100644 index 0000000000..d5653364a7 --- /dev/null +++ b/Content.Shared/_CP14/Skill/Components/CP14SkillScannerComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared._CP14.Skill.Components; + +/// +/// Allows you to see what skills the creature possesses +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class CP14SkillScannerComponent : Component +{ +} diff --git a/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl b/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl index 4ed5976601..0a6297a92b 100644 --- a/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl +++ b/Resources/Locale/en-US/_CP14/skill/skill_meta_gods.ftl @@ -1,3 +1,6 @@ cp14-skill-lumera-t1-name = The origins of the secret night cp14-skill-lumera-t2-name = The waxing moon -cp14-skill-lumera-t3-name = The full moon of Lumera \ No newline at end of file +cp14-skill-lumera-t3-name = The full moon of Lumera + +cp14-skill-lumera-mind-scan-name = Study of minds +cp14-skill-lumera-mind-scan-desc = You are able to discern the skills possessed by mortals. You can see what spells they are capable of casting and what they are capable of doing. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/skill/ui.ftl b/Resources/Locale/en-US/_CP14/skill/ui.ftl index ff7a558384..7217fa18b2 100644 --- a/Resources/Locale/en-US/_CP14/skill/ui.ftl +++ b/Resources/Locale/en-US/_CP14/skill/ui.ftl @@ -16,4 +16,7 @@ cp14-research-craft = Research cp14-skill-desc-add-mana = Increases your character's mana amount by {$mana}. cp14-skill-desc-unlock-recipes = Opens up the possibility of crafting: -cp14-skill-popup-added-points = The boundaries of your consciousness are expanding. New memory points: {$count} \ No newline at end of file +cp14-skill-popup-added-points = The boundaries of your consciousness are expanding. New memory points: {$count} + +cp14-skill-examine-verb = Learn the character's skills +cp14-skill-examine-title = This character has the following skills: \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl b/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl index 7b0f26b259..14138cb193 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/skill_meta_gods.ftl @@ -1,3 +1,6 @@ cp14-skill-lumera-t1-name = Истоки тайной ночи cp14-skill-lumera-t2-name = Растущая луна -cp14-skill-lumera-t3-name = Полнолуние Лумеры \ No newline at end of file +cp14-skill-lumera-t3-name = Полнолуние Лумеры + +cp14-skill-lumera-mind-scan-name = Изучение разумов +cp14-skill-lumera-mind-scan-desc = Вы способны узнавать какими навыками владеют смертные. Видеть, какие заклинания им подвластны, и на что они способны. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl index 012506991f..3981ca2fee 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl @@ -16,4 +16,7 @@ cp14-research-craft = Исследовать cp14-skill-desc-add-mana = Увеличивает объем маны вашего персонажа на {$mana}. cp14-skill-desc-unlock-recipes = Открывает возможность создания: -cp14-skill-popup-added-points = Границы вашего сознания расширяются. Новых очков памяти: {$count} \ No newline at end of file +cp14-skill-popup-added-points = Границы вашего сознания расширяются. Новых очков памяти: {$count} + +cp14-skill-examine-verb = Изучить навыки персонажа +cp14-skill-examine-title = Этот персонаж владеет следующими навыками: \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 0bfaec4328..5e8fb10d96 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -88,6 +88,7 @@ #- type: WirelessNetworkConnection # range: 500 #- type: StationLimitedNetwork + - type: CP14SkillScanner - type: Thieving stripTimeReduction: 9999 stealthy: true diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml index 438a70effe..2a3b5e4a8a 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml @@ -97,8 +97,7 @@ - type: entity id: CP14LumeraMindImproveImpact - categories: [ ForkFiltered ] - name: fese + categories: [ HideSpawnMenu ] parent: CP14BaseMagicImpact save: false components: diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml index 39c3318f20..76c3f24cc6 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml @@ -24,7 +24,7 @@ - CP14ImpactEffectSphereOfLight - !type:CP14SpellTransferManaToGod amount: 20 - safe: false + safe: true - !type:CP14SpellSendMessageToGod - type: InstantAction sound: !type:SoundPathSpecifier diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml index abe437ee0c..1cf05530eb 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml @@ -65,10 +65,6 @@ damagePerEnergy: types: CP14ManaDepletion: 1 - - type: CP14MagicEnergyDraw - energy: -1.5 - delay: 3 - safe: false - type: CP14SpellStorage grantAccessToSelf: true spells: diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml index 5e2a31fcfb..0728186d9b 100644 --- a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml +++ b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml @@ -40,6 +40,24 @@ - !type:NeedPrerequisite prerequisite: LumeraT1 +- type: cp14Skill + id: LumeraMindScan + name: cp14-skill-lumera-mind-scan-name + desc: cp14-skill-lumera-mind-scan-desc + skillUiPosition: 0, 5 + tree: GodLumera + learnCost: 0.5 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: mind_scan + effects: + - !type:AddComponents + components: + - type: CP14SkillScanner + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT1 + # T2 - type: cp14Skill diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json index 2f53f3b097..8b7286b8a7 100644 --- a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json @@ -22,6 +22,9 @@ { "name": "mind_upgrade" }, + { + "name": "mind_scan" + }, { "name": "t1" }, diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mind_scan.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/mind_scan.png new file mode 100644 index 0000000000000000000000000000000000000000..f8f2f9e13bd4d6432b870917a0fb2ac9fef696a7 GIT binary patch literal 507 zcmVPx$wMj%lR9J=GS38b`FbwsqMj~h73VaGG>N!dd!cnNHrr>jh++({?u?4c^F*YPD zXr+D9XhLM-7u$I;0Dp`JpU7(4ONLX|ly?w#@`)tP3(>M`?(h#^d}4OvaEm7en-l;5 zRJL7kObOkQhC>1zvm1viiHHP_NL)!|Qv=k&-it|^7ut!rgaF^2MCb| Date: Sun, 15 Jun 2025 01:50:16 +0300 Subject: [PATCH 18/27] Gods part 6 (#1425) * Skill scanning + bugfixes * memory point examining * Update base.yml * predict skill examining * moon beam lumera action * balance --- .../Inventory/InventorySystem.Relay.cs | 2 +- .../ResearchTable/CP14SharedResearchSystem.cs | 72 ----------------- .../_CP14/Skill/CP14SharedSkillSystem.cs | 2 +- .../_CP14/Skill/CP14SkillSystem.Scanning.cs | 75 ++++++++++++++++++ .../Audio/_CP14/Effects/attributions.yml | 7 +- .../Audio/_CP14/Effects/moon_strike1.ogg | Bin 0 -> 27803 bytes .../Audio/_CP14/Effects/moon_strike2.ogg | Bin 0 -> 28356 bytes .../Audio/_CP14/Effects/moon_strike3.ogg | Bin 0 -> 28518 bytes .../Audio/_CP14/Effects/moon_strike4.ogg | Bin 0 -> 28110 bytes Resources/Locale/en-US/_CP14/skill/ui.ftl | 1 - Resources/Locale/ru-RU/_CP14/skill/ui.ftl | 1 - .../Spells/Demigods/Lumera/moon_strike.yml | 23 ++++++ .../Actions/Spells/Demigods/generic.yml | 2 + .../_CP14/Entities/Effects/sky_lightning.yml | 47 +++++++++++ .../Structures/Specific/Religion/base.yml | 1 + .../_CP14/Skill/Demigods/lumera.yml | 19 ++++- .../_CP14/SoundCollections/misc.yml | 8 ++ .../DemigodSpells/lumera.rsi/meta.json | 3 + .../DemigodSpells/lumera.rsi/moon_beam.png | Bin 0 -> 324 bytes .../_CP14/Effects/lumera_strike.rsi/meta.json | 29 +++++++ .../Effects/lumera_strike.rsi/pewpew.png | Bin 0 -> 13869 bytes 21 files changed, 213 insertions(+), 79 deletions(-) create mode 100644 Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs create mode 100644 Resources/Audio/_CP14/Effects/moon_strike1.ogg create mode 100644 Resources/Audio/_CP14/Effects/moon_strike2.ogg create mode 100644 Resources/Audio/_CP14/Effects/moon_strike3.ogg create mode 100644 Resources/Audio/_CP14/Effects/moon_strike4.ogg create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/moon_beam.png create mode 100644 Resources/Textures/_CP14/Effects/lumera_strike.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Effects/lumera_strike.rsi/pewpew.png diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index 14463f3b70..f81251fbb9 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -1,6 +1,6 @@ using Content.Shared._CP14.MagicEssence; using Content.Shared._CP14.MagicSpell.Events; -using Content.Shared._CP14.ResearchTable; +using Content.Shared._CP14.Skill; using Content.Shared.Armor; using Content.Shared.Atmos; using Content.Shared.Chat; diff --git a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs index f2103f0fc2..04c032a6ea 100644 --- a/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs +++ b/Content.Shared/_CP14/ResearchTable/CP14SharedResearchSystem.cs @@ -1,78 +1,12 @@ -using System.Text; -using Content.Shared._CP14.Skill; -using Content.Shared._CP14.Skill.Components; using Content.Shared._CP14.Skill.Prototypes; using Content.Shared.DoAfter; -using Content.Shared.Examine; -using Content.Shared.Inventory; -using Content.Shared.Verbs; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Utility; namespace Content.Shared._CP14.ResearchTable; public abstract class CP14SharedResearchSystem : EntitySystem { - [Dependency] private readonly ExamineSystemShared _examine = default!; - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly CP14SharedSkillSystem _skill = default!; - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnSkillScan); - SubscribeLocalEvent>((e, c, ev) => OnSkillScan(e, c, ev.Args)); - - SubscribeLocalEvent>(OnExamined); - } - - private void OnExamined(Entity ent, ref GetVerbsEvent args) - { - var scanEvent = new CP14SkillScanEvent(); - RaiseLocalEvent(args.User, scanEvent); - - if (!scanEvent.CanScan) - return; - - var markup = GetSkillExamine(ent); - - _examine.AddDetailedExamineVerb( - args, - ent.Comp, - markup, - Loc.GetString("cp14-skill-examine"), - "/Textures/Interface/students-cap.svg.192dpi.png"); - } - - private FormattedMessage GetSkillExamine(Entity ent) - { - var msg = new FormattedMessage(); - - var sb = new StringBuilder(); - - sb.Append(Loc.GetString("cp14-skill-examine-title") + "\n"); - - foreach (var skill in ent.Comp.LearnedSkills) - { - if (!_proto.TryIndex(skill, out var indexedSkill)) - continue; - - if(!_proto.TryIndex(indexedSkill.Tree, out var indexedTree)) - continue; - - var skillName = _skill.GetSkillName(skill); - sb.Append($"• [color={indexedTree.Color.ToHex()}]{skillName}[/color]\n"); - } - msg.AddMarkupOrThrow(sb.ToString()); - return msg; - } - - private void OnSkillScan(EntityUid uid, CP14SkillScannerComponent component, CP14SkillScanEvent args) - { - args.CanScan = true; - } } [Serializable, NetSerializable] @@ -83,9 +17,3 @@ public sealed partial class CP14ResearchDoAfterEvent : DoAfterEvent public override DoAfterEvent Clone() => this; } - -public sealed class CP14SkillScanEvent : EntityEventArgs, IInventoryRelayEvent -{ - public bool CanScan; - public SlotFlags TargetSlots { get; } = SlotFlags.EYES; -} diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs index 575903e9e1..5d3e2a3f2f 100644 --- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs +++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs @@ -3,7 +3,6 @@ using System.Text; using Content.Shared._CP14.Skill.Components; using Content.Shared._CP14.Skill.Prototypes; using Content.Shared.FixedPoint; -using Content.Shared.Popups; using Robust.Shared.Prototypes; namespace Content.Shared._CP14.Skill; @@ -22,6 +21,7 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem InitializeAdmin(); InitializeChecks(); + InitializeScanning(); } private void OnMapInit(Entity ent, ref MapInitEvent args) diff --git a/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs b/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs new file mode 100644 index 0000000000..7191253a95 --- /dev/null +++ b/Content.Shared/_CP14/Skill/CP14SkillSystem.Scanning.cs @@ -0,0 +1,75 @@ +using System.Text; +using Content.Shared._CP14.Skill.Components; +using Content.Shared.Examine; +using Content.Shared.Inventory; +using Content.Shared.Verbs; +using Robust.Shared.Utility; + +namespace Content.Shared._CP14.Skill; + +public abstract partial class CP14SharedSkillSystem +{ + [Dependency] private readonly ExamineSystemShared _examine = default!; + + private void InitializeScanning() + { + SubscribeLocalEvent(OnSkillScan); + SubscribeLocalEvent>((e, c, ev) => OnSkillScan(e, c, ev.Args)); + + SubscribeLocalEvent>(OnExamined); + } + + private void OnExamined(Entity ent, ref GetVerbsEvent args) + { + var scanEvent = new CP14SkillScanEvent(); + RaiseLocalEvent(args.User, scanEvent); + + if (!scanEvent.CanScan) + return; + + var markup = GetSkillExamine(ent); + + _examine.AddDetailedExamineVerb( + args, + ent.Comp, + markup, + Loc.GetString("cp14-skill-info-title"), + "/Textures/Interface/students-cap.svg.192dpi.png"); + } + + private FormattedMessage GetSkillExamine(Entity ent) + { + var msg = new FormattedMessage(); + + var sb = new StringBuilder(); + + sb.Append(Loc.GetString("cp14-skill-examine-title") + "\n"); + + foreach (var skill in ent.Comp.LearnedSkills) + { + if (!_proto.TryIndex(skill, out var indexedSkill)) + continue; + + if(!_proto.TryIndex(indexedSkill.Tree, out var indexedTree)) + continue; + + var skillName = GetSkillName(skill); + sb.Append($"• [color={indexedTree.Color.ToHex()}]{skillName}[/color]\n"); + } + + sb.Append($"\n{Loc.GetString("cp14-skill-menu-level")} {ent.Comp.SkillsSumExperience}/{ent.Comp.ExperienceMaxCap}\n"); + msg.AddMarkupOrThrow(sb.ToString()); + return msg; + } + + private void OnSkillScan(EntityUid uid, CP14SkillScannerComponent component, CP14SkillScanEvent args) + { + args.CanScan = true; + } +} + +public sealed class CP14SkillScanEvent : EntityEventArgs, IInventoryRelayEvent +{ + public bool CanScan; + public SlotFlags TargetSlots { get; } = SlotFlags.EYES; +} diff --git a/Resources/Audio/_CP14/Effects/attributions.yml b/Resources/Audio/_CP14/Effects/attributions.yml index 2962b1a785..3c17d8a357 100644 --- a/Resources/Audio/_CP14/Effects/attributions.yml +++ b/Resources/Audio/_CP14/Effects/attributions.yml @@ -96,4 +96,9 @@ - files: ["ritual_begin.ogg", "ritual_end.ogg"] license: "CC-BY-4.0" copyright: 'Created by SilverIllusionist on Freesound.org' - source: "https://freesound.org/people/SilverIllusionist/sounds/671928/" \ No newline at end of file + source: "https://freesound.org/people/SilverIllusionist/sounds/671928/" + +- files: ["moon_strike1.ogg", "moon_strike2.ogg", "moon_strike3.ogg", "moon_strike4.ogg"] + license: "CC-BY-4.0" + copyright: 'Created by EminYILDIRIM on Freesound.org' + source: "https://freesound.org/people/EminYILDIRIM/sounds/668244/" \ No newline at end of file diff --git a/Resources/Audio/_CP14/Effects/moon_strike1.ogg b/Resources/Audio/_CP14/Effects/moon_strike1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d83a00f3f8b64c0bbdd8129fd3abd53ffa93c077 GIT binary patch literal 27803 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 /// If the user belongs to a religion, this spell can only be used within the area of influence of that religion /// -[RegisterComponent, Access(typeof(CP14SharedMagicSystem), typeof(CP14SpellStorageSystem))] +[RegisterComponent, Access(typeof(CP14SharedMagicSystem))] public sealed partial class CP14MagicEffectReligionRestrictedComponent : Component { + /// + /// does not allow the spell to be used outside the god's area of influence + /// + [DataField] + public bool OnlyInReligionZone = true; + + /// + /// allows the spell to be used only on followers + /// + [DataField] + public bool OnlyOnFollowers = false; } diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs new file mode 100644 index 0000000000..393628d7d4 --- /dev/null +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs @@ -0,0 +1,19 @@ +using Content.Shared._CP14.Skill; + +namespace Content.Shared._CP14.MagicSpell.Spells; + +public sealed partial class CP14SpellRemoveMemoryPoint : CP14SpellEffect +{ + [DataField] + public float RemovedPoints = 0.5f; + + public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args) + { + if (args.Target is null) + return; + + var skillSys = entManager.System(); + + skillSys.RemoveMemoryPoints(args.Target.Value, RemovedPoints); + } +} diff --git a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs index 5d3e2a3f2f..04f3046b33 100644 --- a/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs +++ b/Content.Shared/_CP14/Skill/CP14SharedSkillSystem.cs @@ -2,8 +2,10 @@ using System.Linq; using System.Text; using Content.Shared._CP14.Skill.Components; using Content.Shared._CP14.Skill.Prototypes; +using Content.Shared._CP14.Skill.Restrictions; using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; +using Robust.Shared.Random; namespace Content.Shared._CP14.Skill; @@ -249,6 +251,39 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem return sb.ToString(); } + + /// + /// Obtaining all skills that are not prerequisites for other skills of this creature + /// + public HashSet> GetFrontierSkills(EntityUid target, + CP14SkillStorageComponent? component = null) + { + var skills = new HashSet>(); + if (!Resolve(target, ref component, false)) + return skills; + + var frontier = component.LearnedSkills.ToHashSet(); + foreach (var skill in component.LearnedSkills) + { + if (!_proto.TryIndex(skill, out var indexedSkill)) + continue; + + if (HaveFreeSkill(target, skill)) + continue; + + foreach (var req in indexedSkill.Restrictions) + { + if (req is NeedPrerequisite prerequisite) + { + if (frontier.Contains(prerequisite.Prerequisite)) + frontier.Remove(prerequisite.Prerequisite); + } + } + } + + return frontier; + } + /// /// Helper function to reset skills to only learned skills /// @@ -283,6 +318,31 @@ public abstract partial class CP14SharedSkillSystem : EntitySystem _popup.PopupEntity(Loc.GetString("cp14-skill-popup-added-points", ("count", points)), target, target); } + + /// + /// Removes memory points. If a character has accumulated skills exceeding the new memory limit, random skills will be removed. + /// + public void RemoveMemoryPoints(EntityUid target, FixedPoint2 points, CP14SkillStorageComponent? component = null) + { + if (!Resolve(target, ref component, false)) + return; + + component.ExperienceMaxCap = FixedPoint2.Max(component.ExperienceMaxCap - points, 0); + Dirty(target, component); + + _popup.PopupEntity(Loc.GetString("cp14-skill-popup-removed-points", ("count", points)), target, target); + + while (component.SkillsSumExperience > component.ExperienceMaxCap) + { + var frontier = GetFrontierSkills(target, component); + if (frontier.Count == 0) + break; + + //Randomly remove one of the frontier skills + var skill = _random.Pick(frontier); + TryRemoveSkill(target, skill, component); + } + } } [ByRefEvent] diff --git a/Resources/Locale/en-US/_CP14/job/job.ftl b/Resources/Locale/en-US/_CP14/job/job.ftl index b34b558a59..3cc550a40f 100644 --- a/Resources/Locale/en-US/_CP14/job/job.ftl +++ b/Resources/Locale/en-US/_CP14/job/job.ftl @@ -42,4 +42,4 @@ cp14-job-name-god-merkas = Merkas cp14-job-desc-god-merkas = God of purity and healing. TODO cp14-job-name-god-lumera = Lumera -cp14-job-desc-god-lumera = Patroness of the night and the starry sky. TODO \ No newline at end of file +cp14-job-desc-god-lumera = Patroness of the night sky and knowledge. Expand your influence by helping mortals gain new knowledge. \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/magicEnergy/magic-spells.ftl b/Resources/Locale/en-US/_CP14/magicEnergy/magic-spells.ftl index 856cf0a331..2923b1e1f2 100644 --- a/Resources/Locale/en-US/_CP14/magicEnergy/magic-spells.ftl +++ b/Resources/Locale/en-US/_CP14/magicEnergy/magic-spells.ftl @@ -22,4 +22,5 @@ cp14-magic-spell-pacified = It could hurt someone! cp14-magic-spell-target-not-mob = The target must be a living thing! cp14-magic-spell-target-dead = Can't be used on the dead! -cp14-magic-spell-target-alive = Can't be used on the living! \ No newline at end of file +cp14-magic-spell-target-alive = Can't be used on the living! +cp14-magic-spell-target-god-follower = Your target should be your follower! \ No newline at end of file diff --git a/Resources/Locale/en-US/_CP14/skill/ui.ftl b/Resources/Locale/en-US/_CP14/skill/ui.ftl index af94a8f730..2935519aa3 100644 --- a/Resources/Locale/en-US/_CP14/skill/ui.ftl +++ b/Resources/Locale/en-US/_CP14/skill/ui.ftl @@ -18,4 +18,5 @@ cp14-skill-desc-unlock-recipes = Opens up the possibility of crafting: cp14-skill-popup-added-points = The boundaries of your consciousness are expanding. New memory points: {$count} -cp14-skill-examine-title = This character has the following skills: \ No newline at end of file +cp14-skill-examine-title = This character has the following skills: +cp14-skill-popup-forced-remove-skill = You are beginning to forget your past... Memory points lost: {$count} \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/job/job.ftl b/Resources/Locale/ru-RU/_CP14/job/job.ftl index abfc220bb7..fa674aaafe 100644 --- a/Resources/Locale/ru-RU/_CP14/job/job.ftl +++ b/Resources/Locale/ru-RU/_CP14/job/job.ftl @@ -42,4 +42,4 @@ cp14-job-name-god-merkas = Меркас cp14-job-desc-god-merkas = Бог света и исцеления. TODO cp14-job-name-god-lumera = Лумера -cp14-job-desc-god-lumera = Покровительница ночи и звёздного неба. TODO \ No newline at end of file +cp14-job-desc-god-lumera = Покровительница ночного неба и знаний. Расширяйте свое влияние, помогая смертным обретать новые знания. \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl b/Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl index 16299ddc79..c554421f7f 100644 --- a/Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl +++ b/Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl @@ -22,4 +22,5 @@ cp14-magic-spell-pacified = Это может навредить кому либ cp14-magic-spell-target-not-mob = Цель должна быть живым существом! cp14-magic-spell-target-dead = Нельзя использовать на мертвых! -cp14-magic-spell-target-alive = Нельзя использовать на живых! \ No newline at end of file +cp14-magic-spell-target-alive = Нельзя использовать на живых! +cp14-magic-spell-target-god-follower = Цель должна быть вашим последователем! \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl index 1a11e1c85f..3aa48bd593 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl @@ -17,5 +17,6 @@ cp14-skill-desc-add-mana = Увеличивает объем маны вашег cp14-skill-desc-unlock-recipes = Открывает возможность создания: cp14-skill-popup-added-points = Границы вашего сознания расширяются. Новых очков памяти: {$count} +cp14-skill-popup-forced-remove-skill = Вы начинаете забывать свое прошлое... Потеряно очков памяти: {$count} cp14-skill-examine-title = Этот персонаж владеет следующими навыками: \ No newline at end of file diff --git a/Resources/Maps/_CP14/comoss.yml b/Resources/Maps/_CP14/comoss.yml index ccc102b69c..3225112c8b 100644 --- a/Resources/Maps/_CP14/comoss.yml +++ b/Resources/Maps/_CP14/comoss.yml @@ -4,8 +4,8 @@ meta: engineVersion: 260.2.0 forkId: "" forkVersion: "" - time: 06/04/2025 21:43:51 - entityCount: 15261 + time: 06/15/2025 11:12:00 + entityCount: 15254 maps: - 1 grids: @@ -190,7 +190,7 @@ entities: version: 7 0,-3: ind: 0,-3 - tiles: AgAAAAAAAAIAAAAAAAAcAAAAAAAAAgAAAAABAAIAAAAADwAcAAAAAAUAAgAAAAAHAAIAAAAACgACAAAAAAIAHAAAAAAEABwAAAAABQAcAAAAAAEAHAAAAAABABwAAAAAAQAeAAAAAAEAHgAAAAAAAAMAAAAAAAADAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAADAAAAAAgAAwAAAAAAAAMAAAAAAAADAAAAAAQAAwAAAAAAAAMAAAAAAAAQAAAAAAAAEAAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAAAwAAAAAAAAMAAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAAMAAAAABAABAAAAAAIAAQAAAAADAAEAAAAAAgANAAAAAAAAHgAAAAAAACEAAAAAAAACAAAAAAYAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAB4AAAAAAgADAAAAAAAAAQAAAAACAB4AAAAAAAABAAAAAAQAAQAAAAABAAEAAAAAAwAhAAAAAAAAAgAAAAANAB4AAAAAAAAcAAAAAAAAHAAAAAAAAB0AAAAAAAAdAAAAAAAAHQAAAAAAAB0AAAAAAAAeAAAAAAIAAwAAAAAAAB4AAAAAAwABAAAAAAQAAQAAAAADAAEAAAAAAQABAAAAAAQAIQAAAAAAAAIAAAAABAAeAAAAAAAAHgAAAAAAAB0AAAAAAAAdAAAAAAAAHQAAAAAAAB4AAAAAAAAdAAAAAAAAHgAAAAAFAAMAAAAAAAABAAAAAAAAAQAAAAACAAEAAAAAAgABAAAAAAQAHgAAAAAEACEAAAAAAAAeAAAAAAUAHAAAAAAAAB4AAAAAAAAdAAAAAAAAHQAAAAAAAB4AAAAAAAAeAAAAAAAAHgAAAAAAAB4AAAAABQADAAAAAAAAAQAAAAADAAEAAAAAAAABAAAAAAEAAQAAAAACAAEAAAAAAgAhAAAAAAAAHgAAAAAAAB0AAAAAAAAeAAAAAAAAHQAAAAAAAB0AAAAAAAAcAAAAAAAAHgAAAAAAAB4AAAAAAAAeAAAAAAMAAwAAAAAAAAEAAAAAAQABAAAAAAQAAQAAAAAEAAEAAAAAAgABAAAAAAAAIQAAAAAAAB4AAAAAAQAdAAAAAAAAHQAAAAAAAB0AAAAAAAAcAAAAAAAAHgAAAAAAAB4AAAAAAAAeAAAAAAAAHgAAAAAAAAMAAAAAAAABAAAAAAEAAQAAAAACAAEAAAAAAQABAAAAAAQAAQAAAAAAACEAAAAAAAACAAAAAA0AHAAAAAAAAB0AAAAAAAAdAAAAAAAAHQAAAAAAAB0AAAAAAAAdAAAAAAAAHgAAAAAAAB4AAAAAAQADAAAAAAAAAQAAAAACAAEAAAAAAgABAAAAAAQAAQAAAAADAAEAAAAAAgAhAAAAAAAAHAAAAAAAAB4AAAAAAQAeAAAAAAAAHgAAAAACAB4AAAAABAAeAAAAAAIAHQAAAAAAAAIAAAAABgAeAAAAAAEAAwAAAAAAAAEAAAAAAwABAAAAAAAAAQAAAAADAAEAAAAAAwABAAAAAAEAIQAAAAAAAB4AAAAABQAGAAAAAAIABgAAAAAAAAYAAAAAAgAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAIAHgAAAAABAAMAAAAAAgAeAAAAAAUAAQAAAAADAAEAAAAABAABAAAAAAAAAQAAAAACACEAAAAAAAAeAAAAAAEABgAAAAACAAUAAAAAAwAFAAAAAAMABQAAAAADAAUAAAAAAgAFAAAAAAIABgAAAAADAB4AAAAABAADAAAAAAAAHgAAAAAAAB4AAAAAAgAeAAAAAAQAHgAAAAAAAAEAAAAAAAACAAAAAAAAAgAAAAAEAAYAAAAAAgAFAAAAAAMABQAAAAABAAUAAAAAAQAGAAAAAAEABgAAAAADAAYAAAAAAQAeAAAAAAEAAwAAAAAAAB4AAAAABQAeAAAAAAIAHgAAAAABAB4AAAAAAwAeAAAAAAUAAgAAAAAAAAIAAAAACgAGAAAAAAEABQAAAAACAAUAAAAAAAAFAAAAAAAABQAAAAABAAUAAAAAAgAGAAAAAAEAHgAAAAAFAAMAAAAABgADAAAAAAQAAwAAAAADAAMAAAAABAADAAAAAAMAAwAAAAABAA== + tiles: AgAAAAAAAAIAAAAAAAAcAAAAAAAAAgAAAAABAAIAAAAADwAcAAAAAAUAAgAAAAAHAAIAAAAACgACAAAAAAIAHAAAAAAEABwAAAAABQAcAAAAAAEAHAAAAAABABwAAAAAAQAeAAAAAAEAHgAAAAAAAAMAAAAAAAADAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAADAAAAAAgAAwAAAAAAAAMAAAAAAAADAAAAAAQAAwAAAAAAAAMAAAAAAAAQAAAAAAAAEAAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAAAwAAAAAAAAMAAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAA0AAAAAAAANAAAAAAAADQAAAAAAAAMAAAAABAABAAAAAAIAAQAAAAADAAEAAAAAAgANAAAAAAAAHgAAAAAAACEAAAAAAAACAAAAAAYAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAABwAAAAAAAAcAAAAAAAAHAAAAAAAAB4AAAAAAgADAAAAAAAAAQAAAAACAB4AAAAAAAABAAAAAAQAAQAAAAABAAEAAAAAAwAhAAAAAAAAAgAAAAANAB4AAAAAAAAcAAAAAAAAHAAAAAAAAB0AAAAAAAAdAAAAAAAAHQAAAAAAAB0AAAAAAAAeAAAAAAIAAwAAAAAAAB4AAAAAAwABAAAAAAQAAQAAAAADAAEAAAAAAQABAAAAAAQAIQAAAAAAAAIAAAAABAAeAAAAAAAAHgAAAAAAAB0AAAAAAAAdAAAAAAAAHQAAAAAAAB4AAAAAAAAdAAAAAAAAHgAAAAAFAAMAAAAAAAABAAAAAAAAAQAAAAACAAEAAAAAAgABAAAAAAQAHgAAAAAEACEAAAAAAAAeAAAAAAUAHAAAAAAAAB4AAAAAAAAdAAAAAAAAHQAAAAAAAB4AAAAAAAAeAAAAAAAAHgAAAAAAAB4AAAAABQADAAAAAAAAAQAAAAADAAEAAAAAAAABAAAAAAEAAQAAAAACAAEAAAAAAgAhAAAAAAAAHgAAAAAAAB0AAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAcAAAAAAAAHgAAAAAAAB4AAAAAAAAeAAAAAAMAAwAAAAAAAAEAAAAAAQABAAAAAAQAAQAAAAAEAAEAAAAAAgABAAAAAAAAIQAAAAAAAB4AAAAAAQAdAAAAAAAAEAAAAAAAABEAAAAAAAAQAAAAAAAAHgAAAAAAAB4AAAAAAAAeAAAAAAAAHgAAAAAAAAMAAAAAAAABAAAAAAEAAQAAAAACAAEAAAAAAQABAAAAAAQAAQAAAAAAACEAAAAAAAACAAAAAA0AHAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAB0AAAAAAAAdAAAAAAAAHgAAAAAAAB4AAAAAAQADAAAAAAAAAQAAAAACAAEAAAAAAgABAAAAAAQAAQAAAAADAAEAAAAAAgAhAAAAAAAAHAAAAAAAAB4AAAAAAQAeAAAAAAAAHgAAAAACAB4AAAAABAAeAAAAAAIAHQAAAAAAAAIAAAAABgAeAAAAAAEAAwAAAAAAAAEAAAAAAwABAAAAAAAAAQAAAAADAAEAAAAAAwABAAAAAAEAIQAAAAAAAB4AAAAABQAGAAAAAAIABgAAAAAAAAYAAAAAAgAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAIAHgAAAAABAAMAAAAAAgAeAAAAAAUAAQAAAAADAAEAAAAABAABAAAAAAAAAQAAAAACACEAAAAAAAAeAAAAAAEABgAAAAACAAUAAAAAAwAFAAAAAAMABQAAAAADAAUAAAAAAgAFAAAAAAIABgAAAAADAB4AAAAABAADAAAAAAAAHgAAAAAAAB4AAAAAAgAeAAAAAAQAHgAAAAAAAAEAAAAAAAACAAAAAAAAAgAAAAAEAAYAAAAAAgAFAAAAAAMABQAAAAABAAUAAAAAAQAGAAAAAAEABgAAAAADAAYAAAAAAQAeAAAAAAEAAwAAAAAAAB4AAAAABQAeAAAAAAIAHgAAAAABAB4AAAAAAwAeAAAAAAUAAgAAAAAAAAIAAAAACgAGAAAAAAEABQAAAAACAAUAAAAAAAAFAAAAAAAABQAAAAABAAUAAAAAAgAGAAAAAAEAHgAAAAAFAAMAAAAABgADAAAAAAQAAwAAAAADAAMAAAAABAADAAAAAAMAAwAAAAABAA== version: 7 1,-3: ind: 1,-3 @@ -730,6 +730,26 @@ entities: decals: 168: -22,-69 169: -22,-71 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerNe + decals: + 231: 3,-40 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerNw + decals: + 232: 5,-40 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerSe + decals: + 229: 3,-38 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerSw + decals: + 230: 5,-38 - node: color: '#FFFFFFFF' id: CP14BrickTileStoneLineE @@ -738,6 +758,7 @@ entities: 115: 21,-44 128: 18,-44 129: 18,-43 + 228: 3,-39 - node: color: '#FFFFFFFF' id: CP14BrickTileStoneLineN @@ -756,6 +777,7 @@ entities: 203: -3,-20 204: -10,-20 205: -9,-20 + 225: 4,-40 - node: color: '#FFFFFFFF' id: CP14BrickTileStoneLineS @@ -764,6 +786,7 @@ entities: 119: 19,-45 120: 20,-42 121: 19,-42 + 226: 4,-38 - node: color: '#FFFFFFFF' id: CP14BrickTileStoneLineW @@ -772,6 +795,7 @@ entities: 117: 21,-43 126: 18,-44 127: 18,-43 + 227: 5,-39 - node: cleanable: True color: '#6EAAEBFF' @@ -892,6 +916,14 @@ entities: - type: Transform pos: 15.5,0.5 parent: 1 +- proto: CP14AltarPrimordialGodLumera + entities: + - uid: 7335 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,-38.5 + parent: 1 - proto: CP14BarrelWater entities: - uid: 10 @@ -10860,12 +10892,6 @@ entities: rot: -1.5707963267948966 rad pos: 7.5,-38.5 parent: 1 - - uid: 26 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-39.5 - parent: 1 - uid: 1861 components: - type: Transform @@ -30774,18 +30800,6 @@ entities: - type: Transform pos: 103.5,59.5 parent: 1 - - uid: 7335 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-38.5 - parent: 1 - - uid: 8737 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-38.5 - parent: 1 - uid: 8901 components: - type: Transform @@ -30923,18 +30937,6 @@ entities: - type: Transform pos: 109.5,58.5 parent: 1 - - uid: 11070 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-37.5 - parent: 1 - - uid: 11140 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-37.5 - parent: 1 - uid: 11141 components: - type: Transform @@ -30987,12 +30989,6 @@ entities: - type: Transform pos: 34.5,-2.5 parent: 1 - - uid: 13907 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-38.5 - parent: 1 - uid: 14556 components: - type: Transform @@ -31034,12 +31030,6 @@ entities: rot: -1.5707963267948966 rad pos: 7.5,-39.5 parent: 1 - - uid: 14623 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-40.5 - parent: 1 - uid: 14624 components: - type: Transform @@ -31052,24 +31042,12 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-40.5 parent: 1 - - uid: 14626 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 6.5,-39.5 - parent: 1 - uid: 14632 components: - type: Transform rot: -1.5707963267948966 rad pos: 2.5,-41.5 parent: 1 - - uid: 14633 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 4.5,-37.5 - parent: 1 - uid: 14636 components: - type: Transform @@ -31100,12 +31078,6 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,-40.5 parent: 1 - - uid: 14946 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 5.5,-39.5 - parent: 1 - uid: 14963 components: - type: Transform @@ -38165,6 +38137,13 @@ entities: - type: Transform pos: 18.607292,16.662266 parent: 1 +- proto: CP14BlueAmanita + entities: + - uid: 26 + components: + - type: Transform + pos: 4.5032434,-39.154808 + parent: 1 - proto: CP14BlueBottle entities: - uid: 7125 @@ -38296,6 +38275,28 @@ entities: - type: Transform pos: -17.264824,5.8419228 parent: 1 +- proto: CP14CandleBlue + entities: + - uid: 8737 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.330699,-38.98751 + parent: 1 + - uid: 9582 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.902204,-39.324844 + parent: 1 +- proto: CP14CandleBlueSmall + entities: + - uid: 9583 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.6772437,-38.26787 + parent: 1 - proto: CP14CandleGreen entities: - uid: 7165 @@ -40719,17 +40720,17 @@ entities: rot: 3.141592653589793 rad pos: -5.5,-34.5 parent: 1 - - uid: 11655 + - uid: 11140 components: - type: Transform - rot: 3.141592653589793 rad - pos: 5.5,-34.5 + rot: 1.5707963267948966 rad + pos: 3.5,-31.5 parent: 1 - - uid: 11656 + - uid: 11311 components: - type: Transform - rot: 3.141592653589793 rad - pos: 4.5,-34.5 + rot: 1.5707963267948966 rad + pos: 3.5,-32.5 parent: 1 - proto: CP14Dayflin entities: @@ -65910,12 +65911,6 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,-43.5 parent: 1 - - uid: 15366 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 6.5,-36.5 - parent: 1 - uid: 15367 components: - type: Transform @@ -67628,11 +67623,6 @@ entities: - type: Transform pos: 12.5,-43.5 parent: 1 - - uid: 15370 - components: - - type: Transform - pos: 3.5,-36.5 - parent: 1 - uid: 15371 components: - type: Transform @@ -68827,6 +68817,14 @@ entities: fixtures: {} - proto: CP14WallmountLampEmpty entities: + - uid: 11070 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,-30.5 + parent: 1 + - type: Fixtures + fixtures: {} - uid: 11758 components: - type: Transform @@ -68956,14 +68954,6 @@ entities: parent: 1 - type: Fixtures fixtures: {} - - uid: 11836 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 3.5,-32.5 - parent: 1 - - type: Fixtures - fixtures: {} - uid: 11837 components: - type: Transform @@ -82689,6 +82679,16 @@ entities: - type: Transform pos: 2.5,21.5 parent: 1 + - uid: 11393 + components: + - type: Transform + pos: 4.5,-35.5 + parent: 1 + - uid: 11394 + components: + - type: Transform + pos: 5.5,-35.5 + parent: 1 - uid: 14358 components: - type: Transform @@ -83812,16 +83812,6 @@ entities: - type: Transform pos: -6.5,1.5 parent: 1 - - uid: 14579 - components: - - type: Transform - pos: 2.5,-32.5 - parent: 1 - - uid: 14581 - components: - - type: Transform - pos: 2.5,-31.5 - parent: 1 - uid: 14582 components: - type: Transform @@ -85516,15 +85506,17 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,19.5 parent: 1 - - uid: 14592 + - uid: 11312 components: - type: Transform - pos: 4.5,-35.5 + rot: 1.5707963267948966 rad + pos: 2.5,-32.5 parent: 1 - - uid: 14608 + - uid: 11370 components: - type: Transform - pos: 5.5,-35.5 + rot: 1.5707963267948966 rad + pos: 2.5,-31.5 parent: 1 - uid: 14695 components: diff --git a/Resources/Maps/_CP14/venicialis.yml b/Resources/Maps/_CP14/venicialis.yml index ebabe9c81b..dff7dd07f1 100644 --- a/Resources/Maps/_CP14/venicialis.yml +++ b/Resources/Maps/_CP14/venicialis.yml @@ -4,8 +4,8 @@ meta: engineVersion: 260.2.0 forkId: "" forkVersion: "" - time: 06/07/2025 21:12:48 - entityCount: 15201 + time: 06/15/2025 11:14:05 + entityCount: 15204 maps: - 2 grids: @@ -96,7 +96,7 @@ entities: version: 7 0,-1: ind: 0,-1 - tiles: IAAAAAAEACAAAAAABAAgAAAAAAEAIAAAAAAEACAAAAAABAAgAAAAAAEAIAAAAAAEACAAAAAAAwACAAAAAAoAAgAAAAAEAAIAAAAAAAACAAAAAAkAAgAAAAACAAIAAAAABwACAAAAAAcAAgAAAAALACAAAAAAAwAgAAAAAAEAIAAAAAAEACAAAAAAAwAgAAAAAAMAAgAAAAAGACAAAAAAAgAgAAAAAAEAIAAAAAAAACAAAAAAAwACAAAAAAsAAgAAAAAOAAIAAAAAAwACAAAAAAsAAgAAAAAJACAAAAAAAQAgAAAAAAEAIAAAAAADACAAAAAABAAgAAAAAAMAIAAAAAADAAIAAAAADQACAAAAAAwAIAAAAAABAAIAAAAADgACAAAAAA8AAgAAAAAGACAAAAAAAAAgAAAAAAQAIAAAAAADACAAAAAABAAgAAAAAAMAAgAAAAAMAAIAAAAAAgACAAAAAAkAAgAAAAAAAAIAAAAABAACAAAAAAkAIAAAAAADACAAAAAAAgACAAAAAAkAAgAAAAACAAIAAAAADwAgAAAAAAQAIAAAAAADAAIAAAAABAACAAAAAA8AAgAAAAAMAAIAAAAAAQACAAAAAA8AAgAAAAADAAIAAAAAAgACAAAAAAsAAgAAAAAJAAIAAAAADgACAAAAAAgAAgAAAAAEAAIAAAAABAACAAAAAAgAAgAAAAACAB0AAAAAAAAeAAAAAAIAHgAAAAACAB4AAAAAAwAdAAAAAAMAHQAAAAADAB4AAAAAAwAeAAAAAAQAHgAAAAACAB4AAAAAAQAeAAAAAAIAHQAAAAACAB0AAAAAAAAdAAAAAAEAHQAAAAAEAB4AAAAAAAAeAAAAAAQAHQAAAAABAAIAAAAAAgAgAAAAAAMAAgAAAAALAAIAAAAACAACAAAAAA0AAgAAAAANAAIAAAAACwACAAAAAAMAAgAAAAAKAAIAAAAABwAgAAAAAAEAIAAAAAACACAAAAAAAgACAAAAAAoAAgAAAAACAAIAAAAADAACAAAAAAAAAgAAAAALACAAAAAAAQACAAAAAA4AAgAAAAAGACAAAAAAAQAgAAAAAAAAIAAAAAADACAAAAAAAQACAAAAAAgAAgAAAAABAAIAAAAAAQACAAAAAAsAAgAAAAAFAAIAAAAACQACAAAAAAQAIAAAAAADAAIAAAAACgAcAAAAAAUAHAAAAAAAABwAAAAAAgAcAAAAAAUAHAAAAAAFAB0AAAAABAAdAAAAAAEAHQAAAAACAB0AAAAAAgAdAAAAAAQAHQAAAAAFAB0AAAAABAAdAAAAAAMAHQAAAAADACAAAAAAAwAgAAAAAAIAHAAAAAACABwAAAAAAQAcAAAAAAMAHAAAAAABAB0AAAAAAgAdAAAAAAQAHQAAAAADAB4AAAAABAAFAAAAAAAABQAAAAABAAUAAAAAAAAFAAAAAAMABQAAAAADAB0AAAAABQAgAAAAAAIAIAAAAAAEAB0AAAAAAQAdAAAAAAAAHAAAAAABABwAAAAAAwAdAAAAAAEAHQAAAAADAB4AAAAABAAeAAAAAAUABQAAAAABAAUAAAAAAQAFAAAAAAMABQAAAAAAAAUAAAAAAAAHAAAAAAIABQAAAAAAAAUAAAAAAAAeAAAAAAEAHQAAAAACABwAAAAAAgAcAAAAAAMABQAAAAADAAUAAAAAAwAHAAAAAAMABwAAAAACAAcAAAAAAAAHAAAAAAAABQAAAAACAAYAAAAAAwAFAAAAAAEABQAAAAACAAUAAAAAAQAFAAAAAAEAHgAAAAABAB0AAAAAAgAdAAAAAAAAHAAAAAADAAUAAAAAAwAFAAAAAAMABwAAAAADAAcAAAAAAAAHAAAAAAMABwAAAAACAAUAAAAAAQAGAAAAAAAABQAAAAABAAUAAAAAAgAHAAAAAAAABwAAAAACAA4AAAAAAAAOAAAAAAQAHgAAAAABAB0AAAAABQAFAAAAAAEABQAAAAACAAcAAAAAAAAHAAAAAAMABwAAAAACAAcAAAAAAAAFAAAAAAMABQAAAAACAAUAAAAAAgAFAAAAAAAABwAAAAABAAcAAAAAAAAOAAAAAAQADgAAAAAEAA4AAAAAAAAdAAAAAAQABQAAAAADAAUAAAAAAwAFAAAAAAEABQAAAAADAAUAAAAAAQAFAAAAAAEABQAAAAACAAUAAAAAAgAFAAAAAAMABQAAAAAAAAcAAAAAAwAHAAAAAAAAIQAAAAAEAA4AAAAAAgAOAAAAAAMAHQAAAAAAAAUAAAAAAAAFAAAAAAIABQAAAAADAAYAAAAAAQAGAAAAAAMABgAAAAADAAUAAAAAAgAFAAAAAAIABQAAAAACAAUAAAAAAwAFAAAAAAMABQAAAAACAA== + tiles: IAAAAAAEACAAAAAABAAgAAAAAAEAIAAAAAAEACAAAAAABAAgAAAAAAEAIAAAAAAEACAAAAAAAwACAAAAAAoAAgAAAAAEAAIAAAAAAAACAAAAAAkAAgAAAAACAAIAAAAABwACAAAAAAcAAgAAAAALACAAAAAAAwAgAAAAAAEAIAAAAAAEACAAAAAAAwAgAAAAAAMAAgAAAAAGACAAAAAAAgAgAAAAAAEAIAAAAAAAACAAAAAAAwACAAAAAAsAAgAAAAAOAAIAAAAAAwACAAAAAAsAAgAAAAAJACAAAAAAAQAgAAAAAAEAIAAAAAADACAAAAAABAAgAAAAAAMAIAAAAAADAAIAAAAADQACAAAAAAwAIAAAAAABAAIAAAAADgACAAAAAA8AAgAAAAAGACAAAAAAAAAgAAAAAAQAIAAAAAADACAAAAAABAAgAAAAAAMAAgAAAAAMAAIAAAAAAgACAAAAAAkAAgAAAAAAAAIAAAAABAACAAAAAAkAIAAAAAADACAAAAAAAgACAAAAAAkAAgAAAAACAAIAAAAADwAgAAAAAAQAIAAAAAADAAIAAAAABAACAAAAAA8AAgAAAAAMAAIAAAAAAQACAAAAAA8AAgAAAAADAAIAAAAAAgACAAAAAAsAAgAAAAAJAAIAAAAADgACAAAAAAgAAgAAAAAEAAIAAAAABAACAAAAAAgAAgAAAAACAB0AAAAAAAAeAAAAAAIAHgAAAAACAB4AAAAAAwAdAAAAAAMAHQAAAAADAB4AAAAAAwAeAAAAAAQAHgAAAAACAB4AAAAAAQAeAAAAAAIAHQAAAAACAB0AAAAAAAAdAAAAAAEAHQAAAAAEAB4AAAAAAAAeAAAAAAQAHQAAAAABAAIAAAAAAgAgAAAAAAMAAgAAAAALAAIAAAAACAACAAAAAA0AAgAAAAANAAIAAAAACwACAAAAAAMAAgAAAAAKAAIAAAAABwAgAAAAAAEAIAAAAAACACAAAAAAAgACAAAAAAoAAgAAAAACAAIAAAAADAACAAAAAAAAAgAAAAALACAAAAAAAQACAAAAAA4AAgAAAAAGACAAAAAAAQAgAAAAAAAAIAAAAAADACAAAAAAAQACAAAAAAgAAgAAAAABAAIAAAAAAQACAAAAAAsAAgAAAAAFAAIAAAAACQACAAAAAAQAIAAAAAADAAIAAAAACgAcAAAAAAUAHAAAAAAAABwAAAAAAgAcAAAAAAUAHAAAAAAFAB0AAAAABAAdAAAAAAEAHQAAAAACAB0AAAAAAgAdAAAAAAQAHQAAAAAFAB0AAAAABAAdAAAAAAMAHQAAAAADACAAAAAAAwAgAAAAAAIAEAAAAAAAABAAAAAAAAAQAAAAAAAAHAAAAAABAB0AAAAAAgAdAAAAAAQAHQAAAAADAB4AAAAABAAFAAAAAAAABQAAAAABAAUAAAAAAAAFAAAAAAMABQAAAAADAB0AAAAABQAgAAAAAAIAIAAAAAAEABAAAAAAAAARAAAAAAAAEAAAAAAAABwAAAAAAwAdAAAAAAEAHQAAAAADAB4AAAAABAAeAAAAAAUABQAAAAABAAUAAAAAAQAFAAAAAAMABQAAAAAAAAUAAAAAAAAHAAAAAAIABQAAAAAAAAUAAAAAAAAQAAAAAAAAEAAAAAAAABAAAAAAAAAcAAAAAAMABQAAAAADAAUAAAAAAwAHAAAAAAMABwAAAAACAAcAAAAAAAAHAAAAAAAABQAAAAACAAYAAAAAAwAFAAAAAAEABQAAAAACAAUAAAAAAQAFAAAAAAEAHgAAAAABAB0AAAAAAgAdAAAAAAAAHAAAAAADAAUAAAAAAwAFAAAAAAMABwAAAAADAAcAAAAAAAAHAAAAAAMABwAAAAACAAUAAAAAAQAGAAAAAAAABQAAAAABAAUAAAAAAgAHAAAAAAAABwAAAAACAA4AAAAAAAAOAAAAAAQAHgAAAAABAB0AAAAABQAFAAAAAAEABQAAAAACAAcAAAAAAAAHAAAAAAMABwAAAAACAAcAAAAAAAAFAAAAAAMABQAAAAACAAUAAAAAAgAFAAAAAAAABwAAAAABAAcAAAAAAAAOAAAAAAQADgAAAAAEAA4AAAAAAAAdAAAAAAQABQAAAAADAAUAAAAAAwAFAAAAAAEABQAAAAADAAUAAAAAAQAFAAAAAAEABQAAAAACAAUAAAAAAgAFAAAAAAMABQAAAAAAAAcAAAAAAwAHAAAAAAAAIQAAAAAEAA4AAAAAAgAOAAAAAAMAHQAAAAAAAAUAAAAAAAAFAAAAAAIABQAAAAADAAYAAAAAAQAGAAAAAAMABgAAAAADAAUAAAAAAgAFAAAAAAIABQAAAAACAAUAAAAAAwAFAAAAAAMABQAAAAACAA== version: 7 0,0: ind: 0,0 @@ -500,11 +500,24 @@ entities: id: CP14BrickTileStoneInnerNe decals: 79: 8,-31 + 142: 0,-7 + 143: 0,-7 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerNw + decals: + 144: 2,-7 - node: color: '#FFFFFFFF' id: CP14BrickTileStoneInnerSe decals: 78: 8,-28 + 140: 0,-5 + - node: + color: '#FFFFFFFF' + id: CP14BrickTileStoneInnerSw + decals: + 141: 2,-5 - node: color: '#DE3A3A96' id: CP14BrickTileStoneLineE @@ -519,6 +532,7 @@ entities: 51: 24,-24 74: 8,-30 75: 8,-29 + 138: 0,-6 - node: color: '#DE3A3A96' id: CP14BrickTileStoneLineN @@ -532,6 +546,7 @@ entities: 47: 22,-23 48: 23,-23 77: 9,-31 + 139: 1,-7 - node: color: '#DE3A3A96' id: CP14BrickTileStoneLineS @@ -545,6 +560,7 @@ entities: 42: 22,-27 43: 23,-27 76: 9,-28 + 136: 1,-5 - node: color: '#DE3A3A96' id: CP14BrickTileStoneLineW @@ -557,6 +573,7 @@ entities: 44: 21,-26 45: 21,-25 46: 21,-24 + 137: 2,-6 - node: color: '#FFFFFFFF' id: CP14FloraGrass10 @@ -753,6 +770,13 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,0.5 parent: 2 +- proto: CP14AltarPrimordialGodLumera + entities: + - uid: 12327 + components: + - type: Transform + pos: 1.5,-5.5 + parent: 2 - proto: CP14BarrelBloodGoblin entities: - uid: 8065 @@ -30239,6 +30263,25 @@ entities: rot: -1.5707963267948966 rad pos: 48.210453,-20.351133 parent: 2 +- proto: CP14CandleBlue + entities: + - uid: 12328 + components: + - type: Transform + pos: 0.7710935,-5.9935446 + parent: 2 + - uid: 15201 + components: + - type: Transform + pos: 2.2783234,-5.80239 + parent: 2 +- proto: CP14CandleBlueSmall + entities: + - uid: 15202 + components: + - type: Transform + pos: 1.5022119,-4.666708 + parent: 2 - proto: CP14CarpetBlue entities: - uid: 1836 @@ -33924,6 +33967,13 @@ entities: - type: Transform pos: -25.5,-33.5 parent: 2 +- proto: CP14ClothingBlueCollarDress + entities: + - uid: 15203 + components: + - type: Transform + pos: 1.5201155,-6.2672186 + parent: 2 - proto: CP14ClothingSatchelLeather entities: - uid: 1484 @@ -34254,7 +34304,7 @@ entities: pos: 14.5,-24.5 parent: 2 - type: Door - secondsUntilStateChange: -8969.771 + secondsUntilStateChange: -9077.496 state: Closing - uid: 1792 components: @@ -52183,12 +52233,6 @@ entities: - type: Transform pos: 24.5,-42.5 parent: 2 - - uid: 12328 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-6.5 - parent: 2 - uid: 12329 components: - type: Transform @@ -52292,12 +52336,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,-10.5 parent: 2 - - uid: 12327 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 1.5,-4.5 - parent: 2 - uid: 12334 components: - type: Transform @@ -77711,6 +77749,13 @@ entities: rot: 3.141592653589793 rad pos: 44.5,-28.5 parent: 2 +- proto: CP14TableMarble + entities: + - uid: 15204 + components: + - type: Transform + pos: 1.5,-6.5 + parent: 2 - proto: CP14TableWooden entities: - uid: 1459 @@ -79091,13 +79136,6 @@ entities: parent: 2 - type: Fixtures fixtures: {} - - uid: 15201 - components: - - type: Transform - pos: 4.5,-5.5 - parent: 2 - - type: Fixtures - fixtures: {} - proto: CP14WallmountFlagBank entities: - uid: 7830 diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_degrade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_degrade.yml new file mode 100644 index 0000000000..2f244a9ecf --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_degrade.yml @@ -0,0 +1,126 @@ +- type: entity + id: CP14ActionSpellGodLumeraMindDegrade + name: The Wrath of Lumera + description: "You unleash your anger on the creature, stunning it, inflicting damage, and burning its mind, removing 0.5 memory points." + components: + - type: CP14MagicEffectReligionRestricted + - type: CP14MagicEffectManaCost + manaCost: 300 + - type: CP14MagicEffect + telegraphyEffects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14RuneMindDegrade + - !type:CP14SpellApplyEntityEffect + effects: + - !type:ChemVomit + - !type:Jitter + time: 16 + - !type:HealthChange + damage: + types: + Slash: 10 + Blunt: 10 + Piercing: 10 + - !type:MovespeedModifier + walkSpeedModifier: 0.02 + sprintSpeedModifier: 0.02 + statusLifetime: 19 + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14LumeraMindDegradeImpact + - !type:CP14SpellRemoveMemoryPoint + - !type:CP14SpellApplyEntityEffect + effects: + - !type:Jitter + time: 16 + - !type:Paralyze + paralyzeTime: 16 + - !type:Drunk + boozePower: 20 + - !type:HealthChange + damage: + types: + Slash: 10 + Blunt: 10 + Piercing: 10 + - !type:MovespeedModifier + walkSpeedModifier: 0.5 + sprintSpeedModifier: 0.5 + statusLifetime: 30 + - type: EntityTargetAction + canTargetSelf: false + blacklist: + components: + - CP14ReligionEntity + whitelist: + components: + - CP14SkillStorage + range: 100 + itemIconStyle: BigAction + checkCanAccess: false + sound: !type:SoundPathSpecifier + path: /Audio/Magic/rumble.ogg + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: wrath + event: !type:CP14DelayedEntityTargetActionEvent + cooldown: 300 + castDelay: 16 + breakOnMove: false + breakOnDamage: false + +- type: entity + id: CP14RuneMindDegrade + parent: CP14BaseMagicRune + categories: [ HideSpawnMenu ] + save: false + components: + - type: TimedDespawn + lifetime: 16 + - type: PointLight + color: "#ae424d" + radius: 5 + energy: 8 + - type: LightFade + duration: 10 + - type: Sprite + layers: + - state: medium_circle + scale: 1.5, 1.5 + color: "#ae424d" + shader: unshaded + - type: EmitSoundOnSpawn + sound: + path: /Audio/_CP14/Effects/ritual_begin.ogg + params: + pitch: 1 + +- type: entity + id: CP14LumeraMindDegradeImpact + categories: [ HideSpawnMenu ] + parent: CP14BaseMagicImpact + save: false + components: + - type: PointLight + color: "#ae424d" + enabled: true + radius: 15 + energy: 8 + netsync: false + - type: Sprite + layers: + - state: stars + scale: 2, 2 + color: "#ae424d" + shader: unshaded + - type: LightFade + duration: 1 + - type: TimedDespawn + lifetime: 3 + - type: EmitSoundOnSpawn + sound: + path: /Audio/Effects/inneranomaly.ogg + params: + pitch: 1 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml index 2a3b5e4a8a..ef7efce2de 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_upgrade.yml @@ -4,6 +4,7 @@ description: "You expand the boundaries of what is possible for the chosen creature, revealing to it the secrets of the universe. The target gains +0.5 memory points, up to a maximum of 6.5" components: - type: CP14MagicEffectReligionRestricted + onlyOnFollowers: true - type: CP14MagicEffectManaCost manaCost: 300 - type: CP14MagicEffect diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml index a847777e4c..b8b84eec82 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml @@ -5,7 +5,7 @@ components: - type: CP14MagicEffectReligionRestricted - type: CP14MagicEffectManaCost - manaCost: 20 + manaCost: 30 - type: CP14MagicEffect effects: - !type:CP14SpellSpawnEntityOnTarget @@ -20,4 +20,52 @@ sprite: _CP14/Actions/DemigodSpells/lumera.rsi state: moon_beam event: !type:CP14WorldTargetActionEvent - cooldown: 0.5 \ No newline at end of file + cooldown: 0.5 + +- type: entity + id: CP14SkyLumeraStrike + categories: [ ForkFiltered ] + name: lumera strike + save: false + components: + - type: Sprite + sprite: _CP14/Effects/lumera_strike.rsi + drawdepth: Mobs + noRot: true + offset: 0,3 + layers: + - state: pewpew + shader: unshaded + - type: TimedDespawn + lifetime: 2 + - type: Tag + tags: + - HideContextMenu + - type: PointLight + color: "#7ca5d8" + enabled: true + radius: 10 + energy: 8 + netsync: false + - type: LightFade + duration: 1 + - type: CP14AreaEntityEffect + range: 1 + effects: + - !type:CP14SpellApplyEntityEffect + effects: + - !type:Jitter + - !type:HealthChange + damage: + types: + Heat: 10 + - type: TriggerOnSpawn + - type: FlashOnTrigger + range: 4 + - type: CP14FarSound + closeSound: + collection: CP14MoonStrike + params: + variation: 0.2 + maxDistance: 20 + volume: 20 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml index 3b59a05282..1278e09fa6 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/renounce.yml @@ -26,7 +26,7 @@ - type: entity id: CP14LumeraRenounceImpact - categories: [ ForkFiltered ] + categories: [ HideSpawnMenu ] parent: CP14BaseMagicImpact save: false components: diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml index f57b5e4883..e0db8b0c53 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/speak.yml @@ -1,6 +1,6 @@ - type: entity id: CP14LumeraSpeakImpact - categories: [ ForkFiltered ] + categories: [ HideSpawnMenu ] parent: CP14BaseMagicImpact save: false components: diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml index b899f6a462..134c1d0fe0 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/touch.yml @@ -30,7 +30,7 @@ - type: entity id: CP14LumeraTouchImpact - categories: [ ForkFiltered ] + categories: [ HideSpawnMenu ] parent: CP14BaseMagicImpact save: false components: diff --git a/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml b/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml index 4626cbe47c..433a114e84 100644 --- a/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml +++ b/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml @@ -89,52 +89,4 @@ collection: CP14LightningFar params: variation: 0.2 - volume: -5 - -- type: entity - id: CP14SkyLumeraStrike - categories: [ ForkFiltered ] - name: lumera strike - save: false - components: - - type: Sprite - sprite: _CP14/Effects/lumera_strike.rsi - drawdepth: Mobs - noRot: true - offset: 0,3 - layers: - - state: pewpew - shader: unshaded - - type: TimedDespawn - lifetime: 2 - - type: Tag - tags: - - HideContextMenu - - type: PointLight - color: "#7ca5d8" - enabled: true - radius: 10 - energy: 8 - netsync: false - - type: LightFade - duration: 1 - - type: CP14AreaEntityEffect - range: 1 - effects: - - !type:CP14SpellApplyEntityEffect - effects: - - !type:Jitter - - !type:HealthChange - damage: - types: - Heat: 10 - - type: TriggerOnSpawn - - type: FlashOnTrigger - range: 4 - - type: CP14FarSound - closeSound: - collection: CP14MoonStrike - params: - variation: 0.2 - maxDistance: 20 - volume: 20 \ No newline at end of file + volume: -5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml index 6bb733612d..c7ab0cc7d5 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml @@ -24,6 +24,13 @@ - type: ActiveListener range: 1 - type: InteractionOutline + - type: Damageable + damageContainer: StructuralInorganic + damageModifierSet: Rock + - type: GuideHelp + guides: + - CP14_RU_Patrons + - CP14_EN_Patrons - type: entity parent: CP14BaseAltar diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml index 7e442e0c9c..0d7619dd74 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/primordial.yml @@ -5,9 +5,11 @@ description: "The enchanting statue of Lumera, patroness of the starry sky, night, and mysteries. She does not demand worship—she simply observes. And waits for you to ask." components: - type: Sprite - sprite: Structures/Furniture/Altars/Gods/convertaltar.rsi + drawdepth: Mobs + offset: "0.0,0.8" + sprite: _CP14/Structures/Specific/Religion/lumera_statue.rsi layers: - - state: white + - state: statue1 - type: CP14ReligionAltar religion: Lumera - type: CP14ReligionObserver diff --git a/Resources/Prototypes/_CP14/Guidebook/Eng/jobs.yml b/Resources/Prototypes/_CP14/Guidebook/Eng/jobs.yml index 4fbe206d06..c53946e76c 100644 --- a/Resources/Prototypes/_CP14/Guidebook/Eng/jobs.yml +++ b/Resources/Prototypes/_CP14/Guidebook/Eng/jobs.yml @@ -7,6 +7,7 @@ - CP14_EN_JobAdventurer - CP14_EN_JobAlchemist - CP14_EN_JobInnkeeper + - CP14_EN_Patrons filterEnabled: True @@ -34,3 +35,10 @@ name: Innkeepers text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Innkeepers.xml" filterEnabled: True + +- type: guideEntry + crystallPunkAllowed: true + id: CP14_EN_Patrons + name: Patrons + text: "/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Patrons.xml" + filterEnabled: True diff --git a/Resources/Prototypes/_CP14/Guidebook/Ru/jobs.yml b/Resources/Prototypes/_CP14/Guidebook/Ru/jobs.yml index 06d5d162cb..c4090d4d51 100644 --- a/Resources/Prototypes/_CP14/Guidebook/Ru/jobs.yml +++ b/Resources/Prototypes/_CP14/Guidebook/Ru/jobs.yml @@ -7,6 +7,7 @@ - CP14_RU_JobAdventurer - CP14_RU_JobAlchemist - CP14_RU_JobInnkeeper + - CP14_RU_Patrons filterEnabled: True @@ -32,6 +33,13 @@ - type: guideEntry crystallPunkAllowed: true id: CP14_RU_JobInnkeeper - name: Innkeepers + name: Трактирщик text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Innkeepers.xml" filterEnabled: True + +- type: guideEntry + crystallPunkAllowed: true + id: CP14_RU_Patrons + name: Покровители + text: "/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Patrons.xml" + filterEnabled: True diff --git a/Resources/Prototypes/_CP14/Maps/comoss.yml b/Resources/Prototypes/_CP14/Maps/comoss.yml index 72a84b95c3..1e6525b1be 100644 --- a/Resources/Prototypes/_CP14/Maps/comoss.yml +++ b/Resources/Prototypes/_CP14/Maps/comoss.yml @@ -13,6 +13,8 @@ mapNameTemplate: "Comoss island" - type: StationJobs availableJobs: + #Demigods + CP14GodLumera: [ 1, 1 ] #Mercenary #CP14Guildmaster: [1, 1] CP14Adventurer: [ -1, -1 ] diff --git a/Resources/Prototypes/_CP14/Maps/venicialis.yml b/Resources/Prototypes/_CP14/Maps/venicialis.yml index 6b710c6ffb..4340dcadd8 100644 --- a/Resources/Prototypes/_CP14/Maps/venicialis.yml +++ b/Resources/Prototypes/_CP14/Maps/venicialis.yml @@ -13,6 +13,8 @@ mapNameTemplate: "Venicialis fort" - type: StationJobs availableJobs: + #Demigods + CP14GodLumera: [ 1, 1 ] #Mercenary #CP14Guildmaster: [1, 1] CP14Adventurer: [ -1, -1 ] diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml index 90c4e7e1ca..88cfc32447 100644 --- a/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml +++ b/Resources/Prototypes/_CP14/Roles/Jobs/Demigods/lumera.yml @@ -2,7 +2,7 @@ id: CP14GodLumera name: cp14-job-name-god-lumera description: cp14-job-desc-god-lumera - setPreference: false + setPreference: true playTimeTracker: CP14GodLumera requirements: - !type:OverallPlaytimeRequirement diff --git a/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml b/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml index 839585efda..977d25a627 100644 --- a/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/_CP14/Roles/Jobs/departments.yml @@ -4,7 +4,7 @@ description: department-CP14Demigods-desc weight: 666 # >:) color: "#ffffff" - editorHidden: true #temp + editorHidden: false roles: - CP14GodLumera - CP14GodMerkas diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml index 398a6f6d10..d90834111a 100644 --- a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml +++ b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml @@ -5,7 +5,7 @@ skillUiPosition: 1, 0 tree: GodLumera name: cp14-skill-lumera-t1-name - learnCost: 0.5 + learnCost: 0 icon: sprite: _CP14/Actions/DemigodSpells/lumera.rsi state: t1 @@ -65,7 +65,7 @@ skillUiPosition: 7, 0 tree: GodLumera name: cp14-skill-lumera-t2-name - learnCost: 0.5 + learnCost: 0 icon: sprite: _CP14/Actions/DemigodSpells/lumera.rsi state: t2 @@ -112,7 +112,7 @@ skillUiPosition: 13, 0 tree: GodLumera name: cp14-skill-lumera-t3-name - learnCost: 0.5 + learnCost: 0 icon: sprite: _CP14/Actions/DemigodSpells/lumera.rsi state: t3 @@ -134,5 +134,20 @@ - !type:AddAction action: CP14ActionSpellGodLumeraMindUpgrade restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT3 + +- type: cp14Skill + id: LumeraMindDegrade + skillUiPosition: 14, 3 + tree: GodLumera + learnCost: 1.0 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: wrath + effects: + - !type:AddAction + action: CP14ActionSpellGodLumeraMindDegrade + restrictions: - !type:NeedPrerequisite prerequisite: LumeraT3 \ No newline at end of file diff --git a/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Patrons.xml b/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Patrons.xml new file mode 100644 index 0000000000..4b8b701566 --- /dev/null +++ b/Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Patrons.xml @@ -0,0 +1,35 @@ + + +# Patrons + +Patrons are a unique game role representing incorporeal spirits capable of helping or hindering mortals. + +## Lore + +Mortals believe that patrons are gods. This is not true. True gods have no interest in what happens on Silite. Nevertheless, the beliefs, desires, fears, and emotions of mortals can create "patron spirits" — incorporeal energy entities that take on the form and powers associated with what mortals believe in. + +Such entities can be described as energetic parasites or symbionts—constantly sucking energy from their followers, they can exist and in return help them with their life problems. + +But if those who believe in the patrons spirit die or reject it, the spirit, deprived of energy, gradually dies. + +Because of this, patrons try with all their might to spread their influence, because the more people know about them and believe in them, the stronger the spirit becomes, gaining more opportunities to influence the world. + +## Area of influence + +Patron deities are not omnipotent and can only act within their area of influence. Most often, a patron deity's area of influence is provided by things associated with them: altars, their own followers, or anything directly related to their power. + +Outside their area of influence, patron deities can only silently observe. + +## Primordial statues and followers + +Each patron has an anchor connecting them to the real world. Most often, these are primordial statues depicting that god. + +Any intelligent being can become a follower of a god by touching a primordial statue and making an agreement with the patron. This establishes a "communication channel". The follower provides the patron with a zone of influence around themselves, allowing the patron to communicate with the follower at any time or influence the environment around them. + +The “channel” between the follower and the patron can be severed at any time, either by renouncing the patron or by expelling the follower. Once an intelligent being has severed its connection with the patron, it can never return to it in that round. + + + + + + \ No newline at end of file diff --git a/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Patrons.xml b/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Patrons.xml new file mode 100644 index 0000000000..41c0ea8701 --- /dev/null +++ b/Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Patrons.xml @@ -0,0 +1,35 @@ + + +# Покровители + +Покровители - это уникальная игровая роль, представляющая из себя бестелесных духов, способных помогать смертным, или мешать им. + +## Лор + +Смертные верят - что покровители это боги. Это не так. Настоящим богам нет дела до происходящего на Силейте. Тем не менее, вера, желания, страхи и эмоции смертных могут создавать "Духов-покровителей" - бестелесных энергетических сущностей, которые принимают форму и силы, связанные с тем, во что верят смертные. + +Такие сущности, можно сказать, являются энергитическими паразитами, или симбиотами - постоянно высасывая энергию из своих последователей, они могут существовать и взамен помогать им в их жизненных проблемах. + +Но если те кто верят в Духа-покровителя погибают, или отвергают его, дух, оставаясь без подпитки энергией, постепенно погибает. + +Из-за этого, покровители всеми силами пытаются распространять свое влияние, ведь чем больше людей знают о нем и верят в него - тем дух становится сильнее, получая больше возможностей влиять на мир. + +## Область влияния + +Покровители не всесильны, и способны действовать только в области своего влияния. Чаще всего область влияния для покровителя предоставляют те вещи, которые с ним связаны: Алтари, собственные последователи, или что-либо связанное напрямую с его силой. + +Вне зоны своего влияния покровители могут лишь молчаливо наблюдать. + +## Первоводные статуи и последователи + +У каждого покровителя есть якорь, соединяющий его с реальным миром. Чаще всего это первородные статуи, изображающие этого бога. + +Любое разумное существо способно стать последователем бога, прикоснувшись к первородной статуе, и договорившись с покровителем. Это устанавливает "канал связи". Последователь предоставляет покровителю зону влияния вокруг себя, что позволяет тому в любое время общаться с последователем, или влиять на окружение вокруг него. + +"Канал" между последователем и покровителем может быть в любой момент разорван, либо отречением от покровителя, либо изгнанием последователя. После того как разумное существо разорвало связь с покровителем, в этом раунде оно больше никогда не сможет вернуться к нему. + + + + + + \ No newline at end of file diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json index 50232c6789..943e1d015a 100644 --- a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json @@ -28,6 +28,9 @@ { "name": "moon_beam" }, + { + "name": "wrath" + }, { "name": "t1" }, diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/wrath.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/wrath.png new file mode 100644 index 0000000000000000000000000000000000000000..e129b1ec72ab0b77bae1120e587f6b4e17bbd081 GIT binary patch literal 670 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 Z{{tX!j$>k(r=kD=002ovPDHLkV1hA`Vafmi literal 0 HcmV?d00001 From d9dc08658803b065db24b415a7f8cd2777a72355 Mon Sep 17 00:00:00 2001 From: Ed Date: Sun, 15 Jun 2025 15:04:21 +0300 Subject: [PATCH 20/27] Update CP14_Changelog.yml --- Resources/Changelog/CP14_Changelog.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 8c93e98eef..797138e2f2 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -371,3 +371,12 @@ id: 8089 time: '2025-06-13T10:25:33.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1402 +- author: TheShuEd + changes: + - message: A patron system has been added. By interacting with the primordial statues, you can become a follower of a patron. For more details, please refer to the in-game guidebooks. + type: Add + - message: The divine patron of the night sky and knowledge, “Lumera,” has been added. This is a game role that gains new abilities based on the number of followers and is capable of interacting with areas of visibility and granting (or taking away) memory points from other players. + type: Add + id: 8090 + time: '2025-06-15T15:00:33.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1427 From 8498e8d1e0130264d4bdbce91e2d3ddfcb39c626 Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+TornadoTechnology@users.noreply.github.com> Date: Sun, 15 Jun 2025 22:05:24 +1000 Subject: [PATCH 21/27] feat: skill ui scale (#1423) --- .../NodeTree/CP14NodeTreeGraphControl.xaml.cs | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/Content.Client/_CP14/UserInterface/Systems/NodeTree/CP14NodeTreeGraphControl.xaml.cs b/Content.Client/_CP14/UserInterface/Systems/NodeTree/CP14NodeTreeGraphControl.xaml.cs index 8107104289..9453417c32 100644 --- a/Content.Client/_CP14/UserInterface/Systems/NodeTree/CP14NodeTreeGraphControl.xaml.cs +++ b/Content.Client/_CP14/UserInterface/Systems/NodeTree/CP14NodeTreeGraphControl.xaml.cs @@ -13,6 +13,9 @@ namespace Content.Client._CP14.UserInterface.Systems.NodeTree; [GenerateTypedNameReferences] public sealed partial class CP14NodeTreeGraphControl : BoxContainer { + private const float LocalUIScaleMax = 4f; + private const float LocalUIScaleMin = 1f; + [Dependency] private readonly IEntityManager _entManager = default!; private CP14NodeTreeUiState? _state; @@ -25,6 +28,9 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer private bool _dragging = false; private Vector2 _previousMousePosition = Vector2.Zero; private Vector2 _globalOffset = new (60,60); + private float _localUIScale = LocalUIScaleMin; + + private float Scale => UIScale * _localUIScale; public event Action? OnNodeSelected; public event Action? OnOffsetChanged; @@ -50,6 +56,16 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer OnOffsetChanged?.Invoke(_globalOffset); } + protected override void MouseWheel(GUIMouseWheelEventArgs args) + { + base.MouseWheel(args); + + if (args.Handled) + return; + + _localUIScale = MathHelper.Clamp(_localUIScale + 0.1f * args.Delta.Y, LocalUIScaleMin, LocalUIScaleMax); + } + protected override void KeyBindDown(GUIBoundKeyEventArgs args) { base.KeyBindDown(args); @@ -72,6 +88,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer if (args.Function == EngineKeyFunctions.UIRightClick) { _globalOffset = new Vector2(60, 60); // Reset offset on right click + _localUIScale = LocalUIScaleMin; OnOffsetChanged?.Invoke(_globalOffset); } } @@ -107,7 +124,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer if (_dragging) { var delta = cursor - _previousMousePosition; - _globalOffset += delta; + _globalOffset += delta; OnOffsetChanged?.Invoke(_globalOffset); } @@ -118,8 +135,8 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer { var node1 = _nodeDict[edge.Item1]; var node2 = _nodeDict[edge.Item2]; - var fromPos = node1.UiPosition * UIScale + _globalOffset; - var toPos = node2.UiPosition * UIScale + _globalOffset; + var fromPos = node1.UiPosition * Scale + _globalOffset; + var toPos = node2.UiPosition * Scale + _globalOffset; var lineColor = node1.Gained || node2.Gained ? _state.ActiveLineColor : _state.LineColor; handle.DrawLine(fromPos, toPos, lineColor); @@ -128,11 +145,11 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer //Draw Node icons over lines foreach (var node in _state.Nodes) { - var pos = node.UiPosition * UIScale + _globalOffset; + var pos = node.UiPosition * Scale + _globalOffset; // Frame var frameTexture = _state.FrameIcon.Frame0(); - var frameSize = new Vector2(frameTexture.Width, frameTexture.Height) * 1.5f * UIScale; + var frameSize = new Vector2(frameTexture.Width, frameTexture.Height) * 1.5f * Scale; var frameQuad = new UIBox2(pos - frameSize / 2, pos + frameSize / 2); handle.DrawTextureRect(frameTexture, frameQuad); @@ -140,7 +157,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer if (_selectedNode == node) { var selectedTexture = _state.SelectedIcon.Frame0(); - var selectedSize = new Vector2(selectedTexture.Width, selectedTexture.Height) * 1.5f * UIScale; + var selectedSize = new Vector2(selectedTexture.Width, selectedTexture.Height) * 1.5f * Scale; var selectedQuad = new UIBox2(pos - selectedSize / 2, pos + selectedSize / 2); handle.DrawTextureRect(selectedTexture, selectedQuad); } @@ -151,7 +168,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer { _hoveredNode = node; var hoveredTexture = _state.HoveredIcon.Frame0(); - var hoveredSize = new Vector2(hoveredTexture.Width, hoveredTexture.Height) * 1.5f * UIScale; + var hoveredSize = new Vector2(hoveredTexture.Width, hoveredTexture.Height) * 1.5f * Scale; var hoveredQuad = new UIBox2(pos - hoveredSize / 2, pos + hoveredSize / 2); handle.DrawTextureRect(hoveredTexture, hoveredQuad); } @@ -160,7 +177,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer if (node.Gained) { var learnedTexture = _state.LearnedIcon.Frame0(); - var learnedSize = new Vector2(learnedTexture.Width, learnedTexture.Height) * 1.5f * UIScale; + var learnedSize = new Vector2(learnedTexture.Width, learnedTexture.Height) * 1.5f * Scale; var learnedQuad = new UIBox2(pos - learnedSize / 2, pos + learnedSize / 2); handle.DrawTextureRect(learnedTexture, learnedQuad); } @@ -169,7 +186,7 @@ public sealed partial class CP14NodeTreeGraphControl : BoxContainer if (node.Icon is not null) { var baseTexture = node.Icon.Frame0(); - var baseSize = new Vector2(baseTexture.Width, baseTexture.Height) * 1.5f * UIScale; + var baseSize = new Vector2(baseTexture.Width, baseTexture.Height) * 1.5f * Scale; var baseQuad = new UIBox2(pos - baseSize / 2, pos + baseSize / 2); var tint = node.Gained || node.Active ? Color.White : Color.FromSrgb(new Color(0.6f, 0.6f, 0.6f)); handle.DrawTextureRect(baseTexture, baseQuad, tint); From 2f4d60b7af8174730ba1296b1bfedeee600c6175 Mon Sep 17 00:00:00 2001 From: Ed Date: Sun, 15 Jun 2025 17:12:30 +0300 Subject: [PATCH 22/27] Update moon_strike.yml --- .../Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml index b8b84eec82..e4de1739c2 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml @@ -61,7 +61,7 @@ Heat: 10 - type: TriggerOnSpawn - type: FlashOnTrigger - range: 4 + range: 2 - type: CP14FarSound closeSound: collection: CP14MoonStrike From d30b51c982a204a379cedf91c3152b9c8794b180 Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sun, 15 Jun 2025 18:03:38 +0300 Subject: [PATCH 23/27] Firewave (#1430) * nerf spiders * firebolt to firewave * Update firebolt.yml * rename file * Update firewave.yml * Update firewave.yml --- .../Fire/{firebolt.yml => firewave.yml} | 52 ++++++++++-------- .../_CP14/Entities/Mobs/NPC/spider.yml | 2 +- .../_CP14/Skill/Basic/pyrokinetic.yml | 8 +-- .../Actions/Spells/fire.rsi/firebolt.png | Bin 474 -> 0 bytes .../Actions/Spells/fire.rsi/firewave.png | Bin 0 -> 607 bytes .../_CP14/Actions/Spells/fire.rsi/meta.json | 4 +- .../Effects/Magic/firebolt.rsi/firebolt.png | Bin 583 -> 0 bytes .../Effects/Magic/firebolt.rsi/meta.json | 14 ----- 8 files changed, 36 insertions(+), 44 deletions(-) rename Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/{firebolt.yml => firewave.yml} (67%) delete mode 100644 Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png create mode 100644 Resources/Textures/_CP14/Actions/Spells/fire.rsi/firewave.png delete mode 100644 Resources/Textures/_CP14/Effects/Magic/firebolt.rsi/firebolt.png delete mode 100644 Resources/Textures/_CP14/Effects/Magic/firebolt.rsi/meta.json diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firewave.yml similarity index 67% rename from Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml rename to Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firewave.yml index 896ecd6f81..efea7753e0 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firebolt.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Fire/firewave.yml @@ -1,11 +1,11 @@ - type: entity - id: CP14ActionSpellFirebolt - name: Firebolt - description: A staple of a pyrokinetic's arsenal - a small but potent bolt of fire. + id: CP14ActionSpellFirewave + name: Firewave + description: You release a wave of hot fire that strikes multiple targets in an area. components: - type: Sprite sprite: _CP14/Actions/Spells/fire.rsi - state: fireball + state: firewave - type: CP14MagicEffectCastSlowdown speedMultiplier: 0.75 - type: CP14MagicEffectManaCost @@ -15,9 +15,9 @@ effects: - !type:CP14SpellProjectile prototype: CP14Firebolt - - !type:CP14SpellSpawnEntityOnUser - spawns: - - CP14ImpactEffectFirebolt + spread: 2 + projectileSpeed: 5 + projectileCount: 6 - type: CP14MagicEffectVerbalAspect endSpeech: "Ignis acus!" - type: CP14MagicEffectCastingVisual @@ -33,10 +33,9 @@ path: /Audio/Magic/rumble.ogg icon: sprite: _CP14/Actions/Spells/fire.rsi - state: firebolt - event: !type:CP14DelayedEntityWorldTargetActionEvent + state: firewave + event: !type:CP14EntityWorldTargetActionEvent cooldown: 1.0 - breakOnMove: false - type: entity id: CP14RuneFirebolt @@ -58,11 +57,11 @@ categories: [ HideSpawnMenu ] save: false components: - - type: Sprite - layers: - - state: wave_up - color: "#eea911" - shader: unshaded + - type: PointLight + color: "#E25822" + radius: 2.0 + energy: 2.0 + - type: LightFade - type: entity id: CP14Firebolt @@ -71,28 +70,35 @@ categories: [ HideSpawnMenu ] save: false components: + - type: TimedDespawn + lifetime: 1 + - type: SpawnOnDespawn + prototype: CP14ImpactEffectFirebolt - type: PointLight color: "#E25822" - radius: 1.1 - energy: 1.0 + radius: 2.0 + energy: 2.0 - type: Projectile + impactEffect: CP14ImpactEffectFirebolt damage: types: - Heat: 10 + Heat: 2 soundHit: path: /Audio/Weapons/Guns/Hits/energy_metal1.ogg - type: Sprite - sprite: _CP14/Effects/Magic/firebolt.rsi + sprite: _CP14/Effects/fire.rsi layers: - - state: firebolt + - state: small shader: unshaded + - type: ChangeTemperatureOnCollide + heat: 10000 - type: entity parent: CP14BaseSpellScrollFire - id: CP14SpellScrollFirebolt - name: firebolt spell scroll + id: CP14SpellScrollFirewave + name: firewave spell scroll components: - type: CP14SpellStorage spells: - - CP14ActionSpellFirebolt + - CP14ActionSpellFirewave diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/NPC/spider.yml b/Resources/Prototypes/_CP14/Entities/Mobs/NPC/spider.yml index 1079d70f4b..d7f42c4b4a 100644 --- a/Resources/Prototypes/_CP14/Entities/Mobs/NPC/spider.yml +++ b/Resources/Prototypes/_CP14/Entities/Mobs/NPC/spider.yml @@ -49,7 +49,7 @@ - type: MobThresholds thresholds: 0: Alive - 90: Dead + 40: Dead #- type: SolutionContainerManager # solutions: # melee: diff --git a/Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml b/Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml index c1a5dc55df..1991782db8 100644 --- a/Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml +++ b/Resources/Prototypes/_CP14/Skill/Basic/pyrokinetic.yml @@ -103,15 +103,15 @@ prerequisite: PyrokineticT2 - type: cp14Skill - id: CP14ActionSpellFirebolt - skillUiPosition: 6, 6 + id: CP14ActionSpellFirewave + skillUiPosition: 8, 4 tree: Pyrokinetic icon: sprite: _CP14/Actions/Spells/fire.rsi - state: firebolt + state: firewave effects: - !type:AddAction - action: CP14ActionSpellFirebolt + action: CP14ActionSpellFirewave restrictions: - !type:NeedPrerequisite prerequisite: PyrokineticT2 diff --git a/Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png b/Resources/Textures/_CP14/Actions/Spells/fire.rsi/firebolt.png deleted file mode 100644 index ac658353bc073ac170ac7c430315b63ab638d84f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 474 zcmV<00VV#4P)pGj7da6R9Hu2U>F6XAu!TIfRUU4_#ej5fUJ*k6)K+;Gg(Mc3{v}l zGQ)plJs*!qlru2AAk`SSdXho_-SQ7dB>M$dJ})BMcA!S09RRcZ$x)pap8s#TDYY2p zXp$TNvRuacN)1Z<=MwJ;Y$3%&Oz?qxkIiyW6cD2ypBkbPA-d&^a9=+sXg@s1*fP|k zC_c>42+BPKqu_CbPBU__BP_>lH%?1ITKqF18aGa70GWl?0mN7ivJB)Cyq3b;3bP!_ zXOx?c+X3&xCHn+yo)^OOl9J`95(3!ryuknGtw7(tB^dEY3dl+W=)S*u)S_Pa|3d+g zxzx)4FgIe&1;{}UQV6mfCU%F>;)AmFiAIn(EE`hdD2#FdvR^X=gFaAt<>36x87InZhcT*!Uk+HyQ$?Api;i0BB&PVa4vR Qp#T5?07*qoM6N<$g4TePx%8A(JzR9J=8SG!8XP#FG>2ntrHxEK%@*FHd@<{8{tU!g;Wy67Mzr4<)xhYWcJ z-TDk|!3S`4&=%rST5-_rcSufp&dKdGqSYS)NzUc_{>yhRz<)QY!-?Kqkodh8BNs$2 z2nfinpHLl+Nb1j#V82E}0B6<`w-5m}uk1cM&ryF9HUMCVHXpOOGPn}Px6#1`@R~iy zgpJc?@ILUQrj;U~f-go!fA7ve&m8m8q!?(C6manAxY8}rY$p#`B0NMJ!1q%y9ap-C zwZ|&}pcAwJ*_#Ns4u^w@?Zio#unGCKBY848t8}=O_%m-9Jqc8EE>V(N5fD9>z4D_z z+DhOSrX{xqCTEpSGPs__B&f`h8G)kUNuZGo0npHMV8Uh=*hbnU^M=tA!51T=p9RJ@ z9&$mv(4>xBiUSY0Z7!pc>P3R)%j93Pd(6_tsH9>fxSckEfd^)RB@&o7j9&S~Z}IP^ zan;_Z=Q053=wFviDuG1rLqbpEs(oC0X!HMtNQLt!)_|yO6|id*DoS};^y_x*DLql_w!zVToKY}HKP!y3&OpP>dcjV$3B(SZEC42L^DM5kW2{(rPp?Ko5}^W5f_vLm%$iN}8;< zYc++1N70x9Dazne=s|<0ps$ayPWD=hkULYvuvP+E0DSSaIRNJNS*Hr144TP_(-}Kc zG$QScun&pk2^0bZK#;o}6pUb}JXQcMmJbRN#8$=)@D&mSpN60*;M?yb2;d@8A6o_P z5~-uSovld0swGXq&RAj`0-;<1KHvSb-&(w-HO{dxFRS5?D^e%{+$U1U<(<@q)QCE> z(h?RIMvONSxpPH*wX@vB-OT|4{sN36njI-XD7g0(^uGsD>=Z@~@E8#2hQ$oz7Do!e zx8GAhV9@$Wj}*W~_{A4+aYyzUdRG++cozM(J9VZC zGxUW*T)lGk^ly9tQLC8dWrL#Yy6OG#YQLfUCmlMjQUyE_y1kBkQ7$f@fo*6~5kFXk zps2ZjA>~!G2Qdo>wpWtBj Date: Sun, 15 Jun 2025 18:04:44 +0300 Subject: [PATCH 24/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 797138e2f2..28c4e2bb1b 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -373,10 +373,26 @@ url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1402 - author: TheShuEd changes: - - message: A patron system has been added. By interacting with the primordial statues, you can become a follower of a patron. For more details, please refer to the in-game guidebooks. + - message: A patron system has been added. By interacting with the primordial statues, + you can become a follower of a patron. For more details, please refer to the + in-game guidebooks. type: Add - - message: The divine patron of the night sky and knowledge, “Lumera,” has been added. This is a game role that gains new abilities based on the number of followers and is capable of interacting with areas of visibility and granting (or taking away) memory points from other players. + - message: "The divine patron of the night sky and knowledge, \u201CLumera,\u201D\ + \ has been added. This is a game role that gains new abilities based on the\ + \ number of followers and is capable of interacting with areas of visibility\ + \ and granting (or taking away) memory points from other players." type: Add id: 8090 time: '2025-06-15T15:00:33.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1427 +- author: TheShuEd + changes: + - message: Added firewave spell. Now it looks like a shotgun, only made of fire. + type: Add + - message: Removed firebolt spell. + type: Remove + - message: Spiders' health reduced by half + type: Tweak + id: 8091 + time: '2025-06-15T15:03:38.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1430 From b24ec5bc80cf8b027485b513a8b92e628a62d855 Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sun, 15 Jun 2025 21:25:58 +0300 Subject: [PATCH 25/27] Bugfixes (#1432) * fix #1428 * CodTenAlt review * fix map tests * real this time * fix #1429 * add wheat and cotton into victorian gardens trade faction * Update PostMapInitTest.cs --- .../CP14ReligionEntityBoundUserInterface.cs | 1 - .../Religion/CP14ReligionEntityWindow.xaml.cs | 1 + .../Religion/CP14ReligionVisionOverlay.cs | 4 +-- .../Tests/PostMapInitTest.cs | 2 +- .../Components/SpawnPointComponent.cs | 3 -- .../EntitySystems/SpawnPointSystem.cs | 2 +- .../CP14DemiplaneSystem.Stabilization.cs | 13 --------- .../CP14DemiplaneTravelingSystem.cs | 2 ++ .../_CP14/Passport/CP14PassportSystem.cs | 5 +++- .../CP14StationRandomJobsComponent.cs | 2 +- .../_CP14/Religion/CP14ReligionSystem.UI.cs | 4 --- .../_CP14/Religion/CP14ReligionSystem.cs | 8 ++++- ...4MagicEffectReligionRestrictedComponent.cs | 3 -- .../MagicSpell/Spells/CP14SpellGodTouch.cs | 1 + .../CP14SharedReligionGodSystem.Altars.cs | 1 + .../CP14SharedReligionGodSystem.Followers.cs | 7 +++-- ...CP14SharedReligionGodSystem.Observation.cs | 5 +--- .../Player/{Demigods => Patrons}/gods.yml | 0 .../Structures/Specific/Religion/base.yml | 2 +- .../_CP14/Trading/victoria_gardens.yml | 29 +++++++++++++++++-- 20 files changed, 53 insertions(+), 42 deletions(-) rename Resources/Prototypes/_CP14/Entities/Mobs/Player/{Demigods => Patrons}/gods.yml (100%) diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs b/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs index ba517f05d8..8be8e1f51c 100644 --- a/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityBoundUserInterface.cs @@ -11,7 +11,6 @@ public sealed class CP14ReligionEntityBoundUserInterface : BoundUserInterface public CP14ReligionEntityBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { - IoCManager.InjectDependencies(this); } protected override void Open() diff --git a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs index dd2545b5c4..629a90e894 100644 --- a/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs +++ b/Content.Client/_CP14/Religion/CP14ReligionEntityWindow.xaml.cs @@ -11,6 +11,7 @@ namespace Content.Client._CP14.Religion; public sealed partial class CP14ReligionEntityWindow : DefaultWindow { [Dependency] private readonly ILogManager _log = default!; + private ISawmill Sawmill { get; init; } public event Action? OnTeleportAttempt; diff --git a/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs b/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs index ce1b5405fc..6c837e0713 100644 --- a/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs +++ b/Content.Client/_CP14/Religion/CP14ReligionVisionOverlay.cs @@ -31,6 +31,7 @@ public sealed class CP14ReligionVisionOverlay : Overlay private readonly Vector2[] _positions = new Vector2[MaxCount]; private readonly float[] _radii = new float[MaxCount]; private int _count = 0; + public CP14ReligionVisionOverlay() { IoCManager.InjectDependencies(this); @@ -40,12 +41,9 @@ public sealed class CP14ReligionVisionOverlay : Overlay _transform = _entManager.System(); if (_entManager.TryGetComponent(_player.LocalEntity, out var vision)) - { _religion = vision.Religion; - } } - protected override bool BeforeDraw(in OverlayDrawArgs args) { if (args.Viewport.Eye == null) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 78ae7ff7e6..03642a957f 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -401,7 +401,7 @@ namespace Content.IntegrationTests.Tests var jobs = new HashSet>(comp.SetupAvailableJobs.Keys); var spawnPoints = entManager.EntityQuery() - .Where(x => x.SpawnType == SpawnPointType.Job && x.Job != null) + .Where(x => x.SpawnType is SpawnPointType.Job or SpawnPointType.Unset && x.Job != null) //CP14 Job or Unset (only Job in upstream) .Select(x => x.Job.Value); jobs.ExceptWith(spawnPoints); diff --git a/Content.Server/Spawners/Components/SpawnPointComponent.cs b/Content.Server/Spawners/Components/SpawnPointComponent.cs index 16b24d6d62..c6d14dfeb3 100644 --- a/Content.Server/Spawners/Components/SpawnPointComponent.cs +++ b/Content.Server/Spawners/Components/SpawnPointComponent.cs @@ -27,7 +27,4 @@ public enum SpawnPointType LateJoin, Job, Observer, - //CP14 - Always, //Always use only these spawn point, and latejoin, and roundstart - //CP14 end } diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs index 56c01f64de..1a399a8678 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs @@ -33,7 +33,7 @@ public sealed class SpawnPointSystem : EntitySystem continue; //CP14 always spawn gods on gods spawnpoints - if (spawnPoint.SpawnType == SpawnPointType.Always && (args.Job == null || spawnPoint.Job == args.Job)) + if (spawnPoint.SpawnType == SpawnPointType.Unset && (args.Job == null || spawnPoint.Job == args.Job)) { possiblePositions.Clear(); possiblePositions.Add(xform.Coordinates); diff --git a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs index a89bfd7e76..4d4f055000 100644 --- a/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs +++ b/Content.Server/_CP14/Demiplane/CP14DemiplaneSystem.Stabilization.cs @@ -83,26 +83,13 @@ public sealed partial class CP14DemiplaneSystem while (query.MoveNext(out var uid, out var stabilizer, out var xform)) { - if (!stabilizer.Enabled) - continue; - if (TryTeleportOutDemiplane(demiplane, uid)) { if (!safe) - { - var ev = new CP14DemiplaneUnsafeExit(); - RaiseLocalEvent(uid, ev); - _body.GibBody(uid); - } } } QueueDel(demiplane); } } - -public sealed class CP14DemiplaneUnsafeExit : EntityEventArgs -{ - -} diff --git a/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs b/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs index 6e6516c753..b1978c537c 100644 --- a/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs +++ b/Content.Server/_CP14/DemiplaneTraveling/CP14DemiplaneTravelingSystem.cs @@ -117,6 +117,8 @@ public sealed partial class CP14DemiplaneTravelingSystem : EntitySystem { if (HasComp(ent)) continue; + if (HasComp(ent)) //TODO: make some generic way to whitelist entities from teleporting + continue; if (!_mind.TryGetMind(ent, out var mindId, out var mind)) continue; diff --git a/Content.Server/_CP14/Passport/CP14PassportSystem.cs b/Content.Server/_CP14/Passport/CP14PassportSystem.cs index 80ab0fcc4f..1b60833551 100644 --- a/Content.Server/_CP14/Passport/CP14PassportSystem.cs +++ b/Content.Server/_CP14/Passport/CP14PassportSystem.cs @@ -25,6 +25,9 @@ public sealed partial class CP14PassportSystem : EntitySystem private void OnPlayerSpawning(PlayerSpawnCompleteEvent ev) { + if (!TryComp(ev.Mob, out var inventory)) + return; + var passport = Spawn(PassportProto, Transform(ev.Mob).Coordinates); if (!TryComp(passport, out var paper)) @@ -39,7 +42,7 @@ public sealed partial class CP14PassportSystem : EntitySystem StampedName = Loc.GetString("cp14-passport-stamp") }, ""); - _inventory.TryEquip(ev.Mob, passport, "pocket1"); + _inventory.TryEquip(ev.Mob, passport, "pocket1", inventory: inventory); } private string GeneratePassportText(PlayerSpawnCompleteEvent ev) diff --git a/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs index 12c5d8582f..b269c243e8 100644 --- a/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs +++ b/Content.Server/_CP14/RandomJobs/CP14StationRandomJobsComponent.cs @@ -16,7 +16,7 @@ public sealed partial class CP14StationRandomJobsComponent : Component public sealed partial class CP14RandomJobEntry { [DataField(required: true)] - public List> Jobs = default!; + public List> Jobs = new(); [DataField(required: true)] public MinMax Count = new(1, 1); diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs index 4d46b02b5c..96bf35ac03 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.UI.cs @@ -25,16 +25,12 @@ public sealed partial class CP14ReligionGodSystem if (TryComp(target, out var altar)) { if (altar.Religion == ent.Comp.Religion) - { canTeleport = true; - } } else if (TryComp(target, out var follower)) { if (follower.Religion == ent.Comp.Religion) - { canTeleport = true; - } } if (!canTeleport) diff --git a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs index 394c6931e9..991f620cbd 100644 --- a/Content.Server/_CP14/Religion/CP14ReligionSystem.cs +++ b/Content.Server/_CP14/Religion/CP14ReligionSystem.cs @@ -25,6 +25,12 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; + /// + /// If ReligionObserver receives a radius higher than this value, this entity will automatically be placed in PvsOverride for the god in order to function correctly outside of the player's PVS. + /// + /// Maybe there is a variable for the distance outside the screen in PVS, I don't know. This number works best + private const float ObservationOverrideRadius = 6.5f; + public override void Initialize() { base.Initialize(); @@ -197,7 +203,7 @@ public sealed partial class CP14ReligionGodSystem : CP14SharedReligionGodSystem if (!observer.Observation.ContainsKey(ent.Comp.Religion.Value)) continue; - if (observer.Observation[ent.Comp.Religion.Value] <= 6.5f) //Maybe there is a variable for the distance outside the screen in PVS, I don't know. This number works best + if (observer.Observation[ent.Comp.Religion.Value] <= ObservationOverrideRadius) continue; ent.Comp.PvsOverridedObservers.Add(uid); diff --git a/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs index 11563950ce..25eca4eb4b 100644 --- a/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs +++ b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs @@ -1,6 +1,3 @@ -using Content.Shared._CP14.MagicSpellStorage; -using Content.Shared.FixedPoint; - namespace Content.Shared._CP14.MagicSpell.Components; /// diff --git a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs index 4121e3b52a..1fe4675080 100644 --- a/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs +++ b/Content.Shared/_CP14/MagicSpell/Spells/CP14SpellGodTouch.cs @@ -18,6 +18,7 @@ public sealed partial class CP14SpellGodTouch : CP14SpellEffect entManager.EventBus.RaiseLocalEvent(args.Target.Value, ev); } } + public sealed class CP14GodTouchEvent(ProtoId religion) : EntityEventArgs { public ProtoId Religion = religion; diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs index a653d63f48..e9e29777d9 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Altars.cs @@ -10,6 +10,7 @@ namespace Content.Shared._CP14.Religion.Systems; public abstract partial class CP14SharedReligionGodSystem { [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + private void InitializeAltars() { SubscribeLocalEvent>(GetAltVerb); diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs index 981f2f3ee5..4ad072f40e 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Followers.cs @@ -18,6 +18,9 @@ public abstract partial class CP14SharedReligionGodSystem [Dependency] protected readonly SharedMindSystem Mind = default!; [Dependency] private readonly FollowerSystem _follower = default!; + [ValidatePrototypeId] + public const string AlertProto = "CP14DivineOffer"; + private void InitializeFollowers() { SubscribeLocalEvent(OnPendingFollowerInit); @@ -105,12 +108,12 @@ public abstract partial class CP14SharedReligionGodSystem private void OnPendingFollowerInit(Entity ent, ref MapInitEvent args) { - _alerts.ShowAlert(ent, "CP14DivineOffer"); + _alerts.ShowAlert(ent, AlertProto); } private void OnPendingFollowerShutdown(Entity ent, ref ComponentShutdown args) { - _alerts.ClearAlert(ent, "CP14DivineOffer"); + _alerts.ClearAlert(ent, AlertProto); } private bool CanBecomeFollower(EntityUid target, ProtoId religion) diff --git a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs index c2ee697f4a..dc5a3f5174 100644 --- a/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs +++ b/Content.Shared/_CP14/Religion/Systems/CP14SharedReligionGodSystem.Observation.cs @@ -37,19 +37,16 @@ public abstract partial class CP14SharedReligionGodSystem var newRange = Math.Clamp(observer.Observation[religion] + range, 0, float.MaxValue); if (newRange <= 0) - { observer.Observation.Remove(religion); - } else - { observer.Observation[religion] = newRange; - } } else { // Otherwise, add a new observation for the religion. observer.Observation.Add(religion, range); } + Dirty(target, observer); } diff --git a/Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml b/Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml similarity index 100% rename from Resources/Prototypes/_CP14/Entities/Mobs/Player/Demigods/gods.yml rename to Resources/Prototypes/_CP14/Entities/Mobs/Player/Patrons/gods.yml diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml index c7ab0cc7d5..1ca572b8da 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml @@ -40,4 +40,4 @@ - type: CP14ReligionAltar canBeConverted: false - type: SpawnPoint - spawn_type: Always \ No newline at end of file + spawn_type: Unset \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Trading/victoria_gardens.yml b/Resources/Prototypes/_CP14/Trading/victoria_gardens.yml index f9cb01c667..7ebaf31212 100644 --- a/Resources/Prototypes/_CP14/Trading/victoria_gardens.yml +++ b/Resources/Prototypes/_CP14/Trading/victoria_gardens.yml @@ -66,13 +66,24 @@ product: CP14FoodOnion count: 3 +- type: cp14TradingPosition + id: CP14Wheat + faction: VictoriaGardens + uiPosition: 6 + icon: + sprite: _CP14/Objects/Flora/Farm/wheat.rsi + state: base1 + service: !type:CP14BuyItemsService + product: CP14Wheat + count: 3 + - type: cp14TradingPosition id: CP14FloorTileGrassBag faction: VictoriaGardens priceMarkup: 2 reputationLevel: 0 - uiPosition: 7 + uiPosition: 8 icon: sprite: _CP14/Objects/Specific/Farming/grass_seeds.rsi state: grass @@ -85,7 +96,7 @@ faction: VictoriaGardens priceMarkup: 2 reputationLevel: 0 - uiPosition: 8 + uiPosition: 9 icon: sprite: _CP14/Objects/Specific/Farming/grass_seeds.rsi state: grass2 @@ -98,7 +109,7 @@ faction: VictoriaGardens priceMarkup: 2 reputationLevel: 0 - uiPosition: 9 + uiPosition: 10 icon: sprite: _CP14/Objects/Specific/Farming/grass_seeds.rsi state: grass3 @@ -130,4 +141,16 @@ state: base1 service: !type:CP14BuyItemsService product: CP14FoodPumpkin + count: 3 + +- type: cp14TradingPosition + id: CP14Cotton + faction: VictoriaGardens + reputationLevel: 1 + uiPosition: 2 + icon: + sprite: _CP14/Objects/Flora/Farm/cotton.rsi + state: base1 + service: !type:CP14BuyItemsService + product: CP14Cotton count: 3 \ No newline at end of file From 6a8699a44c1237b14811569c2d891835f0063d78 Mon Sep 17 00:00:00 2001 From: CrystallEdge Server Date: Sun, 15 Jun 2025 21:27:04 +0300 Subject: [PATCH 26/27] Automatic changelog update --- Resources/Changelog/CP14_Changelog.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Resources/Changelog/CP14_Changelog.yml b/Resources/Changelog/CP14_Changelog.yml index 28c4e2bb1b..6741521935 100644 --- a/Resources/Changelog/CP14_Changelog.yml +++ b/Resources/Changelog/CP14_Changelog.yml @@ -396,3 +396,17 @@ id: 8091 time: '2025-06-15T15:03:38.0000000+00:00' url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1430 +- author: TheShuEd + changes: + - message: you can buy wheat and cotton into victorian gardens trade faction + type: Add + - message: Demiplanes can no longer devour patrons if they close while the patron + is inside the demoplan. + type: Fix + - message: Patron saints can no longer occupy entry slots into the demiplane. + type: Fix + - message: Passports removed from the gods-patrons + type: Fix + id: 8092 + time: '2025-06-15T18:25:58.0000000+00:00' + url: https://github.com/crystallpunk-14/crystall-punk-14/pull/1432 From 5046ad1aeb6a792a7a823fdf72837609d58d3350 Mon Sep 17 00:00:00 2001 From: Ed Date: Sun, 15 Jun 2025 21:34:33 +0300 Subject: [PATCH 27/27] longer weather --- .../_CP14/WeatherControl/CP14WeatherControllerComponent.cs | 1 - Content.Shared/_CP14/WeatherControl/CP14WeatherData.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Content.Server/_CP14/WeatherControl/CP14WeatherControllerComponent.cs b/Content.Server/_CP14/WeatherControl/CP14WeatherControllerComponent.cs index 181994632a..f70091884b 100644 --- a/Content.Server/_CP14/WeatherControl/CP14WeatherControllerComponent.cs +++ b/Content.Server/_CP14/WeatherControl/CP14WeatherControllerComponent.cs @@ -1,6 +1,5 @@ using Content.Server._CP14.GameTicking.Rules; using Content.Shared._CP14.WeatherControl; -using Content.Shared.Destructible.Thresholds; namespace Content.Server._CP14.WeatherControl; diff --git a/Content.Shared/_CP14/WeatherControl/CP14WeatherData.cs b/Content.Shared/_CP14/WeatherControl/CP14WeatherData.cs index c77d2f1257..5755e881c7 100644 --- a/Content.Shared/_CP14/WeatherControl/CP14WeatherData.cs +++ b/Content.Shared/_CP14/WeatherControl/CP14WeatherData.cs @@ -11,7 +11,7 @@ public sealed class CP14WeatherData public ProtoId? Visuals { get; set; } = null; [DataField] - public MinMax Duration { get; set; } = new(30, 300); + public MinMax Duration { get; set; } = new(120, 600); [DataField] public float Weight { get; set; } = 1f;

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%0D~CZjjaNtmnZ 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/_CP14/Effects/moon_strike3.ogg b/Resources/Audio/_CP14/Effects/moon_strike3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bbd3cdda7d62a820f612904bd9d3e135416845cc GIT binary patch literal 28518 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%0DvW-t^=O&liL;s}Ka&mh|>_%f) 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 YA$JD)Vo$@xR|YXl&wJzYFwztFKPz&(@&Et; literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/_CP14/skill/ui.ftl b/Resources/Locale/en-US/_CP14/skill/ui.ftl index 7217fa18b2..af94a8f730 100644 --- a/Resources/Locale/en-US/_CP14/skill/ui.ftl +++ b/Resources/Locale/en-US/_CP14/skill/ui.ftl @@ -18,5 +18,4 @@ cp14-skill-desc-unlock-recipes = Opens up the possibility of crafting: cp14-skill-popup-added-points = The boundaries of your consciousness are expanding. New memory points: {$count} -cp14-skill-examine-verb = Learn the character's skills cp14-skill-examine-title = This character has the following skills: \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl index 3981ca2fee..1a11e1c85f 100644 --- a/Resources/Locale/ru-RU/_CP14/skill/ui.ftl +++ b/Resources/Locale/ru-RU/_CP14/skill/ui.ftl @@ -18,5 +18,4 @@ cp14-skill-desc-unlock-recipes = Открывает возможность со cp14-skill-popup-added-points = Границы вашего сознания расширяются. Новых очков памяти: {$count} -cp14-skill-examine-verb = Изучить навыки персонажа cp14-skill-examine-title = Этот персонаж владеет следующими навыками: \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml new file mode 100644 index 0000000000..a847777e4c --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/moon_strike.yml @@ -0,0 +1,23 @@ +- type: entity + id: CP14ActionSpellGodLumeraMoonStrike + name: Lunar strike + description: You focus the concentrated light of the stars into a single point, blinding and damaging everything that comes within reach of the angry goddess. + components: + - type: CP14MagicEffectReligionRestricted + - type: CP14MagicEffectManaCost + manaCost: 20 + - type: CP14MagicEffect + effects: + - !type:CP14SpellSpawnEntityOnTarget + spawns: + - CP14SkyLumeraStrike + - type: WorldTargetAction + repeat: true + checkCanAccess: false + range: 100 + itemIconStyle: BigAction + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: moon_beam + event: !type:CP14WorldTargetActionEvent + cooldown: 0.5 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml index 76c3f24cc6..8ca6e6df6e 100644 --- a/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml +++ b/Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/generic.yml @@ -4,6 +4,8 @@ description: You renounce your patron by severing your connection with him. After that, you can never become his follower again, but you can become a follower of another patron. components: - type: InstantAction + checkCanInteract: false + checkConsciousness: false icon: sprite: _CP14/Interface/Alerts/divine_offer.rsi state: unoffer diff --git a/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml b/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml index 65b9755a82..4626cbe47c 100644 --- a/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml +++ b/Resources/Prototypes/_CP14/Entities/Effects/sky_lightning.yml @@ -91,3 +91,50 @@ variation: 0.2 volume: -5 +- type: entity + id: CP14SkyLumeraStrike + categories: [ ForkFiltered ] + name: lumera strike + save: false + components: + - type: Sprite + sprite: _CP14/Effects/lumera_strike.rsi + drawdepth: Mobs + noRot: true + offset: 0,3 + layers: + - state: pewpew + shader: unshaded + - type: TimedDespawn + lifetime: 2 + - type: Tag + tags: + - HideContextMenu + - type: PointLight + color: "#7ca5d8" + enabled: true + radius: 10 + energy: 8 + netsync: false + - type: LightFade + duration: 1 + - type: CP14AreaEntityEffect + range: 1 + effects: + - !type:CP14SpellApplyEntityEffect + effects: + - !type:Jitter + - !type:HealthChange + damage: + types: + Heat: 10 + - type: TriggerOnSpawn + - type: FlashOnTrigger + range: 4 + - type: CP14FarSound + closeSound: + collection: CP14MoonStrike + params: + variation: 0.2 + maxDistance: 20 + volume: 20 \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml index fb2d3fb87f..6bb733612d 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Specific/Religion/base.yml @@ -23,6 +23,7 @@ - type: CP14ReligionAltar - type: ActiveListener range: 1 + - type: InteractionOutline - type: entity parent: CP14BaseAltar diff --git a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml index 0728186d9b..398a6f6d10 100644 --- a/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml +++ b/Resources/Prototypes/_CP14/Skill/Demigods/lumera.yml @@ -73,7 +73,7 @@ - !type:NeedPrerequisite prerequisite: LumeraT1 - !type:GodFollowerPercentage - percentage: 0.3 + percentage: 0.25 - type: cp14Skill id: LumeraDarkMist @@ -90,6 +90,21 @@ - !type:NeedPrerequisite prerequisite: LumeraT2 +- type: cp14Skill + id: LumeraMoonStrike + skillUiPosition: 8, 3 + tree: GodLumera + learnCost: 1.0 + icon: + sprite: _CP14/Actions/DemigodSpells/lumera.rsi + state: moon_beam + effects: + - !type:AddAction + action: CP14ActionSpellGodLumeraMoonStrike + restrictions: + - !type:NeedPrerequisite + prerequisite: LumeraT2 + # T3 - type: cp14Skill @@ -105,7 +120,7 @@ - !type:NeedPrerequisite prerequisite: LumeraT2 - !type:GodFollowerPercentage - percentage: 0.6 + percentage: 0.5 - type: cp14Skill id: LumeraMindUpgrade diff --git a/Resources/Prototypes/_CP14/SoundCollections/misc.yml b/Resources/Prototypes/_CP14/SoundCollections/misc.yml index c9c5bf5a90..1069061784 100644 --- a/Resources/Prototypes/_CP14/SoundCollections/misc.yml +++ b/Resources/Prototypes/_CP14/SoundCollections/misc.yml @@ -42,3 +42,11 @@ - /Audio/_CP14/Effects/coin_impact2.ogg - /Audio/_CP14/Effects/coin_impact3.ogg +- type: soundCollection + id: CP14MoonStrike + files: + - /Audio/_CP14/Effects/moon_strike1.ogg + - /Audio/_CP14/Effects/moon_strike2.ogg + - /Audio/_CP14/Effects/moon_strike3.ogg + - /Audio/_CP14/Effects/moon_strike4.ogg + diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json index 8b7286b8a7..50232c6789 100644 --- a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json +++ b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/meta.json @@ -25,6 +25,9 @@ { "name": "mind_scan" }, + { + "name": "moon_beam" + }, { "name": "t1" }, diff --git a/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/moon_beam.png b/Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/moon_beam.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2bbf3e6c9444441088f98f73997756ae52484f GIT binary patch literal 324 zcmV-K0lWT*P)Px#{z*hZR9J=8m%92gtkm~tv4+5wJ2pizqY+3%l zc?8Aoa;}DPR>L?i_aw`C2}#6CPGncWmn4)td2{I?dfVBhKkw_xWf#-eDCF4nlkz3D zWrFx(nR%R)rV*0d2NC+Xkq{$GIltiB21DTwX<=j%;G8B>7DF0te@t*Aby WBbK;wKEcue0000WG|A1WI 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 r&$}t|C0*oe*tn*O0aSXqu~DsoyR`q literal 0 HcmV?d00001 From 04f6627e1606dfbb1b43e68bfddb6bf52e01d468 Mon Sep 17 00:00:00 2001 From: Red <96445749+TheShuEd@users.noreply.github.com> Date: Sun, 15 Jun 2025 15:00:18 +0300 Subject: [PATCH 19/27] Lumera patron (#1427) * mind upgrade works only on followers * wrath of lumera, removing memory points * enable lumera for players * add lumera to maps * job desc update * guidebook --- .../CP14SharedMagicSystem.Checks.cs | 24 ++- ...4MagicEffectReligionRestrictedComponent.cs | 13 +- .../Spells/CP14SpellRemoveMemoryPoint.cs | 19 ++ .../_CP14/Skill/CP14SharedSkillSystem.cs | 60 ++++++ Resources/Locale/en-US/_CP14/job/job.ftl | 2 +- .../en-US/_CP14/magicEnergy/magic-spells.ftl | 3 +- Resources/Locale/en-US/_CP14/skill/ui.ftl | 3 +- Resources/Locale/ru-RU/_CP14/job/job.ftl | 2 +- .../ru-RU/_CP14/magicEnergy/magic-spells.ftl | 3 +- Resources/Locale/ru-RU/_CP14/skill/ui.ftl | 1 + Resources/Maps/_CP14/comoss.yml | 196 +++++++++--------- Resources/Maps/_CP14/venicialis.yml | 84 ++++++-- .../Spells/Demigods/Lumera/mind_degrade.yml | 126 +++++++++++ .../Spells/Demigods/Lumera/mind_upgrade.yml | 1 + .../Spells/Demigods/Lumera/moon_strike.yml | 52 ++++- .../Spells/Demigods/Lumera/renounce.yml | 2 +- .../Actions/Spells/Demigods/Lumera/speak.yml | 2 +- .../Actions/Spells/Demigods/Lumera/touch.yml | 2 +- .../_CP14/Entities/Effects/sky_lightning.yml | 50 +---- .../Structures/Specific/Religion/base.yml | 7 + .../Specific/Religion/primordial.yml | 6 +- .../Prototypes/_CP14/Guidebook/Eng/jobs.yml | 8 + .../Prototypes/_CP14/Guidebook/Ru/jobs.yml | 10 +- Resources/Prototypes/_CP14/Maps/comoss.yml | 2 + .../Prototypes/_CP14/Maps/venicialis.yml | 2 + .../_CP14/Roles/Jobs/Demigods/lumera.yml | 2 +- .../_CP14/Roles/Jobs/departments.yml | 2 +- .../_CP14/Skill/Demigods/lumera.yml | 21 +- .../_CP14/Guidebook_EN/JobsTabs/Patrons.xml | 35 ++++ .../_CP14/Guidebook_RU/JobsTabs/Patrons.xml | 35 ++++ .../DemigodSpells/lumera.rsi/meta.json | 3 + .../DemigodSpells/lumera.rsi/wrath.png | Bin 0 -> 670 bytes .../Religion/lumera_statue.rsi/meta.json | 14 ++ .../Religion/lumera_statue.rsi/statue1.png | Bin 0 -> 3343 bytes 34 files changed, 592 insertions(+), 200 deletions(-) create mode 100644 Content.Shared/_CP14/MagicSpell/Spells/CP14SpellRemoveMemoryPoint.cs create mode 100644 Resources/Prototypes/_CP14/Entities/Actions/Spells/Demigods/Lumera/mind_degrade.yml create mode 100644 Resources/ServerInfo/_CP14/Guidebook_EN/JobsTabs/Patrons.xml create mode 100644 Resources/ServerInfo/_CP14/Guidebook_RU/JobsTabs/Patrons.xml create mode 100644 Resources/Textures/_CP14/Actions/DemigodSpells/lumera.rsi/wrath.png create mode 100644 Resources/Textures/_CP14/Structures/Specific/Religion/lumera_statue.rsi/meta.json create mode 100644 Resources/Textures/_CP14/Structures/Specific/Religion/lumera_statue.rsi/statue1.png diff --git a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs index 8ce8d72002..98f786ae94 100644 --- a/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs +++ b/Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.Checks.cs @@ -155,7 +155,8 @@ public abstract partial class CP14SharedMagicSystem } } - private void OnReligionRestrictedCheck(Entity ent, ref CP14CastMagicEffectAttemptEvent args) + private void OnReligionRestrictedCheck(Entity ent, + ref CP14CastMagicEffectAttemptEvent args) { if (!TryComp(args.Performer, out var religionComp)) return; @@ -165,13 +166,22 @@ public abstract partial class CP14SharedMagicSystem if (args.Target is not null) position ??= Transform(args.Target.Value).Coordinates; - if (position is null) - return; + if (ent.Comp.OnlyInReligionZone) + { + if (position is null || !_god.InVision(position.Value, (args.Performer, religionComp))) + { + args.Cancel(); + } + } - if (_god.InVision(position.Value, (args.Performer, religionComp))) - return; - - args.Cancel(); + if (ent.Comp.OnlyOnFollowers) + { + if (args.Target is null || !TryComp(args.Target, out var follower) || follower.Religion != religionComp.Religion) + { + args.PushReason(Loc.GetString("cp14-magic-spell-target-god-follower")); + args.Cancel(); + } + } } private void OnVerbalAspectStartCast(Entity ent, diff --git a/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs index ec18a93490..11563950ce 100644 --- a/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs +++ b/Content.Shared/_CP14/MagicSpell/Components/CP14MagicEffectReligionRestrictedComponent.cs @@ -6,7 +6,18 @@ namespace Content.Shared._CP14.MagicSpell.Components; ///