mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
[MIRROR] Gargoyle adjustments & fixes (#11123)
Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
3693f3ab8c
commit
df62120096
@@ -2,7 +2,6 @@
|
||||
var/energy = 100
|
||||
var/transformed = FALSE
|
||||
var/paused = FALSE
|
||||
var/paused_loc
|
||||
var/cooldown
|
||||
|
||||
var/mob/living/carbon/human/gargoyle //easy reference
|
||||
@@ -18,54 +17,61 @@
|
||||
if (!ishuman(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
gargoyle = parent
|
||||
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation)
|
||||
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_pause)
|
||||
add_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_checkenergy)
|
||||
RegisterSignal(gargoyle, COMSIG_GARGOYLE_TRANSFORMATION, PROC_REF(gargoyle_transformation))
|
||||
RegisterSignal(gargoyle, COMSIG_GARGOYLE_PAUSE, PROC_REF(gargoyle_pause))
|
||||
RegisterSignal(gargoyle, COMSIG_GARGOYLE_CHECK_ENERGY, PROC_REF(gargoyle_checkenergy))
|
||||
add_verb(parent,/mob/living/carbon/human/proc/gargoyle_transformation)
|
||||
add_verb(parent,/mob/living/carbon/human/proc/gargoyle_pause)
|
||||
add_verb(parent,/mob/living/carbon/human/proc/gargoyle_checkenergy)
|
||||
|
||||
RegisterSignal(gargoyle, COMSIG_LIVING_LIFE, PROC_REF(process_component))
|
||||
/datum/component/gargoyle/RegisterWithParent()
|
||||
RegisterSignal(parent, COMSIG_GARGOYLE_TRANSFORMATION, PROC_REF(gargoyle_transformation))
|
||||
RegisterSignal(parent, COMSIG_GARGOYLE_PAUSE, PROC_REF(gargoyle_pause))
|
||||
RegisterSignal(parent, COMSIG_GARGOYLE_CHECK_ENERGY, PROC_REF(gargoyle_checkenergy))
|
||||
|
||||
RegisterSignal(parent, COMSIG_LIVING_LIFE, PROC_REF(process_component))
|
||||
|
||||
/datum/component/gargoyle/UnregisterFromParent()
|
||||
UnregisterSignal(parent, COMSIG_GARGOYLE_TRANSFORMATION)
|
||||
UnregisterSignal(parent, COMSIG_GARGOYLE_PAUSE)
|
||||
UnregisterSignal(parent, COMSIG_GARGOYLE_CHECK_ENERGY)
|
||||
UnregisterSignal(parent, COMSIG_LIVING_LIFE)
|
||||
UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) //happens if gargoyle_pause is used
|
||||
|
||||
/datum/component/gargoyle/proc/process_component()
|
||||
if (QDELETED(gargoyle))
|
||||
if(QDELETED(gargoyle))
|
||||
return
|
||||
if (paused && gargoyle.loc != paused_loc)
|
||||
unpause()
|
||||
if (energy > 0)
|
||||
if (!transformed && !paused)
|
||||
energy = max(0,energy-0.05)
|
||||
else if (!transformed && isturf(gargoyle.loc))
|
||||
gargoyle.gargoyle_transformation()
|
||||
if (transformed)
|
||||
if (!statue)
|
||||
if(transformed)
|
||||
if(!statue)
|
||||
transformed = FALSE
|
||||
if(paused) //We somehow lost our energy while paused.
|
||||
unpause()
|
||||
statue.damage(-0.5)
|
||||
energy = min(energy+0.3, 100)
|
||||
|
||||
//This is where we do all the 'make sure we don't die in statue form' stuff (unless you succumb or take MASSIVE damage.)
|
||||
//Bloodloss will still kill us, but if we are patient enough, we'll survive most other stuff.
|
||||
//If we had 150 brute (crit for most species) it'll take 3000 seconds (50 minutes) to heal back to full hp...So yes, while you can heal, it's not a good idea.
|
||||
if(gargoyle.health < gargoyle.getMaxHealth())
|
||||
gargoyle.adjustBruteLoss(-0.1)
|
||||
gargoyle.adjustFireLoss(-0.1)
|
||||
gargoyle.adjustOxyLoss(-1) //So you don't suffocate to death.
|
||||
gargoyle.adjustToxLoss(-0.1)
|
||||
gargoyle.adjustCloneLoss(-0.02) //yeah this is uber slow, no cheese allowed by combining it with bad genetics.
|
||||
return //Early return. If we're transformed, we can stop, we don't need to check anything else.
|
||||
if(energy > 0)
|
||||
if(!transformed && !paused)
|
||||
energy = max(0,energy-0.05)
|
||||
else if(!transformed && isturf(gargoyle.loc))
|
||||
gargoyle.gargoyle_transformation()
|
||||
|
||||
/datum/component/gargoyle/Destroy(force = FALSE)
|
||||
UnregisterSignal(gargoyle, COMSIG_GARGOYLE_TRANSFORMATION)
|
||||
UnregisterSignal(gargoyle, COMSIG_GARGOYLE_PAUSE)
|
||||
UnregisterSignal(gargoyle, COMSIG_GARGOYLE_CHECK_ENERGY)
|
||||
UnregisterSignal(gargoyle, COMSIG_LIVING_LIFE)
|
||||
gargoyle = null
|
||||
statue = null
|
||||
. = ..()
|
||||
|
||||
/datum/component/gargoyle/proc/unpause()
|
||||
SIGNAL_HANDLER
|
||||
if (!paused || transformed)
|
||||
paused = FALSE
|
||||
paused_loc = null
|
||||
UnregisterSignal(gargoyle, COMSIG_ATOM_ENTERING)
|
||||
return
|
||||
if (gargoyle?.loc != paused_loc)
|
||||
paused = FALSE
|
||||
paused_loc = null
|
||||
energy = max(energy - 5, 0)
|
||||
if (energy == 0)
|
||||
gargoyle.gargoyle_transformation()
|
||||
UnregisterSignal(gargoyle, COMSIG_ATOM_ENTERING)
|
||||
paused = FALSE
|
||||
UnregisterSignal(gargoyle, COMSIG_MOVABLE_MOVED)
|
||||
return
|
||||
|
||||
//verbs or action buttons...?
|
||||
/mob/living/carbon/human/proc/gargoyle_transformation()
|
||||
@@ -76,17 +82,18 @@
|
||||
|
||||
|
||||
/datum/component/gargoyle/proc/gargoyle_transformation()
|
||||
if (gargoyle.stat == DEAD)
|
||||
SIGNAL_HANDLER
|
||||
if(gargoyle.stat == DEAD)
|
||||
return
|
||||
if (energy <= 0 && isturf(gargoyle.loc))
|
||||
if(energy <= 0 && isturf(gargoyle.loc))
|
||||
to_chat(gargoyle, span_danger("You suddenly turn into a [identifier] as you run out of energy!"))
|
||||
else if (cooldown > world.time)
|
||||
else if(cooldown > world.time)
|
||||
var/time_to_wait = (cooldown - world.time) / (1 SECONDS)
|
||||
to_chat(gargoyle, span_warning("You can't transform just yet again! Wait for another [round(time_to_wait,0.1)] seconds!"))
|
||||
return
|
||||
if (istype(gargoyle.loc, /obj/structure/gargoyle))
|
||||
if(istype(gargoyle.loc, /obj/structure/gargoyle))
|
||||
qdel(gargoyle.loc)
|
||||
else if (isturf(gargoyle.loc))
|
||||
else if(isturf(gargoyle.loc))
|
||||
new /obj/structure/gargoyle(gargoyle.loc, gargoyle)
|
||||
|
||||
/mob/living/carbon/human/proc/gargoyle_pause()
|
||||
@@ -96,14 +103,14 @@
|
||||
SEND_SIGNAL(src, COMSIG_GARGOYLE_PAUSE)
|
||||
|
||||
/datum/component/gargoyle/proc/gargoyle_pause()
|
||||
if (gargoyle.stat)
|
||||
SIGNAL_HANDLER
|
||||
if(gargoyle.stat)
|
||||
return
|
||||
|
||||
if (!transformed && !paused)
|
||||
if(!transformed && !paused)
|
||||
paused = TRUE
|
||||
paused_loc = gargoyle.loc
|
||||
RegisterSignal(gargoyle, COMSIG_ATOM_ENTERING, /datum/component/gargoyle/proc/unpause)
|
||||
to_chat(gargoyle, span_notice("You start conserving your energy."))
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, /datum/component/gargoyle/proc/unpause)
|
||||
to_chat(parent, span_notice("You start conserving your energy."))
|
||||
|
||||
/mob/living/carbon/human/proc/gargoyle_checkenergy()
|
||||
set name = "Gargoyle - Check Energy"
|
||||
@@ -112,4 +119,5 @@
|
||||
SEND_SIGNAL(src, COMSIG_GARGOYLE_CHECK_ENERGY)
|
||||
|
||||
/datum/component/gargoyle/proc/gargoyle_checkenergy()
|
||||
to_chat(gargoyle, span_notice("You have [round(energy,0.01)] energy remaining. It is currently [paused ? "stable" : (transformed ? "increasing" : "decreasing")]."))
|
||||
SIGNAL_HANDLER
|
||||
to_chat(parent, span_notice("You have [round(energy,0.01)] energy remaining. It is currently [paused ? "stable" : (transformed ? "increasing" : "decreasing")]."))
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "A very lifelike carving."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/mob/living/carbon/human/gargoyle
|
||||
var/datum/weakref/WR_gargoyle
|
||||
var/initial_sleep
|
||||
var/initial_blind
|
||||
var/initial_is_shifted
|
||||
@@ -27,13 +27,13 @@
|
||||
|
||||
/obj/structure/gargoyle/Initialize(mapload, var/mob/living/carbon/human/H, var/ident_ovr, var/mat_ovr, var/adj_ovr, var/tint_ovr, var/revert = TRUE, var/discard_clothes)
|
||||
. = ..()
|
||||
if (isspace(loc) || isopenspace(loc))
|
||||
if(isspace(loc) || isopenspace(loc))
|
||||
anchored = FALSE
|
||||
if (!istype(H) || !isturf(H.loc))
|
||||
if(!istype(H) || !isturf(H.loc))
|
||||
return
|
||||
var/datum/component/gargoyle/comp = H.GetComponent(/datum/component/gargoyle)
|
||||
var/tint = "#FFFFFF"
|
||||
if (comp)
|
||||
if(comp)
|
||||
comp.cooldown = world.time + (15 SECONDS)
|
||||
comp.statue = src
|
||||
comp.transformed = TRUE
|
||||
@@ -42,25 +42,25 @@
|
||||
material = length(comp.material) > 0 ? comp.material : initial(material)
|
||||
tint = length(comp.tint) > 0 ? comp.tint : initial(comp.tint)
|
||||
adjective = length(comp.adjective) > 0 ? comp.adjective : initial(adjective)
|
||||
if (copytext_char(adjective, -1) != "s")
|
||||
if(copytext_char(adjective, -1) != "s")
|
||||
adjective += "s"
|
||||
gargoyle = H
|
||||
WR_gargoyle = WEAKREF(H)
|
||||
|
||||
if (H.get_effective_size(TRUE) < 0.5) // "So small! I can step over it!"
|
||||
if(H.get_effective_size(TRUE) < 0.5) // "So small! I can step over it!"
|
||||
density = FALSE
|
||||
|
||||
if (ident_ovr)
|
||||
if(ident_ovr)
|
||||
identifier = ident_ovr
|
||||
if (mat_ovr)
|
||||
if(mat_ovr)
|
||||
material = mat_ovr
|
||||
if (adj_ovr)
|
||||
if(adj_ovr)
|
||||
adjective = adj_ovr
|
||||
if (tint_ovr)
|
||||
if(tint_ovr)
|
||||
tint = tint_ovr
|
||||
|
||||
if (H.tail_style?.clip_mask_state)
|
||||
if(H.tail_style?.clip_mask_state)
|
||||
tail_lower_dirs.Cut()
|
||||
else if (H.tail_style)
|
||||
else if(H.tail_style)
|
||||
tail_lower_dirs = H.tail_style.lower_layer_dirs.Copy()
|
||||
tail_alt = H.tail_alt ? TAIL_UPPER_LAYER_HIGH : TAIL_UPPER_LAYER
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
stored_examine = H.examine(H)
|
||||
description_fluff = H.get_description_fluff()
|
||||
|
||||
if (H.buckled)
|
||||
if(H.buckled)
|
||||
H.buckled.unbuckle_mob(H, TRUE)
|
||||
//icon = H.icon
|
||||
//copy_overlays(H)
|
||||
@@ -89,20 +89,20 @@
|
||||
var/list/body_layers = HUMAN_BODY_LAYERS
|
||||
var/list/other_layers = HUMAN_OTHER_LAYERS
|
||||
for (var/i = 1; i <= length(H.overlays_standing); i++)
|
||||
if (i in other_layers)
|
||||
if(i in other_layers)
|
||||
continue
|
||||
if (discard_clothes && !(i in body_layers))
|
||||
if(discard_clothes && !(i in body_layers))
|
||||
continue
|
||||
if (istype(H.overlays_standing[i], /image) && (i in body_layers))
|
||||
if(istype(H.overlays_standing[i], /image) && (i in body_layers))
|
||||
var/image/old_image = H.overlays_standing[i]
|
||||
var/image/new_image = image(old_image)
|
||||
if (i == TAIL_LOWER_LAYER || i == TAIL_UPPER_LAYER || i == TAIL_UPPER_LAYER_HIGH)
|
||||
if(i == TAIL_LOWER_LAYER || i == TAIL_UPPER_LAYER || i == TAIL_UPPER_LAYER_HIGH)
|
||||
tail_image = new_image
|
||||
new_image.color = tint_color
|
||||
new_image.layer = old_image.layer
|
||||
add_overlay(new_image)
|
||||
else
|
||||
if (!isnull(H.overlays_standing[i]))
|
||||
if(!isnull(H.overlays_standing[i]))
|
||||
add_overlay(H.overlays_standing[i])
|
||||
|
||||
initial_sleep = H.sleeping
|
||||
@@ -116,10 +116,9 @@
|
||||
initial_lying = H.lying
|
||||
initial_lying_prev = H.lying_prev
|
||||
H.sdisabilities |= MUTE
|
||||
if (H.appearance_flags & PIXEL_SCALE)
|
||||
if(H.appearance_flags & PIXEL_SCALE)
|
||||
appearance_flags |= PIXEL_SCALE
|
||||
wagging = H.wagging
|
||||
H.transforming = TRUE
|
||||
flapping = H.flapping
|
||||
H.toggle_tail(FALSE, FALSE)
|
||||
H.toggle_wing(FALSE, FALSE)
|
||||
@@ -127,7 +126,6 @@
|
||||
H.forceMove(src)
|
||||
H.SetBlinded(0)
|
||||
H.SetSleeping(0)
|
||||
H.status_flags |= GODMODE
|
||||
H.updatehealth()
|
||||
H.canmove = 0
|
||||
|
||||
@@ -137,51 +135,66 @@
|
||||
|
||||
/obj/structure/gargoyle/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
if (!gargoyle)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(!gargoyle)
|
||||
return ..()
|
||||
if (can_revert)
|
||||
if(can_revert)
|
||||
unpetrify(deleting = FALSE) //don't delete if we're already deleting!
|
||||
else
|
||||
visible_message(span_warning("The [identifier] loses shape and crumbles into a pile of [material]!"))
|
||||
WR_gargoyle = null
|
||||
. = ..()
|
||||
|
||||
/obj/structure/gargoyle/process()
|
||||
if (!gargoyle)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(!gargoyle)
|
||||
qdel(src)
|
||||
if (gargoyle.loc != src)
|
||||
return
|
||||
if(gargoyle.stat == DEAD) //died while in statue state.
|
||||
unpetrify(deal_damage = TRUE, deleting = TRUE)
|
||||
return
|
||||
if(gargoyle.loc != src)
|
||||
can_revert = TRUE //something's gone wrong, they escaped, lets not qdel them
|
||||
unpetrify(deal_damage = FALSE, deleting = TRUE)
|
||||
|
||||
/obj/structure/gargoyle/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||
if(temperature > T0C + 1600) //Bingle says the burning point of rock is between 600 to 1600C...Let's use the highest range.
|
||||
damage(temperature/(T0C + 1600)) //1 damage per 1600C
|
||||
return
|
||||
|
||||
/obj/structure/gargoyle/examine_icon()
|
||||
var/icon/examine_icon = icon(icon=src.icon, icon_state=src.icon_state, dir=SOUTH, frame=1, moving=0)
|
||||
examine_icon.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
return examine_icon
|
||||
|
||||
/obj/structure/gargoyle/get_description_info()
|
||||
if (gargoyle)
|
||||
if (isspace(loc) || isopenspace(loc))
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(gargoyle)
|
||||
if(isspace(loc) || isopenspace(loc))
|
||||
return
|
||||
return "It can be [anchored ? "un" : ""]anchored with a wrench."
|
||||
|
||||
/obj/structure/gargoyle/examine(mob/user)
|
||||
. = ..()
|
||||
if (gargoyle && stored_examine)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(gargoyle && stored_examine)
|
||||
. += "The [identifier] seems to have a bit more to them..."
|
||||
. += stored_examine
|
||||
return
|
||||
|
||||
/obj/structure/gargoyle/proc/unpetrify(var/deal_damage = TRUE, var/deleting = FALSE)
|
||||
if (!gargoyle)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(!gargoyle)
|
||||
return
|
||||
var/datum/component/gargoyle/comp = gargoyle.GetComponent(/datum/component/gargoyle)
|
||||
if (comp)
|
||||
if(comp)
|
||||
comp.cooldown = world.time + (15 SECONDS)
|
||||
comp.statue = null
|
||||
comp.transformed = FALSE
|
||||
else
|
||||
if (was_rayed)
|
||||
if(was_rayed)
|
||||
remove_verb(gargoyle,/mob/living/carbon/human/proc/gargoyle_transformation)
|
||||
if (gargoyle.loc == src)
|
||||
if(gargoyle.loc == src)
|
||||
gargoyle.forceMove(loc)
|
||||
gargoyle.transform = transform
|
||||
gargoyle.pixel_x = pixel_x
|
||||
@@ -193,15 +206,13 @@
|
||||
gargoyle.toggle_tail(wagging, FALSE)
|
||||
gargoyle.toggle_wing(flapping, FALSE)
|
||||
gargoyle.sdisabilities &= ~MUTE //why is there no ADD_TRAIT etc here that's actually ussssed
|
||||
gargoyle.status_flags &= ~GODMODE
|
||||
gargoyle.SetBlinded(initial_blind)
|
||||
gargoyle.SetSleeping(initial_sleep)
|
||||
gargoyle.transforming = FALSE
|
||||
gargoyle.canmove = 1
|
||||
gargoyle.update_canmove()
|
||||
var/hurtmessage = ""
|
||||
if (deal_damage)
|
||||
if (obj_integrity < original_int)
|
||||
if(deal_damage)
|
||||
if(obj_integrity < original_int)
|
||||
var/f = (original_int - obj_integrity) / 10
|
||||
for (var/x in 1 to 10)
|
||||
gargoyle.adjustBruteLoss(f)
|
||||
@@ -210,7 +221,7 @@
|
||||
alpha = 0
|
||||
gargoyle.visible_message(span_warning("[gargoyle]'s skin rapidly reverts, returning them to normal!"), span_warning("Your skin reverts, freeing your movement once more![hurtmessage]"))
|
||||
gargoyle = null
|
||||
if (deleting)
|
||||
if(deleting)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/gargoyle/return_air()
|
||||
@@ -224,7 +235,7 @@
|
||||
return air
|
||||
|
||||
/obj/structure/gargoyle/proc/damage(var/damage)
|
||||
if (was_rayed)
|
||||
if(was_rayed)
|
||||
return //gargoyle quick regenerates, the others don't, so let's not have them getting too damaged
|
||||
obj_integrity = min(obj_integrity-damage, max_integrity)
|
||||
if(obj_integrity <= 0)
|
||||
@@ -239,13 +250,14 @@
|
||||
damage(damage)
|
||||
|
||||
/obj/structure/gargoyle/attackby(var/obj/item/W as obj, var/mob/living/user as mob)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(W.is_wrench())
|
||||
if (isspace(loc) || isopenspace(loc))
|
||||
if(isspace(loc) || isopenspace(loc))
|
||||
to_chat(user, span_warning("You can't anchor that here!"))
|
||||
anchored = FALSE
|
||||
return ..()
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if (do_after(user, (2 SECONDS) * W.toolspeed, target = src))
|
||||
if(do_after(user, (2 SECONDS) * W.toolspeed, target = src))
|
||||
to_chat(user, span_notice("You [anchored ? "un" : ""]anchor the [src]."))
|
||||
anchored = !anchored
|
||||
else if(!isrobot(user) && gargoyle && gargoyle.vore_selected && gargoyle.trash_catching)
|
||||
@@ -257,7 +269,7 @@
|
||||
user.drop_item()
|
||||
W.forceMove(gargoyle.vore_selected)
|
||||
return
|
||||
else if (!(W.flags & NOBLUDGEON))
|
||||
else if(!(W.flags & NOBLUDGEON))
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
user.do_attack_animation(src)
|
||||
@@ -274,12 +286,15 @@
|
||||
add_overlay(tail_image)
|
||||
|
||||
/obj/structure/gargoyle/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR)
|
||||
if(istype(AM,/obj/item) && gargoyle && gargoyle.vore_selected && gargoyle.trash_catching)
|
||||
var/mob/living/carbon/human/gargoyle = WR_gargoyle.resolve()
|
||||
if(!gargoyle)
|
||||
return
|
||||
if(istype(AM,/obj/item) && gargoyle.vore_selected && gargoyle.trash_catching)
|
||||
var/obj/item/I = AM
|
||||
if(gargoyle.adminbus_trash || is_type_in_list(I, GLOB.edible_trash) && I.trash_eatable && !is_type_in_list(I, GLOB.item_vore_blacklist))
|
||||
gargoyle.hitby(AM, speed)
|
||||
return
|
||||
else if(isliving(AM) && gargoyle)
|
||||
else if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(gargoyle.throw_vore && L.throw_vore && gargoyle.can_be_drop_pred && L.can_be_drop_prey)
|
||||
var/drop_prey_temp = FALSE
|
||||
|
||||
@@ -17,18 +17,16 @@
|
||||
|
||||
if(losebreath>0) //Suffocating so do not take a breath
|
||||
AdjustLosebreath(-1)
|
||||
if (prob(10) && !isbelly(loc)) //Gasp per 10 ticks? Sounds about right. //VOREStation Add
|
||||
if (prob(10) && !isbelly(loc)) //Gasp per 10 ticks? Sounds about right.
|
||||
spawn emote("gasp")
|
||||
else
|
||||
//Okay, we can breathe, now check if we can get air
|
||||
breath = get_breath_from_internal() //First, check for air from internals
|
||||
//VOREStation Add - Respirocytes as a NIF implant
|
||||
if(!breath && ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
if(H.nif && H.nif.flag_check(NIF_H_SPAREBREATH,NIF_FLAGS_HEALTH))
|
||||
var/datum/nifsoft/spare_breath/SB = H.nif.imp_check(NIF_SPAREBREATH)
|
||||
breath = SB.resp_breath()
|
||||
//VOREStation Add End
|
||||
if(!breath)
|
||||
breath = get_breath_from_environment() //No breath from internals so let's try to get air from our location
|
||||
if(!breath)
|
||||
|
||||
@@ -86,11 +86,9 @@
|
||||
|
||||
var/name_ender = ""
|
||||
if(!((skip_gear & EXAMINE_SKIPJUMPSUIT) && (skip_body & EXAMINE_SKIPFACE)))
|
||||
//VOREStation Add Start
|
||||
if(custom_species)
|
||||
name_ender = ", a " + span_bold("[src.custom_species]")
|
||||
else if(looks_synth)
|
||||
//VOREStation Add End
|
||||
var/use_gender = "a synthetic"
|
||||
if(gender == MALE)
|
||||
use_gender = "an android"
|
||||
@@ -275,7 +273,6 @@
|
||||
if(suiciding)
|
||||
msg += span_warning("[T.He] appears to have commited suicide... there is no hope of recovery.")
|
||||
|
||||
//VOREStation Add
|
||||
var/list/vorestrings = list()
|
||||
vorestrings += examine_weight()
|
||||
vorestrings += examine_nutrition()
|
||||
@@ -289,7 +286,6 @@
|
||||
if(entry == "" || entry == null)
|
||||
vorestrings -= entry
|
||||
msg += vorestrings
|
||||
//VOREStation Add End
|
||||
|
||||
if(mSmallsize in mutations)
|
||||
msg += "[T.He] [T.is] very short!"
|
||||
@@ -318,14 +314,12 @@
|
||||
msg += span_deadsay("[T.He] [T.is] [ssd_msg]. It doesn't look like [T.he] [T.is] waking up anytime soon.")
|
||||
else if(!client)
|
||||
msg += span_deadsay("[T.He] [T.is] [ssd_msg].")
|
||||
//VOREStation Add Start
|
||||
if(client && away_from_keyboard && manual_afk)
|
||||
msg += "\[Away From Keyboard for [round((client.inactivity/10)/60)] minutes\]"
|
||||
else if(client && ((client.inactivity / 10) / 60 > 10)) //10 Minutes
|
||||
msg += "\[Inactive for [round((client.inactivity/10)/60)] minutes\]"
|
||||
else if(disconnect_time)
|
||||
msg += "\[Disconnected/ghosted [round(((world.realtime - disconnect_time)/10)/60)] minutes ago\]"
|
||||
//VOREStation Add End
|
||||
|
||||
var/list/wound_flavor_text = list()
|
||||
var/list/is_bleeding = list()
|
||||
@@ -366,7 +360,7 @@
|
||||
wound_flavor_text["[temp.name]"] = span_warning("[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name].")
|
||||
else
|
||||
wound_flavor_text["[temp.name]"] = ""
|
||||
if(temp.dislocated == 1) //VOREStation Edit Bugfix
|
||||
if(temp.dislocated == 1)
|
||||
wound_flavor_text["[temp.name]"] += span_warning("[T.His] [temp.joint] is dislocated!")
|
||||
if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED)))
|
||||
wound_flavor_text["[temp.name]"] += span_warning("[T.His] [temp.name] is dented and swollen!")
|
||||
@@ -442,14 +436,12 @@
|
||||
flavor_text = replacetext(flavor_text, "||", "")
|
||||
msg += "[flavor_text]"
|
||||
|
||||
// VOREStation Start
|
||||
if(custom_link)
|
||||
msg += "Custom link: " + span_linkify("[custom_link]")
|
||||
|
||||
if(ooc_notes)
|
||||
msg += "OOC Notes: <a href='byond://?src=\ref[src];ooc_notes=1'>\[View\]</a> - <a href='byond://?src=\ref[src];print_ooc_notes_chat=1'>\[Print\]</a>"
|
||||
msg += "<a href='byond://?src=\ref[src];vore_prefs=1'>\[Mechanical Vore Preferences\]</a>"
|
||||
// VOREStation End
|
||||
msg = list(span_info(jointext(msg, "<br>")))
|
||||
if(applying_pressure)
|
||||
msg += applying_pressure
|
||||
@@ -465,7 +457,7 @@
|
||||
/proc/hasHUD(mob/M as mob, hudtype)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(hasHUD_vr(H,hudtype)) return 1 //VOREStation Add - Added records access for certain modes of omni-hud glasses
|
||||
if(hasHUD_vr(H,hudtype)) return 1 //Added records access for certain modes of omni-hud glasses
|
||||
switch(hudtype)
|
||||
if("security")
|
||||
return istype(H.glasses, /obj/item/clothing/glasses/hud/security) || istype(H.glasses, /obj/item/clothing/glasses/sunglasses/sechud)
|
||||
@@ -473,4 +465,4 @@
|
||||
return istype(H.glasses, /obj/item/clothing/glasses/hud/health)
|
||||
else if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
return R.sensor_type //VOREStation Add - Borgo sensors are now binary so just have them on or off
|
||||
return R.sensor_type //Borgo sensors are now binary so just have them on or off
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
/obj/item/mindbinder/pre_attack(atom/A)
|
||||
if(istype(A, /obj/structure/gargoyle))
|
||||
var/obj/structure/gargoyle/G = A
|
||||
A = G.gargoyle
|
||||
A = G.WR_gargoyle?.resolve()
|
||||
if(istype(A, /obj/item/holder))
|
||||
var/obj/item/holder/H = A
|
||||
A = H.held_mob
|
||||
|
||||
Reference in New Issue
Block a user