This is a port of TauCeti's pending fire icons, I really like them, and have been given spritetainer approval to port these.
This PR also changes how fire is handled, or at least, returns the way it used to be handled, while also updating it to use species to choose what kind of fire overlay to use.
* refactor it back to a single organ but with different eye vars
* nOt In A LoOp
* forgot emissive overlay
* remove old obscured var
* quirk
* fine we do it like this, PAIN
* add applying_preference paramter to is_accessible and check for it when applying
* update dummy on quirk change
* client might not exist if we are applying the preference, because unit tests
* unique icon
* lazy webedit review
* revert is_accessible refactor
* mild stupid
* change the way heterochromia is applied
* better handling
* Apply suggestions from code review
* add apply to human behaviour
* hopefully fix that which the merge hooks broke
* Update code/datums/quirks/neutral.dm
* Web commit for shame
* Update code/datums/quirks/neutral.dm
* Update code/datums/quirks/neutral.dm
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* Update basic.dm
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* Removes all supurfolus uses of QDEL_HINT_LETMELIVE
This define exists to allow abstract, sturucturally important things to
opt out of being qdeleted.
It does not exist to be a "Immune to everything" get out of jail free
card.
We have systems for this, and it's not appropriate here.
This change is inherently breaking, because things might be improperly
qdeling these things. Those issues will need to be resolved in future,
as they pop up
* Changes all needless uses of COMSIG_PARENT_PREQDELETED
It exists for things that want to block the qdel. If that's not you,
don't use it
* Adds force and hard del verbs, for chip and break glass cases
respectively
The harddel verb comes with two options before it's run, to let you
tailor it to your level of fucked
* Damn you nova
Adds proper parent returns instead of . = ..()
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
* Ensures immortality talismans cannot delete their human if something goes fuckey. Thanks ath/oro for pointing this out
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
Areas.dmi right now houses all of our mapped turfs icons (which is roughly 400 icons). Not an issue, but it's incredibly large and clunky to navigate right now. This isn't an issue for the average coder and/or player code diving, but it is for mappers wanting to add new turfs. Currently, the file has some organization, but its still an overall mess. This PR aims to slice the behemoth with multiple .dmi files corresponding to specific areas.
I also plan to repath /area/* -> /area/station/* for station turf only. This is to clean it up, as most other turfs follow this format (that being /area/turf_zone/*).
I'm also writing an update paths file as I go along.
* Clown Bomb Clowns and Station clown share a faction, stopping attacks
The clown bomb will spawn a lovely whopping 50 clowns for you to play with. Unfortunately these clowns don't seem to recognize the station clown as a friend! The unknowing station clown tries to blend in with the crowd, but they single them out and beat them into crit. A single tear rolls down the clown's cheek as the others wander away, honking, from the clown's broken frame.
Now, no more!
* Update clown.dm
* Update clown.dm
* Update clown.dm
* Eh
* ehh
* fff
* last change here hopefully
* Fixed Merge conflict
Fixed Merge conflict
* hurrrg forgot a newline at the end
Kapu forgot that luminescents have their own bodypart sprites and make them have the same ones as stargazers in kapulimbs.
Luminescents once again have proper bodyparts
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Apparently this didn't work before, though technically it does the exact same thing, but now it does 100% work
Closes#66627 (Legionnaire Spine Crusher Trophy Doesn't Trigger On Detonation)
I am going to bet that this is evaluating as
if((!rand(1, 100)) <= bonus_value || target.stat == DEAD)
return
-Temporal
(It totally was, fucking feature coders)
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
* makes hud images only apply by z level
* makes some of the atom_hud procs have better names
* fixes warning with the hud_user list and adds better documentation
* better docs for hud_images
* removes TODOs
* docs for hud_list
* adds support for linked z levels so mobs can see lower ones
* fixes merge conflict and shittily makes only shocked airlocks get added
* adds support for setting images in the hud as active and inactive
* gets rid of unatomic spatial grid change
* maybe i should actually try COMPILING my changes
* fixes merge skew and makes it compile again
* fixes huds refusing to remove from users who changed z level
* improves z level and registration logic
* fixes antag huds not appearing
* Fixes antag huds not properly setting. We now use hud_list in init, so it needs to be set before the new call, not after. Not sure why the use of appearance key was split like this, but none else knows either so none can stop me
* Ensures that hiding a basic appearance also hides the atom's active list too
* Fixes antag huds going poof
Ensures that remove_atom_from_hud will return false if the passed atom
isn't managed by it
This fixes antag huds disappearing randomly, since they assumed that if
the parent call of remove_atom_from_hud returned true, we should delete
ourselves. This is a safe assumption for them to make, since they should
only ever have one atom.
Does kinda bork if we call remove_atom_from_hud in a way that is unsure
if the passed atom is actually in that list. We were forced into doing
this by how atom huds use the qdeleting signal.
* makes basic alternate_appearance's only update themselves when setting their hud image to active and makes them not add themselves to the global huds_by_category list
* fixes mistake with hud_users list being set non associatively (bad)
* as anything in bot path loops
* Fixes merge skew problems
* Makes bot paths non global
This way they can show themselves to only the bot that "owns" them, ya
feel me?
* Fixes huds not showing up sometimes, cleans up some code
Post Kapu's limb refactor, we were calling prepare_huds twice in a human
init call chain. What was happening was this:
call prepare_huds() // Human
I gained a new hud image
I set active hud icons to mirror it
call prepare_huds() // Living
I overwrote the new hud image
I attempted to set active hud icons, which failed because it assumes
this can never happen
*cries*
* Renames add_hud_to_atom to show_to
My hope is this will make understanding hud code a bit easier, by tying
the behavior to a "verb" more closely. Also renamed a few vars
* remove_hud_from_mob -> hide_from
* Nitpicks a few comments
* Whoops/fuck/shit/damn it all/hhhhhhhhhhhh
* Moves check down, improves stack trace a bit
Co-authored-by: KylerAce <kylerlumpkin1@gmail.com>
* 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
* Radiation.
Replaces radiation chance with radiation intensity on radiation pulses. Radiation intensity determines the chance of getting irradiated, and diminishes over range or getting blocked by objects.
Getting close to the radioactive source will give you a high chance to get irradiated, while being far but still in range will give you a low chance to get irradiated.
* I suck at spelling.
Balances some atmos related radiation stuff. Changes supermatter radiation stuff, though I would probably need to adjust the threshold to adjust for the new changes.
Calling radiation pulse without intensity parameter filled will now set the intensity to be the value where it will give an object a 5% chance to get irradiated from the max range of the pulse, assuming there are no objects between it that absorb radiation. The same will happen if you call radiation pulse without max range parameter filled.
#65523 made some changes to bodypart names that messed with the grammar of a few messages around the codebase by inserting the species of a bodypart where it's really not needed. For example:
For most general combat/health cases, we don't need to worry about the species of a bodypart. So, this changes combat and wound messages back to simply displaying the relevant bodypart zone being attacked/affected. See below:
dreamseeker_2022-04-10_02-05-55.png
Let me know if I missed any!
Why It's Good For The Game
Better grammar
Changelog
cl Ryll/Shaps
spellcheck: Wound and combat messages will no longer mention the species of an attacked bodypart when not appropriate
/cl
About The Pull Request
Fixes#63868. Actual one liner fix for this one here. If this pr dies feel free to atomize this one.
AND it turns out to not be tim's fault.
Fixes#63548. But i really shouldnt say fixed. The original implementation was causing the invincible plating bug. When tim's refactor got in it instead relies on the element state, which was broken from the get go, removing the invincible plating bug which was in a sense "intended" its all messy man I hate this code. Thats why im removing the plating thing. Let the turf handle the turf change themselves this complicates things.
Mapped in glass floors have openspace (now baseturf bottom) as their baseturfs, while built ones have plating under them. Which doesnt make sense to be honest. Why would things be visible if a plating is under the glass. They are also crowbarrable on top of this, which to be fair is my main reasoning behind the PR.
To solve this, I am instead making glass floors replace the plating instead of building over it. This is made to be generalizable for every tile in game, as long as their initial baseturf is the same and the tile wants it to happen.
do after of three seconds is completely arbitrary. If any maint want it changed let me know.
Why It's Good For The Game
First one solves a bug
Second one makes more sense
And er, icebox is currently using the glass floors in sec, they can be crowbarred very easily. This might be a good idea from a gameplay perspective.
Changelog
cl
del: Removed adding glass floors to plating
balance: Allows you to replace plating with glass floors instead. 3 second timer.
del: Removed deconstructing the glass floors. No replacement for this one, use a rcd.
fix: Fixed metastation glassfloor spawning a weird turf when crowbarred.
/cl
* Life() Optimization Part 1: Organ order
It turns out organ code is really quite dumb. Wastes a lot of time.
I'm going to be doing what I can to optimize it in this branch.
To start with:
If we can ensure organs are sorted according to organ_process_order inside
internal_organs_slot
We can do away with a needless get_organ_slot call in handle_organs, and
avoid needing to iterate over 30 entries, one per possible organ slot,
instead iterating just the ones we have
This saves roughly 5% of life
* Organ Optimization Part 2: base on_life()
Organ on_life, despite not looking it, is a remarkably hot proc. Called
something close to 9 times for each human on the map, it's worth taking
care to clean it up.
As things currently stand, we do two dumb things.
The first is manually checking for organ failure each iteration.
We do this because we allow organ damage to be modified outside of the
applyOrganDamage proc, which also calls check_failing_thresholds.
There's no reason to do this, so I've gone through and removed all
instances of it
The second is calling applyOrganDamage no matter what, to "heal" the
organ. Even if it isn't damaged.
The fix for this is simple, just an if check.
This saves roughly 10% of pre changes Life() cost
* Blood cleanup beta version
Blood code is slightly more sane, but it calls get_part_bleed_rate a
lot, and does other checks that are the same so long as the bleed rate
never changes. This is reasonably expensive
So, I'm going to make it event driven, and cache the bleed rate. But to
do that, I need to be able to react to limb ownership changes, and well,
there's a few that don't use the existing setter. This commit fixes that
* Blood cleanup beta 2.0
I'm starting on the work to make bleed rate cached
Adds NO_BLEED to the signal registration of set_owner
This lets us generically react to it
Makes changing your bleedstacks into a proc we can hook into
Fully implements it
* Blood optimization beta 3.0
Hooks into embedding/embed details updating, this ensures the embed
aspect of bleed rate is properly accounted for
* Blood optimization beta 4.0
Hooks wounds into refresh_bleed_rate, adds a setter for blood flow to
support this
I feel like there are places where this would be useful, but I'm not
totally sure
Kinda wanted to ask ryll
* Blood optimization, the final countdown
Fully caches bleed_rate. Because I can do this, we only need to call update_part_wound_overlay when bleed rate updates
This saves 15%! of human life tick. Get owned
* Optimizes body_temperature_alerts
It turns out that clearing alerts and sending signals every process is
wasteful. There's no reason to do it unless last process was a problem
one
The change for that is quite easy, literally just a new var on human.
Saves 2% of human life tick.
Very nice for the amount of time I put into it
BTW, I have a feeling that most of the overhead of bodytemp is caused by
human body temperature being higher then room temperature. Not sure
what to do about this though
* Does something similar to disgust
Basically, don't continusly send signals if you have no disgust
It's rare enough that this is all the caching we really need to do
Saves roughly 1% of life tick. Right on the edge of not worth it
* Some cleanup to how mob fires handle their lighting, adds a check to liver coder
* Cleans up update_gravity slightly
It's very close to outside a measurable deviation faster, but I honestly
just did it to make it easier to read
* Fuck you
* Very minor organ optimization
Instead of using internal_organs_slot for our organ iteration,
we use it to produce a sorted internal_organs list.
This is barely worth it, ends up being 0.7% of life saved.
I only did it because it makes a semi noticable impact on our current
numbers.
* Revert "Very minor organ optimization"
It turns out mutating internal_organs is important sometimes
The usefulness of this change is small enough that I don't want to spend
more time on it
So back it goes into the dirt
This reverts commit 622bd34adb8d8a3d5f2763ac659446ef3362e3cd.
* Properly returns false in IgniteMob
* Adds a parent call to setBleedStacks
I like it, it's a good idea
Krokodil zombies now look like zombies again.
Transformation now correctly deals damage.
Ensures hair loss on transformation. (Goes with this spirit of skin falling off and it's how the transformation used to work.)
* Adds MC initialization stages. Earlier stages can fire while later ones init.
Removes TICK_LIMIT_MC_INIT config for barely doing anything to speed up init and being inconvenient to work with if fires and inits can happen at the same time.
* FINALLY. I'VE KILLED IT. I CAN LIVE MY LIFE NOW.
I hate the fucking Toggle Research Scanner action button so god damn much. Why the fuck would I ever not want this to be on? Why do you think I'm wearing the fucking goggles? That stupid button is so annoying to use. Even if I'm NOT using the research scanner aspect of the goggles, that little shit floats there, taking up space on my screen, taunting me.
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Setup night vision checks
* Add lighting define for dark tiles
* Change hardcoded lighting value to use define
* Add checks to prevent reading in darkness
* Add reading and writing helper procs
* Add NIGHTVISION_FOV_RANGE define
* Change has_nightvision to use define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION defines
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Remove deprecated code
* Move code around
* Code improvements for status effects in general
* Does this for now
* Throws in a qdeleted check
* A return
* comment tweak
* Missed some ref()s
* Wrong var
* Comment clarifications
* Some more comment clarifications
About The Pull Request
actually makes the damn action button for the flashlight on your device work, as well as fixing clown/silicon/mime names properly showing up
fixes not chunky finger people not being able to use pdas
Why It's Good For The Game
tweaks to make the tablet more user friendly
Changelog
cl
fix: actually makes the flashlight action button work, and fixes silicon/clown/mime names showing up properly on tablets/messenger
/cl
Converts PDA functions and applications over to modular tablets and devices, namely the messaging function. HREF data code is quite honestly clunky and difficult to work with, as I've definitely experienced whilst working on this. By moving from this system over the easier to read (and frankly, easier to add to) TGUI system, you get cleaner looking and more user friendly UIs and a greater degree of standardization amongst other UIs.
Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
* Add NIGHTVISION_FOV_RANGE define
* Change has_nightvision to use define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION defines
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to use NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Change see_in_dark to NIGHTVISION define
* Move has_nightvision() proc location
* Fix spaccing indentation for code comment