Commit Graph

14772 Commits

Author SHA1 Message Date
MrMelbert
c5ba544b3e icon fixes (#61195) 2021-09-05 13:47:38 +02:00
Ghom
38b81ec732 Replaces MATERIAL_NO_EFFECTS with MATERIAL_EFFECTS. (#61166)
* Replaces MATERIAL_NO_EFFECTS with MATERIAL_EFFECTS.

* build warning and codermonky's advice.
2021-09-04 13:35:24 +08:00
tralezab
38000dfa10 partially fixes medical phobia by splitting dice bags off of pillbottles as a subtype (#61015) 2021-09-03 21:21:53 -07:00
GoldenAlpharex
11110c9f43 pAI minor refactor and cyborg PDA code/visual improvements (#61112) 2021-09-03 19:45:43 -07:00
Ghilker
fef3629d11 RPD default pipe color change (#61162)
New default color is green, also grey has been renamed to omni to ease new players without code diving (or changelog reading)
Moved the colors so that green is the first and the omni is the last
2021-09-02 19:32:57 -04:00
ArcaneDefence
6a8139843f Fixes crowbars hitting toilets (#61171)
fixes #61125
It returns an attack chain cancel now
2021-09-02 19:27:21 -04:00
LemonInTheDark
1f5e76a39f [s] Audits object say() uses to make handling text more safe (#61147)
Made all say()s deal with encoding, audited all uses of say() to prevent double encoding or like, manually inserting span(). 
I left some stuff without sanitize that only draws from the code, since it's hell to clean up otherwise. That
and I let admins do whatever the fuck they want
2021-09-02 08:36:36 +01:00
GoblinBackwards
53765ac6fa Fixes some unnecessary attack chain cancels (#61038)
Replaced attack chain cancels on some objects with parent calls
2021-09-01 16:26:05 +01:00
ArcaneDefence
5a07412f8e Adds a stack trace for objs with <=0 integ taking damage (#61079)
Adds a stack_trace to <=0 integ objs taking damage so instances of people relying on this early return prior can be identified
2021-09-01 16:22:44 +01:00
Timberpoes
8fef5536c8 Fix pass-by-ref issue causing ID card access lists to be incorrectly mutated. (#61117)
stored_card.GetAccess() eventually leads to /obj/item/card/id/GetAccess() being called. This proc returns the actual access list associated with the ID card rather than a .Copy() of it.

As a result, the line total_access = stored_card.GetAccess() is storing a reference to the stored_card's actual access list.

total_access |= card_slot2.stored_card.GetAccess() is then mutating the first ID card's access list via the reference.

The result? When /obj/item/computer_hardware/card_slot/GetAccess() is called with 2 ID cards in a modular computer, the second ID card gives all of its accesses to the first ID card thanks to the |= operation.

There are a number of ways around this. Some pieces of code do var/list/thing = list() and then |= every GetAccess() since it's guaranteed to return a list. This creates new lists instead.

However, I feel GetAccess() for ID cards really shouldn't be returning a ref to the list. Instead, it now returns a Copy() of the list and code implementing behaviour using GetAccess() doesn't need to worry about list mutation at all.
2021-09-01 13:05:18 +01:00
Timberpoes
25de7ded2b Fixes being able to spam ghost role notifications. (#61085)
There are methods that let players spam the everloving shit out of ghosts with BONG BONG BONG BONG BONG BONG BONG etc. through being able to constantly poll ghosts for roles with no restriction or cooldown.

Examples are laughter and slaughter demon antag_spawners.

It makes no sense to be able to concurrently poll for the same mob. As a result, I've now added a guard against this. The proc has been given a static list of mobs it's polling for ghost roles for. If it's already polling for ghost roles for a given mob, then it just early returns with an empty list, otherwise it adds the mob to the static list when the poll starts and removes it when the poll ends.

I've also done a little cleanup in var names and the proc name, with a find-and-replace done. There weren't many things calling it and none used named keywords in the args so should be fine.

There is also poll_candidates_for_mobs (also included in my cleanup) - This proc is basically only called by admins via sentience balloons and they have their own guards against spamming (the balloon pops and thus can only be used once)

Also fixes an issue in /mob/living/silicon/robot/proc/replace_banned_cyborg() where incorrect args were used in the proc call to poll for candidates.
2021-09-01 13:01:54 +01:00
Ghom
699563c233 lava and weather immunities refactor (also jump boots fix) (#61003)
In remembrance of all those people who used jump boots to cross lava unaware of an issue c*ders wouldn't fix....

EDIT: This is now a lava and weather immunities refactor:
Weather immunities are now status traits since they have a multitude of sources (especially for lava) which might conflict with one another otherwise.
The lava burn_stuff proc has also been been refactored in different procs, mostly because of that snowdin subtype with inconsistent, old checks.
Weather datums should now use can_weather_act instead of weather_act to check if something can be affected by weather or not, as they should.
All movables can protect contained mobs if they have the relative weather immunity traits. This works at any contents depth.
No more snowflake weather_protection variable for closets.
Removed the weather_immunities list from living mobs (simple animals still have it but it's only for traits assignment on init because way too many child types lack the immunities of their parents).
Removed some unused defines.
Renamed some variables as per guidelines.
It has been tested.
And yea, jump boots fixed because that's the original scope of this PR.

(Initially just made throwing make you fire immune, that was blocked because it breaks perma stuff, instead it ended up be a refactor to make jumpboots usable with weather immumnity stuff
2021-08-31 14:07:19 -07:00
小月猫
62cf2ef21b small refactor to can_interact() so that borg range is fully respected (#60693)
Its a relatively small refactor that changes the previous machinery "can_interact()" proc that literally did a full override despite half of their checks already existing in not one, but TWO parent procs, so i removed the redundant checks, added callbacks to its parents and then added the cyborg range check on the can_interact_with() itself. in doing so i also moved the interaction range var from silicons only, to mobs as a whole and defaulted it to a single tile, silicons override it to 7 (so pAIs and borgs like before) but then set AI and AI.eye to "null", because i have a check in can_interact that if there is no range set, then the range is effectively unlimited. and i even added code for when AI is carded and their wireless transmission is disabled it sets their range to "0" aka, it has no range to do anything even if it could

this was really complicated for me so despite my extensive testing it probably would be a bad thing if any of you want to test my code yourself to ensure there isnt a bug with this (theres no runtimes ive come across)

note: i did a lot of searching and going through machinery to ensure i caught all the little snowflake overrides and added can_interact() checks to them, but i may have missed one or two things, especially maybe a altclick or ctrlclick somewhere, however i believe i caught most of them

one nice side effect of this refactor is that you can actually set another mobs range to something other than 1 tile and they can interact at range, rather than only silicons getting this ability, an admin could VV a human to have a 3 tile arm reach as a meme if they want
2021-08-31 13:59:39 -04:00
ArcaneMusic
66f1841850 Get your protein fix here (for monkey meat). (#60696)
Meat steaks now have the material flag to un-link from from material effects, meaning that monkey meat will now have the proper nutrients and reagents it was intended to, primarily that monkey meat will have protein for cytology purposes.

(Basically, the meat mat was not adding a food component, but then trying to remove "any" food component regardless of a material_no_effects flag. Kinda a mess, and maybe this could be done in an event based way, but this is a real sane fix. The hard part was tracking down the error anyway. Kudos fictional arcane who will read this commit message)
2021-08-30 23:18:53 -07:00
Ghom
87cdc9042e fixes wormhole jaunter portals floating in space. (#61089) 2021-08-30 22:06:14 -07:00
esainane
b32ed19de0 Fix Sparkler typo (#61102) 2021-08-30 21:35:02 -07:00
aaaa1023
f04df890dd fixes misspellings of "aggressive" in a few areas. (#61092)
Fixes the spelling of "aggressive" in a few items, comments and a define.
2021-08-30 20:49:35 +01:00
AMonkeyThatCodes
46cb925af0 Basic Mobs: the cooler simple mobs that run on datum AI. (With reworked cockroach AI as proof of concept) (#60694)
Simple_animals / mobs are the biggest lie in this code-base. They're far from simple and have an extreme god-object problem. Especially when you get to /hostile, where there is so many procs, vars, and what not, that you can't make any interesting additions without snowflaking the hell out of the code.

This PR hopes to help kill this problem by introducing a new /living subtype, /living/basic. The idea of this refactor is to slowly start moving all old simple_animals to this new system, moving over behaviors like charging and more extravagant mobs like megafauna over bit by bit similar to how newfood was implemented.

One of the other big goals of this refactor is to move many of the fringe simple animal behaviors into either AI datums, or components/elements. (Some of which still needs to be done in this PR).

As a proof of concept, I created the base mob/living/basic, and moved cockroaches over to the system. Since cockroaches have both a passive, melee and ranged mob.

This PR does slightly affect balance as the behavior isn't 1-on-1 due to it no longer running on the janky /hostile behavior, but I tried to keep the effects to a minimum, and the glockroach and hauberoach are not spawnable through many means as far as I know.
2021-08-30 16:22:24 +01:00
Y0SH1M4S73R
77aac1a518 Objective-specific equipment will always be given. (#60789) 2021-08-30 00:12:59 -07:00
IndieanaJones
f218de3052 Small Spider Balance Changes and Tarantula QoL (#60505)
* Add Sealed Webs

* Add Sealed Web Icon

* Spider Changes

* Update this dumb var

* Make Broodmothers spawn in the same place

* Remove unused var

* Re-Add Sealed Web Sprite
2021-08-29 13:51:40 -04:00
esainane
d0e8bf35de Many smart pipe fixes (#60981)
* Smart pipes now actually go over smart pipes

This was ostensibly the main feature of smart pipes, so should be
fairly important

Parentheses are technically not required around the |, but I think
it's important to emphasise the importance of parentheses around
bitwise operators as this was apparently broken since 3e8407c471

Also purge var/connections and var/connection_num, since it's
literally only used for a `machine.connection_num < 3` check
which is completely redundant, and we already build a bitfield
tracking active directions.

* Smart pipes bridge over straight pipe types

This improves bridging to now go over most devices where possible,
letting you, for example, bridge over a perpindicular layer adapter.

* Pipe construction: Better documentation

Cleans up smart pipe documentation to match what's actually happening.

No functional changes.

* Skip pipes on different layers earlier

This prevents a pipe being made into a bridge perpindicular to a pipe
on a completely different layer, then failing to turn into a bridge
perpindicular to a relevant pipe.

* Pop superfluous parentheses

* Prevent creation of stub pipes

Setting the RPD to create a smart pipe that can only connect in one
direction would cause it to create invisible pipes that would still
block the placement of other pipes.

* The RPD can now reprogram smart pipes

The RPD can only affect smart pipes in directions that they are not
currently connected to.

This makes it easier to adjust designs after the fact, including
prevening round-start pipes from eagerly linking to a grey layer
adapter.

* Even smarter pipes

No more turning into bridge pipes. We now only try to be smart if
placement would fail, and we do our best to find a solution
whenever there is at least one smart pipe involved, regardless
of whether we're currently placing a smart pipe or not.

We never reconfigure any directions that a smart pipe is currently
connected, and we never reconfigure a smart pipe to have one or less
usable directions.

* Smartly go across perpindicular layer adapters

Also works when we're placing a layer adapter perpindicular to a
promiscuous smart pipe

* Pipes: Factor out loops and some bitfiddling

Create and use helpers with documented purposes over inline bitfiddling,
when it makes sense.

Many loops and switch statements were recreating information that was
already there.

Some relationships between pipe bitfield states were already assumed.
This centralises the functionality that relies upon these assumptions,
places them where the bits are defined, and documents them.

Rewrite some bitwise operations to be more idiomatic.

* Smart pipes: Debugging output

I normally clean history before pushing changes to any project,
but I feel like this should be saved.

* Revert "Smart pipes: Debugging output"

This reverts commit bb3aa76cf6d08e4d0951113a26fc9d48b6bc1735.

* Add trailing comma

The lack of this was making the linter sad
2021-08-29 15:42:53 +03:00
Ghom
73e3afe5d2 bane component to element. nullrod now uses it for revenants. (#60640)
* bane component to element. nullrod uses it for revenants.

* TRUE to FALSE
2021-08-27 11:17:43 +02:00
Rohesie
a7f81bd169 Uses regex datums and macros for text-manipulation (#61042) 2021-08-27 11:13:57 +02:00
Tim
070707fa34 Fix crayon text input (#61002)
The regex expression being used missed some symbols and screwed up spacing.
2021-08-25 21:33:16 -03:00
Colovorat
6e3b74da04 Fixes cable merging, changes merging code just a little bit (#60997)
Makes stack code support merging two different stacks with the same mats, but different mats_per_unit numbers by implementing averages.

It's in an attempt to support the stupid efficiency shit that protolathes do. It's not great, but it ought to work alright for now. Kinda a bandaid
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2021-08-24 15:38:24 -07:00
Fikou
99e20338f3 fixes stun baton switching (#60963) 2021-08-23 14:19:19 -07:00
MrMelbert
b3e8eebdc9 Kills /obj/item/melee/transforming, replaces it with a transforming weapon component (#60761)
This PR kills off the transforming subtype of /obj/item/melee and replaces it with a component to handle the transforming behavior, /datum/component/transforming.

The transforming component handles updating the variables of an item when it's transformed. Things like force, sharpness, whetstone force bonus, and attack verbs. Similar to the two-handed component, but instead of transforming into a two-hander it remains a one handed weapon.

The "nemesis" behavior (dealing addition damage to certain factions) of the transforming subtype was moved to the cleaving saw only, since it was the only transforming item that used it. In the future, this can be made into a bespoke element/component as well.

The following weapons and items have been updated to use this component:

    Energy Swords / Sabers / Bananium Energy Sword
    Energy Circular Saw
    Energy Dagger
    Energy Axe
    Toy Energy Sword
    Holographic Energy Sword
    Switchblade
    Advanced Medical Tools (Laser scalpel, Mechanical Pinches, Searing Tool)
    Advanced Engineering Tools (Hand Drill, Jaws of Life / Syndicate Jaws of Life)
    Combat Wrench
    Cleaving Saw
    Telescopic Batons / Contractor Batons
    Roasting Stick
    Telescopic Riot Shield
    Energy Shield / Bananium Energy Shield

This PR also touches up the code around the various above items.
2021-08-23 11:45:54 -07:00
manofpepsi
610b83831c [MDB IGNORE] beer and ale headsmash fix (#60748)
repaths the beer and ale to allow bottle headsmashing with them.
2021-08-22 17:17:37 -07:00
Arkatos1
c7c82c0649 span fixes (#60936) 2021-08-21 18:31:34 +02:00
BraveMole
af48bdaaef QDEL_IN harddel prevention (#60937)
QDEL_IN could hardel if the timer was greater than 5 minutes (time for the qdel queue)

we can use weakref to prevent this
2021-08-20 14:28:34 -04:00
Timberpoes
9e40310100 Fix item stacks qdeling themselves in Init and some item stack self-merge scenarios. (#60835)
* Feex

* Fix stack self-merging thanks to connect_loc

* Better doc

* Cyborg item stack qdel issue
2021-08-20 07:48:27 +08:00
manofpepsi
c3d5009b19 puts chem mass spectrometer inline with other machines (#60896) 2021-08-18 20:48:16 -07:00
tralezab
226f42ced6 i have moved some bible exorcism functionality to a signal on soulstones (#60768)
moves functionality of exorcising soulstones to soulstones themselves
2021-08-17 23:26:23 -07:00
Watermelon914
ffe2750744 Refactors connect_loc_behalf into a component (#60678)
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)
2021-08-17 12:16:12 -07:00
EOBGames
b08632353c [MDB IGNORE] Eliminates Toxins (#60619)
Repaths everything referring to "toxins" while actually meaning either the room in science or plasma gas. While this PR might be disrespectful to our forefathers, given this is (I believe) a holdover from as far back as the Exadv1 days, this has constantly irked me since I started working with the code. None of the player-facing stuff has referred to plasma as toxin since before 4407 hit, besides the Toxins Lab, and yet all of the type-paths are still pointing at toxins, making it a nightmare to search for in a map editor, and making the code needlessly easy to confuse with that of toxin damage. So this just fires it into the sun.

Anything relating to Toxins, the science subdepartment, now makes reference to Ordnance instead. This felt fitting enough given the focus of the subdepartment is around the creation of and testing of explosives.
Anything relating to plasma gas has, fittingly, been made to refer to plasma gas.

Edit: Ah yes, I feel I should probably apologise off the bat for the size of this PR- the code touched is mostly atmos machinery and simplemobs, a few sprites here and there, and of course the station maps + a few offstation maps.

Makes the code more legible and makes mapping less painful.

(The payment has been made)
2021-08-17 11:49:47 -07:00
Watermelon914
3d1d68d727 Fixes a warning that some guy left in freezer.dm code (#60887)
* Fixes a warning that some guy left in

* Changes

Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2021-08-16 14:23:10 -07:00
GreatKingWombat
9b7950ad9d Fixed the literal one word typo breaking in-hands (#60864) 2021-08-16 00:27:37 -07:00
LemonInTheDark
cd576ab519 Del The World: Unit testing for hard deletes (#59612)
Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com>
2021-08-15 21:09:26 -07:00
Ghom
bcc6e272a1 freezers will now actually protect their contents from explosions once. (#60875)
It's supposed to shield contents from explosions, not only itself.
2021-08-15 17:28:21 -04:00
John Willard
c21562b809 Mindshielding now sends a signal, and is dealt by the antagonist (#60850)
Mindshielding people isn't hardcoded to the mindshield's implanting anymore, instead sending a signal, which I find better in the long run (especially for downstreams).
2021-08-14 23:54:11 -07:00
Colovorat
25c5c088e4 Cyborg emergency reboot module now is no longer dropped if revive is succesful (#60848)
Co-authored-by: Colovorat <lolqwert569@gmail.com>
2021-08-14 23:04:16 -07:00
Ghilker
1548352cf2 Healium crystal changes (#60477)
Healium crystals now straight up fix the air in a room instead of giving an undetermined amount of gas
Area fixed is now a 7x7
Changed the recipe to no longer require freon but O2 instead
2021-08-14 16:01:02 -07:00
Ghilker
bf8a91d30c Crystal foam - crystallizer new recipe (#60535)
Adds crystal foam, a crystal grenade made in the crystallizer from CO2, N2O and H2O. When used it will release a big foamed area that will close any breaches, similar to the smart foam grenade.
2021-08-14 15:47:50 -07:00
Rohesie
54a51acf5c Fixes joining the game with the wrong dir (#60816) 2021-08-14 11:53:38 -07:00
John Willard
a23b22c64d Fixes 2 DNA activator descriptions (#60553)
There was an empty space between name and suffix when there wasn't one, and expended DNA activators wouldnt get the name 'expended' if it didn't work, despite being so.
2021-08-13 16:46:20 -04:00
LemonInTheDark
79dc58fe2a Redoes how alarms are handled, moves their behavior to datums (#60060)
* Adds in a set of datums to support sending, listening and storing alerts
In contrast to the old system, we now store a list of send alerts on the listener, rather then the area itself.

This makes clearing "our" alerts on destroy not a massive headache.

In addition, we now use a direct ref to the area's cameras list and signals to prevent camera hard deletes. This, combined with the aformentioned ability to clear, virtually eliminates hard deletes
sourced from alerts caused by strange senarios like the alert source moving its tile.

* Converts areas to the system, of note is the fact that areas no longer store a bool that determins if an alert
for power or atmos has been sent, that's instead handled by the alert sender datum. This means the sources list
on alert listeners actually means something

additionally, in order to prevent dumbassery with fire alarms since they're area based, fire alerts are sent by
an alert handler on the area itself
2021-08-13 11:54:44 -07:00
Krysonism
b996dc1dff Ethereal food buffs. (#60298)
* charge buffs

* Removes REM
2021-08-13 13:16:38 -04:00
Fikou
80ff565548 Revert "Revert "Barticles for bonfires 2021 (#59869)" (#59916)" (#60469) 2021-08-12 16:12:00 -07:00
Fikou
6807910a8d fixes cannons not working (#60757) 2021-08-11 23:40:42 +02:00
Krysonism
b8b347722d Drugs of the 26th century. Three new hella rad drugs, one less lame drug and more! (#60432)
* 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>
2021-08-09 12:03:36 -04:00