Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into bleeding-edge-freeze

This commit is contained in:
MisterBook
2013-06-05 18:39:43 -05:00
62 changed files with 1111 additions and 815 deletions

View File

@@ -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.
var
//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
size = max(1,A.group_multiplier)
@@ -376,23 +376,18 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
unsim_plasma = 0
unsim_heat_capacity = 0
unsim_temperature = 0
for(var/turf/T in unsimulated_tiles)
unsim_oxygen += T.oxygen
unsim_co2 += T.carbon_dioxide
unsim_nitrogen += T.nitrogen
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_heat_capacity = HEAT_CAPACITY_CALCULATION(unsim_oxygen,unsim_co2,unsim_nitrogen,unsim_plasma)
var
ratio = 0.33
ratio = sharing_lookup_table[6]
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"
// oh-shit effect when large rooms get breached, but still having small
// 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_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.
var
//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
full_heat_capacity = A.heat_capacity()

View File

@@ -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/landmarks_list = list() //list of all landmarks created
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
//Hairstyles
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name

View File

@@ -122,6 +122,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H)
icobase = 'icons/mob/human_races/r_lizard.dmi'
if("Skrell")
icobase = 'icons/mob/human_races/r_skrell.dmi'
if("Vox")
icobase = 'icons/mob/human_races/r_vox.dmi'
else
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)
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)
var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style]

View File

@@ -730,7 +730,7 @@ client
usr << "This can only be done to instances of type /mob/living/carbon/human"
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)
if(null)
return

View File

@@ -104,15 +104,15 @@ var/list/radiochannels = list(
"Medical" = 1355,
"Engineering" = 1357,
"Security" = 1359,
"Response Team" = 1443,
"Deathsquad" = 1441,
"Syndicate" = 1213,
"Supply" = 1347,
)
//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/SYND_FREQ = 1213
var/const/ERT_FREQ = 1439
#define TRANSMISSION_WIRE 0
#define TRANSMISSION_RADIO 1

View File

@@ -487,3 +487,25 @@ proc/FindNameFromID(var/mob/living/carbon/human/H)
if(ID)
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

View File

@@ -76,7 +76,10 @@
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit)
if("Nurse")
if(H.gender == FEMALE)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
if(prob(50))
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)
else
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)

View File

@@ -170,10 +170,10 @@
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.")
var/old_level = danger_level
danger_level = overall_danger_level()
if (alarm_area.master_air_alarm == src)
if (old_level != danger_level)
refresh_danger_level()
update_icon()

View File

@@ -143,7 +143,7 @@
pulse2.dir = pick(cardinal)
spawn(10)
del(pulse2)
pulse2.delete()
if (on)
turn_off()
spawn(severity*300)

View File

@@ -862,7 +862,7 @@ Auto Patrol: []"},
pulse2.anchored = 1
pulse2.dir = pick(cardinal)
spawn(10)
del(pulse2)
pulse2.delete()
var/list/mob/living/carbon/targets = new
for (var/mob/living/carbon/C in view(12,src))
if (C.stat==2)

View File

@@ -299,6 +299,7 @@
if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
spawn(0)
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)
src.oldpatient = src.patient
src.patient = null

View File

@@ -583,7 +583,7 @@ Auto Patrol: []"},
// given an optional turf to avoid
/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)
if (!path) path = list()
// look for a criminal in view of the bot

View File

@@ -131,7 +131,7 @@ Class Procs:
pulse2.dir = pick(cardinal)
spawn(10)
del(pulse2)
pulse2.delete()
..()
/obj/machinery/ex_act(severity)

View File

@@ -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["name"], signal.data["job"],
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
if(intercept)
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"
if(1347)
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

View File

@@ -27,7 +27,11 @@
/obj/machinery/telecomms/relay/preset/centcom
id = "Centcom Relay"
hide = 1
toggled = 0
toggled = 1
//anchored = 1
//use_power = 0
//idle_power_usage = 0
heatgen = 0
autolinkers = list("c_relay")
//HUB

View File

@@ -550,7 +550,7 @@
switch(screen)
if("main")
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)
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")
@@ -646,9 +646,6 @@
queue = list()
src.sync()
return update_queue_on_page()
if(href_list["auto_sync"])
src.sync = !src.sync
//pr_auto_sync.toggle()
if(href_list["part_desc"])
var/obj/part = filter.getObj("part_desc")
if(part)
@@ -661,14 +658,6 @@
src.updateUsrDialog()
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)
var/type
switch(mat_string)

View File

@@ -86,10 +86,12 @@
removeVerb(/atom/movable/verb/pull)
log_message("[src.name] created.")
loc.Entered(src)
mechas_list += src //global mech list
return
/obj/mecha/Del()
src.go_out()
mechas_list -= src //global mech list
..()
return

View File

@@ -79,7 +79,7 @@
if(!M || M.stat || !(M in view(M))) return
if(!M.client) return
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))
if(M.see_invisible < patient.invisibility)
continue
@@ -89,12 +89,22 @@
foundVirus++
//if(patient.virus2)
// foundVirus++
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
holder = patient.hud_list[HEALTH_HUD]
if(patient.stat == 2)
C.images += image(tempHud,patient,"huddead")
else if(patient.status_flags & XENO_HOST)
C.images += image(tempHud,patient,"hudxeno")
else if(foundVirus)
C.images += image(tempHud,patient,"hudill")
holder.icon_state = "hudhealth-100"
C.images += holder
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

View File

@@ -30,6 +30,12 @@ would spawn and follow the beaker, even if it is carried or thrown.
mouse_opacity = 0
var/amount = 8.0
/obj/effect/proc/delete()
loc = null
if(reagents)
reagents.delete()
return
/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))
// T.firelevel = 0 //TODO: FIX
spawn( 70 )
del(src)
delete()
return
return
@@ -54,7 +60,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
// T.firelevel = 0 //TODO: FIX
if (--src.life < 1)
//SN src = null
del(src)
delete()
if(newloc.density)
return 0
.=..()
@@ -132,7 +138,7 @@ steam.start() -- spawns the effect
sleep(5)
step(steam,direction)
spawn(20)
del(steam)
steam.delete()
/////////////////////////////////////////////
//SPARK SYSTEM (like steam system)
@@ -155,7 +161,7 @@ steam.start() -- spawns the effect
if (istype(T, /turf))
T.hotspot_expose(1000,100)
spawn (100)
del(src)
delete()
return
/obj/effect/effect/sparks/Del()
@@ -204,7 +210,7 @@ steam.start() -- spawns the effect
sleep(5)
step(sparks,direction)
spawn(20)
del(sparks)
sparks.delete()
src.total_sparks--
@@ -231,7 +237,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/harmless_smoke/New()
..()
spawn (100)
del(src)
delete()
return
/obj/effect/effect/harmless_smoke/Move()
@@ -275,7 +281,7 @@ steam.start() -- spawns the effect
sleep(10)
step(smoke,direction)
spawn(75+rand(10,30))
del(smoke)
smoke.delete()
src.total_smoke--
@@ -298,7 +304,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/bad_smoke/New()
..()
spawn (200+rand(10,30))
del(src)
delete()
return
/obj/effect/effect/bad_smoke/Move()
@@ -375,7 +381,7 @@ steam.start() -- spawns the effect
sleep(10)
step(smoke,direction)
spawn(150+rand(10,30))
del(smoke)
smoke.delete()
src.total_smoke--
@@ -402,7 +408,7 @@ steam.start() -- spawns the effect
R.my_atom = src
spawn (200+rand(10,30))
del(src)
delete()
return
/obj/effect/effect/chem_smoke/Move()
@@ -504,7 +510,7 @@ steam.start() -- spawns the effect
sleep(10)
step(smoke,direction)
spawn(150+rand(10,30))
del(smoke)
smoke.delete()
src.total_smoke--
@@ -528,7 +534,7 @@ steam.start() -- spawns the effect
/obj/effect/effect/sleep_smoke/New()
..()
spawn (200+rand(10,30))
del(src)
delete()
return
/obj/effect/effect/sleep_smoke/Move()
@@ -599,7 +605,7 @@ steam.start() -- spawns the effect
sleep(10)
step(smoke,direction)
spawn(150+rand(10,30))
del(smoke)
smoke.delete()
src.total_smoke--
/////////////////////////////////////////////
@@ -727,7 +733,7 @@ steam.start() -- spawns the effect
flick("ion_fade", I)
I.icon_state = "blank"
spawn( 20 )
del(I)
I.delete()
spawn(2)
if(src.on)
src.processing = 1
@@ -772,7 +778,7 @@ steam.start() -- spawns the effect
src.oldposition = get_turf(holder)
I.dir = src.holder.dir
spawn(10)
del(I)
I.delete()
src.number--
spawn(2)
if(src.on)
@@ -826,7 +832,7 @@ steam.start() -- spawns the effect
flick("[icon_state]-disolve", src)
sleep(5)
del(src)
delete()
return
// on delete, transfer any reagents to the floor
@@ -872,7 +878,7 @@ steam.start() -- spawns the effect
flick("[icon_state]-disolve", src)
spawn(5)
del(src)
delete()
/obj/effect/effect/foam/HasEntered(var/atom/movable/AM)

View File

@@ -15,7 +15,7 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
pulse.name = "emp pulse"
pulse.anchored = 1
spawn(20)
del(pulse)
pulse.delete()
if(heavy_range > light_range)
light_range = heavy_range

View File

@@ -40,7 +40,7 @@
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
spawn(8) del(T)
spawn(8) T.delete()
else
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
var/obj/O = new saved_item(src)
@@ -59,7 +59,7 @@
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
spawn(8) del(T)
spawn(8) T.delete()
proc/disrupt()
if(active_dummy)

View File

@@ -92,7 +92,7 @@
O.icon_state = "nothing"
flick("empdisable",O)
spawn(5)
del(O)
O.delete()
return

View File

@@ -122,6 +122,17 @@
new /obj/item/weapon/storage/backpack/satchel_med(src)
new /obj/item/clothing/suit/bio_suit/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/suit/storage/labcoat/cmo(src)
new /obj/item/weapon/cartridge/cmo(src)

View File

@@ -303,7 +303,7 @@
icon_state = "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/blue(src)

View File

@@ -646,7 +646,7 @@ var/list/admin_verbs_mod = list(
if(!istype(M, /mob/living/carbon/human))
usr << "\red You can only do this to humans!"
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")
return
var/new_facial = input("Please select facial hair color.", "Character Generation") as color

View File

@@ -792,6 +792,10 @@ datum/preferences
if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins
new_species += "Skrell"
whitelisted = 1
if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins
new_species += "Vox"
whitelisted = 1
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.")
@@ -799,6 +803,7 @@ datum/preferences
new_species += "Tajaran"
new_species += "Unathi"
new_species += "Skrell"
new_species += "Vox"
species = input("Please select a species", "Character Generation", null) in new_species
if(prev_species != species)

View File

@@ -45,22 +45,31 @@
if(!M) return
if(!M.client) return
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))
var/foundVirus = 0
for(var/datum/disease/D in patient.viruses)
if(!D.hidden[SCANNER])
foundVirus++
if(!C) continue
C.images += image(tempHud, patient, "hud[RoundHealth(patient.health)]")
holder = patient.hud_list[HEALTH_HUD]
if(patient.stat == 2)
C.images += image(tempHud, patient, "huddead")
else if(patient.status_flags & XENO_HOST)
C.images += image(tempHud, patient, "hudxeno")
else if(foundVirus)
C.images += image(tempHud, patient, "hudill")
holder.icon_state = "hudhealth-100"
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
@@ -80,41 +89,57 @@
if(!M) return
if(!M.client) return
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))
if(!C) continue
var/perpname = perp.name
holder = perp.hud_list[ID_HUD]
if(perp.wear_id)
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
if(I)
C.images += image(tempHud, perp, "hud[ckey(I.GetJobRealName())]")
perpname = I.registered_name
holder.icon_state = "hud[ckey(I.GetJobName())]"
C.images += holder
else
perpname = perp.name
C.images += image(tempHud, perp, "hudunknown")
holder.icon_state = "hudunknown"
C.images += holder
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)
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*"))
C.images += image(tempHud, perp, "hudwanted")
holder.icon_state = "hudwanted"
C.images += holder
break
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
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
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
for(var/obj/item/weapon/implant/I in perp)
if(I.implanted)
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))
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))
C.images += image(tempHud, perp, "hud_imp_chem")
holder = perp.hud_list[IMPCHEM_HUD]
holder.icon_state = "hud_imp_chem"
C.images += holder

View File

@@ -65,7 +65,7 @@
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs."
icon_state = "surgcap_blue"
flags = FPRINT | TABLEPASS
flags = FPRINT | TABLEPASS | BLOCKHAIR
/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."

View File

@@ -21,4 +21,70 @@
armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50)
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
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"

View File

@@ -103,6 +103,9 @@
icon_state = "hazard"
item_state = "hazard"
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
/obj/item/clothing/suit/storage/lawyer/bluejacket
@@ -150,16 +153,37 @@
return
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
/obj/item/clothing/suit/suspenders
name = "suspenders"
desc = "They suspend the illusion of the mime's play."
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "suspenders"
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"
blood_overlay_type = "armor" //it's the less thing that I can put here

View File

@@ -90,6 +90,7 @@
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."
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
name = "Scientist Labcoat"

View File

@@ -4,6 +4,7 @@
voice_name = "unknown"
icon = 'icons/mob/human.dmi'
icon_state = "body_m_s"
var/list/hud_list = list()
/mob/living/carbon/human/dummy
@@ -20,6 +21,9 @@
if(!dna)
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)
@@ -807,6 +811,8 @@
return "Tajaran"
if("skrell")
return "Skrell"
if("vox")
return "Vox"
if("plant")
return "Mobile vegetation"
if("golem")
@@ -822,6 +828,8 @@
return "Skrell"
else if(src.dna.mutantrace == "tajaran")
return "Tajaran"
else if(src.dna.mutantrace == "vox")
return "vox"
/mob/living/carbon/proc/update_mutantrace_languages()
if(src.dna)
@@ -831,6 +839,8 @@
src.skrell_talk_understand = 1
else if(src.dna.mutantrace == "tajaran")
src.tajaran_talk_understand = 1
else if(src.dna.mutantrace == "vox")
src.vox_talk_understand = 1
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
@@ -1101,4 +1111,4 @@
.=..()
if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
del(feet_blood_DNA)
return 1
return 1

View File

@@ -392,6 +392,7 @@
var/SA_para_min = 1
var/SA_sleep_min = 5
var/oxygen_used = 0
var/nitrogen_used = 0
var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
//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)
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
// 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))
spawn(0) emote("gasp")
if(O2_pp > 0)
@@ -420,6 +423,19 @@
oxyloss += 5*ratio
oxygen_used = breath.oxygen*ratio/6
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
failed_last_breath = 0
adjustOxyLoss(-5)
@@ -427,6 +443,7 @@
oxygen_alert = 0
breath.oxygen -= oxygen_used
breath.nitrogen -= nitrogen_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.
@@ -1029,7 +1046,7 @@
for(var/image/hud in client.images)
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)

View File

@@ -313,6 +313,8 @@ proc/get_damage_icon_part(damage_state, body_part)
//Eyes
if(!skeleton)
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)
stand_icon.Blend(eyes_s, ICON_OVERLAY)
@@ -442,6 +444,9 @@ proc/get_damage_icon_part(damage_state, body_part)
if("skrell")
race_icon = 'icons/mob/human_races/r_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
race_icon = 'icons/mob/human_races/r_human.dmi'
deform_icon = 'icons/mob/human_races/r_def_human.dmi'

View File

@@ -18,6 +18,7 @@ var/list/department_radio_keys = list(
":k" = "skrell", "#k" = "skrell", ".k" = "skrell",
":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran",
":o" = "soghun", "#o" = "soghun", ".o" = "soghun",
":v" = "vox", "#v" = "vox", ".v" = "vox",
":R" = "right hand", "#R" = "right hand", ".R" = "right 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",
":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran",
":O" = "soghun", "#O" = "soghun", ".O" = "soghun",
":V" = "vox", "#V" = "vox", ".V" = "vox",
//kinda localization -- rastaf0
//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_soghun = 0
var/is_speaking_taj = 0
var/is_speaking_vox = 0
var/is_speaking_radio = 0
switch (message_mode)
@@ -283,6 +286,10 @@ var/list/department_radio_keys = list(
if(skrell_talk_understand || universal_speak)
is_speaking_skrell = 1
if ("vox")
if(vox_talk_understand || universal_speak)
is_speaking_vox = 1
if("changeling")
if(mind && mind.changeling)
for(var/mob/Changeling in mob_list)
@@ -370,7 +377,7 @@ var/list/department_radio_keys = list(
for (var/M in listening)
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
else if(ismob(M))
if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
@@ -379,6 +386,8 @@ var/list/department_radio_keys = list(
heard_a += M
else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
heard_a += M
else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak))
heard_a += M
else
heard_b += M
else
@@ -394,7 +403,7 @@ var/list/department_radio_keys = list(
var/rendered = null
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)
message_a = "<i>[message_a]</i>"
@@ -419,7 +428,7 @@ var/list/department_radio_keys = list(
message_b = voice_message
else
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)
message_b = "<i>[message_b]</i>"

View File

@@ -2,36 +2,53 @@
if(client)
for(var/image/hud in client.images)
if(copytext(hud.icon_state,1,4) == "hud")
del(hud)
client.images -= hud
/mob/living/silicon/pai/proc/securityHUD()
if(client)
var/icon/tempHud = 'icons/mob/hud.dmi'
var/image/holder
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/carbon/human/perp in view(T))
var/perpname = "wot"
holder = perp.hud_list[ID_HUD]
if(perp.wear_id)
client.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobRealName())]")
var/perpname = "wot"
if(istype(perp.wear_id,/obj/item/weapon/card/id))
perpname = perp.wear_id:registered_name
else if(istype(perp.wear_id,/obj/item/device/pda))
var/obj/item/device/pda/tempPda = perp.wear_id
perpname = tempPda.owner
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*"))
client.images += image(tempHud,perp,"hudwanted")
break
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
client.images += image(tempHud,perp,"hudprisoner")
break
var/obj/item/weapon/card/id/I = perp.wear_id.GetID()
if(I)
perpname = I.registered_name
holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]"
client.images += holder
else
perpname = perp.name
holder.icon_state = "hudunknown"
client.images += holder
else
client.images += image(tempHud,perp,"hudunknown")
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
else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated"))
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
/mob/living/silicon/pai/proc/medicalHUD()
if(client)
var/icon/tempHud = 'icons/mob/hud.dmi'
var/image/holder
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/living/carbon/human/patient in view(T))
@@ -40,15 +57,24 @@
if(!D.hidden[SCANNER])
foundVirus = 1
client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
holder = patient.hud_list[HEALTH_HUD]
if(patient.stat == 2)
client.images += image(tempHud,patient,"huddead")
else if(patient.status_flags & XENO_HOST)
client.images += image(tempHud,patient,"hudxeno")
else if(foundVirus)
client.images += image(tempHud,patient,"hudill")
holder.icon_state = "hudhealth-100"
client.images += holder
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)
switch(health)

View File

@@ -160,7 +160,7 @@
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
del(hud)
client.images.Remove(hud)
var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src)
if(hud && hud.hud) hud.hud.process_hud(src)

View File

@@ -61,7 +61,7 @@
stop_automated_movement = 1
stance_step++
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.
else
stance = HOSTILE_STANCE_IDLE
@@ -69,7 +69,7 @@
if(HOSTILE_STANCE_ALERT)
stop_automated_movement = 1
var/found_mob = 0
if(target_mob && target_mob in ListTargets())
if(target_mob && target_mob in ListTargets(10))
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++

View File

@@ -100,7 +100,7 @@
..()
if(!stat)
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
if(!busy && prob(30))
//first, check for potential food nearby to cocoon

View File

@@ -18,7 +18,7 @@
var/atom/T = null
stop_automated_movement = 0
for(var/atom/A in ListTargets())
for(var/atom/A in ListTargets(10))
if(A == src)
continue
@@ -40,7 +40,7 @@
T = L
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
if (M.occupant)
stance = HOSTILE_STANCE_ATTACK
@@ -63,7 +63,7 @@
stop_automated_movement = 1
if(!target_mob || SA_attackable(target_mob))
stance = HOSTILE_STANCE_IDLE
if(target_mob in ListTargets())
if(target_mob in ListTargets(10))
if(ranged)
if(get_dist(src, target_mob) <= 6)
OpenFire(target_mob)
@@ -79,7 +79,7 @@
if(!target_mob || SA_attackable(target_mob))
LoseTarget()
return 0
if(!(target_mob in ListTargets()))
if(!(target_mob in ListTargets(10)))
LostTarget()
return 0
if(get_dist(src, target_mob) <= 1) //Attacking
@@ -109,8 +109,10 @@
walk(src, 0)
/mob/living/simple_animal/hostile/proc/ListTargets()
return view(src, 10)
/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7)
var/list/L = hearers(src, dist)
L += mechas_list
return L
/mob/living/simple_animal/hostile/Die()
..()

View File

@@ -77,7 +77,7 @@
/mob/living/simple_animal/hostile/mimic/crate/ListTargets()
if(attempt_open)
return view(src, 10)
return ..()
return view(src, 1)
/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()
// 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)

View File

@@ -211,6 +211,7 @@
var/tajaran_talk_understand = 0
var/soghun_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/can_stand = 1 //Whether this mob have ability to stand

View File

@@ -349,6 +349,10 @@
if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist))
new_character.dna.mutantrace = "skrell"
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)
new_character.gender = pick(MALE, FEMALE)

View File

@@ -144,6 +144,8 @@ datum/preferences
icobase = 'icons/mob/human_races/r_lizard.dmi'
if("Skrell")
icobase = 'icons/mob/human_races/r_skrell.dmi'
if("Vox")
icobase = 'icons/mob/human_races/r_vox.dmi'
else
icobase = 'icons/mob/human_races/r_human.dmi'
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)
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)
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]

View File

@@ -306,7 +306,7 @@
name = "Shaved"
icon_state = "bald"
gender = NEUTER
species_allowed = list("Human","Unathi","Tajaran","Skrell")
species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox")
watson
name = "Watson Mustache"
@@ -493,6 +493,11 @@
icon_state = "hair_messy"
species_allowed = list("Tajaran")
vox_quills_short
name = "Short Vox Quills"
icon_state = "vox_shortquills"
species_allowed = list("Vox")
/datum/sprite_accessory/facial_hair
taj_sideburns

View File

@@ -69,7 +69,7 @@
return 1
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)
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
@@ -80,6 +80,8 @@
return "<span class='say_quote'>warbles</span>, \"<span class='skrell'>[text]</span>\"";
if (is_speaking_tajaran)
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
// if (src.disease_symptoms & DISEASE_HOARSE)
// return "rasps, \"[text]\"";

View File

@@ -740,6 +740,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
base = new('icons/mob/human_races/r_lizard.dmi')
if("skrell")
base = new('icons/mob/human_races/r_skrell.dmi')
if("vox")
base = new('icons/mob/human_races/r_vox.dmi')
else
base = new('icons/mob/human_races/r_human.dmi')
if(base)

View File

@@ -74,7 +74,7 @@
var/mob/living/carbon/human/H = new_mob
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
return

View File

@@ -515,6 +515,12 @@ datum
//world << "reagent data set ([reagent_id])"
D.data = new_data
delete()
for(var/datum/reagent/R in reagent_list)
R.holder = null
if(my_atom)
my_atom.reagents = null
///////////////////////////////////////////////////////////////////////////////////

View File

@@ -512,7 +512,7 @@ datum
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 15)
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(7)) M.emote(pick("twitch","drool","moan","giggle"))
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
@@ -642,7 +642,7 @@ datum
on_mob_life(var/mob/living/M as mob)
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))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
..()
@@ -728,7 +728,7 @@ datum
on_mob_life(var/mob/living/M as mob)
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))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
..()
@@ -927,6 +927,13 @@ datum
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
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

View File

@@ -5,6 +5,9 @@
// type path referencing tools that can be used for this step, and how well are they suited for it
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
var/min_duration = 0
@@ -22,6 +25,21 @@
return allowed_tools[T]
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
proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
return 0
@@ -63,7 +81,7 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool)
return 0
for(var/datum/surgery_step/S in surgery_steps)
//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
//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)))

View File

@@ -668,4 +668,13 @@ var/list/be_special_flags = list(
#define LANGUAGE_UNIVERSAL 65535
#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

View File

@@ -55,6 +55,7 @@ h1.alert, h2.alert {color: #000000;}
.tajaran {color: #803B56;}
.skrell {color: #00CED1;}
.soghun {color: #228B22;}
.vox {color: #AA00AA;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.interface {color: #330033;}

View File

@@ -32,4 +32,4 @@ strumpetplaya - Retired Admin
tastyfish - Retired Admin
uristqwerty - Game Master
wrongnumber - Game Admin
mij - Game Admin
mij - Game Admin

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

After

Width:  |  Height:  |  Size: 273 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 232 KiB

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 48 KiB