Commit Graph

1158 Commits

Author SHA1 Message Date
Timberpoes
ec2938c72c Refactors quirk code. (#59618)
Adds new signal - COMSIG_MOB_EQUIPPED_ITEM. Signal sent at the same time COMSIG_ITEM_EQUIPPED is and allows something to Register for every time a mob equips an item. Replaced a process() in /datum/quirk/badback with signals relating to this. Holds a weakref to any backpack it has registered signals with for use in its own remove() proc.

Removes snowflake code in /datum/quirk/light_step - This quirk no longer uses GetComponent to directly modify a component. Instead, the same code has been shifted into the component itself, which now checks for TRAIT_LIGHT_STEP and mods the volume and range accordingly.

Refactors quirk code in general - Quirks no longer do major logic in New() and no longer qdel themselves in New(). You now fully instantiate a quirk assigned to a var, then call /datum/quirk/proc/add_to_holder(). Various scenarios that shouldn't happen now get handled in this proc and calling code can cleanup properly. Quirks "support" having no quirk_holder - Since their default state is no quirk_holder until the quirk is added to a holder, and similarly quirks can be removed from a holder as well. Destroying a quirk with a quirk_holder will remove it from the quirk_holder properly. qdeling a quirk_holder will clean up any quirks attached to them.

Rethinks processing quirks - Quirks no longer all process automatically. The new logic changes mean their previous need to process() just to check if their quirk_holder had been QDELETED so they didn't become runtime factories has been removed by the refactored code. The few quirks that still process require processing_quirk = TRUE which will start them processing when added to a quirk_holder and stop processing on removal. This means there should be some many hundred fewer quirks process()ing 24/7 every shift.

Subtypes item quirks - A number of quirks are designed to give items to the player. There's code duplication and varying implementation issues, so item quirks have their own subtype with a proc and some vars to handle this. Quirks will no longer fail to give items at all (some quirks actually explictly qdel'd the items they give if the user had no free hands or slots) and will drop items on the floor in the worst-case scenario. Players will always get the opportunity to see messages related to item quirks as these are in a code path that, when the quirk is first added to a new mob, will either output immediately if the mob has a client, or wait for the mob to have a client otherwise.

"Roundstart quirks" paradigm removed - Quirks now have a path to add unique effects that aren't replicated if the quirk is transferred from one mob to another - add_unique(). Item spawning and other similar one-shot logic is done here. This means that adding a quirk to a mob will trigger the one-time effects. Transferring it between mobs (for example, slimepeople changing bodies or swapping a golem shell) will not. roundstart_quirks var renamed to just quirks since it genuinely is just a list of quirks the mob has from any source - Whether roundstart, admin or transferred.

Family Heirloom quirk - Heirloom is now a weakref.

Nyctophobia quirk - No longer process()es, now Registers COMSIG_MOVABLE_MOVED. Every footstep in the dark will slow you back to walking.

Reality Dissociation Syndrome quirk - No longer snowflakes behaviour for mindbreaker toxin on process. Now mindbreaker toxin has the anti-hallucination functionality built into its already existing HAS_TRAIT(M, TRAIT_INSANITY) check in on_mob_life.

Tongue Tied quirk - Now uses .getorganslot(ORGAN_SLOT_TONGUE) to find the tongue instead of locate() in internal_organs

Obsessed antag - Thanks to the Family Heirloom quirk now holding a weakref to the heirloom item itself, this antag type will no longer get the steal heirloom objective if the heirloom doesn't exist (ie. the weakref is null or fails to resolve, meaning the item has been destroyed)

Various quirks that were impossible to remove before are now removable - Examples being light step (which no longer directly modifies the footstep component) and bad back.

In addition, adds some extra documentation overall and improves compliance with code requirements in a number of procs (but certainly not all).

Probably various other little changes here and there to make the above all mesh together.
2021-06-13 15:47:15 -03:00
EOBGames
b05af8b31d Add Lizard Food: a Taste of the Homeworld (#59412)
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>
2021-06-12 20:01:44 +01:00
Arkatos1
7e8e36b4bd Fixes slip mood debuff (#59586)
This PR fixes a case where slip mood debuff was not triggering at all due to the simple fact that the mood component was not listening for the mob slip signal, so the relevant on_slip proc was never called and therefore mood debuff was never given.

Fixes #59570
2021-06-10 21:50:41 -03:00
LemonInTheDark
f90e8cf7a3 Fixes a bunch of harddels that are sourced from player action (#59371)
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
2021-06-10 21:44:23 -03:00
TJatPBnJ
31cabe82a5 Moves opening storage items from alt-click to right-click (#59565) 2021-06-10 11:35:36 -07:00
cacogen
9caf154050 Rename component (#59511) 2021-06-08 15:04:35 -07:00
Jonathan Rubenstein
7eaa8645f6 Add component and element templates (#59101)
* Add component and element templates

* Convert compoinent and element templates to markdown files

* Change element example in template to stateless

* Replace element example with gong moving sound
2021-06-08 14:36:42 -07:00
interestingusernam3
997de9b59e Adds two clown-spection scanners that print clowncrypted reports (#59306)
Alright, update the changelog and body of the PR, and comment here when that's done.
This should be ready for merge then.
2021-06-07 16:35:25 -03:00
Watermelon914
f2b39b6803 More circuit components. Restructures the circuit components folder to be more organised. (#59459)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2021-06-04 21:38:30 -07:00
Emmett Gaines
43c5dc8bfa Makes obj_integrity only updated through procs (#59474)
Having things updating integrity directly is just going to cause more problems down the line as more elements and components depend on being notified of integrity changes. It's an easy mistake to make so making it private should deal with the problem.

get_integrity() might be useful in the future but is mainly a side effect of making obj_integrity private as that also disallows reads.
2021-06-04 11:48:05 -03:00
LemonInTheDark
b3d1af2866 Unregistering with a list of lists will fail, but not loudly, which causes some really painful errors. Let's make a stack trace for it, and fix the one case I know of (#59434) 2021-06-02 17:28:55 -07:00
Emmett Gaines
eb6aad9997 Protects against signal race condition (#59432) 2021-06-02 17:27:22 -07:00
Mickyan
ba8b17619b Fixes cigarettes making you so lame that they spill the spaghetti from your pockets (and also keep falling off) (#59352)
Wack

Fixes #59342
Changelog

🆑
fix: Smoking no longer spills spaghetti from your pockets
fix: Lit cigarettes no longer keep falling off
spellcheck: Removed extra "the" from item knockdown messages
/🆑
2021-05-29 12:49:32 +12:00
cacogen
d2ea4be6c8 Fixes human burgers not naming after the meat donor (#59286)
- Adds custom materials to result of grilling
- Adds custom materials to result of atom processing
- Adds source name and job to mob_meat material if available
- Makes processed atoms have same pixel offsets as their source but randomise with each subsequent one
2021-05-27 04:39:17 -07:00
AnturK
8112be6939 Fixes runtimes related to forensic components on deleted things. (#59315) 2021-05-27 04:33:51 -07:00
Emmett Gaines
8918b74bce Fixes an issue in how processing is done for gas leaks (#59322)
Couple issues fixed that were found in testing along side the stationary canister rework. Not sure how I missed this but I should have done thorough testing again after changing the processing list used after I had finished an earlier round of testing.

I don't think it will have any visible effects? Just runtime and hard dels.

How did I miss this
2021-05-26 22:03:14 -07:00
Mickyan
36ffcae081 [READY]Updates knockoff component and adds it to prescription glasses (#59006) 2021-05-26 14:34:17 -07:00
Emmett Gaines
7989178394 Makes canister leaking and blowing up use a component and element respectively (#59075)
I want to use this behavior on some other things so into a component and element it goes. Gas leaking is handled by a component so it can process whereas the object breaking and causing an explosion is handled by an element. Some minor changes were made so canisters were more consistent in leaking.
2021-05-25 16:54:38 -07:00
Watermelon914
b84a9f97b2 Integrated Circuits (Wiremod) (#59232)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: Maurukas <66576896+Maurukas@users.noreply.github.com>
2021-05-25 11:15:36 -07:00
Kylerace
e13fe75590 use SIGNAL_HANDLER REEEEEE (#59242)
makes as many procs as i can find use the SIGNAL_HANDLER define which i assumed they all already did
2021-05-24 15:28:02 -04:00
MrMelbert
b91cad48b2 Fixes being unable to feed chickens to get eggs (#59267)
Fixes being unable to feed chickens for eggs. 
`eggs_left` is always less than `max_eggs_held` 'cause you can't give them food to increase the amount of eggs 'cause `eggs_left` is less than `max_eggs_held` 'cause you can't give them food to increase the amount of eggs 'cause...
2021-05-24 12:29:21 -04:00
Kylerace
237a8a6585 optimizes some internals of signal and component code (#59154)
* optimizes some internals of signal and component code

* comment and a better var name

* gets rid of DF_SIGNAL_ENABLED and all referencing code because its dumb

* gets rid of NONE | CallAsync(stuff)

* fixes conflicts

* puts NONE back in
2021-05-22 23:50:46 -04:00
tralezab
9904e2a244 Refactors both taming + egg laying + animal colors into components (#58919)
Co-authored-by: Floyd <Floydje123@hotmail.com>
2021-05-22 17:55:25 -07:00
tralezab
d9c3239d58 Gives the hop a trapdoor (#59081) 2021-05-22 13:05:38 -07:00
Kylerace
999fa5508d Removes SIGNAL_HANDLER_DOES_SLEEP and makes signals synchronous (#59176) 2021-05-20 23:11:34 -07:00
LemonInTheDark
60d58d2d35 Fixes a bug in signal unregistration code that was causing unrelated objects to lose their registration in a (#59116)
This was causing unrelated objects to lose their registration in a hyper rare case.

The process went something like:
when object foo is registered to something and object bar is registered to the same object with a different
signal it will remove foo's signal only when foo is the only one registered to the object with that signal
Why it's good for the game

This was breaking #58918 when blood wasn't qdel'd post test. I'm so happy I found this.
It's a rare case, so I doubt it'll effect a lot of things, but I can trust UnregisterSignal again, which is very nice.
2021-05-20 22:55:47 +12:00
mGuv
b36e6d6dbc Fix issue where Plumbing Reaction Chambers can get stuck filling (#59131)
About The Pull Request

This Pull Requests aims to fix the issue #58993 by changing two parts of the logic I've seen the chambers get stuck on.

    Chamber gets stuck requesting a unit that is always rounded down to 0
    Chamber gets stuck requesting an insanely small number that gets eaten by float math

Part 1 Explanation
Take the example where a chamber is trying to request one unit of chemical from three synthesizers. A chamber will divide it's request amongst all suppliers who can satisfy it. In this case, 1 / 3 becomes asking each synthesizer for 0.33 (due to rounding). After one update, the chamber has 0.99 of the chemical, not 1. On the second update, it then requires 0.01 of the chemical and asks each chamber for 0.0033, which gets rounded down to 0. This means the chamber NEVER fills as it spends every update cycle doing the same logic and trying to transfer in parts of 0 in size.

This has been fixed by changing it from flat dividing the amount required by the number of suppliers to a more dynamic approach that looks at the target volume and how many requests it needs to make. This mean that instead of asking for 0.33 three times in the above example, it actually works out more to asking for 0.33 then 0.34 then 0.33. Meaning it gets the whole 1 it wanted in the first update, fixing the issue.

Part 2 Explanation
Even with the above fix, when working with the right numbers, floats do not add as expected. Take the above example. I lied. 1/3 as a float is NOT 0.33. 0.33 does not exist as a float, so the actual closest value is 0.32999998, which is what the code will use, even when rounding to 0.01. What this causes is, in some scenarios, chambers getting incredibly close to their target volume but never being able to actually reach it because currentVolume + missingAmount comes out as just currentVolume, due to the insanely small float that it's missing having no impact on the larger float when added together. Again, this is due to how floats work.

So to avoid a chamber getting stuck on 98.9999999998 when it needs 99, I'm adding the CHEMICAL_QUANTISATION_LEVEL constant (used elsewhere for similar issues) to the chamber's volume when checking if it has enough. This way, the chamber will exit the filling mode even though it was short by a tiny fraction. These discrepancies seem to get handled anyway in the actual reaction code so I haven't seen any changes/problems to my outputs. For all intents and purposes, 98.9999999998 is 99 in float arithmetic when rounding as we do.
Why It's Good For The Game

Fixes an incredibly annoying issue that plagues chemistry automation. Machines, in many scenarios, currently get stuck when they shouldn't. This means a chemist has to actively keep monitoring all their machines and then do some investigation when suddenly something stops. Eventually finding the problem chamber that is stuck on "Filling" and then plungering it. Not all Chemists know of this either and just assume it's something they have done or that it's just broken and unaware how to fix it.

Now a Chemist can move on to automating more or helping elsewhere rather than babysitting their setups.
Changelog

cl
fix: fixed issue where plumbing Reaction Chambers get stuck on "Filling"
/cl
2021-05-20 22:46:46 +12:00
Celotajs
190d0a0384 Replace alert usage with tgui_alert (#58419)
Pretty much every alert() call is replaced with tgui_alert, except one I replaced with tgalert as a fallback. If tgui_alert exists, why not use it?
2021-05-20 22:43:27 +12:00
Kylerace
b76a29675c makes LoadComponent() a macro like AddComponent() is so it supports named arguments (#59185) 2021-05-20 02:53:12 -07:00
Greniza
f5c06ca635 changes duct layer of alkaline input in reaction chamber to 4th (#59095) 2021-05-15 01:45:04 -07:00
Mothblocks
bcaaa65e6a Stop singularities from consuming themselves (#58987)
This bug was fixed by one of the connect_loc PRs, but this is still useful as it contains a CRASH for when it happens if this bug comes back again.
2021-05-14 20:12:46 -07:00
LemonInTheDark
8d1c6c9bca Fixes a ci error caused by adding an element to something that'd being deleted (#59108)
So that's why mythril coins kept harddeleting.
Man I'm glad I added an error on adding elements to qdeleted objects.
2021-05-14 18:37:34 -07:00
cacogen
abaa9bdedf Adds deflection messages for no damage attacks against objects (#58873)
* Adds deflection messages for no damage attacks

* Changes the addition to ", which doesn't leave a mark" instead
2021-05-14 17:01:23 -04:00
GoldenAlpharex
4625c656c4 Fixes layering for piggyback rides (#59082) 2021-05-14 16:39:31 -04:00
tralezab
132a755aa3 Componentizes Duffelbag Curse and turns it into an RPGloot modifier (+ curse announcement element) (#59029)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-05-14 01:03:45 -07:00
LemonInTheDark
3f1aab3a94 Fixes some fucked Destroy()s (#58973)
Some stuff was failing to return qdel hints, might as well sweep that upppppp
(Hey mothblocks I know you're reading this, we should really lint for this, but don't push yourself over it I
know you're busy as it is)
2021-05-13 04:20:54 -07:00
tralezab
dc2ebdb410 fixes udders not performing some things (#59025) 2021-05-13 04:19:12 -07:00
Swept
a757971a7e Fixes typo in explodable.dm (#59050) 2021-05-13 04:13:34 -07:00
Paper Kristy
7fe4357b54 Fixes medical borgs on skateboards look weird (#59059)
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
2021-05-13 04:12:50 -07:00
Timberpoes
f36c7fa43f Split malf AI antag datum away from traitor, enable malf AI roundstart ruleset. (#59064)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-05-13 02:39:16 -07:00
Funce
a8976d419e validate THIS integration tests (#59024)
Hi, the #58882 PR missed that validate takes an item, no parent var lookup required.
Why It's Good For The Game

UNFUCKS MASTER
2021-05-11 12:46:07 +12:00
tralezab
332fa0b3d0 fixes master (adds a name to the venomous prefix, fixes bad signal in udders.dm) (#59007)
* Update prefixes.dm

* widening the scope to be fixing master in general
2021-05-09 19:45:12 -07:00
tralezab
ea57e3f960 Kills BOTH /poison paths by turning poisonous into an element. (+fantasty prefix, sanity on attackingtarget signal, and more) (#58882) 2021-05-09 16:49:59 -07:00
tralezab
0823302f30 GOOFUDDERS: YOU CAN MILK ANYTHING (You can only milk cows, goats gutlunches but with componentized goodcode) (#58910)
Co-authored-by: 81Denton <32391752+81Denton@users.noreply.github.com>
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
2021-05-09 16:49:31 -07:00
Jonathan Rubenstein
770148de06 Replace Maint. Drone machinery whitelist with last touched check & other tweaks (#58802)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-05-08 16:12:31 -07:00
tralezab
5171ccd7b3 Add admin tool for adding specific fantasy affixes (#58884)
A new option when using VV on atom movables is to add a custom
fantasy "affixes".
2021-05-07 17:21:58 +01:00
Kylerace
08df8798ce (code bounty) refactors all uses of Crossed() and Uncrossed() into signals sent to loc, tracked by connect_loc (#58340)
Co-authored-by: Jared-Fogle <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
2021-05-07 03:54:03 -07:00
LemonInTheDark
c906c44393 Fixes a fuck ton more harddels (#58779)
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
2021-05-05 10:57:27 -04:00
tralezab
905b9b5a2b Component readme file now links to the Signals, Components, and Elements HackMD page instead of the forum (which links to the hackmd page now anyways) (#58876) 2021-05-05 01:32:26 -04:00
tralezab
fa83a686c4 Add #cargobus and gauntlets (also modernizes ntchat) (#58609)
* cargobus, start of gloves

* basics of the HAUL gauntlets

* fully mapped in

* almost forgot the gauntlets

* ntnet improvements

* cargo gaunts, tablet cargobus

* excludes body bags

* dmis and map back

* readd icons
2021-05-05 05:56:39 +03:00