* A few minor tape recorder fixes (#55881)
Tape recorder cassette can no longer be rewound with a pen if it is not unwound.
Tape recorder transcript should look like it has text written on it!
Tape recorder can now play full tapes.
* A few minor tape recorder fixes
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Refactor on_mob_death, death implants, implant permission (#55862)
* Refactor on_mob_death and death implants
There is a proc on `/obj/item` called `on_mob_death` called on all
items in the contents of a mob on that mob's death. It is currently used
for explosive implant detonation, and the deactivation of the
Peaceborg's projectile dampener.
Instead of using this old proc, both of them now instad use the
COMSIG_LIVING_DEATH signal, already emitted when their owner dies.
The activation of an explosive implant will now occur after the rest of
the death code has run, since it activates with an async applied
function, since some other implants may still want the mob's body
intact, and you shouldn't use `sleep()` (which it does in the "slow
explosion mode") in signal handlers.
In addition, the "can_be_implanted" proc for /mob/living (and overriden
for silicons, slimes and simple animals) has been folded into the
`/obj/item/implant/proc/can_be_implanted_to` proc. Some future implants
may want to be more permissive than the current permissions, but that
isn't possible when checking both procs.
* Refactor on_mob_death, death implants, implant permission
Co-authored-by: coiax <yellowbounder@gmail.com>
* Fixes borg tiles (#55858)
- Fixes greyscale material floor tiles created from cyborg stacks
- Makes cyborg stacks contain materials
- Prevents a potential bug involving metalgen and stacks
* Fixes borg tiles
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* Tweaks how some tongues have no taste (#55811)
Skeletons, abductors and ethereals have no sense of taste. Previously
they would taste something "indescribable", but instead, they will not
taste anything or get any message. This also means they will no longer
get mood buffs from eating/drinking high quality food.
Carbons without tongues also can no longer taste anything.
- The utility item "taster" has had some additional messages added.
* Remove can_taste proc
Instead of a single proc that is only used, so carbons can override it
with the missing tongue, just have carbons unable to taste anything by
default, and then have the tongue "supress" that.
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* Tweaks how some tongues have no taste
Co-authored-by: coiax <yellowbounder@gmail.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* Scroll tweaks (#55609)
This PR makes a few changes regarding scrolls of teleportation.
Scrolls of teleportation no longer use outdated HTML based interface and will take you straight into a list of a possible destinations upon use. That interface had a very little point of existing in the first place, the only possibly useful information was number of remaining uses, which is solved by a point below.
Scrolls of teleportation now show a number of remaining uses upon examination and also give proper feedback messages upon teleportation.
Scrolls of teleportation now crumble to dust when out of uses. They are a consumable item and cannot be recharged, which made them utterly useless when out of uses, creating only clutter.
* Scroll of teleportation tweaks
Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com>
* Merge pull request #55798 from spessbro/please-assume-the-position
Integrates vibebots with the pda
* Integrates vibebots with the pda
Co-authored-by: 81Denton <32391752+81Denton@users.noreply.github.com>
* The Great Radio Rework: NTNET Part 1 of many.
* Update airlock.dm
Co-authored-by: WarlockD <warlockd@gmail.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Refactors how movetypes are added and removed, No timers this time. (#55444)
* Refactors how movetypes are added and removed, No timers this time.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Fix grammar of smashing sheets of glass (#55737)
The message was missing the indefinite article, meaning you would "leave
shard", rather than "leaving a shard".
* Fix grammar of smashing sheets of glass
Co-authored-by: coiax <yellowbounder@gmail.com>
* fixes atmos water tanks showing up as purple sometimes, they have their icon state changed sometimes, but never manually set the wear_icon_state, so it'd try and show a nonexistant sprite. (#55705)
* Fixes atmos water tanks showing up as purple sometimes
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* adds new wiz spell: duffelbag curse (#55286)
it gives target a no drop duffelbag which every around 100s will try check if there is food inside else it attacks you, you can poison the food to make it die faster.
more variety for wiz to annoy crew that isnt murder bone
* adds new wiz spell: duffelbag curse
Co-authored-by: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com>
* WireArt: Fixed and improved (#55622)
Cyborg's pipe cleaner is now using a radial menu for choosing it's colors instead of a clumsy input one.
RCL now properly updates it's pipe cleaner holder's color, so you can actually see the color when using RCL radial menu.
RCL is now able to put cables down on floors seamlessly, as there is no reason to restrict it to just a plating and catwalks anymore due to the fact that pipe cleaner coils no longer function as a power carriers, but are merely visual entities for players to play with.
And lastly, pipe cleaners now use color defines and are setting its color directly instead of having redundant variable do it for them, which was needlessly complicating it.
* WireArt: Fixed and improved
Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com>
* Base construction console refactor (#55451)
Refactors base construction consoles to be generic instead of only being meant for building the aux shuttle. The current aux base construction console behaves the exact same.
This PR is A step towards minichem, as I'll be using base construction code in it pretty heavily. More information about the whole minichem thing in this design doc
In terms of player-facing changes, this PR has made possible a neat admin-only base construction console that can be used to construct things anywhere on the z level.
Why It's Good For The Game
The current base construction console code was snowflakey and didn't follow particularly great coding practices. This fixes that and provides a solid foundation for future work.
* orange's chemical romance Pt. 1: Base construction console refactor
Co-authored-by: Emmanuel S <mrdoomboyo@gmail.com>
* Fixing a very old issue about lizard snouts and hoods, fake mustaches and similars. (#55574)
Fixing a little visual issue with certain hoods, fake mustaches and similars making lizard snouts magically disappear when worn.
* Fixing a very old issue about lizard snouts and hoods, fake mustaches and similars.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Refactors Beams to use signals: Revived from 2019 edition! BONUS: Medbeams are also refactored to use signals (#55193)
Huge removal of dead vars, bad timers, and other sloppy jitteriness from beams. They go from checking movement to waiting for a signal.
VARIABLE KILL LIST:
sleep_time: signals baby
finished: signals BAYBEEE
target_oldloc: not only not typecasted as a turf or named as a turf, it was unused. when are we going to use this? the beam starts from the origin!
origin_oldloc: bad name, not typecasted. renamed to originturf
static_beam: how are you an unused variable and still get replaced by signals like really
timing_id: signallllss bbbaaaabbyy
recalculating: you get the drill by now signals baby
base_icon: unused, seemingly replaced by visuals I think
* Refactors Beams to use signals: Revived from 2019 edition! BONUS: Medbeams are also refactored to use signals
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
* Adds festive sugar cookie designs for holiday. (#55480)
Adds six new cookie icons which are picked at random for sugar cookies made during the Festive Season holiday event.
* Adds festive sugar cookie designs for holiday.
Co-authored-by: Josh <josh@jaw.sh>
* Whetstone comments and code readability improvements (#55522)
Adds comments to sharpener.dm. Replaces all 1's and 0's in boolean value assignments with TRUE and FALSE.
* Whetstone comments and code readability improvements
Co-authored-by: interestingusernam3 <51925758+interestingusernam3@users.noreply.github.com>
* Adaptive Paint now uses a radial menu for choosing its color variants (#55307)
* Adaptive Paint now uses a radial menu
* Documentation lint fix
* Adaptive Paint now uses a radial menu for choosing its color variants
Co-authored-by: Arkatos1 <43862960+Arkatos1@users.noreply.github.com>
* Fixes cleaving saw + whetstone interaction (#55520)
You can't use whetstones on most one-handed transforming weapons (anything in /obj/item/melee/transforming/energy), but there is one type of transforming weapon that can use it, the cleaving saw. However, since transforming weapons reset their force whenever activated/deactivated, and force is how whetstones track if something has been sharpened already, you could repeatedly enable/disable the saw to allow it to be sharpened again and again, allowing you to continually boost the wound_bonus each time (and also make the name really long). While the very limited number of whetstones in the game means this isn't a practical exploit, it's still worth fixing. This also lets the saw keep its sharpened damage bonus between reactivations.
* Fixes cleaving saw + whetstone interaction
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* [READY] Kitchen Rework part 1: I just want to griddle! (#55319)
This PR essentialy moves away from the extremely microwave dependent cooking we have for meat right now, and making it a bit more sensical by making you use a grill to grill meat. The grill takes a different time (with variation) for different grilled things. Once finished it will turn that food into something else.
Yes, this does mean creating burgers takes longer, but in return you can make more patties at once, and you are not required to stay at the grill while its going. This lets you cook as much as you want at once, just make sure your meat doesn't burn!
In the future, I hope to move more things like this to machines similar to this (Pasta boiling, putting eggs on the griddle, soup making, etcetera) to create for a more interesting cooking experience.
* [READY] Kitchen Rework part 1: I just want to griddle!
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
* [READY] Creates Datumized AI and applies it to monkeys (#55238)
New AI system, implemented for monkeys.
* [READY] Creates Datumized AI and applies it to monkeys
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
* You can sacrifice souls to toolboxes (#55306)
So, now that it's December, this PR makes it so you can use a soulstone with a shade in it on a mechanical toolbox to sacrifice the shade to give the toolbox back its SOUL (it goes back to the old sprite)
* You can sacrifice souls to toolboxes
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* Adds in the admin outfit. (#55374)
So i was told to make this if i wanted to get an outfit that actually could work on things like radiation. I also gave it a box full of stabilized extracts because those give quite good effects like more speed and regeneration.
* Adds in the admin outfit.
Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
* Replace direct poi_list manipulation with element (#55416)
Replaces GLOB.poi_list |= src and GLOB.poi_list -= src with an element that handles it directly.
More consistent code, especially when a lot of code couldn't decide how to add/remove (some |=, some -=, some .Remove, etc).
* Replace direct poi_list manipulation with element
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* pass_flags handling refactor + rewrites a part of projectiles for the n-th time (#54924)
Yeah uhh this'll probably need testmerging even after it's done because yeah it's a bit big.
If y'all want me to atomize this into two PRs (pass flags vs projectiles) tell me please. Pass flags would have to go in first though, in that case, as new projectile hit handling will rely on pass_flags_self.
Pass flags:
Pass flags handling now uses an atom variable named pass_flags_self.
If any of these match a pass_flag on a thing trying to pass through, it's allowed through by default.
This makes overriding CanAllowThrough unnecessary for the majority of things. I've however not removed overrides for very.. weird cases, like plastic flaps which uses a prob(60) for letting PASSGLASS things through for god knows why.
LETPASSTHROW is now on pass_flags_self
Projectiles:
Not finalized yet, need to do something to make the system I have in mind have less unneeded overhead + snowflake
Basically, for piercing/phasing/otherwise projectiles that go through things instead of hitting the first dense object, I have them use pass_flags flags for two new variables, projectile_phasing and projectile_piercing. Anything with pass_flags_self in the former gets phased through entirely. Anything in the latter gets hit, and the projectile then goes through. on_hit will also register a piercing hit vs a normal hit (so things like missiles can only explode on a normal hit or otherwise, instead of exploding multiple times. Not needed as missiles qdel(src) right now but it's nice to have for the future).
I still need to decide what to do for hit handling proper, as Bump() is still preferred due to it not being as high-overhead as something like scanning on Moved(). I'm thinking I'll make Moved() only scan for cases where it needs to hit a non-dense object - a prone human the user clicked on, anything special like that. Don't know the exact specifics yet, which is why this is still WIP.
Projectiles now use check_pierce() to determine if it goes through something and hits it, doesn't hit it, or doesn't go through something at all (should delete self after hitting). Will likely make an on_pierce proc to be called post-piercing something so you can have !fun! things like projectiles that go down in damage after piercing something. This will likely deprecate the process_hit proc, or at least make it less awful.
scan_for_hit() is now used to attempt to hit something and will return whether the projectile got deleted or not. It will delete the projectile if the projectile does hit something and fails to pierce through it.
scan_moved_turf() (WIP) will be used for handling moving onto a turf.
permutated has been renamed to impacted. Ricocheting projectiles get it reset, allowing projectiles to pierce and potentially hit something again if it goes back around.
A new unit test has been added checking for projectiles with movement type of PHASING. This is because PHASING completely causes projectiles to break down as projectiles mainly sense collisions through Bump. The small boost in performance from using PHASING instead of having all pass flags active/overriding check_pierce is in my opinion not worth the extra snowflake in scan_moved_turf() I'd have to do to deal with having to check for hits manually rather than Bump()ing things.
Movement types
UNSTOPPABLE renamed to PHASING to better describe what it is, going through and crossing everything but not actually bumping.
Why It's Good For The Game
Better pass flags handling allows for less proc overrides, bitflag checks are far less expensive in general.
Fixes penetrating projectiles like sniper penetrators
This system also allows for better handling of piercing projectiles (see above) without too much snowflake code, as you'd only need to modify on_pierce() if you needed to do special handling like dampening damage per target pierced, and otherwise you could just use the standardized system and just set pass flags to what's needed. If you really need a projectile that pierces almost everything, override check_pierce(), which is still going to be easier than what was done before (even with snowflake handling of UNSTOPPABLE flag process_hit() was extremely ugly, now we don't rely on movement types at all.)
* pass_flags handling refactor + rewrites a part of projectiles for the n-th time
Co-authored-by: silicons <2003111+silicons@users.noreply.github.com>
* Refactors how movetype flags are added and removed and the floating animation (#54963)
I wanted to refactor how movetype flags are added and removed into traits to prevent multiple sources of specific movement types from conflicting one other. I ended up also having to refactor the floating animation loop (the one that bobs up and down) code in the process.
Why It's Good For The Game
A way to avoid conflict from multiple sources of movement types.
This also stops melee attacks, jitteriness and update_transform() from temporarily disabling the floating movetype bitflag altogether until the next life tick.
Tested, but i'm pretty sure improvements could be made.
Changelog
cl
fix: jitteriness, melee attack animations and resting/standing up should no longer momentarily remove the floating movement type.
/cl
* Refactors how movetype flags are added and removed and the floating animation
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Small do-after refactor (#55172)
This is an alternative to the PR Ryll made, it does some things similar e.g. the default limit of 1 interaction per target for a person, however, it refactors do_afters to support overrides for max interaction counts and unique sources.
For example, stripping uses the item being stripped as the source, allowing you to strip multiple items, but not the same item multiple times.
I've also fixed most other edge-cases this could cause where balance would be affected, but feel free to point out any I might've missed, this'll probably require some longer-term testmerging.
* Small do-after refactor
Co-authored-by: Qustinnus <Floydje123@hotmail.com>