Merge branch 'master' of github.com:Baystation12/Baystation12

This commit is contained in:
Miniature
2012-05-15 00:52:14 +09:30
44 changed files with 348 additions and 252 deletions
@@ -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)
+3 -4
View File
@@ -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
+1
View File
@@ -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
+1
View File
@@ -341,6 +341,7 @@ obj/machinery/atmospherics/pipe
New()
initialize_directions = dir
air_temporary.update_values()
..()
process()
+6
View File
@@ -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.
+6 -2
View File
@@ -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
+46 -29
View File
@@ -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,37 +212,53 @@ 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(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
if(AG) // Because of runtime errors on syphoning.
spawn AG.process_group()
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)
if(AG) // Because of runtime errors on syphoning.
spawn AG.check_regroup()
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))
proc/tick()
if(groups_to_rebuild.len > 0) //If there are groups to rebuild, do so.
spawn process_rebuild_select_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.check_regroup()
return 1
proc/process_rebuild_select_groups()
//Purpose: This gets called to recalculate and rebuild group geometry
//Called by: process()
+4 -3
View File
@@ -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"
+14 -3
View File
@@ -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-sweetend 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"
+4 -2
View File
@@ -806,7 +806,9 @@
/datum/supply_packs/contraband/New()
var/list/tempContains = list()
for(var/i = 0,i<5,i++)
for(1 to 5)
if(!contains || !contains.len)
break //Sanity checking.
tempContains += pick(contains)
src.contains = tempContains
contains = tempContains
..()
+4 -1
View File
@@ -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&apos;ve been stung, until they try to speak and can&apos;t." // Man, fuck javascript. &apos; == '
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&apos;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
@@ -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)
+28 -14
View File
@@ -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 += {"
+49 -79
View File
@@ -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"
+12 -14
View File
@@ -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)
+3
View File
@@ -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)
+1 -1
View File
@@ -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))
+6
View File
@@ -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
-3
View File
@@ -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)
+2
View File
@@ -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"
+2
View File
@@ -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
-2
View File
@@ -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."
+3 -2
View File
@@ -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
+62 -66
View File
@@ -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)
@@ -86,6 +86,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 +95,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 +122,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)
+2
View File
@@ -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
+30
View File
@@ -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
+11
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+12 -13
View File
@@ -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
Binary file not shown.