diff --git a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm index 721365e6be2..27819ddac3e 100644 --- a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm +++ b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm @@ -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 diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 5606d8113f8..f2ce4a8621a 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -124,6 +124,7 @@ //Remix the resulting gases filtered_out.update_values() + removed.update_values() air_contents.merge(filtered_out) loc.assume_air(removed) diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm index ce9fb9f8598..bff2d0ee5ee 100644 --- a/code/ATMOSPHERICS/datum_pipe_network.dm +++ b/code/ATMOSPHERICS/datum_pipe_network.dm @@ -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 diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 56cb9898013..1b63e605481 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -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 diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 577bf562dce..52aae83099d 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -341,6 +341,7 @@ obj/machinery/atmospherics/pipe New() initialize_directions = dir + air_temporary.update_values() ..() process() diff --git a/code/FEA/FEA_airgroup.dm b/code/FEA/FEA_airgroup.dm index c92c3838d14..f8a6a8a5857 100644 --- a/code/FEA/FEA_airgroup.dm +++ b/code/FEA/FEA_airgroup.dm @@ -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. diff --git a/code/FEA/FEA_gas_mixture.dm b/code/FEA/FEA_gas_mixture.dm index 0c7538c770d..18191295325 100644 --- a/code/FEA/FEA_gas_mixture.dm +++ b/code/FEA/FEA_gas_mixture.dm @@ -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 diff --git a/code/FEA/FEA_system.dm b/code/FEA/FEA_system.dm index 92eaf9b5a17..31c46503d2f 100644 --- a/code/FEA/FEA_system.dm +++ b/code/FEA/FEA_system.dm @@ -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 << "ERROR IN ATMOS TICKER. Killing air simulation!" + 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() diff --git a/code/WorkInProgress/AI_Visibility.dm b/code/WorkInProgress/AI_Visibility.dm index 79567037892..a51e04b0cd6 100644 --- a/code/WorkInProgress/AI_Visibility.dm +++ b/code/WorkInProgress/AI_Visibility.dm @@ -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) diff --git a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm index d07228e056b..0c6792aeaec 100644 --- a/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm +++ b/code/WorkInProgress/Cael_Aislinn/Tajara/tajaran.dm @@ -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" diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 8ba5ffc8147..33211757e4d 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -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" diff --git a/code/defines/obj/supplypacks.dm b/code/defines/obj/supplypacks.dm index d5398de3498..c4a7f02cd53 100755 --- a/code/defines/obj/supplypacks.dm +++ b/code/defines/obj/supplypacks.dm @@ -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 ..() \ No newline at end of file diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index 11572a0abda..17f6e2ce653 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -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 diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 61d51839b74..0d0bea60a79 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -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)" diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index d6d692cc9c6..6b50ce914ab 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -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 diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 90233a01222..5fe12567668 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -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) diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 75d80376b85..213ff565467 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -42,20 +42,34 @@ dat += "Close

" //| Update" if(src.table && (src.table.check_victim())) src.victim = src.table.victim - dat += {" -Patient Information:
-
-Name: [src.victim.real_name]
-Age: [src.victim.age]
-Blood Type: [src.victim.dna.b_type]
-
-Health: [src.victim.health]
-Brute Damage: [src.victim.getBruteLoss()]
-Toxins Damage: [src.victim.getToxLoss()]
-Fire Damage: [src.victim.getFireLoss()]
-Suffocation Damage: [src.victim.getOxyLoss()]
-Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
-"} + if(istype(victim)) + dat += {" + Patient Information:
+
+ Name: [src.victim.real_name]
+ Age: [src.victim.age]
+ Blood Type: [(victim.dna? victim.dna.b_type : "ERROR")]
+
+ Health: [src.victim.health]
+ Brute Damage: [src.victim.getBruteLoss()]
+ Toxins Damage: [src.victim.getToxLoss()]
+ Fire Damage: [src.victim.getFireLoss()]
+ Suffocation Damage: [src.victim.getOxyLoss()]
+ Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
+ "} + else if(istype(victim, /mob/living)) + dat += {" + Patient Information:
+
+ Name: [src.victim.real_name]
+ Age: [src.victim.age]
+ Health: [src.victim.health]
+ Brute Damage: [src.victim.getBruteLoss()]
+ Toxins Damage: [src.victim.getToxLoss()]
+ Fire Damage: [src.victim.getFireLoss()]
+ Suffocation Damage: [src.victim.getOxyLoss()]
+ Patient Status: [src.victim.stat ? "Non-Responsive" : "Stable"]
+ "} else src.victim = null dat += {" diff --git a/code/game/objects/closets/extinguisher.dm b/code/game/objects/closets/extinguisher.dm index 490ae2c8d37..1d503333d7f 100644 --- a/code/game/objects/closets/extinguisher.dm +++ b/code/game/objects/closets/extinguisher.dm @@ -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" \ No newline at end of file diff --git a/code/game/objects/items/weapons/medical.dm b/code/game/objects/items/weapons/medical.dm index 8755deddf0f..ef8a6b52f08 100644 --- a/code/game/objects/items/weapons/medical.dm +++ b/code/game/objects/items/weapons/medical.dm @@ -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) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index ba6fd257718..3e6b14ee0c5 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -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) diff --git a/code/game/objects/object_procs.dm b/code/game/objects/object_procs.dm index 7e230546fcf..f57f6ce93a7 100644 --- a/code/game/objects/object_procs.dm +++ b/code/game/objects/object_procs.dm @@ -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)) diff --git a/code/game/objects/stacks/glass.dm b/code/game/objects/stacks/glass.dm index 90733aec8aa..f70c1e50b57 100644 --- a/code/game/objects/stacks/glass.dm +++ b/code/game/objects/stacks/glass.dm @@ -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 diff --git a/code/game/topic.dm b/code/game/topic.dm index c1827cdffd3..ba0a70af30f 100644 --- a/code/game/topic.dm +++ b/code/game/topic.dm @@ -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) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7574cfc2270..0a76b274e8f 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -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 diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 51242323fa4..be02856640a 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -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" diff --git a/code/modules/clothing/head/hats.dm b/code/modules/clothing/head/hats.dm index a48187d97bd..ca94d809f95 100644 --- a/code/modules/clothing/head/hats.dm +++ b/code/modules/clothing/head/hats.dm @@ -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 diff --git a/code/modules/clothing/head/helmets.dm b/code/modules/clothing/head/helmets.dm index 4be85149b23..12621b0addc 100644 --- a/code/modules/clothing/head/helmets.dm +++ b/code/modules/clothing/head/helmets.dm @@ -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." diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index a2f976ea90e..b732e4269bc 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -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 diff --git a/code/modules/mob/organ/organ.dm b/code/modules/mob/organ/organ.dm index bc0d6ac5c77..5d992667129 100644 --- a/code/modules/mob/organ/organ.dm +++ b/code/modules/mob/organ/organ.dm @@ -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) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 2233b41d551..0d0e31ab8f1 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -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) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3738a409210..9e223da1b16 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -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 diff --git a/config/README feedback.txt b/config/README feedback.txt new file mode 100644 index 00000000000..00c504e2e45 --- /dev/null +++ b/config/README feedback.txt @@ -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 \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 751894234fa..1448218d8a1 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -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. --> +
+

13 May 2012

+

TG updated:

+ +
+

10 May 2012

Erthilo updated:

diff --git a/icons/mob/human.dmi b/icons/mob/human.dmi index 492f2537116..9b368fe427a 100644 Binary files a/icons/mob/human.dmi and b/icons/mob/human.dmi differ diff --git a/icons/obj/ERP.dmi b/icons/obj/ERP.dmi new file mode 100644 index 00000000000..972ddab18f6 Binary files /dev/null and b/icons/obj/ERP.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index cf8e30dcdf3..3b6bcd8adc2 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 642186a3049..a92ebe5488f 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/harvest.dmi b/icons/obj/harvest.dmi index b141b676007..c17a2c8acd2 100644 Binary files a/icons/obj/harvest.dmi and b/icons/obj/harvest.dmi differ diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi index 7d7134a0aa2..bb5ea3baf39 100644 Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index cbcf1c78cc4..398dac68c08 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 98f9c04bd4d..927890cf663 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index 26589bcfb8c..8d657968bb4 100644 Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ diff --git a/maps/RandomZLevels/assistantChamber.dmm b/maps/RandomZLevels/assistantChamber.dmm index d71885ff0c9..4d42f382745 100644 --- a/maps/RandomZLevels/assistantChamber.dmm +++ b/maps/RandomZLevels/assistantChamber.dmm @@ -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 diff --git a/sound/weapons/circsawhit.ogg b/sound/weapons/circsawhit.ogg new file mode 100644 index 00000000000..60098571dc2 Binary files /dev/null and b/sound/weapons/circsawhit.ogg differ