* Test commit, adds file.
Adds the actual game implementation
Revert "Feature/ratlain"
Adds hiding shards behind posters.
Begins adding evil posters which make you sad if you look at them.
Refactors 'seeing' to use proximity sensors.
This is both more efficient and allows both propaganda tools to share code.
Added most of the implementation for grafitti too, needs splitting into its own file.
* Separated objectives into different files
* Adds the graffiti objective
* Adds demoraliser component for shared behaviour between disparate items
* Soap now calls wash() instead of just qdeling things by itself
Adds file I forgot to commit.
* Remove pointless 'var's
* Makes my abstract objective abstract, probably?
Missed one remaining instance of unecessary var
* Alphabetises tgstation.dme
Tiny change to flavour text.
Removes random unwanted pixel.
* * Refactors how signals are handled across the code and moves filtering to a more appropriate place.
* Handily removes owner object which we don't need any more.
* Adds some early returns.
* Adds missing call to super in contraband.dm attackby.
* That was supposed to be a commit not also a push.
Reverts one change I didn't want to make which also allows this to compile.
* * Removes unecessary tracking of rune in spraycan
* Simplifies spam protection
* Unregister signals in "ungenerate_objective" rather than bespoke proc
* Removes pointless type cast applied two lines before type guarding it again
* Fixes some formatting
* Replaces mob/living/human with mob/living in demoraliser, if Ian get a mood component then why not demoralise him too?
* Adds missing comment
* Updates bad proc name
* * Moves proc from demoraliser to mood
* Replaces reference to glass shard trap with a weakref
* Cleans up some lines which were left after refactoring
* Corrects timing of setting `drawing_rune`
* More early returns
* Test
* Removes trailing /
Replaces . = ..() with a later return ..() in a couple of places
* Restores failure penalty
Adds weight to objective category
* Adds penalty to missed file.
* Separates slipping on graffiti to its own signal
Removes a duplicate comment
More early returns
* Renames vague var.
Why It's Good For The Game
Further reducing reliance on reading the chat box. Previously it wasn't obvious someone pointing at themselves was pointing at something on them, and not just, them.
Changelog
cl
qol: Pointing at something on yourself now shows the item.
/cl
* Readds Alien Vore
Aliens can now eat people again. Behavior was removed by #43991 (b6c41e3b32)
because nasku thought it was weird, and the code was really bad.
I think it's funny, and I've made the code not trashtier.
Basically, an alien can agressive grab any living mob. If they stay next
to the mob, facing them for 13 seconds, they will "eat" the mob,
IE:insert them into a list on their custom stomach.
The xeno can then hit an action button to spit out the mob, alongside
some acid.
If the mob is alive enough to pull out a weapon inside the xeno/has one
on it, they can attack the xeno from inside, dealing damage to the
creature and its stomach. If the stomach drops below a threshold, the
mob gibs the xeno and escapes.
I've done my best to steer things away from horny and into gross, though
I'm aware you fucks do your best to blur that line.
Anyway something something balance change something something lets xenos
abduct people more easily, I'm mostly doing this cause I think it has
soul.
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Replaced the old mining outpost with a new base consisting of separate buildings on islands in the middle of lava. Added a few new areas and decorations to fill out the outpost. Changed the underfloor accessibility of lava so cables and pipes don't mysteriously disappear as they cross catwalks over lava.
The current mining station is fairly boring and dated. In addition, the general layout of the outpost was bland and uninspired, about as exciting as any other hallway. This replacement offers a new and unique take with an interesting layout and new dangers to be aware of.
The bridges between buildings are exposed to the weather, meaning you could find yourself forced to choose between waiting out a storm in an isolated building with a potentially unfriendly roommate, or running through the storm to get back to a shuttle.
Power and communications are also more vulnerable in the new base, placed in a building on the mainland where ne'er-do-wells could gain access unnoticed and sabotage them, making the mining outpost less of a safe space with little risk of anything going seriously wrong. You don't get access to these just for having mining access, better call the relevant portion of engineering to help you.
Gulag prisoners also get a few new options to keep security on their toes, with a few different options for escape routes that encourage the warden to keep an eye on their charges instead of ignoring the gulag while waiting for the prisoners to do their sentences or kill themselves.
Adds a new selection of posters, poster-like objects, and wall decorations.
New entirely with this PR, shipping containers! These sprites were adapted from a base from TGMC, with brands and designs more fitting to our universe here on TG
Another new addition, flags! These draw upon Common Core lore, representing several major factions from the lorebase as a new mapping tool
Finally, there are two interactive wall objects- wall clocks, and calendars:
The wall clock shows both the "real time", represented as the Earth time, or Treaty Coordinated Standard Time, and the station time, represented as the local time, or Coalition Standard Time
The calendar gives the in-universe date, as well as any active holidays
Why It's Good For The Game
This adds a lot of fun aesthetic additions that I think will benefit our mapping team in creating new spaces and breathing new life into older ones. Additionally, it helps make our Common Core lore a bit more tangible to the playerbase, bringing it away from being "just on a wiki" and into the game proper.
A whole host of new posters have just become available.
For the architects among you: a number of new aesthetic options are available for mapping with. Let your creativity free!
About The Pull Request
Fixes some cases in which actual references were used in trait sources instead of keys (or ref() keys).
This can cause some rare and difficult to find hard deletes.
Trait sources should be a string key relating to the source of it, not an actual reference to what added it. References within trait sources are never handled in Destroy(), because it's not expected behavior, meaning it can cause hanging references.
So, I went through with a regex to find some cases and replaced them.
I used the following and just picked through the few by hand to find erroneous ones.
ADD_TRAIT\(.+, .+, [a-z]+\)
REMOVE_TRAIT_TRAIT\(.+, .+, [a-z]+\)
Why It's Good For The Game
Less hard deletes, probably.
Changelog
cl Melbert
code: Some traits which mistakenly were sourced from a hard reference are no longer.
/cl
* destroy proc holder pt1
- change proc_holder/spell to action/cooldown/spell
- docs all the spell vars, renames some of them
- removes some useless vars
- start with pointed spells, as they're easy
* kill proc_holder pt2
- kill a buncha vars and replace it with flags
- convert a ton over
- general code improvements
* kill proc_holders pt3
- convert a good few more spells
- rename some signals
- handle statpanel
- better docs
* kiill proc_holder pt4:
- restructure the file system of action.dm, separating a good amount of item actions and miscellaneous garbage into files where they belong slightly better. Also splits off item actions, cooldown actions, innate actions, etc. into their own files, overlal making it much better to work with
- converts touch attacks to actions
- converts blood crawl, jaunt subtype
* kills proc_holder pt5
- clears up some icon issues so all the currently converted pages don't have errors
- shapeshift
- some more action cleanup
* kills proc_holder pt5.5:
- some documentation
- reworks feedback to prevent oversight with teleports and stuff
* kills proc_holder pt6:
- converted cult spells
- converted magic missile
- converted mime spells
- chipped away at the errors
- removed some vars which were too general, replaced them with more locally applicable vars. for example "range" which could mean "projectile range" or "aoe radius" or whatever - instead of having a broad net which everyone applies to in a confusing matter, instead lets each spell delegate on their own.
- merged magic/spell and magic/aoe, as the comment intended
- more unified behavior for spell levelling
* kill proc_holders pt 6.5:
- replacing a buncha old proc_holders that have been updated to reduce some errors. sub 900 baby
* kills proc_holder pt 6.75:
- minor fixes
* kills proc_holder pt7:
- cuts down on some errors
- refactors some wiz events
* kills proc_holder pt 7.5:
- malf ranged modules
- some minor errors
* kills proc_holder pt 7.75:
- mor eminor error handling, cleaning up changes
* kill proc_holder pt8:
- refactors spell book
- refactors spell implant
- some more minor error fixing
* kill proc_holder pt 8.5:
- scan ability
* Adds some robust documentation
* kill proc_holder pt9:
- converts some / most mutations over
* kill proc_holder pt10:
- sort out all the granters
- refactor them slightly
- fix some compile errors
* Some set-unset sanity - going to need to test removing Share()
* Removes transfer actions. It doesn't seem to do anything.
- Transfer_actions was called when current = new_character so locially speaking the early return in Grant() should cause it to NOOP. Test this in the future though
* Removes sharing from actions, docs actions better
* Some better documentation for spell and spell components
* Kills proc_holder pt11:
- Finally finishes ALL THE SPELLS IN THE SPELL FOLDER
- Fixes some more errors
* kills proc_holder pt11.5:
- minor error fixing and sanity
* Method of sharing actions. Can be improved in the future, needs testing
* Implements a way to update the stat panel entry for a spell. Also gets rid of VV stuff, as you can update the bigflags directly in VV now.
* Curse of madness bug I put in.
* kills proc_holder pt12:
- sub 500 errors!
- converts cytology mobs
- converts and refactors spiders slightly
- some minor fixing around the place as usual
* kill proc_holder pt13
- Finishes heretic spells
- Sub 300 errors!
- some touch refactoring to account for mansus grasp
* kills proc_holder pt14:
- revenant
- minor bugfixing for heretic stuff
* kills proc_holder pt14.5:
- some missed stuff for revenant + heretic
* kills proc_holder pt15:
- alien abilities
- more minor fixing
- sub 100 errors. The end is nigh
* kill proc_holder pt16? 17:
- Finishes cult spells
- sub 50 errors!
- refactors the way charge works
- renames / moves some signals
* kills proc_holder pt final:
- sdql spells
- no more errors!
* Bugfixes round 1
* Various bugfixing
- documentation done
- give spell works
- can cast spell gives feedback conditionally
- is available takes into account casting ability
* Some accidental reversions + fixes
* Unit tests
* Completely refactors jaunting
- All bloodcrawling is now handled on the action itself instead of across various living procs
- slaughter demons have their own blood crawls
- jaunting dummies don't have side effects on destroy() anymore
* Wizard spell logging and even more refactoring
Hey there,
Landmarks were in the `TURF_LAYER`... layer, so that means you would see bizarre stuff like this in mapping:
Really obtuse to have everything, and I do mean everything, just be on the same layer of the turf just due to how often stuff gets covered up and left behind. So, I decided to make every single landmark (except for the jobstart ones, which were already on `MOB_LAYER`) to the `OBJ_LAYER` layer. This looks a lot better to my eyes, and the results speak for themselves:
Adds the Active Sonar Module to the game, a module which lets you see the locations of living creatures within a 9 tile radius.
It can be attained by researching Security Modules, and then printed like any other module.
It takes 3 complexity to house, has a 25 second cooldown, and takes a good amount of energy to use.
Re-adds the freeform boards to an open table in all the AI uploads, re-adds the purge boards to the harmful table in all uploads, and removes them from their associated spawners so that all stations have them as roundstart guaranteed spawns.
* New station event: Gravity Generator blackout. Similar to Telecommunications blackout, but it takes Gravity out instead.
* Also adds this functionality to the gravity anomaly, if it isn't neutralized in time, gravity will go out.
* Lastly, added a gravitational anomaly vox sound.
About The Pull Request
Makes smoke propagate the fingerprints of the last person to touch the source of the smoke.
This makes gunpowder smoke actually log the person responsible for the explosions.
Why It's Good For The Game
As of right now gunpowder smoke (and similar) doesn't actually have very good logging as as far as the smoke is concerned it's never been touched and so the resulting explosions are blameless. Obviously, scrolling up for a good minute looking for who has just obliterated the escape shuttle is slightly annoying for the admins. Ergo, making the explosions log who actually is responsible for making the smoke they originate from should reduce admin annoyance.
Changelog
cl
admin: Smoke now logs the last person to touch the source of the smoke as the last person to touch the smoke itself. Gunpowder smoke should be less annoying to log dive as a result as every explosion will log that person.
/cl
* Steam Vent Challenge (Do not meme)
* Fixes icebox, I think
* Changes to how smoke behaves appears to have removed the need for the opacity setting on the vent. Sounds.
* Mapmerge sama please
* Adds signal system, crafting recipe, and some basic crafting organization.
* Potential fix
* Apply suggestions from code review
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
* makes changes thanks anturk
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
* Fuck you (refactors ur tails)
* Errors
* Wow. Pain.
* Fixes up probably everything
* finish up here
* Fixes hard del maybe
* original owner hard del
* garbage collection runtime
* suck my peen byond
* Mapped tails
* motherfucker.
* motherrfucker. again.
* Whooopppppsie
* yeah bad idea
* Turns out external organs literally just sat in nullspace forever if their parent was deleted, and didnt Remove() themselves, causing harddels.
* So anyways I repathed all organs
* Fixes
* really.
* unit test... test
* unit test-test but it passes linters this time because im a moh-ron
* I've lost track of what im doing at this point
* Hopefully fixes hard del?
* meh
* Update code/datums/dna.dm
* things n stuff
* repath from master pull
* Removes smoke and foam reactions
Turns out when you let reagents react in foam/smoke, people put bombs in
them.
This behavior was initially added to just smoke, accidentially in
(56f7ac0c0a) accidentialy (thalpy tried to
make both foam and smoke instant react, but instead made smoke's temporary
holder reagent instant instead. hhhhhhh)
Assuming this was intentional it was then extended to foam in
(1879e2d338)
Basically, we're idiots. Anyway lets just walk this all back to instant
reaction on smoke/foam formation. Hate you people
* Removes another source of gunpowder smoke
Temporal told me about this. Gunpowder uses an ex_act signal as a
starter, and that also counts for smoke objects.
Really don't want instant detonation smoke bombs, so let's just... not
shall we?
You can now open taps on fuel and water tanks, making them leak fuel/water. Leaking fuel will leave fuel trails(credits to Baystation for sprites, sadly I wasn't able to find who made them or the original PR) which can be ignited.
Makes smoke spread through newly opened airlocks if the cloud has spread past the airlock, but has not completely finished spreading.
More intuitive smoke behavior.
As funny as it is to open an airlock and see nothing but a wall of smoke it's even funnier to open an airlock and suddenly be inside a wall of smoke.
Hey there,
Apparently, these have been broken for God-knows-how-long. I decided to fix it today. Apparently, the "snowfloor" icon isn't even in decals.dmi... nor in snow.dmi... it's in _overlays.dmi_. Whatever. Someone should clean that up one day. I don't particularly care enough, I just want it fixed.
* Jetpack and spacedrift: Fixes and niceties
Ok so when I ported spacemovement onto movement loop,
I neglected to port this behavior that existed to support jetpacks.
Basically, if something that lets you move while spacedrifing
completes a move while you're spacedrifting, the
drift should "disable" to let it complete, and then later restart.
I neglected to add support for that, so that's what this does.
There's some other stuff going on here, mostly things to let jetpacks
ignore some of drift's extra behavior, since when a jetpack is not on
stablized, we want both to coexist.
It's a bit of a mess, I'm sorry about that.
Oh and at temporal's suggestion I've moved the visual_delay set from
newtonian move to an istype on the drift component, that was a good
idea, thanks quiet
* Makes dropping a pull while drifting carry the momentum into the pulled thing\
* Adds some extra context to Process_Spacemove, fixes a bunch of stupid
space bugs
It used to be, if you called Process_Spacemove with a direction, it
assumed you were an "action", so a client or mob trying to move in a
direction.
Unfortuantely for it, I needed to be able to use direction to make mob
pull drifting work. So we now actually pass in a second variable
called continuous_move, which tracks if this Process_Spacemove is on
behalf of a continuous move or not
In addition to this, I've added logic to bumping "off" someone to
prevent backbumping if that makes sense, since the bump is in the form
of a newtonian move that's run before the thing that's bumping actually
moves, we need some way to exclude it from holding the other object in
place.
* Adds a jetpack component, uses it to unify all three versions of
jetpacking
I hate you fikou
There were three copies of the same behavior, which made it hard to fix
stuff. Let's just componentize it
* Fixes jetpacks stabalizing even without fuel
This is mildly hacky. The real fix is to do this with events, but I
really don't wanna bend my brain like that. This'll do
* Ensures turn_off always has a user)
* Shut pu
* Bulky drags no longer effect your movespeed in space, fixing a consistency issue between them and all other forms of drags
* Removes some redundant code, cleans up some messy stuff
* Removes redundant safety checking from jetpack code
* see above
* Removes redundant signals
About The Pull Request
This was doing things component really shouldn't be doing, and now all
of its behaviour is contained onto a datum, as it should've been the
whole time
Why It's Good For The CODEBASE
some things just really shouldn't be components, this was made back when DCS was first implemented and just thrown in because it was the new hot thing i guess, but datumized forensics makes far more sense, AND doesn't use GetComponent
TODO:
More thorough testing to make sure nothing broke
Changelog
🆑
refactor: Turned the forensics component into a datum.
/🆑
A new anomaly is here! the Delimber anomaly!
contrary to its name, this anomaly doesn't do you dirty by removing all your limbs.
It will instead improve your body by randomizing your limbs with every species known! Isn't that amazing?!
Incredibly enough it can also change your organs, improving them and expanding them! (we think this is amazing!)
Now you can also harness that power by constructing a reactive armor with its core, but be aware to not get hit by an EM pulse, our insurance doesn't cover that.
A note on safety, this anomaly doesn't stop, will keep on pulsating until eliminated.
Ever been bothered by why titanium glass and plastitanium glass do not drop their own shard types? Well this is the perfect PR for you! Titanium and plastitanium glass shards never existed, and it is probably because the person who made glass way back in the day didn't have time to add these shards. Luckily I decided to add them after all this time. Every piece of code created has been carefully considered and copied form other code, so then you know it is good code. Also I added more tags, I looked at the guidelines and found that adding the fix and qol tags probably boosts my pr score so it will get merged.
Lower the amount of anomalies spawned from the SM delamination
Lower the probability of getting a flux anomaly
Flux anomalies spawned by the SM in this way will have the explosion size reduced by 4
* Alright, so I'm optimizing parallax code so I can justify making it do a
bit more work
To that end, lets make the checks it does each process event based.
There's two. One is for a difference in view, which is an easy fix since
I added a view setter like a year back now.
The second is something planets do when you change your z level.
This gets more complicated, because we're "owned" by a client.
So the only real pattern we can use to hook into the client's mob's
movement is something like connect_loc_behalf.
So, I've made connect_mob_behalf. Fuck you.
This saves a proc call and some redundant logic
* Fixes random parallax stuttering
Ok so this is kinda a weird one but hear me out.
Parallax has this concept of "direction" that some areas use, mostly
the shuttle transit ones. Set when you move into a new area.
So of course it has a setter. If you pass it a direction that it doesn't
already have, it'll start up the movement animation, and disable normal
parallax for a bit to give it some time to get going.
This var is typically set to 0.
The problem is we were setting /area/space's direction to null in
shuttle movement code, because of a forgotten proc arg.
Null is of course different then 0, so this would trigger a halt in
parallax processing.
This causes a lot of strange stutters in parallax, mostly when you're
moving between nearspace and space. It looks really bad, and I'm a bit
suprised none noticed.
I've fixed it, and added a default arg to the setter to prevent this
class of issue in future. Things look a good bit nicer this way
* Adds animation back to parallax
Ok so like, I know this was removed and "none could tell" and whatever,
and in fairness this animation method is a bit crummy.
What we really want to do is eliminate "halts" and "jumps" in the
parallax moveemnt. So it should be smooth.
As it is on live now, this just isn't what happens, you get jumping
between offsets. Looks frankly, horrible. Especially on the station.
Just what I've done won't be enough however, because what we need to do
is match our parallax scroll speed with our current glide speed. I need
to figure out how to do this well, and I have a feeling it will involve
some system of managing glide sources.
Anyway for now the animation looks really nice for ghosts with default
(high) settings, since they share the same delay.
I've done some refactoring to how old animation code worked pre (4b04f9012d). Two major
changes tho.
First, instead of doing all the animate checks each time we loop over a
layer, we only do the layer dependant ones. This saves a good bit of
time.
Second, we animate movement on absolute layers too. They're staying in
the same position, but they still move on the screen, so we do the same
gental leaning. This has a very nice visual effect.
Oh and I cleaned up some of the code slightly.
Have you ever noticed that the chemical smoke and chemical foam reactions are a lot less effective in confined spaces? This is because they currently attempt to spread to all tiles within n steps of their origin. If they can't expand onto a tile they get blocked and the expanding cloud/flood misses out on all the tiles that would be in range, but that can't be reached.
Obviously smoke and foam getting blocked by walls and the like makes intuitive sense, but it seemed a bit nonsensical that walls would basically delete a significant chunk of an expanding, amoebic mass. The solution I came up with is making smoke and foam expand until they cover a certain area, with a shared tracker for the target size and total size of the flood. The flood will simply expand as normal until it covers the desired target area. Blocked expansions just don't count and will be made up for with expansion elsewhere.
Attendant to these changes are a whole bunch of minor code improvement to smoke, foam, and one for wizard spells because I was already in the area and :pain:.
There have been some minor balance changes to the chemical smoke and foam reactions:
I converted them over to passing the desired area of the resulting smoke cloud/foam flood. The old equation for the resulting area was along the lines of 2sqrt(x)(sqrt(x) + 1) + 1 given reaction volume x and given unobstructed expansion. I've made them just pass around 2x instead. This is actually less than they used to try for, but now they're guaranteed to reach that unless the flood is fully contained. Not entirely certain if buff or nerf. Probably buff on the station.
Also, foam dilution is now based on covered area instead of target expansion range. Since this scales faster than it used to foam has been effectively nerfed at high volumes. To compensate for this I removed the jank 6/7 effect multiplier and increased the base reagent scaling a bit. Again, not certain if buff or nerf.
This PR refactors firestacks into two status effects: fire_stacks, which behave like normal firestacks you have right now, and wet_stacks, which are your negative fire stacks right now. This allows for custom fires with custom behaviors and icons to be made.
Some fire related is moved away from species(what the fuck was it even doing there) into these as well.
Oh and I fixed the bug where monkeys on fire had a human fire overlay, why wasn't this fixed already, it's like ancient.
Also changed some related proc names to be snake_case like everything should be.
This allows for custom fire types with custom behaviours, like freezing freon fire or radioactive tritium fire. Removing vars from living and moving them to status effects for modularity is also good.
Nothing to argue about since there's nothing player-facing
* Refactors dizziness into a status effect
* Refactors the dizziness setter to use the new kind
* Drunkness.
- Should drunk continue to work off of a magic value or be swapped to duration? I've not yet decided: For understandability it's preferabale for "drunk" to use a timer (they are drunk for 3 more minutes), but both adding drunk and decreasing drunk currently use weird calculations which would be difficult to carry over.
- Ballmer is a liver trait
* Dizzy was a setter, not an adjuster
* Does all the drunk effects over
- refactors examine text fully
- refactors stabilized blacks because of this
* Removed
* repaths, fixes some issues
* Minor fixes
* Some erroneous changes
* Fixes some dizziness errors
* Consistency thing
* Warning
* Undoes this change, I dont like its implementation
* max_duration
* Max amount
* Should be a negative
* max duration
* drunk doesn't tick on death
* Rework dizziness strength
* Erroneous dizzy change
* Fixes return type
New anomaly, the hallucination anomaly. It has small bursts of hallucinations while alive followed by a big one in the moment of the end.
More anomalies are fun, i'm planning to add more of these
added the hallucination anomaly, spawnrate similar to the flux one, can spawn from the SM if eer are over 5000, can spawn when the SM delams (higher rate than the grav one), you can make the hallucination reactive armor
Removes the old sniper rifle zoom, replaces it with a scope component. the scope activates on right click and lets your camera follow your mouse.
https://streamable.com/2c63u4 (due to byond rounding some shots were weirdly missed in that video, its fixed now)
Also adds sniper marksman ammo to the nukie uplink. It does slightly less damage, but it is hitscan and has one guaranteed ricochet shot, so you can shoot a wall and it could still hit someone.