Merges Pull and Grab into a single functionality. Pulling someone is now the same as a passive grab. You can start pulling someone with ctrlclick or by using the grab intent with empty hand. Using the grab intent again on the pulled person tries to grab them aggressively, then neck grab, then kill grab.

Two mobs can no longer pull the same mob at the same time. Pulling someone break any other pull/grab from other mob on that person.

The grab item is gone entirely.

You can now only grab one mob at a time, instead of two (one for each hand).

Being aggressively grabbed or more now counts as being restrained (like handcuffed). A neck grab or more makes you lie down and prevents you from getting up until the grab is broken.

Fixes movement when moving with a grabbed person.
Fixes movement when moving a pulled person around you diagonally.
Fixes neckgrab moving the victim on your turf even if the turf is dense.
This commit is contained in:
phil235
2016-05-24 01:28:04 +02:00
parent 910d1e1ffe
commit 11ca987acb
62 changed files with 518 additions and 893 deletions
+18 -16
View File
@@ -82,7 +82,7 @@
M.apply_damage(10, STAMINA)
if(prob(5))
M.Weaken(3)
visible_message("<span class='danger'>[M] is knocked right off \his feet!</span>", 3)
visible_message("<span class='danger'>[M] is knocked right off \his feet!</span>")
//
// Structures
@@ -97,20 +97,22 @@
density = 1
/obj/structure/holohoop/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state < GRAB_AGGRESSIVE)
if(get_dist(src,user)<2)
if(user.drop_item(src))
visible_message("<span class='warning'> [user] dunks [W] into \the [src]!</span>")
/obj/structure/holohoop/attack_hand(mob/user)
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
var/mob/living/L = user.pulling
if(user.grab_state < GRAB_AGGRESSIVE)
user << "<span class='warning'>You need a better grip to do that!</span>"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("<span class='danger'>[G.assailant] dunks [G.affecting] into \the [src]!</span>", 3)
qdel(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
visible_message("<span class='warning'> [user] dunks [W] into \the [src]!</span>", 3)
return
L.loc = src.loc
L.Weaken(5)
visible_message("<span class='danger'>[user] dunks [L] into \the [src]!</span>")
user.stop_pulling()
else
..()
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0)
if (istype(mover,/obj/item) && mover.throwing)
@@ -119,12 +121,12 @@
return
if(prob(50))
I.loc = src.loc
visible_message("<span class='warning'> Swish! \the [I] lands in \the [src].</span>", 3)
visible_message("<span class='warning'> Swish! \the [I] lands in \the [src].</span>")
else
visible_message("<span class='danger'> \the [I] bounces off of \the [src]'s rim!</span>", 3)
visible_message("<span class='danger'> \the [I] bounces off of \the [src]'s rim!</span>")
return 0
else
return ..(mover, target, height)
return ..()