Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into bleeding-edge-freeze
@@ -299,7 +299,7 @@ proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
|
|||||||
//Shares a specific ratio of gas between mixtures using simple weighted averages.
|
//Shares a specific ratio of gas between mixtures using simple weighted averages.
|
||||||
var
|
var
|
||||||
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
ratio = 0.33
|
ratio = sharing_lookup_table[6]
|
||||||
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
|
||||||
size = max(1,A.group_multiplier)
|
size = max(1,A.group_multiplier)
|
||||||
@@ -376,23 +376,18 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
|
|||||||
unsim_plasma = 0
|
unsim_plasma = 0
|
||||||
unsim_heat_capacity = 0
|
unsim_heat_capacity = 0
|
||||||
unsim_temperature = 0
|
unsim_temperature = 0
|
||||||
|
|
||||||
for(var/turf/T in unsimulated_tiles)
|
for(var/turf/T in unsimulated_tiles)
|
||||||
unsim_oxygen += T.oxygen
|
unsim_oxygen += T.oxygen
|
||||||
unsim_co2 += T.carbon_dioxide
|
unsim_co2 += T.carbon_dioxide
|
||||||
unsim_nitrogen += T.nitrogen
|
unsim_nitrogen += T.nitrogen
|
||||||
unsim_plasma += T.toxins
|
unsim_plasma += T.toxins
|
||||||
|
|
||||||
// Make sure it actually has gas in it, and use the heat capacity of that.
|
|
||||||
// Space and unsimulated tiles do NOT have a heat capacity. Thus we don't
|
|
||||||
// add them. This means "space is not cold", which turns out just fine in
|
|
||||||
// gameplay terms.
|
|
||||||
if(istype(T, /turf/simulated))
|
|
||||||
unsim_heat_capacity += T:air.heat_capacity()
|
|
||||||
|
|
||||||
unsim_temperature += T.temperature/unsimulated_tiles.len
|
unsim_temperature += T.temperature/unsimulated_tiles.len
|
||||||
|
|
||||||
|
unsim_heat_capacity = HEAT_CAPACITY_CALCULATION(unsim_oxygen,unsim_co2,unsim_nitrogen,unsim_plasma)
|
||||||
|
|
||||||
var
|
var
|
||||||
ratio = 0.33
|
ratio = sharing_lookup_table[6]
|
||||||
|
|
||||||
old_pressure = A.return_pressure()
|
old_pressure = A.return_pressure()
|
||||||
|
|
||||||
@@ -404,7 +399,7 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
|
|||||||
// slowly than small rooms, preserving our good old "hollywood-style"
|
// slowly than small rooms, preserving our good old "hollywood-style"
|
||||||
// oh-shit effect when large rooms get breached, but still having small
|
// oh-shit effect when large rooms get breached, but still having small
|
||||||
// rooms remain pressurized for long enough to make escape possible.
|
// rooms remain pressurized for long enough to make escape possible.
|
||||||
share_size = max(1,size - 5 + unsimulated_tiles.len)
|
share_size = max(1, unsimulated_tiles.len)
|
||||||
|
|
||||||
full_oxy = A.oxygen * size
|
full_oxy = A.oxygen * size
|
||||||
full_nitro = A.nitrogen * size
|
full_nitro = A.nitrogen * size
|
||||||
@@ -444,7 +439,7 @@ proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
|
|||||||
//Shares a specific ratio of gas between mixtures using simple weighted averages.
|
//Shares a specific ratio of gas between mixtures using simple weighted averages.
|
||||||
var
|
var
|
||||||
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
ratio = 0.33
|
ratio = sharing_lookup_table[6]
|
||||||
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
|
||||||
full_heat_capacity = A.heat_capacity()
|
full_heat_capacity = A.heat_capacity()
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ var/global/list/chemical_reactions_list //list of all /datum/chemical_reactio
|
|||||||
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff
|
||||||
var/global/list/landmarks_list = list() //list of all landmarks created
|
var/global/list/landmarks_list = list() //list of all landmarks created
|
||||||
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
|
var/global/list/surgery_steps = list() //list of all surgery steps |BS12
|
||||||
|
var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking.
|
||||||
|
|
||||||
//Preferences stuff
|
//Preferences stuff
|
||||||
//Hairstyles
|
//Hairstyles
|
||||||
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
||||||
|
|||||||
@@ -122,6 +122,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
|||||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||||
if("Skrell")
|
if("Skrell")
|
||||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
|
if("Vox")
|
||||||
|
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||||
else
|
else
|
||||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||||
|
|
||||||
@@ -147,6 +149,9 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
|
|||||||
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||||
|
if(H.get_species()=="Vox")
|
||||||
|
eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s")
|
||||||
|
|
||||||
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD)
|
||||||
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]
|
||||||
|
|||||||
@@ -730,7 +730,7 @@ client
|
|||||||
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
usr << "This can only be done to instances of type /mob/living/carbon/human"
|
||||||
return
|
return
|
||||||
|
|
||||||
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell")
|
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox")
|
||||||
switch(new_mutantrace)
|
switch(new_mutantrace)
|
||||||
if(null)
|
if(null)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -104,15 +104,15 @@ var/list/radiochannels = list(
|
|||||||
"Medical" = 1355,
|
"Medical" = 1355,
|
||||||
"Engineering" = 1357,
|
"Engineering" = 1357,
|
||||||
"Security" = 1359,
|
"Security" = 1359,
|
||||||
|
"Response Team" = 1443,
|
||||||
"Deathsquad" = 1441,
|
"Deathsquad" = 1441,
|
||||||
"Syndicate" = 1213,
|
"Syndicate" = 1213,
|
||||||
"Supply" = 1347,
|
"Supply" = 1347,
|
||||||
)
|
)
|
||||||
//depenging helpers
|
//depenging helpers
|
||||||
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1347)
|
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213, 1443, 1441,1347)
|
||||||
var/const/COMM_FREQ = 1353 //command, colored gold in chat window
|
var/const/COMM_FREQ = 1353 //command, colored gold in chat window
|
||||||
var/const/SYND_FREQ = 1213
|
var/const/SYND_FREQ = 1213
|
||||||
var/const/ERT_FREQ = 1439
|
|
||||||
|
|
||||||
#define TRANSMISSION_WIRE 0
|
#define TRANSMISSION_WIRE 0
|
||||||
#define TRANSMISSION_RADIO 1
|
#define TRANSMISSION_RADIO 1
|
||||||
|
|||||||
@@ -487,3 +487,25 @@ proc/FindNameFromID(var/mob/living/carbon/human/H)
|
|||||||
|
|
||||||
if(ID)
|
if(ID)
|
||||||
return ID.registered_name
|
return ID.registered_name
|
||||||
|
|
||||||
|
proc/get_all_job_icons() //For all existing HUD icons
|
||||||
|
return get_all_jobs() + list("Prisoner")
|
||||||
|
|
||||||
|
/obj/proc/GetJobName() //Used in secHUD icon generation
|
||||||
|
if (!istype(src, /obj/item/device/pda) && !istype(src,/obj/item/weapon/card/id))
|
||||||
|
return
|
||||||
|
|
||||||
|
var/jobName
|
||||||
|
|
||||||
|
if(istype(src, /obj/item/device/pda))
|
||||||
|
if(src:id)
|
||||||
|
jobName = src:id:assignment
|
||||||
|
if(istype(src, /obj/item/weapon/card/id))
|
||||||
|
jobName = src:assignment
|
||||||
|
|
||||||
|
if(jobName in get_all_job_icons()) //Check if the job has a hud icon
|
||||||
|
return jobName
|
||||||
|
if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job
|
||||||
|
return "Centcom"
|
||||||
|
return "Unknown" //Return unknown if none of the above apply
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,10 @@
|
|||||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
|
||||||
if("Nurse")
|
if("Nurse")
|
||||||
if(H.gender == FEMALE)
|
if(H.gender == FEMALE)
|
||||||
|
if(prob(50))
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
|
||||||
|
else
|
||||||
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nurse(H), slot_w_uniform)
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/nursehat(H), slot_head)
|
H.equip_to_slot_or_del(new /obj/item/clothing/head/nursehat(H), slot_head)
|
||||||
else
|
else
|
||||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
|
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
|
||||||
|
|||||||
@@ -170,10 +170,10 @@
|
|||||||
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
|
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
|
||||||
"You hear a click as a faint electronic humming stops.")
|
"You hear a click as a faint electronic humming stops.")
|
||||||
|
|
||||||
|
var/old_level = danger_level
|
||||||
danger_level = overall_danger_level()
|
danger_level = overall_danger_level()
|
||||||
|
|
||||||
if (alarm_area.master_air_alarm == src)
|
if (old_level != danger_level)
|
||||||
refresh_danger_level()
|
refresh_danger_level()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|||||||
@@ -143,7 +143,7 @@
|
|||||||
pulse2.dir = pick(cardinal)
|
pulse2.dir = pick(cardinal)
|
||||||
|
|
||||||
spawn(10)
|
spawn(10)
|
||||||
del(pulse2)
|
pulse2.delete()
|
||||||
if (on)
|
if (on)
|
||||||
turn_off()
|
turn_off()
|
||||||
spawn(severity*300)
|
spawn(severity*300)
|
||||||
|
|||||||
@@ -862,7 +862,7 @@ Auto Patrol: []"},
|
|||||||
pulse2.anchored = 1
|
pulse2.anchored = 1
|
||||||
pulse2.dir = pick(cardinal)
|
pulse2.dir = pick(cardinal)
|
||||||
spawn(10)
|
spawn(10)
|
||||||
del(pulse2)
|
pulse2.delete()
|
||||||
var/list/mob/living/carbon/targets = new
|
var/list/mob/living/carbon/targets = new
|
||||||
for (var/mob/living/carbon/C in view(12,src))
|
for (var/mob/living/carbon/C in view(12,src))
|
||||||
if (C.stat==2)
|
if (C.stat==2)
|
||||||
|
|||||||
@@ -299,6 +299,7 @@
|
|||||||
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
|
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
|
||||||
spawn(0)
|
spawn(0)
|
||||||
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
|
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
|
||||||
|
if (!path) path = list()
|
||||||
if(src.path.len == 0)
|
if(src.path.len == 0)
|
||||||
src.oldpatient = src.patient
|
src.oldpatient = src.patient
|
||||||
src.patient = null
|
src.patient = null
|
||||||
|
|||||||
@@ -583,7 +583,7 @@ Auto Patrol: []"},
|
|||||||
// given an optional turf to avoid
|
// given an optional turf to avoid
|
||||||
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null)
|
/obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null)
|
||||||
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
|
src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid)
|
||||||
|
if (!path) path = list()
|
||||||
|
|
||||||
// look for a criminal in view of the bot
|
// look for a criminal in view of the bot
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ Class Procs:
|
|||||||
pulse2.dir = pick(cardinal)
|
pulse2.dir = pick(cardinal)
|
||||||
|
|
||||||
spawn(10)
|
spawn(10)
|
||||||
del(pulse2)
|
pulse2.delete()
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/obj/machinery/ex_act(severity)
|
/obj/machinery/ex_act(severity)
|
||||||
|
|||||||
@@ -148,15 +148,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
|||||||
signal.data["radio"], signal.data["message"],
|
signal.data["radio"], signal.data["message"],
|
||||||
signal.data["name"], signal.data["job"],
|
signal.data["name"], signal.data["job"],
|
||||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency)
|
signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency)
|
||||||
|
|
||||||
if(connection.frequency == ERT_FREQ)
|
|
||||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
|
||||||
signal.data["vmask"], signal.data["vmessage"],
|
|
||||||
signal.data["radio"], signal.data["message"],
|
|
||||||
signal.data["name"], signal.data["job"],
|
|
||||||
signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency)
|
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
if(intercept)
|
if(intercept)
|
||||||
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
Broadcast_Message(signal.data["connection"], signal.data["mob"],
|
||||||
@@ -354,6 +345,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
|||||||
// freq_text = "Mining"
|
// freq_text = "Mining"
|
||||||
if(1347)
|
if(1347)
|
||||||
freq_text = "Supply"
|
freq_text = "Supply"
|
||||||
|
if(1441)
|
||||||
|
freq_text = "Death Squad"
|
||||||
|
if(1443)
|
||||||
|
freq_text = "Response Team"
|
||||||
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
//There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,11 @@
|
|||||||
/obj/machinery/telecomms/relay/preset/centcom
|
/obj/machinery/telecomms/relay/preset/centcom
|
||||||
id = "Centcom Relay"
|
id = "Centcom Relay"
|
||||||
hide = 1
|
hide = 1
|
||||||
toggled = 0
|
toggled = 1
|
||||||
|
//anchored = 1
|
||||||
|
//use_power = 0
|
||||||
|
//idle_power_usage = 0
|
||||||
|
heatgen = 0
|
||||||
autolinkers = list("c_relay")
|
autolinkers = list("c_relay")
|
||||||
|
|
||||||
//HUB
|
//HUB
|
||||||
|
|||||||
@@ -550,7 +550,7 @@
|
|||||||
switch(screen)
|
switch(screen)
|
||||||
if("main")
|
if("main")
|
||||||
left_part = output_available_resources()+"<hr>"
|
left_part = output_available_resources()+"<hr>"
|
||||||
left_part += "<a href='?src=\ref[src];sync=1'>Sync with R&D servers</a> | <a href='?src=\ref[src];auto_sync=1'>[sync?"Dis":"En"]able auto sync</a><hr>"
|
left_part += "<a href='?src=\ref[src];sync=1'>Sync with R&D servers</a><hr>"
|
||||||
for(var/part_set in part_sets)
|
for(var/part_set in part_sets)
|
||||||
left_part += "<a href='?src=\ref[src];part_set=[part_set]'>[part_set]</a> - \[<a href='?src=\ref[src];partset_to_queue=[part_set]'>Add all parts to queue\]<br>"
|
left_part += "<a href='?src=\ref[src];part_set=[part_set]'>[part_set]</a> - \[<a href='?src=\ref[src];partset_to_queue=[part_set]'>Add all parts to queue\]<br>"
|
||||||
if("parts")
|
if("parts")
|
||||||
@@ -646,9 +646,6 @@
|
|||||||
queue = list()
|
queue = list()
|
||||||
src.sync()
|
src.sync()
|
||||||
return update_queue_on_page()
|
return update_queue_on_page()
|
||||||
if(href_list["auto_sync"])
|
|
||||||
src.sync = !src.sync
|
|
||||||
//pr_auto_sync.toggle()
|
|
||||||
if(href_list["part_desc"])
|
if(href_list["part_desc"])
|
||||||
var/obj/part = filter.getObj("part_desc")
|
var/obj/part = filter.getObj("part_desc")
|
||||||
if(part)
|
if(part)
|
||||||
@@ -661,14 +658,6 @@
|
|||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/machinery/mecha_part_fabricator/process()
|
|
||||||
if (stat & (NOPOWER|BROKEN))
|
|
||||||
return
|
|
||||||
if(sync)
|
|
||||||
spawn(-1)
|
|
||||||
sync(1)
|
|
||||||
return
|
|
||||||
|
|
||||||
/obj/machinery/mecha_part_fabricator/proc/remove_material(var/mat_string, var/amount)
|
/obj/machinery/mecha_part_fabricator/proc/remove_material(var/mat_string, var/amount)
|
||||||
var/type
|
var/type
|
||||||
switch(mat_string)
|
switch(mat_string)
|
||||||
|
|||||||
@@ -86,10 +86,12 @@
|
|||||||
removeVerb(/atom/movable/verb/pull)
|
removeVerb(/atom/movable/verb/pull)
|
||||||
log_message("[src.name] created.")
|
log_message("[src.name] created.")
|
||||||
loc.Entered(src)
|
loc.Entered(src)
|
||||||
|
mechas_list += src //global mech list
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/mecha/Del()
|
/obj/mecha/Del()
|
||||||
src.go_out()
|
src.go_out()
|
||||||
|
mechas_list -= src //global mech list
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -79,7 +79,7 @@
|
|||||||
if(!M || M.stat || !(M in view(M))) return
|
if(!M || M.stat || !(M in view(M))) return
|
||||||
if(!M.client) return
|
if(!M.client) return
|
||||||
var/client/C = M.client
|
var/client/C = M.client
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/image/holder
|
||||||
for(var/mob/living/carbon/human/patient in view(M.loc))
|
for(var/mob/living/carbon/human/patient in view(M.loc))
|
||||||
if(M.see_invisible < patient.invisibility)
|
if(M.see_invisible < patient.invisibility)
|
||||||
continue
|
continue
|
||||||
@@ -89,12 +89,22 @@
|
|||||||
foundVirus++
|
foundVirus++
|
||||||
//if(patient.virus2)
|
//if(patient.virus2)
|
||||||
// foundVirus++
|
// foundVirus++
|
||||||
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
|
|
||||||
|
holder = patient.hud_list[HEALTH_HUD]
|
||||||
if(patient.stat == 2)
|
if(patient.stat == 2)
|
||||||
C.images += image(tempHud,patient,"huddead")
|
holder.icon_state = "hudhealth-100"
|
||||||
else if(patient.status_flags & XENO_HOST)
|
C.images += holder
|
||||||
C.images += image(tempHud,patient,"hudxeno")
|
|
||||||
else if(foundVirus)
|
|
||||||
C.images += image(tempHud,patient,"hudill")
|
|
||||||
else
|
else
|
||||||
C.images += image(tempHud,patient,"hudhealthy")
|
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
|
holder = patient.hud_list[STATUS_HUD]
|
||||||
|
if(patient.stat == 2)
|
||||||
|
holder.icon_state = "huddead"
|
||||||
|
else if(patient.status_flags & XENO_HOST)
|
||||||
|
holder.icon_state = "hudxeno"
|
||||||
|
else if(foundVirus)
|
||||||
|
holder.icon_state = "hudill"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
C.images += holder
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
|||||||
mouse_opacity = 0
|
mouse_opacity = 0
|
||||||
var/amount = 8.0
|
var/amount = 8.0
|
||||||
|
|
||||||
|
/obj/effect/proc/delete()
|
||||||
|
loc = null
|
||||||
|
if(reagents)
|
||||||
|
reagents.delete()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/effect/water/New()
|
/obj/effect/effect/water/New()
|
||||||
..()
|
..()
|
||||||
@@ -37,7 +43,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
|||||||
//if (istype(T, /turf))
|
//if (istype(T, /turf))
|
||||||
// T.firelevel = 0 //TODO: FIX
|
// T.firelevel = 0 //TODO: FIX
|
||||||
spawn( 70 )
|
spawn( 70 )
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -54,7 +60,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
|||||||
// T.firelevel = 0 //TODO: FIX
|
// T.firelevel = 0 //TODO: FIX
|
||||||
if (--src.life < 1)
|
if (--src.life < 1)
|
||||||
//SN src = null
|
//SN src = null
|
||||||
del(src)
|
delete()
|
||||||
if(newloc.density)
|
if(newloc.density)
|
||||||
return 0
|
return 0
|
||||||
.=..()
|
.=..()
|
||||||
@@ -132,7 +138,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(5)
|
sleep(5)
|
||||||
step(steam,direction)
|
step(steam,direction)
|
||||||
spawn(20)
|
spawn(20)
|
||||||
del(steam)
|
steam.delete()
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
//SPARK SYSTEM (like steam system)
|
//SPARK SYSTEM (like steam system)
|
||||||
@@ -155,7 +161,7 @@ steam.start() -- spawns the effect
|
|||||||
if (istype(T, /turf))
|
if (istype(T, /turf))
|
||||||
T.hotspot_expose(1000,100)
|
T.hotspot_expose(1000,100)
|
||||||
spawn (100)
|
spawn (100)
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/effect/sparks/Del()
|
/obj/effect/effect/sparks/Del()
|
||||||
@@ -204,7 +210,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(5)
|
sleep(5)
|
||||||
step(sparks,direction)
|
step(sparks,direction)
|
||||||
spawn(20)
|
spawn(20)
|
||||||
del(sparks)
|
sparks.delete()
|
||||||
src.total_sparks--
|
src.total_sparks--
|
||||||
|
|
||||||
|
|
||||||
@@ -231,7 +237,7 @@ steam.start() -- spawns the effect
|
|||||||
/obj/effect/effect/harmless_smoke/New()
|
/obj/effect/effect/harmless_smoke/New()
|
||||||
..()
|
..()
|
||||||
spawn (100)
|
spawn (100)
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/effect/harmless_smoke/Move()
|
/obj/effect/effect/harmless_smoke/Move()
|
||||||
@@ -275,7 +281,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(10)
|
sleep(10)
|
||||||
step(smoke,direction)
|
step(smoke,direction)
|
||||||
spawn(75+rand(10,30))
|
spawn(75+rand(10,30))
|
||||||
del(smoke)
|
smoke.delete()
|
||||||
src.total_smoke--
|
src.total_smoke--
|
||||||
|
|
||||||
|
|
||||||
@@ -298,7 +304,7 @@ steam.start() -- spawns the effect
|
|||||||
/obj/effect/effect/bad_smoke/New()
|
/obj/effect/effect/bad_smoke/New()
|
||||||
..()
|
..()
|
||||||
spawn (200+rand(10,30))
|
spawn (200+rand(10,30))
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/effect/bad_smoke/Move()
|
/obj/effect/effect/bad_smoke/Move()
|
||||||
@@ -375,7 +381,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(10)
|
sleep(10)
|
||||||
step(smoke,direction)
|
step(smoke,direction)
|
||||||
spawn(150+rand(10,30))
|
spawn(150+rand(10,30))
|
||||||
del(smoke)
|
smoke.delete()
|
||||||
src.total_smoke--
|
src.total_smoke--
|
||||||
|
|
||||||
|
|
||||||
@@ -402,7 +408,7 @@ steam.start() -- spawns the effect
|
|||||||
R.my_atom = src
|
R.my_atom = src
|
||||||
|
|
||||||
spawn (200+rand(10,30))
|
spawn (200+rand(10,30))
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/effect/chem_smoke/Move()
|
/obj/effect/effect/chem_smoke/Move()
|
||||||
@@ -504,7 +510,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(10)
|
sleep(10)
|
||||||
step(smoke,direction)
|
step(smoke,direction)
|
||||||
spawn(150+rand(10,30))
|
spawn(150+rand(10,30))
|
||||||
del(smoke)
|
smoke.delete()
|
||||||
src.total_smoke--
|
src.total_smoke--
|
||||||
|
|
||||||
|
|
||||||
@@ -528,7 +534,7 @@ steam.start() -- spawns the effect
|
|||||||
/obj/effect/effect/sleep_smoke/New()
|
/obj/effect/effect/sleep_smoke/New()
|
||||||
..()
|
..()
|
||||||
spawn (200+rand(10,30))
|
spawn (200+rand(10,30))
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
/obj/effect/effect/sleep_smoke/Move()
|
/obj/effect/effect/sleep_smoke/Move()
|
||||||
@@ -599,7 +605,7 @@ steam.start() -- spawns the effect
|
|||||||
sleep(10)
|
sleep(10)
|
||||||
step(smoke,direction)
|
step(smoke,direction)
|
||||||
spawn(150+rand(10,30))
|
spawn(150+rand(10,30))
|
||||||
del(smoke)
|
smoke.delete()
|
||||||
src.total_smoke--
|
src.total_smoke--
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
@@ -727,7 +733,7 @@ steam.start() -- spawns the effect
|
|||||||
flick("ion_fade", I)
|
flick("ion_fade", I)
|
||||||
I.icon_state = "blank"
|
I.icon_state = "blank"
|
||||||
spawn( 20 )
|
spawn( 20 )
|
||||||
del(I)
|
I.delete()
|
||||||
spawn(2)
|
spawn(2)
|
||||||
if(src.on)
|
if(src.on)
|
||||||
src.processing = 1
|
src.processing = 1
|
||||||
@@ -772,7 +778,7 @@ steam.start() -- spawns the effect
|
|||||||
src.oldposition = get_turf(holder)
|
src.oldposition = get_turf(holder)
|
||||||
I.dir = src.holder.dir
|
I.dir = src.holder.dir
|
||||||
spawn(10)
|
spawn(10)
|
||||||
del(I)
|
I.delete()
|
||||||
src.number--
|
src.number--
|
||||||
spawn(2)
|
spawn(2)
|
||||||
if(src.on)
|
if(src.on)
|
||||||
@@ -826,7 +832,7 @@ steam.start() -- spawns the effect
|
|||||||
|
|
||||||
flick("[icon_state]-disolve", src)
|
flick("[icon_state]-disolve", src)
|
||||||
sleep(5)
|
sleep(5)
|
||||||
del(src)
|
delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
// on delete, transfer any reagents to the floor
|
// on delete, transfer any reagents to the floor
|
||||||
@@ -872,7 +878,7 @@ steam.start() -- spawns the effect
|
|||||||
flick("[icon_state]-disolve", src)
|
flick("[icon_state]-disolve", src)
|
||||||
|
|
||||||
spawn(5)
|
spawn(5)
|
||||||
del(src)
|
delete()
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/effect/foam/HasEntered(var/atom/movable/AM)
|
/obj/effect/effect/foam/HasEntered(var/atom/movable/AM)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
|
|||||||
pulse.name = "emp pulse"
|
pulse.name = "emp pulse"
|
||||||
pulse.anchored = 1
|
pulse.anchored = 1
|
||||||
spawn(20)
|
spawn(20)
|
||||||
del(pulse)
|
pulse.delete()
|
||||||
|
|
||||||
if(heavy_range > light_range)
|
if(heavy_range > light_range)
|
||||||
light_range = heavy_range
|
light_range = heavy_range
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
||||||
T.icon = 'icons/effects/effects.dmi'
|
T.icon = 'icons/effects/effects.dmi'
|
||||||
flick("emppulse",T)
|
flick("emppulse",T)
|
||||||
spawn(8) del(T)
|
spawn(8) T.delete()
|
||||||
else
|
else
|
||||||
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
|
||||||
var/obj/O = new saved_item(src)
|
var/obj/O = new saved_item(src)
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
|
||||||
T.icon = 'icons/effects/effects.dmi'
|
T.icon = 'icons/effects/effects.dmi'
|
||||||
flick("emppulse",T)
|
flick("emppulse",T)
|
||||||
spawn(8) del(T)
|
spawn(8) T.delete()
|
||||||
|
|
||||||
proc/disrupt()
|
proc/disrupt()
|
||||||
if(active_dummy)
|
if(active_dummy)
|
||||||
|
|||||||
@@ -92,7 +92,7 @@
|
|||||||
O.icon_state = "nothing"
|
O.icon_state = "nothing"
|
||||||
flick("empdisable",O)
|
flick("empdisable",O)
|
||||||
spawn(5)
|
spawn(5)
|
||||||
del(O)
|
O.delete()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,17 @@
|
|||||||
new /obj/item/weapon/storage/backpack/satchel_med(src)
|
new /obj/item/weapon/storage/backpack/satchel_med(src)
|
||||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||||
new /obj/item/clothing/head/bio_hood/cmo(src)
|
new /obj/item/clothing/head/bio_hood/cmo(src)
|
||||||
|
new /obj/item/clothing/shoes/white(src)
|
||||||
|
switch(pick("blue", "green", "purple"))
|
||||||
|
if ("blue")
|
||||||
|
new /obj/item/clothing/under/rank/medical/blue(src)
|
||||||
|
new /obj/item/clothing/head/surgery/blue(src)
|
||||||
|
if ("green")
|
||||||
|
new /obj/item/clothing/under/rank/medical/green(src)
|
||||||
|
new /obj/item/clothing/head/surgery/green(src)
|
||||||
|
if ("purple")
|
||||||
|
new /obj/item/clothing/under/rank/medical/purple(src)
|
||||||
|
new /obj/item/clothing/head/surgery/purple(src)
|
||||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||||
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
|
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
|
||||||
new /obj/item/weapon/cartridge/cmo(src)
|
new /obj/item/weapon/cartridge/cmo(src)
|
||||||
|
|||||||
@@ -303,7 +303,7 @@
|
|||||||
icon_state = "white"
|
icon_state = "white"
|
||||||
icon_closed = "white"
|
icon_closed = "white"
|
||||||
|
|
||||||
/obj/structure/closet/wardrobe/virology_white/New()
|
/obj/structure/closet/wardrobe/medic_white/New()
|
||||||
new /obj/item/clothing/under/rank/medical(src)
|
new /obj/item/clothing/under/rank/medical(src)
|
||||||
new /obj/item/clothing/under/rank/medical(src)
|
new /obj/item/clothing/under/rank/medical(src)
|
||||||
new /obj/item/clothing/under/rank/medical/blue(src)
|
new /obj/item/clothing/under/rank/medical/blue(src)
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ var/list/admin_verbs_mod = list(
|
|||||||
if(!istype(M, /mob/living/carbon/human))
|
if(!istype(M, /mob/living/carbon/human))
|
||||||
usr << "\red You can only do this to humans!"
|
usr << "\red You can only do this to humans!"
|
||||||
return
|
return
|
||||||
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi and Tajaran can result in unintended consequences.",,"Yes","No"))
|
switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No"))
|
||||||
if("No")
|
if("No")
|
||||||
return
|
return
|
||||||
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
var/new_facial = input("Please select facial hair color.", "Character Generation") as color
|
||||||
|
|||||||
@@ -792,6 +792,10 @@ datum/preferences
|
|||||||
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
|
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
|
||||||
new_species += "Skrell"
|
new_species += "Skrell"
|
||||||
whitelisted = 1
|
whitelisted = 1
|
||||||
|
if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins
|
||||||
|
new_species += "Vox"
|
||||||
|
whitelisted = 1
|
||||||
|
|
||||||
|
|
||||||
if(!whitelisted)
|
if(!whitelisted)
|
||||||
alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.")
|
alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.")
|
||||||
@@ -799,6 +803,7 @@ datum/preferences
|
|||||||
new_species += "Tajaran"
|
new_species += "Tajaran"
|
||||||
new_species += "Unathi"
|
new_species += "Unathi"
|
||||||
new_species += "Skrell"
|
new_species += "Skrell"
|
||||||
|
new_species += "Vox"
|
||||||
species = input("Please select a species", "Character Generation", null) in new_species
|
species = input("Please select a species", "Character Generation", null) in new_species
|
||||||
|
|
||||||
if(prev_species != species)
|
if(prev_species != species)
|
||||||
|
|||||||
@@ -45,22 +45,31 @@
|
|||||||
if(!M) return
|
if(!M) return
|
||||||
if(!M.client) return
|
if(!M.client) return
|
||||||
var/client/C = M.client
|
var/client/C = M.client
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/image/holder
|
||||||
for(var/mob/living/carbon/human/patient in view(M))
|
for(var/mob/living/carbon/human/patient in view(M))
|
||||||
var/foundVirus = 0
|
var/foundVirus = 0
|
||||||
for(var/datum/disease/D in patient.viruses)
|
for(var/datum/disease/D in patient.viruses)
|
||||||
if(!D.hidden[SCANNER])
|
if(!D.hidden[SCANNER])
|
||||||
foundVirus++
|
foundVirus++
|
||||||
if(!C) continue
|
if(!C) continue
|
||||||
C.images += image(tempHud, patient, "hud[RoundHealth(patient.health)]")
|
|
||||||
|
holder = patient.hud_list[HEALTH_HUD]
|
||||||
if(patient.stat == 2)
|
if(patient.stat == 2)
|
||||||
C.images += image(tempHud, patient, "huddead")
|
holder.icon_state = "hudhealth-100"
|
||||||
else if(patient.status_flags & XENO_HOST)
|
|
||||||
C.images += image(tempHud, patient, "hudxeno")
|
|
||||||
else if(foundVirus)
|
|
||||||
C.images += image(tempHud, patient, "hudill")
|
|
||||||
else
|
else
|
||||||
C.images += image(tempHud, patient, "hudhealthy")
|
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
|
holder = patient.hud_list[STATUS_HUD]
|
||||||
|
if(patient.stat == 2)
|
||||||
|
holder.icon_state = "huddead"
|
||||||
|
else if(patient.status_flags & XENO_HOST)
|
||||||
|
holder.icon_state = "hudxeno"
|
||||||
|
else if(foundVirus)
|
||||||
|
holder.icon_state = "hudill"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/glasses/hud/security
|
/obj/item/clothing/glasses/hud/security
|
||||||
@@ -80,41 +89,57 @@
|
|||||||
if(!M) return
|
if(!M) return
|
||||||
if(!M.client) return
|
if(!M.client) return
|
||||||
var/client/C = M.client
|
var/client/C = M.client
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/image/holder
|
||||||
for(var/mob/living/carbon/human/perp in view(M))
|
for(var/mob/living/carbon/human/perp in view(M))
|
||||||
if(!C) continue
|
if(!C) continue
|
||||||
var/perpname = perp.name
|
var/perpname = perp.name
|
||||||
|
holder = perp.hud_list[ID_HUD]
|
||||||
if(perp.wear_id)
|
if(perp.wear_id)
|
||||||
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
||||||
if(I)
|
if(I)
|
||||||
C.images += image(tempHud, perp, "hud[ckey(I.GetJobRealName())]")
|
|
||||||
perpname = I.registered_name
|
perpname = I.registered_name
|
||||||
|
holder.icon_state = "hud[ckey(I.GetJobName())]"
|
||||||
|
C.images += holder
|
||||||
else
|
else
|
||||||
perpname = perp.name
|
perpname = perp.name
|
||||||
C.images += image(tempHud, perp, "hudunknown")
|
holder.icon_state = "hudunknown"
|
||||||
|
C.images += holder
|
||||||
else
|
else
|
||||||
C.images += image(tempHud, perp, "hudunknown")
|
perpname = perp.name
|
||||||
|
holder.icon_state = "hudunknown"
|
||||||
|
C.images += holder
|
||||||
|
|
||||||
for(var/datum/data/record/E in data_core.general)
|
for(var/datum/data/record/E in data_core.general)
|
||||||
if(E.fields["name"] == perpname)
|
if(E.fields["name"] == perpname)
|
||||||
|
holder = perp.hud_list[WANTED_HUD]
|
||||||
for (var/datum/data/record/R in data_core.security)
|
for (var/datum/data/record/R in data_core.security)
|
||||||
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||||
C.images += image(tempHud, perp, "hudwanted")
|
holder.icon_state = "hudwanted"
|
||||||
|
C.images += holder
|
||||||
break
|
break
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||||
C.images += image(tempHud, perp, "hudprisoner")
|
holder.icon_state = "hudprisoner"
|
||||||
|
C.images += holder
|
||||||
break
|
break
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
||||||
C.images += image(tempHud, perp, "hudparolled")
|
holder.icon_state = "hudparolled"
|
||||||
|
C.images += holder
|
||||||
break
|
break
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
||||||
C.images += image(tempHud, perp, "hudreleased")
|
holder.icon_state = "hudreleased"
|
||||||
|
C.images += holder
|
||||||
break
|
break
|
||||||
for(var/obj/item/weapon/implant/I in perp)
|
for(var/obj/item/weapon/implant/I in perp)
|
||||||
if(I.implanted)
|
if(I.implanted)
|
||||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||||
C.images += image(tempHud, perp, "hud_imp_tracking")
|
holder = perp.hud_list[IMPTRACK_HUD]
|
||||||
|
holder.icon_state = "hud_imp_tracking"
|
||||||
|
C.images += holder
|
||||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||||
C.images += image(tempHud, perp, "hud_imp_loyal")
|
holder = perp.hud_list[IMPLOYAL_HUD]
|
||||||
|
holder.icon_state = "hud_imp_loyal"
|
||||||
|
C.images += holder
|
||||||
if(istype(I,/obj/item/weapon/implant/chem))
|
if(istype(I,/obj/item/weapon/implant/chem))
|
||||||
C.images += image(tempHud, perp, "hud_imp_chem")
|
holder = perp.hud_list[IMPCHEM_HUD]
|
||||||
|
holder.icon_state = "hud_imp_chem"
|
||||||
|
C.images += holder
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
name = "surgical cap"
|
name = "surgical cap"
|
||||||
desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs."
|
desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs."
|
||||||
icon_state = "surgcap_blue"
|
icon_state = "surgcap_blue"
|
||||||
flags = FPRINT | TABLEPASS
|
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||||
|
|
||||||
/obj/item/clothing/head/surgery/purple
|
/obj/item/clothing/head/surgery/purple
|
||||||
desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is deep purple."
|
desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is deep purple."
|
||||||
|
|||||||
@@ -22,3 +22,69 @@
|
|||||||
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd)
|
||||||
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
|
||||||
|
|
||||||
|
// Vox space gear (vaccuum suit, low pressure armour)
|
||||||
|
// Can't be equipped by any other species due to bone structure and vox cybernetics.
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/pressure
|
||||||
|
name = "alien helmet"
|
||||||
|
icon_state = "vox-pressure"
|
||||||
|
item_state = "vox-pressure"
|
||||||
|
desc = "Hey, wasn't this a prop in \'The Abyss\'?"
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/pressure
|
||||||
|
name = "alien pressure suit"
|
||||||
|
icon_state = "vox-pressure"
|
||||||
|
item_state = "vox-pressure"
|
||||||
|
desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions."
|
||||||
|
w_class = 3
|
||||||
|
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
slowdown = 2
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/carapace
|
||||||
|
name = "alien visor"
|
||||||
|
icon_state = "vox-carapace"
|
||||||
|
item_state = "vox-carapace"
|
||||||
|
desc = "A glowing visor, perhaps stolen from a depressed Cylon."
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/carapace
|
||||||
|
name = "alien carapace armour"
|
||||||
|
icon_state = "vox-carapace"
|
||||||
|
item_state = "vox-carapace"
|
||||||
|
desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down."
|
||||||
|
w_class = 3
|
||||||
|
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
slowdown = 1
|
||||||
|
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||||
|
|
||||||
|
/obj/item/clothing/head/helmet/space/vox/mob_can_equip(M as mob, slot)
|
||||||
|
var/mob/living/carbon/human/V = M
|
||||||
|
if(V.dna.mutantrace != "vox")
|
||||||
|
V << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||||
|
return 0
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/space/vox/mob_can_equip(M as mob, slot)
|
||||||
|
var/mob/living/carbon/human/V = M
|
||||||
|
if(V.dna.mutantrace != "vox")
|
||||||
|
V << "<span class='warning'>This clearly isn't designed for your species!</span>"
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/clothing/under/vox/vox_casual
|
||||||
|
name = "alien clothing"
|
||||||
|
desc = "This doesn't look very comfortable."
|
||||||
|
icon_state = "vox-casual-1"
|
||||||
|
color = "vox-casual-1"
|
||||||
|
item_state = "vox-casual-1"
|
||||||
|
|
||||||
|
/obj/item/clothing/under/vox/vox_robes
|
||||||
|
name = "alien robes"
|
||||||
|
desc = "Weird and flowing!"
|
||||||
|
icon_state = "vox-casual-2"
|
||||||
|
color = "vox-casual-2"
|
||||||
|
item_state = "vox-casual-2"
|
||||||
@@ -103,6 +103,9 @@
|
|||||||
icon_state = "hazard"
|
icon_state = "hazard"
|
||||||
item_state = "hazard"
|
item_state = "hazard"
|
||||||
blood_overlay_type = "armor"
|
blood_overlay_type = "armor"
|
||||||
|
allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/radio, /obj/item/device/t_scanner, \
|
||||||
|
/obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, \
|
||||||
|
/obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
|
||||||
//Lawyer
|
//Lawyer
|
||||||
/obj/item/clothing/suit/storage/lawyer/bluejacket
|
/obj/item/clothing/suit/storage/lawyer/bluejacket
|
||||||
@@ -150,6 +153,33 @@
|
|||||||
return
|
return
|
||||||
usr.update_inv_wear_suit() //so our overlays update
|
usr.update_inv_wear_suit() //so our overlays update
|
||||||
|
|
||||||
|
//Medical
|
||||||
|
/obj/item/clothing/suit/storage/fr_jacket
|
||||||
|
name = "first responder jacket"
|
||||||
|
desc = "A high-visibility jacket worn by medical first responders."
|
||||||
|
icon_state = "fr_jacket_open"
|
||||||
|
item_state = "fr_jacket"
|
||||||
|
blood_overlay_type = "armor"
|
||||||
|
allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \
|
||||||
|
/obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen)
|
||||||
|
|
||||||
|
verb/toggle()
|
||||||
|
set name = "Toggle Jacket Buttons"
|
||||||
|
set category = "Object"
|
||||||
|
set src in usr
|
||||||
|
|
||||||
|
if(!usr.canmove || usr.stat || usr.restrained())
|
||||||
|
return 0
|
||||||
|
|
||||||
|
switch(icon_state)
|
||||||
|
if("fr_jacket_open")
|
||||||
|
src.icon_state = "fr_jacket"
|
||||||
|
usr << "You button up the jacket."
|
||||||
|
if("fr_jacket")
|
||||||
|
src.icon_state = "fr_jacket_open"
|
||||||
|
usr << "You unbutton the jacket."
|
||||||
|
usr.update_inv_wear_suit() //so our overlays update
|
||||||
|
|
||||||
//Mime
|
//Mime
|
||||||
/obj/item/clothing/suit/suspenders
|
/obj/item/clothing/suit/suspenders
|
||||||
name = "suspenders"
|
name = "suspenders"
|
||||||
@@ -157,9 +187,3 @@
|
|||||||
icon = 'icons/obj/clothing/belts.dmi'
|
icon = 'icons/obj/clothing/belts.dmi'
|
||||||
icon_state = "suspenders"
|
icon_state = "suspenders"
|
||||||
blood_overlay_type = "armor" //it's the less thing that I can put here
|
blood_overlay_type = "armor" //it's the less thing that I can put here
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/fr_jacket
|
|
||||||
name = "first responder jacket"
|
|
||||||
desc = "A high-visibility jacket worn by medical first responders."
|
|
||||||
icon_state = "fr_jacket_open"
|
|
||||||
item_state = "fr_jacket"
|
|
||||||
|
|||||||
@@ -90,6 +90,7 @@
|
|||||||
name = "Virologist Labcoat"
|
name = "Virologist Labcoat"
|
||||||
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
|
desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder."
|
||||||
icon_state = "labcoat_vir_open"
|
icon_state = "labcoat_vir_open"
|
||||||
|
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/labcoat/science
|
/obj/item/clothing/suit/storage/labcoat/science
|
||||||
name = "Scientist Labcoat"
|
name = "Scientist Labcoat"
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
voice_name = "unknown"
|
voice_name = "unknown"
|
||||||
icon = 'icons/mob/human.dmi'
|
icon = 'icons/mob/human.dmi'
|
||||||
icon_state = "body_m_s"
|
icon_state = "body_m_s"
|
||||||
|
var/list/hud_list = list()
|
||||||
|
|
||||||
|
|
||||||
/mob/living/carbon/human/dummy
|
/mob/living/carbon/human/dummy
|
||||||
@@ -20,6 +21,9 @@
|
|||||||
if(!dna)
|
if(!dna)
|
||||||
dna = new /datum/dna(null)
|
dna = new /datum/dna(null)
|
||||||
|
|
||||||
|
for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs
|
||||||
|
hud_list += image('icons/mob/hud.dmi', src, "hudunknown")
|
||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
if(dna)
|
if(dna)
|
||||||
@@ -807,6 +811,8 @@
|
|||||||
return "Tajaran"
|
return "Tajaran"
|
||||||
if("skrell")
|
if("skrell")
|
||||||
return "Skrell"
|
return "Skrell"
|
||||||
|
if("vox")
|
||||||
|
return "Vox"
|
||||||
if("plant")
|
if("plant")
|
||||||
return "Mobile vegetation"
|
return "Mobile vegetation"
|
||||||
if("golem")
|
if("golem")
|
||||||
@@ -822,6 +828,8 @@
|
|||||||
return "Skrell"
|
return "Skrell"
|
||||||
else if(src.dna.mutantrace == "tajaran")
|
else if(src.dna.mutantrace == "tajaran")
|
||||||
return "Tajaran"
|
return "Tajaran"
|
||||||
|
else if(src.dna.mutantrace == "vox")
|
||||||
|
return "vox"
|
||||||
|
|
||||||
/mob/living/carbon/proc/update_mutantrace_languages()
|
/mob/living/carbon/proc/update_mutantrace_languages()
|
||||||
if(src.dna)
|
if(src.dna)
|
||||||
@@ -831,6 +839,8 @@
|
|||||||
src.skrell_talk_understand = 1
|
src.skrell_talk_understand = 1
|
||||||
else if(src.dna.mutantrace == "tajaran")
|
else if(src.dna.mutantrace == "tajaran")
|
||||||
src.tajaran_talk_understand = 1
|
src.tajaran_talk_understand = 1
|
||||||
|
else if(src.dna.mutantrace == "vox")
|
||||||
|
src.vox_talk_understand = 1
|
||||||
|
|
||||||
/mob/living/carbon/human/proc/play_xylophone()
|
/mob/living/carbon/human/proc/play_xylophone()
|
||||||
if(!src.xylophone)
|
if(!src.xylophone)
|
||||||
|
|||||||
@@ -392,6 +392,7 @@
|
|||||||
var/SA_para_min = 1
|
var/SA_para_min = 1
|
||||||
var/SA_sleep_min = 5
|
var/SA_sleep_min = 5
|
||||||
var/oxygen_used = 0
|
var/oxygen_used = 0
|
||||||
|
var/nitrogen_used = 0
|
||||||
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
|
||||||
|
|
||||||
//Partial pressure of the O2 in our breath
|
//Partial pressure of the O2 in our breath
|
||||||
@@ -401,8 +402,10 @@
|
|||||||
// And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
|
// And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun)
|
||||||
var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
|
var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE
|
||||||
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
|
//var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value
|
||||||
|
// Nitrogen, for Vox.
|
||||||
|
var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure
|
||||||
|
|
||||||
if(O2_pp < safe_oxygen_min) // Too little oxygen
|
if(O2_pp < safe_oxygen_min && src.dna.mutantrace!="vox") // Too little oxygen
|
||||||
if(prob(20))
|
if(prob(20))
|
||||||
spawn(0) emote("gasp")
|
spawn(0) emote("gasp")
|
||||||
if(O2_pp > 0)
|
if(O2_pp > 0)
|
||||||
@@ -420,6 +423,19 @@
|
|||||||
oxyloss += 5*ratio
|
oxyloss += 5*ratio
|
||||||
oxygen_used = breath.oxygen*ratio/6
|
oxygen_used = breath.oxygen*ratio/6
|
||||||
oxygen_alert = max(oxygen_alert, 1)*/
|
oxygen_alert = max(oxygen_alert, 1)*/
|
||||||
|
else if(Nitrogen_pp < safe_oxygen_min && src.dna.mutantrace=="vox") //Vox breathe nitrogen, not oxygen.
|
||||||
|
|
||||||
|
if(prob(20))
|
||||||
|
spawn(0) emote("gasp")
|
||||||
|
if(Nitrogen_pp > 0)
|
||||||
|
var/ratio = safe_oxygen_min/Nitrogen_pp
|
||||||
|
adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS))
|
||||||
|
failed_last_breath = 1
|
||||||
|
nitrogen_used = breath.nitrogen*ratio/6
|
||||||
|
else
|
||||||
|
adjustOxyLoss(HUMAN_MAX_OXYLOSS)
|
||||||
|
failed_last_breath = 1
|
||||||
|
oxygen_alert = max(oxygen_alert, 1)
|
||||||
else // We're in safe limits
|
else // We're in safe limits
|
||||||
failed_last_breath = 0
|
failed_last_breath = 0
|
||||||
adjustOxyLoss(-5)
|
adjustOxyLoss(-5)
|
||||||
@@ -427,6 +443,7 @@
|
|||||||
oxygen_alert = 0
|
oxygen_alert = 0
|
||||||
|
|
||||||
breath.oxygen -= oxygen_used
|
breath.oxygen -= oxygen_used
|
||||||
|
breath.nitrogen -= nitrogen_used
|
||||||
breath.carbon_dioxide += oxygen_used
|
breath.carbon_dioxide += oxygen_used
|
||||||
|
|
||||||
//CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
|
//CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
|
||||||
@@ -1029,7 +1046,7 @@
|
|||||||
|
|
||||||
for(var/image/hud in client.images)
|
for(var/image/hud in client.images)
|
||||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||||
del(hud)
|
client.images.Remove(hud)
|
||||||
|
|
||||||
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask)
|
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask)
|
||||||
|
|
||||||
|
|||||||
@@ -313,6 +313,8 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
//Eyes
|
//Eyes
|
||||||
if(!skeleton)
|
if(!skeleton)
|
||||||
var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s")
|
var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s")
|
||||||
|
if(src.get_species()=="Vox")
|
||||||
|
eyes_s = new/icon('icons/mob/human_face.dmi', "vox_eyes_s")
|
||||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||||
stand_icon.Blend(eyes_s, ICON_OVERLAY)
|
stand_icon.Blend(eyes_s, ICON_OVERLAY)
|
||||||
|
|
||||||
@@ -442,6 +444,9 @@ proc/get_damage_icon_part(damage_state, body_part)
|
|||||||
if("skrell")
|
if("skrell")
|
||||||
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
race_icon = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
deform_icon = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||||
|
if("vox")
|
||||||
|
race_icon = 'icons/mob/human_races/r_vox.dmi'
|
||||||
|
deform_icon = 'icons/mob/human_races/r_def_vox.dmi'
|
||||||
else
|
else
|
||||||
race_icon = 'icons/mob/human_races/r_human.dmi'
|
race_icon = 'icons/mob/human_races/r_human.dmi'
|
||||||
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
|
deform_icon = 'icons/mob/human_races/r_def_human.dmi'
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ var/list/department_radio_keys = list(
|
|||||||
":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
|
":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
|
||||||
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
|
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
|
||||||
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
|
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
|
||||||
|
":v" = "vox", "#v" = "vox", ".v" = "vox",
|
||||||
|
|
||||||
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
|
":R" = "right hand", "#R" = "right hand", ".R" = "right hand",
|
||||||
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
|
":L" = "left hand", "#L" = "left hand", ".L" = "left hand",
|
||||||
@@ -37,6 +38,7 @@ var/list/department_radio_keys = list(
|
|||||||
":K" = "skrell", "#K" = "skrell", ".K" = "skrell",
|
":K" = "skrell", "#K" = "skrell", ".K" = "skrell",
|
||||||
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
|
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
|
||||||
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
|
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
|
||||||
|
":V" = "vox", "#V" = "vox", ".V" = "vox",
|
||||||
|
|
||||||
//kinda localization -- rastaf0
|
//kinda localization -- rastaf0
|
||||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||||
@@ -185,6 +187,7 @@ var/list/department_radio_keys = list(
|
|||||||
var/is_speaking_skrell = 0
|
var/is_speaking_skrell = 0
|
||||||
var/is_speaking_soghun = 0
|
var/is_speaking_soghun = 0
|
||||||
var/is_speaking_taj = 0
|
var/is_speaking_taj = 0
|
||||||
|
var/is_speaking_vox = 0
|
||||||
var/is_speaking_radio = 0
|
var/is_speaking_radio = 0
|
||||||
|
|
||||||
switch (message_mode)
|
switch (message_mode)
|
||||||
@@ -283,6 +286,10 @@ var/list/department_radio_keys = list(
|
|||||||
if(skrell_talk_understand || universal_speak)
|
if(skrell_talk_understand || universal_speak)
|
||||||
is_speaking_skrell = 1
|
is_speaking_skrell = 1
|
||||||
|
|
||||||
|
if ("vox")
|
||||||
|
if(vox_talk_understand || universal_speak)
|
||||||
|
is_speaking_vox = 1
|
||||||
|
|
||||||
if("changeling")
|
if("changeling")
|
||||||
if(mind && mind.changeling)
|
if(mind && mind.changeling)
|
||||||
for(var/mob/Changeling in mob_list)
|
for(var/mob/Changeling in mob_list)
|
||||||
@@ -370,7 +377,7 @@ var/list/department_radio_keys = list(
|
|||||||
|
|
||||||
for (var/M in listening)
|
for (var/M in listening)
|
||||||
if(hascall(M,"say_understands"))
|
if(hascall(M,"say_understands"))
|
||||||
if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_taj)
|
if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_vox && !is_speaking_taj)
|
||||||
heard_a += M
|
heard_a += M
|
||||||
else if(ismob(M))
|
else if(ismob(M))
|
||||||
if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
|
if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
|
||||||
@@ -379,6 +386,8 @@ var/list/department_radio_keys = list(
|
|||||||
heard_a += M
|
heard_a += M
|
||||||
else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
|
else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
|
||||||
heard_a += M
|
heard_a += M
|
||||||
|
else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak))
|
||||||
|
heard_a += M
|
||||||
else
|
else
|
||||||
heard_b += M
|
heard_b += M
|
||||||
else
|
else
|
||||||
@@ -394,7 +403,7 @@ var/list/department_radio_keys = list(
|
|||||||
|
|
||||||
var/rendered = null
|
var/rendered = null
|
||||||
if (length(heard_a))
|
if (length(heard_a))
|
||||||
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj)
|
var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||||
|
|
||||||
if (italics)
|
if (italics)
|
||||||
message_a = "<i>[message_a]</i>"
|
message_a = "<i>[message_a]</i>"
|
||||||
@@ -419,7 +428,7 @@ var/list/department_radio_keys = list(
|
|||||||
message_b = voice_message
|
message_b = voice_message
|
||||||
else
|
else
|
||||||
message_b = stars(message)
|
message_b = stars(message)
|
||||||
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj)
|
message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox)
|
||||||
|
|
||||||
if (italics)
|
if (italics)
|
||||||
message_b = "<i>[message_b]</i>"
|
message_b = "<i>[message_b]</i>"
|
||||||
|
|||||||
@@ -2,36 +2,53 @@
|
|||||||
if(client)
|
if(client)
|
||||||
for(var/image/hud in client.images)
|
for(var/image/hud in client.images)
|
||||||
if(copytext(hud.icon_state,1,4) == "hud")
|
if(copytext(hud.icon_state,1,4) == "hud")
|
||||||
del(hud)
|
client.images -= hud
|
||||||
|
|
||||||
/mob/living/silicon/pai/proc/securityHUD()
|
/mob/living/silicon/pai/proc/securityHUD()
|
||||||
if(client)
|
if(client)
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/image/holder
|
||||||
var/turf/T = get_turf_or_move(src.loc)
|
var/turf/T = get_turf_or_move(src.loc)
|
||||||
for(var/mob/living/carbon/human/perp in view(T))
|
for(var/mob/living/carbon/human/perp in view(T))
|
||||||
if(perp.wear_id)
|
|
||||||
client.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobRealName())]")
|
|
||||||
var/perpname = "wot"
|
var/perpname = "wot"
|
||||||
if(istype(perp.wear_id,/obj/item/weapon/card/id))
|
holder = perp.hud_list[ID_HUD]
|
||||||
perpname = perp.wear_id:registered_name
|
if(perp.wear_id)
|
||||||
else if(istype(perp.wear_id,/obj/item/device/pda))
|
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
|
||||||
var/obj/item/device/pda/tempPda = perp.wear_id
|
if(I)
|
||||||
perpname = tempPda.owner
|
perpname = I.registered_name
|
||||||
for (var/datum/data/record/E in data_core.general)
|
holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
|
||||||
if (E.fields["name"] == perpname)
|
client.images += holder
|
||||||
for (var/datum/data/record/R in data_core.security)
|
else
|
||||||
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
perpname = perp.name
|
||||||
client.images += image(tempHud,perp,"hudwanted")
|
holder.icon_state = "hudunknown"
|
||||||
|
client.images += holder
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudunknown"
|
||||||
|
client.images += holder
|
||||||
|
|
||||||
|
for(var/datum/data/record/E in data_core.general)
|
||||||
|
if(E.fields["name"] == perpname)
|
||||||
|
holder = perp.hud_list[WANTED_HUD]
|
||||||
|
for(var/datum/data/record/R in data_core.security)
|
||||||
|
if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
|
||||||
|
holder.icon_state = "hudwanted"
|
||||||
|
client.images += holder
|
||||||
break
|
break
|
||||||
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
|
||||||
client.images += image(tempHud,perp,"hudprisoner")
|
holder.icon_state = "hudprisoner"
|
||||||
|
client.images += holder
|
||||||
|
break
|
||||||
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled"))
|
||||||
|
holder.icon_state = "hudparolled"
|
||||||
|
client.images += holder
|
||||||
|
break
|
||||||
|
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released"))
|
||||||
|
holder.icon_state = "hudreleased"
|
||||||
|
client.images += holder
|
||||||
break
|
break
|
||||||
else
|
|
||||||
client.images += image(tempHud,perp,"hudunknown")
|
|
||||||
|
|
||||||
/mob/living/silicon/pai/proc/medicalHUD()
|
/mob/living/silicon/pai/proc/medicalHUD()
|
||||||
if(client)
|
if(client)
|
||||||
var/icon/tempHud = 'icons/mob/hud.dmi'
|
var/image/holder
|
||||||
var/turf/T = get_turf_or_move(src.loc)
|
var/turf/T = get_turf_or_move(src.loc)
|
||||||
for(var/mob/living/carbon/human/patient in view(T))
|
for(var/mob/living/carbon/human/patient in view(T))
|
||||||
|
|
||||||
@@ -40,15 +57,24 @@
|
|||||||
if(!D.hidden[SCANNER])
|
if(!D.hidden[SCANNER])
|
||||||
foundVirus = 1
|
foundVirus = 1
|
||||||
|
|
||||||
client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
|
holder = patient.hud_list[HEALTH_HUD]
|
||||||
if(patient.stat == 2)
|
if(patient.stat == 2)
|
||||||
client.images += image(tempHud,patient,"huddead")
|
holder.icon_state = "hudhealth-100"
|
||||||
else if(patient.status_flags & XENO_HOST)
|
client.images += holder
|
||||||
client.images += image(tempHud,patient,"hudxeno")
|
|
||||||
else if(foundVirus)
|
|
||||||
client.images += image(tempHud,patient,"hudill")
|
|
||||||
else
|
else
|
||||||
client.images += image(tempHud,patient,"hudhealthy")
|
holder.icon_state = "hud[RoundHealth(patient.health)]"
|
||||||
|
client.images += holder
|
||||||
|
|
||||||
|
holder = patient.hud_list[STATUS_HUD]
|
||||||
|
if(patient.stat == 2)
|
||||||
|
holder.icon_state = "huddead"
|
||||||
|
else if(patient.status_flags & XENO_HOST)
|
||||||
|
holder.icon_state = "hudxeno"
|
||||||
|
else if(foundVirus)
|
||||||
|
holder.icon_state = "hudill"
|
||||||
|
else
|
||||||
|
holder.icon_state = "hudhealthy"
|
||||||
|
client.images += holder
|
||||||
|
|
||||||
/mob/living/silicon/pai/proc/RoundHealth(health)
|
/mob/living/silicon/pai/proc/RoundHealth(health)
|
||||||
switch(health)
|
switch(health)
|
||||||
|
|||||||
@@ -160,7 +160,7 @@
|
|||||||
|
|
||||||
for(var/image/hud in client.images) //COPIED FROM the human handle_regular_hud_updates() proc
|
for(var/image/hud in client.images) //COPIED FROM the human handle_regular_hud_updates() proc
|
||||||
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe
|
||||||
del(hud)
|
client.images.Remove(hud)
|
||||||
|
|
||||||
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
|
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
|
||||||
if(hud && hud.hud) hud.hud.process_hud(src)
|
if(hud && hud.hud) hud.hud.process_hud(src)
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
stance_step++
|
stance_step++
|
||||||
if(stance_step >= 10) //rests for 10 ticks
|
if(stance_step >= 10) //rests for 10 ticks
|
||||||
if(target_mob && target_mob in ListTargets())
|
if(target_mob && target_mob in ListTargets(10))
|
||||||
stance = HOSTILE_STANCE_ATTACK //If the mob he was chasing is still nearby, resume the attack, otherwise go idle.
|
stance = HOSTILE_STANCE_ATTACK //If the mob he was chasing is still nearby, resume the attack, otherwise go idle.
|
||||||
else
|
else
|
||||||
stance = HOSTILE_STANCE_IDLE
|
stance = HOSTILE_STANCE_IDLE
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
if(HOSTILE_STANCE_ALERT)
|
if(HOSTILE_STANCE_ALERT)
|
||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
var/found_mob = 0
|
var/found_mob = 0
|
||||||
if(target_mob && target_mob in ListTargets())
|
if(target_mob && target_mob in ListTargets(10))
|
||||||
if(!(SA_attackable(target_mob)))
|
if(!(SA_attackable(target_mob)))
|
||||||
stance_step = max(0, stance_step) //If we have not seen a mob in a while, the stance_step will be negative, we need to reset it to 0 as soon as we see a mob again.
|
stance_step = max(0, stance_step) //If we have not seen a mob in a while, the stance_step will be negative, we need to reset it to 0 as soon as we see a mob again.
|
||||||
stance_step++
|
stance_step++
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
..()
|
..()
|
||||||
if(!stat)
|
if(!stat)
|
||||||
if(stance == HOSTILE_STANCE_IDLE)
|
if(stance == HOSTILE_STANCE_IDLE)
|
||||||
var/list/can_see = ListTargets()
|
var/list/can_see = view(src, 10)
|
||||||
//30% chance to stop wandering and do something
|
//30% chance to stop wandering and do something
|
||||||
if(!busy && prob(30))
|
if(!busy && prob(30))
|
||||||
//first, check for potential food nearby to cocoon
|
//first, check for potential food nearby to cocoon
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
var/atom/T = null
|
var/atom/T = null
|
||||||
stop_automated_movement = 0
|
stop_automated_movement = 0
|
||||||
for(var/atom/A in ListTargets())
|
for(var/atom/A in ListTargets(10))
|
||||||
|
|
||||||
if(A == src)
|
if(A == src)
|
||||||
continue
|
continue
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
T = L
|
T = L
|
||||||
break
|
break
|
||||||
|
|
||||||
if(istype(A, /obj/mecha))
|
else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets().
|
||||||
var/obj/mecha/M = A
|
var/obj/mecha/M = A
|
||||||
if (M.occupant)
|
if (M.occupant)
|
||||||
stance = HOSTILE_STANCE_ATTACK
|
stance = HOSTILE_STANCE_ATTACK
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
stop_automated_movement = 1
|
stop_automated_movement = 1
|
||||||
if(!target_mob || SA_attackable(target_mob))
|
if(!target_mob || SA_attackable(target_mob))
|
||||||
stance = HOSTILE_STANCE_IDLE
|
stance = HOSTILE_STANCE_IDLE
|
||||||
if(target_mob in ListTargets())
|
if(target_mob in ListTargets(10))
|
||||||
if(ranged)
|
if(ranged)
|
||||||
if(get_dist(src, target_mob) <= 6)
|
if(get_dist(src, target_mob) <= 6)
|
||||||
OpenFire(target_mob)
|
OpenFire(target_mob)
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
if(!target_mob || SA_attackable(target_mob))
|
if(!target_mob || SA_attackable(target_mob))
|
||||||
LoseTarget()
|
LoseTarget()
|
||||||
return 0
|
return 0
|
||||||
if(!(target_mob in ListTargets()))
|
if(!(target_mob in ListTargets(10)))
|
||||||
LostTarget()
|
LostTarget()
|
||||||
return 0
|
return 0
|
||||||
if(get_dist(src, target_mob) <= 1) //Attacking
|
if(get_dist(src, target_mob) <= 1) //Attacking
|
||||||
@@ -109,8 +109,10 @@
|
|||||||
walk(src, 0)
|
walk(src, 0)
|
||||||
|
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/proc/ListTargets()
|
/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7)
|
||||||
return view(src, 10)
|
var/list/L = hearers(src, dist)
|
||||||
|
L += mechas_list
|
||||||
|
return L
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/Die()
|
/mob/living/simple_animal/hostile/Die()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/hostile/mimic/crate/ListTargets()
|
/mob/living/simple_animal/hostile/mimic/crate/ListTargets()
|
||||||
if(attempt_open)
|
if(attempt_open)
|
||||||
return view(src, 10)
|
return ..()
|
||||||
return view(src, 1)
|
return view(src, 1)
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mimic/crate/FindTarget()
|
/mob/living/simple_animal/hostile/mimic/crate/FindTarget()
|
||||||
@@ -149,7 +149,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca
|
|||||||
|
|
||||||
/mob/living/simple_animal/hostile/mimic/copy/ListTargets()
|
/mob/living/simple_animal/hostile/mimic/copy/ListTargets()
|
||||||
// Return a list of targets that isn't the creator
|
// Return a list of targets that isn't the creator
|
||||||
return view(src, 7) - creator
|
. = ..()
|
||||||
|
return . - creator
|
||||||
|
|
||||||
/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(var/obj/O, var/mob/living/creator)
|
/mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(var/obj/O, var/mob/living/creator)
|
||||||
|
|
||||||
|
|||||||
@@ -211,6 +211,7 @@
|
|||||||
var/tajaran_talk_understand = 0
|
var/tajaran_talk_understand = 0
|
||||||
var/soghun_talk_understand = 0
|
var/soghun_talk_understand = 0
|
||||||
var/skrell_talk_understand = 0
|
var/skrell_talk_understand = 0
|
||||||
|
var/vox_talk_understand = 0
|
||||||
|
|
||||||
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
var/has_limbs = 1 //Whether this mob have any limbs he can move with
|
||||||
var/can_stand = 1 //Whether this mob have ability to stand
|
var/can_stand = 1 //Whether this mob have ability to stand
|
||||||
|
|||||||
@@ -349,6 +349,10 @@
|
|||||||
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
|
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
|
||||||
new_character.dna.mutantrace = "skrell"
|
new_character.dna.mutantrace = "skrell"
|
||||||
new_character.skrell_talk_understand = 1
|
new_character.skrell_talk_understand = 1
|
||||||
|
if(client.prefs.species == "Vox")
|
||||||
|
if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist))
|
||||||
|
new_character.dna.mutantrace = "vox"
|
||||||
|
new_character.vox_talk_understand = 1
|
||||||
|
|
||||||
if(ticker.random_players)
|
if(ticker.random_players)
|
||||||
new_character.gender = pick(MALE, FEMALE)
|
new_character.gender = pick(MALE, FEMALE)
|
||||||
|
|||||||
@@ -144,6 +144,8 @@ datum/preferences
|
|||||||
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
icobase = 'icons/mob/human_races/r_lizard.dmi'
|
||||||
if("Skrell")
|
if("Skrell")
|
||||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
|
if("Vox")
|
||||||
|
icobase = 'icons/mob/human_races/r_vox.dmi'
|
||||||
else
|
else
|
||||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||||
preview_icon = new /icon(icobase, "torso_[g]")
|
preview_icon = new /icon(icobase, "torso_[g]")
|
||||||
@@ -172,6 +174,9 @@ datum/preferences
|
|||||||
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||||
|
|
||||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s")
|
||||||
|
if(species=="Vox")
|
||||||
|
eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s")
|
||||||
|
|
||||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||||
|
|
||||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||||
|
|||||||
@@ -306,7 +306,7 @@
|
|||||||
name = "Shaved"
|
name = "Shaved"
|
||||||
icon_state = "bald"
|
icon_state = "bald"
|
||||||
gender = NEUTER
|
gender = NEUTER
|
||||||
species_allowed = list("Human","Unathi","Tajaran","Skrell")
|
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox")
|
||||||
|
|
||||||
watson
|
watson
|
||||||
name = "Watson Mustache"
|
name = "Watson Mustache"
|
||||||
@@ -493,6 +493,11 @@
|
|||||||
icon_state = "hair_messy"
|
icon_state = "hair_messy"
|
||||||
species_allowed = list("Tajaran")
|
species_allowed = list("Tajaran")
|
||||||
|
|
||||||
|
vox_quills_short
|
||||||
|
name = "Short Vox Quills"
|
||||||
|
icon_state = "vox_shortquills"
|
||||||
|
species_allowed = list("Vox")
|
||||||
|
|
||||||
/datum/sprite_accessory/facial_hair
|
/datum/sprite_accessory/facial_hair
|
||||||
|
|
||||||
taj_sideburns
|
taj_sideburns
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran)
|
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox)
|
||||||
if(!text)
|
if(!text)
|
||||||
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
|
||||||
//tcomms code is still runtiming somewhere here
|
//tcomms code is still runtiming somewhere here
|
||||||
@@ -80,6 +80,8 @@
|
|||||||
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
|
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
|
||||||
if (is_speaking_tajaran)
|
if (is_speaking_tajaran)
|
||||||
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
|
return "<span class='say_quote'>mrowls</span>, \"<span class='tajaran'>[text]</span>\"";
|
||||||
|
if (is_speaking_vox)
|
||||||
|
return "<span class='say_quote'>chirps</span>, \"<span class='vox'>[text]</span>\"";
|
||||||
//Needs Virus2
|
//Needs Virus2
|
||||||
// if (src.disease_symptoms & DISEASE_HOARSE)
|
// if (src.disease_symptoms & DISEASE_HOARSE)
|
||||||
// return "rasps, \"[text]\"";
|
// return "rasps, \"[text]\"";
|
||||||
|
|||||||
@@ -740,6 +740,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
|||||||
base = new('icons/mob/human_races/r_lizard.dmi')
|
base = new('icons/mob/human_races/r_lizard.dmi')
|
||||||
if("skrell")
|
if("skrell")
|
||||||
base = new('icons/mob/human_races/r_skrell.dmi')
|
base = new('icons/mob/human_races/r_skrell.dmi')
|
||||||
|
if("vox")
|
||||||
|
base = new('icons/mob/human_races/r_vox.dmi')
|
||||||
else
|
else
|
||||||
base = new('icons/mob/human_races/r_human.dmi')
|
base = new('icons/mob/human_races/r_human.dmi')
|
||||||
if(base)
|
if(base)
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
|
|
||||||
var/mob/living/carbon/human/H = new_mob
|
var/mob/living/carbon/human/H = new_mob
|
||||||
if(H.dna)
|
if(H.dna)
|
||||||
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant",4;"")
|
H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"")
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -515,6 +515,12 @@ datum
|
|||||||
//world << "reagent data set ([reagent_id])"
|
//world << "reagent data set ([reagent_id])"
|
||||||
D.data = new_data
|
D.data = new_data
|
||||||
|
|
||||||
|
delete()
|
||||||
|
for(var/datum/reagent/R in reagent_list)
|
||||||
|
R.holder = null
|
||||||
|
if(my_atom)
|
||||||
|
my_atom.reagents = null
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ datum
|
|||||||
if(!M) M = holder.my_atom
|
if(!M) M = holder.my_atom
|
||||||
M.druggy = max(M.druggy, 15)
|
M.druggy = max(M.druggy, 15)
|
||||||
if(isturf(M.loc) && !istype(M.loc, /turf/space))
|
if(isturf(M.loc) && !istype(M.loc, /turf/space))
|
||||||
if(M.canmove)
|
if(M.canmove && !M.restrained())
|
||||||
if(prob(10)) step(M, pick(cardinal))
|
if(prob(10)) step(M, pick(cardinal))
|
||||||
if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
|
if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
|
||||||
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
|
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
|
||||||
@@ -642,7 +642,7 @@ datum
|
|||||||
|
|
||||||
on_mob_life(var/mob/living/M as mob)
|
on_mob_life(var/mob/living/M as mob)
|
||||||
if(!M) M = holder.my_atom
|
if(!M) M = holder.my_atom
|
||||||
if(M.canmove && istype(M.loc, /turf/space))
|
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
|
||||||
step(M, pick(cardinal))
|
step(M, pick(cardinal))
|
||||||
if(prob(5)) M.emote(pick("twitch","drool","moan"))
|
if(prob(5)) M.emote(pick("twitch","drool","moan"))
|
||||||
..()
|
..()
|
||||||
@@ -728,7 +728,7 @@ datum
|
|||||||
|
|
||||||
on_mob_life(var/mob/living/M as mob)
|
on_mob_life(var/mob/living/M as mob)
|
||||||
if(!M) M = holder.my_atom
|
if(!M) M = holder.my_atom
|
||||||
if(M.canmove && istype(M.loc, /turf/space))
|
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
|
||||||
step(M, pick(cardinal))
|
step(M, pick(cardinal))
|
||||||
if(prob(5)) M.emote(pick("twitch","drool","moan"))
|
if(prob(5)) M.emote(pick("twitch","drool","moan"))
|
||||||
..()
|
..()
|
||||||
@@ -927,6 +927,13 @@ datum
|
|||||||
on_mob_life(var/mob/living/M as mob)
|
on_mob_life(var/mob/living/M as mob)
|
||||||
if(!M) M = holder.my_atom
|
if(!M) M = holder.my_atom
|
||||||
M.apply_effect(2*REM,IRRADIATE,0)
|
M.apply_effect(2*REM,IRRADIATE,0)
|
||||||
|
// radium may increase your chances to cure a disease
|
||||||
|
if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
|
||||||
|
if(M:virus2 && prob(5))
|
||||||
|
if(prob(50))
|
||||||
|
M.radiation += 50 // curing it that way may kill you instead
|
||||||
|
M.adjustToxLoss(100)
|
||||||
|
M:antibodies |= M:virus2.antigen
|
||||||
..()
|
..()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,9 @@
|
|||||||
|
|
||||||
// type path referencing tools that can be used for this step, and how well are they suited for it
|
// type path referencing tools that can be used for this step, and how well are they suited for it
|
||||||
var/list/allowed_tools = null
|
var/list/allowed_tools = null
|
||||||
|
// type paths referencing mutantraces that this step applies to.
|
||||||
|
var/list/allowed_species = null
|
||||||
|
var/list/disallowed_species = null
|
||||||
|
|
||||||
// duration of the step
|
// duration of the step
|
||||||
var/min_duration = 0
|
var/min_duration = 0
|
||||||
@@ -22,6 +25,21 @@
|
|||||||
return allowed_tools[T]
|
return allowed_tools[T]
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
// Checks if this step applies to the mutantrace of the user.
|
||||||
|
proc/is_valid_mutantrace(mob/living/carbon/human/target)
|
||||||
|
|
||||||
|
if(allowed_species)
|
||||||
|
for(var/species in allowed_species)
|
||||||
|
if(target.dna.mutantrace == species)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if(disallowed_species)
|
||||||
|
for(var/species in disallowed_species)
|
||||||
|
if (target.dna.mutantrace == species)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
return 1
|
||||||
|
|
||||||
// checks whether this step can be applied with the given user and target
|
// checks whether this step can be applied with the given user and target
|
||||||
proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||||
return 0
|
return 0
|
||||||
@@ -63,7 +81,7 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool)
|
|||||||
return 0
|
return 0
|
||||||
for(var/datum/surgery_step/S in surgery_steps)
|
for(var/datum/surgery_step/S in surgery_steps)
|
||||||
//check if tool is right or close enough and if this step is possible
|
//check if tool is right or close enough and if this step is possible
|
||||||
if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool))
|
if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_mutantrace(M))
|
||||||
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
|
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
|
||||||
//We had proper tools! (or RNG smiled.) and User did not move or change hands.
|
//We had proper tools! (or RNG smiled.) and User did not move or change hands.
|
||||||
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
|
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
|
||||||
|
|||||||
@@ -669,3 +669,12 @@ var/list/be_special_flags = list(
|
|||||||
|
|
||||||
#define LEFT 1
|
#define LEFT 1
|
||||||
#define RIGHT 2
|
#define RIGHT 2
|
||||||
|
|
||||||
|
// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans.
|
||||||
|
#define HEALTH_HUD 1 // dead, alive, sick, health status
|
||||||
|
#define STATUS_HUD 2 // a simple line rounding the mob's number health
|
||||||
|
#define ID_HUD 3 // the job asigned to your ID
|
||||||
|
#define WANTED_HUD 4 // wanted, released, parroled, security status
|
||||||
|
#define IMPLOYAL_HUD 5 // loyality implant
|
||||||
|
#define IMPCHEM_HUD 6 // chemical implant
|
||||||
|
#define IMPTRACK_HUD 7 // tracking implant
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ h1.alert, h2.alert {color: #000000;}
|
|||||||
.tajaran {color: #803B56;}
|
.tajaran {color: #803B56;}
|
||||||
.skrell {color: #00CED1;}
|
.skrell {color: #00CED1;}
|
||||||
.soghun {color: #228B22;}
|
.soghun {color: #228B22;}
|
||||||
|
.vox {color: #AA00AA;}
|
||||||
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
.say_quote {font-family: Georgia, Verdana, sans-serif;}
|
||||||
|
|
||||||
.interface {color: #330033;}
|
.interface {color: #330033;}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 269 KiB After Width: | Height: | Size: 273 KiB |
|
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 236 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 48 KiB |