About The Pull Request
This PR removes intents and replaces them with a combat mode. An explanation of what this means can be found below
Major changes:
Disarm and Grab intents have been removed.
Harm/Help is now combat mode, toggled by F or 4 by default
The context/verb/popup menu now only works when you do shift+right-click
Right click is now disarm, both in and out of combat mode.
Grabbing is now on ctrl-click.
If you're in combat mode, and are currently grabbing/pulling someone, and ctrl-click somewhere else, it will not release the grab (To prevent misclicks)
Minor interaction changes:
Right click to dissasemble tables, racks, filing cabinets (When holding the right tool to do so)
Left click to stunbaton, right click to harmbaton
Right click to tip cows
Right click to malpractice surgery
Right click to hold people at gunpoint (if youre holding a gun)
Why It's Good For The Game
Intents heavily cripple both the code and the UI design of interactions. While I understand that a lot of people will dislike this PR as they are used to intents, they are one of our weakest links in terms of explaining to players how to do specific things, and require a lot more keypresses to do compared to this.
As an example, martial arts can now be done without having to juggle 1 2 3 and 4 to switch intents quickly.
As some of you who saw the first combat mode PR, the context menu used to be disabled in combat mode. In this version it is instead on shift-right click ensuring that you can always use it in the same way.
In this version, combat mode also no longer prevents you from attacking with items when you would so before, as this was something that was commonly complained about.
The full intention of this shift in control scheme is that right click will become "secondary interaction" for items, which prevents some of the awkward juggling we have now with item modes etcetera.
Changelog
cl Qustinnus
add: Intents have been replaced with a combat mode. For more info find the PR here: #56601
/cl
Hypnosis and brainwashing now have entries in the Player Panel logging
under attack and entries in the attack logs.
Mirrors some logging that would otherwise just be in the game logs.
From an admin-perspective, issues where you'd want to check
brainwashing/hypnosis tend to go hand-in-hand with issues relating to
attack logs as opposed to game logs.
Changes the references of borg module (type) to model, adds a file for robot declarations and one for model declarations. Basically trying to make the code layout a little more sane.
Initially changed them to 'configurations' but I prefer model; its meaning is closer to module than configuration and avoids confusion with actual config.
## About The Pull Request
The surgical toolset implant's circular saw and surgical drill now both have a force of 15 (as is normal for surgical tools of their respective types), instead of 10.
## Why It's Good For The Game
I don't really see any reason why these tools should be "dulled" for the surgical toolset implant, especially seeing how the integrated toolset implant (which contains much more generally-usefull tools than what the surgical toolset implant has) contains a 40u welder that has a force of 15, and that's not causing any balance problems. For combat purposes, both of these implants are outclassed by replacing your arm with a chainsaw (which has a force of 24).
Whirring saws and spinning drills that you can extend from your arm like wolverine and shank a guy with are fucking badass, and if a doctor wants to defend themselves with their integrated tools instead of carrying around an extra "normal" saw/drill in their backpack just for combat purposes, then by god, we shouldn't arbitrarily penalize them for doing that.
Fixing issue #56076 making arms affected by the corresponding brain trauma. Fixing brain trauma paralysis in non-human limbs is impossible without a partial or complete refactor of paralysis code or species code, and since this situation happens very rarely, I doubt someone want to waste time in this. But if someone wants to do it anyway feel free to ask me about how it can be done.
🆑 coiax
tweak: Regular Capture-The-Flag players can no longer be wounded.
Simulated participants in the Medieval Shuttle can still be violently
murdered with wounds however.
/🆑
CTF is very fast paced, and if you've taken damage without your shield,
you are nearly dead most of the time. However, if you do survive, you're
supposed to slowly heal, but wounds are untreatable on the battlefield.
People still being able to be bloodily stabbed in the Medieval Shuttle
is definitely a feature.
- Aliens (xenomorphs) are still immune to wounds, but that immunity is
now done with a trait, rather than a typecheck.
By moving the "special behaviour" of something like security officers
eating donuts, or engineers losing radiation by drinking Screwdrivers,
into traits on the liver, this makes the "origin" of that behaviour more
clearly defined, rather than something that's attached to the mind of
the person. (For example, now if a wizard mindswaps into a Security
Officer, they too can now digest donuts good.)
Having this behaviour be partially visible to the more medically
inclined members of the station (like doctors, and the chaplain for
"entrails reading mystic" themes), means that a dismembered liver tells
a story to those who know how to read it.
Some jobs have more "benefits" than others, for example the only thing
that the liver of a Quartermaster gives them is a sense of inadequacy
when consuming royal carpet.
Clowns having livers that honk make them easier to identify, and plays
into the retconned "bike horns are clown livers lore"? Also, why not cut
out a clown's liver then honk them with it? You monster.
Being hit by the Flesh to Stone makes you bleed immune to prevent you from getting petrified while bleeding, and bleeding out while turned into stone. However, it doesn't make you vulnerable when you get unpetrified. This is a bug. This also makes bleedsuppress into a trait, as both is broken and should be a trait.
This makes the default reagent in stomachs not be nutriment, the flavor of nutriment was merged in to the nutriment that sits in the stomach add flavors to it.
New the default reagent of the stomach is organ_tissue, this will prevent compounding flavors.
## About The Pull Request
Flypeople will now say "s" as "z" (They already say "z" as "zzz", but s -/> zzz) and arent disgusted by toxic food anymore.
I'm hoping that by the end of my changes, Flypeople could be considered a unique and viable race, being actually worth something other than "that one unmaintained race we have disabled" (best-case scenario is they become fit to be a proper roundstart race)
## Why It's Good For The Game
Flypeople is the forgotten race of /tg/, this makes them more unique and fits for them.
Not being disgusted by toxic food fits well due to Flypeople being considered disgusting and vile creatures.
Skeleton and plasmaman stomachs now share the same code.
Skeletons now heal brute and burn damage from drinking milk, plasmamen
only heal brute damage.
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>
#54939 removed a part of individual logging code that used the length of the individual's logging list as part of the index for storing a given line of logging.
The problem is, that number was important for avoiding collisions in the logging lists. Since the length of an atom's logging list can only ever increase by 1 every time a new line is logged, you were guaranteed to always have a unique index for each new line. Without the length in the index, if any logging event was triggered on the same atom multiple times in the same second (like if someone spoke once willingly and once by force from something like tourettes at the same time), two entries would be logged, but both of them would point to whichever one was processed last.
This was most noticeable with wound logging, since the victim would log both the attack itself and the wound it caused at the same time in the same category (LOG_ATTACK), meaning that the wound log would just be turned into a copy of the attack entry, but I believe this is the cause behind most (if not all) of the issues logging has had with duplicating some events and losing others entirely.
The fix is simple, just adding the length of the list to the end of the index. This still allows logs to be sorted by timestamp while ensuring that each log entry is unique.
Giving syndicate medical cyborgs access to the ear healing chemical
allos them to heal one of the most crippling problems that can afflict
an op; being unable to communicate effectively (through ear damage).
Being unable to communicate because they are a bad player is uncurable
through in-game methods however.
* 👀 Make eye(s) of god NODROP only when equipped
🆑 coiax
tweak: The "eye of god" only becomes unremovable when put in your eye.
/🆑
- The lavaland chest reward "eye of god", will only become NODROP (ie.
unremovable) when actually placed in someone's glasses slot, rather
than becoming immediately stuck in your hand.
- Eyes of god now hurt when implanted, causing temporary blindness and
screaming.
- A pre-doubled eye of god is now a typepath.
- Eyes of god are no longer made out of glass.
- Glasses colouring procs have been moved to the top of the glasses
file, but unchanged.
* Apply suggestions from code review
- Refactor out explicit `src` with implicit instance access.
- Use ternary string expression for burrow grammar
Co-authored-by: Fikou <piotrbryla@onet.pl>
* Fix NODROP staying on beheading
Even though the item is NODROP, it can still be removed from someone,
such as when they're beheaded. We don't want it to remain sticky, so
remove the NODROP trait.
Co-authored-by: Fikou <piotrbryla@onet.pl>
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
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.
Jack and Style figured out that sound environments can be cancelled by setting some settings in Echo. By default audio has no reverb, but if a sound environment is selected in playsound_local it will become a reverb sound.
This makes every room sound a bit different. The only caveat is is that if you move into another room, Already playing sounds will transition into the new environment, which sounds odd.
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Adds a new set of nanite protocol programs as a researchable Bepis tech.
Protocol programs are programs that are mutually exclusive within their time, so remember that only one of the following can be active at once in the same host.
Hive Protocol: Makes nanites use space more efficiently, increasing maximum volume by 250 (500 -> 750)
Zip Protocol: Makes nanites use a compression routine when not in use, increasing maximum volume by 500 (500 -> 1000) but consuming 0.2 nanites per tick to perform the zipping/unzipping
Free-Range Protocol: Makes nanite use looser storage routines, reducing the maximum volume by 250 (500 -> 250) but gaining 0.5 nanite replication rate
S.L.O.P. (Safety Level Override Protocol): Removes nanite storage safety measures, allowing them to reach up to 2000 volume. However, when the volume surpasses the maximum recommended volume (500) the host will start to suffer from side effects, manifesting in slow organ damage. The more the nanite volume approaches the physical limit, the more harmful it becomes.
Replaced the Tinker Nanite Replication Protocol with the Pyramid Protocol, which gives an extra 1.2 regeneration rate, but only while the nanites are at 80% volume or above.
Renamed the Offline Production Protocol to Eclipse Protocol.
Chain detonation now uses dyn_explosion(), at a rate of 1 power per 50 nanite volume. The power level should be similar to how it was for normal nanite volumes, but it should scale more linearly when going above the limit with the new programs.
If nanite volume is suddenly significantly higher than the maximum allowed (likely caused by deleting an active storage protocol) the extra nanites will be forcefully expelled from the host's body, which can range from minor oozing, to vomiting puddles of nanites, to nanites rapidly bursting from eyes, ears, and skin pores.
Despite how it looks, this process causes no lasting damage, since it's a security feature made to prevent acute nanite poisoning.
Added some comments on a few nanite functions.
Refactored vomit code to make it a bit more customizable. The toxic arg (supposedly used to choose an alternate vomit icon, but in fact not functional) is now vomit_type, and purge (which determined vomit would remove 10% of reagents or 67% of reagents) is now purge_ratio, which accepts custom values. Made the refactor mostly to allow a 0% ratio, but it can be handy in other future uses.
Adds extra content to Bepis research, giving a little more reason to invest money into it.
Creates more options to customize a previously rigid parameter in nanites, maximum nanite volume. This opens up strategies that involve storing up large amounts of nanites for special occasions, or viceversa reducing the maximum rate to get more constant replication rate to sustain continued programs.
Missed check for stomach food reagents in stomach vomit code causing pain.
Now vomit code checks that the reagents it has are not in the food reagents when applying damage.
fixes#55000
* The Re-pricening
* Rewritten and adjusted for paycheck defines.
* I made the map changes finally.
* And the refills too.
* "OH YEAH REPLACING IT ALL WITH DEFINES AND SCALING IT THE EXCEL DOCUMENT WILL BE EASY, ARCANE!!!"
* And the premium ones too.
* Accidently spoiled a future pr due to dme bleedover
This PR removes the burn damage you accumulate when breathing nitryl and adds a reaction to breakdown nitryl into its components(excluding bz) when in contact with oxygen under 600k. This produces small amounts of heat.
Nitryl, as it stands, is barely made or used due to the constant damage you take from breathing it, which causes damage slowdown after less than a minute of use. By making nitryl unsafe or unable to breathe with oxygen present, users must turn to pluoxium while using it in tanks, or hyper-nobilium when filling a room with it. BZ is not refunded if you waste your nitryl.
You now burp while breathing nitryl instead of gasping because it no longer directly harms you.
Breathing nitryl will cause lung damage proportional to the amount you are breathing at a rate proportional to the amount you are breathing when it makes up more than 10% of your breath.
default_features and mutant_bodyparts have been used ambivelently since a long time, so I'm merging the two together and replacing relevant 'in' list access operations with '[ ]' for performance while I'm at it.
removes hexane gas from video game
(the ability to hear dchat got removed like half a day ago) (Lemons note, it's been more then half a day)
it will speed up atmos a bit with less reactions, the reagent from the gas does the same things as halon + bz and the reaction from it is pretty similar to halon, they are both gases that exist to stop fires, i dont think we need both
* Self_attack for arms if the hand is empty
* Oops
* Light runtime fix
This is not my runtime, but I will fix it all the same
* return better good
* How about a variable name that actually fits
* asdf
Hexane no longer grant the ability to hear dchat (yep it was a bad idea) (Lemon's note: I am very dumb)
Hexane now gives the resist heat trait to fight fires better but can give you a lot of hallucinations
Implements the ?. operator, replacing code like A && A.B with A?.B
BYOND Ref:
When reading A?.B, it's equivalent to A && A.B except that A is only evaluated once, even if it's a complex expression like a proc call.
This is a pretty big change all around. The gist of it is that it moves the mobility_flags into traits or variables that can track the sources, and to which we can append code to react to the events, be it via signals or via on_event-like procs.
For example, MOBILITY_STAND could mean, depending on context, that the mob is either already standing or that it may be able to stand, and thus is lying down.
There was a lot of snowflakery and redefinitions on top of redefinitions, so this is bound to create bugs I'm willing to fix as I learn them.
The end-goal is for every living mob to use the same mobility system, for the traits to mean the same among them, and for no place to just mass-change settings without a way to trace it, such as with mobility_flags = NONE and mobility_flags = ALL
Fixes AIs being able to strip nearby people. They've lost their hands usage.
overrides weren't detected by should not sleep, i think i've mostly
fixed that with SpaceManiac/SpacemanDMM#214
Some of these are wacky but overall this pr is harmless
signals shouldnt sleep even in weird 1 in a million situations or due
to other people adding bad code
overrides of changeling can_sting() use alert() and input() and that's
just too fucked for me to fix in this pr