From 0abfad0bbbb55fbf30b3da348415cd26a7e486c7 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:33:33 +0200 Subject: [PATCH 1/8] Turns movable chairs on click --- code/_onclick/click.dm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 147d790919..b061f912a5 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -295,14 +295,19 @@ // Simple helper to face what you clicked on, in case it should be needed in more than one place /mob/proc/face_atom(var/atom/A) - if( stat || buckled || !A || !x || !y || !A.x || !A.y ) return + if( stat || (buckled && !buckled.movable) || !A || !x || !y || !A.x || !A.y ) return var/dx = A.x - x var/dy = A.y - y if(!dx && !dy) return + var/direction if(abs(dx) < abs(dy)) - if(dy > 0) usr.dir = NORTH - else usr.dir = SOUTH + if(dy > 0) direction = NORTH + else direction = SOUTH else - if(dx > 0) usr.dir = EAST - else usr.dir = WEST \ No newline at end of file + if(dx > 0) direction = EAST + else direction = WEST + usr.dir = direction + if(buckled && buckled.movable) + buckled.dir = direction + buckled.handle_rotation() \ No newline at end of file From c0ae74b813d98596542a9f21343c5a4178bade7c Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:34:50 +0200 Subject: [PATCH 2/8] Fixes non-existant feet getting bloodied and adds blood to wheelchairs --- code/game/objects/effects/decals/Cleanable/humans.dm | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index cff202f2ea..17bcaba428 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -51,7 +51,12 @@ var/global/list/image/splatter_cache=list() if(amount < 1) return - if(perp.shoes)//Adding blood to shoes + var/datum/organ/external/l_foot = perp.get_organ("l_foot") + var/datum/organ/external/r_foot = perp.get_organ("r_foot") + var/hasfeet = 1 + if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED)) + hasfeet = 0 + if(perp.shoes && !perp.buckled)//Adding blood to shoes perp.shoes.blood_color = basecolor perp.shoes:track_blood = max(amount,perp.shoes:track_blood) if(!perp.shoes.blood_overlay) @@ -62,12 +67,15 @@ var/global/list/image/splatter_cache=list() perp.shoes.overlays += perp.shoes.blood_overlay perp.shoes.blood_DNA |= blood_DNA.Copy() - else//Or feet + else if (hasfeet)//Or feet perp.feet_blood_color = basecolor perp.track_blood = max(amount,perp.track_blood) if(!perp.feet_blood_DNA) perp.feet_blood_DNA = list() perp.feet_blood_DNA |= blood_DNA.Copy() + else if (perp.buckled && istype(perp.buckled, /obj/structure/stool/bed/chair/wheelchair)) + var/obj/structure/stool/bed/chair/wheelchair/W = perp.buckled + W.bloodiness = 4 perp.update_inv_shoes(1) amount-- From abef4bf9430c3d0995fc40a15ce434a4d211ac28 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:35:11 +0200 Subject: [PATCH 3/8] Fixes teleporting while buckled --- code/datums/helper_datums/teleport.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index cb67c3f5f1..0d817b7c8d 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -108,12 +108,19 @@ playSpecials(curturf,effectin,soundin) + var/obj/structure/stool/bed/chair/C = null + if(isliving(teleatom)) + var/mob/living/L = teleatom + if(L.buckled) + C = L.buckled if(force_teleport) teleatom.forceMove(destturf) playSpecials(destturf,effectout,soundout) else if(teleatom.Move(destturf)) playSpecials(destturf,effectout,soundout) + if(C) + C.forceMove(destturf) destarea.Entered(teleatom) From dfece9fe12d9f8574077f231b73d9d4733ede04e Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:36:49 +0200 Subject: [PATCH 4/8] Stops buckled mobs from slipping (for now) --- code/game/objects/effects/effect_system.dm | 2 +- code/game/objects/items/weapons/clown_items.dm | 4 ++-- code/game/turfs/simulated.dm | 8 +++++++- .../reagents/reagent_containers/food/snacks/grown.dm | 2 +- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index dd5ee1f8b3..59e516a714 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -555,7 +555,7 @@ steam.start() -- spawns the effect if (istype(AM, /mob/living/carbon)) var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP)) + if (istype(M, /mob/living/carbon/human) && (istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) || M.buckled) return M.stop_pulling() diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index 49f0b2e45f..e526cf1c35 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -11,7 +11,7 @@ /obj/item/weapon/bananapeel/HasEntered(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP)) + if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) return M.stop_pulling() @@ -26,7 +26,7 @@ /obj/item/weapon/soap/HasEntered(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist if (istype(AM, /mob/living/carbon)) var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP)) + if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) return M.stop_pulling() diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index b62c32b81a..19223c48f1 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -73,6 +73,12 @@ bloodDNA = null + var/noslip = 0 + for (var/obj/structure/stool/bed/chair/C in loc) + if (C.buckled_mob == M) + noslip = 1 + if (noslip) + return // no slipping while sitting in a chair, plz switch (src.wet) if(1) if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes @@ -99,7 +105,7 @@ return if(2) //lube //can cause infinite loops - needs work - if(!istype(M, /mob/living/carbon/slime)) + if(!istype(M, /mob/living/carbon/slime) && !M.buckled) M.stop_pulling() step(M, M.dir) spawn(1) step(M, M.dir) diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index 86b212f2b5..9fb7fc2d97 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -731,7 +731,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/HasEntered(AM as mob|obj) if (istype(AM, /mob/living/carbon)) var/mob/M = AM - if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP)) + if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP) || M.buckled) return M.stop_pulling() From 97f997dd30b9ff00e5118c9d3b7f6462d91c940f Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:42:18 +0200 Subject: [PATCH 5/8] Fixes in wheelchair and different handling of movement --- .../structures/stool_bed_chair_nest/bed.dm | 4 ++ .../structures/stool_bed_chair_nest/chairs.dm | 5 +- .../stool_bed_chair_nest/wheelchair.dm | 59 ++++++++++++++----- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/mob.dm | 6 +- code/modules/vehicles/vehicle.dm | 5 +- 6 files changed, 57 insertions(+), 24 deletions(-) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 5b9a86c8ed..01f06f14a4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -12,6 +12,7 @@ desc = "This is used to lie in, sleep in or strap on." icon_state = "bed" var/mob/living/buckled_mob + var/movable = 0 // For mobility checks /obj/structure/stool/bed/psych name = "psychiatrists couch" @@ -35,6 +36,9 @@ manual_unbuckle(user) return +/obj/structure/stool/bed/proc/handle_rotation() + return + /obj/structure/stool/bed/MouseDrop(atom/over_object) return diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 63fe705be7..9982017c6b 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -39,7 +39,7 @@ rotate() return -/obj/structure/stool/bed/chair/proc/handle_rotation() //making this into a seperate proc so office chairs can call it on Move() +/obj/structure/stool/bed/chair/handle_rotation() //making this into a seperate proc so office chairs can call it on Move() if(src.dir == NORTH) src.layer = FLY_LAYER else @@ -107,6 +107,7 @@ /obj/structure/stool/bed/chair/office anchored = 0 + movable = 1 /obj/structure/stool/bed/chair/comfy/black icon_state = "comfychair_black" @@ -148,7 +149,7 @@ victim.apply_effect(6, WEAKEN, 0) victim.apply_effect(6, STUTTER, 0) victim.take_organ_damage(10) - occupant.visible_message("[occupant] clashed into \the [A]!") + occupant.visible_message("[occupant] crashed into \the [A]!") /obj/structure/stool/bed/chair/office/light icon_state = "officechair_white" diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index c3ad95b832..adec836a78 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -3,9 +3,11 @@ desc = "You sit in this. Either by will or force." icon_state = "wheelchair" anchored = 0 + movable = 1 var/driving = 0 var/mob/living/pulling = null + var/bloodiness /obj/structure/stool/bed/chair/wheelchair/handle_rotation() @@ -22,7 +24,7 @@ user.pulledby = null user << "\red You lost your grip!" return - if(user.pulling) + if(user.pulling && (user == pulling)) pulling = null user.pulledby = null return @@ -31,7 +33,8 @@ if(pulling && (get_dist(src, pulling) > 1)) pulling = null user.pulledby = null - return + if(user==pulling) + return if(pulling && (get_dir(src.loc, pulling.loc) == direction)) user << "\red You cannot go there." return @@ -67,26 +70,36 @@ pulling = null user.pulledby = null pulling.dir = get_dir(pulling, src) // When everything is right, face the wheelchair + if(bloodiness) + create_track() driving = 0 /obj/structure/stool/bed/chair/wheelchair/Move() ..() - if(!driving && buckled_mob) + if(buckled_mob) var/mob/living/occupant = buckled_mob - occupant.buckled = null - occupant.Move(src.loc) - occupant.buckled = src - if (occupant && (src.loc != occupant.loc)) - if (propelled) - for (var/mob/O in src.loc) - if (O != occupant) - Bump(O) - else - unbuckle() + if(!driving) + occupant.buckled = null + occupant.Move(src.loc) + occupant.buckled = src + if (occupant && (src.loc != occupant.loc)) + if (propelled) + for (var/mob/O in src.loc) + if (O != occupant) + Bump(O) + else + unbuckle() + if (pulling && (get_dist(src, pulling) > 1)) + pulling.pulledby = null + pulling << "\red You lost your grip!" + pulling = null + else + if (occupant && (src.loc != occupant.loc)) + src.loc = occupant.loc // Failsafe to make sure the wheelchair stays beneath the occupant after driving handle_rotation() /obj/structure/stool/bed/chair/wheelchair/attack_hand(mob/user as mob) - if (pulling && (pulling == usr)) + if (pulling) MouseDrop(usr) else manual_unbuckle(user) @@ -137,11 +150,25 @@ if(pulling) occupant.visible_message("[pulling] has thrusted \the [name] into \the [A], throwing \the [occupant] out of it!") - pulling.attack_log += "\[[time_stamp()]\] Clashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]" + pulling.attack_log += "\[[time_stamp()]\] Crashed [occupant.name]'s ([occupant.ckey]) [name] into \a [A]" occupant.attack_log += "\[[time_stamp()]\] Thrusted into \a [A] by [pulling.name] ([pulling.ckey]) with \the [name]" msg_admin_attack("[pulling.name] ([pulling.ckey]) has thrusted [occupant.name]'s ([occupant.ckey]) [name] into \a [A] (JMP)") else - occupant.visible_message("[occupant] clashed into \the [A]!") + occupant.visible_message("[occupant] crashed into \the [A]!") + +/obj/structure/stool/bed/chair/wheelchair/proc/create_track() + var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) + var/newdir = get_dir(get_step(loc, dir), loc) + if(newdir == dir) + B.dir = newdir + else + newdir = newdir | dir + if(newdir == 3) + newdir = 1 + else if(newdir == 12) + newdir = 4 + B.dir = newdir + bloodiness-- /obj/structure/stool/bed/chair/wheelchair/buckle_mob(mob/M as mob, mob/user as mob) if(M == pulling) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 000600781b..f4edb30e24 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -112,7 +112,7 @@ return //BubbleWrap: people in handcuffs are always switched around as if they were on 'help' intent to prevent a person being pulled from being seperated from their puller - if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && canmove) // mutual brohugs all around! + if((tmob.a_intent == "help" || tmob.restrained()) && (a_intent == "help" || src.restrained()) && tmob.canmove && !tmob.buckled && canmove) // mutual brohugs all around! var/turf/oldloc = loc loc = tmob.loc tmob.loc = oldloc diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 18d415fd39..2b0d1b2c01 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -755,7 +755,7 @@ note dizziness decrements automatically in the mob's Life() proc. //Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it. /mob/proc/update_canmove() - if(buckled) + if(buckled && (!buckled.movable)) anchored = 1 canmove = 0 if( istype(buckled,/obj/structure/stool/bed/chair) ) @@ -778,9 +778,9 @@ note dizziness decrements automatically in the mob's Life() proc. anchored = 1 canmove = 0 lying = 0 - else + else if (!buckled) lying = !can_stand - canmove = has_limbs + //canmove = has_limbs if(lying) density = 0 diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 27ce16d113..ef2ea18a5e 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -19,6 +19,7 @@ var/emagged = 0 var/powered = 0 //set if vehicle is powered and should use fuel when moving var/move_delay = 1 //set this to limit the speed of the vehicle + var/movable = 1 var/obj/item/weapon/cell/cell var/power_use = 5 //set this to adjust the amount of power the vehicle uses per move @@ -47,7 +48,7 @@ if(on && powered) cell.use(power_use) anchored = init_anc - + if(load) load.loc = loc load.dir = dir @@ -288,7 +289,7 @@ /obj/vehicle/proc/unload(var/mob/user, var/direction) if(!load) return - + var/turf/dest = null //find a turf to unload to From 164bf1516657c7cbd6b5c29286b640828b03613d Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:42:53 +0200 Subject: [PATCH 6/8] Minor code cleanup --- code/modules/mob/mob_movement.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index fbc48841f4..ce5e8824de 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -199,8 +199,7 @@ if(!mob.canmove) - if (mob.buckled && (istype(mob.buckled, /obj/structure/stool/bed/chair/wheelchair) || istype(mob.buckled, /obj/vehicle))) // Exception for wheelchairs - else return + return //if(istype(mob.loc, /turf/space) || (mob.flags & NOGRAV)) // if(!mob.Process_Spacemove(0)) return 0 @@ -246,7 +245,7 @@ move_delay -= 1.3 var/tickcomp = ((1/(world.tick_lag))*1.3) move_delay = move_delay + tickcomp - + if(istype(mob.buckled, /obj/vehicle)) return mob.buckled.relaymove(mob,direct) @@ -260,7 +259,7 @@ var/mob/living/carbon/human/driver = mob.buckled var/datum/organ/external/l_hand = driver.get_organ("l_hand") var/datum/organ/external/r_hand = driver.get_organ("r_hand") - if((!l_hand || l_hand.status & ORGAN_DESTROYED) && (!r_hand || r_hand.status & ORGAN_DESTROYED)) + if((!l_hand || (l_hand.status & ORGAN_DESTROYED)) && (!r_hand || (r_hand.status & ORGAN_DESTROYED))) return // No hands to drive your chair? Tough luck! move_delay += 2 return mob.buckled.relaymove(mob,direct) From 4981f3409fcdf1ad08370143064ddc60d5416ea3 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 22:43:17 +0200 Subject: [PATCH 7/8] Fixes wrong person getting movement penalty --- code/modules/mob/living/carbon/human/human_movement.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 2b1299b636..7f468f5ebb 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -35,7 +35,7 @@ else if(E.status & ORGAN_BROKEN) tally += 1.5 - if(pulledby && istype(pulledby, /obj/structure/stool/bed/chair/wheelchair)) + if(buckled && istype(buckled, /obj/structure/stool/bed/chair/wheelchair)) for(var/organ_name in list("l_hand","r_hand","l_arm","r_arm")) var/datum/organ/external/E = get_organ(organ_name) if(!E || (E.status & ORGAN_DESTROYED)) From 6a25d59f9a463338bcc6c0532a332e40fe606feb Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Wed, 2 Jul 2014 23:14:41 +0200 Subject: [PATCH 8/8] Gives test-firing an actual use --- code/game/machinery/teleporter.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index d8272453c9..f9bc8d879b 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -198,6 +198,8 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() + accurate = 1 + spawn(3000) accurate = 0 //Accurate teleporting for 5 minutes for(var/mob/B in hearers(src, null)) B.show_message("\blue Test fire completed.") return @@ -339,6 +341,7 @@ if (com) com.icon_state = "tele0" + com.accurate = 0 for(var/mob/O in hearers(src, null)) O.show_message("\blue Teleporter disengaged!", 2) src.add_fingerprint(usr)