diff --git a/code/ZAS/ZAS_Zones.dm b/code/ZAS/ZAS_Zones.dm index 6401a63a9f..6a6fb48345 100644 --- a/code/ZAS/ZAS_Zones.dm +++ b/code/ZAS/ZAS_Zones.dm @@ -299,7 +299,7 @@ proc/ShareRatio(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //Shares a specific ratio of gas between mixtures using simple weighted averages. var //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD - ratio = 0.33 + ratio = sharing_lookup_table[6] //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD size = max(1,A.group_multiplier) @@ -376,23 +376,18 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles) unsim_plasma = 0 unsim_heat_capacity = 0 unsim_temperature = 0 + for(var/turf/T in unsimulated_tiles) unsim_oxygen += T.oxygen unsim_co2 += T.carbon_dioxide unsim_nitrogen += T.nitrogen unsim_plasma += T.toxins - - // Make sure it actually has gas in it, and use the heat capacity of that. - // Space and unsimulated tiles do NOT have a heat capacity. Thus we don't - // add them. This means "space is not cold", which turns out just fine in - // gameplay terms. - if(istype(T, /turf/simulated)) - unsim_heat_capacity += T:air.heat_capacity() - unsim_temperature += T.temperature/unsimulated_tiles.len + unsim_heat_capacity = HEAT_CAPACITY_CALCULATION(unsim_oxygen,unsim_co2,unsim_nitrogen,unsim_plasma) + var - ratio = 0.33 + ratio = sharing_lookup_table[6] old_pressure = A.return_pressure() @@ -404,7 +399,7 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles) // slowly than small rooms, preserving our good old "hollywood-style" // oh-shit effect when large rooms get breached, but still having small // rooms remain pressurized for long enough to make escape possible. - share_size = max(1,size - 5 + unsimulated_tiles.len) + share_size = max(1, unsimulated_tiles.len) full_oxy = A.oxygen * size full_nitro = A.nitrogen * size @@ -444,7 +439,7 @@ proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //Shares a specific ratio of gas between mixtures using simple weighted averages. var //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD - ratio = 0.33 + ratio = sharing_lookup_table[6] //WOOT WOOT TOUCH THIS AND YOU ARE A RETARD full_heat_capacity = A.heat_capacity() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 566a587b8a..ed740f85d1 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -15,6 +15,8 @@ var/global/list/chemical_reactions_list //list of all /datum/chemical_reactio var/global/list/chemical_reagents_list //list of all /datum/reagent datums indexed by reagent id. Used by chemistry stuff var/global/list/landmarks_list = list() //list of all landmarks created var/global/list/surgery_steps = list() //list of all surgery steps |BS12 +var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. + //Preferences stuff //Hairstyles var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index cce20b731c..e2a9e1e1bf 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -122,6 +122,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H) icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' + if("Vox") + icobase = 'icons/mob/human_races/r_vox.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' @@ -147,6 +149,9 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s") + if(H.get_species()=="Vox") + eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s") + eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD) var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 6d9ecca0ef..81abf92546 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -730,7 +730,7 @@ client usr << "This can only be done to instances of type /mob/living/carbon/human" return - var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell") + var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox") switch(new_mutantrace) if(null) return diff --git a/code/game/communications.dm b/code/game/communications.dm index f83c302874..94d53f6bf5 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -104,15 +104,15 @@ var/list/radiochannels = list( "Medical" = 1355, "Engineering" = 1357, "Security" = 1359, + "Response Team" = 1443, "Deathsquad" = 1441, "Syndicate" = 1213, "Supply" = 1347, ) //depenging helpers -var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1347) +var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213, 1443, 1441,1347) var/const/COMM_FREQ = 1353 //command, colored gold in chat window var/const/SYND_FREQ = 1213 -var/const/ERT_FREQ = 1439 #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index e29dd1852d..407ec98b84 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -487,3 +487,25 @@ proc/FindNameFromID(var/mob/living/carbon/human/H) if(ID) return ID.registered_name + +proc/get_all_job_icons() //For all existing HUD icons + return get_all_jobs() + list("Prisoner") + +/obj/proc/GetJobName() //Used in secHUD icon generation + if (!istype(src, /obj/item/device/pda) && !istype(src,/obj/item/weapon/card/id)) + return + + var/jobName + + if(istype(src, /obj/item/device/pda)) + if(src:id) + jobName = src:id:assignment + if(istype(src, /obj/item/weapon/card/id)) + jobName = src:assignment + + if(jobName in get_all_job_icons()) //Check if the job has a hud icon + return jobName + if(jobName in get_all_centcom_jobs()) //Return with the NT logo if it is a Centcom job + return "Centcom" + return "Unknown" //Return unknown if none of the above apply + diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 256d7892f8..cacd825d01 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -76,7 +76,10 @@ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat(H), slot_wear_suit) if("Nurse") if(H.gender == FEMALE) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform) + if(prob(50)) + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform) + else + H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nurse(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/head/nursehat(H), slot_head) else H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 4d7a32b04f..d52f18fdd7 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -170,10 +170,10 @@ visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\ "You hear a click as a faint electronic humming stops.") - + var/old_level = danger_level danger_level = overall_danger_level() - if (alarm_area.master_air_alarm == src) + if (old_level != danger_level) refresh_danger_level() update_icon() diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 9862f63e2c..8ef8c76f62 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -143,7 +143,7 @@ pulse2.dir = pick(cardinal) spawn(10) - del(pulse2) + pulse2.delete() if (on) turn_off() spawn(severity*300) diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index 30aa8a4e64..5e5ae74406 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -862,7 +862,7 @@ Auto Patrol: []"}, pulse2.anchored = 1 pulse2.dir = pick(cardinal) spawn(10) - del(pulse2) + pulse2.delete() var/list/mob/living/carbon/targets = new for (var/mob/living/carbon/C in view(12,src)) if (C.stat==2) diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm index 71cccfdc3e..31fbb8c467 100644 --- a/code/game/machinery/bots/medbot.dm +++ b/code/game/machinery/bots/medbot.dm @@ -299,6 +299,7 @@ if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1)) spawn(0) src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard) + if (!path) path = list() if(src.path.len == 0) src.oldpatient = src.patient src.patient = null diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index 19a43f41cc..fb3646653c 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -583,7 +583,7 @@ Auto Patrol: []"}, // given an optional turf to avoid /obj/machinery/bot/secbot/proc/calc_path(var/turf/avoid = null) src.path = AStar(src.loc, patrol_target, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 120, id=botcard, exclude=avoid) - + if (!path) path = list() // look for a criminal in view of the bot diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index e94ed011ee..0e3e6ec650 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -131,7 +131,7 @@ Class Procs: pulse2.dir = pick(cardinal) spawn(10) - del(pulse2) + pulse2.delete() ..() /obj/machinery/ex_act(severity) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 0845b0ba73..4ab483076b 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -148,15 +148,6 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency) - - if(connection.frequency == ERT_FREQ) - Broadcast_Message(signal.data["connection"], signal.data["mob"], - signal.data["vmask"], signal.data["vmessage"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], list(0), connection.frequency) - - else if(intercept) Broadcast_Message(signal.data["connection"], signal.data["mob"], @@ -354,6 +345,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // freq_text = "Mining" if(1347) freq_text = "Supply" + if(1441) + freq_text = "Death Squad" + if(1443) + freq_text = "Response Team" //There's probably a way to use the list var of channels in code\game\communications.dm to make the dept channels non-hardcoded, but I wasn't in an experimentive mood. --NEO diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 2fe5b5e3a6..2b708ded29 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -27,7 +27,11 @@ /obj/machinery/telecomms/relay/preset/centcom id = "Centcom Relay" hide = 1 - toggled = 0 + toggled = 1 + //anchored = 1 + //use_power = 0 + //idle_power_usage = 0 + heatgen = 0 autolinkers = list("c_relay") //HUB diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index f2a98f7441..58824777d1 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -550,7 +550,7 @@ switch(screen) if("main") left_part = output_available_resources()+"
" - left_part += "Sync with R&D servers | [sync?"Dis":"En"]able auto sync
" + left_part += "Sync with R&D servers
" for(var/part_set in part_sets) left_part += "[part_set] - \[Add all parts to queue\]
" if("parts") @@ -646,9 +646,6 @@ queue = list() src.sync() return update_queue_on_page() - if(href_list["auto_sync"]) - src.sync = !src.sync - //pr_auto_sync.toggle() if(href_list["part_desc"]) var/obj/part = filter.getObj("part_desc") if(part) @@ -661,14 +658,6 @@ src.updateUsrDialog() return -/obj/machinery/mecha_part_fabricator/process() - if (stat & (NOPOWER|BROKEN)) - return - if(sync) - spawn(-1) - sync(1) - return - /obj/machinery/mecha_part_fabricator/proc/remove_material(var/mat_string, var/amount) var/type switch(mat_string) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d70512148c..9d8291733c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -86,10 +86,12 @@ removeVerb(/atom/movable/verb/pull) log_message("[src.name] created.") loc.Entered(src) + mechas_list += src //global mech list return /obj/mecha/Del() src.go_out() + mechas_list -= src //global mech list ..() return diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index f3deea3626..5e295ad131 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -79,7 +79,7 @@ if(!M || M.stat || !(M in view(M))) return if(!M.client) return var/client/C = M.client - var/icon/tempHud = 'icons/mob/hud.dmi' + var/image/holder for(var/mob/living/carbon/human/patient in view(M.loc)) if(M.see_invisible < patient.invisibility) continue @@ -89,12 +89,22 @@ foundVirus++ //if(patient.virus2) // foundVirus++ - C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]") + + holder = patient.hud_list[HEALTH_HUD] if(patient.stat == 2) - C.images += image(tempHud,patient,"huddead") - else if(patient.status_flags & XENO_HOST) - C.images += image(tempHud,patient,"hudxeno") - else if(foundVirus) - C.images += image(tempHud,patient,"hudill") + holder.icon_state = "hudhealth-100" + C.images += holder else - C.images += image(tempHud,patient,"hudhealthy") + holder.icon_state = "hud[RoundHealth(patient.health)]" + C.images += holder + + holder = patient.hud_list[STATUS_HUD] + if(patient.stat == 2) + holder.icon_state = "huddead" + else if(patient.status_flags & XENO_HOST) + holder.icon_state = "hudxeno" + else if(foundVirus) + holder.icon_state = "hudill" + else + holder.icon_state = "hudhealthy" + C.images += holder diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 727280f9b7..d3e7144297 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -30,6 +30,12 @@ would spawn and follow the beaker, even if it is carried or thrown. mouse_opacity = 0 var/amount = 8.0 +/obj/effect/proc/delete() + loc = null + if(reagents) + reagents.delete() + return + /obj/effect/effect/water/New() ..() @@ -37,7 +43,7 @@ would spawn and follow the beaker, even if it is carried or thrown. //if (istype(T, /turf)) // T.firelevel = 0 //TODO: FIX spawn( 70 ) - del(src) + delete() return return @@ -54,7 +60,7 @@ would spawn and follow the beaker, even if it is carried or thrown. // T.firelevel = 0 //TODO: FIX if (--src.life < 1) //SN src = null - del(src) + delete() if(newloc.density) return 0 .=..() @@ -132,7 +138,7 @@ steam.start() -- spawns the effect sleep(5) step(steam,direction) spawn(20) - del(steam) + steam.delete() ///////////////////////////////////////////// //SPARK SYSTEM (like steam system) @@ -155,7 +161,7 @@ steam.start() -- spawns the effect if (istype(T, /turf)) T.hotspot_expose(1000,100) spawn (100) - del(src) + delete() return /obj/effect/effect/sparks/Del() @@ -204,7 +210,7 @@ steam.start() -- spawns the effect sleep(5) step(sparks,direction) spawn(20) - del(sparks) + sparks.delete() src.total_sparks-- @@ -231,7 +237,7 @@ steam.start() -- spawns the effect /obj/effect/effect/harmless_smoke/New() ..() spawn (100) - del(src) + delete() return /obj/effect/effect/harmless_smoke/Move() @@ -275,7 +281,7 @@ steam.start() -- spawns the effect sleep(10) step(smoke,direction) spawn(75+rand(10,30)) - del(smoke) + smoke.delete() src.total_smoke-- @@ -298,7 +304,7 @@ steam.start() -- spawns the effect /obj/effect/effect/bad_smoke/New() ..() spawn (200+rand(10,30)) - del(src) + delete() return /obj/effect/effect/bad_smoke/Move() @@ -375,7 +381,7 @@ steam.start() -- spawns the effect sleep(10) step(smoke,direction) spawn(150+rand(10,30)) - del(smoke) + smoke.delete() src.total_smoke-- @@ -402,7 +408,7 @@ steam.start() -- spawns the effect R.my_atom = src spawn (200+rand(10,30)) - del(src) + delete() return /obj/effect/effect/chem_smoke/Move() @@ -504,7 +510,7 @@ steam.start() -- spawns the effect sleep(10) step(smoke,direction) spawn(150+rand(10,30)) - del(smoke) + smoke.delete() src.total_smoke-- @@ -528,7 +534,7 @@ steam.start() -- spawns the effect /obj/effect/effect/sleep_smoke/New() ..() spawn (200+rand(10,30)) - del(src) + delete() return /obj/effect/effect/sleep_smoke/Move() @@ -599,7 +605,7 @@ steam.start() -- spawns the effect sleep(10) step(smoke,direction) spawn(150+rand(10,30)) - del(smoke) + smoke.delete() src.total_smoke-- ///////////////////////////////////////////// @@ -727,7 +733,7 @@ steam.start() -- spawns the effect flick("ion_fade", I) I.icon_state = "blank" spawn( 20 ) - del(I) + I.delete() spawn(2) if(src.on) src.processing = 1 @@ -772,7 +778,7 @@ steam.start() -- spawns the effect src.oldposition = get_turf(holder) I.dir = src.holder.dir spawn(10) - del(I) + I.delete() src.number-- spawn(2) if(src.on) @@ -826,7 +832,7 @@ steam.start() -- spawns the effect flick("[icon_state]-disolve", src) sleep(5) - del(src) + delete() return // on delete, transfer any reagents to the floor @@ -872,7 +878,7 @@ steam.start() -- spawns the effect flick("[icon_state]-disolve", src) spawn(5) - del(src) + delete() /obj/effect/effect/foam/HasEntered(var/atom/movable/AM) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 68cb8f2df3..8bff463e44 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -15,7 +15,7 @@ proc/empulse(turf/epicenter, heavy_range, light_range, log=0) pulse.name = "emp pulse" pulse.anchored = 1 spawn(20) - del(pulse) + pulse.delete() if(heavy_range > light_range) light_range = heavy_range diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 4a8ce4887c..43d19213c8 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -40,7 +40,7 @@ var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) del(T) + spawn(8) T.delete() else playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) var/obj/O = new saved_item(src) @@ -59,7 +59,7 @@ var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src)) T.icon = 'icons/effects/effects.dmi' flick("emppulse",T) - spawn(8) del(T) + spawn(8) T.delete() proc/disrupt() if(active_dummy) diff --git a/code/game/objects/items/tk_grab.dm b/code/game/objects/items/tk_grab.dm index 11863e9ae2..1839460d92 100644 --- a/code/game/objects/items/tk_grab.dm +++ b/code/game/objects/items/tk_grab.dm @@ -92,7 +92,7 @@ O.icon_state = "nothing" flick("empdisable",O) spawn(5) - del(O) + O.delete() return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 3309b5b54d..a2738f1849 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -122,6 +122,17 @@ new /obj/item/weapon/storage/backpack/satchel_med(src) new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) + new /obj/item/clothing/shoes/white(src) + switch(pick("blue", "green", "purple")) + if ("blue") + new /obj/item/clothing/under/rank/medical/blue(src) + new /obj/item/clothing/head/surgery/blue(src) + if ("green") + new /obj/item/clothing/under/rank/medical/green(src) + new /obj/item/clothing/head/surgery/green(src) + if ("purple") + new /obj/item/clothing/under/rank/medical/purple(src) + new /obj/item/clothing/head/surgery/purple(src) new /obj/item/clothing/under/rank/chief_medical_officer(src) new /obj/item/clothing/suit/storage/labcoat/cmo(src) new /obj/item/weapon/cartridge/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index 4f7b6183a0..1875cb7628 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -303,7 +303,7 @@ icon_state = "white" icon_closed = "white" -/obj/structure/closet/wardrobe/virology_white/New() +/obj/structure/closet/wardrobe/medic_white/New() new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/under/rank/medical(src) new /obj/item/clothing/under/rank/medical/blue(src) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 25daafc9f4..62b8b84324 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -646,7 +646,7 @@ var/list/admin_verbs_mod = list( if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return - switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi and Tajaran can result in unintended consequences.",,"Yes","No")) + switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No")) if("No") return var/new_facial = input("Please select facial hair color.", "Character Generation") as color diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8f15102cdd..0d2832657e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -792,6 +792,10 @@ datum/preferences if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins new_species += "Skrell" whitelisted = 1 + if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins + new_species += "Vox" + whitelisted = 1 + if(!whitelisted) alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") @@ -799,6 +803,7 @@ datum/preferences new_species += "Tajaran" new_species += "Unathi" new_species += "Skrell" + new_species += "Vox" species = input("Please select a species", "Character Generation", null) in new_species if(prev_species != species) diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 3b07fc26ac..df35b4f9e8 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -45,22 +45,31 @@ if(!M) return if(!M.client) return var/client/C = M.client - var/icon/tempHud = 'icons/mob/hud.dmi' + var/image/holder for(var/mob/living/carbon/human/patient in view(M)) var/foundVirus = 0 for(var/datum/disease/D in patient.viruses) if(!D.hidden[SCANNER]) foundVirus++ if(!C) continue - C.images += image(tempHud, patient, "hud[RoundHealth(patient.health)]") + + holder = patient.hud_list[HEALTH_HUD] if(patient.stat == 2) - C.images += image(tempHud, patient, "huddead") - else if(patient.status_flags & XENO_HOST) - C.images += image(tempHud, patient, "hudxeno") - else if(foundVirus) - C.images += image(tempHud, patient, "hudill") + holder.icon_state = "hudhealth-100" else - C.images += image(tempHud, patient, "hudhealthy") + holder.icon_state = "hud[RoundHealth(patient.health)]" + C.images += holder + + holder = patient.hud_list[STATUS_HUD] + if(patient.stat == 2) + holder.icon_state = "huddead" + else if(patient.status_flags & XENO_HOST) + holder.icon_state = "hudxeno" + else if(foundVirus) + holder.icon_state = "hudill" + else + holder.icon_state = "hudhealthy" + C.images += holder /obj/item/clothing/glasses/hud/security @@ -80,41 +89,57 @@ if(!M) return if(!M.client) return var/client/C = M.client - var/icon/tempHud = 'icons/mob/hud.dmi' + var/image/holder for(var/mob/living/carbon/human/perp in view(M)) if(!C) continue var/perpname = perp.name + holder = perp.hud_list[ID_HUD] if(perp.wear_id) var/obj/item/weapon/card/id/I = perp.wear_id.GetID() if(I) - C.images += image(tempHud, perp, "hud[ckey(I.GetJobRealName())]") perpname = I.registered_name + holder.icon_state = "hud[ckey(I.GetJobName())]" + C.images += holder else perpname = perp.name - C.images += image(tempHud, perp, "hudunknown") + holder.icon_state = "hudunknown" + C.images += holder else - C.images += image(tempHud, perp, "hudunknown") + perpname = perp.name + holder.icon_state = "hudunknown" + C.images += holder for(var/datum/data/record/E in data_core.general) if(E.fields["name"] == perpname) + holder = perp.hud_list[WANTED_HUD] for (var/datum/data/record/R in data_core.security) if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) - C.images += image(tempHud, perp, "hudwanted") + holder.icon_state = "hudwanted" + C.images += holder break else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) - C.images += image(tempHud, perp, "hudprisoner") + holder.icon_state = "hudprisoner" + C.images += holder break else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled")) - C.images += image(tempHud, perp, "hudparolled") + holder.icon_state = "hudparolled" + C.images += holder break else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) - C.images += image(tempHud, perp, "hudreleased") + holder.icon_state = "hudreleased" + C.images += holder break for(var/obj/item/weapon/implant/I in perp) if(I.implanted) if(istype(I,/obj/item/weapon/implant/tracking)) - C.images += image(tempHud, perp, "hud_imp_tracking") + holder = perp.hud_list[IMPTRACK_HUD] + holder.icon_state = "hud_imp_tracking" + C.images += holder if(istype(I,/obj/item/weapon/implant/loyalty)) - C.images += image(tempHud, perp, "hud_imp_loyal") + holder = perp.hud_list[IMPLOYAL_HUD] + holder.icon_state = "hud_imp_loyal" + C.images += holder if(istype(I,/obj/item/weapon/implant/chem)) - C.images += image(tempHud, perp, "hud_imp_chem") + holder = perp.hud_list[IMPCHEM_HUD] + holder.icon_state = "hud_imp_chem" + C.images += holder \ No newline at end of file diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 2ccebe9ddc..893c8f47e5 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -65,7 +65,7 @@ name = "surgical cap" desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs." icon_state = "surgcap_blue" - flags = FPRINT | TABLEPASS + flags = FPRINT | TABLEPASS | BLOCKHAIR /obj/item/clothing/head/surgery/purple desc = "A cap surgeons wear during operations. Keeps thier hair from tickling your internal organs. This one is deep purple." diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index b9ab877f59..45e753c9ac 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -21,4 +21,70 @@ armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE \ No newline at end of file + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE + +// Vox space gear (vaccuum suit, low pressure armour) +// Can't be equipped by any other species due to bone structure and vox cybernetics. + +/obj/item/clothing/head/helmet/space/vox/pressure + name = "alien helmet" + icon_state = "vox-pressure" + item_state = "vox-pressure" + desc = "Hey, wasn't this a prop in \'The Abyss\'?" + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/suit/space/vox/pressure + name = "alien pressure suit" + icon_state = "vox-pressure" + item_state = "vox-pressure" + desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions." + w_class = 3 + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + slowdown = 2 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/head/helmet/space/vox/carapace + name = "alien visor" + icon_state = "vox-carapace" + item_state = "vox-carapace" + desc = "A glowing visor, perhaps stolen from a depressed Cylon." + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/suit/space/vox/carapace + name = "alien carapace armour" + icon_state = "vox-carapace" + item_state = "vox-carapace" + desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." + w_class = 3 + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + slowdown = 1 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/head/helmet/space/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/V = M + if(V.dna.mutantrace != "vox") + V << "This clearly isn't designed for your species!" + return 0 + return ..() + +/obj/item/clothing/suit/space/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/V = M + if(V.dna.mutantrace != "vox") + V << "This clearly isn't designed for your species!" + return 0 + + return ..() + +/obj/item/clothing/under/vox/vox_casual + name = "alien clothing" + desc = "This doesn't look very comfortable." + icon_state = "vox-casual-1" + color = "vox-casual-1" + item_state = "vox-casual-1" + +/obj/item/clothing/under/vox/vox_robes + name = "alien robes" + desc = "Weird and flowing!" + icon_state = "vox-casual-2" + color = "vox-casual-2" + item_state = "vox-casual-2" \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index f31802d4e0..b67b38324d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -103,6 +103,9 @@ icon_state = "hazard" item_state = "hazard" blood_overlay_type = "armor" + allowed = list (/obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/radio, /obj/item/device/t_scanner, \ + /obj/item/weapon/crowbar, /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, \ + /obj/item/weapon/tank/emergency_oxygen) //Lawyer /obj/item/clothing/suit/storage/lawyer/bluejacket @@ -150,16 +153,37 @@ return usr.update_inv_wear_suit() //so our overlays update +//Medical +/obj/item/clothing/suit/storage/fr_jacket + name = "first responder jacket" + desc = "A high-visibility jacket worn by medical first responders." + icon_state = "fr_jacket_open" + item_state = "fr_jacket" + blood_overlay_type = "armor" + allowed = list(/obj/item/stack/medical, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/hypospray, /obj/item/weapon/reagent_containers/syringe, \ + /obj/item/device/healthanalyzer, /obj/item/device/flashlight, /obj/item/device/radio, /obj/item/weapon/tank/emergency_oxygen) + + verb/toggle() + set name = "Toggle Jacket Buttons" + set category = "Object" + set src in usr + + if(!usr.canmove || usr.stat || usr.restrained()) + return 0 + + switch(icon_state) + if("fr_jacket_open") + src.icon_state = "fr_jacket" + usr << "You button up the jacket." + if("fr_jacket") + src.icon_state = "fr_jacket_open" + usr << "You unbutton the jacket." + usr.update_inv_wear_suit() //so our overlays update + //Mime /obj/item/clothing/suit/suspenders name = "suspenders" desc = "They suspend the illusion of the mime's play." icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" - blood_overlay_type = "armor" //it's the less thing that I can put here - -/obj/item/clothing/suit/storage/fr_jacket - name = "first responder jacket" - desc = "A high-visibility jacket worn by medical first responders." - icon_state = "fr_jacket_open" - item_state = "fr_jacket" + blood_overlay_type = "armor" //it's the less thing that I can put here \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 81e23b66e2..0869d85b39 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -90,6 +90,7 @@ name = "Virologist Labcoat" desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." icon_state = "labcoat_vir_open" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0) /obj/item/clothing/suit/storage/labcoat/science name = "Scientist Labcoat" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f20f5955d5..e8cdbe9a69 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -4,6 +4,7 @@ voice_name = "unknown" icon = 'icons/mob/human.dmi' icon_state = "body_m_s" + var/list/hud_list = list() /mob/living/carbon/human/dummy @@ -20,6 +21,9 @@ if(!dna) dna = new /datum/dna(null) + for(var/i=0;i<7;i++) // 2 for medHUDs and 5 for secHUDs + hud_list += image('icons/mob/hud.dmi', src, "hudunknown") + ..() if(dna) @@ -807,6 +811,8 @@ return "Tajaran" if("skrell") return "Skrell" + if("vox") + return "Vox" if("plant") return "Mobile vegetation" if("golem") @@ -822,6 +828,8 @@ return "Skrell" else if(src.dna.mutantrace == "tajaran") return "Tajaran" + else if(src.dna.mutantrace == "vox") + return "vox" /mob/living/carbon/proc/update_mutantrace_languages() if(src.dna) @@ -831,6 +839,8 @@ src.skrell_talk_understand = 1 else if(src.dna.mutantrace == "tajaran") src.tajaran_talk_understand = 1 + else if(src.dna.mutantrace == "vox") + src.vox_talk_understand = 1 /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) @@ -1101,4 +1111,4 @@ .=..() if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len) del(feet_blood_DNA) - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9ce3332540..be07fcba53 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -392,6 +392,7 @@ var/SA_para_min = 1 var/SA_sleep_min = 5 var/oxygen_used = 0 + var/nitrogen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME //Partial pressure of the O2 in our breath @@ -401,8 +402,10 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE //var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value + // Nitrogen, for Vox. + var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure - if(O2_pp < safe_oxygen_min) // Too little oxygen + if(O2_pp < safe_oxygen_min && src.dna.mutantrace!="vox") // Too little oxygen if(prob(20)) spawn(0) emote("gasp") if(O2_pp > 0) @@ -420,6 +423,19 @@ oxyloss += 5*ratio oxygen_used = breath.oxygen*ratio/6 oxygen_alert = max(oxygen_alert, 1)*/ + else if(Nitrogen_pp < safe_oxygen_min && src.dna.mutantrace=="vox") //Vox breathe nitrogen, not oxygen. + + if(prob(20)) + spawn(0) emote("gasp") + if(Nitrogen_pp > 0) + var/ratio = safe_oxygen_min/Nitrogen_pp + adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) + failed_last_breath = 1 + nitrogen_used = breath.nitrogen*ratio/6 + else + adjustOxyLoss(HUMAN_MAX_OXYLOSS) + failed_last_breath = 1 + oxygen_alert = max(oxygen_alert, 1) else // We're in safe limits failed_last_breath = 0 adjustOxyLoss(-5) @@ -427,6 +443,7 @@ oxygen_alert = 0 breath.oxygen -= oxygen_used + breath.nitrogen -= nitrogen_used breath.carbon_dioxide += oxygen_used //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. @@ -1029,7 +1046,7 @@ for(var/image/hud in client.images) if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe - del(hud) + client.images.Remove(hud) client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index c765bf9711..c506b35250 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -313,6 +313,8 @@ proc/get_damage_icon_part(damage_state, body_part) //Eyes if(!skeleton) var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") + if(src.get_species()=="Vox") + eyes_s = new/icon('icons/mob/human_face.dmi', "vox_eyes_s") eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) stand_icon.Blend(eyes_s, ICON_OVERLAY) @@ -442,6 +444,9 @@ proc/get_damage_icon_part(damage_state, body_part) if("skrell") race_icon = 'icons/mob/human_races/r_skrell.dmi' deform_icon = 'icons/mob/human_races/r_def_skrell.dmi' + if("vox") + race_icon = 'icons/mob/human_races/r_vox.dmi' + deform_icon = 'icons/mob/human_races/r_def_vox.dmi' else race_icon = 'icons/mob/human_races/r_human.dmi' deform_icon = 'icons/mob/human_races/r_def_human.dmi' diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 12262202f6..420e20a1b9 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -18,6 +18,7 @@ var/list/department_radio_keys = list( ":k" = "skrell", "#k" = "skrell", ".k" = "skrell", ":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran", ":o" = "soghun", "#o" = "soghun", ".o" = "soghun", + ":v" = "vox", "#v" = "vox", ".v" = "vox", ":R" = "right hand", "#R" = "right hand", ".R" = "right hand", ":L" = "left hand", "#L" = "left hand", ".L" = "left hand", @@ -37,6 +38,7 @@ var/list/department_radio_keys = list( ":K" = "skrell", "#K" = "skrell", ".K" = "skrell", ":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran", ":O" = "soghun", "#O" = "soghun", ".O" = "soghun", + ":V" = "vox", "#V" = "vox", ".V" = "vox", //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. @@ -185,6 +187,7 @@ var/list/department_radio_keys = list( var/is_speaking_skrell = 0 var/is_speaking_soghun = 0 var/is_speaking_taj = 0 + var/is_speaking_vox = 0 var/is_speaking_radio = 0 switch (message_mode) @@ -283,6 +286,10 @@ var/list/department_radio_keys = list( if(skrell_talk_understand || universal_speak) is_speaking_skrell = 1 + if ("vox") + if(vox_talk_understand || universal_speak) + is_speaking_vox = 1 + if("changeling") if(mind && mind.changeling) for(var/mob/Changeling in mob_list) @@ -370,7 +377,7 @@ var/list/department_radio_keys = list( for (var/M in listening) if(hascall(M,"say_understands")) - if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_taj) + if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_vox && !is_speaking_taj) heard_a += M else if(ismob(M)) if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak)) @@ -379,6 +386,8 @@ var/list/department_radio_keys = list( heard_a += M else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak)) heard_a += M + else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak)) + heard_a += M else heard_b += M else @@ -394,7 +403,7 @@ var/list/department_radio_keys = list( var/rendered = null if (length(heard_a)) - var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj) + var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) if (italics) message_a = "[message_a]" @@ -419,7 +428,7 @@ var/list/department_radio_keys = list( message_b = voice_message else message_b = stars(message) - message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj) + message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) if (italics) message_b = "[message_b]" diff --git a/code/modules/mob/living/silicon/pai/hud.dm b/code/modules/mob/living/silicon/pai/hud.dm index c900ef60a8..328d54b2fc 100644 --- a/code/modules/mob/living/silicon/pai/hud.dm +++ b/code/modules/mob/living/silicon/pai/hud.dm @@ -2,36 +2,53 @@ if(client) for(var/image/hud in client.images) if(copytext(hud.icon_state,1,4) == "hud") - del(hud) + client.images -= hud /mob/living/silicon/pai/proc/securityHUD() if(client) - var/icon/tempHud = 'icons/mob/hud.dmi' + var/image/holder var/turf/T = get_turf_or_move(src.loc) for(var/mob/living/carbon/human/perp in view(T)) + var/perpname = "wot" + holder = perp.hud_list[ID_HUD] if(perp.wear_id) - client.images += image(tempHud,perp,"hud[ckey(perp:wear_id:GetJobRealName())]") - var/perpname = "wot" - if(istype(perp.wear_id,/obj/item/weapon/card/id)) - perpname = perp.wear_id:registered_name - else if(istype(perp.wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = perp.wear_id - perpname = tempPda.owner - for (var/datum/data/record/E in data_core.general) - if (E.fields["name"] == perpname) - for (var/datum/data/record/R in data_core.security) - if ((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) - client.images += image(tempHud,perp,"hudwanted") - break - else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) - client.images += image(tempHud,perp,"hudprisoner") - break + var/obj/item/weapon/card/id/I = perp.wear_id.GetID() + if(I) + perpname = I.registered_name + holder.icon_state = "hud[ckey(perp:wear_id:GetJobName())]" + client.images += holder + else + perpname = perp.name + holder.icon_state = "hudunknown" + client.images += holder else - client.images += image(tempHud,perp,"hudunknown") + holder.icon_state = "hudunknown" + client.images += holder + + for(var/datum/data/record/E in data_core.general) + if(E.fields["name"] == perpname) + holder = perp.hud_list[WANTED_HUD] + for(var/datum/data/record/R in data_core.security) + if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "*Arrest*")) + holder.icon_state = "hudwanted" + client.images += holder + break + else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Incarcerated")) + holder.icon_state = "hudprisoner" + client.images += holder + break + else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Parolled")) + holder.icon_state = "hudparolled" + client.images += holder + break + else if((R.fields["id"] == E.fields["id"]) && (R.fields["criminal"] == "Released")) + holder.icon_state = "hudreleased" + client.images += holder + break /mob/living/silicon/pai/proc/medicalHUD() if(client) - var/icon/tempHud = 'icons/mob/hud.dmi' + var/image/holder var/turf/T = get_turf_or_move(src.loc) for(var/mob/living/carbon/human/patient in view(T)) @@ -40,15 +57,24 @@ if(!D.hidden[SCANNER]) foundVirus = 1 - client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]") + holder = patient.hud_list[HEALTH_HUD] if(patient.stat == 2) - client.images += image(tempHud,patient,"huddead") - else if(patient.status_flags & XENO_HOST) - client.images += image(tempHud,patient,"hudxeno") - else if(foundVirus) - client.images += image(tempHud,patient,"hudill") + holder.icon_state = "hudhealth-100" + client.images += holder else - client.images += image(tempHud,patient,"hudhealthy") + holder.icon_state = "hud[RoundHealth(patient.health)]" + client.images += holder + + holder = patient.hud_list[STATUS_HUD] + if(patient.stat == 2) + holder.icon_state = "huddead" + else if(patient.status_flags & XENO_HOST) + holder.icon_state = "hudxeno" + else if(foundVirus) + holder.icon_state = "hudill" + else + holder.icon_state = "hudhealthy" + client.images += holder /mob/living/silicon/pai/proc/RoundHealth(health) switch(health) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index edef1e910b..a4d6cdc748 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -160,7 +160,7 @@ for(var/image/hud in client.images) //COPIED FROM the human handle_regular_hud_updates() proc if(copytext(hud.icon_state,1,4) == "hud") //ugly, but icon comparison is worse, I believe - del(hud) + client.images.Remove(hud) var/obj/item/borg/sight/hud/hud = (locate(/obj/item/borg/sight/hud) in src) if(hud && hud.hud) hud.hud.process_hud(src) diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index c9f52de2be..6fd7db5d10 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -61,7 +61,7 @@ stop_automated_movement = 1 stance_step++ if(stance_step >= 10) //rests for 10 ticks - if(target_mob && target_mob in ListTargets()) + if(target_mob && target_mob in ListTargets(10)) stance = HOSTILE_STANCE_ATTACK //If the mob he was chasing is still nearby, resume the attack, otherwise go idle. else stance = HOSTILE_STANCE_IDLE @@ -69,7 +69,7 @@ if(HOSTILE_STANCE_ALERT) stop_automated_movement = 1 var/found_mob = 0 - if(target_mob && target_mob in ListTargets()) + if(target_mob && target_mob in ListTargets(10)) if(!(SA_attackable(target_mob))) stance_step = max(0, stance_step) //If we have not seen a mob in a while, the stance_step will be negative, we need to reset it to 0 as soon as we see a mob again. stance_step++ diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 669541687f..3b82b64540 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -100,7 +100,7 @@ ..() if(!stat) if(stance == HOSTILE_STANCE_IDLE) - var/list/can_see = ListTargets() + var/list/can_see = view(src, 10) //30% chance to stop wandering and do something if(!busy && prob(30)) //first, check for potential food nearby to cocoon diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index b8c5d4150b..403c31b17f 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -18,7 +18,7 @@ var/atom/T = null stop_automated_movement = 0 - for(var/atom/A in ListTargets()) + for(var/atom/A in ListTargets(10)) if(A == src) continue @@ -40,7 +40,7 @@ T = L break - if(istype(A, /obj/mecha)) + else if(istype(A, /obj/mecha)) // Our line of sight stuff was already done in ListTargets(). var/obj/mecha/M = A if (M.occupant) stance = HOSTILE_STANCE_ATTACK @@ -63,7 +63,7 @@ stop_automated_movement = 1 if(!target_mob || SA_attackable(target_mob)) stance = HOSTILE_STANCE_IDLE - if(target_mob in ListTargets()) + if(target_mob in ListTargets(10)) if(ranged) if(get_dist(src, target_mob) <= 6) OpenFire(target_mob) @@ -79,7 +79,7 @@ if(!target_mob || SA_attackable(target_mob)) LoseTarget() return 0 - if(!(target_mob in ListTargets())) + if(!(target_mob in ListTargets(10))) LostTarget() return 0 if(get_dist(src, target_mob) <= 1) //Attacking @@ -109,8 +109,10 @@ walk(src, 0) -/mob/living/simple_animal/hostile/proc/ListTargets() - return view(src, 10) +/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7) + var/list/L = hearers(src, dist) + L += mechas_list + return L /mob/living/simple_animal/hostile/Die() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index a910e74f5f..fb1d63ca34 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -77,7 +77,7 @@ /mob/living/simple_animal/hostile/mimic/crate/ListTargets() if(attempt_open) - return view(src, 10) + return ..() return view(src, 1) /mob/living/simple_animal/hostile/mimic/crate/FindTarget() @@ -149,7 +149,8 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ListTargets() // Return a list of targets that isn't the creator - return view(src, 7) - creator + . = ..() + return . - creator /mob/living/simple_animal/hostile/mimic/copy/proc/CopyObject(var/obj/O, var/mob/living/creator) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 882714cd0e..9715e6ed20 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -211,6 +211,7 @@ var/tajaran_talk_understand = 0 var/soghun_talk_understand = 0 var/skrell_talk_understand = 0 + var/vox_talk_understand = 0 var/has_limbs = 1 //Whether this mob have any limbs he can move with var/can_stand = 1 //Whether this mob have ability to stand diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 5ba8a959b9..686007c717 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -349,6 +349,10 @@ if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "skrell" new_character.skrell_talk_understand = 1 + if(client.prefs.species == "Vox") + if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) + new_character.dna.mutantrace = "vox" + new_character.vox_talk_understand = 1 if(ticker.random_players) new_character.gender = pick(MALE, FEMALE) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 8794b6342c..f1cf54af15 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -144,6 +144,8 @@ datum/preferences icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' + if("Vox") + icobase = 'icons/mob/human_races/r_vox.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' preview_icon = new /icon(icobase, "torso_[g]") @@ -172,6 +174,9 @@ datum/preferences preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s") + if(species=="Vox") + eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s") + eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 78d0c509cd..4d4baf0ba1 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -306,7 +306,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell") + species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox") watson name = "Watson Mustache" @@ -493,6 +493,11 @@ icon_state = "hair_messy" species_allowed = list("Tajaran") + vox_quills_short + name = "Short Vox Quills" + icon_state = "vox_shortquills" + species_allowed = list("Vox") + /datum/sprite_accessory/facial_hair taj_sideburns diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8a28152a23..9f3660eb7c 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -69,7 +69,7 @@ return 1 return 0 -/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran) +/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox) if(!text) return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code //tcomms code is still runtiming somewhere here @@ -80,6 +80,8 @@ return "warbles, \"[text]\""; if (is_speaking_tajaran) return "mrowls, \"[text]\""; + if (is_speaking_vox) + return "chirps, \"[text]\""; //Needs Virus2 // if (src.disease_symptoms & DISEASE_HOARSE) // return "rasps, \"[text]\""; diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 78d7ea5615..4d0e8bfac3 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -740,6 +740,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base = new('icons/mob/human_races/r_lizard.dmi') if("skrell") base = new('icons/mob/human_races/r_skrell.dmi') + if("vox") + base = new('icons/mob/human_races/r_vox.dmi') else base = new('icons/mob/human_races/r_human.dmi') if(base) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index ebd6a1e512..2b4b4c457d 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -74,7 +74,7 @@ var/mob/living/carbon/human/H = new_mob if(H.dna) - H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant",4;"") + H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"") else return diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index b274e09ffd..68cb8c4e2a 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -515,6 +515,12 @@ datum //world << "reagent data set ([reagent_id])" D.data = new_data + delete() + for(var/datum/reagent/R in reagent_list) + R.holder = null + if(my_atom) + my_atom.reagents = null + /////////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index e839cf34a8..55c255d42d 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -512,7 +512,7 @@ datum if(!M) M = holder.my_atom M.druggy = max(M.druggy, 15) if(isturf(M.loc) && !istype(M.loc, /turf/space)) - if(M.canmove) + if(M.canmove && !M.restrained()) if(prob(10)) step(M, pick(cardinal)) if(prob(7)) M.emote(pick("twitch","drool","moan","giggle")) holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM) @@ -642,7 +642,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - if(M.canmove && istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) step(M, pick(cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) ..() @@ -728,7 +728,7 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - if(M.canmove && istype(M.loc, /turf/space)) + if(M.canmove && !M.restrained() && istype(M.loc, /turf/space)) step(M, pick(cardinal)) if(prob(5)) M.emote(pick("twitch","drool","moan")) ..() @@ -927,6 +927,13 @@ datum on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom M.apply_effect(2*REM,IRRADIATE,0) + // radium may increase your chances to cure a disease + if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs + if(M:virus2 && prob(5)) + if(prob(50)) + M.radiation += 50 // curing it that way may kill you instead + M.adjustToxLoss(100) + M:antibodies |= M:virus2.antigen ..() return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 2d8db6670c..fd109b259c 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -5,6 +5,9 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null + // type paths referencing mutantraces that this step applies to. + var/list/allowed_species = null + var/list/disallowed_species = null // duration of the step var/min_duration = 0 @@ -22,6 +25,21 @@ return allowed_tools[T] return 0 + // Checks if this step applies to the mutantrace of the user. + proc/is_valid_mutantrace(mob/living/carbon/human/target) + + if(allowed_species) + for(var/species in allowed_species) + if(target.dna.mutantrace == species) + return 1 + + if(disallowed_species) + for(var/species in disallowed_species) + if (target.dna.mutantrace == species) + return 0 + + return 1 + // checks whether this step can be applied with the given user and target proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) return 0 @@ -63,7 +81,7 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) return 0 for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible - if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool)) + if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_mutantrace(M)) S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it //We had proper tools! (or RNG smiled.) and User did not move or change hands. if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) diff --git a/code/setup.dm b/code/setup.dm index 6a66858061..c72f57f880 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -668,4 +668,13 @@ var/list/be_special_flags = list( #define LANGUAGE_UNIVERSAL 65535 #define LEFT 1 -#define RIGHT 2 \ No newline at end of file +#define RIGHT 2 + +// for secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans. +#define HEALTH_HUD 1 // dead, alive, sick, health status +#define STATUS_HUD 2 // a simple line rounding the mob's number health +#define ID_HUD 3 // the job asigned to your ID +#define WANTED_HUD 4 // wanted, released, parroled, security status +#define IMPLOYAL_HUD 5 // loyality implant +#define IMPCHEM_HUD 6 // chemical implant +#define IMPTRACK_HUD 7 // tracking implant diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 2481e247af..902160e9ef 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -55,6 +55,7 @@ h1.alert, h2.alert {color: #000000;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .soghun {color: #228B22;} +.vox {color: #AA00AA;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .interface {color: #330033;} diff --git a/config/admins.txt b/config/admins.txt index b2ff2178a4..fa503a4380 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -32,4 +32,4 @@ strumpetplaya - Retired Admin tastyfish - Retired Admin uristqwerty - Game Master wrongnumber - Game Admin -mij - Game Admin +mij - Game Admin \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index 5719ed0963..c4068643a9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1,658 +1,658 @@ - - - - Baystation 12 Changelog - - - - - - - -
- - - - -
-
Baystation 12 - A Space Station 13 Server
-

-
Visit our IRC channel: #bs12 on irc.sorcery.net
- Code licensed under GPLv3. Content licensed under CC BY-SA 3.0.

- -By playing to agreed to read and abide by the rules!
- -
-
Baystation 12 Credit List - - - - -
- Code: Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
- Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone
- Sounds: Aryn
- Thanks To: /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot. -
- - - - - - - -
-

1.06.2013

-

Chinsky updated:

-
    -
  • Bloody footprints! Now stepping in the puddle will dirty your shoes/feet and make you leave bloody footprints for a bit.
  • -
  • Blood now dries up after some time. Puddles take ~30 minutes, small things 5 minutes.
  • -
  • Untreated wounds now heal. No more toe stubs spamming you with pain messages for the rest of the shift.
  • -
  • On the other side, everything is healed slowly. Maximum you cna squeeze out of first aid is 0.5 health per tick per organ. Lying down makes it faster too, by 1.5x factor.
  • -
  • Lids! Click beaker/bottle in hand to put them on/off. Prevent spilling
  • -
  • Added 'hailer' to security lockers. If used in hand, says "Halt! Security!". For those who can't run and type.
  • -
-
- -
-

31.05.2013

-

Segrain updated:

-
    -
  • Portable canisters now properly connect to ports beneath them on map load.
  • -
  • Fixed unfastening gas meters.
  • -
-
- -
-

30th May 2013

-

proliberate updated:

-
    -
  • Station time is now displayed in the status tab for new players and AIs.
  • -
-
- -
-

30.05.2013

-

Segrain updated:

-
    -
  • Meteor showers actually spawn meteors now.
  • -
  • Engineering tape fits into toolbelt and can be placed on doors.
  • -
  • Pill bottles can hold paper.
  • -
-
- -
-

May 28th, 2013

-

VitrescentTortoise updated:

-
    -
  • Wizard's forcewall now works.
  • -
-
    -
  • Xenoarchaeology picksets can now hold everything they started with.
  • -
-
-
-

28th May 2013

-

Erthilo updated:

-
    -
  • Fixes everyone being able to understand alien languages. HERE IS YOUR TOWER OF BABEL
  • -
-
- -
-

26th May 2013

-

Chinsky updated:

-
    -
  • Tentacles! Now clone damage will make you horribly malformed like examine text says.
  • -
-

VitrescentTortoise updated:

-
    -
  • Added a third option for not getting any job preferences. It allows you to return to the lobby instead of joining.
  • -
-
- -
-

5/26/2013

-

Meyar updated:

-
    -
  • The syndicate shuttle now has a cycling airlock during Nuke rounds.
  • -
  • Restored the ability for the syndicate Agent ID to change the name on the card (reforge it) more than once.
  • -
  • ERT Radio now functional again.
  • -
  • Research blast doors now actually lock down the entirety of station-side Research.
  • -
  • Added lock down buttons to the wardens office.
  • -
  • The randomized barsign has made a return.
  • -
  • Syndicate Agent ID's external airlock access restored.
  • -
-
- -
-

25th May 2013

-

Erthilo updated:

-
    -
  • Fixes alien races appearing an unknown when speaking their language.
  • -
  • Fixes alien races losing their language when cloned.
  • -
  • Fixes UI getting randomly reset when trying to change it in Genetics Scanners.
  • -
-
- -
-

21 May 2013

-

SkyMarshal updated:

-
    -
  • ZAS will now speed air movement into/out of a zone when unsimulated tiles (e.g. space) are involved, in relation to the number of tiles.
  • -
  • Portable Canisters will now automatically connect to any portable connecter beneath them on map load.
  • -
  • Bug involving mis-mapped disposal junction fixed
  • -
  • Air alarms now work for atmos techs (whoops!)
  • -
  • The Master Controller now properly stops atmos when it runtimes.
  • -
  • Backpacks can no longer be contaminated
  • -
  • ZAS no longer logs air statistics.
  • -
  • ZAS now rebuilds as soon as it detects a semi-complex change in geometry. (It was doing this already, but in a convoluted way which was actually less efficient)
  • -
  • General code cleanup/commenting of ZAS
  • -
  • Jungle now initializes after the random Z-level loads and atmos initializes.
  • -
-
- -
-

May 18th, 2013

-

CIB updated:

-
    -
  • A new event type: Wallrot. Use welder or plantbgone on infected walls.
  • -
  • Newscasters now can deliver preset news stories over the course of a round. See http://baystation12.net/forums/viewtopic.php?f=14&t=7619 to add your own!
  • -
-
- -
-

April 24, 2013

-

Jediluke69 updated:

-
    -
  • Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter)
  • -
  • Nanopaste now heals about half of what it used to
  • -
  • Ballistic crates should now come with shotguns loaded with actual shells no more beanbags
  • -
  • Iced tea no longer makes a glass of .what?
  • -
-
- -
-

April 24, 2013

-

faux updated:

-
    -
  • Mixed Wardrobe Closet now has colored shoes and plaid skirts.
  • -
  • Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A uniform jacket has also been added to the Captain's closet. HoS' hat has been re-added to their closet. I do not love the CMO and CE enough to give them anything.
  • -
  • Atheletic closet now has five different swimsuits *for the ladies* in them. If you are a guy, be prepared to be yelled at if you run around like a moron in one of these. Same goes for ladies who run around in shorts with their titties swaying in the space winds.
  • -
  • A set of dispatcher uniforms will spawn in the security closet. These are for playtesting the dispatcher role.
  • -
  • New suit spawns in the laundry room. It's for geezer's only. You're welcome, Book.
  • -
  • Nurse outfit variant, orderly uniform, and first responder jacket will now spawn in the medical wardrobe closet.
  • -
  • A white wedding dress will spawn in the chaplain's closet. There are also several dresses currently only adminspawnable. Admins: Look either under "bride" or "dress." The bride one leads to the colored wedding dresses, and there are some other kinds of dresses under dress.
  • -
  • No more luchador masks or boxing gloves or boxing ring. You guys have a swimming pool now, dip in and enjoy it.
  • -
  • he meeting hall has been replaced with an awkwardly placed security office meant for prisoner processing.
  • -
  • Added a couple more welding goggles to engineering since you guys liked those a lot.
  • -
  • Flasks spawn behind the bar. Only three. Don't fight over them. I don't know how to add them to the bar vending machine otherwise I would have done that instead. Detective, you have your own flask in your office, it's underneath the cigarettes on your desk.
  • -
  • Added two canes to the medical storage, for people who have leg injuries and can't walk good and stuff. I do not want to see doctors pretending to be House. These are for patients. Do not make me delete this addition and declare you guys not being able to have nice things.
  • -
  • Secondary entance to EVA now directly leads into the medbay hardsuit section. Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits whenever they want.
  • -
  • Secondary security hardsuit has been added to the armory. Security members please stop stealing engineer's hardsuits when you guys want to pair up for space travel.
  • -
  • Firelocks have been moved around in the main hallways to form really ghetto versions of airlocks.
  • -
  • Violin spawns in theatre storage now. I didn't put the piano there though, that was someone else.
  • -
  • Psych office in medbay has been made better looking.
  • -
-
- -
-

24th April 2013

-

NerdyBoy1104 updated:

-
    -
  • New Botany additions: Rice and Plastellium. New sheet material: Plastic.
  • -
  • Plastellium is refined into plastic by first grinding the produce to get plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which can be used to make crates, forks, spoons, knives, ashtrays or plastic bags from.
  • -
  • Rice seeds grows into rice stalks that you grind to get rice. 10 Rice + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + 5 universal enzyme (in beaker) makes Sake.
  • -
-
- -
-

Spamcat

-

04.05.2013 updated:

-
    -
  • Blood type is now saved in character creation menu, no need to edit it manually every round.
  • -
-
- -
-

17 April 2013

-

SkyMarshal updated:

-
    -
  • ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.
  • -
  • World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)
  • -
  • Zones will now equalize air more rapidly.
  • -
  • ZAS now respects active magboots when airflow occurs.
  • -
  • Airflow will no longer throw you into doors and open them.
  • -
  • Race condition in zone construction has been fixed, so zones connect properly at round start.
  • -
  • Plasma effects readded.
  • -
  • Fixed runtime involving away mission.
  • -
-
- -
-

17 April 2013

-

SkyMarshal updated:

-
    -
  • ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.
  • -
  • World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)
  • -
  • Zones will now equalize air more rapidly.
  • -
  • ZAS now respects active magboots when airflow occurs.
  • -
  • Airflow will no longer throw you into doors and open them.
  • -
  • Race condition in zone construction has been fixed, so zones connect properly at round start.
  • -
  • Plasma effects readded.
  • -
  • Fixed runtime involving away mission.
  • -
-
- -
-

30.04.2013

-

Spamcat updated:

-
    -
  • Pill bottle capacity increased to 14 items.
  • -
  • Fixed Lamarr (it now spawns properly)
  • -
-
- -
-

15.04.2013

-

Spamcat updated:

-
    -
  • Added telescopic batons to HoS's and captain's lockers. These are quite robust and easily concealable.
  • -
-
- -
-

May 14th 2013

-

Cael_Aislinn updated:

-
    -
  • Depth scanners can now be used to determine what material archaeological deposits are made of, meaning lab analysis is no longer required.
  • -
  • Some useability issues with xenoarchaeology tools have been resolved, and the transit pods cycle automatically now.
  • -
-
- -
-

11 April 2013

-

SkyMarshal updated:

-
    -
  • Fire has been reworked.
  • -
  • In-game variable editor is both readded and expanded with fire controlling capability.
  • -
-
- -
-

9 April 2013

-

SkyMarshal updated:

-
    -
  • Fire Issues (Firedoors, Flamethrowers, Incendiary Grenades) fixed.
  • -
  • Fixed a bad line of code that was preventing autoignition of flammable gas mixes.
  • -
  • Volatile fuel is burned up after a point.
  • -
  • Partial-tile firedoors removed. This is due to ZAS breaking when interacting with them.
  • -
-
- -
-

4 April 2013

-

SkyMarshal updated:

-
    -
  • Fixed ZAS
  • -
  • Fixed Fire
  • -
-
- -
-

March 27th 2013

-

Asanadas updated:

-
    -
  • The Null Rod has recovered its de-culting ability, for balance reasons. Metagaming with it is a big no-no!
  • -
  • Holy Water as a liquid is able to de-cult. Less effective, but less bloody. May be changed over the course of time for balance.
  • -
-
- -
-

26.03.2013

-

Spamcat updated:

-
    -
  • Chemmaster now puts pills in pill bottles (if one is inserted).
  • -
  • Stabbing someone with a syringe now deals 3 damage instead of 7 because 7 is like, a crowbar punch.
  • -
  • Lizards can now join mid-round again.
  • -
  • Chemicals in bloodstream will transfer with blood now, so don't get drunk before your blood donation. Viruses and antibodies transfer through blood too.
  • -
  • Virology is working again.
  • -
-
- -
-

March 15th 2013

-

Cael_Aislinn updated:

-
    -
  • Mapped a compact research base on the mining asteroid, with multiple labs and testing rooms. It's reachable through a new (old) shuttle dock that leaves from the research wing on the main station.
  • -
-
- -
-

14.03.2013

-

Spamcat updated:

-
    -
  • Figured I should make one of these. Syringestabbing now produces a broken syringe complete with fingerprints of attacker and blood of a victim, so dispose your evidence carefully. Maximum transfer amount per stab is lowered to 10.
  • -
-
- -
-

11/03/2013

-

Chinsky updated:

-
    -
  • Sec HUDs now can see short versions of sec records.on examine. Med HUDs do same for medical records, and can set medical status of patient.
  • -
  • Damage to the head can now cause brain damage.
  • -
-
- -
-

March 11th 2013

-

CIB updated:

-
    -
  • Cloning now requires you to put slabs of meat into the cloning pod to replenish biomass.
  • -
-
- -
-

March 11th 2013

-

Cael Aislinn updated:

-
    -
  • The xenoarchaeology update is here. This includes a major content overhaul and a bunch of new features for xenoarchaeology.
  • -
  • Digsites (strange rock deposits) are now much more nuanced and interesting, and a huge number of minor (non-artifact) finds have been added.
  • -
  • Excavation is now a complex process that involves digging into the rock to the right depth.
  • -
  • Chemical analysis is required for safe excavation of the digsites, in order to determine how best to extract the finds.
  • -
  • Anomalous artifacts have been overhauled and many longstanding bugs with existing effects have been fixed - the anomaly utiliser should now work much more often.
  • -
  • Numerous new artifact effects have been added and some new artifact types can be dug up from the asteroid.
  • -
  • New tools and equipment have been added, including normal and spaceworthy versions of the anomaly suits, excavation tools and other neat gadgets.
  • -
  • Five books have been written by subject matter experts from around the galaxy to help the crew of the Exodus come to grips with this exacting new science (over 3000 words of tutorials!).
  • -
-
- -
-

March 9th 2013

-

Cael Aislinn updated:

-
    -
  • Beekeeping is now possible. Construct an apiary of out wood and embed it into a hydroponics tray, then get a queen bee and bottle of BeezEez from cargo bay. - Hives produce honey and honeycomb, but be wary if the bees start swarming.
  • -
-
- -
-

March 6th 2013

-

Cael Aislinn updated:

-
    -
  • Type 1 thermoelectric generators and the associated binary circulators are now moveable (wrench to secure/unsecure) and orderable via Quartermaster.
  • -
  • code/maps/rust_test.dmm contains an example setup for a functional RUST reactor. Maximum output is in the range of 12 to 20MW (12 to 20 million watts).
  • -
  • Removed double announcement for gridchecks, reduced duration of gridchecks.
  • -
-

RavingManiac updated:

-
    -
  • You can now stab people with syringes using the "harm" intent. This destroys the syringe and transfers a random percentage of its contents into the target. Armor has a 50% chance of blocking the syringe.
  • -
-
- -
-

March 5th 2013

-

Cael Aislinn updated:

-
    -
  • Set roundstart music to randomly choose between space.ogg and traitor.ogg (see http://baystation12.net/forums/viewtopic.php?f=5&t=6972)
  • -
  • All RUST components except for TEGs (which generate the power) are now obtainable ingame, bored engineers should get hold of them and setup an experimental reactor for testing purposes.
  • -
-

CIB updated:

-
    -
  • Added internal organs. They're currently all located in the chest. Use advanced scanner to detect damage. Use the same surgery as for ruptured lungs to fix them.
  • -
-
- -
-

February 27th 2013

-

Gamerofthegame updated:

-
    -
  • Added the (base gear) ERT preset for the debug command.
  • -
  • Map fixes, Virology hole fixed. Atmospheric fixes for mining and, to a less extent, the science outpost. (No, not cycling airlocks)
  • -
  • Fiddled with the ERT set up location on Centcom. Radmins will now have a even easier time equiping a team of any real pratical size, especially coupled with the above debug command.
  • -
-
- -
-

February 25th 2013

-

Cael Aislinn updated:

-
    -
  • As well as building hull shield generators, normal shield gens can now be built (see http://baystation12.net/forums/viewtopic.php?f=1&t=6993).
  • -
  • New random events: multiple new system wide-events have been have been added to the newscaster feeds, some not quite as respectable as others.
  • -
  • New random event: some lucky winners will win the TC Daily Grand Slam Lotto, while others may be the target of malicious hackers.
  • -
-
- -
-

February 23rd 2013

-

Cael Aislinn updated:

-
    -
  • Finances! Players spawn with an account, and money can be transferred between accounts, withdrawn/deposited at ATMs and charged to accounts via EFTPOS scanners.

    - All players start with 500-5000 credits, credits can no longer be merged and only credits can be deposited into ATMs - so shelter your illegitimately gotten gains in physical assets and remember that fraud is frowned upon!
  • -
  • Turrets are no longer noiseless as the grave. Listen for the sound of machinery in their proximity.
  • -
-
- -
-

February 23rd 2013

-

Cael Aislinn updated:

-
    -
  • RUST machinery components should now be researchable (with high requirements) and orderable through QM (with high cost).
  • -
  • Shield machinery should now be researchable (with high requirements) and orderable through QM (with high cost). This one is reportedly buggy.
  • -
  • Rogue vending machines should revert back to normal at the end of the event.
  • -
  • New Unathi hair styles.
  • -
-
- -
-

22/02/2013

-

Chinsky updated:

-
    -
  • Change to body cavity surgery. Can only put items in chest, groind and head. Max size for item - 3 (chest), 2 (groin), 1 (head). For chest surgery ribs should be bent open, (lung surgery until second scalpel step). Surgery step needs preparation step, with drill. After that you can place item inside, or seal it with cautery to do other step instead.
  • -
-
- -
-

February 18th 2013

-

Cael Aislinn updated:

-
    -
  • All RUST components are now buildable/orderable, with very high requirements (except for the TEGs). Emitters have replaced gyrotrons, for now.
  • -
  • Fixed up shield generators and made them buildable, with circuits obtainable through RnD. Hull shield gens project along space tiles adjacent to the hull (must be adjacent to a space tile to work).
  • -
-
- -
-

20/02/2013

-

Chinsky updated:

-
    -
  • Added new surgery: putting items inside people. After you use retractor to keep incision open, just click with any item to put it inside. But be wary, if you try to fit something too big, you might rip the veins. To remove items, use implant removal surgery.
  • -
  • Crowbar can be used as alternative to retractor.
  • -
  • Can now unload guns by clicking them in hand.
  • -
  • Fixed distance calculation in bullet missing chance computation, it was always assuming 1 or 0 tiles. Now distace REALLY matters when you shoot.
  • -
  • To add more FUN to previous thing, bullets missed to not disappear but keep going until they hit something else.
  • -
  • Compressed Matter and Explosive implants spawn properly now.
  • -
  • Tweaks to medical effects: removed itch caused by bandages. Chemical effects now have non-100 chance of appearing, the stronger medicine, the more probality it'll have side effects.
  • -
-
- -
-

February 18th 2013

-

Cael Aislinn updated:

-
    -
  • Security bots will now target hostile mobs, and vice versa.
  • -
  • Carp should actually emigrate now, instead of just immigrating then squatting around the outer hull.
  • -
  • Admins and moderators have been split up into separate 'who' verbs (adminwho and modwho respectively).
  • -
-
- -
-

February 14th 2013

-

CIB updated:

-
    -
  • Medical side-effects(patients are going to come back for secondary treatment)
  • -
  • NT loyalty setting(affects command reports and gives antags hints who might collaborate with them)
  • -
  • Simple animal balance fixes(They're slower now)
  • -
-

CaelAislinn updated:

-
    -
  • Re-added old ion storm laws, re-added grid check event.
  • -
  • Added Rogue Drone and Vermin Infestation random events.
  • -
  • Added/fixed space vines random event.
  • -
  • Updates to the virus events.
  • -
  • Spider infestation and alien infestation events turned off by default.
  • -
  • Soghun, taj and skrell all have unique language text colours.
  • -
  • Moderators will no longer be listed in adminwho, instead use modwho.
  • -
- -

Gamerofthegame updated:

-
    -
  • Miscellaneous mapfixes.
  • -
-
- -
-

February 13th 2013

-

Erthilo updated:

-
    -
  • Fixed SSD (logged-out) players not staying asleep.
  • -
  • Fixed set-pose verb and mice emotes having extra periods.
  • -
  • Fixed virus crate not appearing and breaking supply shuttle.
  • -
  • Fixed newcaster photos not being censored.
  • -
-
- -
-

January 23rd

-

Cael_Aislinn updated:

- -
- -
- - -

1/31/2013

-

CIB updated:

-
    -
  • Chilis and cold chilis no longer kill in small amounts
  • -
  • Chloral now again needs around 5 units to start killing somebody
  • -
-
- -
-

January 21st

-

Cael_Aislinn updated:

-
    -
  • Satchels and ore boxes can now hold strange rocks.
  • -
  • Closets and crates can now be built out of 5 and 10 plasteel respectively.
  • -
  • Observers can become mice once more.
  • -
-
- -
-

13/01/2013

-

Chinsky updated:

-
    -
  • If you get enough (6) blood drips on one tile, it'll turn into a blood puddle. Should make bleeding out more visible.
  • -
  • Security belt now able to hold taser, baton and tape roll.
  • -
  • Added alternative security uniform to Security wardrobes.
  • -
  • Ported Urist cult runes. Down with the crayon drawings! Example: http://dl.dropbox.com/u/26846767/images/SS13/255_symbols.PNG
  • -
  • Engineering tape now require engineer OR atmos access instead of both.
  • -
  • Implants now will react to EMP, possibly in !!FUN!! ways
  • -
-
- -

1/13/2013

-

GauHelldragon updated:

-
    -
  • Servicebots now have RoboTray and Printing Pen. Robotray can be used to pick up and drop food/drinks. Printing pen can alternate between writing mode and rename paper mode by clicking it.
  • -
  • Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity sensor.
  • -
  • Chefs can clang their serving trays with a rolling pin. Just like a riot shield!
  • -
-
- -
-

January 7th

-

Cael_Aislinn updated:

- -
- -
-

7/01/2013

-

Chinsky updated:

-
    -
  • Implants: Explosvie implant, exploding when victim hears the codephrase you set.
  • -
  • Implants: Compressed Matter implat, scan item (making it disappear), inject yourself and recall that item on will!
  • -
  • Implant removal surgery, with !!FUN!! results if you mess up it.
  • -
  • Coats now have pockets again.
  • -
  • Bash people on tabetops. an windows, or with stools. Grab people to bash them on tables or windows (better grab for better hit on windows). Drag stool sprite on you to pick it up, click on it in hand to make it usual stool again.
  • -
  • Surgical caps, and new sprites for bloodbags and fixovein.
  • -
  • Now some surgery steps will bloody your hands, Full-body blood coat in case youy mess up spectacualry.
  • -
  • Ported some crates (Art, Surgery, Sterile equiplemnt).
  • -
  • Changed contraband crates. Posters moved to Art Crate, cigs and lipstick ot party crate. Now contraband crate has illegal booze and illicit drugs.
  • -
  • Finally got evac party lights
  • -
  • Now disfigurment,now it WILL happen when damage is bad enough.
  • -
  • Now if you speak in depressurized area (less than 10 kPa) only people next to you can hear you. Radios still work though.
  • -
-
- - - -/tg/ station 13 Development Team - - - - -
- Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie
- Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut
- Sounds: Skie, Lasty/Vinyl
- Thanks to: CDK Station devs, GoonStation devs, the original SpaceStation developers and Invisty for the title image -
- -Daedalus Development Team - - - - -
- Coders: DopeGhoti, Sunfall, ThVortex
- Artwork: Captain Hammer
- Spriters: ((TODO.))
- Sounds: Peter J, due, Erik Satie
- Thanks to: All the dev teams that came before: BS12, /tg/station13, the Goons, and the original SS13 folks.
-
- -GoonStation 13 Development Team -
- Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
- Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
-
-

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Rights are currently extended to SomethingAwful Goons only.

-

Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

-
- - + + + + Baystation 12 Changelog + + + + + + + +
+ + + + +
+
Baystation 12 - A Space Station 13 Server
+

+
Visit our IRC channel: #bs12 on irc.sorcery.net
+ Code licensed under GPLv3. Content licensed under CC BY-SA 3.0.

+ +By playing to agreed to read and abide by the rules!
+ +
+
Baystation 12 Credit List + + + + +
+ Code: Abi79, Aryn, Cael_Aislinn, Chinsky, cib, CompactNinja, DopeGhoti, Erthilo, Hawk_v3, Head, Ispil, Lexusjjss, Melonstorm, Miniature, Mloc, NerdyBoy1104, SkyMarshal, Spectre, Strumpetplaya, Sunfall, Tastyfish, Uristqwerty
+ Sprites: Apple_Master, Arcalane, Chinsky, CompactNinja, Deus Dactyl, Erthilo, Flashkirby, Miniature, Searif, Xenone
+ Sounds: Aryn
+ Thanks To: /tg/ station, Goonstation, Animus Station, Daedalus, and original Spacestation 13 devs. Skibiliano for the IRC bot. +
+ + + + + + + +
+

1.06.2013

+

Chinsky updated:

+
    +
  • Bloody footprints! Now stepping in the puddle will dirty your shoes/feet and make you leave bloody footprints for a bit.
  • +
  • Blood now dries up after some time. Puddles take ~30 minutes, small things 5 minutes.
  • +
  • Untreated wounds now heal. No more toe stubs spamming you with pain messages for the rest of the shift.
  • +
  • On the other side, everything is healed slowly. Maximum you cna squeeze out of first aid is 0.5 health per tick per organ. Lying down makes it faster too, by 1.5x factor.
  • +
  • Lids! Click beaker/bottle in hand to put them on/off. Prevent spilling
  • +
  • Added 'hailer' to security lockers. If used in hand, says "Halt! Security!". For those who can't run and type.
  • +
+
+ +
+

31.05.2013

+

Segrain updated:

+
    +
  • Portable canisters now properly connect to ports beneath them on map load.
  • +
  • Fixed unfastening gas meters.
  • +
+
+ +
+

30th May 2013

+

proliberate updated:

+
    +
  • Station time is now displayed in the status tab for new players and AIs.
  • +
+
+ +
+

30.05.2013

+

Segrain updated:

+
    +
  • Meteor showers actually spawn meteors now.
  • +
  • Engineering tape fits into toolbelt and can be placed on doors.
  • +
  • Pill bottles can hold paper.
  • +
+
+ +
+

May 28th, 2013

+

VitrescentTortoise updated:

+
    +
  • Wizard's forcewall now works.
  • +
+
    +
  • Xenoarchaeology picksets can now hold everything they started with.
  • +
+
+
+

28th May 2013

+

Erthilo updated:

+
    +
  • Fixes everyone being able to understand alien languages. HERE IS YOUR TOWER OF BABEL
  • +
+
+ +
+

26th May 2013

+

Chinsky updated:

+
    +
  • Tentacles! Now clone damage will make you horribly malformed like examine text says.
  • +
+

VitrescentTortoise updated:

+
    +
  • Added a third option for not getting any job preferences. It allows you to return to the lobby instead of joining.
  • +
+
+ +
+

5/26/2013

+

Meyar updated:

+
    +
  • The syndicate shuttle now has a cycling airlock during Nuke rounds.
  • +
  • Restored the ability for the syndicate Agent ID to change the name on the card (reforge it) more than once.
  • +
  • ERT Radio now functional again.
  • +
  • Research blast doors now actually lock down the entirety of station-side Research.
  • +
  • Added lock down buttons to the wardens office.
  • +
  • The randomized barsign has made a return.
  • +
  • Syndicate Agent ID's external airlock access restored.
  • +
+
+ +
+

25th May 2013

+

Erthilo updated:

+
    +
  • Fixes alien races appearing an unknown when speaking their language.
  • +
  • Fixes alien races losing their language when cloned.
  • +
  • Fixes UI getting randomly reset when trying to change it in Genetics Scanners.
  • +
+
+ +
+

21 May 2013

+

SkyMarshal updated:

+
    +
  • ZAS will now speed air movement into/out of a zone when unsimulated tiles (e.g. space) are involved, in relation to the number of tiles.
  • +
  • Portable Canisters will now automatically connect to any portable connecter beneath them on map load.
  • +
  • Bug involving mis-mapped disposal junction fixed
  • +
  • Air alarms now work for atmos techs (whoops!)
  • +
  • The Master Controller now properly stops atmos when it runtimes.
  • +
  • Backpacks can no longer be contaminated
  • +
  • ZAS no longer logs air statistics.
  • +
  • ZAS now rebuilds as soon as it detects a semi-complex change in geometry. (It was doing this already, but in a convoluted way which was actually less efficient)
  • +
  • General code cleanup/commenting of ZAS
  • +
  • Jungle now initializes after the random Z-level loads and atmos initializes.
  • +
+
+ +
+

May 18th, 2013

+

CIB updated:

+
    +
  • A new event type: Wallrot. Use welder or plantbgone on infected walls.
  • +
  • Newscasters now can deliver preset news stories over the course of a round. See http://baystation12.net/forums/viewtopic.php?f=14&t=7619 to add your own!
  • +
+
+ +
+

April 24, 2013

+

Jediluke69 updated:

+
    +
  • Added 5 new drinks (Kira Special, Lemonade, Brown Star, Milkshakes, Rewriter)
  • +
  • Nanopaste now heals about half of what it used to
  • +
  • Ballistic crates should now come with shotguns loaded with actual shells no more beanbags
  • +
  • Iced tea no longer makes a glass of .what?
  • +
+
+ +
+

April 24, 2013

+

faux updated:

+
    +
  • Mixed Wardrobe Closet now has colored shoes and plaid skirts.
  • +
  • Dress uniforms added to the Captain, RD, and HoP wardrobe closets. A uniform jacket has also been added to the Captain's closet. HoS' hat has been re-added to their closet. I do not love the CMO and CE enough to give them anything.
  • +
  • Atheletic closet now has five different swimsuits *for the ladies* in them. If you are a guy, be prepared to be yelled at if you run around like a moron in one of these. Same goes for ladies who run around in shorts with their titties swaying in the space winds.
  • +
  • A set of dispatcher uniforms will spawn in the security closet. These are for playtesting the dispatcher role.
  • +
  • New suit spawns in the laundry room. It's for geezer's only. You're welcome, Book.
  • +
  • Nurse outfit variant, orderly uniform, and first responder jacket will now spawn in the medical wardrobe closet.
  • +
  • A white wedding dress will spawn in the chaplain's closet. There are also several dresses currently only adminspawnable. Admins: Look either under "bride" or "dress." The bride one leads to the colored wedding dresses, and there are some other kinds of dresses under dress.
  • +
  • No more luchador masks or boxing gloves or boxing ring. You guys have a swimming pool now, dip in and enjoy it.
  • +
  • he meeting hall has been replaced with an awkwardly placed security office meant for prisoner processing.
  • +
  • Added a couple more welding goggles to engineering since you guys liked those a lot.
  • +
  • Flasks spawn behind the bar. Only three. Don't fight over them. I don't know how to add them to the bar vending machine otherwise I would have done that instead. Detective, you have your own flask in your office, it's underneath the cigarettes on your desk.
  • +
  • Added two canes to the medical storage, for people who have leg injuries and can't walk good and stuff. I do not want to see doctors pretending to be House. These are for patients. Do not make me delete this addition and declare you guys not being able to have nice things.
  • +
  • Secondary entance to EVA now directly leads into the medbay hardsuit section. Sorry for any inconviences this will cause. The CMO can now fetch the hardsuits whenever they want.
  • +
  • Secondary security hardsuit has been added to the armory. Security members please stop stealing engineer's hardsuits when you guys want to pair up for space travel.
  • +
  • Firelocks have been moved around in the main hallways to form really ghetto versions of airlocks.
  • +
  • Violin spawns in theatre storage now. I didn't put the piano there though, that was someone else.
  • +
  • Psych office in medbay has been made better looking.
  • +
+
+ +
+

24th April 2013

+

NerdyBoy1104 updated:

+
    +
  • New Botany additions: Rice and Plastellium. New sheet material: Plastic.
  • +
  • Plastellium is refined into plastic by first grinding the produce to get plasticide. 20 plasticide + 10 polytrinic acid makes 10 sheets of plastic which can be used to make crates, forks, spoons, knives, ashtrays or plastic bags from.
  • +
  • Rice seeds grows into rice stalks that you grind to get rice. 10 Rice + 5 Water makes boiled rice, 10 rice + 5 milk makes rice pudding, 10 rice + 5 universal enzyme (in beaker) makes Sake.
  • +
+
+ +
+

Spamcat

+

04.05.2013 updated:

+
    +
  • Blood type is now saved in character creation menu, no need to edit it manually every round.
  • +
+
+ +
+

17 April 2013

+

SkyMarshal updated:

+
    +
  • ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.
  • +
  • World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)
  • +
  • Zones will now equalize air more rapidly.
  • +
  • ZAS now respects active magboots when airflow occurs.
  • +
  • Airflow will no longer throw you into doors and open them.
  • +
  • Race condition in zone construction has been fixed, so zones connect properly at round start.
  • +
  • Plasma effects readded.
  • +
  • Fixed runtime involving away mission.
  • +
+
+ +
+

17 April 2013

+

SkyMarshal updated:

+
    +
  • ZAS is now more deadly, as per decision by administrative team. May be tweaked, but currently AIRFLOW is the biggest griefer.
  • +
  • World startup optimized, many functions now delayed until a player joins the server. (Reduces server boot time significantly)
  • +
  • Zones will now equalize air more rapidly.
  • +
  • ZAS now respects active magboots when airflow occurs.
  • +
  • Airflow will no longer throw you into doors and open them.
  • +
  • Race condition in zone construction has been fixed, so zones connect properly at round start.
  • +
  • Plasma effects readded.
  • +
  • Fixed runtime involving away mission.
  • +
+
+ +
+

30.04.2013

+

Spamcat updated:

+
    +
  • Pill bottle capacity increased to 14 items.
  • +
  • Fixed Lamarr (it now spawns properly)
  • +
+
+ +
+

15.04.2013

+

Spamcat updated:

+
    +
  • Added telescopic batons to HoS's and captain's lockers. These are quite robust and easily concealable.
  • +
+
+ +
+

May 14th 2013

+

Cael_Aislinn updated:

+
    +
  • Depth scanners can now be used to determine what material archaeological deposits are made of, meaning lab analysis is no longer required.
  • +
  • Some useability issues with xenoarchaeology tools have been resolved, and the transit pods cycle automatically now.
  • +
+
+ +
+

11 April 2013

+

SkyMarshal updated:

+
    +
  • Fire has been reworked.
  • +
  • In-game variable editor is both readded and expanded with fire controlling capability.
  • +
+
+ +
+

9 April 2013

+

SkyMarshal updated:

+
    +
  • Fire Issues (Firedoors, Flamethrowers, Incendiary Grenades) fixed.
  • +
  • Fixed a bad line of code that was preventing autoignition of flammable gas mixes.
  • +
  • Volatile fuel is burned up after a point.
  • +
  • Partial-tile firedoors removed. This is due to ZAS breaking when interacting with them.
  • +
+
+ +
+

4 April 2013

+

SkyMarshal updated:

+
    +
  • Fixed ZAS
  • +
  • Fixed Fire
  • +
+
+ +
+

March 27th 2013

+

Asanadas updated:

+
    +
  • The Null Rod has recovered its de-culting ability, for balance reasons. Metagaming with it is a big no-no!
  • +
  • Holy Water as a liquid is able to de-cult. Less effective, but less bloody. May be changed over the course of time for balance.
  • +
+
+ +
+

26.03.2013

+

Spamcat updated:

+
    +
  • Chemmaster now puts pills in pill bottles (if one is inserted).
  • +
  • Stabbing someone with a syringe now deals 3 damage instead of 7 because 7 is like, a crowbar punch.
  • +
  • Lizards can now join mid-round again.
  • +
  • Chemicals in bloodstream will transfer with blood now, so don't get drunk before your blood donation. Viruses and antibodies transfer through blood too.
  • +
  • Virology is working again.
  • +
+
+ +
+

March 15th 2013

+

Cael_Aislinn updated:

+
    +
  • Mapped a compact research base on the mining asteroid, with multiple labs and testing rooms. It's reachable through a new (old) shuttle dock that leaves from the research wing on the main station.
  • +
+
+ +
+

14.03.2013

+

Spamcat updated:

+
    +
  • Figured I should make one of these. Syringestabbing now produces a broken syringe complete with fingerprints of attacker and blood of a victim, so dispose your evidence carefully. Maximum transfer amount per stab is lowered to 10.
  • +
+
+ +
+

11/03/2013

+

Chinsky updated:

+
    +
  • Sec HUDs now can see short versions of sec records.on examine. Med HUDs do same for medical records, and can set medical status of patient.
  • +
  • Damage to the head can now cause brain damage.
  • +
+
+ +
+

March 11th 2013

+

CIB updated:

+
    +
  • Cloning now requires you to put slabs of meat into the cloning pod to replenish biomass.
  • +
+
+ +
+

March 11th 2013

+

Cael Aislinn updated:

+
    +
  • The xenoarchaeology update is here. This includes a major content overhaul and a bunch of new features for xenoarchaeology.
  • +
  • Digsites (strange rock deposits) are now much more nuanced and interesting, and a huge number of minor (non-artifact) finds have been added.
  • +
  • Excavation is now a complex process that involves digging into the rock to the right depth.
  • +
  • Chemical analysis is required for safe excavation of the digsites, in order to determine how best to extract the finds.
  • +
  • Anomalous artifacts have been overhauled and many longstanding bugs with existing effects have been fixed - the anomaly utiliser should now work much more often.
  • +
  • Numerous new artifact effects have been added and some new artifact types can be dug up from the asteroid.
  • +
  • New tools and equipment have been added, including normal and spaceworthy versions of the anomaly suits, excavation tools and other neat gadgets.
  • +
  • Five books have been written by subject matter experts from around the galaxy to help the crew of the Exodus come to grips with this exacting new science (over 3000 words of tutorials!).
  • +
+
+ +
+

March 9th 2013

+

Cael Aislinn updated:

+
    +
  • Beekeeping is now possible. Construct an apiary of out wood and embed it into a hydroponics tray, then get a queen bee and bottle of BeezEez from cargo bay. + Hives produce honey and honeycomb, but be wary if the bees start swarming.
  • +
+
+ +
+

March 6th 2013

+

Cael Aislinn updated:

+
    +
  • Type 1 thermoelectric generators and the associated binary circulators are now moveable (wrench to secure/unsecure) and orderable via Quartermaster.
  • +
  • code/maps/rust_test.dmm contains an example setup for a functional RUST reactor. Maximum output is in the range of 12 to 20MW (12 to 20 million watts).
  • +
  • Removed double announcement for gridchecks, reduced duration of gridchecks.
  • +
+

RavingManiac updated:

+
    +
  • You can now stab people with syringes using the "harm" intent. This destroys the syringe and transfers a random percentage of its contents into the target. Armor has a 50% chance of blocking the syringe.
  • +
+
+ +
+

March 5th 2013

+

Cael Aislinn updated:

+
    +
  • Set roundstart music to randomly choose between space.ogg and traitor.ogg (see http://baystation12.net/forums/viewtopic.php?f=5&t=6972)
  • +
  • All RUST components except for TEGs (which generate the power) are now obtainable ingame, bored engineers should get hold of them and setup an experimental reactor for testing purposes.
  • +
+

CIB updated:

+
    +
  • Added internal organs. They're currently all located in the chest. Use advanced scanner to detect damage. Use the same surgery as for ruptured lungs to fix them.
  • +
+
+ +
+

February 27th 2013

+

Gamerofthegame updated:

+
    +
  • Added the (base gear) ERT preset for the debug command.
  • +
  • Map fixes, Virology hole fixed. Atmospheric fixes for mining and, to a less extent, the science outpost. (No, not cycling airlocks)
  • +
  • Fiddled with the ERT set up location on Centcom. Radmins will now have a even easier time equiping a team of any real pratical size, especially coupled with the above debug command.
  • +
+
+ +
+

February 25th 2013

+

Cael Aislinn updated:

+
    +
  • As well as building hull shield generators, normal shield gens can now be built (see http://baystation12.net/forums/viewtopic.php?f=1&t=6993).
  • +
  • New random events: multiple new system wide-events have been have been added to the newscaster feeds, some not quite as respectable as others.
  • +
  • New random event: some lucky winners will win the TC Daily Grand Slam Lotto, while others may be the target of malicious hackers.
  • +
+
+ +
+

February 23rd 2013

+

Cael Aislinn updated:

+
    +
  • Finances! Players spawn with an account, and money can be transferred between accounts, withdrawn/deposited at ATMs and charged to accounts via EFTPOS scanners.

    + All players start with 500-5000 credits, credits can no longer be merged and only credits can be deposited into ATMs - so shelter your illegitimately gotten gains in physical assets and remember that fraud is frowned upon!
  • +
  • Turrets are no longer noiseless as the grave. Listen for the sound of machinery in their proximity.
  • +
+
+ +
+

February 23rd 2013

+

Cael Aislinn updated:

+
    +
  • RUST machinery components should now be researchable (with high requirements) and orderable through QM (with high cost).
  • +
  • Shield machinery should now be researchable (with high requirements) and orderable through QM (with high cost). This one is reportedly buggy.
  • +
  • Rogue vending machines should revert back to normal at the end of the event.
  • +
  • New Unathi hair styles.
  • +
+
+ +
+

22/02/2013

+

Chinsky updated:

+
    +
  • Change to body cavity surgery. Can only put items in chest, groind and head. Max size for item - 3 (chest), 2 (groin), 1 (head). For chest surgery ribs should be bent open, (lung surgery until second scalpel step). Surgery step needs preparation step, with drill. After that you can place item inside, or seal it with cautery to do other step instead.
  • +
+
+ +
+

February 18th 2013

+

Cael Aislinn updated:

+
    +
  • All RUST components are now buildable/orderable, with very high requirements (except for the TEGs). Emitters have replaced gyrotrons, for now.
  • +
  • Fixed up shield generators and made them buildable, with circuits obtainable through RnD. Hull shield gens project along space tiles adjacent to the hull (must be adjacent to a space tile to work).
  • +
+
+ +
+

20/02/2013

+

Chinsky updated:

+
    +
  • Added new surgery: putting items inside people. After you use retractor to keep incision open, just click with any item to put it inside. But be wary, if you try to fit something too big, you might rip the veins. To remove items, use implant removal surgery.
  • +
  • Crowbar can be used as alternative to retractor.
  • +
  • Can now unload guns by clicking them in hand.
  • +
  • Fixed distance calculation in bullet missing chance computation, it was always assuming 1 or 0 tiles. Now distace REALLY matters when you shoot.
  • +
  • To add more FUN to previous thing, bullets missed to not disappear but keep going until they hit something else.
  • +
  • Compressed Matter and Explosive implants spawn properly now.
  • +
  • Tweaks to medical effects: removed itch caused by bandages. Chemical effects now have non-100 chance of appearing, the stronger medicine, the more probality it'll have side effects.
  • +
+
+ +
+

February 18th 2013

+

Cael Aislinn updated:

+
    +
  • Security bots will now target hostile mobs, and vice versa.
  • +
  • Carp should actually emigrate now, instead of just immigrating then squatting around the outer hull.
  • +
  • Admins and moderators have been split up into separate 'who' verbs (adminwho and modwho respectively).
  • +
+
+ +
+

February 14th 2013

+

CIB updated:

+
    +
  • Medical side-effects(patients are going to come back for secondary treatment)
  • +
  • NT loyalty setting(affects command reports and gives antags hints who might collaborate with them)
  • +
  • Simple animal balance fixes(They're slower now)
  • +
+

CaelAislinn updated:

+
    +
  • Re-added old ion storm laws, re-added grid check event.
  • +
  • Added Rogue Drone and Vermin Infestation random events.
  • +
  • Added/fixed space vines random event.
  • +
  • Updates to the virus events.
  • +
  • Spider infestation and alien infestation events turned off by default.
  • +
  • Soghun, taj and skrell all have unique language text colours.
  • +
  • Moderators will no longer be listed in adminwho, instead use modwho.
  • +
+ +

Gamerofthegame updated:

+
    +
  • Miscellaneous mapfixes.
  • +
+
+ +
+

February 13th 2013

+

Erthilo updated:

+
    +
  • Fixed SSD (logged-out) players not staying asleep.
  • +
  • Fixed set-pose verb and mice emotes having extra periods.
  • +
  • Fixed virus crate not appearing and breaking supply shuttle.
  • +
  • Fixed newcaster photos not being censored.
  • +
+
+ +
+

January 23rd

+

Cael_Aislinn updated:

+ +
+ +
+ + +

1/31/2013

+

CIB updated:

+
    +
  • Chilis and cold chilis no longer kill in small amounts
  • +
  • Chloral now again needs around 5 units to start killing somebody
  • +
+
+ +
+

January 21st

+

Cael_Aislinn updated:

+
    +
  • Satchels and ore boxes can now hold strange rocks.
  • +
  • Closets and crates can now be built out of 5 and 10 plasteel respectively.
  • +
  • Observers can become mice once more.
  • +
+
+ +
+

13/01/2013

+

Chinsky updated:

+
    +
  • If you get enough (6) blood drips on one tile, it'll turn into a blood puddle. Should make bleeding out more visible.
  • +
  • Security belt now able to hold taser, baton and tape roll.
  • +
  • Added alternative security uniform to Security wardrobes.
  • +
  • Ported Urist cult runes. Down with the crayon drawings! Example: http://dl.dropbox.com/u/26846767/images/SS13/255_symbols.PNG
  • +
  • Engineering tape now require engineer OR atmos access instead of both.
  • +
  • Implants now will react to EMP, possibly in !!FUN!! ways
  • +
+
+ +

1/13/2013

+

GauHelldragon updated:

+
    +
  • Servicebots now have RoboTray and Printing Pen. Robotray can be used to pick up and drop food/drinks. Printing pen can alternate between writing mode and rename paper mode by clicking it.
  • +
  • Farmbots. A new type of robot that weeds, waters and fertilizes. Use robot arm on water tank. Then use plant analyzer, mini-hoe, bucket and finally proximity sensor.
  • +
  • Chefs can clang their serving trays with a rolling pin. Just like a riot shield!
  • +
+
+ +
+

January 7th

+

Cael_Aislinn updated:

+ +
+ +
+

7/01/2013

+

Chinsky updated:

+
    +
  • Implants: Explosvie implant, exploding when victim hears the codephrase you set.
  • +
  • Implants: Compressed Matter implat, scan item (making it disappear), inject yourself and recall that item on will!
  • +
  • Implant removal surgery, with !!FUN!! results if you mess up it.
  • +
  • Coats now have pockets again.
  • +
  • Bash people on tabetops. an windows, or with stools. Grab people to bash them on tables or windows (better grab for better hit on windows). Drag stool sprite on you to pick it up, click on it in hand to make it usual stool again.
  • +
  • Surgical caps, and new sprites for bloodbags and fixovein.
  • +
  • Now some surgery steps will bloody your hands, Full-body blood coat in case youy mess up spectacualry.
  • +
  • Ported some crates (Art, Surgery, Sterile equiplemnt).
  • +
  • Changed contraband crates. Posters moved to Art Crate, cigs and lipstick ot party crate. Now contraband crate has illegal booze and illicit drugs.
  • +
  • Finally got evac party lights
  • +
  • Now disfigurment,now it WILL happen when damage is bad enough.
  • +
  • Now if you speak in depressurized area (less than 10 kPa) only people next to you can hear you. Radios still work though.
  • +
+
+ + + +/tg/ station 13 Development Team + + + + +
+ Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie
+ Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut
+ Sounds: Skie, Lasty/Vinyl
+ Thanks to: CDK Station devs, GoonStation devs, the original SpaceStation developers and Invisty for the title image +
+ +Daedalus Development Team + + + + +
+ Coders: DopeGhoti, Sunfall, ThVortex
+ Artwork: Captain Hammer
+ Spriters: ((TODO.))
+ Sounds: Peter J, due, Erik Satie
+ Thanks to: All the dev teams that came before: BS12, /tg/station13, the Goons, and the original SS13 folks.
+
+ +GoonStation 13 Development Team +
+ Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
+ Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
+
+

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Rights are currently extended to SomethingAwful Goons only.

+

Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

+
+ + diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 7d7fcfdb6b..79e6959125 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 4c89703926..221f43ed0f 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index b0b72e0f1d..98d92e88ec 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 940100057b..b34f4e2a13 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a376ecab1b..68ef5a8d33 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 42cb83fa37..226615995d 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index ea5a218804..0917d2bff0 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ