Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Context-Based: Grab Intent [READY FOR REVIEW] #8722

Merged
merged 7 commits into from May 12, 2015
Merged

Conversation

Hubblenaut
Copy link
Contributor

Context-Based Combat: Grab Intent

Basic grab redesign including special grab actions proposed by the community.

Changes:

  • Grab animations
  • New grab icons
  • Pushing

Features:

  • Jointlocking
  • Jointbreaking
  • Eyesquishing
  • Knifing
  • Headbutting
  • Pinning
  • Blinding
  • Muzzling
  • Dancing
  • Buckling

Details

Feature Description Trigger Required Target
Jointlocking Causes 40 halloss Click on victim with harm intent Neck grab Limb
Jointbreaking Dislocates the limb Click on victim with harm intent Neck grab Limb
Eyesquishing Causes 3 to 4 eye damage Click on victim with harm intent Neck grab Eyes
Knifing Causes 60 brute (divided into 3*20) and 60 oxyloss Attack the victim with an edged item Neck grab Head
Headbutting Causes 20 damage to victim and 10 damage to assailant Click on victim with harm intent Aggressive grab Head
Pinning Pins victim to the ground Click on victim with disarm intent Aggressive grab n/A
Blinding Victim can't see Target eyes Aggressive grab Eyes
Muzzling Victim can't speak Target mouth Aggressive grab Mouth
Dancing Constantly facing each other Two people grabbing each other n/A n/A
Buckling Buckles the grabbed person to an object Click on object n/A n/A

Screenshots

Grab Transition Animations
Image

Appearance in Chatbox
Image

@comma
Copy link
Contributor

comma commented Apr 2, 2015

Corpses probably work already as meatshields if you neckgrab them.

@mwerezak
Copy link
Contributor

mwerezak commented Apr 2, 2015

They do for projectiles. Melee and thrown items not yet.

Conflicts:
	icons/mob/screen1.dmi
var/armor = affecting:run_armor_check(affecting, "melee")
if(armor < 2)
affecting << "<span class='danger'>You feel extreme pain!</span>"
affecting.apply_damage(40, HALLOSS, last_hit_zone, armor)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be done repeatedly? I'm not certain, but if it can it may be possible to knock someone out for a very long time by spamming this, which could be unfun.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The force down keeps them on the floor for as long as the grab is active, but afaik it should still be managable to resist out. Not sure, though, will check to be certain.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking more about spamming jointlock. I just checked human Life code and it looks like halloss is capped to 100, so it's not as bad as I originally thought.

Still, hitting 100 halloss makes you unable to see/hear/talk and prevents resisting for 10 seconds, so it might be a good idea to limit the number of times that this can be done, or something. I was going to suggest perhaps limiting it to once per organ, but I don't know if that makes sense for jointlocking.

Another idea would be to only apply more halloss if they are under 80 or some other number. This would mean that people can never pass out from jointlocking, which may or may not be desirable, since really we only want to prevent people from being permanently passed out.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will change it so that 40 halloss is as much as it can possibly inflict.

@mwerezak
Copy link
Contributor

mwerezak commented May 7, 2015

It might be a good idea to have delays associated with some these actions, jointlocking, jointbreaking, eyesquishing, and knifing in particular.

Have you considered adding a bonus for sharp unarmed attacks to eyesquishing? I'm not sure how feasible it would be to implement it cleanly but it would be a nice touch.

Now that there are many ways to really fuck someone up once you have a neck grab on them, I think you may want to consider changing neck grabs to give a one-time 5-10 second stun once achieved (giving you a brief period to make special grab attacks on the victim), instead of a permastun.

@@ -25,6 +25,21 @@

if(!istype(M) || (can_operate(M) && do_surgery(M,user,src))) return 0

// Knifing
if(edge)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be cleaner to move this into /obj/item/weapon/grab/attack() and check the inactive hand for an edge weapon instead of sticking it in the middle of click code.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that might be counterintuitive for a player, having to click the victim with the grab to slit him with the knife of the inactive hand.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I can understand that.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If values above 23.3 with edge/sharp wouldn't cut off limbs, the three inflicted wounds could be merged into one and I'd make it dependant on the weapon's force value.
However as long as there's a guaranteed chance of the head coming off immediately, I will keep the damage dealt by knifing static to avoid that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well it's not guaranteed, it's governed by prob(brute), though I can see why you would want to avoid it.

I think applying a small amount of damage several times is actually a good way to model knifing. From my impression of the way wounding works, dealing a lot of damage at once seems to be treated as hitting with a lot of momentum (like a sword swing).

It might be worth considering something like:

for(var/i in 1 to 6)
    M.apply_damage(min(force/2, 20), BRUTE, "head", 0, sharp=sharp, edge=edge)

What you have is fine though.

Also I think there's a parameter for apply_damage() that is needed to generate proper autopsy logs, might be a good idea to check that.

@Roland410
Copy link
Contributor

A way to change to bodyparts faster would be appreciated to this, since using the damage location interface while trying to jointlock and muzzle is pretty bad.

@Hubblenaut
Copy link
Contributor Author

That's not a new problem and I doubt I will be able to think of a way to make changing the target organs more convenient, sorry.

@Roland410
Copy link
Contributor

I guess using the numpad isn't an option then, right?

@Hubblenaut
Copy link
Contributor Author

I'll remove the knifing ability if devs find it too snowflakey/gamebreaking and there is no good codewise way to improve it.

Merge conflict will be fixed after all other changes were made.

@Hubblenaut Hubblenaut changed the title Context-Based: Grab Intent [DO NOT MERGE YET] Context-Based: Grab Intent [READY FOR REVIEW] May 10, 2015
@mwerezak
Copy link
Contributor

Knifing adds the possibility of holding someone hostage with a melee weapon, which currently is more or less solely the domain of guns, so I think it's a good thing to have. It looks like there was some controversy over it in the paracode port but honestly I don't see those concerns being an issue here.

If you get someone into a neck grab and then cut their throat yeah you can kill them pretty fast. That's not really a surprise. Now in combination with the other things in this PR maybe there could be a problem. If it turns out that getting an aggressive grab -> pinning -> using the pin to escalate to neck grab -> slitting their throat is too easy to do without giving your opponent a chance to react it may have to be tweaked, but it probably is too early to tell at this point without playtesting.

Really it's pinning that concerns me more than knifing, but Weaken(3) seems fairly short so we will have to see.

Also it might need some further polishing like taking into account armour, weapons with very low force values, etc.

Also I am still a bit concerned about spamming all these debilitating attacks on someone once you get the appropriate grab on them, completely fucking them over very fast. You might want to consider adding do_after() timers for some of these things (Eyesquishing and Joint Dislocating in particular), if you haven't already. I may tweak some things once this is merged.

@Hubblenaut
Copy link
Contributor Author

Joint dislocating already has a do_after() and any action on the victim will reset the time one needs to upgrade the grab.

I may add a do_after to pinning down.

@mwerezak
Copy link
Contributor

Yeah, just wanted to bring up some things to think about. I'd feel far less worried about pinning if it could be made to not prevent resisting somehow.

@comma
Copy link
Contributor

comma commented May 12, 2015

Well, that delay on pinning might be nice (because downing someone is a win in SS13 combat), but otherwise looks all good
👍

Conflicts:
	code/game/objects/structures/stool_bed_chair_nest/bed.dm
	code/modules/mob/mob_grab.dm
@comma
Copy link
Contributor

comma commented May 12, 2015

adds delay to pinning

Did you forget to commit the file? Seeing only dmi change in that commit.

@Hubblenaut
Copy link
Contributor Author

Fixed.

comma added a commit that referenced this pull request May 12, 2015
Context-Based: Grab Intent [READY FOR REVIEW]
@comma comma merged commit c15c69b into Baystation12:dev May 12, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants