Shadowling Antagonist (SS13 Port and Remake)
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
- [X] Thrall
- 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.
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
i scoobydooby do hope all of the powers are psionic based (obviously not able to be gotten normally, but admintoolable)
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?
would also theoretically have some interactions with the mindbroken, mindbreaking, and insulation
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?
Boood cultist
aughhh such a good PR
it's shitcode right now tho. I will try to refactor it today. Will make things easier for the future 🫠
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.
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)
This pull request has conflicts, please resolve those before we can evaluate the pull request.
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).
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)
ok I fixed the objective. But still
review begging day 4
bump
This pull request has conflicts, please resolve those before we can evaluate the pull request.
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
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
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/
waiting for review?
Yeah
This antag is awesome
This antag is awesome
It's really cool, but you also need to have steady hands to play it
Hopefully (insert copium) it gets reviewed before this year ends
Ping me in exactly 9 hours and 30 minutes, and I will review it
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) 💯💪