* Refactors sharpness to use a bitfield (#56817)
Refactors sharpness to use bitfield instead of bitflags in case someone wants to add more types of sharp things, or unique behaviour with them
* Refactors sharpness to use a bitfield
* Update bullets.dm
Co-authored-by: Sparkezel <53384660+Sparkezel@users.noreply.github.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Renames the _alt attacks to _secondary for clarity (#56752)
* Renames the _alt attacks to _secondary for clarity
Co-authored-by: Rohesie <rohesie@gmail.com>
* Add alternate attack procs (#56663)
Adds alternate attack procs for right-clicking. Updates the gunpoint code to use this new proc as an example (though I suspect this is being changed soon, so oops).
This makes it easier to add new behavior to right click, which we should be doing.
* Add alternate attack procs
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* You can now remove embedded objects directly with a hemostat (#56637)
* You can now remove embedded objects directly with a hemostat
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* Hulks can now swing people by their tails + small changes to carbon throw impacts (#55383)
This PR adds another little interaction to hulks, letting them swing monkeys and humanoids with tails (so lizardpeople and felinids mainly) similar to (copied from) the wrestling move. To do this, be a hulk, have a carbon with a tail in at least a neck grab, target the groin, enable throw mode, then click in the direction you'd like to chuck them. After a short 2 second do_after, you'll start swinging your victim around and around by the tail, eventually sending them flying at a very, very high speed! The full process takes about 14 seconds from start to finish, not including getting them in a neck grab to begin with. Impacting a solid wall with no armor will do about 30 brute damage and can cause up to a hairline fracture if you're very unlucky.
This PR also makes a few changes to the effects of being thrown into things. Previously, you'd only suffer damage and a 2 second paralyze if you were thrown into solid turfs or carbon mobs, which meant smashing into windows or girders at high speed didn't do anything. This PR makes it so high speed impacts (I.E. hulk throws and high speed disposal outputs, not normal body throwing) into solid atoms will still deal a lesser amount of damage. Structures like windows and girders will deal a bit more damage and a small 1 second paralyze compared to other atoms
Why It's Good For The Game
Tail spinning adds a goofy niche power to hulk that doesn't just involve deleting walls and shrugging off stuns, and the other throw impact changes make being thrown into things at high speed more consistent rather than only applying to a specific type of atom.
* Hulks can now swing people by their tails + small changes to carbon throw impacts
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@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>
* Rebalances knockdowns due to the getting-up change (#54303)
* Rebalances knockdowns due to the getting-up change
Co-authored-by: Rohesie <rohesie@gmail.com>
* pierce the heavens
* starts doing projs
* continue pierce
* before armor
* before sharpness redefine
* rename sharp defines, before further implementation
* finishing undoing atk_type back to sharpness
* neatens up sharpness defines, FALSE -> SHARP_NONE
* more piercing, removes brute damage bleed, bubblegum no longer wound
* starts letting embeds get in on the fun
* half with embed
* work on dismembering
* continued embed work
* more moving bandaging to limbs
* more dismemberment work
* removing embed pierce stuff
* tweaking bullets
* more docs and work on dismemberment
* spans, piercing, guns
* dismemberment and scar fixes
* bee changes
* bullets embedding
* more bullet and dismember work
* dismemberment, surgery, piercing, formaldehyde,
* pleases travis
* pierce smite
* nicer on blood
* Auto stash before rebase of "tgstation/master"
* more neatening
* wounds only consider up to 35 damage, wounds on l6 and 762
* updates hulk
* balance
* defines
* lower slug to 50 brute to accommodate wounds
* adds differentiation for having flesh/bones/both in mobs
* moves scar descs to json, renames organic_state
* excises removed healing skill
* fixes logs, inconsistencies, some balance changes
* untab
* slight compress
* a
* kills pointed global list
* dmdoc
* halfway through roh
* finishes roh review
* okay NOW i finished roh's reviews
* roh roh roh your boat
* gently down the stream
* global lists
* list ops, fix scanner for bone gel improvised fix
* travis moment
* sounds added and moved
* pellet clouds can join the fun fully, slight gun balancing for wounds
* doc moment
* unconflicts myself
* update hulk
* Update code/_onclick/item_attack.dm
Co-authored-by: Rohesie <rohesie@gmail.com>
* crying ascii face
* final rohview
* oops
* final final
Co-authored-by: Rohesie <rohesie@gmail.com>
* Fixes grabs being impossible to escape, at the expense of making it easier to escape a grab. Damage inflicted by resisting increased to compensate.
* Upped the time between resists a bit
About The Pull Request
It annoyed me that we have a perfectly good frag grenade item, and a perfectly good shrapnel component, but no crossover episode between the two. This remedies that, and does a lot, lot more.
dreamseeker_2020-03-30_05-01-13.png
dreamseeker_2020-03-30_05-01-26.png
Big points:
Adds new component: pellet_cloud, which can be used by ammo casings, guns, and landmines to spray shrapnel and display aggregate hit messages ("You're hit by 6 buckshot pellets!" vs "You're hit by the buckshot pellet in the X" x6). All gun ammo that shoot multiple pellets now use this component on firing.
Adds stingbangs, premium less-lethal grenades that shoot off lots of stinger pellets, to cargo. Frag grenades are also reworked to have smaller booms, but shoot off lots of shrapnel shards. You can jump on top of these grenades to absorb a portion of the shrapnel to save those around you! There's an achievement for dying this way, called "Look Out, Sir!"
Projectiles can now embed items/shrapnel. Adds .38 DumDum ammo to cargo that does less damage and has negative armor pen, but can embed in people. This is the only ammo that currently embeds.
Bullets can now ricochet off walls, structures, and machinery (harder surfaces are more likely to ricochet). Only standard .38 and Match Grade .38/.357/L6 ammo can ricochet, with Match Grade being much better at ricocheting. You can buy Match Grade .38 from cargo and Match Grade L6 ammo from the nuke uplink, while Match .357 is admin only.
Armor now protects you from harmful embeds, taking the better of the bullet/bomb armor on the affected limb. Armor penetration can modify this of course, and many blunt embeds like stingbangs and DumDum bullets are significantly worse if you have even 1 armor.
Other misc fixes/changes
Refactored the embed element a bunch and fixed it creating new elements for every instance rather than expected bespoke behavior. There are new /obj/item helpers for modifying and adding embedding.
Fixes#49989: Spears can no longer embed in turfs cause their sprite is annoying to me, it's generally harder for most things to embed in turfs
Fixes#49741: New carbon helpers for removing embedded objects
Fixes#46416: Handles embedded objects getting qdel'd or moved while embedded
Renamed the old shrapnel component for RPG loot to MIRV to avoid confusion
Repathed frag grenades from under minibombs to under base grenades, and added explosion vars to base grenades
Why It's Good For The Game
Fixes a bunch of janky design with embeds, adds lots of new avenues for projectile and grenade variety, ricochets and collateral damage are fun!
Changelog
🆑 Ryll/Shaps
add: Adds stingbangs to cargo (and one in the sec vendor premium), premium less-lethal grenades that shoot off a giant swarm of stingball pellets to help incapacitate swarms of people in tight quarters. You can jump on top of a live one to be a hero and absorb a bunch of shrapnel, same with frag grenades. There's even an achievement for dying to a grenade you jumped on!
add: Projectiles can now embed in people! Or at least grenade shrapnel and the new .38 DumDum ammo, now available in cargo, can. DumDum rounds excel against unarmored targets, but are pricey and do poorly against armored targets.
add: Bullets can now ricochet! Or at least, standard .38 and the new .38/L6 Match Grade ammo can. Match Grade ammo is finely tuned to ricochet easier and seek targets off bounces better, and can be purchased from cargo (for the .38) or nuke ops uplink (for the L6), but standard .38 ammo has a chance to ricochet as well.
tweak: Frag grenades now have smaller explosions but shoot off a bunch of devastating shrapnel, excellent for soft targets!
tweak: Shotguns and other multi-pellet guns now print aggregate messages, so you'll get one "You've been hit by 6 buckshot pellets!" rather than 6 "You've been hit by the buckshot pellet in the X!" messages. Bye bye lag!
balance: Armor can now protect against embedding weapons, taking the best of either the bullet or bomb armor for the limb in question away from the embed chance. Some weapons are better at piercing armor than others!
/🆑
* Doubtful improvement
* Switches out all the magic numbers with defines
* Thanks travis for finally finding a real error
* properly resolves some left over conflict
* megumin is best girl fucking fight me
* what kind of smoothbrain capizalized these
* uses explosion defines
* more explosion defines
* Removes reagent explosion code for <1 amounts
* Scales explosion knockdown off bomb_armor
* initial commit
* obligatory stupid mistake fixer commit
min -> max
* moves punch changes to correct file
makes them slightly more logical as well
* minor tweaks (see msg for details)
- fixed some defines i messed up when conflict fixing
- removed some unneeded typecasting and src calls
- bumped up stamina damage on failed grab resist so it's not as outpaced by stam regen
* better use of defines/logging
* last second fix to stun punch threshold
forgot to raise it by 1 to account for raising the human punch damage max
also, log missed punches
* Update code/modules/mob/living/carbon/human/species.dm
Co-Authored-By: PKPenguin321 <pkpenguin321.git@gmail.com>
* Update code/modules/mob/living/carbon/human/species.dm
Co-Authored-By: PKPenguin321 <pkpenguin321.git@gmail.com>
* Update code/modules/mob/living/carbon/human/species.dm
Co-Authored-By: PKPenguin321 <pkpenguin321.git@gmail.com>
* Update code/modules/mob/living/carbon/human/species.dm
Co-Authored-By: PKPenguin321 <pkpenguin321.git@gmail.com>
* addresses review
The War on Stun Based Combat Phase II
About The Pull Request
A massive change in gameplay that affects more than just disarm. Hopefully in an interesting way.
There's two parts to this, part 1 is that disarm's functionality has been entirely stripped out and replaced with essentially a new purpose: Shoving.
Shoving is the new action that occurs when clicking on people while in the disarm intent.
Shoving someone pushes them one tile away from you. If there is otherwise nothing blocking them, they are slowed down very slightly for 3 seconds. If you shove someone again while they are slowed, it knocks ranged weapons out of their active hand. I'm not sure about this part and may buff or remove it depending on how it works in practice.
If the blocking tile has a table on it, they're pushed onto it knocking them over for 3 seconds. If it has another human on it, it knocks them both over, the collateral victim for 1 second instead of 3. If the tile is otherwise blocked besides them, it knocks them down for 3 seconds. All knockdowns cause you to drop items, and do not stun at all and can be immediately crawled away from.
However, once knocked down, if you are shoved again it paralyzes for 4 seconds. This is the same length as the old disarm push. It cannot be chained or extended, shoving them again while they're paralyzed does not extend the length of the paralyze. Once it ends, the person will be up and moving.
Now you might be thinking, why would I want to shove someone unless they're against a wall?
Here's part 2:
Moving into someone in a hostile intent no longer pushes them. They'll stay where they are and your movement is blocked. If you want to get someone out of the way, you need to shove them.
Why It's Good For The Game
Changes a previously RNG based mechanic that was basically just spammed until you got that lucky "I win" roll into a positioning based utility that has a point to use in many situations. Livens up simple melee combat and makes fighting in confined areas more lively and unpredictable. Introduces some new epic gamer strats, I've been playing around and it's pretty fun.
Also why not try something really crazy and see what happens? If it's shit it can be reverted :^)
Changelog
Special thanks to whoneedsspace, the inventor of the singlecap, for deshitcodifying this hard.
cl
add: Disarm has been reworked, instead of an rng based system instead it pushes people away from you. If their movement is blocked it knocks them over. Shoving someone twice quickly will knock ranged weapons out of their hands.
del: Moving into humans while in a hostile intent no longer pushes them.
tweak: Passive grabs need to be resisted out of while on the ground, and can't be directly crawled out of
/cl
cl actioninja\memager
refactor: Ballistic guns have been almost entirely reworked from a backend side. This primarily focused on moving as much as possible into the base ballistic gun and turning as many other guns into essentially varedits as possible.
add: Guns can now be racked. This is the default action unless the magazine is empty.
add: Guns now can have the magazine removed by clicking on them with an open hand while they are in hand.
tweak: Suppressors are now removed by alt clicking instead of clicking with an open hand
add: Guns now have various bolt types that all function a bit differently. Open bolts cannot have a bullet chambered with no mag, locking bolts lock back after running out of ammo, etc.
add: All ballistic gun sounds are controlled by variables instead of hardcoded usages.
tweak: The l6 LMG has a reworked control scheme. alt + click to open and close the cover, open hand to remove mag, place mag in by slapping them together, default action is rack.
tweak: Functionality that used to be snowflake code such as tactical reloads has been moved to the base gun, and can be toggled by variables.
refactor: All shotguns are now properly subpaths of the shotgun type. They still work the same.
imagedel: Gun sprites have been almost entirely overhauled to use overlays instead of states. This collapsed the L6 sprite from 20 sprites to 9 sprites to give an example.
soundadd: Remixed versions of the shotgun and base gun firesound
soundadd: New rifle firesound for l6 and moist nugget, new SMG fire sound, new sniper fire sound.
soundadd: Lots of new weapon operation sounds such as racking and bolts and the like.
imageadd: New sprites for the Riot Shotgun, Combat Shotgun, c20r, Deagle, m90, double barrel shotgun and 1911 by Memager.
imageadd: All gun sprites that were pointing to the left have been flipped to point to the right.
balance: Shotguns now can be pumped faster.
balance: Bulldog can now be tac reloaded
balance: Sawn off shotguns now have an accuracy penalty and recoil
/cl
* Fixes projectiles not hitting mobs, some refactoring too
* some stuff for projectile can hit target to work with not being ontop of an object
* Yeah let's just refactor bullet_act while we're at it.
* Yeah let's just refactor bullet_act while we're at it.
* Yeah let's just refactor bullet_act while we're at it.
* CanPass returns true to projectiles regardless of hit
* snakecase?
Aiming to implement the framework oranges has detailed in https://tgstation13.org/phpBB/viewtopic.php?f=10&t=19102
Moves canmove to a bitflag in a new variable called mobility_flags, that will allow finer grain control of what someone can do codewise, for example, letting them move but not stand up, or stand up but not move.
Adds Immobilize()d status effect that freezes movement but does not prevent anything else.
Adds Paralyze()d which is oldstun "You can't do anything at all and knock down).
Stun() will now prevent any item/UI usage and movement (which is similar to before).
Knockdown() will now only knockdown without preventing item usage/movement.
People knocked down will be able to crawl at softcrit-speeds
Refactors some /mob variables and procs to /mob/living.
update_canmove() refactored to update_mobility() and will handle mobility_flags instead of the removed canmove
cl
rscadd: Crawling is now possible if you are down but not stunned. Obviously, you will be slower.
/cl
Refactors are done. I'd rather get this merged faster than try to fine tune stuff like slips. The most obvious gameplay effect this pr has will be crawling, and I believe I made tiny tweaks but I can't find it Anything I missed or weird behavior should be reported.
This way you can add/remove traits without fear of other sources overriding them. Now you can add TRAIT_STUNIMMUNE to somebody without what if hulk
Notable changes:
Fakedeath now updates instantly, instead of waiting for the next life tick.
Fakedeath now sets time of death when acquired.
Removed extremely snowflake code in reagents that checked if you had morphine to remove slow immunity and so on.
Hulk no longer overrides status_flag changes, in case there are any.
* spawn/sleep removal part 1
* sleep/spawn/src. removal
* fixes type paths in timers
* Fixes some variable passing
* Why do I have to do this 20 times to get it right..?
* Why do I have to do this 21 times to get it right..?
* Update suicide.dm
* Update software.dm
* Update paper.dm
* Update cable.dm
* Update ninjaDrainAct.dm
* Update hypospray.dm
* Update vocal_cords.dm
* Update touch_attacks.dm
* Update revenant_abilities.dm
* woops
* Update revenant_abilities.dm
* Soft crit, except a little bit harder.
* tweak
* 👌
* why was this even in here
* no radios in critical
* fix that too
* keep to original logic
* not very smart, really
* tip: do nothing tgui-side that you can do code-side, because we can't do defines in tgui
* blood trail
* can't do blood trails
* how does this even work
* harsher slowdown and more obscured vision
* it really puts it into perspective; you're fucking dying.
* stat_attack
* stop fuckin whispering into radios or whatever it is you're doing
* more fixes
* fix
* fix
* fix the radio shit
* bikeshed?