Runtime in stack.dm, 452: Stack merge attempted on qdeleted target stack.
it edits four lines instead of one because I removed them at first, then was too lazy to copypaste it from the code back in, and so hand typed it, and my propensity for adding spaces shone through
Basically makes the code less dumb, took a long time. I worked hard to make sure there were no unintended effects (minus the fact you can no longer get spoons from the experimentor). No player-facing effects
I thought it looked weird that all cultist and combat knives were subtypes of the kitchen knives
Bring _HELPERS/_lists.dm to latest standards by:
-Adding proper documentation and fixing existing one
-Giving vars proper names
-Procs now use snake case as per standard (many files that use those procs will be affected)
bring code up to latest standards, move many procs to named files inside _HELPERS
no idea where to put some of these procs, help is appreciated
made more files to contain some unique code, deleted unsorted.dm, we can rest now
## About The Pull Request
stop forgetting to include mapload, if you don't include it then every single subtype past it by default doesn't include it
for example, `obj/item` didn't include mapload so every single item by default didn't fill in mapload

## Regex used:
procs without args, not even regex
`/Initialize()`
procs with args
`\/Initialize\((?!mapload)((.)*\w)?`
cleanup of things i didn't want to mapload:
`\/datum\/(.)*\/Initialize\(mapload`
- This PR fixes a few botany plants mutating into themselves due to seeds inheriting the mutation list from its parent. Durathread, Jupiter Cups, Fairy Grass, Red Onions, Bamboo, Green Grapes, and World Peas (maybe some others I forgot).
- This PR also unit tests to ensure plants don't mutate into themselves.
- This PR also converts mutatelist into a proper lazylist. IT was already kinda a lazy list, in that it's null by default, but for some reason it was treated as a normal list in multiple places.
original pr here: #59789 (Closed because he didn't think it was good enough)
came back to this because i realized that
all machines were area sensitive, meaning they had a list with at least a reference to themselves (assuming they arent in the contents of another movable which most arent) for the purposes of handling power differences when their area changes
pipes are machines
there are ~14k machines and ~6k pipes
i made this problem worse with a recent pr by making it a nested list
so i needed to track what machines needed power, and this pr had work already done that could be used for that purpose. now machines that have use_power == NO_POWER_USE do not have this extra memory overhead for no reason
currently every machine that uses power draws that amount from its area from a dynamic channel via auto_use_power() which is called every SSmachines fire(), then in apc/process() the area's dynamic power draw is reset and the power is used. with static power its not calculated then reset every loop, its just taken from the grid. so now machines handle updating their static power usage from their current area (this doesnt touch power machines that require a wire connection). in order to allow this, use_power, idle_power_usage, and active_power_usage have setters to track state correctly and update the static power usage on the machines current area and handle area sensitivity.
also goes through a lot of heavy abusers of SSmachine processing time and tries to make it faster. makes airalarm/process() into a signal handler for COMSIG_TURF_EXPOSE since air alarms only need to process for changes.
Why It's Good For The Game
SSmachines isnt the heaviest hitter in terms of total cpu and certainly not in terms of overtime, but its not a lightweight. it frequently takes > 50ms to complete a run and seems to be in the top 5 or so of subsystem costs looking at some round profilers
also gets rid of a few thousand lists since every pipe no longer has two useless lists each (and any other machines that dont use power)
Love ya kyler
Co-authored-by: Rohesie <rohesie@gmail.com>
See title. Also refactors caltrops into a component because they use connect_loc_behalf which requires them to hold the state.
This also fixes COMPONENT_DUPE_SELECTIVE from just outright not working.
connect_loc_behalf doesn't make sense as an element because it tries to hold states. There is also no way to maintain current behaviour and not have the states that it needs.
Due to the fact that it tries to hold states, it means the code itself is a lot more buggy because it's a lot harder to successfully manage these states without runtimes or bugs.
On metastation, there is only 2519 connect_loc_behalf components at roundstart. MrStonedOne has told me that datums take up this much space:
image
If we do the (oversimplified) math, there are only ever 5 variables that'll likely be changed on most connect_loc_behalf components at runtime:
connections,
tracked,
signal_atom,
parent,
signal_procs
This means that on metastation at roundstart, we take up this amount: (24 + 16 * 5) * 2519 = 261.97600 kilobytes
This is not really significant and the benefits of moving this to a component greatly outweighs the memory cost.
(Basically the memory cost is outweighed by the maint cost of tracking down issues with the thing. It's too buggy to be viable longterm basically)
* lead stuff
* kronkus + loot table
* one drug sprite
* kroncaine
* drug items
* addiction stuff
* makes this compile
* plane master controllers
* small adjustments
* bro its a comment CHILL OUT
* temp
* desc and sprite update
* temp
* hmm
* invisible1
* invisible2
* fixes
* It compiles
* misc drug fixes
* signal
* synthesis
* fix
* span macros
* kroncaine filter removal + no speedup on cuffs n narsie rune
* makes the ampoule visible.
* hud-b-gone
* revert
* reverts more
* sound enviroment
* on_transfer & animated fade
* adrenal crisis + unknown
* blastoff signal
* blastoff adjustments
* filters
* small fixes
* animation parallel
* Taste, sounds and feel
* span proc
* final touches
* review and integration fix
* less blood, more fun
* moth and blood fix
* KronKaine and bLaSToFF spelling fix
* Assorted bLaSToFF fixes and range change
* suggestions from head head head coder
Co-authored-by: floyd <Floydje123@Hotmail.com>
I was told earlier today that some flowers decomposed, which I had no idea about. Turns out some flowers are technically food! I couldn't add it to the mapload PR because I wasn't home at the time, so I'll have to make this small PR instead.
Please make sure this PR has that one tag that makes it so I can't get GBP for it, thanks.
If someone wants to make the place look pretty with flowers I'd prefer not to hinder that with insects.
Furthermore, it made no sense for some flowers to decompose, but for others not to.
This PR moves the investigate_log subject of Kudzu being planted in a tray to investigate_botany instead of its own log file.
All the other kudzu logging is in investigate_botany so this one was the odd one out. Consistency for logging.
Cleans up some of the spans on the plant analyzer from the mass span conversion PR. Find and replace did not do wonders for the plant analyzer formatting (which is probably partially my fault).
Also adjusts some visible_message formatting and some text formatting of the plant analyzer.
This PR neatens up deathnettle and nova flower after_plant_attack procs a bit, mainly making so you must attack an object or a mob in order to lose durability. I also cleaned up some of the procs and argument types so they're consistent.
This PR resprites the pumpkin, blumpkin and the carved pumpkin hat.
It also adds a blumpkin variety of the carved pumpkin.
To avoid duplicate code, blumpkins and now children of pumpkins, this means some pumpkin recipes will also accept blumpkins.
Adds cannabis reagent and replaces space drugs with it in cannabis products
Adds space drugs to rainbow weed, which fits its theme and might satisfy the people who miss the effect
Removes lipolicide from cannabis products in favour of the reagent consuming nutrition directly
Cannabis reagent gives you messages describing symptoms of cannabis intoxication, makes you laugh, makes you hungry, has a chance to couchlock you buckled to a chair and put you to sleep lying down
Cannabis no longer references hallucinating, can't be overdosed and has no addiction
Adds Stoned status effect, which is applied by cannabis reagent
Stoned status effect slows you down, gives you bloodshot eyes, makes you clumsy, boosts your mood and gives you the drugged sound environment
Adds "stoned" icon state for Stoned status effect screen alert (sprite shamelessly stolen from the Smoke spell)
Adds BLOODSHOT_EYES trait, which is applied by Stoned status effect
Adds examine eye descriptions for bloodshot eyes and player-chosen red eyes
Adds cannabis movespeed modifier, which is applied by the Stoned status effect
Adds Stoned mood event, which is applied by Stoned status effect and gives the same mood boost as High but doesn't reference tripping
Simply puts species IDs into defines ("lizard" turns into #define SPECIES_LIZARD "lizard"). This does not affect any gameplay, and is purely for making sure future code doesn't go all fucked up because someone accidentally misspells something
I only changed code that was spelt correctly, so if there actually is a typo somewhere, it isn't changed
* Makes turfs persist signals
* Splits connect_loc up into two elements, one for stuff that wishes to connect on behalf of something, and one for stuff that just wants to connect normally. Connecting on behalf of someone has a significant amount of overhead, so let's do this to keep things clear
* Converts all uses of connect_loc over to the new patterns
* Adds some comments, actually makes turfs persist signals
* There's no need to detach connect loc anymore, since all it does is unregister signals. Unregisters a signal from formorly decal'd turfs, and makes the changeturf signal persistance stuff actually work
* bro fuck documentation
* Changes from a var to a proc, prevents admemems and idiots
* Extra detail on why we do the copy post qdel
Converts most spans into span procs. Mostly used regex for this and sorted out any compile time errors afterwards so there could be some bugs.
Was initially going to do defines, but ninja said to make it into a proc, and if there's any overhead, they can easily be changed to defines.
Makes it easier to control the formatting and prevents typos when creating spans as it'll runtime if you misspell instead of silently failing.
Reduces the code you need to write when writing spans, as you don't need to close the span as that's automatically handled by the proc.
(Note from Lemon: This should be converted to defines once we update the minimum version to 514. Didn't do it now because byond pain and such)
* Auto doc'd much of grown botany food and plant traits and renamed a buncha variables and parameters to match modern contribution guidelines.
* Cleaned up a good bit of plant gene code left over from the prior refactor and modernized some of it.
All plant effects that were once unique to a plant are now un-graftable, un-mutatable, un-shearable plant traits - called IMMUTABLE traits.
The ultimate goal of this PR was to make all of the hidden, arcane traits that are spread through botany's various plants and add a way to figure out they exist in game. Take omega-weed, for example, which has a maximum volume of 420 units.
What does this mean for the enterprising botanist?
In most cases, all the plants should act the same way. None of the immutable traits are graftable from any of the plants, they cannot be sheared off of the plant, and they cannot be mutated randomly from strange seeds or high instability mutations.
Though, in refactoring these traits, two things have been fixed: Novaflower's on hit and Deathnettle's on hit now proc again. If you aren't aware, Novaflowers apply firestacks and Deathnettles paralyze on hit. They've been in an unreachable code segment for a few years now and i'm not sure if they should be "fixed" or not, since I think they don't need any buffs.
A few other things have changed:
* Liquid Contents can no longer be applied to plants with Hypodermic Prickles, and visa-versa. They already didn't work together, but this means you need to go through an extra step to make LC-deathnettles.
* Killer Tomatos no longer have liquid contents. Didn't really make sense, anyways.
The aims of this commit are threefold:
- To introduce lizard culture (based upon Common Core) in a tangible way.
- Give some more variety of techniques and recipes to the chef and bartender.
- To give some flavour (metaphorically and literally).
🆑 Inept, Coiax, AdipemDragon, YakumoChen
add: The release of the new cookbook, "Tiziran Cooking: a Taste of the Homeworld" has brought Lizard food to the masses! Try out some new treats, like Moonfish, Nectar Larvae, and perhaps even Headcheese at the kitchen today!
add: To coincide with the new popularity of Lizard cuisine, Nanotrasen now stocks seeds for Korta Nuts, a common ingredient in lizard cooking, in the Megaseed vendors. Botanists, you know what to do.
add: A few Tiziran fish are also available for you aquaculture lovers out there. They all like saltwater!
add: A few new snacks are also now available at the station's snack vendors, for those of you too lazy to visit the kitchen.
/🆑
Co-authored-by: coiax <yellowbounder@gmail.com>
Sourced from #59118 and a cursed project I'll pr later, This pr contains a lot of harddel fixes for stuff that pops up after a player interacts with something. I'm not gonna list them all here because there's something like 60 130, check the commit log if you're curious
Oh and I moved ref tracking screaming to a separate define, and made some optimizations to the thing in general. I think that's it, this pr is a bit of a frankenstine
About The Pull Request
This PR gives botany plants a new formula for getting the size of their bites.
The formula is (potency / 20) * (max_volume / 100) * (modifier) + 1.
This brings your average 100 potency plant to a bite size of 6 units per bite. [(5 * 1 * 1) + 1] - For reference, a Tomato has 14 units of reagents with default genes at 100 potency, so this means a tomato is eaten in 3 bites.
This PR also goes through and audits all the plant's bite modifiers to bring them in line with the new formula. This makes the bite modifier actually a bite modifier instead of some weird constant var that lies about what it actually does.
Fixes#55527
Why It's Good For The Game
Currently, all plants are eaten in a single bite. Including watermelons and the dank weeds. This is bad.
image
This PR brings them all in line so you no longer swallow watermelons whole, so you stop accidentally getting fat.
I also audited all the plants so their relative bitesizes make sense with the new formula. Only apples and potatos are eaten in 1 bite. Plants with more reagents naturally should now have larger bitesizes, and plants with less reagents have smaller bitesizes. Balance is restored.
Changelog
🆑 Melbert
fix: You no longer eat all botany plants plants in 1 bite. Apples and Potatos retain their unique 1 bite behavior.
code: Botany plants use a new formula for calculating bite size. All botany plants have had their bite modifier adjusted to match.
/🆑
Redoes how geese handle eating shit, it was fucking stupid and caused harddels, and while this method is technically slower in the best case, it's a fucking goose
Fixes action related harddels, I hate how they work but at least this way they won't hold refs.
Fixes the hierophont causing its beacon to harddel
Removes the M variable from megafauna actions, it was used like a typed owner and caused harddels, so I burned it
Fixes target and targets_from harddels, replaces all setters of target with LoseTarget and GiveTarget, which should help maintain behavior. I'm not sure if this breaks anything, but if it does we should fix the assumptions that code makes instead of reverting this change
Fixes more area_senstive_contents related harddels, we need to allow the mob to move before clearing out its list.
Fixes marked object harddels (I'm coming for you admin team)
Fixes a language based human harddel
Fixes managed overlay related harddels (This was just emissive blockers, but I think this is a good safety net to have. If we clear the overlay list we should clear this one as well)
Fixes bot core harddels, I hate the fact that this exists but it has no reason to know who its owner is
Adds a walk(src, 0) to simple_animal destroy, it's the best bang for the buck in terms of stopping spurious harddels. Walk related harddels aren't that expensive in the first place, since byond does the same thing I'm doing here, but this makes finding mob harddels easier, so let's go with it
I fixed another source of part harddels, I hate fullupgrade so much
Fixes all the sound loop harddels
Everything that called turf.assume_air and turf.remove_air was already updating turfs, and all that not tying
the two together did was add more boiler plate, and break things when people forgot about it.
This shouldn't add any overhead outside of hotspots, but I think that's trivial