Merge remote-tracking branch 'upstream/master' into gremlinport
This commit is contained in:
@@ -61,7 +61,7 @@
|
||||
active_mind_control = TRUE
|
||||
message_admins("[key_name(user)] sent an abductor mind control message to [key_name(owner)]: [command]")
|
||||
update_gland_hud()
|
||||
var/obj/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
var/atom/movable/screen/alert/mind_control/mind_alert = owner.throw_alert("mind_control", /atom/movable/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
addtimer(CALLBACK(src, .proc/clear_mind_control), mind_control_duration)
|
||||
return TRUE
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
owner.Stun(15)
|
||||
owner.adjustToxLoss(-15, TRUE, TRUE)
|
||||
|
||||
owner.blood_volume = min(BLOOD_VOLUME_NORMAL, owner.blood_volume + 20)
|
||||
owner.adjust_integration_blood(20)
|
||||
if(owner.blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
keep_going = TRUE
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
message_admins("[key_name(user)] broadcasted an abductor mind control message from [key_name(owner)] to [key_name(H)]: [command]")
|
||||
|
||||
var/obj/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
var/atom/movable/screen/alert/mind_control/mind_alert = H.throw_alert("mind_control", /atom/movable/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
|
||||
if(LAZYLEN(broadcasted_mobs))
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
if(entangled_mob && ishuman(entangled_mob) && (entangled_mob.stat < DEAD))
|
||||
to_chat(entangled_mob, "<span class='userdanger'>You suddenly feel an irresistible compulsion to follow an order...</span>")
|
||||
to_chat(entangled_mob, "<span class='mind_control'>[command]</span>")
|
||||
var/obj/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /obj/screen/alert/mind_control)
|
||||
var/atom/movable/screen/alert/mind_control/mind_alert = entangled_mob.throw_alert("mind_control", /atom/movable/screen/alert/mind_control)
|
||||
mind_alert.command = command
|
||||
message_admins("[key_name(owner)] mirrored an abductor mind control message to [key_name(entangled_mob)]: [command]")
|
||||
update_gland_hud()
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
if(naut)
|
||||
naut.factory = null
|
||||
to_chat(naut, "<span class='userdanger'>Your factory was destroyed! You feel yourself dying!</span>")
|
||||
naut.throw_alert("nofactory", /obj/screen/alert/nofactory)
|
||||
naut.throw_alert("nofactory", /atom/movable/screen/alert/nofactory)
|
||||
spores = null
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@
|
||||
owner.current.adjustStaminaLoss(-1.5 + (actual_regen * -7) * mult, 0) // Humans lose stamina damage really quickly. Vamps should heal more.
|
||||
owner.current.adjustCloneLoss(-0.1 * (actual_regen * 2) * mult, 0)
|
||||
owner.current.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * (actual_regen * 4) * mult)
|
||||
owner.current.integrating_blood = 0
|
||||
// No Bleeding
|
||||
/*if(ishuman(owner.current)) //NOTE Current bleeding is horrible, not to count the amount of blood ballistics delete.
|
||||
var/mob/living/carbon/human/H = owner.current
|
||||
|
||||
@@ -670,9 +670,9 @@
|
||||
#define ui_vamprank_display "WEST:6,CENTER-2:-5" // 2 tiles down
|
||||
|
||||
/datum/hud
|
||||
var/obj/screen/bloodsucker/blood_counter/blood_display
|
||||
var/obj/screen/bloodsucker/rank_counter/vamprank_display
|
||||
var/obj/screen/bloodsucker/sunlight_counter/sunlight_display
|
||||
var/atom/movable/screen/bloodsucker/blood_counter/blood_display
|
||||
var/atom/movable/screen/bloodsucker/rank_counter/vamprank_display
|
||||
var/atom/movable/screen/bloodsucker/sunlight_counter/sunlight_display
|
||||
|
||||
/datum/antagonist/bloodsucker/proc/add_hud()
|
||||
return
|
||||
@@ -708,36 +708,36 @@
|
||||
owner.current.hud_used.vamprank_display.icon_state = (bloodsucker_level_unspent > 0) ? "rank_up" : "rank"
|
||||
|
||||
|
||||
/obj/screen/bloodsucker
|
||||
/atom/movable/screen/bloodsucker
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
/obj/screen/bloodsucker/proc/clear()
|
||||
/atom/movable/screen/bloodsucker/proc/clear()
|
||||
invisibility = INVISIBILITY_ABSTRACT
|
||||
|
||||
/obj/screen/bloodsucker/proc/update_counter(value, valuecolor)
|
||||
/atom/movable/screen/bloodsucker/proc/update_counter(value, valuecolor)
|
||||
invisibility = 0
|
||||
|
||||
/obj/screen/bloodsucker/blood_counter
|
||||
/atom/movable/screen/bloodsucker/blood_counter
|
||||
icon = 'icons/mob/actions/bloodsucker.dmi'
|
||||
name = "Blood Consumed"
|
||||
icon_state = "blood_display"
|
||||
screen_loc = ui_blood_display
|
||||
|
||||
/obj/screen/bloodsucker/blood_counter/update_counter(value, valuecolor)
|
||||
/atom/movable/screen/bloodsucker/blood_counter/update_counter(value, valuecolor)
|
||||
..()
|
||||
maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='[valuecolor]'>[round(value,1)]</font></div>"
|
||||
|
||||
/obj/screen/bloodsucker/rank_counter
|
||||
/atom/movable/screen/bloodsucker/rank_counter
|
||||
name = "Bloodsucker Rank"
|
||||
icon = 'icons/mob/actions/bloodsucker.dmi'
|
||||
icon_state = "rank"
|
||||
screen_loc = ui_vamprank_display
|
||||
|
||||
/obj/screen/bloodsucker/rank_counter/update_counter(value, valuecolor)
|
||||
/atom/movable/screen/bloodsucker/rank_counter/update_counter(value, valuecolor)
|
||||
..()
|
||||
maptext = "<div align='center' valign='middle' style='position:relative; top:0px; left:6px'><font color='[valuecolor]'>[round(value,1)]</font></div>"
|
||||
|
||||
/obj/screen/bloodsucker/sunlight_counter
|
||||
/atom/movable/screen/bloodsucker/sunlight_counter
|
||||
icon = 'icons/mob/actions/bloodsucker.dmi'
|
||||
name = "Solar Flare Timer"
|
||||
icon_state = "sunlight_night"
|
||||
@@ -761,7 +761,7 @@
|
||||
owner.current.hud_used.sunlight_display.icon_state = "sunlight_" + (amDay ? "day":"night")
|
||||
|
||||
|
||||
/obj/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
|
||||
/atom/movable/screen/bloodsucker/sunlight_counter/update_counter(value, valuecolor)
|
||||
..()
|
||||
maptext = "<div align='center' valign='bottom' style='position:relative; top:0px; left:6px'><font color='[valuecolor]'>[value]</font></div>"
|
||||
|
||||
|
||||
@@ -109,13 +109,13 @@
|
||||
|
||||
|
||||
/datum/status_effect/agent_pinpointer/hunter_edition
|
||||
alert_type = /obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
|
||||
alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition
|
||||
minimum_range = HUNTER_SCAN_MIN_DISTANCE
|
||||
tick_interval = HUNTER_SCAN_PING_TIME
|
||||
duration = 160 // Lasts 10s
|
||||
range_fuzz_factor = 5//PINPOINTER_EXTRA_RANDOM_RANGE
|
||||
|
||||
/obj/screen/alert/status_effect/agent_pinpointer/hunter_edition
|
||||
/atom/movable/screen/alert/status_effect/agent_pinpointer/hunter_edition
|
||||
name = "Monster Tracking"
|
||||
desc = "You always know where the hellspawn are."
|
||||
|
||||
|
||||
@@ -110,13 +110,13 @@
|
||||
|
||||
/datum/status_effect/agent_pinpointer/vassal_edition
|
||||
id = "agent_pinpointer"
|
||||
alert_type = /obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
|
||||
alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition
|
||||
minimum_range = VASSAL_SCAN_MIN_DISTANCE
|
||||
tick_interval = VASSAL_SCAN_PING_TIME
|
||||
duration = -1 // runs out fast
|
||||
range_fuzz_factor = 0
|
||||
|
||||
/obj/screen/alert/status_effect/agent_pinpointer/vassal_edition
|
||||
/atom/movable/screen/alert/status_effect/agent_pinpointer/vassal_edition
|
||||
name = "Blood Bond"
|
||||
desc = "You always know where your master is."
|
||||
//icon = 'icons/obj/device.dmi'
|
||||
|
||||
@@ -297,8 +297,14 @@
|
||||
prof.socks = H.socks
|
||||
prof.socks_color = H.socks_color
|
||||
|
||||
var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
|
||||
for(var/slot in slots)
|
||||
var/datum/icon_snapshot/entry = new
|
||||
entry.name = H.name
|
||||
entry.icon = H.icon
|
||||
entry.icon_state = H.icon_state
|
||||
entry.overlays = H.get_overlays_copy(list(HANDS_LAYER, HANDCUFF_LAYER, LEGCUFF_LAYER))
|
||||
prof.profile_snapshot = entry
|
||||
|
||||
for(var/slot in GLOB.slots)
|
||||
if(slot in H.vars)
|
||||
var/obj/item/I = H.vars[slot]
|
||||
if(!I)
|
||||
@@ -518,6 +524,9 @@
|
||||
var/socks
|
||||
var/socks_color
|
||||
|
||||
/// Icon snapshot of the profile
|
||||
var/datum/icon_snapshot/profile_snapshot
|
||||
|
||||
/datum/changelingprofile/Destroy()
|
||||
qdel(dna)
|
||||
. = ..()
|
||||
@@ -535,13 +544,14 @@
|
||||
newprofile.underwear = underwear
|
||||
newprofile.undershirt = undershirt
|
||||
newprofile.socks = socks
|
||||
|
||||
newprofile.profile_snapshot = profile_snapshot
|
||||
|
||||
/datum/antagonist/changeling/xenobio
|
||||
name = "Xenobio Changeling"
|
||||
give_objectives = FALSE
|
||||
show_in_roundend = FALSE //These are here for admin tracking purposes only
|
||||
you_are_greet = FALSE
|
||||
antag_moodlet = FALSE
|
||||
|
||||
/datum/antagonist/changeling/roundend_report()
|
||||
var/list/parts = list()
|
||||
|
||||
@@ -10,15 +10,8 @@
|
||||
//Transform into a human.
|
||||
/obj/effect/proc_holder/changeling/humanform/sting_action(mob/living/carbon/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
var/list/names = list()
|
||||
for(var/datum/changelingprofile/prof in changeling.stored_profiles)
|
||||
names += "[prof.name]"
|
||||
|
||||
var/chosen_name = input("Select the target DNA: ", "Target DNA", null) as null|anything in names
|
||||
if(!chosen_name)
|
||||
return
|
||||
|
||||
var/datum/changelingprofile/chosen_prof = changeling.get_dna(chosen_name)
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna()
|
||||
if(!chosen_prof)
|
||||
return
|
||||
if(!user || user.mob_transforming)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
//Modified IA pinpointer - Points to the NEAREST changeling, but will only get you within a few tiles of the target.
|
||||
//You'll still have to rely on intuition and observation to make the identification. Lings can 'hide' in public places.
|
||||
/datum/status_effect/agent_pinpointer/changeling
|
||||
alert_type = /obj/screen/alert/status_effect/agent_pinpointer/changeling
|
||||
alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer/changeling
|
||||
minimum_range = CHANGELING_PHEROMONE_MIN_DISTANCE
|
||||
tick_interval = CHANGELING_PHEROMONE_PING_TIME
|
||||
range_fuzz_factor = 0
|
||||
@@ -55,6 +55,6 @@
|
||||
scan_target = null
|
||||
|
||||
|
||||
/obj/screen/alert/status_effect/agent_pinpointer/changeling
|
||||
/atom/movable/screen/alert/status_effect/agent_pinpointer/changeling
|
||||
name = "Pheromone Scent"
|
||||
desc = "The nose always knows."
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
if(changeling.chosen_sting)
|
||||
unset_sting(user)
|
||||
return
|
||||
selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
selected_dna = changeling.select_dna()
|
||||
if(!selected_dna)
|
||||
return
|
||||
if(NOTRANSSTING in selected_dna.dna.species.species_traits)
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
//Change our DNA to that of somebody we've absorbed.
|
||||
/obj/effect/proc_holder/changeling/transform/sting_action(mob/living/carbon/human/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA")
|
||||
var/datum/changelingprofile/chosen_prof = changeling.select_dna()
|
||||
|
||||
if(!chosen_prof)
|
||||
return
|
||||
@@ -142,15 +142,21 @@
|
||||
changeling_transform(user, chosen_prof)
|
||||
return TRUE
|
||||
|
||||
/datum/antagonist/changeling/proc/select_dna(var/prompt, var/title)
|
||||
/**
|
||||
* Gives a changeling a list of all possible dnas in their profiles to choose from and returns profile containing their chosen dna
|
||||
*/
|
||||
/datum/antagonist/changeling/proc/select_dna()
|
||||
var/mob/living/carbon/user = owner.current
|
||||
if(!istype(user))
|
||||
return
|
||||
var/list/names = list("Drop Flesh Disguise")
|
||||
for(var/datum/changelingprofile/prof in stored_profiles)
|
||||
names += "[prof.name]"
|
||||
var/list/disguises = list("Drop Flesh Disguise" = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_drop"))
|
||||
for(var/datum/changelingprofile/current_profile in stored_profiles)
|
||||
var/datum/icon_snapshot/snap = current_profile.profile_snapshot
|
||||
var/image/disguise_image = image(icon = snap.icon, icon_state = snap.icon_state)
|
||||
disguise_image.overlays = snap.overlays
|
||||
disguises[current_profile.name] = disguise_image
|
||||
|
||||
var/chosen_name = input(prompt, title, null) as null|anything in names
|
||||
var/chosen_name = show_radial_menu(user, user, disguises, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 40, require_near = TRUE, tooltips = TRUE)
|
||||
if(!chosen_name)
|
||||
return
|
||||
|
||||
@@ -158,6 +164,21 @@
|
||||
for(var/slot in GLOB.slots)
|
||||
if(istype(user.vars[slot], GLOB.slot2type[slot]))
|
||||
qdel(user.vars[slot])
|
||||
return
|
||||
|
||||
var/datum/changelingprofile/prof = get_dna(chosen_name)
|
||||
return prof
|
||||
|
||||
/**
|
||||
* Checks if we are allowed to interact with a radial menu
|
||||
*
|
||||
* Arguments:
|
||||
* * user The carbon mob interacting with the menu
|
||||
*/
|
||||
/datum/antagonist/changeling/proc/check_menu(mob/living/carbon/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
var/datum/antagonist/changeling/changeling_datum = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(!changeling_datum)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
do_sparks(5, TRUE, AM)
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
L.overlay_fullscreen("flash", /obj/screen/fullscreen/flash/static)
|
||||
L.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash/static)
|
||||
L.clear_fullscreen("flash", 5)
|
||||
var/obj/item/transfer_valve/TTV = locate() in L.GetAllContents()
|
||||
if(TTV)
|
||||
|
||||
@@ -97,18 +97,18 @@
|
||||
id = "wraith_spectacles"
|
||||
duration = -1 //remains until eye damage done reaches 0 while the glasses are not worn
|
||||
tick_interval = 20
|
||||
alert_type = /obj/screen/alert/status_effect/wraith_spectacles
|
||||
alert_type = /atom/movable/screen/alert/status_effect/wraith_spectacles
|
||||
var/eye_damage_done = 0
|
||||
var/nearsight_breakpoint = 30
|
||||
var/blind_breakpoint = 45
|
||||
|
||||
/obj/screen/alert/status_effect/wraith_spectacles
|
||||
/atom/movable/screen/alert/status_effect/wraith_spectacles
|
||||
name = "Wraith Spectacles"
|
||||
desc = "You shouldn't actually see this, as it should be procedurally generated."
|
||||
icon_state = "wraithspecs"
|
||||
alerttooltipstyle = "clockcult"
|
||||
|
||||
/obj/screen/alert/status_effect/wraith_spectacles/MouseEntered(location,control,params)
|
||||
/atom/movable/screen/alert/status_effect/wraith_spectacles/MouseEntered(location,control,params)
|
||||
var/mob/living/carbon/human/L = usr
|
||||
if(istype(L)) //this is probably more safety than actually needed
|
||||
var/datum/status_effect/wraith_spectacles/W = attached_effect
|
||||
|
||||
+2
-2
@@ -141,7 +141,7 @@
|
||||
if(isliving(M.current) && M.current.stat != DEAD)
|
||||
var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark.
|
||||
do_teleport(M.current, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)
|
||||
M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
M.current.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash)
|
||||
M.current.clear_fullscreen("flash", 5)
|
||||
playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE)
|
||||
recalls_remaining--
|
||||
@@ -311,7 +311,7 @@
|
||||
var/turf/T = get_turf(M)
|
||||
if(is_servant_of_ratvar(M) && (!T || T.z != z))
|
||||
M.forceMove(get_step(src, SOUTH))
|
||||
M.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
|
||||
M.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/flash)
|
||||
M.clear_fullscreen("flash", 5)
|
||||
progress_in_seconds += GATEWAY_SUMMON_RATE
|
||||
switch(progress_in_seconds)
|
||||
|
||||
@@ -136,7 +136,7 @@
|
||||
hierophant_network.span_for_name = "nezbere"
|
||||
hierophant_network.span_for_message = "brass"
|
||||
hierophant_network.Grant(current)
|
||||
current.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump)
|
||||
current.throw_alert("clockinfo", /atom/movable/screen/alert/clockwork/infodump)
|
||||
var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar
|
||||
if(G && G.active && ishuman(current))
|
||||
current.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -ANTAG_LAYER))
|
||||
|
||||
@@ -687,10 +687,10 @@
|
||||
if(H.stat == DEAD)
|
||||
to_chat(user,"<span class='warning'>Only a revive rune can bring back the dead!</span>")
|
||||
return
|
||||
if(H.blood_volume < (BLOOD_VOLUME_SAFE*H.blood_ratio))
|
||||
if(H.functional_blood() < (BLOOD_VOLUME_SAFE*H.blood_ratio))
|
||||
var/restore_blood = (BLOOD_VOLUME_SAFE*H.blood_ratio) - H.blood_volume
|
||||
if(uses*2 < restore_blood)
|
||||
H.blood_volume += uses*2
|
||||
if(uses * 2 < restore_blood)
|
||||
H.adjust_integration_blood(uses * 2)
|
||||
to_chat(user,"<span class='danger'>You use the last of your blood rites to restore what blood you could!</span>")
|
||||
uses = 0
|
||||
return ..()
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
communion.Grant(current)
|
||||
if(ishuman(current))
|
||||
magic.Grant(current)
|
||||
current.throw_alert("bloodsense", /obj/screen/alert/bloodsense)
|
||||
current.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense)
|
||||
if(cult_team?.cult_risen)
|
||||
cult_team.rise(current)
|
||||
if(cult_team.cult_ascendent)
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
if(M.health < M.maxHealth)
|
||||
M.adjustHealth(-3)
|
||||
if(ishuman(L) && L.blood_volume < (BLOOD_VOLUME_NORMAL * L.blood_ratio))
|
||||
L.blood_volume += 1.0
|
||||
L.adjust_integration_blood(1.0)
|
||||
CHECK_TICK
|
||||
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null)
|
||||
return 666
|
||||
|
||||
/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0)
|
||||
/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0)
|
||||
if(mind && has_bane(BANE_LIGHT))
|
||||
mind.disrupt_spells(-500)
|
||||
return ..() //flashes don't stop devils UNLESS it's their bane.
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
carbon_target.blood_volume -= 20
|
||||
if(carbon_user.blood_volume < BLOOD_VOLUME_MAXIMUM) //we dont want to explode after all
|
||||
carbon_user.blood_volume += 20
|
||||
carbon_user.adjust_integration_blood(20)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/pointed/blood_siphon/can_target(atom/target, mob/user, silent)
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
var/atom/movable/form = null
|
||||
var/morph_time = 0
|
||||
var/static/list/blacklist_typecache = typecacheof(list(
|
||||
/obj/screen,
|
||||
/atom/movable/screen,
|
||||
/obj/singularity,
|
||||
/mob/living/simple_animal/hostile/morph,
|
||||
/obj/effect,
|
||||
|
||||
@@ -42,12 +42,12 @@
|
||||
id = "agent_pinpointer"
|
||||
duration = -1
|
||||
tick_interval = PINPOINTER_PING_TIME
|
||||
alert_type = /obj/screen/alert/status_effect/agent_pinpointer
|
||||
alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer
|
||||
var/minimum_range = PINPOINTER_MINIMUM_RANGE
|
||||
var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE
|
||||
var/mob/scan_target = null
|
||||
|
||||
/obj/screen/alert/status_effect/agent_pinpointer
|
||||
/atom/movable/screen/alert/status_effect/agent_pinpointer
|
||||
name = "Internal Affairs Integrated Pinpointer"
|
||||
desc = "Even stealthier than a normal implant."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
if(target.type == /mob/living/simple_animal/hostile/construct/shade) //Make sure we remember which body belonged to the shade
|
||||
var/mob/living/simple_animal/hostile/construct/shade/shade = target
|
||||
newstruct.original_mind = shade.original_mind
|
||||
var/obj/screen/alert/bloodsense/BS
|
||||
var/atom/movable/screen/alert/bloodsense/BS
|
||||
if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker?.mode)
|
||||
SSticker.mode.add_cultist(newstruct.mind, 0)
|
||||
if(iscultist(stoner) || cultoverride)
|
||||
@@ -232,7 +232,7 @@
|
||||
else if(stoner)
|
||||
to_chat(newstruct, "<b>You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.</b>")
|
||||
newstruct.clear_alert("bloodsense")
|
||||
BS = newstruct.throw_alert("bloodsense", /obj/screen/alert/bloodsense)
|
||||
BS = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense)
|
||||
if(BS)
|
||||
BS.Cviewer = newstruct
|
||||
newstruct.cancel_camera()
|
||||
|
||||
@@ -27,6 +27,12 @@
|
||||
if(do_update)
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/Destroy()
|
||||
if(linked_organ?.linked_organ == src)
|
||||
linked_organ.linked_organ = null
|
||||
linked_organ = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/genital/proc/set_aroused_state(new_state,cause = "manual toggle")
|
||||
if(!(genital_flags & GENITAL_CAN_AROUSE))
|
||||
return FALSE
|
||||
@@ -150,7 +156,7 @@
|
||||
/obj/item/organ/genital/proc/update_size()
|
||||
return
|
||||
|
||||
/obj/item/organ/genital/proc/update_appearance()
|
||||
/obj/item/organ/genital/proc/update_appearance_genitals()
|
||||
if(!owner || owner.stat == DEAD)
|
||||
aroused_state = FALSE
|
||||
|
||||
@@ -187,7 +193,7 @@
|
||||
. = ..()
|
||||
if(.)
|
||||
update()
|
||||
RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance)
|
||||
RegisterSignal(owner, COMSIG_MOB_DEATH, .proc/update_appearance_genitals)
|
||||
if(genital_flags & GENITAL_THROUGH_CLOTHES)
|
||||
owner.exposed_genitals += src
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/is_knotted = FALSE
|
||||
//Lists moved to _cit_helpers.dm as globals so they're not instanced individually
|
||||
|
||||
/obj/item/dildo/proc/update_appearance()
|
||||
/obj/item/dildo/update_appearance()
|
||||
icon_state = "[dildo_type]_[dildo_shape]_[dildo_size]"
|
||||
var/sizeword = ""
|
||||
switch(dildo_size)
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
var/list/products = null
|
||||
var/danger_reagent = null
|
||||
var/low_alert_category = "not_enough_oxy"
|
||||
var/low_alert_datum = /obj/screen/alert/not_enough_oxy
|
||||
var/low_alert_datum = /atom/movable/screen/alert/not_enough_oxy
|
||||
var/high_alert_category = "too_much_oxy"
|
||||
var/high_alert_datum = /obj/screen/alert/too_much_oxy
|
||||
var/high_alert_datum = /atom/movable/screen/alert/too_much_oxy
|
||||
|
||||
/datum/breathing_class/oxygen
|
||||
gases = list(
|
||||
@@ -32,6 +32,6 @@
|
||||
GAS_CO2 = 1
|
||||
)
|
||||
low_alert_category = "not_enough_tox"
|
||||
low_alert_datum = /obj/screen/alert/not_enough_tox
|
||||
low_alert_datum = /atom/movable/screen/alert/not_enough_tox
|
||||
high_alert_category = "too_much_tox"
|
||||
high_alert_datum = /obj/screen/alert/too_much_tox
|
||||
high_alert_datum = /atom/movable/screen/alert/too_much_tox
|
||||
|
||||
@@ -3,35 +3,43 @@
|
||||
specific_heat = 20
|
||||
name = "Oxygen"
|
||||
oxidation_temperature = T0C - 100 // it checks max of this and fire temperature, so rarely will things spontaneously combust
|
||||
powermix = 1
|
||||
heat_penalty = 1
|
||||
transmit_modifier = 1.5
|
||||
|
||||
/datum/gas/nitrogen
|
||||
id = GAS_N2
|
||||
specific_heat = 20
|
||||
name = "Nitrogen"
|
||||
powermix = -1
|
||||
heat_penalty = -1.5
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
alert_category = "not_enough_nitro",
|
||||
alert_type = /obj/screen/alert/not_enough_nitro
|
||||
alert_type = /atom/movable/screen/alert/not_enough_nitro
|
||||
),
|
||||
too_much_alert = list(
|
||||
alert_category = "too_much_nitro",
|
||||
alert_type = /obj/screen/alert/too_much_nitro
|
||||
alert_type = /atom/movable/screen/alert/too_much_nitro
|
||||
)
|
||||
)
|
||||
name = "Nitrogen"
|
||||
|
||||
/datum/gas/carbon_dioxide //what the fuck is this?
|
||||
id = GAS_CO2
|
||||
specific_heat = 30
|
||||
name = "Carbon Dioxide"
|
||||
powermix = 1
|
||||
heat_penalty = 0.1
|
||||
powerloss_inhibition = 1
|
||||
breath_results = GAS_O2
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
alert_category = "not_enough_co2",
|
||||
alert_type = /obj/screen/alert/not_enough_co2
|
||||
alert_type = /atom/movable/screen/alert/not_enough_co2
|
||||
),
|
||||
too_much_alert = list(
|
||||
alert_category = "too_much_co2",
|
||||
alert_type = /obj/screen/alert/too_much_co2
|
||||
alert_type = /atom/movable/screen/alert/too_much_co2
|
||||
)
|
||||
)
|
||||
fusion_power = 3
|
||||
@@ -43,6 +51,9 @@
|
||||
gas_overlay = "plasma"
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
heat_penalty = 15
|
||||
transmit_modifier = 4
|
||||
powermix = 1
|
||||
// no fire info cause it has its own bespoke reaction for trit generation reasons
|
||||
|
||||
/datum/gas/water_vapor
|
||||
@@ -52,6 +63,8 @@
|
||||
gas_overlay = "water_vapor"
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
fusion_power = 8
|
||||
heat_penalty = 8
|
||||
powermix = 1
|
||||
breath_reagent = /datum/reagent/water
|
||||
|
||||
/datum/gas/hypernoblium
|
||||
@@ -71,6 +84,7 @@
|
||||
fire_products = list(GAS_N2 = 1)
|
||||
oxidation_rate = 0.5
|
||||
oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + 100
|
||||
heat_resistance = 6
|
||||
|
||||
/datum/gas/nitryl
|
||||
id = GAS_NITRYL
|
||||
@@ -91,6 +105,9 @@
|
||||
moles_visible = MOLES_GAS_VISIBLE
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
fusion_power = 1
|
||||
powermix = 1
|
||||
heat_penalty = 10
|
||||
transmit_modifier = 30
|
||||
/*
|
||||
these are for when we add hydrogen, trit gets to keep its hardcoded fire for legacy reasons
|
||||
fire_provides = list(GAS_H2O = 2)
|
||||
@@ -105,6 +122,10 @@
|
||||
name = "BZ"
|
||||
flags = GAS_FLAG_DANGEROUS
|
||||
fusion_power = 8
|
||||
powermix = 1
|
||||
heat_penalty = 5
|
||||
transmit_modifier = -2
|
||||
radioactivity_modifier = 5
|
||||
|
||||
/datum/gas/stimulum
|
||||
id = GAS_STIMULUM
|
||||
@@ -119,6 +140,10 @@
|
||||
fusion_power = 10
|
||||
oxidation_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST * 1000 // it is VERY stable
|
||||
oxidation_rate = 8
|
||||
powermix = -1
|
||||
heat_penalty = -1
|
||||
transmit_modifier = -5
|
||||
heat_resistance = 3
|
||||
|
||||
/datum/gas/miasma
|
||||
id = GAS_MIASMA
|
||||
@@ -138,11 +163,11 @@
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
alert_category = "not_enough_ch4",
|
||||
alert_type = /obj/screen/alert/not_enough_ch4
|
||||
alert_type = /atom/movable/screen/alert/not_enough_ch4
|
||||
),
|
||||
too_much_alert = list(
|
||||
alert_category = "too_much_ch4",
|
||||
alert_type = /obj/screen/alert/too_much_ch4
|
||||
alert_type = /atom/movable/screen/alert/too_much_ch4
|
||||
)
|
||||
)
|
||||
fire_energy_released = FIRE_CARBON_ENERGY_RELEASED
|
||||
@@ -156,11 +181,11 @@
|
||||
breath_alert_info = list(
|
||||
not_enough_alert = list(
|
||||
alert_category = "not_enough_ch3br",
|
||||
alert_type = /obj/screen/alert/not_enough_ch3br
|
||||
alert_type = /atom/movable/screen/alert/not_enough_ch3br
|
||||
),
|
||||
too_much_alert = list(
|
||||
alert_category = "too_much_ch3br",
|
||||
alert_type = /obj/screen/alert/too_much_ch3br
|
||||
alert_type = /atom/movable/screen/alert/too_much_ch3br
|
||||
)
|
||||
)
|
||||
fire_products = list(GAS_CO2 = 1, GAS_H2O = 1.5, GAS_BZ = 0.5)
|
||||
|
||||
@@ -35,6 +35,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
var/list/fire_enthalpies = list()
|
||||
var/list/fire_products = list()
|
||||
var/list/fire_burn_rates = list()
|
||||
var/list/supermatter = list()
|
||||
|
||||
|
||||
/datum/gas
|
||||
@@ -55,6 +56,12 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
var/list/fire_products = null // what results when this gas is burned (oxidizer or fuel); null for none
|
||||
var/fire_energy_released = 0 // how much energy is released per mole of fuel burned
|
||||
var/fire_burn_rate = 1 // how many moles are burned per product released
|
||||
var/powermix = 0 // how much this gas contributes to the supermatter's powermix ratio
|
||||
var/heat_penalty = 0 // heat and waste penalty from having the supermatter crystal surrounded by this gas; negative numbers reduce
|
||||
var/transmit_modifier = 0 // bonus to supermatter power generation (multiplicative, since it's % based, and divided by 10)
|
||||
var/radioactivity_modifier = 0 // improves effect of transmit modifiers, must be from -10 to 10
|
||||
var/heat_resistance = 0 // makes the crystal more resistant against heat damage.
|
||||
var/powerloss_inhibition = 0 // Reduces how much power the supermatter loses each tick
|
||||
|
||||
/datum/gas/proc/breath(partial_pressure, light_threshold, heavy_threshold, moles, mob/living/carbon/C, obj/item/organ/lungs/lungs)
|
||||
// This is only called on gases with the GAS_FLAG_BREATH_PROC flag. When possible, do NOT use this--
|
||||
@@ -100,12 +107,20 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GA
|
||||
if(gas.fire_products)
|
||||
fire_products[g] = gas.fire_products
|
||||
fire_enthalpies[g] = gas.fire_energy_released
|
||||
|
||||
add_supermatter_properties(gas)
|
||||
_auxtools_register_gas(gas)
|
||||
|
||||
/proc/finalize_gas_refs()
|
||||
|
||||
/datum/auxgm/New()
|
||||
src.supermatter[HEAT_PENALTY] = list()
|
||||
src.supermatter[TRANSMIT_MODIFIER] = list()
|
||||
src.supermatter[RADIOACTIVITY_MODIFIER] = list()
|
||||
src.supermatter[HEAT_RESISTANCE] = list()
|
||||
src.supermatter[POWERLOSS_INHIBITION] = list()
|
||||
src.supermatter[POWER_MIX] = list()
|
||||
src.supermatter[ALL_SUPERMATTER_GASES] = list()
|
||||
|
||||
for(var/gas_path in subtypesof(/datum/gas))
|
||||
var/datum/gas/gas = new gas_path
|
||||
add_gas(gas)
|
||||
|
||||
@@ -439,7 +439,7 @@
|
||||
return // we don't see the pipe network while inside cryo.
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/get_remote_view_fullscreens(mob/user)
|
||||
user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1)
|
||||
user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 1)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/can_crawl_through()
|
||||
return // can't ventcrawl in or out of cryo.
|
||||
|
||||
@@ -205,6 +205,12 @@ GLOBAL_LIST_EMPTY(gateway_destinations)
|
||||
deactivate()
|
||||
return
|
||||
|
||||
/obj/machinery/gateway/update_icon_state()
|
||||
if(target)
|
||||
icon_state = "on_old"
|
||||
else
|
||||
icon_state = "portal_frame"
|
||||
|
||||
/obj/machinery/gateway/safe_throw_at(atom/target, range, speed, mob/thrower, spin = TRUE, diagonals_first = FALSE, datum/callback/callback, force = MOVE_FORCE_STRONG, gentle = FALSE)
|
||||
return
|
||||
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
var/switch_state = BM_SWITCHSTATE_NONE
|
||||
var/switch_width = 5
|
||||
// modeswitch UI
|
||||
var/obj/screen/buildmode/mode/modebutton
|
||||
var/atom/movable/screen/buildmode/mode/modebutton
|
||||
var/list/modeswitch_buttons = list()
|
||||
// dirswitch UI
|
||||
var/obj/screen/buildmode/bdir/dirbutton
|
||||
var/atom/movable/screen/buildmode/bdir/dirbutton
|
||||
var/list/dirswitch_buttons = list()
|
||||
|
||||
/datum/buildmode/New(client/c)
|
||||
@@ -34,7 +34,7 @@
|
||||
holder.screen += buttons
|
||||
holder.click_intercept = src
|
||||
mode.enter_mode(src)
|
||||
|
||||
|
||||
/datum/buildmode/proc/quit()
|
||||
mode.exit_mode(src)
|
||||
holder.screen -= buttons
|
||||
@@ -63,16 +63,16 @@
|
||||
|
||||
/datum/buildmode/proc/create_buttons()
|
||||
// keep a reference so we can update it upon mode switch
|
||||
modebutton = new /obj/screen/buildmode/mode(src)
|
||||
modebutton = new /atom/movable/screen/buildmode/mode(src)
|
||||
buttons += modebutton
|
||||
buttons += new /obj/screen/buildmode/help(src)
|
||||
buttons += new /atom/movable/screen/buildmode/help(src)
|
||||
// keep a reference so we can update it upon dir switch
|
||||
dirbutton = new /obj/screen/buildmode/bdir(src)
|
||||
dirbutton = new /atom/movable/screen/buildmode/bdir(src)
|
||||
buttons += dirbutton
|
||||
buttons += new /obj/screen/buildmode/quit(src)
|
||||
buttons += new /atom/movable/screen/buildmode/quit(src)
|
||||
// build the lists of switching buttons
|
||||
build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /obj/screen/buildmode/modeswitch)
|
||||
build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /obj/screen/buildmode/dirswitch)
|
||||
build_options_grid(subtypesof(/datum/buildmode_mode), modeswitch_buttons, /atom/movable/screen/buildmode/modeswitch)
|
||||
build_options_grid(list(SOUTH,EAST,WEST,NORTH,NORTHWEST), dirswitch_buttons, /atom/movable/screen/buildmode/dirswitch)
|
||||
|
||||
// this creates a nice offset grid for choosing between buildmode options,
|
||||
// because going "click click click ah hell" sucks.
|
||||
@@ -81,7 +81,7 @@
|
||||
for(var/thing in elements)
|
||||
var/x = pos_idx % switch_width
|
||||
var/y = FLOOR(pos_idx / switch_width, 1)
|
||||
var/obj/screen/buildmode/B = new buttontype(src, thing)
|
||||
var/atom/movable/screen/buildmode/B = new buttontype(src, thing)
|
||||
// extra .5 for a nice offset look
|
||||
B.screen_loc = "NORTH-[(1 + 0.5 + y*1.5)],WEST+[0.5 + x*1.5]"
|
||||
buttonslist += B
|
||||
@@ -100,7 +100,7 @@
|
||||
else
|
||||
close_switchstates()
|
||||
open_modeswitch()
|
||||
|
||||
|
||||
/datum/buildmode/proc/open_modeswitch()
|
||||
switch_state = BM_SWITCHSTATE_MODE
|
||||
holder.screen += modeswitch_buttons
|
||||
@@ -115,7 +115,7 @@
|
||||
else
|
||||
close_switchstates()
|
||||
open_dirswitch()
|
||||
|
||||
|
||||
/datum/buildmode/proc/open_dirswitch()
|
||||
switch_state = BM_SWITCHSTATE_DIR
|
||||
holder.screen += dirswitch_buttons
|
||||
@@ -155,7 +155,7 @@
|
||||
new /datum/buildmode(M.client)
|
||||
message_admins("[key_name_admin(usr)] has entered build mode.")
|
||||
log_admin("[key_name(usr)] has entered build mode.")
|
||||
|
||||
|
||||
#undef BM_SWITCHSTATE_NONE
|
||||
#undef BM_SWITCHSTATE_MODE
|
||||
#undef BM_SWITCHSTATE_DIR
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
/obj/screen/buildmode
|
||||
/atom/movable/screen/buildmode
|
||||
icon = 'icons/misc/buildmode.dmi'
|
||||
var/datum/buildmode/bd
|
||||
// If we don't do this, we get occluded by item action buttons
|
||||
layer = ABOVE_HUD_LAYER
|
||||
|
||||
/obj/screen/buildmode/New(bld)
|
||||
/atom/movable/screen/buildmode/New(bld)
|
||||
bd = bld
|
||||
return ..()
|
||||
|
||||
/obj/screen/buildmode/Destroy()
|
||||
/atom/movable/screen/buildmode/Destroy()
|
||||
bd = null
|
||||
return ..()
|
||||
|
||||
/obj/screen/buildmode/mode
|
||||
/atom/movable/screen/buildmode/mode
|
||||
name = "Toggle Mode"
|
||||
icon_state = "buildmode_basic"
|
||||
screen_loc = "NORTH,WEST"
|
||||
|
||||
/obj/screen/buildmode/mode/Click(location, control, params)
|
||||
/atom/movable/screen/buildmode/mode/Click(location, control, params)
|
||||
var/list/pa = params2list(params)
|
||||
|
||||
if(pa.Find("left"))
|
||||
@@ -27,63 +27,63 @@
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/screen/buildmode/mode/update_icon_state()
|
||||
/atom/movable/screen/buildmode/mode/update_icon_state()
|
||||
icon_state = bd.mode.get_button_iconstate()
|
||||
|
||||
/obj/screen/buildmode/help
|
||||
/atom/movable/screen/buildmode/help
|
||||
icon_state = "buildhelp"
|
||||
screen_loc = "NORTH,WEST+1"
|
||||
name = "Buildmode Help"
|
||||
|
||||
/obj/screen/buildmode/help/Click(location, control, params)
|
||||
/atom/movable/screen/buildmode/help/Click(location, control, params)
|
||||
bd.mode.show_help(usr.client)
|
||||
return 1
|
||||
|
||||
/obj/screen/buildmode/bdir
|
||||
/atom/movable/screen/buildmode/bdir
|
||||
icon_state = "build"
|
||||
screen_loc = "NORTH,WEST+2"
|
||||
name = "Change Dir"
|
||||
|
||||
/obj/screen/buildmode/bdir/update_icon_state()
|
||||
/atom/movable/screen/buildmode/bdir/update_icon_state()
|
||||
dir = bd.build_dir
|
||||
|
||||
/obj/screen/buildmode/bdir/Click()
|
||||
/atom/movable/screen/buildmode/bdir/Click()
|
||||
bd.toggle_dirswitch()
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
// used to switch between modes
|
||||
/obj/screen/buildmode/modeswitch
|
||||
/atom/movable/screen/buildmode/modeswitch
|
||||
var/datum/buildmode_mode/modetype
|
||||
|
||||
/obj/screen/buildmode/modeswitch/New(bld, mt)
|
||||
/atom/movable/screen/buildmode/modeswitch/New(bld, mt)
|
||||
modetype = mt
|
||||
icon_state = "buildmode_[initial(modetype.key)]"
|
||||
name = initial(modetype.key)
|
||||
return ..(bld)
|
||||
|
||||
/obj/screen/buildmode/modeswitch/Click()
|
||||
/atom/movable/screen/buildmode/modeswitch/Click()
|
||||
bd.change_mode(modetype)
|
||||
return 1
|
||||
|
||||
// used to switch between dirs
|
||||
/obj/screen/buildmode/dirswitch
|
||||
/atom/movable/screen/buildmode/dirswitch
|
||||
icon_state = "build"
|
||||
|
||||
/obj/screen/buildmode/dirswitch/New(bld, dir)
|
||||
/atom/movable/screen/buildmode/dirswitch/New(bld, dir)
|
||||
src.dir = dir
|
||||
name = dir2text(dir)
|
||||
return ..(bld)
|
||||
|
||||
/obj/screen/buildmode/dirswitch/Click()
|
||||
/atom/movable/screen/buildmode/dirswitch/Click()
|
||||
bd.change_dir(dir)
|
||||
return 1
|
||||
|
||||
/obj/screen/buildmode/quit
|
||||
/atom/movable/screen/buildmode/quit
|
||||
icon_state = "buildquit"
|
||||
screen_loc = "NORTH,WEST+3"
|
||||
name = "Quit Buildmode"
|
||||
|
||||
/obj/screen/buildmode/quit/Click()
|
||||
/atom/movable/screen/buildmode/quit/Click()
|
||||
bd.quit()
|
||||
return 1
|
||||
|
||||
@@ -51,9 +51,9 @@
|
||||
var/obj/structure/closet/supplypod/centcompod/temp_pod //The temporary pod that is modified by this datum, then cloned. The buildObject() clone of this pod is what is launched
|
||||
// Stuff needed to render the map
|
||||
var/map_name
|
||||
var/obj/screen/map_view/cam_screen
|
||||
var/atom/movable/screen/map_view/cam_screen
|
||||
var/list/cam_plane_masters
|
||||
var/obj/screen/background/cam_background
|
||||
var/atom/movable/screen/background/cam_background
|
||||
var/tabIndex = 1
|
||||
var/renderLighting = FALSE
|
||||
|
||||
@@ -92,8 +92,8 @@
|
||||
cam_screen.del_on_map_removal = TRUE
|
||||
cam_screen.screen_loc = "[map_name]:1,1"
|
||||
cam_plane_masters = list()
|
||||
for(var/plane in subtypesof(/obj/screen/plane_master))
|
||||
var/obj/screen/instance = new plane()
|
||||
for(var/plane in subtypesof(/atom/movable/screen/plane_master))
|
||||
var/atom/movable/screen/instance = new plane()
|
||||
if (!renderLighting && instance.plane == LIGHTING_PLANE)
|
||||
instance.alpha = 100
|
||||
instance.assigned_map = map_name
|
||||
@@ -581,7 +581,7 @@
|
||||
var/left_click = pa.Find("left")
|
||||
if (launcherActivated)
|
||||
//Clicking on UI elements shouldn't launch a pod
|
||||
if(istype(target,/obj/screen))
|
||||
if(istype(target,/atom/movable/screen))
|
||||
return FALSE
|
||||
|
||||
. = TRUE
|
||||
@@ -616,7 +616,7 @@
|
||||
sleep(rand()*2) //looks cooler than them all appearing at once. Gives the impression of burst fire.
|
||||
else if (picking_dropoff_turf)
|
||||
//Clicking on UI elements shouldn't pick a dropoff turf
|
||||
if(istype(target,/obj/screen))
|
||||
if(istype(target,/atom/movable/screen))
|
||||
return FALSE
|
||||
|
||||
. = TRUE
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
preload_rsc = PRELOAD_RSC
|
||||
|
||||
var/obj/screen/click_catcher/void
|
||||
var/atom/movable/screen/click_catcher/void
|
||||
|
||||
//These two vars are used to make a special mouse cursor, with a unique icon for clicking
|
||||
var/mouse_up_icon = null
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
var/datum/player_details/player_details //these persist between logins/logouts during the same round.
|
||||
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = atom/movable/screen.
|
||||
|
||||
/// Last time they used fix macros
|
||||
var/last_macro_fix = 0
|
||||
@@ -168,7 +168,7 @@
|
||||
* Assoc list with all the active maps - when a screen obj is added to
|
||||
* a map, it's put in here as well.
|
||||
*
|
||||
* Format: list(<mapname> = list(/obj/screen))
|
||||
* Format: list(<mapname> = list(/atom/movable/screen))
|
||||
*/
|
||||
var/list/screen_maps = list()
|
||||
|
||||
|
||||
@@ -1029,7 +1029,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
|
||||
var/pos = 0
|
||||
for(var/D in GLOB.cardinals)
|
||||
pos++
|
||||
var/obj/screen/O = LAZYACCESS(char_render_holders, "[D]")
|
||||
var/atom/movable/screen/O = LAZYACCESS(char_render_holders, "[D]")
|
||||
if(!O)
|
||||
O = new
|
||||
LAZYSET(char_render_holders, "[D]", O)
|
||||
@@ -1040,7 +1040,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list(
|
||||
|
||||
/client/proc/clear_character_previews()
|
||||
for(var/index in char_render_holders)
|
||||
var/obj/screen/S = char_render_holders[index]
|
||||
var/atom/movable/screen/S = char_render_holders[index]
|
||||
screen -= S
|
||||
qdel(S)
|
||||
char_render_holders = null
|
||||
|
||||
@@ -2840,9 +2840,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if("ambientocclusion")
|
||||
ambientocclusion = !ambientocclusion
|
||||
if(parent && parent.screen && parent.screen.len)
|
||||
var/obj/screen/plane_master/game_world/G = parent.mob.hud_used.plane_masters["[GAME_PLANE]"]
|
||||
var/obj/screen/plane_master/above_wall/A = parent.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"]
|
||||
var/obj/screen/plane_master/wall/W = parent.mob.hud_used.plane_masters["[WALL_PLANE]"]
|
||||
var/atom/movable/screen/plane_master/game_world/G = parent.mob.hud_used.plane_masters["[GAME_PLANE]"]
|
||||
var/atom/movable/screen/plane_master/above_wall/A = parent.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"]
|
||||
var/atom/movable/screen/plane_master/wall/W = parent.mob.hud_used.plane_masters["[WALL_PLANE]"]
|
||||
G.backdrop(parent.mob)
|
||||
A.backdrop(parent.mob)
|
||||
W.backdrop(parent.mob)
|
||||
|
||||
@@ -79,8 +79,8 @@
|
||||
if(ismecha(M.loc)) // stops inventory actions in a mech
|
||||
return
|
||||
|
||||
if(!. && !M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
if(!. && !M.incapacitated() && loc == M && istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
if(M.putItemFromInventoryInHandIfPossible(src, H.held_index))
|
||||
add_fingerprint(usr)
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
///How long it takes to lace/unlace these shoes
|
||||
var/lace_time = 5 SECONDS
|
||||
///any alerts we have active
|
||||
var/obj/screen/alert/our_alert
|
||||
var/atom/movable/screen/alert/our_alert
|
||||
|
||||
/obj/item/clothing/shoes/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -93,7 +93,7 @@
|
||||
user.update_inv_shoes()
|
||||
equipped_before_drop = TRUE
|
||||
if(can_be_tied && tied == SHOES_UNTIED)
|
||||
our_alert = user.throw_alert("shoealert", /obj/screen/alert/shoes/untied)
|
||||
our_alert = user.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied)
|
||||
RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_trip, override=TRUE)
|
||||
|
||||
/obj/item/clothing/shoes/proc/restore_offsets(mob/user)
|
||||
@@ -150,7 +150,7 @@
|
||||
UnregisterSignal(src, COMSIG_SHOES_STEP_ACTION)
|
||||
else
|
||||
if(tied == SHOES_UNTIED && our_guy && user == our_guy)
|
||||
our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/untied) // if we're the ones unknotting our own laces, of course we know they're untied
|
||||
our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied) // if we're the ones unknotting our own laces, of course we know they're untied
|
||||
RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/check_trip, override=TRUE)
|
||||
|
||||
/**
|
||||
@@ -233,7 +233,7 @@
|
||||
our_guy.Knockdown(10)
|
||||
our_guy.visible_message("<span class='danger'>[our_guy] trips on [our_guy.p_their()] knotted shoelaces and falls! What a klutz!</span>", "<span class='userdanger'>You trip on your knotted shoelaces and fall over!</span>")
|
||||
SEND_SIGNAL(our_guy, COMSIG_ADD_MOOD_EVENT, "trip", /datum/mood_event/tripped) // well we realized they're knotted now!
|
||||
our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/knotted)
|
||||
our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/knotted)
|
||||
|
||||
else if(tied == SHOES_UNTIED)
|
||||
var/wiser = TRUE // did we stumble and realize our laces are undone?
|
||||
@@ -263,7 +263,7 @@
|
||||
wiser = FALSE
|
||||
if(wiser)
|
||||
SEND_SIGNAL(our_guy, COMSIG_ADD_MOOD_EVENT, "untied", /datum/mood_event/untied) // well we realized they're untied now!
|
||||
our_alert = our_guy.throw_alert("shoealert", /obj/screen/alert/shoes/untied)
|
||||
our_alert = our_guy.throw_alert("shoealert", /atom/movable/screen/alert/shoes/untied)
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/on_attack_hand(mob/living/user, act_intent, unarmed_attack_flags)
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
var/mob/holder = null
|
||||
var/phase_time = 0
|
||||
var/phase_time_length = 3
|
||||
var/obj/screen/chronos_target/target_ui = null
|
||||
var/atom/movable/screen/chronos_target/target_ui = null
|
||||
var/obj/item/clothing/suit/space/chronos/chronosuit
|
||||
|
||||
/obj/effect/chronos_cam/singularity_act()
|
||||
@@ -299,13 +299,13 @@
|
||||
holder.unset_machine()
|
||||
return ..()
|
||||
|
||||
/obj/screen/chronos_target
|
||||
/atom/movable/screen/chronos_target
|
||||
name = "target display"
|
||||
screen_loc = "CENTER,CENTER"
|
||||
color = "#ff3311"
|
||||
blend_mode = BLEND_SUBTRACT
|
||||
|
||||
/obj/screen/chronos_target/New(loc, var/mob/living/carbon/human/user)
|
||||
/atom/movable/screen/chronos_target/New(loc, var/mob/living/carbon/human/user)
|
||||
if(user)
|
||||
var/icon/user_icon = getFlatIcon(user)
|
||||
icon = user_icon
|
||||
|
||||
@@ -280,23 +280,21 @@
|
||||
item_state = "qipao"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
can_adjust = FALSE
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
|
||||
/obj/item/clothing/under/costume/qipao/white
|
||||
name = "White Qipao"
|
||||
desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is white."
|
||||
icon_state = "qipao_white"
|
||||
item_state = "qipao_white"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/costume/qipao/red
|
||||
name = "Red Qipao"
|
||||
desc = "A Qipao, traditionally worn in ancient Earth China by women during social events and lunar new years. This one is red."
|
||||
icon_state = "qipao_red"
|
||||
item_state = "qipao_red"
|
||||
body_parts_covered = CHEST|GROIN
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/costume/cheongsam
|
||||
name = "Black Cheongsam"
|
||||
@@ -332,9 +330,11 @@
|
||||
|
||||
/obj/item/clothing/under/costume/kimono
|
||||
name = "Kimono"
|
||||
desc = "A traditional piece of clothing from japan"
|
||||
desc = "A traditional piece of clothing from Japan."
|
||||
icon_state = "kimono"
|
||||
item_state = "kimono"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/costume/kimono/black
|
||||
name = "Black Kimono"
|
||||
|
||||
@@ -319,37 +319,46 @@
|
||||
|
||||
/obj/item/clothing/under/misc/black_dress
|
||||
name = "little black dress"
|
||||
desc = "A small black dress"
|
||||
desc = "A small black dress."
|
||||
icon_state = "littleblackdress_s"
|
||||
item_state = "littleblackdress_s"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/misc/pinktutu
|
||||
name = "pink tutu"
|
||||
desc = "A pink tutu"
|
||||
desc = "A pink tutu."
|
||||
icon_state = "pinktutu_s"
|
||||
item_state = "pinktutu_s"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/misc/bathrobe
|
||||
name = "bathrobe"
|
||||
desc = "A blue bathrobe."
|
||||
icon_state = "bathrobe"
|
||||
item_state = "bathrobe"
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/misc/mechsuitred
|
||||
name = "red mech suit"
|
||||
desc = "What are you, stupid?"
|
||||
icon_state = "red_mech_suit"
|
||||
item_state = "red_mech_suit"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/misc/mechsuitwhite
|
||||
name = "white mech suit"
|
||||
desc = "...Mom?"
|
||||
icon_state = "white_mech_suit"
|
||||
item_state = "white_mech_suit"
|
||||
can_adjust = FALSE
|
||||
|
||||
/obj/item/clothing/under/misc/mechsuitblue
|
||||
name = "blue mech suit"
|
||||
desc = "Get in the damn robot already!"
|
||||
icon_state = "blue_mech_suit"
|
||||
item_state = "blue_mech_suit"
|
||||
can_adjust = FALSE
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
continue
|
||||
if(L.mob_biotypes & blacklisted_biotypes) //hey can you don't
|
||||
continue
|
||||
if(!(L in GLOB.player_list) && !L.mind)
|
||||
if(!(L in GLOB.player_list) && !L.mind && !L.incapacitated())
|
||||
potential += L
|
||||
|
||||
if(!potential.len)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
var/power = 1
|
||||
var/datum/sun/supernova
|
||||
var/storm_count = 0
|
||||
var/announced = FALSE
|
||||
|
||||
/datum/round_event/supernova/setup()
|
||||
announceWhen = rand(4, 60)
|
||||
@@ -30,9 +31,10 @@
|
||||
supernova.power_mod = 0
|
||||
|
||||
/datum/round_event/supernova/announce()
|
||||
var/message = "[station_name()]: Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux; if the supernova is close to your sun in the sky, your solars may receive this as a power boost.[power > 1 ? " Short burts of radiation may be possible, so please prepare accordingly." : ""] We hope you enjoy the light."
|
||||
var/message = "[station_name()]: Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux; if the supernova is close to your sun in the sky, your solars may receive this as a power boost.[power > 1 ? " Short burts of radiation may be possible, so please prepare accordingly." : "We expect no radiation bursts from this one."] We hope you enjoy the light."
|
||||
if(prob(power * 25))
|
||||
priority_announce(message, sender_override = "Nanotrasen Meteorology Division")
|
||||
announced = TRUE
|
||||
else
|
||||
print_command_report(message)
|
||||
|
||||
@@ -56,15 +58,16 @@
|
||||
supernova.power_mod = min(supernova.power_mod*1.2, power)
|
||||
if(activeFor > endWhen-10)
|
||||
supernova.power_mod /= 4
|
||||
if(prob(round(supernova.power_mod*2)) && prob(3) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
|
||||
if(prob(round(supernova.power_mod)) && prob(3) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
|
||||
SSweather.run_weather(/datum/weather/rad_storm/supernova)
|
||||
storm_count++
|
||||
|
||||
/datum/round_event/supernova/end()
|
||||
SSsun.suns -= supernova
|
||||
qdel(supernova)
|
||||
priority_announce("The supernova's flux is now negligible. Radiation storms have ceased. Have a pleasant shift, [station_name()], and thank you for bearing with nature.",
|
||||
sender_override = "Nanotrasen Meteorology Division")
|
||||
if(announced)
|
||||
priority_announce("The supernova's flux is now negligible. Radiation storms have ceased. Have a pleasant shift, [station_name()], and thank you for bearing with nature.",
|
||||
sender_override = "Nanotrasen Meteorology Division")
|
||||
|
||||
/datum/weather/rad_storm/supernova
|
||||
weather_duration_lower = 50
|
||||
|
||||
@@ -933,46 +933,46 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
feedback_details += "Type: [alert_type]"
|
||||
switch(alert_type)
|
||||
if("not_enough_oxy")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/not_enough_oxy, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_oxy, override = TRUE)
|
||||
if("not_enough_tox")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/not_enough_tox, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_tox, override = TRUE)
|
||||
if("not_enough_co2")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/not_enough_co2, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/not_enough_co2, override = TRUE)
|
||||
if("too_much_oxy")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/too_much_oxy, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_oxy, override = TRUE)
|
||||
if("too_much_co2")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/too_much_co2, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_co2, override = TRUE)
|
||||
if("too_much_tox")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/too_much_tox, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/too_much_tox, override = TRUE)
|
||||
if("nutrition")
|
||||
if(prob(50))
|
||||
target.throw_alert(alert_type, /obj/screen/alert/fat, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/fat, override = TRUE)
|
||||
else
|
||||
target.throw_alert(alert_type, /obj/screen/alert/starving, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/starving, override = TRUE)
|
||||
if("gravity")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/weightless, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/weightless, override = TRUE)
|
||||
if("fire")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/fire, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/fire, override = TRUE)
|
||||
if("temphot")
|
||||
alert_type = "temp"
|
||||
target.throw_alert(alert_type, /obj/screen/alert/hot, 3, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/hot, 3, override = TRUE)
|
||||
if("tempcold")
|
||||
alert_type = "temp"
|
||||
target.throw_alert(alert_type, /obj/screen/alert/cold, 3, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/cold, 3, override = TRUE)
|
||||
if("pressure")
|
||||
if(prob(50))
|
||||
target.throw_alert(alert_type, /obj/screen/alert/highpressure, 2, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/highpressure, 2, override = TRUE)
|
||||
else
|
||||
target.throw_alert(alert_type, /obj/screen/alert/lowpressure, 2, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/lowpressure, 2, override = TRUE)
|
||||
//BEEP BOOP I AM A ROBOT
|
||||
if("newlaw")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/newlaw, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/newlaw, override = TRUE)
|
||||
if("locked")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/locked, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/locked, override = TRUE)
|
||||
if("hacked")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/hacked, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/hacked, override = TRUE)
|
||||
if("charge")
|
||||
target.throw_alert(alert_type, /obj/screen/alert/emptycell, override = TRUE)
|
||||
target.throw_alert(alert_type, /atom/movable/screen/alert/emptycell, override = TRUE)
|
||||
sleep(duration)
|
||||
target.clear_alert(alert_type, clear_override = TRUE)
|
||||
qdel(src)
|
||||
@@ -1181,7 +1181,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
if(target.client)
|
||||
target.client.images += fire_overlay
|
||||
to_chat(target, "<span class='userdanger'>You're set on fire!</span>")
|
||||
target.throw_alert("fire", /obj/screen/alert/fire, override = TRUE)
|
||||
target.throw_alert("fire", /atom/movable/screen/alert/fire, override = TRUE)
|
||||
sleep(20)
|
||||
for(var/i in 1 to 3)
|
||||
if(target.fire_stacks <= 0)
|
||||
@@ -1203,7 +1203,7 @@ GLOBAL_LIST_INIT(hallucination_list, list(
|
||||
target.clear_alert("temp", clear_override = TRUE)
|
||||
else
|
||||
target.clear_alert("temp", clear_override = TRUE)
|
||||
target.throw_alert("temp", /obj/screen/alert/hot, stage, override = TRUE)
|
||||
target.throw_alert("temp", /atom/movable/screen/alert/hot, stage, override = TRUE)
|
||||
|
||||
/datum/hallucination/fire/proc/clear_fire()
|
||||
if(!active)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
. = ..()
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/customizable/proc/update_name(obj/item/reagent_containers/food/snacks/S)
|
||||
/obj/item/reagent_containers/food/snacks/customizable/update_name(obj/item/reagent_containers/food/snacks/S)
|
||||
for(var/obj/item/I in ingredients)
|
||||
if(!istype(S, I.type))
|
||||
customname = "custom"
|
||||
|
||||
@@ -59,6 +59,10 @@
|
||||
else
|
||||
icon_state = "[initial(icon_state)]-off"
|
||||
|
||||
/obj/machinery/smartfridge/update_overlays()
|
||||
. = ..()
|
||||
if(!stat)
|
||||
. += emissive_appearance(icon, "smartfridge-light-mask", alpha = src.alpha)
|
||||
|
||||
|
||||
/*******************
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
/obj/mafia_game_board,
|
||||
/obj/docking_port,
|
||||
/obj/shapeshift_holder,
|
||||
/obj/screen
|
||||
/atom/movable/screen
|
||||
))
|
||||
|
||||
/mob/living/simple_animal/jacq/Initialize()
|
||||
|
||||
@@ -430,7 +430,7 @@
|
||||
src.pixel_x = rand(-5, 5)
|
||||
src.pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/disk/plantgene/proc/update_name()
|
||||
/obj/item/disk/plantgene/update_name()
|
||||
if(gene)
|
||||
name = "[gene.get_name()] (plant data disk)"
|
||||
else
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
* almost guaranteed to be doing something wrong.
|
||||
*/
|
||||
/atom/movable/emissive_blocker
|
||||
name = ""
|
||||
plane = EMISSIVE_BLOCKER_PLANE
|
||||
layer = EMISSIVE_BLOCKER_LAYER
|
||||
name = "emissive blocker"
|
||||
plane = EMISSIVE_PLANE
|
||||
layer = FLOAT_LAYER
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS
|
||||
//Why?
|
||||
@@ -23,6 +23,8 @@
|
||||
verbs.Cut() //Cargo culting from lighting object, this maybe affects memory usage?
|
||||
|
||||
render_source = source
|
||||
color = GLOB.em_block_color
|
||||
|
||||
|
||||
/atom/movable/emissive_blocker/ex_act(severity)
|
||||
return FALSE
|
||||
|
||||
@@ -132,3 +132,54 @@
|
||||
/mob/living/proc/mob_light(_color, _range, _power, _duration)
|
||||
var/obj/effect/dummy/lighting_obj/moblight/mob_light_obj = new (src, _color, _range, _power, _duration)
|
||||
return mob_light_obj
|
||||
|
||||
// Setter for the light power of this atom.
|
||||
/atom/proc/set_light_power(new_power)
|
||||
if(new_power == light_power)
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_POWER, new_power) & COMPONENT_BLOCK_LIGHT_UPDATE)
|
||||
return
|
||||
. = light_power
|
||||
light_power = new_power
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_POWER, .)
|
||||
|
||||
/// Setter for the light range of this atom.
|
||||
/atom/proc/set_light_range(new_range)
|
||||
if(new_range == light_range)
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_RANGE, new_range) & COMPONENT_BLOCK_LIGHT_UPDATE)
|
||||
return
|
||||
. = light_range
|
||||
light_range = new_range
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_RANGE, .)
|
||||
|
||||
/// Setter for the light color of this atom.
|
||||
/atom/proc/set_light_color(new_color)
|
||||
if(new_color == light_color)
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_COLOR, new_color) & COMPONENT_BLOCK_LIGHT_UPDATE)
|
||||
return
|
||||
. = light_color
|
||||
light_color = new_color
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_COLOR, .)
|
||||
/*
|
||||
/// Setter for whether or not this atom's light is on.
|
||||
/atom/proc/set_light_on(new_value)
|
||||
if(new_value == )
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_ON, new_value) & COMPONENT_BLOCK_LIGHT_UPDATE)
|
||||
return
|
||||
. = light_on
|
||||
light_on = new_value
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_ON, .)
|
||||
|
||||
/// Setter for the light flags of this atom.
|
||||
/atom/proc/set_light_flags(new_value)
|
||||
if(new_value == light_flags)
|
||||
return
|
||||
if(SEND_SIGNAL(src, COMSIG_ATOM_SET_LIGHT_FLAGS, new_value) & COMPONENT_BLOCK_LIGHT_UPDATE)
|
||||
return
|
||||
. = light_flags
|
||||
light_flags = new_value
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_UPDATE_LIGHT_FLAGS, .)
|
||||
*/
|
||||
|
||||
@@ -91,7 +91,7 @@ INITIALIZE_IMMEDIATE(/mob/dead)
|
||||
|
||||
var/client/C = client
|
||||
to_chat(C, "<span class='notice'>Sending you to [pick].</span>")
|
||||
new /obj/screen/splash(C)
|
||||
new /atom/movable/screen/splash(C)
|
||||
|
||||
mob_transforming = TRUE
|
||||
sleep(29) //let the animation play
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
/mob/dead/new_player/Initialize()
|
||||
if(client && SSticker.state == GAME_STATE_STARTUP)
|
||||
var/obj/screen/splash/S = new(client, TRUE, TRUE)
|
||||
var/atom/movable/screen/splash/S = new(client, TRUE, TRUE)
|
||||
S.Fade(TRUE)
|
||||
|
||||
if(length(GLOB.newplayer_start))
|
||||
@@ -567,7 +567,7 @@
|
||||
if(job && !job.override_latejoin_spawn(character))
|
||||
SSjob.SendToLateJoin(character)
|
||||
if(!arrivals_docked)
|
||||
var/obj/screen/splash/Spl = new(character.client, TRUE)
|
||||
var/atom/movable/screen/splash/Spl = new(character.client, TRUE)
|
||||
Spl.Fade(TRUE)
|
||||
character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25)
|
||||
|
||||
|
||||
@@ -447,7 +447,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(message)
|
||||
to_chat(src, "<span class='ghostalert'>[message]</span>")
|
||||
if(source)
|
||||
var/obj/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /obj/screen/alert/notify_cloning)
|
||||
var/atom/movable/screen/alert/A = throw_alert("[REF(source)]_notify_cloning", /atom/movable/screen/alert/notify_cloning)
|
||||
if(A)
|
||||
if(client && client.prefs && client.prefs.UI_style)
|
||||
A.icon = ui_style2icon(client.prefs.UI_style)
|
||||
|
||||
@@ -39,29 +39,35 @@
|
||||
return
|
||||
|
||||
if(bodytemperature >= TCRYO && !(HAS_TRAIT(src, TRAIT_HUSK))) //cryosleep or husked people do not pump the blood.
|
||||
|
||||
//Blood regeneration if there is some space
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL && !HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
if(integrating_blood > 0)
|
||||
var/blood_integrated = max(integrating_blood - 1, 0)
|
||||
var/blood_diff = integrating_blood - blood_integrated
|
||||
integrating_blood = blood_integrated
|
||||
if(blood_volume < BLOOD_VOLUME_MAXIMUM)
|
||||
blood_volume += blood_diff
|
||||
if(blood_volume < BLOOD_VOLUME_NORMAL)
|
||||
var/nutrition_ratio = 0
|
||||
switch(nutrition)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
nutrition_ratio = 0.2
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
nutrition_ratio = 0.4
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
nutrition_ratio = 0.6
|
||||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
nutrition_ratio = 0.8
|
||||
else
|
||||
nutrition_ratio = 1
|
||||
if(satiety > 80)
|
||||
nutrition_ratio *= 1.25
|
||||
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR)
|
||||
blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio)
|
||||
if(!HAS_TRAIT(src, TRAIT_NOHUNGER))
|
||||
switch(nutrition)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
nutrition_ratio = 0.2
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
nutrition_ratio = 0.4
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FED)
|
||||
nutrition_ratio = 0.6
|
||||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED)
|
||||
nutrition_ratio = 0.8
|
||||
else
|
||||
nutrition_ratio = 1
|
||||
if(satiety > 80)
|
||||
nutrition_ratio *= 1.25
|
||||
adjust_nutrition(-nutrition_ratio * HUNGER_FACTOR)
|
||||
blood_volume = min(BLOOD_VOLUME_NORMAL, blood_volume + 0.5 * nutrition_ratio)
|
||||
|
||||
//Effects of bloodloss
|
||||
var/word = pick("dizzy","woozy","faint")
|
||||
switch(blood_volume)
|
||||
var/blood_effect_volume = blood_volume + integrating_blood
|
||||
switch(blood_effect_volume)
|
||||
if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS)
|
||||
if(prob(10))
|
||||
to_chat(src, "<span class='warning'>You feel terribly bloated.</span>")
|
||||
@@ -94,14 +100,22 @@
|
||||
bleed(temp_bleed)
|
||||
|
||||
//Makes a blood drop, leaking amt units of blood from the mob
|
||||
/mob/living/carbon/proc/bleed(amt)
|
||||
if(blood_volume)
|
||||
/mob/living/carbon/proc/bleed(amt, force)
|
||||
var/bled = FALSE //Have we bled amnt?
|
||||
if(blood_volume > amt || force && blood_volume)
|
||||
blood_volume = max(blood_volume - amt, 0)
|
||||
if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean
|
||||
if(amt >= 10)
|
||||
add_splatter_floor(src.loc)
|
||||
else
|
||||
add_splatter_floor(src.loc, 1)
|
||||
bled = TRUE
|
||||
if(integrating_blood > amt || force && integrating_blood)
|
||||
integrating_blood = max(integrating_blood - amt, 0)
|
||||
bled = TRUE
|
||||
if(!bled && !force) //If we are already cycling back through, don't do this again
|
||||
bleed(amt, TRUE) //we cycle back through to try to bleed SOMETHING, not neccesarily the required amount
|
||||
return
|
||||
if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean
|
||||
if(amt >= 10)
|
||||
add_splatter_floor(src.loc)
|
||||
else
|
||||
add_splatter_floor(src.loc, TRUE)
|
||||
|
||||
/mob/living/carbon/human/bleed(amt)
|
||||
amt *= physiology.bleed_mod
|
||||
@@ -114,6 +128,7 @@
|
||||
|
||||
/mob/living/proc/restore_blood()
|
||||
blood_volume = initial(blood_volume)
|
||||
integrating_blood = 0
|
||||
|
||||
/mob/living/carbon/restore_blood()
|
||||
blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio)
|
||||
@@ -368,10 +383,17 @@
|
||||
return
|
||||
blood_ratio = 1
|
||||
|
||||
/mob/living/proc/AdjustBloodVol(var/value)
|
||||
/mob/living/proc/AdjustBloodVol(value)
|
||||
if(blood_ratio == value)
|
||||
return
|
||||
blood_ratio = value
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
H.handle_blood()
|
||||
|
||||
/mob/living/proc/adjust_integration_blood(value, remove_actual_blood, force)
|
||||
if(integrating_blood + value < 0 && remove_actual_blood)
|
||||
blood_volume += value + integrating_blood
|
||||
blood_volume = max(blood_volume, 0)
|
||||
integrating_blood += value
|
||||
integrating_blood = clamp(integrating_blood, 0, force ? INFINITY : (BLOOD_VOLUME_MAXIMUM - (integrating_blood + blood_volume)))
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
|
||||
//Body temperature is too hot.
|
||||
throw_alert("alien_fire", /obj/screen/alert/alien_fire)
|
||||
throw_alert("alien_fire", /atom/movable/screen/alert/alien_fire)
|
||||
switch(bodytemperature)
|
||||
if(360 to 400)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
meleeKnockdownPower = 75
|
||||
meleeSlashHumanPower = 20
|
||||
meleeSlashSAPower = 45
|
||||
var/obj/screen/leap_icon = null
|
||||
var/atom/movable/screen/leap_icon = null
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/create_internal_organs()
|
||||
internal_organs += new /obj/item/organ/alien/plasmavessel/small
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
if(Toxins_pp > tox_detect_threshold) // Detect toxins in air
|
||||
adjustPlasma(breath.get_moles(GAS_PLASMA)*250)
|
||||
throw_alert("alien_tox", /obj/screen/alert/alien_tox)
|
||||
throw_alert("alien_tox", /atom/movable/screen/alert/alien_tox)
|
||||
|
||||
toxins_used = breath.get_moles(GAS_PLASMA)
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
owner.adjustOxyLoss(-heal_amt)
|
||||
owner.adjustCloneLoss(-heal_amt)
|
||||
if(owner.blood_volume && (owner.blood_volume < BLOOD_VOLUME_NORMAL))
|
||||
owner.blood_volume += 5
|
||||
owner.adjust_integration_blood(5)
|
||||
else
|
||||
owner.adjustPlasma(plasma_rate * 0.1)
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
owner.stuttering += 30
|
||||
|
||||
recent_queen_death = 1
|
||||
owner.throw_alert("alien_noqueen", /obj/screen/alert/alien_vulnerable)
|
||||
owner.throw_alert("alien_noqueen", /atom/movable/screen/alert/alien_vulnerable)
|
||||
addtimer(CALLBACK(src, .proc/clear_queen_death), QUEEN_DEATH_DEBUFF_DURATION)
|
||||
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
var/oindex = active_hand_index
|
||||
active_hand_index = held_index
|
||||
if(hud_used)
|
||||
var/obj/screen/inventory/hand/H
|
||||
var/atom/movable/screen/inventory/hand/H
|
||||
H = hud_used.hand_slots["[oindex]"]
|
||||
if(H)
|
||||
H.update_icon()
|
||||
@@ -158,7 +158,7 @@
|
||||
throw_mode_off()
|
||||
if(!target || !isturf(loc))
|
||||
return
|
||||
if(istype(target, /obj/screen))
|
||||
if(istype(target, /atom/movable/screen))
|
||||
return
|
||||
|
||||
//CIT CHANGES - makes it impossible to throw while in stamina softcrit
|
||||
@@ -699,7 +699,7 @@
|
||||
become_blind(EYES_COVERED)
|
||||
else if(tinttotal >= TINT_DARKENED)
|
||||
cure_blind(EYES_COVERED)
|
||||
overlay_fullscreen("tint", /obj/screen/fullscreen/impaired, 2)
|
||||
overlay_fullscreen("tint", /atom/movable/screen/fullscreen/impaired, 2)
|
||||
else
|
||||
cure_blind(EYES_COVERED)
|
||||
clear_fullscreen("tint", 0)
|
||||
@@ -775,10 +775,10 @@
|
||||
visionseverity = 9
|
||||
if(-INFINITY to -24)
|
||||
visionseverity = 10
|
||||
overlay_fullscreen("critvision", /obj/screen/fullscreen/crit/vision, visionseverity)
|
||||
overlay_fullscreen("critvision", /atom/movable/screen/fullscreen/crit/vision, visionseverity)
|
||||
else
|
||||
clear_fullscreen("critvision")
|
||||
overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
|
||||
overlay_fullscreen("crit", /atom/movable/screen/fullscreen/crit, severity)
|
||||
else
|
||||
clear_fullscreen("crit")
|
||||
clear_fullscreen("critvision")
|
||||
@@ -802,7 +802,7 @@
|
||||
severity = 6
|
||||
if(45 to INFINITY)
|
||||
severity = 7
|
||||
overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
|
||||
overlay_fullscreen("oxy", /atom/movable/screen/fullscreen/oxy, severity)
|
||||
else
|
||||
clear_fullscreen("oxy")
|
||||
|
||||
@@ -823,7 +823,7 @@
|
||||
severity = 5
|
||||
if(85 to INFINITY)
|
||||
severity = 6
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
|
||||
@@ -888,7 +888,7 @@
|
||||
if(handcuffed)
|
||||
drop_all_held_items()
|
||||
stop_pulling()
|
||||
throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
|
||||
throw_alert("handcuffed", /atom/movable/screen/alert/restrained/handcuffed, new_master = src.handcuffed)
|
||||
if(handcuffed.demoralize_criminals)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "handcuffed", /datum/mood_event/handcuffed)
|
||||
else
|
||||
@@ -1273,3 +1273,6 @@
|
||||
var/mob/living/carbon/C = usr
|
||||
if(I.can_give())
|
||||
C.give(src)
|
||||
|
||||
/mob/living/carbon/proc/functional_blood()
|
||||
return blood_volume + integrating_blood
|
||||
|
||||
@@ -361,7 +361,7 @@
|
||||
|
||||
return embeds
|
||||
|
||||
/mob/living/carbon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0)
|
||||
/mob/living/carbon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0)
|
||||
. = ..()
|
||||
|
||||
var/damage = override_protection ? intensity : intensity - get_eye_protection()
|
||||
|
||||
@@ -825,6 +825,7 @@
|
||||
dna.remove_mutation(HM.name)
|
||||
if(blood_volume < (BLOOD_VOLUME_NORMAL*blood_ratio))
|
||||
blood_volume = (BLOOD_VOLUME_NORMAL*blood_ratio)
|
||||
integrating_blood = 0
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker)
|
||||
|
||||
@@ -182,3 +182,8 @@
|
||||
destination.underwear = underwear
|
||||
destination.undershirt = undershirt
|
||||
destination.socks = socks
|
||||
|
||||
/mob/living/carbon/human/adjust_integration_blood(value, force)
|
||||
if(NOBLOOD in dna.species.species_traits) //Can't lose blood if your species doesn't have any
|
||||
return
|
||||
. = ..()
|
||||
|
||||
@@ -209,7 +209,7 @@
|
||||
update_tint()
|
||||
if(G.vision_correction)
|
||||
if(HAS_TRAIT(src, TRAIT_NEARSIGHT))
|
||||
overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1)
|
||||
overlay_fullscreen("nearsighted", /atom/movable/screen/fullscreen/impaired, 1)
|
||||
if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha))
|
||||
update_sight()
|
||||
if(!QDELETED(src))
|
||||
|
||||
@@ -89,15 +89,15 @@
|
||||
var/datum/species/S = dna.species
|
||||
|
||||
if(S.breathid == "o2")
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
|
||||
else if(S.breathid == "tox")
|
||||
throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox)
|
||||
throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox)
|
||||
else if(S.breathid == "co2")
|
||||
throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2)
|
||||
throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2)
|
||||
else if(S.breathid == "n2")
|
||||
throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro)
|
||||
throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro)
|
||||
else if(S.breathid == "ch3br")
|
||||
throw_alert("not_enough_ch3br", /obj/screen/alert/not_enough_ch3br)
|
||||
throw_alert("not_enough_ch3br", /atom/movable/screen/alert/not_enough_ch3br)
|
||||
|
||||
return FALSE
|
||||
else
|
||||
|
||||
@@ -1365,7 +1365,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
|
||||
/datum/species/proc/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
if(chem.type == exotic_blood && !istype(exotic_blood, /datum/reagent/blood))
|
||||
H.blood_volume = min(H.blood_volume + round(chem.volume, 0.1), BLOOD_VOLUME_MAXIMUM)
|
||||
H.adjust_integration_blood(round(chem.volume, 0.1))
|
||||
H.reagents.del_reagent(chem.type)
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -1459,13 +1459,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
|
||||
switch(H.nutrition)
|
||||
if(NUTRITION_LEVEL_FULL to INFINITY)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/fat)
|
||||
H.throw_alert("nutrition", /atom/movable/screen/alert/fat)
|
||||
if(NUTRITION_LEVEL_HUNGRY to NUTRITION_LEVEL_FULL)
|
||||
H.clear_alert("nutrition")
|
||||
if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_HUNGRY)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/hungry)
|
||||
H.throw_alert("nutrition", /atom/movable/screen/alert/hungry)
|
||||
if(0 to NUTRITION_LEVEL_STARVING)
|
||||
H.throw_alert("nutrition", /obj/screen/alert/starving)
|
||||
H.throw_alert("nutrition", /atom/movable/screen/alert/starving)
|
||||
|
||||
/datum/species/proc/update_health_hud(mob/living/carbon/human/H)
|
||||
return 0
|
||||
@@ -2169,19 +2169,19 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.adjust_bodytemperature(natural*(1/(thermal_protection+1)) + min(thermal_protection * (loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR, BODYTEMP_HEATING_MAX))
|
||||
switch((loc_temp - H.bodytemperature)*thermal_protection)
|
||||
if(-INFINITY to -50)
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/cold, 3)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 3)
|
||||
if(-50 to -35)
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/cold, 2)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2)
|
||||
if(-35 to -20)
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/cold, 1)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 1)
|
||||
if(-20 to 0) //This is the sweet spot where air is considered normal
|
||||
H.clear_alert("tempfeel")
|
||||
if(0 to 15) //When the air around you matches your body's temperature, you'll start to feel warm.
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/hot, 1)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 1)
|
||||
if(15 to 30)
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/hot, 2)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2)
|
||||
if(30 to INFINITY)
|
||||
H.throw_alert("tempfeel", /obj/screen/alert/hot, 3)
|
||||
H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 3)
|
||||
|
||||
// +/- 50 degrees from 310K is the 'safe' zone, where no damage is dealt.
|
||||
if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTHEAT))
|
||||
@@ -2202,11 +2202,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if (burn_damage)
|
||||
switch(burn_damage)
|
||||
if(0 to 2)
|
||||
H.throw_alert("temp", /obj/screen/alert/sweat, 1)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/sweat, 1)
|
||||
if(2 to 4)
|
||||
H.throw_alert("temp", /obj/screen/alert/sweat, 2)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/sweat, 2)
|
||||
else
|
||||
H.throw_alert("temp", /obj/screen/alert/sweat, 3)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/sweat, 3)
|
||||
burn_damage = burn_damage * heatmod * H.physiology.heat_mod
|
||||
if (H.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans
|
||||
H.emote("scream")
|
||||
@@ -2219,13 +2219,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR))
|
||||
switch(H.bodytemperature)
|
||||
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
|
||||
H.throw_alert("temp", /obj/screen/alert/shiver, 1)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/shiver, 1)
|
||||
H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN)
|
||||
if(120 to 200)
|
||||
H.throw_alert("temp", /obj/screen/alert/shiver, 2)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/shiver, 2)
|
||||
H.apply_damage(COLD_DAMAGE_LEVEL_2*coldmod*H.physiology.cold_mod, BURN)
|
||||
else
|
||||
H.throw_alert("temp", /obj/screen/alert/shiver, 3)
|
||||
H.throw_alert("temp", /atom/movable/screen/alert/shiver, 3)
|
||||
H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN)
|
||||
|
||||
else
|
||||
@@ -2240,21 +2240,21 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
||||
if(!HAS_TRAIT(H, TRAIT_RESISTHIGHPRESSURE))
|
||||
H.adjustBruteLoss(min(((adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 ) * PRESSURE_DAMAGE_COEFFICIENT, MAX_HIGH_PRESSURE_DAMAGE) * H.physiology.pressure_mod)
|
||||
H.throw_alert("pressure", /obj/screen/alert/highpressure, 2)
|
||||
H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2)
|
||||
else
|
||||
H.clear_alert("pressure")
|
||||
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
|
||||
H.throw_alert("pressure", /obj/screen/alert/highpressure, 1)
|
||||
H.throw_alert("pressure", /atom/movable/screen/alert/highpressure, 1)
|
||||
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
|
||||
H.clear_alert("pressure")
|
||||
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
|
||||
H.throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
|
||||
H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 1)
|
||||
else
|
||||
if(HAS_TRAIT(H, TRAIT_RESISTLOWPRESSURE))
|
||||
H.clear_alert("pressure")
|
||||
else
|
||||
H.adjustBruteLoss(LOW_PRESSURE_DAMAGE * H.physiology.pressure_mod)
|
||||
H.throw_alert("pressure", /obj/screen/alert/lowpressure, 2)
|
||||
H.throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2)
|
||||
|
||||
//////////
|
||||
// FIRE //
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_tail" = "None", "mam_ears" = "None",
|
||||
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None")
|
||||
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None", "mam_body_markings" = list())
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
|
||||
@@ -124,21 +124,21 @@
|
||||
brutemod = 1.25
|
||||
switch(get_charge(H))
|
||||
if(ETHEREAL_CHARGE_NONE)
|
||||
H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 3)
|
||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 3)
|
||||
if(ETHEREAL_CHARGE_NONE to ETHEREAL_CHARGE_LOWPOWER)
|
||||
H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 2)
|
||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 2)
|
||||
if(H.health > 10.5)
|
||||
apply_damage(0.65, TOX, null, null, H)
|
||||
brutemod = 1.75
|
||||
if(ETHEREAL_CHARGE_LOWPOWER to ETHEREAL_CHARGE_NORMAL)
|
||||
H.throw_alert("ethereal_charge", /obj/screen/alert/etherealcharge, 1)
|
||||
H.throw_alert("ethereal_charge", /atom/movable/screen/alert/etherealcharge, 1)
|
||||
brutemod = 1.5
|
||||
if(ETHEREAL_CHARGE_FULL to ETHEREAL_CHARGE_OVERLOAD)
|
||||
H.throw_alert("ethereal_overcharge", /obj/screen/alert/ethereal_overcharge, 1)
|
||||
H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 1)
|
||||
apply_damage(0.2, TOX, null, null, H)
|
||||
brutemod = 1.5
|
||||
if(ETHEREAL_CHARGE_OVERLOAD to ETHEREAL_CHARGE_DANGEROUS)
|
||||
H.throw_alert("ethereal_overcharge", /obj/screen/alert/ethereal_overcharge, 2)
|
||||
H.throw_alert("ethereal_overcharge", /atom/movable/screen/alert/ethereal_overcharge, 2)
|
||||
apply_damage(0.65, TOX, null, null, H)
|
||||
brutemod = 1.75
|
||||
if(prob(10)) //10% each tick for ethereals to explosively release excess energy if it reaches dangerous levels
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
id = SPECIES_FELINID
|
||||
limbs_id = SPECIES_HUMAN
|
||||
|
||||
mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None")
|
||||
mutant_bodyparts = list("mam_tail" = "Cat", "mam_ears" = "Cat", "deco_wings" = "None", "mam_body_markings" = list())
|
||||
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
mutanttail = /obj/item/organ/tail/cat
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
default_color = "FFFFFF"
|
||||
|
||||
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS_PARTSONLY,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade")
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF","mcolor3" = "FFFFFF","tail_human" = "None", "ears" = "None", "taur" = "None", "deco_wings" = "None", "legs" = "Plantigrade", "mam_body_markings" = list())
|
||||
use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
disliked_food = GROSS | RAW
|
||||
|
||||
@@ -53,16 +53,16 @@
|
||||
exotic_blood_color = "#" + H.dna.features["mcolor"]
|
||||
|
||||
/datum/species/jelly/spec_life(mob/living/carbon/human/H)
|
||||
if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for blooduskers
|
||||
if(H.stat == DEAD || HAS_TRAIT(H, TRAIT_NOMARROW)) //can't farm slime jelly from a dead slime/jelly person indefinitely, and no regeneration for bloodsuckers
|
||||
return
|
||||
if(!H.blood_volume)
|
||||
H.blood_volume += 5
|
||||
H.adjust_integration_blood(5)
|
||||
H.adjustBruteLoss(5)
|
||||
to_chat(H, "<span class='danger'>You feel empty!</span>")
|
||||
|
||||
if(H.blood_volume < (BLOOD_VOLUME_NORMAL * H.blood_ratio))
|
||||
if(H.nutrition >= NUTRITION_LEVEL_STARVING)
|
||||
H.blood_volume += 3
|
||||
H.adjust_integration_blood(3)
|
||||
H.nutrition -= 2.5
|
||||
if(H.blood_volume < (BLOOD_VOLUME_OKAY*H.blood_ratio))
|
||||
if(prob(5))
|
||||
@@ -82,7 +82,7 @@
|
||||
consumed_limb.drop_limb()
|
||||
to_chat(H, "<span class='userdanger'>Your [consumed_limb] is drawn back into your body, unable to maintain its shape!</span>")
|
||||
qdel(consumed_limb)
|
||||
H.blood_volume += 20
|
||||
H.adjust_integration_blood(20)
|
||||
|
||||
////////////////////////////////////////////////////////SLIMEPEOPLE///////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
if(prob(5))
|
||||
to_chat(H, "<span class='notice'>You feel very bloated!</span>")
|
||||
else if(H.nutrition >= NUTRITION_LEVEL_WELL_FED)
|
||||
H.blood_volume += 3
|
||||
H.adjust_integration_blood(3)
|
||||
H.nutrition -= 2.5
|
||||
|
||||
..()
|
||||
@@ -505,7 +505,7 @@
|
||||
button_icon_state = "slimeeject"
|
||||
..()
|
||||
|
||||
/datum/action/innate/integrate_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force)
|
||||
/datum/action/innate/integrate_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force)
|
||||
..(current_button, TRUE)
|
||||
if(species && species.current_extract)
|
||||
current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state))
|
||||
@@ -559,7 +559,7 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/action/innate/use_extract/ApplyIcon(obj/screen/movable/action_button/current_button, force)
|
||||
/datum/action/innate/use_extract/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force)
|
||||
..(current_button, TRUE)
|
||||
if(species && species.current_extract)
|
||||
current_button.add_overlay(mutable_appearance(species.current_extract.icon, species.current_extract.icon_state))
|
||||
|
||||
@@ -128,7 +128,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(UNIFORM_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM]
|
||||
inv.update_icon()
|
||||
|
||||
if(istype(w_uniform, /obj/item/clothing/under))
|
||||
@@ -180,7 +180,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(ID_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID]
|
||||
inv.update_icon()
|
||||
|
||||
var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER]
|
||||
@@ -205,7 +205,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(GLOVES_LAYER)
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES]
|
||||
inv.update_icon()
|
||||
|
||||
if(!gloves && bloody_hands)
|
||||
@@ -242,7 +242,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES]
|
||||
inv.update_icon()
|
||||
|
||||
if(glasses)
|
||||
@@ -269,7 +269,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS]
|
||||
inv.update_icon()
|
||||
|
||||
if(ears)
|
||||
@@ -295,7 +295,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES]
|
||||
inv.update_icon()
|
||||
|
||||
if(dna.species.mutant_bodyparts["taur"])
|
||||
@@ -330,7 +330,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(SUIT_STORE_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE]
|
||||
inv.update_icon()
|
||||
|
||||
if(s_store)
|
||||
@@ -357,7 +357,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
|
||||
inv.update_icon()
|
||||
|
||||
if(head)
|
||||
@@ -394,7 +394,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(BELT_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT]
|
||||
inv.update_icon()
|
||||
|
||||
if(belt)
|
||||
@@ -416,7 +416,7 @@ There are several things that need to be remembered:
|
||||
remove_overlay(SUIT_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT]
|
||||
inv.update_icon()
|
||||
|
||||
if(wear_suit)
|
||||
@@ -477,7 +477,7 @@ There are several things that need to be remembered:
|
||||
|
||||
/mob/living/carbon/human/update_inv_pockets()
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv
|
||||
var/atom/movable/screen/inventory/inv
|
||||
|
||||
inv = hud_used.inv_slots[SLOT_L_STORE]
|
||||
inv.update_icon()
|
||||
@@ -506,7 +506,7 @@ There are several things that need to be remembered:
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
|
||||
inv.update_icon()
|
||||
|
||||
if(wear_mask)
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
if(!targets)
|
||||
return
|
||||
for(var/mob/living/carbon/C in targets)
|
||||
var/obj/screen/alert/give/G = C.throw_alert("[src]", /obj/screen/alert/give)
|
||||
var/atom/movable/screen/alert/give/G = C.throw_alert("[src]", /atom/movable/screen/alert/give)
|
||||
if(!G)
|
||||
return
|
||||
G.setup(C, src, receiving)
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
adjustOxyLoss(1)
|
||||
|
||||
failed_last_breath = 1
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
|
||||
return 0
|
||||
|
||||
var/safe_oxy_min = 16
|
||||
@@ -183,7 +183,7 @@
|
||||
adjustOxyLoss(8)
|
||||
if(prob(20))
|
||||
emote("cough")
|
||||
throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy)
|
||||
throw_alert("too_much_oxy", /atom/movable/screen/alert/too_much_oxy)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
|
||||
if(O2_partialpressure < safe_oxy_min) //Not enough oxygen
|
||||
@@ -197,7 +197,7 @@
|
||||
else
|
||||
adjustOxyLoss(3)
|
||||
failed_last_breath = 1
|
||||
throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy)
|
||||
throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
|
||||
|
||||
else //Enough oxygen
|
||||
@@ -231,7 +231,7 @@
|
||||
if(Toxins_partialpressure > safe_tox_max)
|
||||
var/ratio = (breath.get_moles(GAS_PLASMA)/safe_tox_max) * 10
|
||||
adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
|
||||
throw_alert("too_much_tox", /obj/screen/alert/too_much_tox)
|
||||
throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox)
|
||||
else
|
||||
clear_alert("too_much_tox")
|
||||
|
||||
|
||||
@@ -80,13 +80,13 @@
|
||||
if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !HAS_TRAIT(src, TRAIT_RESISTHEAT))
|
||||
switch(bodytemperature)
|
||||
if(360 to 400)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 1)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 1)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_1, BURN)
|
||||
if(400 to 460)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 2)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 2)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_2, BURN)
|
||||
if(460 to INFINITY)
|
||||
throw_alert("temp", /obj/screen/alert/hot, 3)
|
||||
throw_alert("temp", /atom/movable/screen/alert/hot, 3)
|
||||
if(on_fire)
|
||||
apply_damage(HEAT_DAMAGE_LEVEL_3, BURN)
|
||||
else
|
||||
@@ -96,13 +96,13 @@
|
||||
if(!istype(loc, /obj/machinery/atmospherics/components/unary/cryo_cell))
|
||||
switch(bodytemperature)
|
||||
if(200 to 260)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 1)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 1)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_1, BURN)
|
||||
if(120 to 200)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 2)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 2)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_2, BURN)
|
||||
if(-INFINITY to 120)
|
||||
throw_alert("temp", /obj/screen/alert/cold, 3)
|
||||
throw_alert("temp", /atom/movable/screen/alert/cold, 3)
|
||||
apply_damage(COLD_DAMAGE_LEVEL_3, BURN)
|
||||
else
|
||||
clear_alert("temp")
|
||||
@@ -117,16 +117,16 @@
|
||||
switch(adjusted_pressure)
|
||||
if(HAZARD_HIGH_PRESSURE to INFINITY)
|
||||
adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) )
|
||||
throw_alert("pressure", /obj/screen/alert/highpressure, 2)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/highpressure, 2)
|
||||
if(WARNING_HIGH_PRESSURE to HAZARD_HIGH_PRESSURE)
|
||||
throw_alert("pressure", /obj/screen/alert/highpressure, 1)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/highpressure, 1)
|
||||
if(WARNING_LOW_PRESSURE to WARNING_HIGH_PRESSURE)
|
||||
clear_alert("pressure")
|
||||
if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE)
|
||||
throw_alert("pressure", /obj/screen/alert/lowpressure, 1)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 1)
|
||||
else
|
||||
adjustBruteLoss( LOW_PRESSURE_DAMAGE )
|
||||
throw_alert("pressure", /obj/screen/alert/lowpressure, 2)
|
||||
throw_alert("pressure", /atom/movable/screen/alert/lowpressure, 2)
|
||||
|
||||
return
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
overlays_standing[HANDCUFF_LAYER] = legcuffs
|
||||
apply_overlay(LEGCUFF_LAYER)
|
||||
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
|
||||
throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = legcuffed)
|
||||
|
||||
//monkey HUD updates for items in our inventory
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
/mob/living/carbon/adjust_drugginess(amount)
|
||||
druggy = max(druggy+amount, 0)
|
||||
if(druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
overlay_fullscreen("high", /atom/movable/screen/fullscreen/high)
|
||||
throw_alert("high", /atom/movable/screen/alert/high)
|
||||
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "high", /datum/mood_event/high)
|
||||
sound_environment_override = SOUND_ENVIRONMENT_DRUGGED
|
||||
else
|
||||
@@ -18,8 +18,8 @@
|
||||
/mob/living/carbon/set_drugginess(amount)
|
||||
druggy = max(amount, 0)
|
||||
if(druggy)
|
||||
overlay_fullscreen("high", /obj/screen/fullscreen/high)
|
||||
throw_alert("high", /obj/screen/alert/high)
|
||||
overlay_fullscreen("high", /atom/movable/screen/fullscreen/high)
|
||||
throw_alert("high", /atom/movable/screen/alert/high)
|
||||
else
|
||||
clear_fullscreen("high")
|
||||
clear_alert("high")
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK]
|
||||
inv?.update_icon()
|
||||
|
||||
if(wear_mask)
|
||||
@@ -105,7 +105,7 @@
|
||||
remove_overlay(NECK_LAYER)
|
||||
|
||||
if(client && hud_used && hud_used.inv_slots[SLOT_NECK])
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK]
|
||||
inv.update_icon()
|
||||
|
||||
if(wear_neck)
|
||||
@@ -119,7 +119,7 @@
|
||||
remove_overlay(BACK_LAYER)
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK]
|
||||
inv?.update_icon()
|
||||
|
||||
if(back)
|
||||
@@ -135,7 +135,7 @@
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
|
||||
var/atom/movable/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD]
|
||||
inv?.update_icon()
|
||||
|
||||
if(head)
|
||||
@@ -163,7 +163,7 @@
|
||||
|
||||
overlays_standing[LEGCUFF_LAYER] = legcuffs
|
||||
apply_overlay(LEGCUFF_LAYER)
|
||||
throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed)
|
||||
throw_alert("legcuffed", /atom/movable/screen/alert/restrained/legcuffed, new_master = legcuffed)
|
||||
|
||||
//mob HUD updates for items in our inventory
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
/mob/living/carbon/proc/update_hud_handcuffed()
|
||||
if(hud_used)
|
||||
for(var/hand in hud_used.hand_slots)
|
||||
var/obj/screen/inventory/hand/H = hud_used.hand_slots[hand]
|
||||
var/atom/movable/screen/inventory/hand/H = hud_used.hand_slots[hand]
|
||||
if(H)
|
||||
H.update_icon()
|
||||
|
||||
|
||||
@@ -548,7 +548,7 @@
|
||||
var/severity = 0
|
||||
var/healthpercent = (health/maxHealth) * 100
|
||||
if(hud_used?.healthdoll) //to really put you in the boots of a simplemob
|
||||
var/obj/screen/healthdoll/living/livingdoll = hud_used.healthdoll
|
||||
var/atom/movable/screen/healthdoll/living/livingdoll = hud_used.healthdoll
|
||||
switch(healthpercent)
|
||||
if(100 to INFINITY)
|
||||
livingdoll.icon_state = "living0"
|
||||
@@ -579,7 +579,7 @@
|
||||
UNLINT(livingdoll.filters += filter(type="alpha", icon = mob_mask))
|
||||
livingdoll.filters += filter(type="drop_shadow", size = -1)
|
||||
if(severity > 0)
|
||||
overlay_fullscreen("brute", /obj/screen/fullscreen/brute, severity)
|
||||
overlay_fullscreen("brute", /atom/movable/screen/fullscreen/brute, severity)
|
||||
else
|
||||
clear_fullscreen("brute")
|
||||
|
||||
@@ -869,11 +869,11 @@
|
||||
clear_alert("gravity")
|
||||
else
|
||||
if(has_gravity >= GRAVITY_DAMAGE_TRESHOLD)
|
||||
throw_alert("gravity", /obj/screen/alert/veryhighgravity)
|
||||
throw_alert("gravity", /atom/movable/screen/alert/veryhighgravity)
|
||||
else
|
||||
throw_alert("gravity", /obj/screen/alert/highgravity)
|
||||
throw_alert("gravity", /atom/movable/screen/alert/highgravity)
|
||||
else
|
||||
throw_alert("gravity", /obj/screen/alert/weightless)
|
||||
throw_alert("gravity", /atom/movable/screen/alert/weightless)
|
||||
if(!override && !is_flying())
|
||||
INVOKE_ASYNC(src, /atom/movable.proc/float, !has_gravity)
|
||||
|
||||
@@ -1159,7 +1159,7 @@
|
||||
visible_message("<span class='warning'>[src] catches fire!</span>", \
|
||||
"<span class='userdanger'>You're set on fire!</span>")
|
||||
new/obj/effect/dummy/lighting_obj/moblight/fire(src)
|
||||
throw_alert("fire", /obj/screen/alert/fire)
|
||||
throw_alert("fire", /atom/movable/screen/alert/fire)
|
||||
update_fire()
|
||||
SEND_SIGNAL(src, COMSIG_LIVING_IGNITED,src)
|
||||
return TRUE
|
||||
|
||||
@@ -539,7 +539,7 @@
|
||||
|
||||
|
||||
//called when the mob receives a bright flash
|
||||
/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash, override_protection = 0)
|
||||
/mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash, override_protection = 0)
|
||||
if((override_protection || get_eye_protection() < intensity) && (override_blindness_check || !(HAS_TRAIT(src, TRAIT_BLIND))))
|
||||
overlay_fullscreen("flash", type)
|
||||
addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25)
|
||||
|
||||
@@ -112,6 +112,7 @@
|
||||
var/stun_absorption = null //converted to a list of stun absorption sources this mob has when one is added
|
||||
|
||||
var/blood_volume = 0 //how much blood the mob has
|
||||
var/integrating_blood = 0 //this is the variable you want to affect if you want to give the mob blood, this will slowly turn into normal blood, preventing some cheesyness, use adjust_integration_blood() instead of modifying directly
|
||||
var/blood_ratio = 1 //How much blood the mob needs, in terms of ratio (i.e 1.2 will require BLOOD_VOLUME_NORMAL of 672) DO NOT GO ABOVE 3.55 Well, actually you can but, then they can't get enough blood.
|
||||
var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
RegisterSignal(src, SIGNAL_TRAIT(TRAIT_SPRINT_LOCKED), .proc/update_sprint_lock)
|
||||
|
||||
/mob/living/proc/update_sprint_icon()
|
||||
var/obj/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
var/atom/movable/screen/sprintbutton/S = locate() in hud_used?.static_inventory
|
||||
S?.update_icon()
|
||||
|
||||
/mob/living/proc/update_hud_sprint_bar()
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
|
||||
|
||||
var/multicam_on = FALSE
|
||||
var/obj/screen/movable/pic_in_pic/ai/master_multicam
|
||||
var/atom/movable/screen/movable/pic_in_pic/ai/master_multicam
|
||||
var/list/multicam_screens = list()
|
||||
var/list/all_eyes = list()
|
||||
var/max_multicams = 6
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
//Picture in picture
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai
|
||||
/atom/movable/screen/movable/pic_in_pic/ai
|
||||
var/mob/living/silicon/ai/ai
|
||||
var/mutable_appearance/highlighted_background
|
||||
var/highlighted = FALSE
|
||||
var/mob/camera/aiEye/pic_in_pic/aiEye
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/Initialize()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/Initialize()
|
||||
. = ..()
|
||||
aiEye = new /mob/camera/aiEye/pic_in_pic()
|
||||
aiEye.screen = src
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/Destroy()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/Destroy()
|
||||
set_ai(null)
|
||||
QDEL_NULL(aiEye)
|
||||
return ..()
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/Click()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/Click()
|
||||
..()
|
||||
if(ai)
|
||||
ai.select_main_multicam_window(src)
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/make_backgrounds()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/make_backgrounds()
|
||||
..()
|
||||
highlighted_background = new /mutable_appearance()
|
||||
highlighted_background.icon = 'icons/misc/pic_in_pic.dmi'
|
||||
highlighted_background.icon_state = "background_highlight"
|
||||
highlighted_background.layer = SPACE_LAYER
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/add_background()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/add_background()
|
||||
if((width > 0) && (height > 0))
|
||||
var/matrix/M = matrix()
|
||||
M.Scale(width + 0.5, height + 0.5)
|
||||
@@ -37,35 +37,35 @@
|
||||
standard_background.transform = M
|
||||
add_overlay(highlighted ? highlighted_background : standard_background)
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/set_view_size(width, height, do_refresh = TRUE)
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/set_view_size(width, height, do_refresh = TRUE)
|
||||
aiEye.static_visibility_range = (round(max(width, height) / 2) + 1)
|
||||
if(ai)
|
||||
ai.camera_visibility(aiEye)
|
||||
..()
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/set_view_center(atom/target, do_refresh = TRUE)
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/set_view_center(atom/target, do_refresh = TRUE)
|
||||
..()
|
||||
aiEye.setLoc(get_turf(target))
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/refresh_view()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/refresh_view()
|
||||
..()
|
||||
aiEye.setLoc(get_turf(center))
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/proc/highlight()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/proc/highlight()
|
||||
if(highlighted)
|
||||
return
|
||||
highlighted = TRUE
|
||||
cut_overlay(standard_background)
|
||||
add_overlay(highlighted_background)
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/proc/unhighlight()
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/proc/unhighlight()
|
||||
if(!highlighted)
|
||||
return
|
||||
highlighted = FALSE
|
||||
cut_overlay(highlighted_background)
|
||||
add_overlay(standard_background)
|
||||
|
||||
/obj/screen/movable/pic_in_pic/ai/proc/set_ai(mob/living/silicon/ai/new_ai)
|
||||
/atom/movable/screen/movable/pic_in_pic/ai/proc/set_ai(mob/living/silicon/ai/new_ai)
|
||||
if(ai)
|
||||
ai.multicam_screens -= src
|
||||
ai.all_eyes -= aiEye
|
||||
@@ -120,7 +120,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
|
||||
invisibility = INVISIBILITY_OBSERVER
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
icon_state = "ai_pip_camera"
|
||||
var/obj/screen/movable/pic_in_pic/ai/screen
|
||||
var/atom/movable/screen/movable/pic_in_pic/ai/screen
|
||||
var/list/cameras_telegraphed = list()
|
||||
var/telegraph_cameras = TRUE
|
||||
var/telegraph_range = 7
|
||||
@@ -204,7 +204,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
|
||||
if(!silent)
|
||||
to_chat(src, "<span class='warning'>Cannot place more than [max_multicams] multicamera windows.</span>")
|
||||
return
|
||||
var/obj/screen/movable/pic_in_pic/ai/C = new /obj/screen/movable/pic_in_pic/ai()
|
||||
var/atom/movable/screen/movable/pic_in_pic/ai/C = new /atom/movable/screen/movable/pic_in_pic/ai()
|
||||
C.set_view_size(3, 3, FALSE)
|
||||
C.set_view_center(get_turf(eyeobj))
|
||||
C.set_ai(src)
|
||||
@@ -235,7 +235,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
|
||||
reset_perspective(GLOB.ai_camera_room_landmark)
|
||||
if(client)
|
||||
for(var/V in multicam_screens)
|
||||
var/obj/screen/movable/pic_in_pic/P = V
|
||||
var/atom/movable/screen/movable/pic_in_pic/P = V
|
||||
P.show_to(client)
|
||||
|
||||
/mob/living/silicon/ai/proc/end_multicam()
|
||||
@@ -245,13 +245,13 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room)
|
||||
select_main_multicam_window(null)
|
||||
if(client)
|
||||
for(var/V in multicam_screens)
|
||||
var/obj/screen/movable/pic_in_pic/P = V
|
||||
var/atom/movable/screen/movable/pic_in_pic/P = V
|
||||
P.unshow_to(client)
|
||||
reset_perspective()
|
||||
to_chat(src, "<span class='notice'>Multiple-camera viewing mode deactivated.</span>")
|
||||
|
||||
|
||||
/mob/living/silicon/ai/proc/select_main_multicam_window(obj/screen/movable/pic_in_pic/ai/P)
|
||||
/mob/living/silicon/ai/proc/select_main_multicam_window(atom/movable/screen/movable/pic_in_pic/ai/P)
|
||||
if(master_multicam == P)
|
||||
return
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
make_laws()
|
||||
|
||||
/mob/living/silicon/proc/post_lawchange(announce = TRUE)
|
||||
throw_alert("newlaw", /obj/screen/alert/newlaw)
|
||||
throw_alert("newlaw", /atom/movable/screen/alert/newlaw)
|
||||
if(announce && last_lawchange_announce != world.time)
|
||||
to_chat(src, "<b>Your laws have been changed.</b>")
|
||||
addtimer(CALLBACK(src, .proc/show_laws), 0)
|
||||
|
||||
@@ -58,15 +58,15 @@
|
||||
if(0.75 to INFINITY)
|
||||
clear_alert("charge")
|
||||
if(0.5 to 0.75)
|
||||
throw_alert("charge", /obj/screen/alert/lowcell, 1)
|
||||
throw_alert("charge", /atom/movable/screen/alert/lowcell, 1)
|
||||
if(0.25 to 0.5)
|
||||
throw_alert("charge", /obj/screen/alert/lowcell, 2)
|
||||
throw_alert("charge", /atom/movable/screen/alert/lowcell, 2)
|
||||
if(0.01 to 0.25)
|
||||
throw_alert("charge", /obj/screen/alert/lowcell, 3)
|
||||
throw_alert("charge", /atom/movable/screen/alert/lowcell, 3)
|
||||
else
|
||||
throw_alert("charge", /obj/screen/alert/emptycell)
|
||||
throw_alert("charge", /atom/movable/screen/alert/emptycell)
|
||||
else
|
||||
throw_alert("charge", /obj/screen/alert/nocell)
|
||||
throw_alert("charge", /atom/movable/screen/alert/nocell)
|
||||
|
||||
//Robots on fire
|
||||
/mob/living/silicon/robot/handle_fire()
|
||||
|
||||
@@ -23,9 +23,9 @@
|
||||
robot_modules_background.layer = HUD_LAYER //Objects that appear on screen are on layer ABOVE_HUD_LAYER, UI should be just below it.
|
||||
robot_modules_background.plane = HUD_PLANE
|
||||
|
||||
inv1 = new /obj/screen/robot/module1()
|
||||
inv2 = new /obj/screen/robot/module2()
|
||||
inv3 = new /obj/screen/robot/module3()
|
||||
inv1 = new /atom/movable/screen/robot/module1()
|
||||
inv2 = new /atom/movable/screen/robot/module2()
|
||||
inv3 = new /atom/movable/screen/robot/module3()
|
||||
|
||||
previous_health = health
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
if(wires.is_cut(WIRE_LOCKDOWN))
|
||||
state = TRUE
|
||||
if(state)
|
||||
throw_alert("locked", /obj/screen/alert/locked)
|
||||
throw_alert("locked", /atom/movable/screen/alert/locked)
|
||||
else
|
||||
clear_alert("locked")
|
||||
locked_down = state
|
||||
@@ -611,7 +611,7 @@
|
||||
module.rebuild_modules()
|
||||
update_icons()
|
||||
if(emagged)
|
||||
throw_alert("hacked", /obj/screen/alert/hacked)
|
||||
throw_alert("hacked", /atom/movable/screen/alert/hacked)
|
||||
else
|
||||
clear_alert("hacked")
|
||||
|
||||
|
||||
@@ -26,15 +26,15 @@
|
||||
var/previous_health
|
||||
//Hud stuff
|
||||
|
||||
var/obj/screen/inv1 = null
|
||||
var/obj/screen/inv2 = null
|
||||
var/obj/screen/inv3 = null
|
||||
var/obj/screen/lamp_button = null
|
||||
var/obj/screen/thruster_button = null
|
||||
var/obj/screen/hands = null
|
||||
var/atom/movable/screen/inv1 = null
|
||||
var/atom/movable/screen/inv2 = null
|
||||
var/atom/movable/screen/inv3 = null
|
||||
var/atom/movable/screen/lamp_button = null
|
||||
var/atom/movable/screen/thruster_button = null
|
||||
var/atom/movable/screen/hands = null
|
||||
|
||||
var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not
|
||||
var/obj/screen/robot_modules_background
|
||||
var/atom/movable/screen/robot_modules_background
|
||||
|
||||
//3 Modules can be activated at any one time.
|
||||
var/obj/item/robot_module/module = null
|
||||
@@ -90,14 +90,14 @@
|
||||
///Lamp brightness. Starts at 3, but can be 1 - 5.
|
||||
var/lamp_intensity = 3
|
||||
///Lamp button reference
|
||||
var/obj/screen/robot/lamp/lampButton
|
||||
var/atom/movable/screen/robot/lamp/lampButton
|
||||
|
||||
var/sight_mode = 0
|
||||
hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD, DIAG_BATT_HUD, DIAG_TRACK_HUD)
|
||||
|
||||
///The reference to the built-in tablet that borgs carry.
|
||||
var/obj/item/modular_computer/tablet/integrated/modularInterface
|
||||
var/obj/screen/robot/modPC/interfaceButton
|
||||
var/atom/movable/screen/robot/modPC/interfaceButton
|
||||
|
||||
var/list/upgrades = list()
|
||||
|
||||
|
||||
@@ -144,6 +144,6 @@
|
||||
P.on_hit(src, 0, def_zone)
|
||||
return BULLET_ACT_HIT
|
||||
|
||||
/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash/static)
|
||||
/mob/living/silicon/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash/static)
|
||||
if(affect_silicon)
|
||||
return ..()
|
||||
|
||||
@@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
|
||||
var/cooldown = 0
|
||||
var/mob/living/carbon/summoner
|
||||
var/range = 13 //how far from the user the spirit can be
|
||||
var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
|
||||
var/toggle_button_type = /atom/movable/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses
|
||||
var/playstyle_string = "<span class='holoparasite bold'>You are a standard Guardian. You shouldn't exist!</span>"
|
||||
var/magic_fluff_string = "<span class='holoparasite'>You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!</span>"
|
||||
var/tech_fluff_string = "<span class='holoparasite'>BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!</span>"
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Assassin modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one! It's an assassin carp! Just when you thought it was safe to go back to the water... which is unhelpful, because we're in space.</span>"
|
||||
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode/Assassin
|
||||
toggle_button_type = /atom/movable/screen/guardian/ToggleMode/Assassin
|
||||
var/toggle = FALSE
|
||||
var/stealthcooldown = 100
|
||||
var/obj/screen/alert/canstealthalert
|
||||
var/obj/screen/alert/instealthalert
|
||||
var/atom/movable/screen/alert/canstealthalert
|
||||
var/atom/movable/screen/alert/instealthalert
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/assassin/Initialize()
|
||||
. = ..()
|
||||
@@ -86,12 +86,12 @@
|
||||
if(stealthcooldown <= world.time)
|
||||
if(toggle)
|
||||
if(!instealthalert)
|
||||
instealthalert = throw_alert("instealth", /obj/screen/alert/instealth)
|
||||
instealthalert = throw_alert("instealth", /atom/movable/screen/alert/instealth)
|
||||
clear_alert("canstealth")
|
||||
canstealthalert = null
|
||||
else
|
||||
if(!canstealthalert)
|
||||
canstealthalert = throw_alert("canstealth", /obj/screen/alert/canstealth)
|
||||
canstealthalert = throw_alert("canstealth", /atom/movable/screen/alert/canstealth)
|
||||
clear_alert("instealth")
|
||||
instealthalert = null
|
||||
else
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Charge modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one! It's a charger carp, that likes running at people. But it doesn't have any legs...</span>"
|
||||
var/charging = 0
|
||||
var/obj/screen/alert/chargealert
|
||||
var/atom/movable/screen/alert/chargealert
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/charger/BiologicalLife(seconds, times_fired)
|
||||
if(!(. = ..()))
|
||||
return
|
||||
if(ranged_cooldown <= world.time)
|
||||
if(!chargealert)
|
||||
chargealert = throw_alert("charge", /obj/screen/alert/cancharge)
|
||||
chargealert = throw_alert("charge", /atom/movable/screen/alert/cancharge)
|
||||
else
|
||||
clear_alert("charge")
|
||||
chargealert = null
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the Guardian, a stalwart protector that never leaves the side of its charge.</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Protector modules loaded. Holoparasite swarm online.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught one! Wait, no... it caught you! The fisher has become the fishy.</span>"
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode
|
||||
toggle_button_type = /atom/movable/screen/guardian/ToggleMode
|
||||
var/toggle = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/guardian/protector/ex_act(severity)
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! Caught one, it's a ranged carp. This fishy can watch people pee in the ocean.</span>"
|
||||
see_invisible = SEE_INVISIBLE_LIVING
|
||||
see_in_dark = 8
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode
|
||||
toggle_button_type = /atom/movable/screen/guardian/ToggleMode
|
||||
var/list/snares = list()
|
||||
var/toggle = FALSE
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
magic_fluff_string = "<span class='holoparasite'>..And draw the CMO, a potent force of life... and death.</span>"
|
||||
carp_fluff_string = "<span class='holoparasite'>CARP CARP CARP! You caught a support carp. It's a kleptocarp!</span>"
|
||||
tech_fluff_string = "<span class='holoparasite'>Boot sequence complete. Support modules active. Holoparasite swarm online.</span>"
|
||||
toggle_button_type = /obj/screen/guardian/ToggleMode
|
||||
toggle_button_type = /atom/movable/screen/guardian/ToggleMode
|
||||
var/obj/structure/receiving_pad/beacon
|
||||
var/beacon_cooldown = 0
|
||||
var/toggle = FALSE
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
L.SetUnconscious(0, FALSE)
|
||||
L.adjustOxyLoss(-50)// do CPR first
|
||||
if(L.blood_volume <= 500) //bandage them up and give em some blood if they're bleeding
|
||||
L.blood_volume += 30
|
||||
L.adjust_integration_blood(30)
|
||||
L.bleedsuppress = 0
|
||||
if(L.getBruteLoss() >= 50)// first, did we beat them into crit? if so, heal that
|
||||
var/healing = min(L.getBruteLoss(), 120)
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
status_type = STATUS_EFFECT_MULTIPLE
|
||||
alert_type = null
|
||||
tick_interval = 1
|
||||
var/obj/screen/seedling/seedling_screen_object
|
||||
var/atom/movable/screen/seedling/seedling_screen_object
|
||||
var/atom/target
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
/datum/status_effect/seedling_beam_indicator/on_apply()
|
||||
if(owner.client)
|
||||
seedling_screen_object = new /obj/screen/seedling()
|
||||
seedling_screen_object = new /atom/movable/screen/seedling()
|
||||
owner.client.screen += seedling_screen_object
|
||||
tick()
|
||||
return ..()
|
||||
@@ -98,7 +98,7 @@
|
||||
final.Turn(target_angle)
|
||||
seedling_screen_object.transform = final
|
||||
|
||||
/obj/screen/seedling
|
||||
/atom/movable/screen/seedling
|
||||
icon = 'icons/mob/jungle/arachnid.dmi'
|
||||
icon_state = "seedling_beam_indicator"
|
||||
screen_loc = "CENTER:-16,CENTER:-16"
|
||||
|
||||
@@ -339,11 +339,11 @@ Difficulty: Extremely Hard
|
||||
id = "ice_block_talisman"
|
||||
duration = 25
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
alert_type = /obj/screen/alert/status_effect/ice_block_talisman
|
||||
alert_type = /atom/movable/screen/alert/status_effect/ice_block_talisman
|
||||
/// Stored icon overlay for the hit mob, removed when effect is removed
|
||||
var/icon/cube
|
||||
|
||||
/obj/screen/alert/status_effect/ice_block_talisman
|
||||
/atom/movable/screen/alert/status_effect/ice_block_talisman
|
||||
name = "Frozen Solid"
|
||||
desc = "You're frozen inside an ice cube, and cannot move!"
|
||||
icon_state = "frozen"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user