mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Ports Mloc's Refactor of buckling, All /obj can now buckle things. HE Pipes now change colour based on heat.
This commit is contained in:
@@ -6,10 +6,14 @@
|
||||
var/initialize_directions_he
|
||||
minimum_temperature_difference = 20
|
||||
thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT
|
||||
color = "#404040"
|
||||
buckle_lying = 1
|
||||
var/icon_temperature = T20C //stop small changes in temperature causing icon refresh
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/New()
|
||||
..()
|
||||
initialize_directions_he = initialize_directions // The auto-detection from /pipe is good enough for a simple HE pipe
|
||||
color = "#404040"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/initialize()
|
||||
normalize_dir()
|
||||
@@ -29,6 +33,8 @@
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
var/environment_temperature = 0
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
|
||||
if(istype(loc, /turf/simulated))
|
||||
if(loc:blocks_air)
|
||||
environment_temperature = loc:temperature
|
||||
@@ -37,10 +43,41 @@
|
||||
environment_temperature = environment.temperature
|
||||
else
|
||||
environment_temperature = loc:temperature
|
||||
var/datum/gas_mixture/pipe_air = return_air()
|
||||
|
||||
if(abs(environment_temperature-pipe_air.temperature) > minimum_temperature_difference)
|
||||
parent.temperature_interact(loc, volume, thermal_conductivity)
|
||||
|
||||
|
||||
//Burn any mobs buckled to ourselves based on our temperature
|
||||
if(buckled_mob)
|
||||
var/hc = pipe_air.heat_capacity()
|
||||
var/avg_temp = (pipe_air.temperature * hc + buckled_mob.bodytemperature * 3500) / (hc + 3500)
|
||||
pipe_air.temperature = avg_temp
|
||||
buckled_mob.bodytemperature = avg_temp
|
||||
|
||||
var/heat_limit = 1000
|
||||
|
||||
if(pipe_air.temperature > heat_limit + 1)
|
||||
buckled_mob.apply_damage(4 * log(pipe_air.temperature - heat_limit), BURN, "chest")
|
||||
|
||||
//Heat causes pipe to glow
|
||||
if(pipe_air.temperature && (icon_temperature > 500 || pipe_air.temperature > 500)) //glow starts at 500K
|
||||
if(abs(pipe_air.temperature - icon_temperature) > 10)
|
||||
icon_temperature = pipe_air.temperature
|
||||
|
||||
var/h_r = heat2colour_r(icon_temperature)
|
||||
var/h_g = heat2colour_g(icon_temperature)
|
||||
var/h_b = heat2colour_b(icon_temperature)
|
||||
|
||||
if(icon_temperature < 2000)//scale glow until 2000K
|
||||
var/scale = (icon_temperature - 500) / 1500
|
||||
h_r = 64 + (h_r - 64) * scale
|
||||
h_g = 64 + (h_g - 64) * scale
|
||||
h_b = 64 + (h_b - 64) * scale
|
||||
|
||||
animate(src, color = rgb(h_r, h_g, h_b), time = 20, easing = SINE_EASING)
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction
|
||||
icon = 'icons/obj/pipes/junction.dmi'
|
||||
icon_state = "intact"
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
var/alert_pressure = 80*ONE_ATMOSPHERE
|
||||
//minimum pressure before check_pressure(...) should be called
|
||||
|
||||
//Buckling
|
||||
can_buckle = 1
|
||||
buckle_requires_restraints = 1
|
||||
buckle_lying = -1
|
||||
|
||||
/obj/machinery/atmospherics/proc/pipeline_expansion()
|
||||
return null
|
||||
|
||||
|
||||
@@ -509,4 +509,38 @@ for(var/t in test_times)
|
||||
if(bpc & FOOT_RIGHT)
|
||||
covered_parts |= list("r_leg")
|
||||
|
||||
return covered_parts
|
||||
return covered_parts
|
||||
|
||||
|
||||
|
||||
//adapted from http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
|
||||
/proc/heat2colour(temp)
|
||||
return rgb(heat2colour_r(temp), heat2colour_g(temp), heat2colour_b(temp))
|
||||
|
||||
|
||||
/proc/heat2colour_r(temp)
|
||||
temp /= 100
|
||||
if(temp <= 66)
|
||||
. = 255
|
||||
else
|
||||
. = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592))
|
||||
|
||||
|
||||
/proc/heat2colour_g(temp)
|
||||
temp /= 100
|
||||
if(temp <= 66)
|
||||
. = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661))
|
||||
else
|
||||
. = max(0, min(255, 288.1221685293 * ((temp - 60) ** -0.075148492)))
|
||||
|
||||
|
||||
/proc/heat2colour_b(temp)
|
||||
temp /= 100
|
||||
if(temp >= 66)
|
||||
. = 255
|
||||
else
|
||||
if(temp <= 16)
|
||||
. = 0
|
||||
else
|
||||
. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
if(isliving(teleatom))
|
||||
var/mob/living/L = teleatom
|
||||
if(L.buckled)
|
||||
L.buckled.unbuckle()
|
||||
L.buckled.unbuckle_mob()
|
||||
|
||||
destarea.Entered(teleatom)
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
return
|
||||
|
||||
if(target && target.buckled)
|
||||
target.buckled.unbuckle()
|
||||
target.buckled.unbuckle_mob()
|
||||
|
||||
var/list/tempL = L
|
||||
var/attempt = null
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
animation.master = holder
|
||||
target.ExtinguishMob()
|
||||
if(target.buckled)
|
||||
target.buckled.unbuckle()
|
||||
target.buckled.unbuckle_mob()
|
||||
jaunt_disappear(animation, target)
|
||||
target.loc = holder
|
||||
target.notransform=0 //mob is safely inside holder now, no need for protection.
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
if (C_imp_in.handcuffed)
|
||||
var/obj/item/weapon/W = C_imp_in.handcuffed
|
||||
C_imp_in.handcuffed = null
|
||||
if(C_imp_in.buckled && C_imp_in.buckled.buckle_requires_restraints)
|
||||
C_imp_in.buckled.unbuckle_mob()
|
||||
C_imp_in.update_inv_handcuffed(0)
|
||||
if (C_imp_in.client)
|
||||
C_imp_in.client.screen -= W
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
return
|
||||
|
||||
if(user && user.buckled)
|
||||
user.buckled.unbuckle()
|
||||
user.buckled.unbuckle_mob()
|
||||
|
||||
var/list/tempL = L.Copy()
|
||||
var/attempt = null
|
||||
|
||||
@@ -119,6 +119,8 @@
|
||||
user.visible_message("<span class='notice'>[user] cuts [C]'s restraints with [src]!</span>")
|
||||
qdel(C.handcuffed)
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_requires_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed(0)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
|
||||
/obj/structure/stool/bed/chair/janicart/relaymove(mob/user, direction)
|
||||
if(user.stat || user.stunned || user.weakened || user.paralysis)
|
||||
unbuckle()
|
||||
unbuckle_mob()
|
||||
if(istype(user.l_hand, /obj/item/key) || istype(user.r_hand, /obj/item/key))
|
||||
if(!Process_Spacemove(direction))
|
||||
return
|
||||
@@ -221,29 +221,17 @@
|
||||
user << "<span class='notice'>You'll need the keys in one of your hands to drive this [callme].</span>"
|
||||
|
||||
|
||||
/obj/structure/stool/bed/chair/janicart/buckle_mob(mob/M, mob/user)
|
||||
if(M != user || !ismob(M) || get_dist(src, user) > 1 || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon))
|
||||
return
|
||||
|
||||
unbuckle()
|
||||
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M] climbs onto the [callme]!</span>",\
|
||||
"<span class='notice'>You climb onto the [callme]!</span>")
|
||||
M.buckled = src
|
||||
M.loc = loc
|
||||
M.dir = dir
|
||||
M.update_canmove()
|
||||
buckled_mob = M
|
||||
/obj/structure/stool/bed/chair/janicart/post_buckle_mob(mob/living/M)
|
||||
update_mob()
|
||||
add_fingerprint(user)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/structure/stool/bed/chair/janicart/unbuckle()
|
||||
if(buckled_mob)
|
||||
buckled_mob.pixel_x = 0
|
||||
buckled_mob.pixel_y = 0
|
||||
..()
|
||||
/obj/structure/stool/bed/chair/janicart/unbuckle_mob()
|
||||
var/mob/living/M = ..()
|
||||
if(M)
|
||||
M.pixel_x = 0
|
||||
M.pixel_y = 0
|
||||
return M
|
||||
|
||||
|
||||
/obj/structure/stool/bed/chair/janicart/handle_rotation()
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
icon_state = "nest"
|
||||
var/health = 100
|
||||
|
||||
/*
|
||||
/obj/structure/stool/bed/nest/unbuckle_other(mob/user as mob)
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[user.name] pulls [buckled_mob.name] free from the sticky nest!</span>",\
|
||||
@@ -22,8 +23,9 @@
|
||||
spawn(600)
|
||||
if(user && buckled_mob && user.buckled == src)
|
||||
unbuckle()
|
||||
*/
|
||||
|
||||
/obj/structure/stool/bed/nest/buckle_mob(mob/M as mob, mob/user as mob)
|
||||
/obj/structure/stool/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob)
|
||||
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) )
|
||||
return
|
||||
|
||||
@@ -32,7 +34,7 @@
|
||||
if(!istype(user,/mob/living/carbon/alien/humanoid))
|
||||
return
|
||||
|
||||
unbuckle()
|
||||
unbuckle_mob()
|
||||
|
||||
if(M == usr)
|
||||
return
|
||||
@@ -41,24 +43,19 @@
|
||||
"<span class='notice'>[user.name] secretes a thick vile goo, securing [M.name] into [src]!</span>",\
|
||||
"<span class='warning'>[user.name] drenches you in a foul-smelling resin, trapping you in [src]!</span>",\
|
||||
"<span class='notice'>You hear squelching...</span>")
|
||||
M.buckled = src
|
||||
M.loc = src.loc
|
||||
M.dir = src.dir
|
||||
M.update_canmove()
|
||||
M.pixel_y += 1
|
||||
M.pixel_x += 2
|
||||
M.anchored = anchored
|
||||
src.buckled_mob = M
|
||||
src.add_fingerprint(user)
|
||||
src.overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/nest/unbuckle()
|
||||
if(buckled_mob)
|
||||
/obj/structure/stool/bed/nest/post_buckle_mob(mob/living/M)
|
||||
if(M == buckled_mob)
|
||||
M.pixel_y += 1
|
||||
M.pixel_x += 2
|
||||
overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6)
|
||||
else
|
||||
buckled_mob.pixel_y -= 1
|
||||
buckled_mob.pixel_x -= 2
|
||||
overlays.Cut()
|
||||
..()
|
||||
overlays.Cut()
|
||||
|
||||
|
||||
|
||||
/obj/structure/stool/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
var/aforce = W.force
|
||||
|
||||
@@ -11,17 +11,14 @@
|
||||
name = "bed"
|
||||
desc = "This is used to lie in, sleep in or strap on."
|
||||
icon_state = "bed"
|
||||
var/mob/living/buckled_mob
|
||||
can_buckle = 1
|
||||
buckle_lying = 1
|
||||
|
||||
/obj/structure/stool/bed/alien
|
||||
name = "resting contraption"
|
||||
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
|
||||
icon_state = "abed"
|
||||
|
||||
/obj/structure/stool/bed/Destroy()
|
||||
unbuckle()
|
||||
..()
|
||||
|
||||
/obj/structure/stool/bed/Move(atom/newloc, direct) //Some bed children move
|
||||
. = ..()
|
||||
if(buckled_mob)
|
||||
@@ -47,99 +44,12 @@
|
||||
/obj/structure/stool/bed/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/structure/stool/bed/attack_hand(mob/user as mob)
|
||||
manual_unbuckle(user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/attack_animal(var/mob/living/simple_animal/M)//No more buckling hostile mobs to chairs to render them immobile forever
|
||||
if(M.environment_smash)
|
||||
new /obj/item/stack/sheet/metal(src.loc)
|
||||
qdel(src)
|
||||
return
|
||||
manual_unbuckle(M)
|
||||
|
||||
/obj/structure/stool/bed/MouseDrop_T(mob/M as mob, mob/user as mob)
|
||||
if(!istype(M)) return
|
||||
buckle_mob(M, user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/afterbuckle(mob/M as mob) // Called after somebody buckled / unbuckled
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/unbuckle()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
|
||||
var/mob/M = buckled_mob
|
||||
buckled_mob = null
|
||||
|
||||
M.newtonian_move(inertia_dir)
|
||||
afterbuckle(M)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/manual_unbuckle(mob/user as mob)
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src)
|
||||
if(buckled_mob != user)
|
||||
if(!(user.buckled))
|
||||
unbuckle_other(user)
|
||||
else
|
||||
user << "<span class='notice'>You can't reach [src]!</span>"
|
||||
else
|
||||
unbuckle_myself(user)
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/structure/stool/bed/proc/unbuckle_other(mob/user as mob)
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[buckled_mob.name] was unbuckled by [user.name]!</span>",\
|
||||
"You were unbuckled from [src] by [user.name].",\
|
||||
"You hear metal clanking.")
|
||||
unbuckle()
|
||||
|
||||
|
||||
/obj/structure/stool/bed/proc/unbuckle_myself(mob/user as mob)
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[buckled_mob.name] unbuckled!</span>",\
|
||||
"You unbuckle yourself from [src].",\
|
||||
"You hear metal clanking.")
|
||||
unbuckle()
|
||||
|
||||
/obj/structure/stool/bed/proc/buckle_mob(mob/M as mob, mob/user as mob)
|
||||
if (!ticker)
|
||||
user << "You can't buckle anyone in before the game starts."
|
||||
if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || user.lying || user.stat || M.buckled || istype(user, /mob/living/silicon/pai) || M.anchored)
|
||||
return
|
||||
|
||||
if (istype(M, /mob/living/carbon/slime) || istype(M, /mob/living/simple_animal/slime))
|
||||
user << "\The [M] is too squishy to buckle in."
|
||||
return
|
||||
|
||||
unbuckle()
|
||||
|
||||
if (M == usr)
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] buckles in!</span>",\
|
||||
"You buckle yourself to [src].",\
|
||||
"You hear metal clanking")
|
||||
else
|
||||
M.visible_message(\
|
||||
"<span class='notice'>[M.name] is buckled in to [src] by [user.name]!</span>",\
|
||||
"You are buckled in to [src] by [user.name].",\
|
||||
"You hear metal clanking")
|
||||
M.buckled = src
|
||||
M.anchored = anchored
|
||||
M.loc = src.loc
|
||||
M.dir = src.dir
|
||||
M.update_canmove()
|
||||
src.buckled_mob = M
|
||||
src.add_fingerprint(user)
|
||||
|
||||
afterbuckle(M)
|
||||
return
|
||||
|
||||
/*
|
||||
* Roller beds
|
||||
@@ -151,18 +61,19 @@
|
||||
anchored = 0
|
||||
var/const/buckled_pixel_y_offset = 6 //Mobs buckled will have their pixel_y offset by this much
|
||||
|
||||
/obj/structure/stool/bed/roller/afterbuckle(mob/M as mob)
|
||||
if(buckled_mob)
|
||||
|
||||
/obj/structure/stool/bed/roller/post_buckle_mob(mob/M)
|
||||
if(M == buckled_mob)
|
||||
density = 1
|
||||
icon_state = "up"
|
||||
M.pixel_y = initial(M.pixel_y)
|
||||
else
|
||||
density = 0
|
||||
icon_state = "down"
|
||||
M.pixel_y = initial(M.pixel_y)
|
||||
if(M.lying)
|
||||
M.pixel_y -= buckled_pixel_y_offset
|
||||
|
||||
if(buckled_mob)
|
||||
buckled_mob.pixel_y = initial(buckled_mob.pixel_y)
|
||||
if(buckled_mob.lying)
|
||||
buckled_mob.pixel_y -= buckled_pixel_y_offset
|
||||
|
||||
|
||||
/obj/item/roller
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "chair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "chair"
|
||||
buckle_lying = 0 //you sit in a chair, not lay
|
||||
|
||||
/obj/structure/stool/bed/chair/New()
|
||||
..()
|
||||
@@ -68,10 +69,6 @@
|
||||
return
|
||||
spin()
|
||||
|
||||
/obj/structure/stool/bed/chair/MouseDrop_T(mob/M as mob, mob/user as mob)
|
||||
if(!istype(M)) return
|
||||
buckle_mob(M, user)
|
||||
return
|
||||
|
||||
// Chair types
|
||||
/obj/structure/stool/bed/chair/wood/normal
|
||||
@@ -105,12 +102,13 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/afterbuckle()
|
||||
/obj/structure/stool/bed/chair/comfy/post_buckle_mob(mob/living/M)
|
||||
if(buckled_mob)
|
||||
overlays += armrest
|
||||
else
|
||||
overlays -= armrest
|
||||
|
||||
|
||||
/obj/structure/stool/bed/chair/comfy/brown
|
||||
color = rgb(255,113,0)
|
||||
|
||||
|
||||
@@ -211,7 +211,6 @@
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
var/energy = 0
|
||||
var/obj/effect/spacevine_controller/master = null
|
||||
var/mob/living/buckled_mob
|
||||
var/list/mutations = list()
|
||||
|
||||
/obj/effect/spacevine/New()
|
||||
@@ -285,7 +284,7 @@
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user)) qdel(src)
|
||||
else
|
||||
manual_unbuckle(user)
|
||||
user_unbuckle_mob(user,user)
|
||||
return
|
||||
//Plant-b-gone damage is handled in its entry in chemistry-reagents.dm
|
||||
..()
|
||||
@@ -298,46 +297,16 @@
|
||||
/obj/effect/spacevine/attack_hand(mob/user as mob)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_hit(src, user)
|
||||
manual_unbuckle(user)
|
||||
user_unbuckle_mob(user, user)
|
||||
|
||||
|
||||
/obj/effect/spacevine/attack_paw(mob/living/user as mob)
|
||||
user.do_attack_animation(src)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_hit(src, user)
|
||||
manual_unbuckle(user)
|
||||
user_unbuckle_mob(user,user)
|
||||
|
||||
/obj/effect/spacevine/proc/unbuckle()
|
||||
if(buckled_mob)
|
||||
if(buckled_mob.buckled == src) //this is probably unneccesary, but it doesn't hurt
|
||||
buckled_mob.buckled = null
|
||||
buckled_mob.anchored = initial(buckled_mob.anchored)
|
||||
buckled_mob.update_canmove()
|
||||
buckled_mob = null
|
||||
return
|
||||
|
||||
/obj/effect/spacevine/proc/manual_unbuckle(mob/user as mob)
|
||||
if(buckled_mob)
|
||||
if(prob(50))
|
||||
if(buckled_mob.buckled == src)
|
||||
if(buckled_mob != user)
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[user.name] frees [buckled_mob.name] from the vines.</span>",\
|
||||
"<span class='notice'>[user.name] frees you from the vines.</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
else
|
||||
buckled_mob.visible_message(\
|
||||
"<span class='notice'>[buckled_mob.name] struggles free of the vines.</span>",\
|
||||
"<span class='notice'>You untangle the vines from around yourself.</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
unbuckle()
|
||||
else
|
||||
var/text = pick("rip","tear","pull")
|
||||
user.visible_message(\
|
||||
"<span class='notice'>[user.name] [text]s at the vines.</span>",\
|
||||
"<span class='notice'>You [text] at the vines.</span>",\
|
||||
"<span class='warning'>You hear shredding and ripping.</span>")
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller
|
||||
var/list/obj/effect/spacevine/vines = list()
|
||||
@@ -446,18 +415,15 @@
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_grow(src)
|
||||
|
||||
/obj/effect/spacevine/proc/buckle_mob()
|
||||
/obj/effect/spacevine/buckle_mob()
|
||||
if(!buckled_mob && prob(25))
|
||||
for(var/mob/living/carbon/V in src.loc)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_buckle(src, V)
|
||||
if((V.stat != DEAD) && (V.buckled != src)) //if mob not dead or captured
|
||||
V.buckled = src
|
||||
V.loc = src.loc
|
||||
V.update_canmove()
|
||||
src.buckled_mob = V
|
||||
if((V.stat != DEAD) && (V.buckled != src)) //not dead or captured
|
||||
V << "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>"
|
||||
break //only capture one mob at a time.
|
||||
..(V)
|
||||
break //only capture one mob at a time
|
||||
|
||||
/obj/effect/spacevine/proc/spread()
|
||||
var/direction = pick(cardinal)
|
||||
|
||||
@@ -314,6 +314,8 @@
|
||||
update_inv_wear_mask(0)
|
||||
else if(I == handcuffed)
|
||||
handcuffed = null
|
||||
if(buckled && buckled.buckle_requires_restraints)
|
||||
buckled.unbuckle_mob()
|
||||
update_inv_handcuffed(0)
|
||||
else if(I == legcuffed)
|
||||
legcuffed = null
|
||||
|
||||
@@ -114,7 +114,7 @@ emp_act
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
if(buckled)
|
||||
buckled.unbuckle()
|
||||
buckled.unbuckle_mob()
|
||||
src.loc = picked
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -588,6 +588,8 @@ Sorry Giacom. Please don't be mad :(
|
||||
if(C.handcuffed)
|
||||
C.handcuffed.loc = C.loc
|
||||
C.handcuffed = null
|
||||
if(C.buckled && C.buckled.buckle_requires_restraints)
|
||||
C.buckled.unbuckle_mob()
|
||||
C.update_inv_handcuffed(0)
|
||||
return
|
||||
if(C.legcuffed)
|
||||
@@ -646,13 +648,13 @@ Sorry Giacom. Please don't be mad :(
|
||||
return
|
||||
C.visible_message("<span class='danger'>[C] manages to unbuckle themself!</span>", \
|
||||
"<span class='notice'>You successfully unbuckle yourself.</span>")
|
||||
C.buckled.manual_unbuckle(C)
|
||||
C.buckled.user_unbuckle_mob(C,C)
|
||||
else
|
||||
C << "<span class='warning'>You fail to unbuckle yourself!</span>"
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
L.buckled.user_unbuckle_mob(L,L)
|
||||
else
|
||||
L.buckled.manual_unbuckle(L)
|
||||
L.buckled.user_unbuckle_mob(L,L)
|
||||
|
||||
//Breaking out of a container (Locker, sleeper, cryo...)
|
||||
else if(loc && istype(loc, /obj) && !isturf(loc))
|
||||
|
||||
@@ -768,11 +768,12 @@ var/list/slot_equipment_priority = list( \
|
||||
if(restrained()) return 0
|
||||
return 1
|
||||
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
//Robots and brains have their own version so don't worry about them
|
||||
/mob/proc/update_canmove()
|
||||
var/ko = weakened || paralysis || stat || (status_flags & FAKEDEATH)
|
||||
var/bed = !(buckled && istype(buckled, /obj/structure/stool/bed/chair))
|
||||
var/buckle_lying = !(buckled && !buckled.buckle_lying)
|
||||
if(ko || resting || stunned)
|
||||
drop_r_hand()
|
||||
drop_l_hand()
|
||||
@@ -780,7 +781,7 @@ var/list/slot_equipment_priority = list( \
|
||||
lying = 0
|
||||
canmove = 1
|
||||
if(buckled)
|
||||
lying = 90 * bed
|
||||
lying = 90*buckle_lying
|
||||
else
|
||||
if((ko || resting) && !lying)
|
||||
fall(ko)
|
||||
@@ -793,6 +794,7 @@ var/list/slot_equipment_priority = list( \
|
||||
regenerate_icons()
|
||||
return canmove
|
||||
|
||||
|
||||
/mob/proc/fall(var/forced)
|
||||
drop_l_hand()
|
||||
drop_r_hand()
|
||||
|
||||
@@ -485,6 +485,7 @@
|
||||
#include "code\game\mecha\medical\odysseus.dm"
|
||||
#include "code\game\mecha\working\ripley.dm"
|
||||
#include "code\game\mecha\working\working.dm"
|
||||
#include "code\game\objects\buckling.dm"
|
||||
#include "code\game\objects\empulse.dm"
|
||||
#include "code\game\objects\explosion.dm"
|
||||
#include "code\game\objects\items.dm"
|
||||
|
||||
Reference in New Issue
Block a user