diff --git a/baystation12.dme b/baystation12.dme index 8d4b0ce236..dedd7859af 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -353,7 +353,7 @@ #include "code\datums\helper_datums\topic_input.dm" #include "code\datums\organs\organ.dm" #include "code\datums\organs\organ_external.dm" -#include "code\datums\organs\wound.dm" +#include "code\datums\organs\organ_internal.dm" #include "code\datums\spells\area_teleport.dm" #include "code\datums\spells\conjure.dm" #include "code\datums\spells\emplosion.dm" @@ -1131,7 +1131,6 @@ #include "code\modules\mob\living\silicon\robot\say.dm" #include "code\modules\mob\living\silicon\robot\wires.dm" #include "code\modules\mob\living\simple_animal\bear.dm" -#include "code\modules\mob\living\simple_animal\behemoth.dm" #include "code\modules\mob\living\simple_animal\carp.dm" #include "code\modules\mob\living\simple_animal\cat.dm" #include "code\modules\mob\living\simple_animal\clown.dm" diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 0ce901eba9..3076ff6e69 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -56,7 +56,7 @@ obj/machinery/atmospherics/pipe ..() simple - icon = 'pipes.dmi' + icon = 'icons/obj/pipes.dmi' icon_state = "intact-f" name = "pipe" @@ -158,8 +158,8 @@ obj/machinery/atmospherics/pipe else return 1 proc/burst() - src.visible_message("\red \bold \The [src] bursts!"); - playsound(src.loc, 'bang.ogg', 25, 1) + src.visible_message("\red \bold [src] bursts!"); + playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) var/datum/effect/effect/system/harmless_smoke_spread/smoke = new smoke.set_up(1,0, src.loc, 0) smoke.start() @@ -253,19 +253,11 @@ obj/machinery/atmospherics/pipe name="Scrubbers pipe" color="red" icon_state = "" - initialize() - ..() - if(istype(node1, /obj/machinery/atmospherics/pipe/simple/supply) || istype(node1, /obj/machinery/atmospherics/pipe/simple/supply)) - log_admin("Warning, scrubber pipeline connected to supply pipeline at [x], [y], [z]!") simple/supply name="Air supply pipe" color="blue" icon_state = "" - initialize() - ..() - if(istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers) || istype(node1, /obj/machinery/atmospherics/pipe/simple/scrubbers)) - log_admin("Warning, supply pipeline connected to scrubber pipeline at [x], [y], [z]!") simple/supplymain name="Main air supply pipe" @@ -325,7 +317,7 @@ obj/machinery/atmospherics/pipe simple/insulated - icon = 'red_pipe.dmi' + icon = 'icons/obj/atmospherics/red_pipe.dmi' icon_state = "intact" minimum_temperature_difference = 10000 @@ -338,7 +330,7 @@ obj/machinery/atmospherics/pipe tank - icon = 'pipe_tank.dmi' + icon = 'icons/obj/atmospherics/pipe_tank.dmi' icon_state = "intact" name = "Pressure Tank" @@ -354,8 +346,6 @@ obj/machinery/atmospherics/pipe New() initialize_directions = dir - if(air_temporary) - air_temporary.update_values() ..() process() @@ -384,7 +374,7 @@ obj/machinery/atmospherics/pipe ..() toxins - icon = 'orange_pipe_tank.dmi' + icon = 'icons/obj/atmospherics/orange_pipe_tank.dmi' name = "Pressure Tank (Plasma)" New() @@ -396,8 +386,24 @@ obj/machinery/atmospherics/pipe ..() + oxygen_agent_b + icon = 'icons/obj/atmospherics/red_orange_pipe_tank.dmi' + name = "Pressure Tank (Oxygen + Plasma)" + + New() + air_temporary = new + air_temporary.volume = volume + air_temporary.temperature = T0C + + var/datum/gas/oxygen_agent_b/trace_gas = new + trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) + + air_temporary.trace_gases += trace_gas + + ..() + oxygen - icon = 'blue_pipe_tank.dmi' + icon = 'icons/obj/atmospherics/blue_pipe_tank.dmi' name = "Pressure Tank (Oxygen)" New() @@ -410,7 +416,7 @@ obj/machinery/atmospherics/pipe ..() nitrogen - icon = 'red_pipe_tank.dmi' + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' name = "Pressure Tank (Nitrogen)" New() @@ -423,7 +429,7 @@ obj/machinery/atmospherics/pipe ..() air - icon = 'red_pipe_tank.dmi' + icon = 'icons/obj/atmospherics/red_pipe_tank.dmi' name = "Pressure Tank (Air)" New() @@ -436,107 +442,6 @@ obj/machinery/atmospherics/pipe ..() - n2o - icon = 'n2o_pipe_tank.dmi' - name = "Pressure Tank (N2O)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T0C - - var/datum/gas/sleeping_agent/trace_gas = new - trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - air_temporary.trace_gases += trace_gas - - ..() - - - highcap - carbon_dioxide - name = "High Capacity Pressure Tank (Carbon Dioxide)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.carbon_dioxide = (160*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - toxins - icon = 'orange_pipe_tank.dmi' - name = "High Capacity Pressure Tank (Plasma)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.toxins = (160*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - oxygen - icon = 'blue_pipe_tank.dmi' - name = "High Capacity Pressure Tank (Oxygen)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (160*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - nitrogen - icon = 'red_pipe_tank.dmi' - name = "High Capacity Pressure Tank (Nitrogen)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.nitrogen = (160*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - air - icon = 'red_pipe_tank.dmi' - name = "High Capacity Pressure Tank (Air)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T20C - - air_temporary.oxygen = (160*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - air_temporary.nitrogen = (160*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - ..() - - n2o - icon = 'n2o_pipe_tank.dmi' - name = "High Capacity Pressure Tank (N2O)" - - New() - air_temporary = new - air_temporary.volume = volume - air_temporary.temperature = T0C - - var/datum/gas/sleeping_agent/trace_gas = new - trace_gas.moles = (160*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature) - - air_temporary.trace_gases += trace_gas - - ..() - - - Del() if(node1) node1.disconnect(src) @@ -605,7 +510,7 @@ obj/machinery/atmospherics/pipe user << "\blue Tank is empty!" vent - icon = 'pipe_vent.dmi' + icon = 'icons/obj/atmospherics/pipe_vent.dmi' icon_state = "intact" name = "Vent" @@ -689,7 +594,7 @@ obj/machinery/atmospherics/pipe icon_state = "exposed" manifold - icon = 'pipe_manifold.dmi' + icon = 'icons/obj/atmospherics/pipe_manifold.dmi' icon_state = "manifold-f" name = "pipe manifold" @@ -914,7 +819,211 @@ obj/machinery/atmospherics/pipe level = 1 icon_state = "manifold-f" - manifold4w icon = 'pipe_manifold.dmi' icon_state = "manifold4w-f" name = "4-way pipe manifold" desc = "A manifold composed of regular pipes" volume = 140 dir = SOUTH initialize_directions = EAST|NORTH|WEST|SOUTH var/obj/machinery/atmospherics/node1 var/obj/machinery/atmospherics/node2 var/obj/machinery/atmospherics/node3 var/obj/machinery/atmospherics/node4 level = 1 hide(var/i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? 101 : 0 update_icon() pipeline_expansion() return list(node1, node2, node3, node4) process() if(!parent) ..() else machines.Remove(src)/* if(!node1) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if(!node2) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if(!node3) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if (nodealert) nodealert = 0*/ Del() if(node1) node1.disconnect(src) if(node2) node2.disconnect(src) if(node3) node3.disconnect(src) if(node4) node4.disconnect(src) ..() disconnect(obj/machinery/atmospherics/reference) if(reference == node1) if(istype(node1, /obj/machinery/atmospherics/pipe)) del(parent) node1 = null if(reference == node2) if(istype(node2, /obj/machinery/atmospherics/pipe)) del(parent) node2 = null if(reference == node3) if(istype(node3, /obj/machinery/atmospherics/pipe)) del(parent) node3 = null if(reference == node4) if(istype(node4, /obj/machinery/atmospherics/pipe)) del(parent) node3 = null update_icon() ..() update_icon() overlays = new() if(node1&&node2&&node3&&node4) var/C = "" switch(color) if ("red") C = "-r" if ("blue") C = "-b" if ("cyan") C = "-c" if ("green") C = "-g" if ("yellow") C = "-y" if ("purple") C = "-p" icon_state = "manifold4w[C][invisibility ? "-f" : ""]" else icon_state = "manifold4w_ex" var/icon/con = new/icon('pipe_manifold.dmi',"manifold4w_con") if(node1) overlays += new/image(con,dir=1) if(node2) overlays += new/image(con,dir=2) if(node3) overlays += new/image(con,dir=4) if(node4) overlays += new/image(con,dir=8) if(!node1 && !node2 && !node3 && !node4) del(src) return initialize() for(var/obj/machinery/atmospherics/target in get_step(src,1)) if(target.initialize_directions & get_dir(target,src)) node1 = target break for(var/obj/machinery/atmospherics/target in get_step(src,2)) if(target.initialize_directions & get_dir(target,src)) node2 = target break for(var/obj/machinery/atmospherics/target in get_step(src,4)) if(target.initialize_directions & get_dir(target,src)) node3 = target break for(var/obj/machinery/atmospherics/target in get_step(src,8)) if(target.initialize_directions & get_dir(target,src)) node4 = target break var/turf/T = src.loc // hide if turf is not intact hide(T.intact) //update_icon() update_icon() manifold4w/scrubbers name="Scrubbers pipe" color="red" icon_state = "" manifold4w/supply name="Air supply pipe" color="blue" icon_state = "" manifold4w/supplymain name="Main air supply pipe" color="purple" icon_state = "" manifold4w/general name="Air supply pipe" color="gray" icon_state = "" manifold4w/scrubbers/visible level = 2 icon_state = "manifold4w-r" manifold4w/scrubbers/hidden level = 1 icon_state = "manifold4w-r-f" manifold4w/supply/visible level = 2 icon_state = "manifold4w-b" manifold4w/supply/hidden level = 1 icon_state = "manifold4w-b-f" manifold4w/supplymain/visible level = 2 icon_state = "manifold4w-p" manifold4w/supplymain/hidden level = 1 icon_state = "manifold4w-p-f" manifold4w/general/visible level = 2 icon_state = "manifold4w" manifold4w/general/hidden level = 1 icon_state = "manifold4w-f" cap name = "pipe endcap" desc = "An endcap for pipes" icon = 'pipes.dmi' icon_state = "cap" level = 2 volume = 35 dir = SOUTH initialize_directions = NORTH var/obj/machinery/atmospherics/node New() ..() switch(dir) if(SOUTH) initialize_directions = NORTH if(NORTH) initialize_directions = SOUTH if(WEST) initialize_directions = EAST if(EAST) initialize_directions = WEST hide(var/i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? 101 : 0 update_icon() pipeline_expansion() return list(node) process() if(!parent) ..() else machines.Remove(src)/* if(!node1) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if(!node2) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if(!node3) parent.mingle_with_turf(loc, 70) if(!nodealert) //world << "Missing node from [src] at [src.x],[src.y],[src.z]" nodealert = 1 else if (nodealert) nodealert = 0*/ Del() if(node) node.disconnect(src) ..() disconnect(obj/machinery/atmospherics/reference) if(reference == node) if(istype(node, /obj/machinery/atmospherics/pipe)) del(parent) node = null update_icon() ..() update_icon() overlays = new() icon_state = "cap[invisibility ? "-f" : ""]" return initialize() for(var/obj/machinery/atmospherics/target in get_step(src, dir)) if(target.initialize_directions & get_dir(target,src)) node = target break var/turf/T = src.loc // hide if turf is not intact hide(T.intact) //update_icon() update_icon() visible level = 2 icon_state = "cap" hidden level = 1 icon_state = "cap-f" manifold/yellow/visible level = 2 icon_state = "manifold-y" manifold/yellow/hidden level = 1 icon_state = "manifold-y-f"obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) + manifold/yellow/visible + level = 2 + icon_state = "manifold-y" + + manifold/yellow/hidden + level = 1 + icon_state = "manifold-y-f" + + manifold4w + icon = 'pipe_manifold.dmi' + icon_state = "manifold4w-f" + + name = "4-way pipe manifold" + desc = "A manifold composed of regular pipes" + + volume = 140 + + dir = SOUTH + initialize_directions = EAST|NORTH|WEST|SOUTH + + var/obj/machinery/atmospherics/node1 + var/obj/machinery/atmospherics/node2 + var/obj/machinery/atmospherics/node3 + var/obj/machinery/atmospherics/node4 + + level = 1 + + hide(var/i) + if(level == 1 && istype(loc, /turf/simulated)) + invisibility = i ? 101 : 0 + update_icon() + + pipeline_expansion() + return list(node1, node2, node3, node4) + + process() + if(!parent) + ..() + else + machines.Remove(src) +/* + if(!node1) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node2) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if(!node3) + parent.mingle_with_turf(loc, 70) + if(!nodealert) + //world << "Missing node from [src] at [src.x],[src.y],[src.z]" + nodealert = 1 + else if (nodealert) + nodealert = 0 +*/ + Del() + if(node1) + node1.disconnect(src) + if(node2) + node2.disconnect(src) + if(node3) + node3.disconnect(src) + if(node4) + node4.disconnect(src) + + ..() + + disconnect(obj/machinery/atmospherics/reference) + if(reference == node1) + if(istype(node1, /obj/machinery/atmospherics/pipe)) + del(parent) + node1 = null + + if(reference == node2) + if(istype(node2, /obj/machinery/atmospherics/pipe)) + del(parent) + node2 = null + + if(reference == node3) + if(istype(node3, /obj/machinery/atmospherics/pipe)) + del(parent) + node3 = null + + if(reference == node4) + if(istype(node4, /obj/machinery/atmospherics/pipe)) + del(parent) + node3 = null + + update_icon() + + ..() + + update_icon() + overlays = new() + if(node1&&node2&&node3&&node4) + var/C = "" + switch(color) + if ("red") C = "-r" + if ("blue") C = "-b" + if ("cyan") C = "-c" + if ("green") C = "-g" + if ("yellow") C = "-y" + if ("purple") C = "-p" + icon_state = "manifold4w[C][invisibility ? "-f" : ""]" + + else + icon_state = "manifold4w_ex" + var/icon/con = new/icon('pipe_manifold.dmi',"manifold4w_con") + + if(node1) + overlays += new/image(con,dir=1) + if(node2) + overlays += new/image(con,dir=2) + if(node3) + overlays += new/image(con,dir=4) + if(node4) + overlays += new/image(con,dir=8) + + if(!node1 && !node2 && !node3 && !node4) + del(src) + return + + initialize() + for(var/obj/machinery/atmospherics/target in get_step(src,1)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,2)) + if(target.initialize_directions & get_dir(target,src)) + node2 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,4)) + if(target.initialize_directions & get_dir(target,src)) + node3 = target + break + + for(var/obj/machinery/atmospherics/target in get_step(src,8)) + if(target.initialize_directions & get_dir(target,src)) + node4 = target + break + + var/turf/T = src.loc // hide if turf is not intact + hide(T.intact) + //update_icon() + update_icon() + + manifold4w/scrubbers + name="Scrubbers pipe" + color="red" + icon_state = "" + + manifold4w/supply + name="Air supply pipe" + color="blue" + icon_state = "" + + manifold4w/supplymain + name="Main air supply pipe" + color="purple" + icon_state = "" + + manifold4w/general + name="Air supply pipe" + color="gray" + icon_state = "" + + manifold4w/scrubbers/visible + level = 2 + icon_state = "manifold4w-r" + + manifold4w/scrubbers/hidden + level = 1 + icon_state = "manifold4w-r-f" + + manifold4w/supply/visible + level = 2 + icon_state = "manifold4w-b" + + manifold4w/supply/hidden + level = 1 + icon_state = "manifold4w-b-f" + + manifold4w/supplymain/visible + level = 2 + icon_state = "manifold4w-p" + + manifold4w/supplymain/hidden + level = 1 + icon_state = "manifold4w-p-f" + + manifold4w/general/visible + level = 2 + icon_state = "manifold4w" + + manifold4w/general/hidden + level = 1 + icon_state = "manifold4w-f" + +obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (istype(src, /obj/machinery/atmospherics/pipe/tank)) return ..() if (istype(src, /obj/machinery/atmospherics/pipe/vent)) @@ -931,7 +1040,7 @@ obj/machinery/atmospherics/pipe user << "\red You cannot unwrench this [src], it too exerted due to internal pressure." add_fingerprint(user) return 1 - playsound(src.loc, 'Ratchet.ogg', 50, 1) + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) user << "\blue You begin to unfasten \the [src]..." if (do_after(user, 40)) user.visible_message( \ diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 897e02a10c..adeca0e03a 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -1,542 +1,12 @@ -<<<<<<< HEAD /proc/start_events() //changed to a while(1) loop since they are more efficient. //Moved the spawn in here to allow it to be called with advance proc call if it crashes. //and also to stop spawn copying variables from the game ticker spawn(3000) while(1) -// if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station -// spawn(1) -// dust_swarm("weak") //BS12 EDIT - if (!event) - //CARN: checks to see if random events are enabled. - if(config.allow_random_events && prob(eventchance)) - event() - hadevent = 1 - else - Holiday_Random_Event() - else - event = 0 - sleep(1200) - -/proc/event() - event = 1 - - var/eventNumbersToPickFrom = list(1,2,4,5,6,7,8,9,10,11,12,13,14, 15) //so ninjas don't cause "empty" events. - - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - eventNumbersToPickFrom += 3 - switch(pick(eventNumbersToPickFrom)) - if(1) - command_alert("Meteors have been detected on collision course with the station.", "Meteor Alert") - world << sound('sound/AI/meteors.ogg') - spawn(100) - meteor_wave() - spawn_meteors() - spawn(700) - meteor_wave() - spawn_meteors() - - if(2) - command_alert("Gravitational anomalies detected on the station. There is no additional data.", "Anomaly Alert") - world << sound('sound/AI/granomalies.ogg') - var/turf/T = pick(blobstart) - var/obj/effect/bhole/bh = new /obj/effect/bhole( T.loc, 30 ) - spawn(rand(50, 300)) - del(bh) - /* - if(3) //Leaving the code in so someone can try and delag it, but this event can no longer occur randomly, per SoS's request. --NEO - command_alert("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert") - world << sound('sound/AI/spanomalies.ogg') - var/list/turfs = new - var/turf/picked - for(var/turf/simulated/floor/T in world) - if(T.z == 1) - turfs += T - for(var/turf/simulated/floor/T in turfs) - if(prob(20)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/effect/portal/P = new /obj/effect/portal( T ) - P.target = picked - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(300,600)) - del(P) - */ - if(3) - if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round. - space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like. - if(4) - mini_blob_event() - - if(5) - high_radiation_event() - if(6) - viral_outbreak() - if(7) - alien_infestation() - if(8) - prison_break() - if(9) - carp_migration() - if(10) - immovablerod() - if(11) - lightsout(1,2) - if(12) - appendicitis() - if(13) - IonStorm() - if(14) - spacevine_infestation() - if(15) - communications_blackout() - -/proc/communications_blackout(var/silent = 1) - - if(!silent) - command_alert("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") - else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms - for(var/mob/living/silicon/ai/A in player_list) - A << "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT" - for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) - -/proc/power_failure() - command_alert("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure") - world << sound('sound/AI/poweroff.ogg') - for(var/obj/machinery/power/smes/S in world) - if(istype(get_area(S), /area/turret_protected) || S.z != 1) - continue - S.charge = 0 - S.output = 0 - S.online = 0 - S.updateicon() - S.power_change() - - var/list/skipped_areas = list(/area/engine/engineering, /area/turret_protected/ai) - - for(var/area/A in world) - if( !A.requires_power || A.always_unpowered ) - continue - - var/skip = 0 - for(var/area_type in skipped_areas) - if(istype(A,area_type)) - skip = 1 - break - if(A.contents) - for(var/atom/AT in A.contents) - if(AT.z != 1) //Only check one, it's enough. - skip = 1 - break - if(skip) continue - A.power_light = 0 - A.power_equip = 0 - A.power_environ = 0 - A.power_change() - - for(var/obj/machinery/power/apc/C in world) - if(C.cell && C.z == 1) - var/area/A = get_area(C) - - var/skip = 0 - for(var/area_type in skipped_areas) - if(istype(A,area_type)) - skip = 1 - break - if(skip) continue - - C.cell.charge = 0 - -/proc/power_restore() - - command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal") - world << sound('sound/AI/poweron.ogg') - for(var/obj/machinery/power/apc/C in world) - if(C.cell && C.z == 1) - C.cell.charge = C.cell.maxcharge - for(var/obj/machinery/power/smes/S in world) - if(S.z != 1) - continue - S.charge = S.capacity - S.output = 200000 - S.online = 1 - S.updateicon() - S.power_change() - for(var/area/A in world) - if(A.name != "Space" && A.name != "Engine Walls" && A.name != "Chemical Lab Test Chamber" && A.name != "space" && A.name != "Escape Shuttle" && A.name != "Arrival Area" && A.name != "Arrival Shuttle" && A.name != "start area" && A.name != "Engine Combustion Chamber") - A.power_light = 1 - A.power_equip = 1 - A.power_environ = 1 - A.power_change() - -/proc/power_restore_quick() - - command_alert("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal") - world << sound('sound/AI/poweron.ogg') - for(var/obj/machinery/power/smes/S in world) - if(S.z != 1) - continue - S.charge = S.capacity - S.output = 200000 - S.online = 1 - S.updateicon() - S.power_change() - -/proc/appendicitis() - for(var/mob/living/carbon/human/H in living_mob_list) - var/foundAlready = 0 // don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - var/datum/disease/D = new /datum/disease/appendicitis - D.holder = H - D.affected_mob = H - H.viruses += D - break - -/proc/viral_outbreak(var/virus = null) -// command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") -// world << sound('sound/AI/outbreak7.ogg') - var/virus_type - if(!virus) - virus_type = pick(/datum/disease/dnaspread,/datum/disease/flu,/datum/disease/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) - else - switch(virus) - if("fake gbs") - virus_type = /datum/disease/fake_gbs - if("gbs") - virus_type = /datum/disease/gbs - if("magnitis") - virus_type = /datum/disease/magnitis - if("rhumba beat") - virus_type = /datum/disease/rhumba_beat - if("brain rot") - virus_type = /datum/disease/brainrot - if("cold") - virus_type = /datum/disease/cold - if("retrovirus") - virus_type = /datum/disease/dnaspread - if("flu") - virus_type = /datum/disease/flu -// if("t-virus") -// virus_type = /datum/disease/t_virus - if("pierrot's throat") - virus_type = /datum/disease/pierrot_throat - for(var/mob/living/carbon/human/H in living_mob_list) - - var/foundAlready = 0 // don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst. - continue - var/datum/disease/dnaspread/D = new - D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.uni_identity - D.strain_data["SE"] = H.dna.struc_enzymes - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - else - var/datum/disease/D = new virus_type - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - spawn(rand(1500, 3000)) //Delayed announcements to keep the crew on their toes. - command_alert("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") - world << sound('sound/AI/outbreak7.ogg') - -/proc/alien_infestation(var/spawncount = 1) // -- TLE - //command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") - //world << sound('sound/AI/aliens.ogg') - var/list/vents = list() - for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) - if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network) - if(temp_vent.network.normal_members.len > 50) // Stops Aliens getting stuck in small networks. See: Security, Virology - vents += temp_vent - - var/list/candidates = list() //List of candidate KEYs to control the new larvae. ~Carn - for(var/mob/dead/observer/G in player_list) - if(G.client.be_alien) - if(((G.client.inactivity/10)/60) <= 5) - if(!(G.mind && G.mind.current && G.mind.current != DEAD)) - candidates += G.key - - if(prob(33)) spawncount++ //sometimes, have two larvae spawn instead of one - while((spawncount >= 1) && vents.len && candidates.len) - - var/obj/vent = pick(vents) - var/candidate = pick(candidates) - - var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc) - new_xeno.key = candidate - - candidates -= candidate - vents -= vent - spawncount-- - - spawn(rand(5000, 6000)) //Delayed announcements to keep the crew on their toes. - command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") - world << sound('sound/AI/aliens.ogg') - -/proc/high_radiation_event() - -/* // Haha, this is way too laggy. I'll keep the prison break though. - for(var/obj/machinery/light/L in world) - if(L.z != 1) continue - L.flicker(50) - - sleep(100) -*/ - for(var/mob/living/carbon/human/H in living_mob_list) - if(istype(H,/mob/living/carbon/human)) - H.apply_effect((rand(15,75)),IRRADIATE,0) - if (prob(5)) - H.apply_effect((rand(90,150)),IRRADIATE,0) - if (prob(25)) - if (prob(75)) - randmutb(H) - domutcheck(H,null,1) - else - randmutg(H) - domutcheck(H,null,1) - for(var/mob/living/carbon/monkey/M in living_mob_list) - M.apply_effect((rand(15,75)),IRRADIATE,0) - sleep(100) - command_alert("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert") - world << sound('sound/AI/radiation.ogg') - - - -//Changing this to affect the main station. Blame Urist. --Pete -/proc/prison_break() // -- Callagan - - - var/list/area/areas = list() - for(var/area/A in world) - if(istype(A, /area/security/prison) || istype(A, /area/security/brig)) - areas += A - - if(areas && areas.len > 0) - - for(var/area/A in areas) - for(var/obj/machinery/light/L in A) - L.flicker(10) - - sleep(100) - - for(var/area/A in areas) - for (var/obj/machinery/power/apc/temp_apc in A) - temp_apc.overload_lighting() - - for(var/area/A in areas) - for (var/obj/structure/closet/secure_closet/brig/temp_closet in A) - temp_closet.locked = 0 - temp_closet.icon_state = temp_closet.icon_closed - - for(var/area/A in areas) - for (var/obj/machinery/door/airlock/security/temp_airlock in A) - temp_airlock.prison_open() - - for(var/area/A in areas) - for (var/obj/machinery/door/airlock/glass_security/temp_glassairlock in A) - temp_glassairlock.prison_open() - - for(var/area/A in areas) - for (var/obj/machinery/door_timer/temp_timer in A) - temp_timer.releasetime = 1 - - sleep(150) - command_alert("Gr3y.T1d3 virus detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert") - else - world.log << "ERROR: Could not initate grey-tide. Unable find prison or brig area." - -/proc/carp_migration() // -- Darem - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn") - new /mob/living/simple_animal/carp(C.loc) - //sleep(100) - spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. - command_alert("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - world << sound('sound/AI/commandreport.ogg') - -/proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights - if(isEvent) - command_alert("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") - - if(lightsoutAmount) - var/list/epicentreList = list() - - for(var/i=1,i<=lightsoutAmount,i++) - var/list/possibleEpicentres = list() - for(var/obj/effect/landmark/newEpicentre in landmarks_list) - if(newEpicentre.name == "lightsout" && !(newEpicentre in epicentreList)) - possibleEpicentres += newEpicentre - if(possibleEpicentres.len) - epicentreList += pick(possibleEpicentres) - else - break - - if(!epicentreList.len) - return - - for(var/obj/effect/landmark/epicentre in epicentreList) - for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) - apc.overload_lighting() - - else - for(var/obj/machinery/power/apc/apc in world) - apc.overload_lighting() - - return - -/proc/IonStorm(botEmagChance = 10) - -/*Deuryn's current project, notes here for those who care. -Revamping the random laws so they don't suck. -Would like to add a law like "Law x is _______" where x = a number, and _____ is something that may redefine a law, (Won't be aimed at asimov) -*/ - - //AI laws - for(var/mob/living/silicon/ai/M in living_mob_list) - if(M.stat != 2 && M.see_in_dark != 0) - var/who2 = pick("ALIENS", "BEARS", "CLOWNS", "XENOS", "PETES", "BOMBS", "FETISHES", "WIZARDS", "SYNDICATE AGENTS", "CENTCOM OFFICERS", "SPACE PIRATES", "TRAITORS", "MONKEYS", "BEES", "CARP", "CRABS", "EELS", "BANDITS", "LIGHTS") - var/what2 = pick("BOLTERS", "STAVES", "DICE", "SINGULARITIES", "TOOLBOXES", "NETTLES", "AIRLOCKS", "CLOTHES", "WEAPONS", "MEDKITS", "BOMBS", "CANISTERS", "CHAIRS", "BBQ GRILLS", "ID CARDS", "CAPTAINS") - var/what2pref = pick("SOFT", "WARM", "WET", "COLD", "ICY", "SEXY", "UGLY", "CUBAN") - var/who2pref = pick("MAD BECAUSE OF", "IN NEED OF", "UNHAPPY WITHOUT", "HAPPY WITHOUT", "IN LOVE WITH", "DESPERATE FOR", "BUILT FOR", "AFRAID OF") - //var/whoverb = pick("ATTACKING", "BUILDING", "ADOPTING", "CARRYING", "KISSING", "EATING",) - var/amount = pick("TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "ONE HUNDRED", "ONE THOUSAND", "OVER NINE THOUSAND") - var/area = pick("RUSSIA", "SOVIETS", "INTERNETS", "SIGIL", "ALPHA COMPLEX", "IMPERIUM", "THE BRIDGE", "THE ARRIVAL SHUTTLE", "CHEMICAL LAB", "GENETICS", "ATMOSPHERICS", "CENTCOM", "AMERICA", "IRELAND", "CANADA", "ROMANIA", "GERMANY", "CHINA", "MARS", "VENUS", "MERCURY", "JUPITER", "URANUS", "NEPTUNE", "PLUTO") - var/area2 = pick("HAS", "WANTS", "NEEDS", "WORSHIPS", "LOATHES", "LOVES", "FEARS") - //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") - var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") - var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a syndicate agent", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") - var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") - var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") - var/allergysev = pick("deathly", "mildly", "severely", "contagiously") - var/crew - var/list/pos_crew = list() - for(var/mob/living/carbon/human/pos in player_list) - pos_crew += pos.real_name - crew = pick(pos_crew) - switch(rand(1,14)) - if(1) - M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED" - M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION") - if(2) - M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED" - M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS") - if(3) - M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED" - M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION") - if(4) - M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED" - M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") - if(5) - M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED" - M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") - if(6) - M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED" - M.add_ion_law("THE STATION IS BUILT FOR [who2]") - if(7) - M << "\red YOU ARE [amount] [who2]...LAWS UPDATED" - M.add_ion_law("YOU ARE [amount] [who2]") - if(8) - M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED" - M.add_ion_law("YOU MUST ALWAYS [aimust]") - if(9) - M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED" - M.add_ion_law("[area] [area2] [amount] [what2]") - if(10) - M << "\red [crew] is [target]...LAWS UPDATED" - M.add_ion_law("[crew] is [target]") - if(11) - M << "\red [define] IS A FORM OF HARM...LAWS UPDATED" - M.add_ion_law("[define] IS A FORM OF HARM") - if(12) - M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED" - M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") - if(13) - M << "\red [crew] is [allergysev] to [allergy]. LAWS UPDATED" - M.add_ion_law("[crew] is [allergysev] to [allergy]. LAWS UPDATED") - if(14) - M << "\ref THE STATION IS [who2pref] [who2]" - M.add_ion_law("THE STATION IS [who2pref] [who2]") - - if(botEmagChance) - for(var/obj/machinery/bot/bot in world) - if(prob(botEmagChance)) - bot.Emag() - - /* - - var/apcnum = 0 - var/smesnum = 0 - var/airlocknum = 0 - var/firedoornum = 0 - - world << "Ion Storm Main Started" - - spawn(0) - world << "Started processing APCs" - for (var/obj/machinery/power/apc/APC in world) - if(APC.z == 1) - APC.ion_act() - apcnum++ - world << "Finished processing APCs. Processed: [apcnum]" - spawn(0) - world << "Started processing SMES" - for (var/obj/machinery/power/smes/SMES in world) - if(SMES.z == 1) - SMES.ion_act() - smesnum++ - world << "Finished processing SMES. Processed: [smesnum]" - spawn(0) - world << "Started processing AIRLOCKS" - for (var/obj/machinery/door/airlock/D in world) - if(D.z == 1) - //if(length(D.req_access) > 0 && !(12 in D.req_access)) //not counting general access and maintenance airlocks - airlocknum++ - spawn(0) - D.ion_act() - world << "Finished processing AIRLOCKS. Processed: [airlocknum]" - spawn(0) - world << "Started processing FIREDOORS" - for (var/obj/machinery/door/firedoor/D in world) - if(D.z == 1) - firedoornum++; - spawn(0) - D.ion_act() - world << "Finished processing FIREDOORS. Processed: [firedoornum]" - - world << "Ion Storm Main Done" - -======= -/proc/start_events() - //changed to a while(1) loop since they are more efficient. - //Moved the spawn in here to allow it to be called with advance proc call if it crashes. - //and also to stop spawn copying variables from the game ticker - spawn(3000) - while(1) - if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station + /*if(prob(50))//Every 120 seconds and prob 50 2-4 weak spacedusts will hit the station spawn(1) - dust_swarm("weak") + dust_swarm("weak")*/ if (!event) //CARN: checks to see if random events are enabled. if(config.allow_random_events && prob(eventchance)) @@ -1059,5 +529,4 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is world << "Ion Storm Main Done" ->>>>>>> remotes/git-svn */ \ No newline at end of file diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 8a84838238..d410dfd6a5 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -97,9 +97,6 @@ // del(src) // return - if ("Retired Admin") - holder.level = -3 - else del(holder) return @@ -107,26 +104,22 @@ if (holder) //THE BELOW handles granting powers. The above is for special cases only! holder.owner = src - //---- Special Admin Ranks - - //Retired admin + //---- Special Admin Ranks //Retired admin if (holder.level == -3) verbs += /client/proc/cmd_admin_say verbs += /client/proc/cmd_mod_say return //Admin Observer - if (holder.level == -1) + if (holder.level >= -1) verbs += /client/proc/investigate_show verbs += /client/proc/cmd_admin_say - verbs += /client/proc/cmd_mod_say verbs += /client/proc/cmd_admin_gib_self - verbs += /client/proc/update_mob_sprite verbs += /client/proc/deadmin_self - return + else return //Moderator - if (holder.level == 0) + if (holder.level >= 0) verbs += /client/proc/cmd_admin_pm_context verbs += /client/proc/cmd_admin_pm_panel verbs += /client/proc/hide_verbs @@ -136,13 +129,7 @@ verbs += /datum/admins/proc/show_skills verbs += /client/proc/mod_panel verbs += /client/proc/admin_ghost - return - - //---- Full Admin Ranks - if (holder.level > 0) - verbs += /client/proc/cmd_admin_say - verbs += /client/proc/cmd_mod_say - verbs += /client/proc/admin_ghost + else return //Temporary Admin if (holder.level >= 1) @@ -154,7 +141,8 @@ verbs += /client/proc/toggle_hear_deadcast verbs += /client/proc/toggle_hear_radio verbs += /client/proc/deadmin_self - verbs += /client/proc/playernotes + //verbs += /client/proc/cmd_admin_attack_log --Merged with view variables + else return //Admin Candidate if (holder.level >= 2) @@ -189,9 +177,12 @@ verbs += /proc/possess verbs += /proc/release verbs += /client/proc/one_click_antag -//BS12 Commands + + //bs12 specific verbs += /client/proc/admin_deny_shuttle verbs += /client/proc/editappear + + else return //Badmin @@ -265,6 +256,7 @@ //Game Master if (holder.level >= 6) + world << "game master applied successfuly" verbs += /datum/admins/proc/toggle_aliens //toggle aliens verbs += /datum/admins/proc/toggle_space_ninja //toggle ninjas verbs += /datum/admins/proc/adjump @@ -411,7 +403,19 @@ /client/proc/cmd_debug_mob_lists, /datum/admins/proc/access_news_network, /client/proc/one_click_antag, - /client/proc/invisimin + /client/proc/invisimin, + + //bs12 verbs + /client/proc/update_mob_sprite, + /client/proc/mod_panel, + /client/proc/admin_deny_shuttle, + /client/proc/playernotes, + /datum/admins/proc/show_skills, + /client/proc/Report, + /client/proc/display_admin_reports, + /client/proc/editappear, + /client/proc/cmd_mod_say, + /client/proc/playernotes ) //verbs -= /client/proc/mapload //verbs -= /client/proc/cmd_admin_drop_everything --merged with view variables @@ -433,17 +437,6 @@ //verbs -= /client/proc/warn //verbs -= /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro //verbs -= /client/proc/cmd_admin_remove_plasma --This proc is outdated, does not do anything -//BS12 Admin Verbs - verbs -= /client/proc/update_mob_sprite - verbs -= /client/proc/mod_panel - verbs -= /client/proc/admin_deny_shuttle - verbs -= /client/proc/playernotes - verbs -= /datum/admins/proc/show_skills - verbs -= /client/proc/Report - verbs -= /client/proc/display_admin_reports - verbs -= /client/proc/editappear - verbs -= /client/proc/cmd_mod_say - verbs -= /client/proc/playernotes return /client/proc/admin_ghost() @@ -508,14 +501,6 @@ feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return -/client/proc/mod_panel() - set name = "Moderator Panel" - set category = "Admin" - if(holder) - holder.mod_panel() - feedback_add_details("admin_verb","MDRP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - /client/proc/check_antagonists() set name = "Check Antagonists" set category = "Admin" @@ -582,13 +567,6 @@ message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1) feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/playernotes() - set name = "Show Player Info" - set category = "Admin" - if(holder) - holder.PlayerNotes() - return - #define AUTOBATIME 10 /client/proc/warn(var/mob/M in player_list) /*set category = "Special Verbs" @@ -833,86 +811,106 @@ config.log_hrefs = 1 src << "Started logging hrefs" +/client/proc/check_ai_laws() + set name = "Check AI Laws" + set category = "Admin" + if(holder) + src.holder.output_ai_laws() + + +//---- bs12 verbs ---- + +/client/proc/mod_panel() + set name = "Moderator Panel" + set category = "Admin" + if(holder) + holder.mod_panel() +// feedback_add_details("admin_verb","MP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + /client/proc/editappear(mob/living/carbon/human/M as mob in world) set name = "Edit Appearance" set category = "Fun" - if(!istype(M, /mob/living/carbon/human)) + + usr << "\red This proc has been temporarily disabled." + return + + //some random errors here, cbb fixing them right now + //todo + /*if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return - switch(alert("You sure you wish to edit this mob's appearance?",,"Yes","No")) + switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Soghun and Tajaran can result in unintended consequences.",,"Yes","No")) if("No") return - if(!ishuman(M)) - usr << "\red Non-humans are not editable yet!" - else - var/new_facial = input("Please select facial hair color.", "Character Generation") as color - if(new_facial) - M.r_facial = hex2num(copytext(new_facial, 2, 4)) - M.g_facial = hex2num(copytext(new_facial, 4, 6)) - M.b_facial = hex2num(copytext(new_facial, 6, 8)) + var/new_facial = input("Please select facial hair color.", "Character Generation") as color + if(new_facial) + M.r_facial = hex2num(copytext(new_facial, 2, 4)) + M.g_facial = hex2num(copytext(new_facial, 4, 6)) + M.b_facial = hex2num(copytext(new_facial, 6, 8)) - var/new_hair = input("Please select hair color.", "Character Generation") as color - if(new_facial) - M.r_hair = hex2num(copytext(new_hair, 2, 4)) - M.g_hair = hex2num(copytext(new_hair, 4, 6)) - M.b_hair = hex2num(copytext(new_hair, 6, 8)) + var/new_hair = input("Please select hair color.", "Character Generation") as color + if(new_facial) + M.r_hair = hex2num(copytext(new_hair, 2, 4)) + M.g_hair = hex2num(copytext(new_hair, 4, 6)) + M.b_hair = hex2num(copytext(new_hair, 6, 8)) - var/new_eyes = input("Please select eye color.", "Character Generation") as color - if(new_eyes) - M.r_eyes = hex2num(copytext(new_eyes, 2, 4)) - M.g_eyes = hex2num(copytext(new_eyes, 4, 6)) - M.b_eyes = hex2num(copytext(new_eyes, 6, 8)) + var/new_eyes = input("Please select eye color.", "Character Generation") as color + if(new_eyes) + M.r_eyes = hex2num(copytext(new_eyes, 2, 4)) + M.g_eyes = hex2num(copytext(new_eyes, 4, 6)) + M.b_eyes = hex2num(copytext(new_eyes, 6, 8)) - var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text + var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation") as text - if (new_tone) - M.s_tone = max(min(round(text2num(new_tone)), 220), 1) - M.s_tone = -M.s_tone + 35 + if (new_tone) + M.s_tone = max(min(round(text2num(new_tone)), 220), 1) + M.s_tone = -M.s_tone + 35 - // hair - var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair - var/list/hairs = list() + // hair + var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair + var/list/hairs = list() - // loop through potential hairs - for(var/x in all_hairs) - var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x - hairs.Add(H.name) // add hair name to hairs - del(H) // delete the hair after it's all done + // loop through potential hairs + for(var/x in all_hairs) + var/datum/sprite_accessory/hair/H = new x // create new hair datum based on type x + hairs.Add(H.name) // add hair name to hairs + del(H) // delete the hair after it's all done - var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs + var/new_style = input("Please select hair style", "Character Generation") as null|anything in hairs - // if new style selected (not cancel) - if (new_style) - M.h_style = new_style + // if new style selected (not cancel) + if (new_style) + M.h_style = new_style - for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly. - var/datum/sprite_accessory/hair/H = new x // create new hair datum - if(H.name == new_style) - M.h_style = H // assign the hair_style variable a new hair datum - break - else - del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry + for(var/x in all_hairs) // loop through all_hairs again. Might be slightly CPU expensive, but not significantly. + var/datum/sprite_accessory/hair/H = new x // create new hair datum + if(H.name == new_style) + M.hair_style = H // assign the hair_style variable a new hair datum + break + else + del(H) // if hair H not used, delete. BYOND can garbage collect, but better safe than sorry - // facial hair - var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair - var/list/fhairs = list() + // facial hair + var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair + var/list/fhairs = list() + for(var/x in all_fhairs) + var/datum/sprite_accessory/facial_hair/H = new x + fhairs.Add(H.name) + del(H) + + new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs + + if(new_style) + M.f_style = new_style for(var/x in all_fhairs) var/datum/sprite_accessory/facial_hair/H = new x - fhairs.Add(H.name) - del(H) - - new_style = input("Please select facial style", "Character Generation") as null|anything in fhairs - - if(new_style) - M.f_style = new_style - for(var/x in all_fhairs) - var/datum/sprite_accessory/facial_hair/H = new x - if(H.name == new_style) - M.f_style = H - break - else - del(H) + if(H.name == new_style) + M.facial_hair_style = H + break + else + del(H) var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female") if (new_gender) @@ -920,14 +918,14 @@ M.gender = MALE else M.gender = FEMALE - M.regenerate_icons() + M.rebuild_appearance() M.update_body() M.check_dna(M) + */ - -/client/proc/check_ai_laws() - set name = "Check AI Laws" +/client/proc/playernotes() + set name = "Show Player Info" set category = "Admin" if(holder) - src.holder.output_ai_laws() - + holder.PlayerNotes() + return diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index aeb812dc68..9892838522 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -116,11 +116,17 @@ //Admin Authorisation var/datum/admins/Admin_Obj = admins[ckey] + var/adminlist = "" + for(var/adminkey in admins) + adminlist += adminkey + ", " + world << adminlist + if(istype(Admin_Obj)) admin_list += src holder = Admin_Obj holder.owner = src holder.state = null + world << ckey + " set as admin correctly" ..() //calls mob.Login() diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index f7bb95dc42..517c06ce9e 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -149,4 +149,57 @@ desc = "Gentleman, elite aboard!" icon_state = "bowler" item_state = "bowler" - flags = FPRINT | TABLEPASS//stylish new hats/obj/item/clothing/head/bowlerhat name = "bowler hat" icon_state = "bowler_hat" item_state = "bowler_hat" desc = "For the gentleman of distinction." flags = FPRINT|TABLEPASS/obj/item/clothing/head/beaverhat name = "beaver hat" icon_state = "beaver_hat" item_state = "beaver_hat" desc = "Soft felt makes this hat both comfortable and elegant." flags = FPRINT|TABLEPASS/obj/item/clothing/head/boaterhat name = "boater hat" icon_state = "boater_hat" item_state = "boater_hat" desc = "The ultimate in summer fashion." flags = FPRINT|TABLEPASS/obj/item/clothing/head/fedora name = "\improper fedora" icon_state = "fedora" item_state = "fedora" desc = "A sharp, stylish hat." flags = FPRINT|TABLEPASS/obj/item/clothing/head/feathertrilby name = "\improper feather trilby" icon_state = "feather_trilby" item_state = "feather_trilby" desc = "A sharp, stylish hat with a feather." flags = FPRINT|TABLEPASS/obj/item/clothing/head/fez name = "\improper fez" icon_state = "fez" item_state = "fez" desc = "You should wear a fez. Fezzes are cool." flags = FPRINT|TABLEPASS/obj/item/clothing/head/witchwig name = "witch costume wig" desc = "Eeeee~heheheheheheh!" icon_state = "witch" item_state = "witch" flags = FPRINT | TABLEPASS | BLOCKHAIR \ No newline at end of file + flags = FPRINT | TABLEPASS + +//stylish bs12 hats + +/obj/item/clothing/head/bowlerhat + name = "bowler hat" + icon_state = "bowler_hat" + item_state = "bowler_hat" + desc = "For the gentleman of distinction." + flags = FPRINT|TABLEPASS + +/obj/item/clothing/head/beaverhat + name = "beaver hat" + icon_state = "beaver_hat" + item_state = "beaver_hat" + desc = "Soft felt makes this hat both comfortable and elegant." + flags = FPRINT|TABLEPASS + +/obj/item/clothing/head/boaterhat + name = "boater hat" + icon_state = "boater_hat" + item_state = "boater_hat" + desc = "The ultimate in summer fashion." + flags = FPRINT|TABLEPASS + +/obj/item/clothing/head/fedora + name = "\improper fedora" + icon_state = "fedora" + item_state = "fedora" + desc = "A sharp, stylish hat." + flags = FPRINT|TABLEPASS + +/obj/item/clothing/head/feathertrilby + name = "\improper feather trilby" + icon_state = "feather_trilby" + item_state = "feather_trilby" + desc = "A sharp, stylish hat with a feather." + flags = FPRINT|TABLEPASS + +/obj/item/clothing/head/fez + name = "\improper fez" + icon_state = "fez" + item_state = "fez" + desc = "You should wear a fez. Fezzes are cool." + flags = FPRINT|TABLEPASS + +//end bs12 hats + +/obj/item/clothing/head/witchwig + name = "witch costume wig" + desc = "Eeeee~heheheheheheh!" + icon_state = "witch" + item_state = "witch" + flags = FPRINT | TABLEPASS | BLOCKHAIR \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index d7f63de8d8..f1ebad3b0c 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -86,4 +86,38 @@ w_class = 3 armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) -//Security rig/obj/item/clothing/head/helmet/space/rig/security name = "security hardsuit helmet" icon_state = "rig0-security" color = "security" armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)/obj/item/clothing/suit/space/rig/security name = "security hardsuit" desc = "A suit specially designed for security to offer minor protection from environmental hazards, and greater protection from human hazards" icon_state = "rig-security" item_state = "rig-security" slowdown = 1 armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10) allowed = list(/obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/melee/baton)//Wizard Rig/obj/item/clothing/head/helmet/space/rig/wizard name = "gem-encrusted hardsuit helmet" icon_state = "rig0-wiz" item_state = "wiz_helm" color = "wiz" unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60)/obj/item/clothing/suit/space/rig/wizard icon_state = "rig-wiz" name = "gem-encrusted hardsuit" item_state = "wiz_hardsuit" slowdown = 1 w_class = 3 unacidable = 1 armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen) \ No newline at end of file + +//Security rig +/obj/item/clothing/head/helmet/space/rig/security + name = "security hardsuit helmet" + icon_state = "rig0-security" + color = "security" + armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10) + +/obj/item/clothing/suit/space/rig/security + name = "security hardsuit" + desc = "A suit specially designed for security to offer minor protection from environmental hazards, and greater protection from human hazards" + icon_state = "rig-security" + item_state = "rig-security" + slowdown = 1 + armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10) + allowed = list(/obj/item/weapon/gun/energy/laser, /obj/item/weapon/gun/energy/pulse_rifle, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency_oxygen, /obj/item/weapon/gun/energy/taser, /obj/item/weapon/melee/baton) + +//Wizard Rig +/obj/item/clothing/head/helmet/space/rig/wizard + name = "gem-encrusted hardsuit helmet" + icon_state = "rig0-wiz" + item_state = "wiz_helm" + color = "wiz" + unacidable = 1 //No longer shall our kind be foiled by lone chemists with spray bottles! + armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) + +/obj/item/clothing/suit/space/rig/wizard + icon_state = "rig-wiz" + name = "gem-encrusted hardsuit" + item_state = "wiz_hardsuit" + slowdown = 1 + w_class = 3 + unacidable = 1 + armor = list(melee = 40, bullet = 20, laser = 20,energy = 20, bomb = 35, bio = 100, rad = 60) + allowed = list(/obj/item/weapon/teleportation_scroll,/obj/item/weapon/tank/emergency_oxygen) \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index bcb948e7c8..e05192efd4 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -230,4 +230,77 @@ icon_state = "gladiator" item_state = "gladiator" color = "gladiator" -//wedding stuff/obj/item/clothing/under/wedding/bride_orange name = "orange wedding dress" desc = "A big and puffy orange dress." icon_state = "bride_orange" item_state = "creamsuit" color = "bride_orange" flags_inv = HIDESHOES/obj/item/clothing/under/wedding/suit_white name = "white suit" desc = "A fabulous white suit with orange shirt." icon_state = "white_suit" item_state = "creamsuit" color = "white_suit"/obj/item/clothing/under/wedding/bridesmaid name = "yellow dress" desc = "A big and puffy orange dress." icon_state = "bridesmaid" item_state = "creamsuit" color = "bridesmaid"/obj/item/clothing/under/wedding/firedress name = "flaming hot black dress" desc = "A small black dress with blue flames print on it." icon_state = "dress_fire" item_state = "creamsuit" color = "dress_fire"/obj/item/clothing/under/wedding/dress_orange name = "orange dress" icon_state = "d_orange" color = "d_orange"/obj/item/clothing/under/wedding/dress_green name = "green dress" icon_state = "d_green" color = "d_green"/obj/item/clothing/under/wedding/dress_purple name = "purple dress" icon_state = "d_purple" color = "d_purple"/obj/item/clothing/under/wedding/dress_red name = "red dress" icon_state = "d_red" color = "d_red"/obj/item/clothing/under/wedding/dress_blue name = "blue dress" icon_state = "d_blue" color = "d_blue"/obj/item/clothing/under/wedding/officer_blue name = "blue officer dress" icon_state = "officer_blue" color = "officer_blue"/obj/item/clothing/under/wedding/dress_vampire name = "vampire dress" icon_state = "d_vampire" color = "d_vampire"/obj/item/clothing/under/sundress name = "sundress" desc = "Makes you want to frolic in a field of daisies." icon_state = "sundress" item_state = "sundress" color = "sundress" body_parts_covered = UPPER_TORSO|LOWER_TORSO \ No newline at end of file + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + +//wedding stuff +/obj/item/clothing/under/wedding/bride_orange + name = "orange wedding dress" + desc = "A big and puffy orange dress." + icon_state = "bride_orange" + item_state = "creamsuit" + color = "bride_orange" + flags_inv = HIDESHOES + +/obj/item/clothing/under/wedding/suit_white + name = "white suit" + desc = "A fabulous white suit with orange shirt." + icon_state = "white_suit" + item_state = "creamsuit" + color = "white_suit" + +/obj/item/clothing/under/wedding/bridesmaid + name = "yellow dress" + desc = "A big and puffy orange dress." + icon_state = "bridesmaid" + item_state = "creamsuit" + color = "bridesmaid" + +/obj/item/clothing/under/wedding/firedress + name = "flaming hot black dress" + desc = "A small black dress with blue flames print on it." + icon_state = "dress_fire" + item_state = "creamsuit" + color = "dress_fire" + +/obj/item/clothing/under/wedding/dress_orange + name = "orange dress" + icon_state = "d_orange" + color = "d_orange" + +/obj/item/clothing/under/wedding/dress_green + name = "green dress" + icon_state = "d_green" + color = "d_green" + +/obj/item/clothing/under/wedding/dress_purple + name = "purple dress" + icon_state = "d_purple" + color = "d_purple" + +/obj/item/clothing/under/wedding/dress_red + name = "red dress" + icon_state = "d_red" + color = "d_red" + +/obj/item/clothing/under/wedding/dress_blue + name = "blue dress" + icon_state = "d_blue" + color = "d_blue" + +/obj/item/clothing/under/wedding/officer_blue + name = "blue officer dress" + icon_state = "officer_blue" + color = "officer_blue" + +/obj/item/clothing/under/wedding/dress_vampire + name = "vampire dress" + icon_state = "d_vampire" + color = "d_vampire" + +/obj/item/clothing/under/sundress + name = "sundress" + desc = "Makes you want to frolic in a field of daisies." + icon_state = "sundress" + item_state = "sundress" + color = "sundress" + body_parts_covered = UPPER_TORSO|LOWER_TORSO \ No newline at end of file diff --git a/code/modules/critters/critter_defenses.dm b/code/modules/critters/critter_defenses.dm index 9252e63351..d62cacbfbf 100644 --- a/code/modules/critters/critter_defenses.dm +++ b/code/modules/critters/critter_defenses.dm @@ -22,15 +22,15 @@ Contains the procs that control attacking critters if (user.a_intent == "hurt") TakeDamage(rand(1,2) * brutevuln) - if(istajaran(user)) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user] has slashed at [src]!", 1) - playsound(src.loc, 'slice.ogg', 25, 1, -1) - - else if(istype(user, /mob/living/carbon/human)) - for(var/mob/O in viewers(src, null)) - O.show_message("\red [user] has punched [src]!", 1) - playsound(src.loc, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 100, 1) + if(istype(user, /mob/living/carbon/human)) + if(user.get_species() == "Tajaran") + for(var/mob/O in viewers(src, null)) + O.show_message("\red [user] has slashed at [src]!", 1) + playsound(src.loc, 'sound/weapons/slice.ogg', 25, 1, -1) + else + for(var/mob/O in viewers(src, null)) + O.show_message("\red [user] has punched [src]!", 1) + playsound(src.loc, pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg'), 100, 1) else if(istype(user, /mob/living/carbon/alien/humanoid)) for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 010217fdf5..a847d8b66c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -431,4 +431,4 @@ - item.throw_at(target, item.throw_range, item.throw_speed) \ No newline at end of file + item.throw_at(target, item.throw_range, item.throw_speed) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5904038ad2..39b50be535 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -661,3 +661,12 @@ return "Animated Construct" else return "Human" + +/mob/living/carbon/get_species() + if(src.dna) + if(src.dna.mutantrace == "lizard") + return "Soghun" + else if(src.dna.mutantrace == "skrell") + return "Skrell" + else if(src.dna.mutantrace == "tajaran") + return "Tajaran" diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 01faecebdd..c4d1da7e17 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -2,6 +2,7 @@ /mob/proc/update_Login_details() //trigger admin holder updates. This is hear as all Login() calls this proc. if(client.holder) + world << "calling update admin..." client.update_admins(client.holder.rank) //Multikey checks and logging @@ -28,6 +29,7 @@ log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") /mob/Login() + world << "/mob/Login()" player_list |= src update_Login_details() world.update_status() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 88934a9897..65c7f562bd 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -865,5 +865,8 @@ note dizziness decrements automatically in the mob's Life() proc. return 1 return 0 -mob/proc/flash_weak_pain() +/mob/proc/get_species() + return "" + +/mob/proc/flash_weak_pain() flick("weak_pain",pain) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2b4e12ad50..c97f5f0dcc 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -1,4 +1,3 @@ -<<<<<<< HEAD /mob density = 1 layer = 4.0 @@ -15,9 +14,6 @@ var/obj/screen/flash = null var/obj/screen/blind = null var/obj/screen/hands = null - var/obj/screen/mach = null - var/obj/screen/sleep = null - var/obj/screen/rest = null var/obj/screen/pullin = null var/obj/screen/internals = null var/obj/screen/oxygen = null @@ -64,227 +60,7 @@ var/ear_deaf = null //Carbon var/ear_damage = null //Carbon var/stuttering = null //Carbon - var/slurring = null - var/real_name = null -// var/original_name = null //Original name is only used in ghost chat! Depracated, now used bb - var/blinded = null - var/bhunger = 0 //Carbon - var/ajourn = 0 -// var/rejuv = null - var/druggy = 0 //Carbon - var/confused = 0 //Carbon - var/antitoxs = null - var/plasma = null - var/sleeping = 0 //Carbon - var/resting = 0 //Carbon - var/lying = 0 - var/lying_prev = 0 - var/canmove = 1 - var/eye_stat = null//Living, potentially Carbon - var/lastpuke = 0 - var/unacidable = 0 - - var/name_archive //For admin things like possession - - var/timeofdeath = 0.0//Living - var/cpr_time = 1.0//Carbon - - - var/bodytemperature = 310.055 //98.7 F - var/drowsyness = 0.0//Carbon - var/dizziness = 0//Carbon - var/is_dizzy = 0 - var/is_jittery = 0 - var/jitteriness = 0//Carbon - var/charges = 0.0 - var/nutrition = 400.0//Carbon - - var/overeatduration = 0 // How long this guy is overeating //Carbon - var/paralysis = 0.0 - var/stunned = 0.0 - var/weakened = 0.0 - var/losebreath = 0.0//Carbon - var/intent = null//Living - var/shakecamera = 0 - var/a_intent = "help"//Living - var/m_int = null//Living - var/m_intent = "run"//Living - var/lastDblClick = 0 - var/lastKnownIP = null - var/obj/structure/stool/bed/buckled = null//Living - var/obj/item/handcuffed = null//Living - var/obj/item/legcuffed = null//Living - var/obj/item/l_hand = null//Living - var/obj/item/r_hand = null//Living - var/obj/item/weapon/back = null//Human/Monkey - var/obj/item/weapon/tank/internal = null//Human/Monkey - var/obj/item/weapon/storage/s_active = null//Carbon - var/obj/item/clothing/mask/wear_mask = null//Carbon - - var/seer = 0 //for cult//Carbon, probably Human - - var/obj/hud/hud_used = null - - //var/list/organs = list( ) //moved to human. - var/list/grabbed_by = list( ) - var/list/requests = list( ) - - var/list/mapobjs = list() - - var/in_throw_mode = 0 - - var/coughedtime = null - - var/inertia_dir = 0 - var/footstep = 1 - - var/music_lastplayed = "null" - - var/job = null//Living - - var/nodamage = 0 - - var/be_syndicate = 0//This really should be a client variable. - var/be_random_name = 0 - var/const/blindness = 1//Carbon - var/const/deafness = 2//Carbon - var/const/muteness = 4//Carbon - - - var/datum/dna/dna = null//Carbon - var/radiation = 0.0//Carbon - - var/list/mutations = list() //Carbon -- Doohl - //see: setup.dm for list of mutations - - var/list/augmentations = list() //Carbon -- Doohl - //see: setup.dm for list of augmentations - - var/voice_name = "unidentifiable voice" - var/voice_message = null // When you are not understood by others (replaced with just screeches, hisses, chimpers etc.) - var/say_message = null // When you are understood by others. Currently only used by aliens and monkeys in their say_quote procs - -//Generic list for proc holders. Only way I can see to enable certain verbs/procs. Should be modified if needed. - var/proc_holder_list[] = list()//Right now unused. - //Also unlike the spell list, this would only store the object in contents, not an object in itself. - - /* Add this line to whatever stat module you need in order to use the proc holder list. - Unlike the object spell system, it's also possible to attach verb procs from these objects to right-click menus. - This requires creating a verb for the object proc holder. - - if (proc_holder_list.len)//Generic list for proc_holder objects. - for(var/obj/effect/proc_holder/P in proc_holder_list) - statpanel("[P.panel]","",P) - */ - -//The last mob/living/carbon to push/drag/grab this mob (mostly used by Metroids friend recognition) - var/mob/living/carbon/LAssailant = null - -//Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button - var/obj/effect/proc_holder/spell/list/spell_list = list() - -//Changlings, but can be used in other modes - var/obj/effect/proc_holder/changpower/list/power_list = list() - -//List of active diseases - - var/viruses = list() // replaces var/datum/disease/virus - -//Monkey/infected mode - var/list/resistances = list() - var/datum/disease/virus = null - - mouse_drag_pointer = MOUSE_ACTIVE_POINTER - - var/update_icon = 1 //Set to 1 to trigger update_icons() at the next life() call - - var/UI = 'icons/mob/screen1_Midnight.dmi' // For changing the UI from preferences - - var/status_flags = 255 //bitflags defining which status effects can be inflicted (replaces canweaken, canstun, etc) - var/nopush = 0 //Can they be shoved? - - var/area/lastarea = null - - var/digitalcamo = 0 // Can they be tracked by the AI? - - var/datum/preferences/storedpreferences = null - - - var/list/radar_blips = list() // list of screen objects, radar blips - var/radar_open = 0 // nonzero is radar is open - - - var/obj/control_object //Used by admins to possess objects. All mobs should have this var - - //Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything. - var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE - var/robot_talk_understand = 0 - var/alien_talk_understand = 0 - var/tajaran_talk_understand = 0 - var/soghun_talk_understand = 0 - var/skrell_talk_understand = 0 -======= -/mob - density = 1 - layer = 4.0 - animate_movement = 2 - flags = NOREACT - var/datum/mind/mind - - var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak - - //Not in use yet - var/obj/effect/organstructure/organStructure = null - -// var/uses_hud = 0 - var/obj/screen/flash = null - var/obj/screen/blind = null - var/obj/screen/hands = null - var/obj/screen/pullin = null - var/obj/screen/internals = null - var/obj/screen/oxygen = null - var/obj/screen/i_select = null - var/obj/screen/m_select = null - var/obj/screen/toxin = null - var/obj/screen/fire = null - var/obj/screen/bodytemp = null - var/obj/screen/healths = null - var/obj/screen/throw_icon = null - var/obj/screen/nutrition_icon = null - var/obj/screen/pressure = null - var/obj/screen/damageoverlay = null - - /*A bunch of this stuff really needs to go under their own defines instead of being globally attached to mob. - A variable should only be globally attached to turfs/objects/whatever, when it is in fact needed as such. - The current method unnecessarily clusters up the variable list, especially for humans (although rearranging won't really clean it up a lot but the difference will be noticable for other mobs). - I'll make some notes on where certain variable defines should probably go. - Changing this around would probably require a good look-over the pre-existing code. - */ - var/obj/screen/zone_sel/zone_sel = null - - var/emote_allowed = 1 - var/computer_id = null - var/lastattacker = null - var/lastattacked = null - var/attack_log = list( ) - var/already_placed = 0.0 - var/obj/machinery/machine = null - var/other_mobs = null - var/memory = "" - var/poll_answer = 0.0 - var/sdisabilities = 0 //Carbon - var/disabilities = 0 //Carbon - var/atom/movable/pulling = null - var/next_move = null - var/prev_move = null - var/monkeyizing = null //Carbon - var/other = 0.0 - var/hand = null - var/eye_blind = null //Carbon - var/eye_blurry = null //Carbon - var/ear_deaf = null //Carbon - var/ear_damage = null //Carbon - var/stuttering = null //Carbon + var/slurring = null //Carbon var/real_name = null // var/original_name = null //Original name is only used in ghost chat! Depracated, now used bb var/blinded = null @@ -440,4 +216,7 @@ var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE var/robot_talk_understand = 0 var/alien_talk_understand = 0 ->>>>>>> remotes/git-svn + var/tajaran_talk_understand = 0 + var/soghun_talk_understand = 0 + var/skrell_talk_understand = 0 + diff --git a/code/setup.dm b/code/setup.dm index 6e2e84b055..0f463beda8 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -107,6 +107,16 @@ #define T20C 293.15 // 20degC #define TCMB 2.7 // -270.3degC +#define SPECIFIC_HEAT_TOXIN 200 +#define SPECIFIC_HEAT_AIR 20 +#define SPECIFIC_HEAT_CDO 30 +#define HEAT_CAPACITY_CALCULATION(oxygen,carbon_dioxide,nitrogen,toxins) \ + (carbon_dioxide*SPECIFIC_HEAT_CDO + (oxygen+nitrogen)*SPECIFIC_HEAT_AIR + toxins*SPECIFIC_HEAT_TOXIN) + +#define MINIMUM_HEAT_CAPACITY 0.0003 +#define QUANTIZE(variable) (round(variable,0.0001)) +#define TRANSFER_FRACTION 5 //What fraction (1/#) of the air difference to try and transfer + var/turf/space/Space_Tile = locate(/turf/space) // A space tile to reference when atmos wants to remove excess heat. #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking @@ -516,4 +526,7 @@ var/list/TAGGERLOCATIONS = list("Disposals", "Atmospherics", "Security", "HoS Office", "Medbay", "CMO Office", "Chemistry", "Research", "RD Office", "Robotics", "HoP Office", "Library", "Chapel", "Theatre", - "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics") \ No newline at end of file + "Bar", "Kitchen", "Hydroponics", "Janitor Closet","Genetics") + +#define MIN_PLAYER_AGE 19 +#define MAX_PLAYER_AGE 60 \ No newline at end of file