Einstein-Engines icon indicating copy to clipboard operation
Einstein-Engines copied to clipboard

Shadowling Antagonist (SS13 Port and Remake)

Open Lumminal opened this issue 8 months ago • 15 comments

Description

Ports Shadowlings from SS13 to SS14 with a remake to make them fun to play.

Minimal Design Doc (not up-to-date, read comments in this repo for updates): https://github.com/Lumminal/SS14-Design-Docs-Lumminal/blob/main/Shadowling.md


TODO

  • Abilities
    • [X] Hatch
    • [x] Glare
    • [X] Enthrall
    • [x] Veil
    • [x] Shadow Walk
    • [x] Icy Veins
    • [x] Collective Mind
    • [x] Rapid Re-Hatch
    • [x] Destroy Engines
    • [x] Sonic Screech
    • [x] Blindness Smoke
    • [x] Null Charge
    • [x] Black Recuperation
    • [x] Empowered Enthrall
    • [x] Nox Imperii
    • [x] Ascension
    • [x] Annihilate
    • [x] Hypnosis
    • [x] Plane-Shift
    • [x] Lighting Storm
    • [x] Ascendant Broadcast
  • Antags
    • [X] Thrall
      • [x] Guise
      • [x] Thrall Darksight
    • [x] Lesser Shadowling
  • Passive
    • [x] Light Resistance Scaling
    • [x] Shadowmind
    • [x] Damage on Light
  • Other
    • [x] Sounds
    • [x] Sprites
    • [x] Psionic Interactions
    • [x] Handle Edge Cases

Media

https://www.youtube.com/watch?v=H-Ee5wuRINc


Changelog

:cl:

  • add: The shadows have awakened, and their ascendance is soon to follow. Do not enter maints.

Lumminal avatar Apr 09 '25 21:04 Lumminal

I would appreciate if someone can review my design doc so I can know that im good to work on my proposed changes, or change anything that doesn't sound right. Until then, I will focus on the mechanics that will remain unchanged

Lumminal avatar Apr 09 '25 21:04 Lumminal

i scoobydooby do hope all of the powers are psionic based (obviously not able to be gotten normally, but admintoolable)

bruhmogus avatar Apr 09 '25 22:04 bruhmogus

i scoobydooby do hope all of the powers are psionic based (obviously not able to be gotten normally, but admintoolable)

Hmm Will def look into it, although most powers aren't that useful to non-slings (if we make them obtainable through other means). Other than that, if I understand correctly, do you mean that the powers should be raising glimmer and interacting more with psionic people?

Lumminal avatar Apr 10 '25 05:04 Lumminal

would also theoretically have some interactions with the mindbroken, mindbreaking, and insulation

RocketBoss360 avatar Apr 10 '25 05:04 RocketBoss360

For future reference, Shadowmind will be the way to talk with other Thrall/Slings (it was named Hivemind in ss13)

Either way, my dilemma is; should I make it a language like how Blood Cultists communicate globally, or make it a radio frequency like Changeling's Hivemind?

Also would you like the Slings to omit messages/voicelines on certain abilities?

Lumminal avatar Apr 11 '25 11:04 Lumminal

Boood cultist

EctoplasmIsGood avatar Apr 11 '25 19:04 EctoplasmIsGood

aughhh such a good PR

EctoplasmIsGood avatar Apr 12 '25 11:04 EctoplasmIsGood

it's shitcode right now tho. I will try to refactor it today. Will make things easier for the future 🫠

Lumminal avatar Apr 12 '25 14:04 Lumminal

Will come back to veil. I should probably up its timer and make the flashlights useless by making them consume lots of power. Right now, flashlights just get toggled... However, I made veil destroy lights instead of turning them off, so that may balance it.

Lumminal avatar Apr 12 '25 18:04 Lumminal

Some things I thought about adding in this remake:

  • New damage type called "Shadow Damage" (innovative name, I know) that gets dealt by Shadowlings' punches (in VERY VERY small amounts until Ascension). It can only be healed with a special chem that can be gained by extracting liquid from the Shadowling egg (that also means the egg will not decay as mentioned in SS13). In return, paramedics/chemists will have to go out of their way to get that chem in order to heal people damaged by it.
  • New ability that works similar to the Blood Cult stun punch but also applies Shadow Damage. Gets unlocked with Collective Mind. I'll have to think how many thralls will be needed
  • Punch visual effect similar to the Plasmaman but shadowy/dark color

So far the main abilities aren't that hard to create, they only need polishing visually and sound wise because they feel soulless. And handling some edge cases (which I added in the todo)

Lumminal avatar Apr 13 '25 17:04 Lumminal

This pull request has conflicts, please resolve those before we can evaluate the pull request.

github-actions[bot] avatar Apr 16 '25 20:04 github-actions[bot]

Update: I decided to scrap the lightning resistance system from the design doc. Instead, I took a more experimental approach to it. I call it the anti-scaling lightning resistance system.

The more thralls a Shadowling has, the more damage they take from light. The less thralls they have, the less damage they take from light.

This will allow them to not struggle against light in early game. This also means they have to play more carefully later. But again, the values will require adjusting.

On the bright side, all main Shadowling Abilities from ss13 have been functionally ported.

After I commit Shadowmind (the language), I will start working on the "remake" parts of this antagonist. Like new abilities and interesting stuff. Plans for now is to add the new Light Negation ability (Nox Imperii) at 15-14 Thralls (note: the shadowling can die very quickly if they're on light at that point).

Lumminal avatar Apr 23 '25 18:04 Lumminal

Media is up now. The PR is ready for review.

Stuff that should be noted:

There's 2 harmless 'bugs' that do not work after some time of debugging and maybe will get a fix later.

The first one is that effects kind of don't rotate when the character falls down or gravity is off. It's harmless bug but I'm just mentioning it because I couldn't find a solution

The other bug is that the ascend objective is not displaying green once completed. I have debugged this one and the objective does get set to 1 once you ascend, otherwise its 0. So something with the UI stuff is wrong. Still another harmless that can be disabled if required.

Other notes:

The media does not show Destroy Engines ability. It works in-game, have tested it. Its a shuttle delay by 10 minutes. It also shows a bugged state of the healing mechanic in shadows that has been fixed with the most recent commit cause I forgot something lol

That's it.

tldr; ready for review when maints are available

also this is my first coding pr ever, please forgive the shitcode you're gonna see 🙏 (hopefully i dont see y'all in the hospital)

Lumminal avatar May 21 '25 18:05 Lumminal

ok I fixed the objective. But still

review begging day 4

f0b

Lumminal avatar May 25 '25 16:05 Lumminal

bump

Lumminal avatar May 27 '25 13:05 Lumminal

This pull request has conflicts, please resolve those before we can evaluate the pull request.

github-actions[bot] avatar May 28 '25 00:05 github-actions[bot]

Perhaps it's worth removing all sorts of "test" things, for example:

language-Shadowmind-description =
    A test
roles-antag-shadowling-objective = test
roles-antag-thrall-objective = test

v0idRift avatar May 28 '25 10:05 v0idRift

Perhaps it's worth removing all sorts of "test" things, for example:

language-Shadowmind-description =
    A test
roles-antag-shadowling-objective = test
roles-antag-thrall-objective = test

I don't even remember this. Must have been very early in dev lmao. Will remove this in next commit and some other bloat I found

Lumminal avatar May 28 '25 12:05 Lumminal

Hi, it seems the shaders from the /Textures/Shaders/enthrall_effect.swsl folder are breaking compatibility mode and preventing the game from launching in it.

[ERRO] res: Exception while loading resource Robust.Client.ResourceManagement.ShaderSourceResource at '/Textures/Shaders/enthrall_effect.swsl', no fallback available
   at System.Environment.get_StackTrace()
   at Robust.Client.ResourceManagement.ResourceCache.GetResource[T](ResPath path, Boolean useFallback) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/ResourceManagement/ResourceCache.cs:line 40
   at Robust.Client.Graphics.ShaderPrototype.Robust.Shared.Serialization.ISerializationHooks.AfterDeserialization() in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Shaders/ShaderPrototype.cs:line 123
   at Robust.Shared.Prototypes.PrototypeManager.InstantiateKinds(KindData[] kinds, Dictionary`2 inheritanceTasks) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Shared/Prototypes/PrototypeManager.cs:line 545
   at Robust.Shared.Prototypes.PrototypeManager.ResolveResults() in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Shared/Prototypes/PrototypeManager.cs:line 500
   at Robust.Client.Prototypes.ClientPrototypeManager.LoadDefaultPrototypes(Dictionary`2 changed) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Prototypes/ClientPrototypeManager.cs:line 49
   at Robust.Client.GameController.StartupContinue(DisplayMode displayMode) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.cs:line 190
   at Robust.Client.GameController.ContinueStartupAndLoop(DisplayMode mode) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.Standalone.cs:line 156
   at Robust.Client.GameController.GameThreadMain(DisplayMode mode) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.Standalone.cs:line 148
   at Robust.Client.GameController.<>c__DisplayClass105_0.<Run>b__0() in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.Standalone.cs:line 107
   at System.Threading.Thread.StartCallback()
Robust.Client.Graphics.Clyde.ShaderCompilationException: Failed to compile fragment shader, see inner for details (and error.glsl for formatted source).
 ---> Robust.Client.Graphics.Clyde.ShaderCompilationException: 0:243(8): error: No precision specified in this scope
Unhandled exception. Robust.Client.Graphics.Clyde.ShaderCompilationException: Failed to compile fragment shader, see inner for details (and error.glsl for formatted source).
---> Robust.Client.Graphics.Clyde.ShaderCompilationException: 0:243(8): error: No precision specified in this scope for type `float'
0:246(2): error: No precision specified in this scope for type `float'
0:247(2): error: No precision specified in this scope for type `float'
0:248(2): error: No precision specified in this scope for type `float'
0:249(2): error: No precision specified in this scope for type `float'
0:250(2): error: No precision specified in this scope for type `float'
0:251(2): error: No precision specified in this scope for type `float'
0:252(2): error: No precision specified in this scope for type `float'
0:253(2): error: No precision specified in this scope for type `float'
0:254(2): error: No precision specified in this scope for type `float'
0:255(2): error: No precision specified in this scope for type `float'
0:274(2): error: No precision specified in this scope for type `float'

  at Robust.Client.Graphics.Clyde.Clyde.GLShader.Compile(ShaderType type, String shaderSource) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Clyde/GLObjects/Clyde.Shader.cs:line 40
  at Robust.Client.Graphics.Clyde.Clyde.GLShader..ctor(Clyde clyde, ShaderType type, String shaderSource, String name) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Clyde/GLObjects/Clyde.Shader.cs:line 14
  at Robust.Client.Graphics.Clyde.Clyde._compileProgram(String vertexSource, String fragmentSource, ValueTuple`2[] attribLocations, String name, Boolean includeLib, Dictionary`2 defines) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Clyde/Clyde.Shaders.cs:line 252
  --- End of inner exception stack trace ---
  at Robust.Client.Graphics.Clyde.Clyde._compileProgram(String vertexSource, String fragmentSource, ValueTuple`2[] attribLocations, String name, Boolean includeLib, Dictionary`2 defines) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Clyde/Clyde.Shaders.cs:line 257
  at Robust.Client.Graphics.Clyde.Clyde.LoadShader(ParsedShader shader, String name, Dictionary`2 defines) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Clyde/Clyde.Shaders.cs:line 96
  at Robust.Client.ResourceManagement.ShaderSourceResource.Load(IDependencyCollection dependencies, ResPath path) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/ResourceManagement/ResourceTypes/ShaderSourceResource.cs:line 33
  at Robust.Client.ResourceManagement.ResourceCache.GetResource[T](ResPath path, Boolean useFallback) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/ResourceManagement/ResourceCache.cs:line 40
  at Robust.Client.Graphics.ShaderPrototype.Robust.Shared.Serialization.ISerializationHooks.AfterDeserialization() in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Graphics/Shaders/ShaderPrototype.cs:line 123
  at Robust.Shared.Prototypes.PrototypeManager.InstantiateKinds(KindData[] kinds, Dictionary`2 inheritanceTasks) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Shared/Prototypes/PrototypeManager.cs:line 545
  at Robust.Shared.Prototypes.PrototypeManager.ResolveResults() in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Shared/Prototypes/PrototypeManager.cs:line 500
  at Robust.Client.Prototypes.ClientPrototypeManager.LoadDefaultPrototypes(Dictionary`2 changed) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/Prototypes/ClientPrototypeManager.cs:line 49
  at Robust.Client.GameController.StartupContinue(DisplayMode displayMode) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.cs:line 190
  at Robust.Client.GameController.ContinueStartupAndLoop(DisplayMode mode) in /home/runner/work/RobustToolbox/RobustToolbox/Robust.Client/GameController/GameController.Standalone.cs:line 156
  at Robust.Client.GameController.GameThreadMain(DisplayMode mode) in /home/runner/

v0idRift avatar Jun 01 '25 13:06 v0idRift

waiting for review?

Crono209ggg avatar Jun 19 '25 02:06 Crono209ggg

Yeah

Lumminal avatar Jun 19 '25 05:06 Lumminal

This antag is awesome

Crono209ggg avatar Jun 23 '25 15:06 Crono209ggg

This antag is awesome

It's really cool, but you also need to have steady hands to play it

v0idRift avatar Jun 23 '25 17:06 v0idRift

Hopefully (insert copium) it gets reviewed before this year ends

Lumminal avatar Jun 24 '25 16:06 Lumminal

Ping me in exactly 9 hours and 30 minutes, and I will review it

VMSolidus avatar Jun 24 '25 16:06 VMSolidus

I'll probably ping you in 11 hours and 30 minutes cause I'm in Europe and I'll be sleeping by then.

Also Shadowling review real (time for shitcode reviewing) 💯💪

Lumminal avatar Jun 24 '25 16:06 Lumminal