Commit Graph

1513 Commits

Author SHA1 Message Date
MrMelbert 24b4109f1c MULEbots uses the blood walking element (now component), fixes MULEs tracking blood infinitely (#68047)
Blood walking is a component, MULES use blood walking
2022-06-28 22:51:51 -04:00
13spacemen b864589522 Examine Blocks (#67937)
* adds examine_block class and a define for it
made some outputs in chat use examine_block

* add examine block to tip of the round
clean up some ------ and ***** seperators
added <hr> tags to divide sections
cleaned up botany plant analyzer text outputs

* bullet points for reagents

* removes <hr> from mobs examines
fixes AIs and borgs having a double "That's Default Cyborg!"
removed some \n newlines
minor code edits

* removes all <hr>
bold names in get_examine_name()
cleaned up plant analyzer output formatting
adjust colors and margins of examine_block class
remove \a from borg examine()

* remove max-width from css

* changed margin and padding units from px to em

* minor edit
2022-06-26 20:48:44 -04:00
Kylerace 8f0df7816b (code bounty) The tram is now unstoppably powerful. it cannot be stopped, it cannot be slowed, it cannot be reasoned with. YOU HAVE NO IDEA HOW READY YOU ARE (#66657)
ever see the tram take 10 milliseconds per movement to move 2100 objects? now you have
https://user-images.githubusercontent.com/15794172/166198184-8bab93bd-f584-4269-9ed1-6aee746f8f3c.mp4
About The Pull Request

fixes #66887

done for the code bounty posted by @MMMiracles to optimize the tram so that it can be sped up. the tram is now twice as fast, firing every tick instead of every 2 ticks. and is now around 10x cheaper to move. also adds support for multiz trams, as in trams that span multiple z levels.

the tram on master takes around 10-15 milliseconds per movement with nothing on it other than its starting contents. why is this? because the tram is the canary in the coal mines when it comes to movement code, which is normally expensive as fuck. the tram does way more work than it needs to, and even finds new ways to slow the game down. I'll walk you through a few of the dumber things the tram currently does and how i fixed them.

    the tram, at absolute minimum, has to move 55 separate industrial_lift platforms once per movement. this means that the tram has to unregister its entered/exited signals 55 times when "the tram" as a singular object is only entering 5 new turfs and exiting 5 old turfs every movement, this means that each of the 55 platforms calculates their own destination turfs and checks their contents every movement. The biggest single optimization in this pr was that I made the tram into a single 5x11 multitile object and made it only do entering/exiting checks on the 5 new and 5 old turfs in each movement.
    way too many of the default tram contents are expensive to move for something that has to move a lot. fun fact, did you know that the walls on the tram have opacity? do you know what opacity does for movables? it makes them recalculate static lighting every time they move. did you know that the tram, this entire time, was taking JUST as much time spamming SSlighting updates as it was spending time in SStramprocess? well it is! now it doesnt do that, the walls are transparent. also, every window and every grille on the tram had the atmos_sensitive element applied to them which then added connect_loc to them, causing them to update signals every movement. that is also dumb and i got rid of that with snowflake overrides. Now we must take care to not add things that sneakily register to Moved() or the moved signal to the roundstart tram, because that is dumb, and the relative utility of simulating objects that should normally shatter due to heat and conduct heat from the atmosphere is far less than the cost of moving them, for this one object.
    all tram contents physically Entered() and Exited() their destination and old turfs every movement, even though because they are on a tram they literally do not interact with the turf, the tram does. also, any objects that use connect_loc or connect_loc behalf that are on the same point on the tram also interact with each other because of this. now all contents of the tram act as if theyre being abstract_move()'d to their destination so that (almost) nothing thats in the destination turf or the exit turf can react to the event of "something laying on the tram is moving over you". the rare things that DO need to know what is physically entering or exiting their turf regardless of whether theyre interacting with the ground can register to the abstract entered and exited signals which are now always sent.
    many of the things hooked into Moved(), whether it be overrides of Moved() itself, or handlers for the moved signal, add up to a LOT of processing time. especially for humans. now ive gotten rid of a lot of it, mostly for the tram but also for normal movement. i made footsteps (a significant portion of human movement cost) not do any work if the human themselves didnt do the movement. i optimized has_gravity() a fair amount, and then realized that since everything on the tram isnt changing momentum, i didnt actually need to check gravity for the purposes of drifting (newtonian_move() was taking a significant portion of the cost of movement at some points along the development process). so now it simply doesnt call newtonian_move() for movements that dont represent a change in momentum (by default all movements do).

also i put effort into 1. better organizing tram/lift code so that most of it is inside of a dedicated modules folder instead of scattered around 5 generic folders and 2. moved a lot of behavior from lift platforms themselves into their lift_master_datum since ideally the platforms would just handle moving themselves, while any behavior involving the entire lift such as "move to destination" and "blow up" would be handled by the lift_master_datum.

also
https://user-images.githubusercontent.com/15794172/166220129-ff2ea344-442f-4e3e-94f0-ec58ab438563.mp4
multiz tram (this just adds the capability to map it like this, no tram does this)
Actual Performance Differences

to benchmark this, i added a world.Profile(PROFILER_START) and world.Profile(PROFILER_START) to the tram moving, so that it generates a profiler output of all tram movement without any unrelated procs being recorded (except for world.Profile() overhead). this made it a lot easier to quantify what was slowing down both the tram and movement in general. and i did 3 types of tests on both master and my branch.

also i should note that i sped up the "master" tram test to move once per tick as well, simply because the normal movement speed seems unbearably slow now. so all recorded videos are done at twice the speed of the real tram on master. this doesnt affect the main thing i was trying to measure: cost for each movement.

the first test was the base tram, containing only my player mob and the movables starting on the tram roundstart. on master, this takes around 13 milliseconds or so on my computer (which is pretty close to what it takes on the servers), on this branch, it takes between 0.9-1.3 milliseconds.

ALSO in these benchmarks youll see that tram/proc/travel() will vary significantly between the master and optimized branches. this is 100% because there are 55 times more platforms moving on master compared to the master branch, and thus 55x more calls to this proc. every test was recorded with the exact same amount of distance moved

here are the master and optimized benchmark text files:
master
master base tram.txt
https://user-images.githubusercontent.com/15794172/166210149-f118683d-6f6d-4dfb-b9e4-14f17b26aad8.mp4
also this shows the increased SSlighting usage resulting from the tram on master spamming updates, which doesnt happen on the optimized branch

optimized
optimization base tram.txt
https://user-images.githubusercontent.com/15794172/166206280-cd849aaa-ed3b-4e2f-b741-b8a5726091a9.mp4

the second test is meant to benchmark the best case scaling cost of moving objects, where nothing extra is registered to movement besides the bare minimum stuff on the /atom/movable level. Each of the open tiles of the tram had 1 bluespace rped filled with parts dumped onto it, to the point that the tram in total was moving 2100 objects. the vast majority of these objects did nothing special in movement so they serve as a good base case. only slightly off due to the rped's registering to movement.

on master, this test takes over 100 milliseconds per movement
master 2000 obj's.txt
https://user-images.githubusercontent.com/15794172/166210560-f4de620d-7dc6-4dbd-8b61-4a48149af707.mp4

when optimized, about 10 milliseconds per movement
https://user-images.githubusercontent.com/15794172/166208654-bc10086b-bbfc-49fa-9987-d7558109cc1d.mp4
optimization 2000 obj's.txt

the third test is 300 humans spawned onto the tram, meant to test all the shit added on to movement cost for humans/carbons. in retrospect this test is actually way too biased in favor of my optimizations since the humans are all in only 3 tiles, so all 100 humans on a tile are reacting to the other 99 humans movements, which wouldnt be as bad if they were distributed across 20 tiles like in the second test. so dont read into this one too hard.

on master, this test takes 200 milliseconds
master 300 catgirls.txt

when optimized, this takes about 13-14 milliseconds.
optimization 300 catgirls on ram ranch.txt
Why It's Good For The Game

the tram is literally 10x cheaper to move. and the code is better organized.
currently on master the tram is as fast as running speed, meaning it has no real relative utility compared to just running the tracks (except for the added safety of not having to risk being ran over by the tram). now the tram of which we have an entire map based around can be used to its full potential.

also, has some fixes to things on the tram reacting to movement. for example on master if you are standing on a tram tile that contains a banana and the TRAM moves, you will slip if the banana was in that spot before you (not if you were there first however). this is because the banana has no concept of relative movement, you and it are in the same reference frame but the banana, which failed highschool physics, believes you to have moved onto it and thus subjected you to the humiliation of an unjust slipping. now since tram contents that dont register to abstract entered/exited cannot know about other tram contents on the same tile during a movement, this cannot happen.

also, you no longer make footstep sounds when the tram moves you over a floor
TODO

mainly opened it now so i can create a stopping point and attend to my other now staling prs, we're at a state of functionality far enough to start testmerging it anyways.

add a better way for admins to be notified of the tram overloading the server if someone purposefully stuffs it with as much shit as they can, and for admins to clear said shit.
automatically slow down the tram if SStramprocess takes over like, 10 milliseconds complete. the tram still cant really check tick and yield without introducing logic holes, so making sure it doesnt take half of the tick every tick is important
go over my code to catch dumb shit i forgot about, there always is for these kinds of refactors because im very messy
remove the area based forced_gravity optimization its not worth figuring out why it doesnt work
fix the inevitable merge conflict with master lol
create an icon for the tram_tunnel area type i made so that objects on the tram dont have to enter and exit areas twice in a cross-station traversal

    add an easy way to vv tram lethality for mobs/things being hit by it. its an easy target in another thing i already wanted to do: a reinforced concept of shared variables from any particular tram platform and the entire tram itself. admins should be able to slow down the tram by vv'ing one platform and have it apply to the entire tram for example.

Changelog

cl
balance: the tram is now twice as fast, pray it doesnt get any faster (it cant without raising world fps)
performance: the tram is now about 10 times cheaper to move for the server
add: mappers can now create trams with multiple z levels
code: industrial_lift's now have more of their behavior pertaining to "the entire lift" being handled by their lift_master_datum as opposed to belonging to a random platform on the lift.
/cl
2022-06-24 13:42:09 +12:00
MrMelbert 325915e459 Converts diggable from component to bespoke element (#67695)
* Changes diggable to an element and fixes it, saving on some memory.
2022-06-19 11:25:37 -04:00
MrMelbert 42266c38e8 Cursed Dufflebag is now less picky + no longer permanently applies you with pacifism even after being removed + causes less wounding (#67687)
Cursed Duffelbag is less picky, now. Instead of snowflaking for only burnt food, it will take any item with /toxin reagents within it.
	/badfood (in burnt recipes) are considered toxins, so it still works.
The damage from the duffelbag now has a wounding penalty.
	A negative penalty to wounding, but no penalty to bare wounding.
If the attached mob is dead, it now deals significantly less damage, and doesn't heal the dufflebag.
The dufflebag now uses visible messages to convey it's eating to people nearby, instead of just to_chats.
Fixes the cursed duffelbag cursing the mob to gain pacifism and clumsiness permanently.
	dropdel causes items to be qdeleted before the drop signal is sent so it never uncursed the mob.

Why It's Good For The Game

Cursed Duffelbag is less picky now.

Burnt food is surprisingly a little less common now-a-days, due to food changes / decomposition / etc.
This led to it being much easier to literally acid the dufflebag off instead of engage with it's mechanic, which is pretty lame.

By allowing any toxin type to be used, it greatly opens up more options to get it removed.

The damage from the duffelbag now has a wounding penalty.

Dufflebag's damage had no wounding modifier, meaning it was surefire guaranteed to break your ribs, which was incredibly debilitating.

Now, it can still break your ribs if you have very little chest protection, but it's much much less likely if you're wearing equipment.

If the attached mob is dead, it now deals significantly less damage.

Makes it a bit easier to treat people who are afflicted with a dufflebag. Reviving people with a cursed dufflebag would constantly result in them being damaged greatly beyond the defib threshold. Just annoying.

The dufflebag now uses visible messages to convey it's eating to people nearby, instead of just to_chats.

Mostly QoL. Some people would be confused why someone's being damaged from seemingly nowhere.

Fixes the cursed duffelbag cursing the mob to gain pacifism and clumsiness permanently.

Bugfeex. Sue me.
2022-06-18 17:49:03 -07:00
AnturK fddb6ea124 Fishing, Version 1 (#67691)
Adds fishing and fishing minigame.
You use fishing rod to fish.
Equipping specific bait/hook/reels will affect your success chances.
You can fish out fish,items and other things.

Fishing Equipment
Fishing rods have three slots: Bait, Reel and Hook.
Any food can be used as bait but dedicated bait makes fishing easier.
You can buy hook and line sets
New bait types:

Worms : Buy can of them at cargo (alternative acquirement method pending)
Doughballs : Use knife on flat piece of dough to get five of them.
Fishing rod types:

Basic : Print these at the lathe, nothing fancy here.
Tech: Experimental tech. Provides infinite bait
Fishing rods can also hook and reel normal items.

Equipment screen and reeling video
Fishing spots
Keep in mind this PR is meant to add the basic systems and i intend to fill these with more fish in future PR's so wait with suggestions until then.

Lavaland lava (no fish here right now, just other stuff), requires reinforced line to fish in.
Maintenance moisture traps.
Beach away mission water.
Fishing portal available for purchase from cargo - This is stopgap until we fill more spots.
Difficulty depends on fishing spot, fish type, and the fish traits and rod setup combinations.
All fish types can have specific traits, most common ones being favourite and disliked bait types/categories.

Other
Fishing catalog now lists fishing related info
New admin debug verb, fishing calculator that show probabilities with different setups so it's easier to balance this.
Fish now have average weight and size. Make sure to boast if you catch a big one.
Adds tgui mouse passthrough
Screens
Sprites:

Fishing portal sprite by @ArcaneMusic
Other sprites by @Mey-Ha-Zah
Bad ones by me. (Could still use better fishing minigame backgrounds)
Sounds:

https://freesound.org/people/soundscalpel.com/sounds/110393/
https://freesound.org/people/soundslikewillem/sounds/343748/
2022-06-16 22:36:10 +01:00
MrMelbert b438cc0039 Fixes Knockdown signal being incorrect, making knock-off items (and others) trigger when they should again. Also cleans up the knockoff component and unit tests it. (#67720)
At some point, someone did a find and replace over this file, and completely screwed up the signal for Knockdown().

This caused components that relied on it, like the Knockoff component, to work way less often.

This PR fixes that.
It also goes through and cleans up the Knockoff component. More consistent style guide stuff, minor improvements, better documentation.

It also unit tests it.
2022-06-16 16:39:15 +01:00
Timberpoes a26927fabf Fixes slips being broken and adds a unit test to catch it happening again. (#67741) 2022-06-13 21:41:43 -07:00
Fikou 5be8bde77f floating movement type now stops slips (#67694)
* float movement type now stops slips

* weh
2022-06-12 12:47:51 -04:00
John Willard 9f5e3118bb Makes ore silo connecting work on multi-z (#67640)
* makes ore silo connecting work on multi-z

* I merged the two checks for same z level when connecting an ore silo, and disconnecting it. This was because I didn't want to copy paste the code to use it twice, which was what now caused the problem of multi-z maps being unable to connect ore silos on the same level. At the time it was also intentional since it's easier to connect than to disconnect something, but I realize that this inconsistency isn't great or beneficial to anyone.

* Turns it into a helper instead
2022-06-11 21:12:34 -04:00
LemonInTheDark e15e0f3e91 Lemon does weather effects (#67469)
* Lemon does weather effects

Ok so I don't like how weather effects look when they run up against
some sort of border, particularly walls and darkness.
They just sorta snap out of existence. This is cause they were recently
moved from the AREA_PLANE to the ABOVE_LIGHTING_PLANE. This fixed things
like snow or ash storms looking dim, but had some annoying side effects.

I'm gonna do my best to mesh the two, at least somewhat.
I've done two things. The first is letting weather choose to apply a
second icon state to its area, one that draws above lighting, and moving
the current overlay down to AREA_PLANE again.

Oh and the above lighting stuff gets made a bit see through, so it's not
too intense.

This way darkness doesn't totally mask effects, it just makes them
harder to see.

I've gone through the existing effects for this process. I basically
just removed the "background" from any effects that had it. This way you
see the particles at a reduced intensity, but not the "shadow" that the
effect applies.

Oh also can't use glow with lava, cause it draws onto the floor, or
under walls.

In the process of this I realized that snow looks really bad right now.
It's really jerky, has a very clear wrap point, and doesn't even
complete a full animation. So I redid it, added some more flakes and
made it "faster"

I also tweaked non smoothed lava (IE: floor is lava and the wizard ship)
It was scrolling a pixel a tick, but in steps of 3 ticks. Looked bad, I
think the smoothing is better.

I'm not really a spriter or anything, this stuff just cheesed me off a
bit

* whoops
2022-06-10 09:38:38 -04:00
MrMelbert 3c8b666b35 Refactors Gunlight / Helmetlight to be a component (#67517)
Atomized from the proc holder PR

    Refactors gunlight / helmet light to be a component.
        They just copy+pasted code between each other and it was really annoying. I was working on fixes for the proc holder PR and noticed this (had to make the same fix for two things).
    Moved Mind Monkey Helmet to its own file
    Balloon alerts for seclite attachment / removal

One may be able to genericize this even further and put the bayonet behavior on this as well. Future idea.
Why It's Good For The Game

Cleaner, less copy pasted code.
Changelog

cl Melbert
refactor: Gunlight / Helmetlight behavior is now a component.
qol: Gunlight / Helmetlight now uses balloon alerts.
/cl
2022-06-10 16:34:24 +12:00
robbertapir 4393879777 Prevents negative mats (#67582)
* Prevents negative mats from the ore redemption machine.

Co-authored-by: robbertapir <robbertapir@airmail.cc>
2022-06-08 10:11:17 -04:00
BeeSting12 cd54482972 Fixes grammar error in embed code (#67589)
Fixes grammar error
2022-06-07 19:33:27 -04:00
Tastyfish 3f3d337d7b Massive plumbing layer/placement improvements (#66602)
* Massive duct improvements

* last minute fixes/additions to plumbing layer fixes

* letter, loop, and early return fixes

* early continues

* color comments

* reaction chamber colors

* rcd tweaks

* Update code/datums/components/plumbing/reaction_chamber.dm

* Update code/datums/components/plumbing/reaction_chamber.dm

* Update code/datums/components/plumbing/_plumbing.dm

* Update code/datums/components/plumbing/_plumbing.dm

* remove unused var, better duct restacking

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2022-06-07 19:30:18 -04:00
John Willard 1fcb7fec67 Material holding machines can't connect to ore silos on different z levels (#66953)
The station's ore silo can't connect to machines that are off the station z-level anymore. This doesn't affect multi-z stations.
Also includes ore silo code improvement because I was unhappy with it.
2022-06-07 11:24:38 -07:00
Jolly 2da4f98da5 Ports the Flower Garland from JollyStation (#67468)
* pick 12 flowers and regret your decisions

* Update code/modules/clothing/head/garlands.dm

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>

* Update code/modules/clothing/head/garlands.dm

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>

* Update code/modules/clothing/head/garlands.dm

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>

* Update code/modules/clothing/head/garlands.dm

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>

* grammar

* sanity mood event

* willards review

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
2022-06-05 23:40:24 -04:00
MrMelbert 1ffab33745 Minor buffs for Heretic focuses / equipment and the Void Cloak. (#67263)
* Heretic focus changes, turns it into an Element
* Buffs Void cloak, letting it hold more and hold more kinds of items
* Makes eldritch potions small sized (before: normal)
* Adds more explanations to some descriptions.
2022-06-02 00:46:09 -04:00
Ryll Ryll 771eadacc9 Fixes pellet cloud wounding where I just broke it (#67424)
I was stupid in #67331 (9431c92f70) and forgot an initial() around an un-instantiated projectile var call. This puts it in so wounding checks don't runtime. I have actually tested that this works

Pellet clouds work properly
2022-06-01 20:04:28 -07:00
MrMelbert b7eace2fad Adds Cargorilla (#67003)
* Adds cargorilla

* working cargorilla

* Tweaks to control + jobs and stuff

* Sleep

* Probably don't leave in debug

* el sanity

* el change them to use globals, el refactor

* Does this fix it?

* Ah, okay

* el copypaste

* el mapload vars

* ready to ship
2022-06-01 19:41:46 -04:00
ArcaneMusic c24ff68629 Adds steam vents to maintenance, adds some flavor to maintenance. (#66915)
* 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>
2022-06-01 23:07:50 +02:00
Kapu1178 6d470992cb This tail refactor turned into an organ refactor. Funny how that works. (#67017)
* 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
2022-05-30 21:18:34 -07:00
Ryll Ryll 9431c92f70 Caps projectile armor at 90%, armor now applies to pellet cloud wounding (#67331) 2022-05-30 13:45:15 -07:00
Urumasi 10c698abba Add new H.E.C.K. suit GAGS sprite, recolorable via spray can (#67217)
imageadd: The H.E.C.K. suit has a new sprite. (by Meyhazah)
add: You can now use a spray can to completely recolor the H.E.C.K. suit.
2022-05-30 15:36:20 -04:00
MrMelbert e17f2c6d68 Fixes Nullwave Vibrato triggering a chaplain's own antimagic. Also genericizes musical sect code slightly. (#67266)
Goes through and genericizes sect music effects slightly. As it stood pretty much all of them were copy+pastes of one another, with some minor changes, so making them one unified thing is cleaner.
2022-05-29 19:33:50 -07:00
Ryll Ryll 6d3095b5c8 Continues removing unnecessary species names of bodyparts in visible messages (#67254)
* removes some more unnecessary species mentions from bodypart messages
2022-05-27 10:09:27 -04:00
Mooshimi 6680675447 lattice is walkable on chasm (#67294) 2022-05-26 12:56:00 -04:00
magatsuchi f98d965a5d fixes small zparallax bug (#67244)
fixes an issue where if you attempted to regain control of your initial body after possessing another body it caused a stack trace due to MOB_LOGIN signal not being unregistered

(This was tsu's fault, introduced in a9d8be4d16)
2022-05-25 04:24:33 -07:00
Jolly cfc2330528 [MDB IGNORE] More /area/ typepath organization and cleanup (#67107)
This further continues what I did in b4fb8f3ed1 (but instead of just stations, its now every (most) applicable area in the game
2022-05-23 13:01:19 -06:00
Iamgoofball 6a08c3b626 Silver slime food is now toxic(causes disgust when eaten), as it's not real food. (#67181)
Silver slime food is now toxic, as it's not real food.
2022-05-23 04:04:59 -04:00
san7890 77b8bab481 Makes Cultist Summoning Nar'Sie An Important Announcement (#67143)
Hey there,

I first noticed this about three months, but I was pretty pleased about it since I was a cultist. I decided that today I should

Fix #Issue

It just makes it an important message, so that it will indeed reveal the location that the cult is summoned, and won't be muffled by that good-for-nothing potato-chip-eating centcom intern.
2022-05-21 10:33:02 -04:00
Ghilker 47215b4de0 fixes sm shards dusting when wrenching (#67155) 2022-05-21 10:29:05 -04:00
Mothblocks e9d0498432 Adds Puzzgrid smite to trap enemy gamers in a fiendishly hard puzzle (#66855)
* Puzzgrids
2022-05-21 10:31:55 +02:00
Tim 20e4add487 Change healing by sleeping to be affected by sanity, darkness (or blindfold), and earmuffs. (#65713)
About The Pull Request

Depending on the mob's sanity level, it can have a positive or negative boost to healing effects while sleeping. Sleeping in darkness, wearing a blindfold, and using earmuffs also counts as a healing bonus. Beauty sleep is very important for 2D spessmen.
Why It's Good For The Game

This is a small gameplay change that rewards players for keeping their sanity at good levels. Also depression has also been linked with impeding wound healing in real life. The placebo effect on peoples minds is strenuously documented and I think it would be cool to see it in the game.
Changelog

cl
expansion: Healing by sleeping is now affected by sanity, sleeping in darkness (or using a blindfold), and using earmuffs. The healing from sleeping in a bed was slightly decreased.
/cl
2022-05-20 21:12:02 +12:00
LemonInTheDark 7e9ff85f2a [NO GBP] Jetpack and spacedrift: Fixes and niceties (#66628)
* 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
2022-05-20 00:54:00 -07:00
ike709 8dbdff492d OpenDream Cleanup Pass (#67036)
OpenDream can detect BYONDisms that BYOND or SpacemanDMM miss. This PR fixes all of the issues it found in TG. Each change is explained in code comments below.
2022-05-18 02:29:51 -04:00
Seth Scherer a3add37618 Refactors the forensics component into a datum (#66809)
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.
/🆑
2022-05-16 16:33:59 +12:00
Ryll Ryll e8f2441630 Minor twohanded component refactor (#66791)
The two handed component, while useful, has quite a bit of bloat that gets replicated whenever a new class of 2h items is added.

This PR cuts that bloat by replacing the use ofCOMSIG_TWOHANDED_WIELD and COMSIG_TWOHANDED_UNWIELD as ersatz callbacks with actual callbacks, the replacement of various var/wielded defs on items with a check for HAS_TRAIT(src, TRAIT_WIELDED), and the removal of any now-unnecessary on_wield()/on_unwield() procs that simply toggled those wielded vars
2022-05-10 20:09:23 -04:00
MrMelbert e63d556d83 Confusion status effect is now duration based instead of magic number based (#66801)
Refactors the confusion status effect. Removes "confusion strength" and replaces it with duration, which is measured in seconds.
This also allows them to use the adjust_timed_status_effect procs instead of their own.

Fun fact! 2 years ago when confusion was refactored into status effects, all confusion effects in the game were halved in duration. They were changed to status effects, which tick every 1 second by default, from life, which tick every 2 seconds by default, without any values changing.
2022-05-09 18:59:33 -07:00
Seth Scherer 3f094d417d Refactors cyborg drink refilling into a component (#66795)
Turned the cyborg drink refilling feature into a componebt to clean up
the code since it was pretty snowflakey. Also, organizes robot item code
and fixes some bugs that existed with said code (i.e. child drink
holding aparatuses were getting a beaker + their specific glass type
inside of contents)
2022-05-09 09:24:07 -07:00
Ghilker c8f27896c0 Supermatter cascade round-end (#66659)
This PR adds the resonance cascade to the SM (idea ported from vg but with total rewrite)

The resonance cascade will turn reality into crystals that devours and destroy everything.
It can be triggered by delaminating the SM when is in contact with hypernoblium and antinoblium, both at over 40% and with as many moles to trigger a singulo delamination. The cascade can't be triggered if the SM is already under 80% integrity and if at any point any of the gases gets under 40% or the total gets lower than the amount for singulo, it will stop the cascade and can't be retriggered unless you reset the SM to over 80% integrity.
2022-05-08 10:27:49 -07:00
Ebb-Real e5909ce738 Bandana GAGS follow-up (#66605)
A lot of bugs came to my attention with bandana dyeing after #65760 was merged. This should cover all of them.

fixes #65947, by making you unable to dye bandanas while they are adjusted. You also can't dye bandanas that have skulls or stripes on them since that causes all sorts of problems with GAGS and switching from multiple layer to only 1 and same thing reversed.

When you dyed a bandana and then adjusted it into a neckerchief and back it would reset its name to what it was originally before being dyed. This was because it used the initial proc. I fiddled around with trying to catch the dyed name in a var but it would get way too complex and unnecessary so I came up with the idea to just make a visual change instead of name change, by making the bandana slightly wider like a neckerchief would be when adjusted.
2022-05-08 10:24:44 -07:00
Fikou a6ae1fb78a removes permeability, rolling it into bio armor (#66742)
refactors our disease code a tiny bit
removes permeability_coefficient variable from clothing, it decided how much stuff like chems or disease passed through your clothes, while BIO armor only decided how much you could spread diseases yourself, making it pretty much laughable
permeability_coefficient is now fully rolled into bio armor, so your bio protecting stuff will now protect you from other biological hazards like blobs
2022-05-08 10:10:54 -07:00
LemonInTheDark 98f32035d8 Parallax but better: Smooth movement cleanup (#66567)
* 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.
2022-05-07 14:59:41 -07:00
TemporalOroboros 068a3be859 Makes smoke and foam attempt to fill the available space. (#65281)
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.
2022-05-07 13:10:37 -07:00
cacogen 7d9a14affa Deadchat control alerts ghosts when they can input another command (#66621)
Makes it so deadchat control alerts ghosts when they can input another command. Also rounds the seconds values in the to_chat messages for deadchat control up, so they don't have a decimal point.

You don't have to keep trying to input something to see if the cooldown has expired yet. Removing the decimal point looks cleaner.
2022-05-06 18:04:06 -07:00
LemonInTheDark 0504c0a2b4 Improper forced qdel cleanup, some expanded del all verbs (#66595)
* 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>
2022-05-06 17:52:45 -07:00
Fikou af4d3be9ef fixes shy component's whitelist accidentally being a blacklist (#66665)
its a list where we continued if the person was NOT in the whitelist, it continued to the next, so it broke if there was a drone nearby, instead of breaking when there was a human enarby or whatever

fixes #66577 (Station Drones aren't allowed to interact while near another Station Drone)
2022-05-06 00:35:42 -07:00
magatsuchi a9d8be4d16 adds new z-level trait to disable parallax (#66637)
* first push woohoo

* more stuff

* Update code/datums/components/z_parallax.dm

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* mothblockification

* fuck

* fuck 2

* uh

* uh yeah style stuff ig

* more changes

* last changes

* fuck

* fuck 2

* i hate potatopotato

* i hate potato * 2

* a

* god

* woops

* Update code/modules/mapping/space_management/traits.dm

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>

* Update code/modules/mapping/space_management/traits.dm

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>

* Update code/modules/mapping/space_management/traits.dm

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2022-05-05 23:02:42 -07:00
SmArtKar 442ef897bc Refactors firestacks into status effects (#66573)
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
2022-05-04 23:52:07 -07:00