Merge branch 'master' of github.com:Baystation12/Baystation12 into TGUpdates
Conflicts: code/defines/obj/supplypacks.dm icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi
@@ -26,6 +26,10 @@ obj/machinery/atmospherics/tvalve
|
||||
icon_state = "tvalve[state]"
|
||||
|
||||
New()
|
||||
initialize_directions()
|
||||
..()
|
||||
|
||||
proc/initialize_directions()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
initialize_directions = SOUTH|NORTH|EAST
|
||||
@@ -35,7 +39,6 @@ obj/machinery/atmospherics/tvalve
|
||||
initialize_directions = WEST|EAST|SOUTH
|
||||
if(WEST)
|
||||
initialize_directions = EAST|WEST|NORTH
|
||||
..()
|
||||
|
||||
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
||||
if(reference == node1)
|
||||
@@ -339,7 +342,7 @@ obj/machinery/atmospherics/tvalve
|
||||
obj/machinery/atmospherics/tvalve/mirrored
|
||||
icon_state = "tvalvem0"
|
||||
|
||||
New()
|
||||
initialize_directions()
|
||||
switch(dir)
|
||||
if(NORTH)
|
||||
initialize_directions = SOUTH|NORTH|WEST
|
||||
@@ -349,7 +352,6 @@ obj/machinery/atmospherics/tvalve/mirrored
|
||||
initialize_directions = WEST|EAST|NORTH
|
||||
if(WEST)
|
||||
initialize_directions = EAST|WEST|SOUTH
|
||||
..()
|
||||
|
||||
initialize()
|
||||
var/node1_dir
|
||||
|
||||
@@ -42,6 +42,7 @@ obj/machinery/atmospherics/unary/oxygen_generator
|
||||
|
||||
air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
|
||||
air_contents.oxygen += added_oxygen
|
||||
air_contents.update_values()
|
||||
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
@@ -124,6 +124,7 @@
|
||||
|
||||
//Remix the resulting gases
|
||||
filtered_out.update_values()
|
||||
removed.update_values()
|
||||
air_contents.merge(filtered_out)
|
||||
|
||||
loc.assume_air(removed)
|
||||
|
||||
@@ -44,11 +44,9 @@ datum/pipe_network
|
||||
proc/merge(datum/pipe_network/giver)
|
||||
if(giver==src) return 0
|
||||
|
||||
normal_members -= giver.normal_members
|
||||
normal_members += giver.normal_members
|
||||
normal_members |= giver.normal_members
|
||||
|
||||
line_members -= giver.line_members
|
||||
line_members += giver.line_members
|
||||
line_members |= giver.line_members
|
||||
|
||||
for(var/obj/machinery/atmospherics/normal_member in giver.normal_members)
|
||||
normal_member.reassign_network(giver, src)
|
||||
@@ -139,6 +137,7 @@ datum/pipe_network
|
||||
gas.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume
|
||||
gas.update_values()
|
||||
air_transient.update_values()
|
||||
return 1
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@ datum/pipeline
|
||||
member.air_temporary.trace_gases += corresponding
|
||||
|
||||
corresponding.moles = trace_gas.moles*member.volume/air.volume
|
||||
member.air_temporary.update_values()
|
||||
|
||||
proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
|
||||
air = new
|
||||
|
||||
@@ -341,6 +341,8 @@ obj/machinery/atmospherics/pipe
|
||||
|
||||
New()
|
||||
initialize_directions = dir
|
||||
if(air_temporary)
|
||||
air_temporary.update_values()
|
||||
..()
|
||||
|
||||
process()
|
||||
|
||||
@@ -19,6 +19,12 @@ datum
|
||||
var/list/space_borders
|
||||
var/length_space_border = 0
|
||||
|
||||
Del()
|
||||
spawn(5)
|
||||
message_admins("WARNING! Airgroup deleted! Stacktrace is in a runtime, give it to Sky.")
|
||||
CRASH("Fuck. Something deleted an airgroup. Here's your stack trace.")
|
||||
..()
|
||||
|
||||
proc/suspend_group_processing()
|
||||
//Purpose: Suspends processing of the group, breaks it into individual tiles.
|
||||
//Called by: Any check where the airgroup is determined to break.
|
||||
|
||||
@@ -891,6 +891,9 @@ datum
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity_archived()
|
||||
var/sharer_heat_capacity = sharer.heat_capacity_archived()
|
||||
if(!group_multiplier)
|
||||
message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!")
|
||||
return
|
||||
|
||||
if((sharer_heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
@@ -903,13 +906,14 @@ datum
|
||||
var/delta_temperature = (temperature - model.temperature)
|
||||
if(abs(delta_temperature) > MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER)
|
||||
var/self_heat_capacity = heat_capacity()//_archived()
|
||||
if(!group_multiplier)
|
||||
message_admins("Error! The gas mixture (ref \ref[src]) has no group multiplier!")
|
||||
return
|
||||
|
||||
if((model.heat_capacity > MINIMUM_HEAT_CAPACITY) && (self_heat_capacity > MINIMUM_HEAT_CAPACITY))
|
||||
var/heat = conduction_coefficient*delta_temperature* \
|
||||
(self_heat_capacity*model.heat_capacity/(self_heat_capacity+model.heat_capacity))
|
||||
|
||||
ASSERT(self_heat_capacity != 0) // Trying to solve a runtime error - Abi79
|
||||
ASSERT(group_multiplier != 0)
|
||||
if(border_multiplier)
|
||||
temperature -= heat*border_multiplier/(self_heat_capacity*group_multiplier)
|
||||
else
|
||||
|
||||
@@ -104,6 +104,7 @@ datum
|
||||
|
||||
var/current_cycle = 0
|
||||
var/update_delay = 5 //How long between check should it try to process atmos again.
|
||||
var/failed_ticks = 0 //How many ticks have runtimed?
|
||||
|
||||
|
||||
/* process()
|
||||
@@ -211,39 +212,52 @@ datum
|
||||
|
||||
set background = 1
|
||||
while(1)
|
||||
if(kill_air)
|
||||
return 1
|
||||
current_cycle++
|
||||
if(groups_to_rebuild.len > 0) //If there are groups to rebuild, do so.
|
||||
spawn process_rebuild_select_groups()
|
||||
if(!kill_air)
|
||||
current_cycle++
|
||||
var/success = tick() //Changed so that a runtime does not crash the ticker.
|
||||
if(!success) //Runtimed.
|
||||
failed_ticks++
|
||||
if(failed_ticks > 20)
|
||||
world << "<font size='4' color='red'>ERROR IN ATMOS TICKER. Killing air simulation!</font>"
|
||||
kill_air = 1
|
||||
sleep(max(5,update_delay*tick_multiplier))
|
||||
|
||||
if(tiles_to_update.len > 0) //If there are tiles to update, do so.
|
||||
for(var/turf/simulated/T in tiles_to_update)
|
||||
spawn T.update_air_properties()
|
||||
tiles_to_update = list()
|
||||
proc/tick()
|
||||
if(groups_to_rebuild.len > 0) //If there are groups to rebuild, do so.
|
||||
spawn process_rebuild_select_groups()
|
||||
|
||||
for(var/datum/air_group/AG in air_groups) //Processing groups
|
||||
if(tiles_to_update.len > 0) //If there are tiles to update, do so.
|
||||
for(var/turf/simulated/T in tiles_to_update)
|
||||
spawn T.update_air_properties()
|
||||
tiles_to_update = list()
|
||||
|
||||
for(var/datum/air_group/AG in air_groups) //Processing groups
|
||||
spawn
|
||||
if(AG) // Because of runtime errors on syphoning.
|
||||
AG.process_group()
|
||||
|
||||
for(var/turf/simulated/T in active_singletons) //Processing Singletons
|
||||
spawn
|
||||
if(istype(T))
|
||||
T.process_cell()
|
||||
else
|
||||
active_singletons.Remove(T)
|
||||
|
||||
for(var/turf/simulated/hot_potato in active_super_conductivity) //Process superconduction
|
||||
spawn hot_potato.super_conduct()
|
||||
|
||||
if(high_pressure_delta.len) //Process high pressure delta (airflow)
|
||||
for(var/turf/pressurized in high_pressure_delta)
|
||||
spawn pressurized.high_pressure_movements()
|
||||
high_pressure_delta = list()
|
||||
|
||||
if(current_cycle%10==5) //Check for groups of tiles to resume group processing every 10 cycles
|
||||
for(var/datum/air_group/AG in air_groups)
|
||||
spawn
|
||||
if(AG) // Because of runtime errors on syphoning.
|
||||
AG.process_group()
|
||||
AG.check_regroup()
|
||||
return 1
|
||||
|
||||
for(var/turf/simulated/T in active_singletons) //Processing Singletons
|
||||
spawn T.process_cell()
|
||||
|
||||
for(var/turf/simulated/hot_potato in active_super_conductivity) //Process superconduction
|
||||
spawn hot_potato.super_conduct()
|
||||
|
||||
if(high_pressure_delta.len) //Process high pressure delta (airflow)
|
||||
for(var/turf/pressurized in high_pressure_delta)
|
||||
spawn pressurized.high_pressure_movements()
|
||||
high_pressure_delta = list()
|
||||
|
||||
if(current_cycle%10==5) //Check for groups of tiles to resume group processing every 10 cycles
|
||||
for(var/datum/air_group/AG in air_groups)
|
||||
spawn
|
||||
if(AG) // Because of runtime errors on syphoning.
|
||||
AG.check_regroup()
|
||||
sleep(max(5,update_delay*tick_multiplier))
|
||||
|
||||
proc/process_rebuild_select_groups()
|
||||
//Purpose: This gets called to recalculate and rebuild group geometry
|
||||
|
||||
@@ -369,9 +369,10 @@ var/datum/cameranet/cameranet = new()
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/ai/switchCamera(var/obj/machinery/camera/C)
|
||||
eyeobj.loc = C.loc
|
||||
cameranet.visibility(eyeobj)
|
||||
return
|
||||
if(C && isturf(C.loc))
|
||||
eyeobj.loc = C.loc
|
||||
cameranet.visibility(eyeobj)
|
||||
return
|
||||
|
||||
/mob/living/silicon/ai/attack_ai(var/mob/user as mob)
|
||||
if (user != src)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
voice_name = "tajaran"
|
||||
icon = 'tajaran.dmi'
|
||||
icon_state = "m-none"
|
||||
var/list/tajspeak_letters
|
||||
var/list/tajspeak_letters = list("~","*","-")
|
||||
//
|
||||
universal_speak = 1 //hacky fix until someone can figure out how to make them only understand humans
|
||||
taj_talk_understand = 1
|
||||
@@ -12,8 +12,6 @@
|
||||
examine_text = "one of the cat-like Tajarans."
|
||||
|
||||
/mob/living/carbon/human/tajaran/New()
|
||||
tajspeak_letters = new/list("~","*","-")
|
||||
|
||||
var/g = "m"
|
||||
if (gender == FEMALE)
|
||||
g = "f"
|
||||
|
||||
@@ -380,23 +380,31 @@
|
||||
return "I couldn't find [name]'s PDA."
|
||||
|
||||
// send message
|
||||
pda.tnote += "<i><b>← From [eliza.callsign]:</b></i><br>[object]<br>"
|
||||
if(!istype(eliza.speaker.loc.loc, /obj/item/device/pda))//Looking if we are in a PDA
|
||||
pda.tnote += "<i><b>← From [eliza.callsign]:</b></i><br>[object]<br>"
|
||||
|
||||
if(prob(15) && eliza.speaker) //Give the AI a chance of intercepting the message
|
||||
var/who = eliza.speaker
|
||||
if(prob(50))
|
||||
who = "[eliza.speaker:master] via [eliza.speaker]"
|
||||
for(var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [object]</i>")
|
||||
if(prob(15) && eliza.speaker) //Give the AI a chance of intercepting the message
|
||||
var/who = eliza.speaker
|
||||
if(prob(50))
|
||||
who = "[eliza.speaker:master] via [eliza.speaker]"
|
||||
for(var/mob/living/silicon/ai/ai in world)
|
||||
ai.show_message("<i>Intercepted message from <b>[who]</b>: [object]</i>")
|
||||
|
||||
if (!pda.silent)
|
||||
playsound(pda.loc, 'twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, pda.loc))
|
||||
O.show_message(text("\icon[pda] *[pda.ttone]*"))
|
||||
|
||||
pda.overlays = null
|
||||
pda.overlays += image('pda.dmi', "pda-r")
|
||||
if (!pda.silent)
|
||||
playsound(pda.loc, 'twobeep.ogg', 50, 1)
|
||||
for (var/mob/O in hearers(3, pda.loc))
|
||||
O.show_message(text("\icon[pda] *[pda.ttone]*"))
|
||||
|
||||
pda.overlays = null
|
||||
pda.overlays += image('pda.dmi', "pda-r")
|
||||
else
|
||||
var/list/href_list = list()
|
||||
href_list["src"] = "\ref[eliza.speaker.loc.loc]"
|
||||
href_list["choice"] = "Message"
|
||||
href_list["target"] = "\ref[pda]"
|
||||
href_list["pAI_mess"] = "\"[object]\" \[Via pAI Unit\]"
|
||||
var/obj/item/device/pda/pda_im_in = eliza.speaker.loc.loc
|
||||
pda_im_in.Topic("src=\ref[eliza.speaker.loc.loc];choice=Message;target=\ref[pda];pAI_mess=\"[object] \[Via pAI Unit\]",href_list)
|
||||
return "Told [name], [object]."
|
||||
|
||||
/datum/text_parser/keyword/yes
|
||||
|
||||
@@ -620,16 +620,16 @@
|
||||
/obj/item/seeds/harebell
|
||||
name = "pack of harebell seeds"
|
||||
desc = "These seeds grow into pretty little flowers."
|
||||
icon_state = "seed"
|
||||
icon_state = "seed-harebell"
|
||||
mypath = "/obj/item/seeds/harebell"
|
||||
species = "harebell"
|
||||
plantname = "Harebells"
|
||||
productname = ""
|
||||
productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/harebell"
|
||||
lifespan = 100
|
||||
endurance = 20
|
||||
maturation = 7
|
||||
production = 1
|
||||
yield = -1
|
||||
yield = 2
|
||||
potency = 1
|
||||
oneharvest = 1
|
||||
growthstages = 4
|
||||
@@ -1058,6 +1058,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/poppy
|
||||
seed = "/obj/item/seeds/poppyseed"
|
||||
name = "poppy"
|
||||
desc = "Long-used as a symbol of rest, peace, and death."
|
||||
icon_state = "poppy"
|
||||
potency = 30
|
||||
New()
|
||||
@@ -1066,6 +1067,16 @@
|
||||
reagents.add_reagent("bicaridine", 1+round((potency / 10), 1))
|
||||
bitesize = 1+round(reagents.total_volume / 3, 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/harebell
|
||||
seed = "obj/item/seeds/harebellseed"
|
||||
name = "harebell"
|
||||
desc = "\"I'll sweeten thy sad grave: thou shalt not lack the flower that's like thy face, pale primrose, nor the azured hare-bell, like thy veins; no, nor the leaf of eglantine, whom not to slander, out-sweeten’d not thy breath.\""
|
||||
icon_state = "harebell"
|
||||
potency = 1
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
|
||||
bitesize = 1+round(reagents.total_volume / 3, 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/potato
|
||||
seed = "/obj/item/seeds/potatoseed"
|
||||
|
||||
@@ -741,7 +741,7 @@
|
||||
|
||||
/obj/item/weapon/extinguisher
|
||||
name = "fire extinguisher"
|
||||
desc = "Contains water for fighting fires."
|
||||
desc = "A traditional red fire extinguisher."
|
||||
icon = 'items.dmi'
|
||||
icon_state = "fire_extinguisher0"
|
||||
var/last_use = 1.0
|
||||
@@ -760,6 +760,7 @@
|
||||
name = "fire extinguisher"
|
||||
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
||||
icon_state = "miniFE0"
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags = FPRINT | USEDELAY | TABLEPASS
|
||||
throwforce = 5
|
||||
w_class = 2.0
|
||||
@@ -1511,6 +1512,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
desc = "You can drill using this item. You dig?"
|
||||
icon = 'surgery.dmi'
|
||||
icon_state = "drill"
|
||||
hitsound = 'circsawhit.ogg'
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 15.0
|
||||
w_class = 1.0
|
||||
@@ -1521,6 +1523,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
|
||||
desc = "For heavy duty cutting."
|
||||
icon = 'surgery.dmi'
|
||||
icon_state = "saw3"
|
||||
hitsound = 'circsawhit.ogg'
|
||||
flags = FPRINT | TABLEPASS | CONDUCT
|
||||
force = 15.0
|
||||
w_class = 1.0
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
del(usr)
|
||||
return
|
||||
|
||||
/*
|
||||
|
||||
/client/proc/changeling_greater_form() // Oh shit, it's on now.
|
||||
|
||||
set category = "Changeling"
|
||||
@@ -429,7 +429,7 @@
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
//animation = null
|
||||
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
|
||||
var/mob/living/carbon/human/O = new /mob/living/carbon/human( src )//Removed Emissary shit -Sieve{R}
|
||||
del(animation)
|
||||
|
||||
O.real_name = usr.real_name
|
||||
@@ -495,7 +495,7 @@
|
||||
new_objective.owner = O.mind
|
||||
O.mind.objectives += new_objective
|
||||
|
||||
spawn(0)
|
||||
/* spawn(0)
|
||||
while(emergency_shuttle.online == 0)
|
||||
sleep(10)
|
||||
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
|
||||
@@ -512,8 +512,8 @@
|
||||
sleep(10)
|
||||
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
|
||||
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
|
||||
Tarjan shit, not recoding this -Sieve{R}*/
|
||||
|
||||
*/
|
||||
/client/proc/changeling_fakedeath()
|
||||
set category = "Changeling"
|
||||
set name = "Regenerative Stasis (20)"
|
||||
|
||||
@@ -41,14 +41,14 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
verbpath = /client/proc/changeling_lesser_form
|
||||
|
||||
|
||||
|
||||
/*
|
||||
/obj/effect/proc_holder/power/changeling_greater_form
|
||||
name = "Greater Form"
|
||||
desc = "We become the pinnicle of evolution. We will show the humans what happens when they leave their isle of ignorance."
|
||||
genomecost = 250
|
||||
|
||||
// verbpath = /client/proc/changeling_greater_form
|
||||
|
||||
verbpath = /client/proc/changeling_greater_form
|
||||
*/
|
||||
/obj/effect/proc_holder/power/fakedeath
|
||||
name = "Fake Death"
|
||||
desc = "We fake our death while we heal."
|
||||
@@ -92,7 +92,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
/obj/effect/proc_holder/power/silence_sting
|
||||
name = "Silence Sting"
|
||||
desc = "We silently sting a human, completely silencing them for a short time."
|
||||
helptext = "Does not provide a warning to a victim that they've been stung, until they try to speak and can't." // Man, fuck javascript. ' == '
|
||||
helptext = "Does not provide a warning to a victim that they have been stung, until they try to speak and can not."
|
||||
genomecost = 2
|
||||
allowduringlesserform = 1
|
||||
|
||||
@@ -190,7 +190,7 @@ var/list/obj/effect/proc_holder/power/powerinstances = list()
|
||||
/obj/effect/proc_holder/power/LSDSting
|
||||
name = "Hallucination Sting"
|
||||
desc = "We evolve the ability to sting a target with a powerful hallunicationary chemical."
|
||||
helptext = "The target does not notice they've been stung. The effect occurs after 30 to 60 seconds."
|
||||
helptext = "The target does not notice they have been stung. The effect occurs after 30 to 60 seconds."
|
||||
genomecost = 3
|
||||
|
||||
verbpath = /client/proc/changeling_lsdsting
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
traitor.objectives += block_objective
|
||||
|
||||
else
|
||||
for(var/datum/objective/o in SelectObjectives((traitor.current:wear_id ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor))
|
||||
for(var/datum/objective/o in SelectObjectives((istype(traitor.current:wear_id, /obj/item/weapon/card/id) ? traitor.current:wear_id:assignment : traitor.assigned_role), traitor))
|
||||
o.owner = traitor
|
||||
traitor.objectives += o
|
||||
return
|
||||
@@ -238,7 +238,7 @@
|
||||
if (!R && traitor_mob.w_uniform && istype(traitor_mob.belt, /obj/item/device/radio))
|
||||
R = traitor_mob.belt
|
||||
loc = "on your belt"
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio) || prob(10))
|
||||
if (!R && istype(traitor_mob.l_ear, /obj/item/device/radio))
|
||||
R = traitor_mob.l_ear
|
||||
loc = "on your head"
|
||||
if (!R && istype(traitor_mob.r_ear, /obj/item/device/radio))
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
var/active = 0
|
||||
var/list/holographic_items = list()
|
||||
var/damaged = 0
|
||||
var/last_change = 0
|
||||
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
@@ -233,6 +234,15 @@
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
|
||||
|
||||
if(world.time < (last_change + 25))
|
||||
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
|
||||
return
|
||||
for(var/mob/M in range(3,src))
|
||||
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
|
||||
last_change = world.time
|
||||
return
|
||||
|
||||
last_change = world.time
|
||||
active = 1
|
||||
|
||||
for(var/item in holographic_items)
|
||||
|
||||
@@ -42,20 +42,34 @@
|
||||
dat += "<A HREF='?src=\ref[user];mach_close=op'>Close</A><br><br>" //| <A HREF='?src=\ref[user];update=1'>Update</A>"
|
||||
if(src.table && (src.table.check_victim()))
|
||||
src.victim = src.table.victim
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
if(istype(victim))
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Blood Type:</B> [(victim.dna? victim.dna.b_type : "ERROR")]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
else if(istype(victim, /mob/living))
|
||||
dat += {"
|
||||
<B>Patient Information:</B><BR>
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [src.victim.age]<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
<B>Toxins Damage:</B> [src.victim.getToxLoss()]<BR>
|
||||
<B>Fire Damage:</B> [src.victim.getFireLoss()]<BR>
|
||||
<B>Suffocation Damage:</B> [src.victim.getOxyLoss()]<BR>
|
||||
<B>Patient Status:</B> [src.victim.stat ? "Non-Responsive" : "Stable"]<BR>
|
||||
"}
|
||||
else
|
||||
src.victim = null
|
||||
dat += {"
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
if(istype(P, /obj/item/weapon/circuitboard) && !circuit)
|
||||
var/obj/item/weapon/circuitboard/B = P
|
||||
if(B.board_type == "computer")
|
||||
if(B.build_path != "")
|
||||
if(B.build_path != "" && !isnull(B.build_path))
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
user << "\blue You place the circuit board inside the frame."
|
||||
src.icon_state = "1"
|
||||
@@ -324,13 +324,14 @@
|
||||
if(istype(P, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||
user << "\blue You connect the monitor."
|
||||
var/B = new src.circuit.build_path ( src.loc )
|
||||
if(circuit.powernet) B:powernet = circuit.powernet
|
||||
if(circuit.id) B:id = circuit.id
|
||||
if(circuit.records) B:records = circuit.records
|
||||
if(circuit.frequency) B:frequency = circuit.frequency
|
||||
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||
var/obj/machinery/computer/supplycomp/SC = B
|
||||
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||
SC.can_order_contraband = C.contraband_enabled
|
||||
del(src)
|
||||
if(circuit && circuit.build_path)
|
||||
var/B = new circuit.build_path (loc)
|
||||
if(circuit.powernet) B:powernet = circuit.powernet
|
||||
if(circuit.id) B:id = circuit.id
|
||||
if(circuit.records) B:records = circuit.records
|
||||
if(circuit.frequency) B:frequency = circuit.frequency
|
||||
if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp))
|
||||
var/obj/machinery/computer/supplycomp/SC = B
|
||||
var/obj/item/weapon/circuitboard/supplycomp/C = circuit
|
||||
SC.can_order_contraband = C.contraband_enabled
|
||||
del(src)
|
||||
|
||||
@@ -1,87 +1,57 @@
|
||||
|
||||
/obj/structure/closet/extinguisher
|
||||
name = "extinguisher closet"
|
||||
name = "extinguisher cabinet"
|
||||
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
|
||||
icon_state = "extinguisher10"
|
||||
icon_opened = "extinguisher11"
|
||||
icon_closed = "extinguisher10"
|
||||
opened = 1
|
||||
icon = 'closet.dmi'
|
||||
icon_state = "extinguisher_closed"
|
||||
anchored = 1
|
||||
density = 0
|
||||
var/obj/item/weapon/extinguisher/EXTINGUISHER = new/obj/item/weapon/extinguisher
|
||||
var/localopened = 1
|
||||
var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher
|
||||
|
||||
open()
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
close()
|
||||
return
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if (isrobot(usr))
|
||||
return
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
if(!EXTINGUISHER)
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
EXTINGUISHER = O
|
||||
user << "\blue You place the extinguisher in the [src.name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
if (istype(O, /obj/item/weapon/extinguisher))
|
||||
if(!has_extinguisher && opened)
|
||||
user.drop_item(O)
|
||||
src.contents += O
|
||||
has_extinguisher = O
|
||||
user << "\blue You place the extinguisher in the [src.name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(localopened)
|
||||
if(EXTINGUISHER)
|
||||
user.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
user << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
localopened = !localopened
|
||||
|
||||
else
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/toggle_openness() //nice name, huh? HUH?!
|
||||
set name = "Open/Close"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
update_icon()
|
||||
|
||||
verb/remove_extinguisher()
|
||||
set name = "Remove Extinguisher"
|
||||
set category = "Object"
|
||||
|
||||
if (isrobot(usr))
|
||||
return
|
||||
|
||||
if (localopened)
|
||||
if(EXTINGUISHER)
|
||||
usr.put_in_hand(EXTINGUISHER)
|
||||
EXTINGUISHER = null
|
||||
usr << "\blue You take the extinguisher from the [name]."
|
||||
else
|
||||
usr << "\blue The [name] is empty."
|
||||
else
|
||||
usr << "\blue The [name] is closed."
|
||||
update_icon()
|
||||
|
||||
attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
return
|
||||
|
||||
opened = !opened
|
||||
else
|
||||
opened = !opened
|
||||
update_icon()
|
||||
var/hasextinguisher = 0
|
||||
if(EXTINGUISHER)
|
||||
hasextinguisher = 1
|
||||
icon_state = text("extinguisher[][]",hasextinguisher,src.localopened)
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_hand(mob/user as mob)
|
||||
if(has_extinguisher)
|
||||
user.put_in_hand(has_extinguisher)
|
||||
has_extinguisher = null
|
||||
user << "\blue You take the extinguisher from the [name]."
|
||||
opened = 1
|
||||
else
|
||||
opened = !opened
|
||||
update_icon()
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/attack_paw(mob/user as mob)
|
||||
attack_hand(user)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/extinguisher/update_icon()
|
||||
if(!opened)
|
||||
icon_state = "extinguisher_closed"
|
||||
return
|
||||
if(has_extinguisher)
|
||||
if(istype(has_extinguisher, /obj/item/weapon/extinguisher/mini))
|
||||
icon_state = "extinguisher_mini"
|
||||
else
|
||||
icon_state = "extinguisher_full"
|
||||
else
|
||||
icon_state = "extinguisher_empty"
|
||||
@@ -508,11 +508,15 @@
|
||||
U << browse(null, "window=pda")
|
||||
return
|
||||
if("Message")
|
||||
var/t = input(U, "Please enter message", name, null) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
var/t
|
||||
if(!href_list["pAI_mess"])
|
||||
t = input(U, "Please enter message", name, null) as text
|
||||
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
|
||||
else
|
||||
t = href_list["pAI_mess"]
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, U) && loc != U)
|
||||
if (!in_range(src, U) && loc != U && !href_list["pAI_mess"])
|
||||
return
|
||||
|
||||
var/obj/item/device/pda/P = locate(href_list["target"])
|
||||
@@ -705,7 +709,7 @@
|
||||
honkamt--
|
||||
playsound(loc, 'bikehorn.ogg', 30, 1)
|
||||
|
||||
if(U.machine == src)//Final safety.
|
||||
if(U.machine == src && !href_list["pAI_mess"])//Final safety.
|
||||
attack_self(U)//It auto-closes the menu prior if the user is not in range and so on.
|
||||
else
|
||||
U.machine = null
|
||||
|
||||
@@ -411,15 +411,16 @@ steam.start() -- spawns the effect
|
||||
var/obj/R = new /obj()
|
||||
R.reagents = new/datum/reagents(500)
|
||||
R.reagents.my_atom = R
|
||||
reagents.trans_to(R, reagents.total_volume/divisor)
|
||||
for(var/atom/A in view(1, src))
|
||||
if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve
|
||||
if(prob(5))
|
||||
if(reagents)
|
||||
reagents.trans_to(R, reagents.total_volume/divisor)
|
||||
for(var/atom/A in view(1, src))
|
||||
if(reagents.has_reagent("radium")||reagents.has_reagent("uranium")||reagents.has_reagent("carbon")||reagents.has_reagent("thermite"))//Prevents unholy radium spam by reducing the number of 'greenglows' down to something reasonable -Sieve
|
||||
if(prob(5))
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
else if(R && R.reagents)
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
else
|
||||
R.reagents.reaction(A)
|
||||
del(R)
|
||||
return
|
||||
|
||||
/obj/effect/effect/chem_smoke/HasEntered(mob/living/carbon/M as mob )
|
||||
|
||||
@@ -27,18 +27,17 @@ MEDICAL
|
||||
return 1
|
||||
|
||||
var/stoppedblood = 0
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/affecting = H.get_organ("chest")
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
user.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -69,7 +68,7 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
@@ -146,18 +145,17 @@ MEDICAL
|
||||
return 1
|
||||
|
||||
var/stoppedblood = 0
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/affecting = H.get_organ("chest")
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user2 = user
|
||||
affecting = H.get_organ(check_zone(user2.zone_sel.selecting))
|
||||
affecting = M:get_organ(check_zone(user2.zone_sel.selecting))
|
||||
else
|
||||
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
|
||||
affecting = H.get_organ("head")
|
||||
affecting = M:get_organ("head")
|
||||
if(affecting.destroyed && !affecting.gauzed)
|
||||
H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
M.visible_message("\red You do your best to stop the bleeding from [M]'s stump.", "\red [user] does their best to stem [M]'s bleeding from [M.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
|
||||
affecting.gauzed = 1
|
||||
use(1)
|
||||
return
|
||||
@@ -179,7 +177,7 @@ MEDICAL
|
||||
|
||||
if (user && stoppedblood)
|
||||
if (M != user)
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [H]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] [M]'s [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else
|
||||
user.visible_message("\red [user] [heal_burn? "salves" : "bandages"] [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src].", "\red You [heal_burn? "salve" : "bandage up"] [stoppedblood - 1 ? "some of" : "the last of"] your [heal_burn? "burns" : "wounds"].", "\red You hear something like gauze being ripped.")
|
||||
else if(user)
|
||||
|
||||
@@ -263,6 +263,9 @@ WELDINGTOOOL
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
if(hasorgans(M))
|
||||
var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
|
||||
if(S)
|
||||
message_admins("It appears [M] has \"null\" where there should be a [user.zone_sel.selecting]. Check into this, and tell SkyMarshal: \"[M.type]\"")
|
||||
return ..()
|
||||
if(!S.robot || user.a_intent != "help")
|
||||
return ..()
|
||||
if(S.brute_dam)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
src.attack_ai(usr)
|
||||
|
||||
// check for TK users
|
||||
AutoUpdateTK(src)
|
||||
//AutoUpdateTK(src)
|
||||
if (istype(usr, /mob/living/carbon/human))
|
||||
if(istype(usr.l_hand, /obj/item/tk_grab) || istype(usr.r_hand, /obj/item/tk_grab/))
|
||||
if(!(usr in nearby))
|
||||
|
||||
@@ -83,6 +83,9 @@ SHARDS
|
||||
if("full (2 sheets)")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
@@ -142,6 +145,9 @@ SHARDS
|
||||
if("full (2 sheets)")
|
||||
if(!src) return 1
|
||||
if(src.loc != user) return 1
|
||||
if(src.amount < 2)
|
||||
user << "\red You need more glass to do that."
|
||||
return 1
|
||||
if(locate(/obj/structure/window) in user.loc)
|
||||
user << "\red There is a window in the way."
|
||||
return 1
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
s["ai"] = config.allow_ai
|
||||
s["host"] = host ? host : null
|
||||
s["players"] = list()
|
||||
s["admins"] = 0
|
||||
var/admins = 0
|
||||
var/n = 0
|
||||
|
||||
for(var/client/C)
|
||||
@@ -30,6 +28,5 @@
|
||||
s["end"] = "#end"
|
||||
|
||||
// 7 + s["players"] + 1 = index of s["revinfo"]
|
||||
s["admins"] = admins
|
||||
|
||||
return list2params(s)
|
||||
|
||||
@@ -353,51 +353,52 @@ obj/machinery/computer/forensic_scanning
|
||||
scan_data = null
|
||||
updateDialog()
|
||||
return
|
||||
scan_process = 0
|
||||
scan_name = scanning.name
|
||||
scan_data = "<u>[scanning]</u><br><br>"
|
||||
if (scanning.blood_DNA)
|
||||
scan_data += "Blood Found:<br>"
|
||||
for(var/blood in scanning.blood_DNA)
|
||||
scan_data += "Blood type: [scanning.blood_DNA[blood]]\nDNA: [blood]<br><br>"
|
||||
else
|
||||
scan_data += "No Blood Found<br><br>"
|
||||
if(!scanning.fingerprints)
|
||||
scan_data += "No Fingerprints Found<br><br>"
|
||||
else
|
||||
var/list/L = scanning.fingerprints
|
||||
scan_data += "Isolated [L.len] Fingerprints. Loaded into database.<br>"
|
||||
add_data(scanning)
|
||||
if(scanning)
|
||||
scan_process = 0
|
||||
scan_name = scanning.name
|
||||
scan_data = "<u>[scanning]</u><br><br>"
|
||||
if (scanning.blood_DNA)
|
||||
scan_data += "Blood Found:<br>"
|
||||
for(var/blood in scanning.blood_DNA)
|
||||
scan_data += "Blood type: [scanning.blood_DNA[blood]]\nDNA: [blood]<br><br>"
|
||||
else
|
||||
scan_data += "No Blood Found<br><br>"
|
||||
if(!scanning.fingerprints)
|
||||
scan_data += "No Fingerprints Found<br><br>"
|
||||
else
|
||||
var/list/L = scanning.fingerprints
|
||||
scan_data += "Isolated [L.len] Fingerprints. Loaded into database.<br>"
|
||||
add_data(scanning)
|
||||
|
||||
if(!scanning.suit_fibers)
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
for(var/data in scanner.stored_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"
|
||||
else*/
|
||||
scan_data += "No Fibers/Materials Located<br>"
|
||||
else
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
for(var/data in scanner.stored_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"*/
|
||||
if(!scanning.suit_fibers)
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
for(var/data in scanner.stored_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"
|
||||
else*/
|
||||
scan_data += "No Fibers/Materials Located<br>"
|
||||
else
|
||||
/*if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
var/obj/item/device/detective_scanner/scanner = scanning
|
||||
if(scanner.stored_name)
|
||||
scan_data += "Fibers/Materials Data - [scanner.stored_name]:<br>"
|
||||
for(var/data in scanner.stored_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
else
|
||||
scan_data += "No Fibers/Materials Data<br>"*/
|
||||
|
||||
scan_data += "Fibers/Materials Found:<br>"
|
||||
for(var/data in scanning.suit_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
|
||||
add_data_scanner(scanning)
|
||||
else if(!scanning.fingerprints)
|
||||
scan_data += "<br><b><a href='?src=\ref[src];operation=add'>Add to Database?</a></b><br>"
|
||||
scan_data += "Fibers/Materials Found:<br>"
|
||||
for(var/data in scanning.suit_fibers)
|
||||
scan_data += "- [data]<br>"
|
||||
if(istype(scanning,/obj/item/device/detective_scanner))
|
||||
scan_data += "<br><b>Data transfered from Scanner to Database.</b><br>"
|
||||
add_data_scanner(scanning)
|
||||
else if(!scanning.fingerprints)
|
||||
scan_data += "<br><b><a href='?src=\ref[src];operation=add'>Add to Database?</a></b><br>"
|
||||
else
|
||||
temp = "Scan Failed: No Object"
|
||||
|
||||
@@ -467,7 +468,7 @@ obj/machinery/computer/forensic_scanning
|
||||
if(!blood[main_blood])
|
||||
blood[main_blood] = atom_blood_DNA[blood]
|
||||
return 1
|
||||
var/list/templist[2]
|
||||
var/list/templist[3]
|
||||
templist[1] = atom_suit_fibers
|
||||
templist[2] = atom_blood_DNA
|
||||
templist[3] = atom_name
|
||||
|
||||
@@ -210,6 +210,7 @@
|
||||
verbs += /obj/admins/proc/adspawn //toggle admin item spawning
|
||||
verbs += /client/proc/debug_variables
|
||||
verbs += /client/proc/cmd_modify_ticker_variables
|
||||
verbs += /client/proc/cmd_modify_ref_variables
|
||||
verbs += /client/proc/Debug2 //debug toggle switch
|
||||
verbs += /client/proc/toggle_view_range
|
||||
verbs += /client/proc/Getmob
|
||||
@@ -432,6 +433,7 @@
|
||||
verbs -= /client/proc/radioalert
|
||||
verbs -= /client/proc/rnd_check_designs
|
||||
verbs -= /client/proc/CarbonCopy
|
||||
verbs -= /client/proc/cmd_modify_ref_variables
|
||||
verbs -= /proc/possess
|
||||
verbs -= /proc/release
|
||||
//verbs -= /client/proc/give_spell --Merged with view variables
|
||||
|
||||
@@ -11,6 +11,17 @@ var/list/forbidden_varedit_object_types = list(
|
||||
src.modify_variables(O)
|
||||
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_modify_ref_variables(var/target as text)
|
||||
set category = "Debug"
|
||||
set name = "Edit Variables (Reference)"
|
||||
set desc="(target) Edit a target item's variables"
|
||||
var/obj/I = locate(target)
|
||||
if(!I)
|
||||
usr << "ERROR: Object could not be located!"
|
||||
return
|
||||
src.modify_variables(I)
|
||||
//feedback_add_details("admin_verb","EDITV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_modify_ticker_variables()
|
||||
set category = "Debug"
|
||||
set name = "Edit Ticker Variables"
|
||||
|
||||
@@ -102,7 +102,9 @@ datum
|
||||
reagent_state = LIQUID
|
||||
color = "#C80000" // rgb: 200, 0, 0
|
||||
on_mob_life(var/mob/living/M)
|
||||
if(istype(M, /mob/living/carbon/human) && blood_incompatible(data["blood_type"],M.dna.b_type))
|
||||
if(!data || !data["blood_type"])
|
||||
..()
|
||||
else if(istype(M, /mob/living/carbon/human) && blood_incompatible(data["blood_type"],M.dna.b_type))
|
||||
M.adjustToxLoss(rand(0.5,1.5))
|
||||
M.adjustOxyLoss(rand(1,1.5))
|
||||
..()
|
||||
@@ -3111,98 +3113,98 @@ datum
|
||||
description = "A spicy Vodka! Might be a little hot for the little guys!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 360)
|
||||
M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
|
||||
return
|
||||
|
||||
|
||||
devilskiss
|
||||
name = "Devils Kiss"
|
||||
id = "devilskiss"
|
||||
description = "Creepy time!"
|
||||
reagent_state = LIQUID
|
||||
color = "#A68310" // rgb: 166, 131, 16
|
||||
|
||||
|
||||
red_mead
|
||||
name = "Red Mead"
|
||||
id = "red_mead"
|
||||
description = "The true Viking drink! Even though it has a strange red color."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
mead
|
||||
name = "Mead"
|
||||
id = "mead"
|
||||
description = "A Vikings drink, though a cheap one."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
iced_beer
|
||||
name = "Iced Beer"
|
||||
id = "iced_beer"
|
||||
description = "A beer which is so cold the air around it freezes."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if (M.bodytemperature < 270)
|
||||
M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
|
||||
return
|
||||
|
||||
|
||||
grog
|
||||
name = "Grog"
|
||||
id = "grog"
|
||||
description = "Watered down rum, NanoTrasen approves!"
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
aloe
|
||||
name = "Aloe"
|
||||
id = "aloe"
|
||||
description = "So very, very, very good."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
andalusia
|
||||
name = "Andalusia"
|
||||
id = "andalusia"
|
||||
description = "A nice, strange named drink."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
id = "alliescocktail"
|
||||
description = "A drink made from your allies."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
acid_spit
|
||||
name = "Acid Spit"
|
||||
id = "acidspit"
|
||||
description = "A drink by Nanotrasen. Made from live aliens."
|
||||
reagent_state = LIQUID
|
||||
color = "#365000" // rgb: 54, 80, 0
|
||||
|
||||
|
||||
amasec
|
||||
name = "Amasec"
|
||||
id = "amasec"
|
||||
description = "Official drink of the Imperium."
|
||||
reagent_state = LIQUID
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.stunned = 4
|
||||
return
|
||||
|
||||
|
||||
neurotoxin
|
||||
name = "Neurotoxin"
|
||||
id = "neurotoxin"
|
||||
description = "A strong neurotoxin that puts the subject into a death-like state."
|
||||
reagent_state = LIQUID
|
||||
color = "#2E2E61" // rgb: 46, 46, 97
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M:adjustOxyLoss(0.5)
|
||||
@@ -3224,14 +3226,14 @@ datum
|
||||
description = "A drink from Mime Heaven."
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
|
||||
changelingsting
|
||||
name = "Changeling Sting"
|
||||
id = "changelingsting"
|
||||
description = "A stingy drink."
|
||||
reagent_state = LIQUID
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!data) data = 1
|
||||
data++
|
||||
@@ -3243,14 +3245,14 @@ datum
|
||||
M.confused = max(M:confused+15,15)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
irishcarbomb
|
||||
name = "Irish Car Bomb"
|
||||
id = "irishcarbomb"
|
||||
description = "Mmm, tastes like chocolate cake..."
|
||||
reagent_state = LIQUID
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!data) data = 1
|
||||
data++
|
||||
@@ -3262,14 +3264,14 @@ datum
|
||||
M.confused = max(M:confused+15,15)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
id = "syndicatebomb"
|
||||
description = "A Syndicate bomb"
|
||||
reagent_state = LIQUID
|
||||
color = "#2E6671" // rgb: 46, 102, 113
|
||||
|
||||
|
||||
erikasurprise
|
||||
name = "Erika Surprise"
|
||||
id = "erikasurprise"
|
||||
@@ -3416,4 +3418,4 @@ datum
|
||||
holder.remove_reagent(src.id, 0.2)
|
||||
data++
|
||||
..()
|
||||
return
|
||||
return
|
||||
|
||||
@@ -116,6 +116,7 @@
|
||||
item_state = "syndicate"
|
||||
see_face = 0.0
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
|
||||
/obj/item/clothing/head/chaplain_hood
|
||||
name = "chaplain's hood"
|
||||
@@ -142,4 +143,5 @@
|
||||
item_state = "cardborg_h"
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
see_face = 0.0
|
||||
armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 0, rad = 0)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
|
||||
@@ -32,8 +32,6 @@
|
||||
item_state = "thunderdome"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/welding
|
||||
name = "welding helmet"
|
||||
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/obj/item/clothing/head/bomb_hood
|
||||
name = "bomb hood"
|
||||
desc = "Use in case of bomb."
|
||||
desc = "A hood that protect from explosions. Also provides moderate protection."
|
||||
icon_state = "bombsuit"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
|
||||
/obj/item/clothing/suit/bomb_suit
|
||||
name = "bomb suit"
|
||||
desc = "A suit designed for safety when handling explosives."
|
||||
desc = "A suit used for safely disposing explosives. Also provides moderate protection."
|
||||
icon_state = "bombsuit"
|
||||
item_state = "bombsuit"
|
||||
w_class = 4//bulky item
|
||||
@@ -17,8 +17,8 @@
|
||||
heat_transfer_coefficient = 0.30
|
||||
flags = FPRINT | TABLEPASS
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
slowdown = 2
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
|
||||
slowdown = 3.5 //To compensate for the extra armour.
|
||||
armor = list(melee = 10, bullet = 10, laser = 10, energy = 10, bomb = 100, bio = 0, rad = 0)
|
||||
flags_inv = HIDEJUMPSUIT
|
||||
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/clothing/suit/bluetag
|
||||
name = "blue laser tag armour"
|
||||
desc = "Blue Pride, Station Wide"
|
||||
icon_state = "bluetag"
|
||||
item_state = "bluetag"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/redtag
|
||||
name = "red laser tag armour"
|
||||
@@ -30,6 +30,7 @@
|
||||
icon_state = "redtag"
|
||||
item_state = "redtag"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
|
||||
|
||||
|
||||
/obj/item/clothing/suit/storage/apron
|
||||
|
||||
@@ -46,6 +46,12 @@
|
||||
icon_state = "steve_johnson_1"
|
||||
item_state = "steve_johnson_1"
|
||||
|
||||
/obj/item/fluff/david_fanning_1 //sicktrigger: David Fanning
|
||||
name = "golden scalpel"
|
||||
desc = "A fine surgical cutting tool covered in thin gold leaf. Does not seem able to cut anything."
|
||||
icon_state = "david_fanning_1"
|
||||
item_state = "david_fanning_1"
|
||||
|
||||
//////////////////////////////////
|
||||
////////// Usable Items //////////
|
||||
//////////////////////////////////
|
||||
@@ -118,13 +124,19 @@
|
||||
icon_state = "orangecamera"
|
||||
pictures_left = 30
|
||||
|
||||
|
||||
/obj/item/weapon/card/id/fluff/lifetime //fastler: Fastler Greay; it seemed like something multiple people would have
|
||||
name = "Lifetime ID Card"
|
||||
desc = "A modified ID card given only to those people who have devoted their lives to the better interests of NanoTrasen. It sparkles blue."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "lifetimeid"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask //lexusjjss: Lexus Langg & Zachary Tomlinson
|
||||
name = "shiny flask"
|
||||
desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "shinyflask"
|
||||
volume = 50
|
||||
|
||||
//////////////////////////////////
|
||||
//////////// Clothing ////////////
|
||||
//////////////////////////////////
|
||||
@@ -176,6 +188,13 @@
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "taryn_kifer_1"
|
||||
|
||||
/obj/item/clothing/head/fluff/enos_adlai_1 //roaper: Enos Adlai
|
||||
name = "comfy cap"
|
||||
desc = "Because when you're the toughest Mother Hubbard on the station, nobody's criticizing your fashion sense."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "enos_adlai_1"
|
||||
flags = FPRINT|TABLEPASS
|
||||
|
||||
//////////// Suits ////////////
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/fluff/pink //spaceman96: Trenna Seber
|
||||
|
||||
@@ -477,28 +477,21 @@
|
||||
proc/start_close()
|
||||
if(parent.robot)
|
||||
return
|
||||
sleep(rand(1800,3000)) //3-5 minutes
|
||||
if(prob(50) && wound_size == 1)
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(33) && wound_size < 3)
|
||||
stopbleeding()
|
||||
return
|
||||
sleep(rand(1800,3000))
|
||||
if(wound_size == 1) //Small cuts heal in 6-10 minutes.
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(50) && wound_size < 5 && bleeding)
|
||||
stopbleeding()
|
||||
return
|
||||
if(wound_size < 5 && bleeding) //Give it a chance to stop bleeding on it's own.
|
||||
spawn while(1)
|
||||
sleep(1200)
|
||||
if(prob(50))
|
||||
stopbleeding()
|
||||
return
|
||||
spawn(rand(1800,3000)) //3-5 minutes
|
||||
if(prob(50) && wound_size == 1)
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(33) && wound_size < 3)
|
||||
stopbleeding()
|
||||
else
|
||||
spawn(rand(1800,3000))
|
||||
if(wound_size == 1) //Small cuts heal in 6-10 minutes.
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(50) && wound_size < 3 && bleeding)
|
||||
stopbleeding()
|
||||
return
|
||||
|
||||
proc/stopbleeding(var/bleed = 0)
|
||||
@@ -518,60 +511,60 @@
|
||||
return 1
|
||||
|
||||
proc/become_scar()
|
||||
if(parent.robot)
|
||||
if(parent.robot || healing_state)
|
||||
return
|
||||
healing_state = 1 //Patched
|
||||
spawn(200*slowheal) //~20-60 seconds
|
||||
update_health(5) //Heals some.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
spawn(rand(180,300)*slowheal) //18-30 second
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 2) //Small cuts heal.
|
||||
update_health(1)
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 2) //Small cuts heal.
|
||||
update_health(1)
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
|
||||
healing_state = 2 //Noticibly healing.
|
||||
update_health(2) //Heals more.
|
||||
healing_state = 2 //Noticibly healing.
|
||||
update_health(2) //Heals more.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(60) && wound_size < 3) //Cuts heal up
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 3 //Angry red scar
|
||||
update_health(1) //Heals the rest of the way.
|
||||
spawn(rand(1200,1800)*slowheal) //2-3 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(60) && wound_size < 3) //Cuts heal up
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 3 //Angry red scar
|
||||
update_health(1) //Heals the rest of the way.
|
||||
|
||||
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 4) //Minor wounds heal up fully.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 4 //Scar
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(30) || wound_size < 4 || wound_type == 1) //Small chance for the scar to disappear, any small remaining wounds deleted.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 5 //Faded scar
|
||||
spawn(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 4) //Minor wounds heal up fully.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 4 //Scar.
|
||||
|
||||
spawn(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(30) || wound_size < 4 || wound_type == 1) //Small chance for the scar to disappear, any small remaining wounds deleted.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 5 //Faded scar
|
||||
return
|
||||
|
||||
proc/update_health(var/percent = 1)
|
||||
@@ -584,6 +577,9 @@
|
||||
parent.brute_dam = max(parent.brute_dam - (initial_dmg - damage),0)
|
||||
initial_dmg = damage //reset it for further updates.
|
||||
parent.owner.updatehealth()
|
||||
if(percent == 1 && wound_type == 1)
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/weapon/gun/energy/laser
|
||||
name = "laser gun"
|
||||
desc = "a basic weapon designed kill with concentrated energy bolts"
|
||||
desc = "A basic weapon designed kill with concentrated energy bolts."
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
item_state = "laser100"
|
||||
fire_sound = 'Laser.ogg'
|
||||
w_class = 3.0
|
||||
m_amt = 2000
|
||||
@@ -23,8 +23,9 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/captain
|
||||
icon_state = "caplaser"
|
||||
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
|
||||
icon_state = "caplaser"
|
||||
item_state = "laser"
|
||||
force = 10
|
||||
origin_tech = null
|
||||
var/charge_tick = 0
|
||||
@@ -71,6 +72,7 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
name = "laser cannon"
|
||||
desc = "With the L.A.S.E.R. cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
icon_state = "lasercannon"
|
||||
item_state = "laser100"
|
||||
fire_sound = 'lasercannonfire.ogg'
|
||||
origin_tech = "combat=4;materials=3;powerstorage=3"
|
||||
projectile_type = "/obj/item/projectile/beam/heavylaser"
|
||||
@@ -86,6 +88,8 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
icon_state = "bluetag"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
projectile_type = "/obj/item/projectile/bluetag"
|
||||
origin_tech = "combat=1;magnets=2"
|
||||
var/charge_tick = 0
|
||||
|
||||
special_check(var/mob/living/carbon/human/M)
|
||||
if(ishuman(M))
|
||||
@@ -93,8 +97,6 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
return 1
|
||||
M << "\red You need to be wearing your laser tag vest!"
|
||||
return 0
|
||||
var/charge_tick = 0
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
@@ -122,6 +124,7 @@ obj/item/weapon/gun/energy/laser/retro
|
||||
icon_state = "redtag"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
projectile_type = "/obj/item/projectile/redtag"
|
||||
origin_tech = "combat=1;magnets=2"
|
||||
var/charge_tick = 0
|
||||
|
||||
special_check(var/mob/living/carbon/human/M)
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
origin_tech = "combat=3;materials=5;powerstorage=3"
|
||||
var/lightfail = 0
|
||||
icon_state = "nucgun"
|
||||
item_state = "nucgun100"
|
||||
var/charge_tick = 0
|
||||
|
||||
New()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
name = "\improper Pulse Rifle"
|
||||
desc = "A heavy-duty, pulse-based energy weapon, preferred by front-line combat personnel."
|
||||
icon_state = "pulse"
|
||||
item_state = "pulse100"
|
||||
force = 10
|
||||
fire_sound = 'pulse.ogg'
|
||||
charge_cost = 200
|
||||
@@ -50,6 +51,7 @@
|
||||
name = "\improper M1911-P"
|
||||
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
|
||||
icon_state = "m1911-p"
|
||||
item_state = "gun"
|
||||
cell_type = "/obj/item/weapon/cell/infinite"
|
||||
|
||||
|
||||
|
||||
@@ -173,6 +173,8 @@
|
||||
fired()
|
||||
var/turf/curloc = get_turf(src)
|
||||
var/turf/targloc = get_turf(target)
|
||||
if(!curloc || !targloc)
|
||||
return 0
|
||||
yo = targloc.y - curloc.y
|
||||
xo = targloc.x - curloc.x
|
||||
target = targloc
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
Create a databse at the same location where the server MySQL databse is. (as defined in config/dbconfig.txt under ADDRESS and PORT) It can be a separate database or the same one, as you wish. Create the following table in it: (name needs to remain as 'erro_feedback')
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `erro_feedback` (
|
||||
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
|
||||
`time` datetime NOT NULL,
|
||||
|
||||
`round_id` int(8) NOT NULL,
|
||||
|
||||
`var_name` varchar(32) NOT NULL,
|
||||
|
||||
`var_value` int(16) DEFAULT NULL,
|
||||
|
||||
`details` text,
|
||||
|
||||
PRIMARY KEY (`id`)
|
||||
|
||||
);
|
||||
|
||||
|
||||
|
||||
Open the file config/dbconfig.txt and edit the following lines:
|
||||
|
||||
FEEDBACK_DATABASE test
|
||||
|
||||
FEEDBACK_LOGIN mylogin
|
||||
|
||||
FEEDBACK_PASSWORD mypassword
|
||||
@@ -3,28 +3,31 @@ atomicdog92: Seth Sealis: /obj/item/clothing/suit/storage/det_suit/fluff/leather
|
||||
chinsky: Victor Kaminski: /obj/item/fluff/victor_kaminsky_1
|
||||
chinsky: Summer Springfield: /obj/item/weapon/camera_test/fluff/orange
|
||||
compactninja: Ysyr Rylias: /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen
|
||||
desiderium: Momiji Inubashiri: /obj/item/clothing/under/fluff/olddressuniform
|
||||
desiderium: Rook Maudlin: /obj/item/clothing/suit/storage/det_suit/fluff/retpolcoat, /obj/item/clothing/head/det_hat/fluff/retpolcap, /obj/item/clothing/under/det/fluff/retpoluniform
|
||||
deusdactyl: Greg Anderson: /obj/item/clothing/head/helmet/hardhat/fluff/greg_anderson_1
|
||||
deusdactyl: Roger Wiles: /obj/item/clothing/under/rank/virologist/fluff/cdc_jumpsuit, /obj/item/clothing/suit/storage/labcoat/fluff/cdc_labcoat
|
||||
deusdactyl: James Girard: /obj/item/clothing/head/secsoft/fluff/swatcap
|
||||
eternal248: Maximilian Haynes: /obj/item/weapon/paper/certificate
|
||||
erthilo: Farah Lants: /obj/item/clothing/under/rank/medical/fluff/short, /obj/item/clothing/suit/storage/labcoat/fluff/red
|
||||
fastler: Fastler Greay: /obj/item/weapon/card/id/fluff/lifetime
|
||||
fniff: Sarah Calvera: /obj/item/fluff/sarah_calvera_1
|
||||
fniff: Angleo Wilkerson: /obj/item/fluff/angelo_wilkerson_1
|
||||
gvazdas: Sarah Carbrokes: /obj/item/fluff/sarah_carbrokes_1
|
||||
leonheart11: Johann Erzatz: /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/johann_erzatz_1
|
||||
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote
|
||||
lexusjjss: Zachary Tomlinson: /obj/item/weapon/clipboard/fluff/smallnote
|
||||
lexusjjss: Lexus Langg: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
||||
lexusjjss: Zachary Tomlinson: /obj/item/weapon/clipboard/fluff/smallnote, /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/shinyflask
|
||||
madmalicemccrea: Alice McCrea: /obj/item/clothing/head/helmet/welding/fluff/alice_mccrea_1
|
||||
mangled: Li Tsun: /obj/item/weapon/lighter/zippo/fluff/li_tsun_1
|
||||
misterfox: Rashid Siraj: /obj/item/weapon/storage/bible/tajaran
|
||||
morrinn: Maye Day: /obj/item/weapon/storage/fluff/maye_daye_1
|
||||
orangebottle: Lillian Levett: /obj/item/weapon/pen/fluff/fancypen
|
||||
orangebottle: Lilliana Reade: /obj/item/weapon/pen/fluff/fancypen
|
||||
fniff: Sarah Calvera: /obj/item/fluff/sarah_calvera_1
|
||||
fniff: Angleo Wilkerson: /obj/item/fluff/angelo_wilkerson_1
|
||||
desiderium: Momiji Inubashiri: /obj/item/clothing/under/fluff/olddressuniform
|
||||
desiderium: Rook Maudlin: /obj/item/clothing/suit/storage/det_suit/fluff/retpolcoat, /obj/item/clothing/head/det_hat/fluff/retpolcap, /obj/item/clothing/under/det/fluff/retpoluniform
|
||||
roaper: Enos Adlai: /obj/item/clothing/head/fluff/enos_adlai_1
|
||||
searif: Yuki Matsuda: /obj/item/clothing/under/fluff/jumpsuitdown, /obj/item/clothing/head/helmet/welding/fluff/yuki_matsuda_1
|
||||
searif: Tsiokeriio Tarbell: /obj/item/clothing/mask/fluff/flagmask
|
||||
serithi: Serithi Artalis: /obj/item/clothing/glasses/fluff/serithi_artalis_1, /obj/item/clothing/shoes/fluff/leatherboots
|
||||
sicktrigger: David Fanning: /obj/item/fluff/david_fanning_1
|
||||
silentthunder: Val McNeil: /obj/item/fluff/val_mcneil_1
|
||||
spaceman96: Trenna Seber: /obj/item/weapon/pen/fluff/multi, /obj/item/clothing/suit/storage/labcoat/fluff/pink
|
||||
sparklysheep: Cado Keppel: /obj/item/weapon/fluff/cado_keppel_1
|
||||
@@ -34,5 +37,4 @@ thebreadbocks: Steve Johnson: /obj/item/fluff/steve_johnson_1
|
||||
themij: Taryn Kifer: /obj/item/clothing/head/helmet/greenbandana/fluff/taryn_kifer_1
|
||||
tzefa: Wes Solari: /obj/item/fluff/wes_solari_1
|
||||
vinceluk: Seth Sealis: /obj/item/clothing/suit/storage/det_suit/fluff/graycoat
|
||||
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
|
||||
fastler: Fastler Greay: /obj/item/weapon/card/id/fluff/lifetimeid
|
||||
whitellama: Ethan Way: /obj/item/fluff/ethan_way_1
|
||||
@@ -1,11 +1,9 @@
|
||||
<h1>Welcome to Space Station 13!</h1>
|
||||
<h1>Welcome to Baystation 12!</h1>
|
||||
|
||||
<i>This server is running Baystation 12's modification of the /tg/station13 code.</i>
|
||||
<i>This server is running <a href="http://baystation12.net/">Baystation 12's</a> modification of the <a href="http://nanotrasen.com/">/tg/station13</a> code.</i>
|
||||
<br><br>
|
||||
<strong>Bugtracker:</strong> <a href="https://github.com/Baystation12/Baystation12/issues">https://github.com/Baystation12/Baystation12/issues</a>
|
||||
<br>
|
||||
<strong>Changelog:</strong> <a href="http://baystation12.net/wiki/index.php/Changelog">http://baystation12.net/wiki/index.php/Changelog</a> or the Changelog command.
|
||||
<br>
|
||||
<strong>Rules:</strong> <a href="http://baystation12.net/wiki/index.php/Rules">http://baystation12.net/wiki/index.php/Rules</a> or the Rules command.
|
||||
<strong>Rules and Roleplaying Tips:</strong> <a href="http://baystation12.net/wiki/index.php/Rules">http://baystation12.net/wiki/index.php/Rules</a> or the Rules command.
|
||||
<br><br>
|
||||
By playing you agree to read and abide by the rules!
|
||||
This is a roleplaying server, so don't forget to remain in character when not in OOC. By playing you agree to have read and abide by the rules!
|
||||
@@ -47,6 +47,17 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
should be listed in the changelog upon commit though. Thanks. -->
|
||||
|
||||
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">13 May 2012</h2>
|
||||
<h3 class="author">TG updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Harebells can now be harvested.</li>
|
||||
<li class="imageadd">New sprites for mass-spectrometers and advanced mass-spectrometers.</li>
|
||||
<li class="imageadd">New sprites for the SMES. Credit to Flashkirby99!</li>
|
||||
<li class="soundadd">New sound effects for circular saws and surgical drills.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">10 May 2012</h2>
|
||||
<h3 class="author">Erthilo updated:</h3>
|
||||
|
||||
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 125 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 253 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -22,15 +22,14 @@
|
||||
"v" = (/obj/item/brain,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"w" = (/obj/item/weapon/gun/energy/laser/captain,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"x" = (/obj/item/weapon/gun/projectile/deagle/gold,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"y" = (/obj/item/weapon/sord,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"z" = (/obj/item/weapon/gun/energy/lasercannon,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"A" = (/obj/item/weapon/gun/energy/crossbow/largecrossbow,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"B" = (/obj/item/weapon/gun/energy/pulse_rifle/destroyer,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"C" = (/obj/item/toy/spinningtoy,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"D" = (/obj/item/weapon/card/id/centcom,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"E" = (/obj/item/weapon/gun/grenadelauncher,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"F" = (/obj/item/weapon/chemsprayer,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"G" = (/obj/machinery/turret{dir = 8; lasers = 1; name = "Angry Turret"},/obj/machinery/light,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"y" = (/obj/item/weapon/gun/energy/lasercannon,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"z" = (/obj/item/weapon/gun/energy/crossbow/largecrossbow,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"A" = (/obj/item/weapon/gun/energy/pulse_rifle/destroyer,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"B" = (/obj/item/toy/spinningtoy,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"C" = (/obj/item/weapon/card/id/centcom,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"D" = (/obj/item/weapon/gun/grenadelauncher,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"E" = (/obj/item/weapon/chemsprayer,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
"F" = (/obj/machinery/turret{dir = 8; lasers = 1; name = "Angry Turret"},/obj/machinery/light,/turf/simulated/floor{icon_state = "whiteshiny"},/area/turret_protected/AssistantRoom)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
@@ -48,10 +47,10 @@ aaaaaaaaabccddddddccbaaaaaaaaa
|
||||
aaaaaaaaabcefghijklcbaaaaaaaaa
|
||||
aaaaaaaaabcemnopqrlcbaaaaaaaaa
|
||||
aaaaaaaaabcestquvqlcbaaaaaaaaa
|
||||
aaaaaaaaabcewqqxqylcbaaaaaaaaa
|
||||
aaaaaaaaabceqzAqBqlcbaaaaaaaaa
|
||||
aaaaaaaaabceCqDqEFlcbaaaaaaaaa
|
||||
aaaaaaaaabccGGGGGGccbaaaaaaaaa
|
||||
aaaaaaaaabcewqqxqqlcbaaaaaaaaa
|
||||
aaaaaaaaabceqyzqAqlcbaaaaaaaaa
|
||||
aaaaaaaaabceBqCqDElcbaaaaaaaaa
|
||||
aaaaaaaaabccFFFFFFccbaaaaaaaaa
|
||||
aaaaaaaaabccccccccccbaaaaaaaaa
|
||||
aaaaaaaaabbbbbbbbbbbbaaaaaaaaa
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
|
||||