From 2d9d65e5503f24a6960d2e6ed011e08d7fe8edae Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Thu, 7 Apr 2016 19:20:42 -0700 Subject: [PATCH 01/94] Fluorosulfuric SACid :cl: Iamgoofball & Super Aggro Crag tweak: Fluorosulfuric Acid now has doubled acid power. experimental: Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer. /:cl: --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a216e2ecdd2..a9dce456941 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -695,4 +695,7 @@ description = "Fluorosulfuric acid is a an extremely corrosive chemical substance." color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 - acidpwr = 20 + acidpwr = 42//0 +/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) + M.adjustBurnLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP + ..() From 57cf5927d6abbab9289fa662af8cbb4419c8fbd3 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Fri, 8 Apr 2016 23:54:23 -0700 Subject: [PATCH 02/94] Update toxin_reagents.dm --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index a9dce456941..f3ea013dd23 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -695,7 +695,7 @@ description = "Fluorosulfuric acid is a an extremely corrosive chemical substance." color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 - acidpwr = 42//0 + acidpwr = 42.0 /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) - M.adjustBurnLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP + M.adjustFireLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP ..() From b9e1f98531a9f995e5de777d57843aa98a55ae78 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 21:18:03 +0100 Subject: [PATCH 03/94] Restructure demon consumption --- code/modules/mob/living/bloodcrawl.dm | 134 +++++++++++++++++--------- 1 file changed, 86 insertions(+), 48 deletions(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 43d343dcbf9..03dc55b5dc0 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -28,6 +28,9 @@ if(iscarbon(src)) var/mob/living/carbon/C = src if(C.l_hand || C.r_hand) + //TODO make it toggleable to either forcedrop the items, or deny + //entry when holding them + // literally only an option for carbons though C << "You may not hold items while blood crawling!" return 0 var/obj/item/weapon/bloodcrawl/B1 = new(C) @@ -37,58 +40,93 @@ C.put_in_hands(B1) C.put_in_hands(B2) C.regenerate_icons() - var/mob/living/kidnapped = null - var/turf/mobloc = get_turf(src.loc) src.notransform = TRUE spawn(0) - src.visible_message("[src] sinks into the pool of blood!") - playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) - var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) - src.ExtinguishMob() - if(buckled) - buckled.unbuckle_mob(src,force=1) - if(buckled_mobs.len) - unbuckle_all_mobs(force=1) - if(pulledby) - pulledby.stop_pulling() - if(src.pulling && src.bloodcrawl == BLOODCRAWL_EAT) - if(istype(src.pulling, /mob/living)) - var/mob/living/victim = src.pulling - if(victim.stat == CONSCIOUS) - src.visible_message("[victim] kicks free of the blood pool just before entering it!") - else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) - visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!") - else - victim.loc = holder - victim.emote("scream") - src.visible_message("[src] drags [victim] into the pool of blood!") - kidnapped = victim - src.loc = holder - src.holder = holder - if(kidnapped) - src << "You begin to feast on [kidnapped]. You can not move while you are doing this." - for(var/i = 3; i > 0; i--) - playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) - sleep(30) - if(kidnapped) - if(kidnapped.reagents && kidnapped.reagents.has_reagent("devilskiss")) - src << "AAH! THEIR FLESH! IT BURNS!" - adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs - kidnapped.loc = get_turf(B) - kidnapped.visible_message("[B] violently expels [kidnapped]!") - else - src << "You devour [kidnapped]. Your health is fully restored." - src.adjustBruteLoss(-1000) - src.adjustFireLoss(-1000) - src.adjustOxyLoss(-1000) - src.adjustToxLoss(-1000) - kidnapped.ghostize() - qdel(kidnapped) - else - src << "You happily devour... nothing? Your meal vanished at some point!" - src.notransform = 0 + bloodpool_sink(B) + src.notransform = FALSE return 1 +/mob/living/proc/bloodpool_sink(obj/effect/decal/cleanable/B) + var/turf/mobloc = get_turf(src.loc) + + src.visible_message("[src] sinks into the pool of blood!") + playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, 1, -1) + // Extinguish, unbuckle, stop being pulled, set our location into the + // dummy object + var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) + src.ExtinguishMob() + if(buckled) + buckled.unbuckle_mob(src,force=1) + if(buckled_mobs.len) + unbuckle_all_mobs(force=1) + if(pulledby) + pulledby.stop_pulling() + src.loc = holder + src.holder = holder + + // if we're not pulling anyone, or we can't eat anyone + if(!src.pulling || src.bloodcrawl != BLOODCRAWL_EAT) + return + + // if the thing we're pulling isn't alive + if (!(istype(src.pulling, /mob/living))) + return + + var/mob/living/victim = src.pulling + var/kidnapped = FALSE + + if(victim.stat == CONSCIOUS) + src.visible_message("[victim] kicks free of the blood pool just before entering it!", null, "You hear splashing and struggling.") + else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) + visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") + else + victim.loc = holder + victim.emote("scream") + src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") + kidnapped = TRUE + + if(kidnapped) + var/success = bloodcrawl_consume(B, victim) + if(!success) + src << "You happily devour... nothing? Your meal vanished at some point!" + return 1 + +/mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) + src << "You begin to feast on [victim]. You can not move while you are doing this." + + for(var/i = 3; i > 0; i--) + playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) + sleep(30) + + if(!victim) + return FALSE + + if(victim.reagents && victim.reagents.has_reagent("devilskiss")) + src << "AAH! THEIR FLESH! IT BURNS!" + adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs + victim.loc = get_turf(B) + victim.visible_message("[B] violently expels [victim]!") + return TRUE + + src << "You devour [victim]. Your health is fully restored." + src.adjustBruteLoss(-1000) + src.adjustFireLoss(-1000) + src.adjustOxyLoss(-1000) + src.adjustToxLoss(-1000) + + // No defib possible after laughter + victim.adjustBruteLoss(1000) + victim.death() + + // Keep their corpse so rescue is possible + var/mob/living/simple_animal/slaughter/SD + if(istype(src, /mob/living/simple_animal/slaughter)) + SD = src + SD.consumed_mobs += victim + world << "DEBUG: [victim] added to [SD] consumed mobs" + + return TRUE + /obj/item/weapon/bloodcrawl name = "blood crawl" desc = "You are unable to hold anything while in this form." From bf4778dba5c20b626d6273bed8daa8fcc3f15355 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 23:08:24 +0100 Subject: [PATCH 04/94] Fixes victim mobs being deleted when eaten This single line fix prevents the consumed mob from being deleted because of REASONS. Now rejoyce as you recover the eaten bodies of your friends when you finally kill the demon. --- code/modules/mob/living/bloodcrawl.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 03dc55b5dc0..08a081f834c 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -80,7 +80,7 @@ else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") else - victim.loc = holder + victim.loc = src victim.emote("scream") src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") kidnapped = TRUE From 90ae21b7e50ffd05ceecc288be37ba93ac5ba45a Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 17 Apr 2016 23:48:22 +0100 Subject: [PATCH 05/94] Removed debug statement --- code/modules/mob/living/bloodcrawl.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 08a081f834c..24fe9c4a6f7 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -123,7 +123,6 @@ if(istype(src, /mob/living/simple_animal/slaughter)) SD = src SD.consumed_mobs += victim - world << "DEBUG: [victim] added to [SD] consumed mobs" return TRUE From 20d7ed7a48e1a8747f0353e450f64db90626034c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 11:18:04 +0100 Subject: [PATCH 06/94] Disabled keeping the bodies by default But you can turn it back on if you want. --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 9 ++++++--- code/modules/mob/living/bloodcrawl.dm | 11 +++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index cdbe0bffaa7..bb1ec1e815c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -32,7 +32,9 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT see_invisible = SEE_INVISIBLE_MINIMUM - var/list/consumed_mobs = list() + // Set consumed_mobs to a list() to keep the corpses in the demon + // for later retrieval on demon death + var/list/consumed_mobs = null var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ @@ -63,8 +65,9 @@ new /obj/item/organ/internal/heart/demon (src.loc) playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1) visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") - for(var/mob/living/M in consumed_mobs) - M.loc = get_turf(src) + if(consumed_mobs) + for(var/mob/living/M in consumed_mobs) + M.loc = get_turf(src) ghostize() qdel(src) return diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 24fe9c4a6f7..51f6afeb7dd 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -118,11 +118,18 @@ victim.adjustBruteLoss(1000) victim.death() - // Keep their corpse so rescue is possible + var/del_corpse = TRUE var/mob/living/simple_animal/slaughter/SD if(istype(src, /mob/living/simple_animal/slaughter)) SD = src - SD.consumed_mobs += victim + // `consumed_mobs` can be set to null to gib the corpse + if(SD.consumed_mobs) + // Keep their corpse so rescue is possible + SD.consumed_mobs += victim + del_corpse = FALSE + + if(del_corpse) + qdel(victim) return TRUE From b3984c7c6ea9480c8e0b4ef92efe502bc2cb603e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:03:22 +0100 Subject: [PATCH 07/94] Laughter demons and bug fixes --- .../miniantags/slaughter/slaughter.dm | 95 +++++++++++++++--- code/modules/mob/living/bloodcrawl.dm | 11 +- icons/mob/mob.dmi | Bin 247323 -> 247731 bytes 3 files changed, 92 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index bb1ec1e815c..438d0f63b6e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -17,6 +17,8 @@ stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/magic/demon_attack1.ogg' + var/feast_sound = 'sound/magic/Demon_consume.ogg' + var/death_sound = 'sound/magic/demon_dies.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY @@ -56,22 +58,42 @@ /mob/living/simple_animal/slaughter/death() ..(1) - new /obj/effect/decal/cleanable/blood (get_turf(src)) - var/obj/effect/decal/cleanable/blood/innards = new (get_turf(src)) - innards.icon = 'icons/obj/surgery.dmi' - innards.icon_state = "innards" - innards.name = "pile of viscera" - innards.desc = "A repulsive pile of guts and gore." - new /obj/item/organ/internal/heart/demon (src.loc) - playsound(get_turf(src),'sound/magic/demon_dies.ogg', 200, 1) - visible_message("[src] screams in anger as it collapses into a puddle of viscera, its most recent meals spilling out of it.") + death_gibs() + + death_mealspill() + + playsound(get_turf(src),death_sound, 200, 1) + death_message() + + ghostize() + qdel(src) + + return + +/mob/living/simple_animal/slaughter/proc/death_gibs() + + new /obj/effect/decal/cleanable/blood(get_turf(src)) + new /obj/effect/decal/cleanable/blood/innards(get_turf(src)) + new /obj/item/organ/internal/heart/demon(src.loc) + +/mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) for(var/mob/living/M in consumed_mobs) M.loc = get_turf(src) - ghostize() - qdel(src) - return +/obj/effect/decal/cleanable/blood/innards + icon = 'icons/obj/surgery.dmi' + name = "pile of viscera" + desc = "A repulsive pile of guts and gore." + +// This function is required because cleanable decals start with a random +// icon_state, and it'll be overriden if just defined above. +/obj/effect/decal/cleanable/blood/innards/New() + ..() + icon_state = "innards" + +/mob/living/simple_animal/slaughter/proc/death_message() + visible_message("[src] screams in anger as it collapses into a puddle of viscera.") /mob/living/simple_animal/slaughter/phasein() . = ..() @@ -118,3 +140,52 @@ /obj/item/organ/internal/heart/demon/Stop() return 0 // Always beating. + +/mob/living/simple_animal/slaughter/laughter + // The laughter demon! It's everyone's best friend! It just wants to hug + // them so much, it wants to hug everyone at once! + name = "laughter demon" + real_name = "laughter demon" + desc = "A large, adorable creature covered in armored pink scales." + speak_emote = list("giggles","titters","chuckles") + emote_hear = list("gaffaws","laughs") + response_help = "hugs" + attacktext = "wildly tickles" + + attack_sound = 'sound/items/bikehorn.ogg' + feast_sound = 'sound/spookoween/scary_horn2.ogg' + death_sound = 'sound/misc/sadtrombone.ogg' + + // Keep the people we hug! + consumed_mobs = list() + + // HOT. PINK. + color = "#FF69B4" + +/mob/living/simple_animal/slaughter/laughter/death_gibs() + // Laughter demons are powered not by demonic energy, but by the laughter + // of kittens + var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) + K.name = "Laughter" + return + +/mob/living/simple_animal/slaughter/laughter/death_message() + visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") + + +/mob/living/simple_animal/slaughter/laughter/death_mealspill() + if(!consumed_mobs) + return + + for(var/mob/living/M in consumed_mobs) + M.loc = get_turf(src) + if(M.revive(full_heal = 1)) + // Feel there should be a better way of FORCING a mob's ghost + // back into the body + if(!M.ckey) + for(var/mob/dead/observer/ghost in player_list) + if(M.real_name == ghost.real_name) + ghost.reenter_corpse() + break + M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 51f6afeb7dd..915597a7c75 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -94,8 +94,15 @@ /mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) src << "You begin to feast on [victim]. You can not move while you are doing this." - for(var/i = 3; i > 0; i--) - playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1) + var/sound + if(istype(/mob/living/simple_animal/slaughter, src)) + var/mob/living/simple_animal/slaughter/SD = src + sound = SD.feast_sound + else + sound = 'sound/magic/Demon_consume.ogg' + + for(var/i = 1; i <= 0; i++) + playsound(get_turf(src),sound, 100, 1) sleep(30) if(!victim) diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 3a74a701ed063e1c8a21e57e566ee83f622ded52..05e64297c3c4f5c814b3a2b19a4093b451e8c31c 100644 GIT binary patch delta 57949 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 delta 57537 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 XoGvEH?4}LA4n$q~ky7acv%voY#@Y2n From bf5b2233837262e14e57607740cd538987ac64ff Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:05:12 +0100 Subject: [PATCH 08/94] Laughter demons have bows now --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 438d0f63b6e..a6ef79001a5 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -156,11 +156,14 @@ feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' + icon_state = "bowmon" + icon_living = "bowmon" + // Keep the people we hug! consumed_mobs = list() // HOT. PINK. - color = "#FF69B4" + //color = "#FF69B4" /mob/living/simple_animal/slaughter/laughter/death_gibs() // Laughter demons are powered not by demonic energy, but by the laughter From c429ca3b486cdc9dcafccc7d63ca0f4464779d70 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 16:47:31 +0100 Subject: [PATCH 09/94] Fixes some sound related bugs --- code/modules/mob/living/bloodcrawl.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 915597a7c75..23d81ab2967 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -95,13 +95,13 @@ src << "You begin to feast on [victim]. You can not move while you are doing this." var/sound - if(istype(/mob/living/simple_animal/slaughter, src)) + if(istype(src, /mob/living/simple_animal/slaughter)) var/mob/living/simple_animal/slaughter/SD = src sound = SD.feast_sound else sound = 'sound/magic/Demon_consume.ogg' - for(var/i = 1; i <= 0; i++) + for(var/i in 1 to 3) playsound(get_turf(src),sound, 100, 1) sleep(30) From f1ca391da4c67cc6a6de08b15dd1cbde5c69ceb6 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 17:35:53 +0100 Subject: [PATCH 10/94] Phasing and comments --- code/modules/mob/living/bloodcrawl.dm | 5 +++++ code/modules/spells/spell.dm | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 23d81ab2967..d804a6bbb15 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -112,6 +112,11 @@ src << "AAH! THEIR FLESH! IT BURNS!" adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs victim.loc = get_turf(B) + // This whole thing here is the ONLY reason we keep passing B down + // this proc chain, so we know where to spit the person out who's + // been drinking. TODO would be a lot better if it just picked the + // nearest bloodspot and used that, then it'd be a lot cleaner + // from a code perspective victim.visible_message("[B] violently expels [victim]!") return TRUE diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 79916907994..47ada587d81 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -32,6 +32,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/human_req = 0 //spell can only be cast by humans var/nonabstract_req = 0 //spell can only be cast by mobs that are physical entities var/stat_allowed = 0 //see if it requires being conscious/alive, need to set to 1 for ghostpells + var/phase_allowed = 0 // If true, the spell can be cast while phased, eg. blood crawling, ethereal jaunting var/invocation = "HURP DURP" //what is uttered when the wizard casts the spell var/invocation_emote_self = null var/invocation_type = "none" //can be none, whisper, emote and shout @@ -91,6 +92,11 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user << "Not when you're incapacitated." return 0 + var/loc = user.loc + if(!phase_allowed && (istype(loc, /obj/effect/dummy/spell_jaunt) || istype(loc, /obj/effect/dummy/slaughter))) + user << "[name] cannot be cast unless you are completely manifested in the material plane." + return 0 + if(ishuman(user)) var/mob/living/carbon/human/H = user From 6cdbb1743d0a11cec4698e95c349c8277140bcd2 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 17:43:34 +0100 Subject: [PATCH 11/94] Removed etheral mute, bloodcrawl while phased --- code/modules/spells/spell_types/bloodcrawl.dm | 2 ++ .../spells/spell_types/ethereal_jaunt.dm | 27 +++---------------- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/code/modules/spells/spell_types/bloodcrawl.dm b/code/modules/spells/spell_types/bloodcrawl.dm index 495a2335baa..fc33166531a 100644 --- a/code/modules/spells/spell_types/bloodcrawl.dm +++ b/code/modules/spells/spell_types/bloodcrawl.dm @@ -3,6 +3,8 @@ desc = "Use pools of blood to phase out of existence." charge_max = 0 clothes_req = 0 + //If you couldn't cast this while phased, you'd have a problem + phase_allowed = 1 selection_type = "range" range = 1 cooldown_min = 0 diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index a274ac0ef83..8b76ed72a45 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -43,9 +43,10 @@ target.notransform=0 //mob is safely inside holder now, no need for protection. jaunt_steam(mobloc) - mute(target) + // Used to mute the wizard here, but adding the phased_allowed + // check in spell.dm means muting is no longer needed. + sleep(jaunt_duration) - unmute(target) if(target.loc != holder) //mob warped out of the warp qdel(holder) @@ -72,27 +73,7 @@ target.canmove = 1 //Silence wizard during jaunt so they cannot spell cast while invisible -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/mute(target) - if(!istype(target, /mob/living/carbon)) - return FALSE - - var/mob/living/carbon/mob_to_mute = target - if(!mob_to_mute.dna) - return FALSE - - mob_to_mute.dna.add_mutation(MUT_MUTE) - return TRUE - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/unmute(target) - if(!istype(target, /mob/living/carbon)) - return FALSE - - var/mob/living/carbon/mob_to_mute = target - if(!mob_to_mute.dna) - return FALSE - - mob_to_mute.dna.remove_mutation(MUT_MUTE) - return TRUE +// /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(atom/movable/overlay/animation, mob/living/target) animation.icon_state = "liquify" From 6e20f272403774388fedaa4390187053ecb77a98 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 18 Apr 2016 18:44:09 +0100 Subject: [PATCH 12/94] Coding review fixes - Removes trailing returns - Removes mentioning code history in comments - Uses built in features for cleanable decals - Uses /obj/effect/dummy class to detect for incorporeal nature --- .../game/gamemodes/miniantags/slaughter/slaughter.dm | 12 ++---------- code/modules/spells/spell.dm | 2 +- code/modules/spells/spell_types/ethereal_jaunt.dm | 3 --- 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index a6ef79001a5..2b559a8fbd7 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -68,8 +68,6 @@ ghostize() qdel(src) - return - /mob/living/simple_animal/slaughter/proc/death_gibs() new /obj/effect/decal/cleanable/blood(get_turf(src)) @@ -79,18 +77,13 @@ /mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) for(var/mob/living/M in consumed_mobs) - M.loc = get_turf(src) + M.forceMove(get_turf(src)) /obj/effect/decal/cleanable/blood/innards icon = 'icons/obj/surgery.dmi' name = "pile of viscera" desc = "A repulsive pile of guts and gore." - -// This function is required because cleanable decals start with a random -// icon_state, and it'll be overriden if just defined above. -/obj/effect/decal/cleanable/blood/innards/New() - ..() - icon_state = "innards" + random_icon_states = list("innards") /mob/living/simple_animal/slaughter/proc/death_message() visible_message("[src] screams in anger as it collapses into a puddle of viscera.") @@ -170,7 +163,6 @@ // of kittens var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) K.name = "Laughter" - return /mob/living/simple_animal/slaughter/laughter/death_message() visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 47ada587d81..3494f38659c 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -93,7 +93,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin return 0 var/loc = user.loc - if(!phase_allowed && (istype(loc, /obj/effect/dummy/spell_jaunt) || istype(loc, /obj/effect/dummy/slaughter))) + if(!phase_allowed && istype(loc, /obj/effect/dummy)) user << "[name] cannot be cast unless you are completely manifested in the material plane." return 0 diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 8b76ed72a45..904160a6fe2 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -43,9 +43,6 @@ target.notransform=0 //mob is safely inside holder now, no need for protection. jaunt_steam(mobloc) - // Used to mute the wizard here, but adding the phased_allowed - // check in spell.dm means muting is no longer needed. - sleep(jaunt_duration) if(target.loc != holder) //mob warped out of the warp From a1fac08dfd9fa503b852580d4465c2d6466c14b6 Mon Sep 17 00:00:00 2001 From: YotaXP Date: Wed, 2 Mar 2016 18:57:14 -0500 Subject: [PATCH 13/94] Modified map loader to be able to read TGM format maps, and cache stuff for SPEED! --- code/__HELPERS/lists.dm | 10 + .../awaymissions/maploader/dmm_suite.dm | 3 +- code/modules/awaymissions/maploader/reader.dm | 226 ++++++++++-------- 3 files changed, 136 insertions(+), 103 deletions(-) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 06c7a7e6ec0..cb4e8c8163b 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -344,3 +344,13 @@ while(L.Remove(null)) continue return L + +//Copies a list, and all lists inside it recusively +//Does not copy any other reference type +/proc/deepCopyList(list/l) + if(!islist(l)) + return l + . = l.Copy() + for(var/i = 1 to length(.)) + if(islist(.[i])) + .[i] = .(.[i]) diff --git a/code/modules/awaymissions/maploader/dmm_suite.dm b/code/modules/awaymissions/maploader/dmm_suite.dm index 71c9e6e788f..ba4664fa4aa 100644 --- a/code/modules/awaymissions/maploader/dmm_suite.dm +++ b/code/modules/awaymissions/maploader/dmm_suite.dm @@ -53,9 +53,10 @@ dmm_suite{ */ - verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num){ + verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num){ // dmm_file: A .dmm file to load (Required). // z_offset: A number representing the z-level on which to start loading the map (Optional). + // cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). } verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ // t1: A turf representing one corner of a three dimensional grid (Required). diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 5b5f8c1fd75..e153ad961d0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -6,6 +6,14 @@ var/global/use_preloader = FALSE var/global/dmm_suite/preloader/_preloader = new +/dmm_suite + // /"([a-zA-Z]+)" = \(((?:.|\n)*?)\)\n(?!\t)|\((\d+),(\d+),(\d+)\) = \{"([a-zA-Z\n]*)"\}/g + var/static/regex/dmmRegex = new/regex({""(\[a-zA-Z]+)" = \\(((?:.|\n)*?)\\)\n(?!\t)|\\((\\d+),(\\d+),(\\d+)\\) = \\{"(\[a-zA-Z\n]*)"\\}"}, "g") + // /^[\s\n]+"?|"?[\s\n]+$|^"|"$/g + var/static/regex/trimQuotesRegex = new/regex({"^\[\\s\n]+"?|"?\[\\s\n]+$|^"|"$"}, "g") + // /^[\s\n]+|[\s\n]+$/ + var/static/regex/trimRegex = new/regex("^\[\\s\n]+|\[\\s\n]+$", "g") + var/static/list/modelCache = list() /** * Construct the model map and control the loading process @@ -17,92 +25,94 @@ var/global/dmm_suite/preloader/_preloader = new * 2) Read the map line by line, parsing the result (using parse_grid) * */ -/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num) - if(!z_offset)//what z_level we are creating the map on - z_offset = world.maxz+1 +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num) + var/tfile = dmm_file//the map file we're creating + if(isfile(tfile)) + tfile = file2text(tfile) if(!x_offset) - x_offset = 0 - + x_offset = 1 if(!y_offset) - y_offset = 0 - var/quote = ascii2text(34) - var/tfile = file2text(dmm_file)//the map file we're creating - var/tfile_len = length(tfile) - var/lpos = 1 // the models definition index + y_offset = 1 + if(!z_offset) + z_offset = world.maxz + 1 - /////////////////////////////////////////////////////////////////////////////////////// - //first let's map model keys (e.g "aa") to their contents (e.g /turf/open/space{variables}) - /////////////////////////////////////////////////////////////////////////////////////// var/list/grid_models = list() - var/key_len = length(copytext(tfile,2,findtext(tfile,quote,2,0)))//the length of the model key (e.g "aa" or "aba") + var/key_len = 0 - //proceed line by line - for(lpos=1; lpos world.maxz) + if(cropMap) + continue + else + world.maxz = zcrd //create a new z_level if needed - var/zgrid = copytext(tfile,findtext(tfile,quote+"\n",zpos,0)+2,findtext(tfile,"\n"+quote,zpos,0)+1) //copy the whole map grid - var/z_depth = length(zgrid) + var/list/gridLines = splittext(dmmRegex.group[6], "\n") - //if exceeding the world max x or y, increase it - var/x_depth = length(copytext(zgrid,1,findtext(zgrid,"\n",2,0))) - var/x_tilecount = x_depth/key_len - if(world.maxx 1) + gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines. - var/y_depth = z_depth / (x_depth+1)//x_depth + 1 because we're counting the '\n' characters in z_depth - if(world.maxy world.maxy) + world.maxy = ycrd // Expand Y here. X is expanded in the loop below + for(var/line in gridLines) + if(ycrd <= world.maxy && ycrd >= 1) + xcrd = xcrdStart + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd - for(var/mpos in 1 to x_depth step key_len) - xcrd++ - var/model_key = copytext(grid_line,mpos,mpos+key_len) - parse_grid(grid_models[model_key],xcrd+x_offset,ycrd+y_offset,zcrd+z_offset) + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + if(!grid_models[model_key]) + throw EXCEPTION("Undefined model key in DMM.") + parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) + sleep(-1) - //reached end of current map - if(gpos+x_depth+1>z_depth) - break - - ycrd-- - CHECK_TICK - - - //reached End Of File - if(findtext(tfile,quote+"}",zpos,0)+2==tfile_len) - break + ++xcrd + --ycrd CHECK_TICK + return 1 /** * Fill a given tile with its area/turf/objects/mobs @@ -127,41 +137,56 @@ var/global/dmm_suite/preloader/_preloader = new same construction as those contained in a .dmm file, and instantiates them. */ - var/list/members = list()//will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) - var/list/members_attributes = list()//will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/members //will contain all members (paths) in model (in our example : /turf/unsimulated/wall and /area/mine/explored) + var/list/members_attributes //will contain lists filled with corresponding variables, if any (in our example : list(icon_state = "rock") and list()) + var/list/cached = modelCache[model] + var/index + if(cached) + members = cached[1] + members_attributes = cached[2] + else - ///////////////////////////////////////////////////////// - //Constructing members and corresponding variables lists - //////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////// + //Constructing members and corresponding variables lists + //////////////////////////////////////////////////////// - var/index=1 - var/old_position = 1 - var/dpos + members = list() + members_attributes = list() + index = 1 - do - //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) - dpos= find_next_delimiter_position(model,old_position,",","{","}")//find next delimiter (comma here) that's not within {...} + var/old_position = 1 + var/dpos + //var/model_sl = replacetext(model, "\n", "") - var/full_def = copytext(model,old_position,dpos)//full definition, e.g : /obj/foo/bar{variables=derp} - var/atom_def = text2path(copytext(full_def,1,findtext(full_def,"{")))//path definition, e.g /obj/foo/bar - members.Add(atom_def) - old_position = dpos + 1 + do + //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) + dpos = find_next_delimiter_position(model, old_position, ",", "{", "}") //find next delimiter (comma here) that's not within {...} - //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) - var/list/fields = list() + var/full_def = trim_text(copytext(model, old_position, dpos)) //full definition, e.g : /obj/foo/bar{variables=derp} + var/variables_start = findtext(full_def, "{") + var/atom_def = text2path(trim_text(copytext(full_def, 1, variables_start))) //path definition, e.g /obj/foo/bar + old_position = dpos + 1 - var/variables_start = findtext(full_def,"{") - if(variables_start)//if there's any variable - full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' - fields = readlist(full_def, ";") + if(!atom_def) // Skip the item if the path does not exist. Fix your crap, mappers! + continue + members.Add(atom_def) - //then fill the members_attributes list with the corresponding variables - members_attributes.len++ - members_attributes[index++] = fields - CHECK_TICK + //transform the variables in text format into a list (e.g {var1="derp"; var2; var3=7} => list(var1="derp", var2, var3=7)) + var/list/fields = list() - while(dpos != 0) + if(variables_start)//if there's any variable + full_def = copytext(full_def,variables_start+1,length(full_def))//removing the last '}' + fields = readlist(full_def, ";") + + //then fill the members_attributes list with the corresponding variables + members_attributes.len++ + members_attributes[index++] = fields + + CHECK_TICK + while(dpos != 0) + + modelCache[model] = list(members, members_attributes) //////////////// @@ -187,7 +212,6 @@ var/global/dmm_suite/preloader/_preloader = new if(use_preloader && instance) _preloader.load(instance) - members.Remove(members[index]) //then instance the /turf and, if multiple tiles are presents, simulates the DMM underlays piling effect @@ -203,7 +227,7 @@ var/global/dmm_suite/preloader/_preloader = new if(T) //if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 - while(index <= members.len) + while(index <= members.len - 1) // Last item is an /area turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect @@ -236,16 +260,11 @@ var/global/dmm_suite/preloader/_preloader = new //text trimming (both directions) helper proc //optionally removes quotes before and after the text (for variable name) /dmm_suite/proc/trim_text(what as text,trim_quotes=0) - while(length(what) && (findtext(what," ",1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what," ",length(what),0))) - what=copytext(what,1,length(what)) if(trim_quotes) - while(length(what) && (findtext(what,quote,1,2))) - what=copytext(what,2,0) - while(length(what) && (findtext(what,quote,length(what),0))) - what=copytext(what,1,length(what)) - return what + return trimQuotesRegex.Replace(what, "") + else + return trimRegex.Replace(what, "") + //find the position of the next delimiter,skipping whatever is comprised between opening_escape and closing_escape //returns 0 if reached the last delimiter @@ -353,7 +372,10 @@ var/global/dmm_suite/preloader/_preloader = new /dmm_suite/preloader/proc/load(atom/what) for(var/attribute in attributes) - what.vars[attribute] = attributes[attribute] + var/value = attributes[attribute] + if(islist(value)) + value = deepCopyList(value) + what.vars[attribute] = value use_preloader = FALSE /area/template_noop From 03d38bf895a5a0932dffd75a22700fd08957ad2b Mon Sep 17 00:00:00 2001 From: YotaXP Date: Thu, 31 Mar 2016 13:44:04 -0400 Subject: [PATCH 14/94] Adds a 'measureOnly' mode to the maploader code for templates. --- code/datums/helper_datums/map_template.dm | 19 ++---- .../admin/verbs/map_template_loadverb.dm | 15 +++-- .../awaymissions/maploader/dmm_suite.dm | 3 +- code/modules/awaymissions/maploader/reader.dm | 64 +++++++++++++------ 4 files changed, 62 insertions(+), 39 deletions(-) diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 860ce32d94e..156f896e187 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -16,16 +16,10 @@ name = rename /datum/map_template/proc/preload_size(path) - var/quote = ascii2text(34) - var/map_file = file2text(path) - var/key_len = length(copytext(map_file,2,findtext(map_file,quote,2,0))) - //assuming one map per file since more makes no sense for templates anyway - var/mapstart = findtext(map_file,"\n(1,1,") //todo replace with something saner - var/content = copytext(map_file,findtext(map_file,quote+"\n",mapstart,0)+2,findtext(map_file,"\n"+quote,mapstart,0)+1) - var/line_len = length(copytext(content,1,findtext(content,"\n",2,0))) - - width = line_len/key_len - height = length(content)/(line_len+1) + var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) + . = bounds[1] != 0 // 0 if the map failed to be measured + width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[5] /datum/map_template/proc/load(turf/T, centered = FALSE) if(centered) @@ -37,14 +31,14 @@ if(T.y+height > world.maxy) return - maploader.load_map(get_file(), T.x-1, T.y-1, T.z) + var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE) //initialize things that are normally initialized after map load var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/obj/structure/cable/cables = list() var/list/atom/atoms = list() - for(var/L in block(T,locate(T.x+width-1, T.y+height-1, T.z))) + for(var/L in block(locate(bounds[1], bounds[2], bounds[3]), locate(bounds[4], bounds[5], bounds[6]))) var/turf/B = L for(var/A in B) atoms += A @@ -60,6 +54,7 @@ SSair.setup_template_machinery(atmos_machines) log_game("[name] loaded at at [T.x],[T.y],[T.z]") + return 1 /datum/map_template/proc/get_file() if(mapfile) diff --git a/code/modules/admin/verbs/map_template_loadverb.dm b/code/modules/admin/verbs/map_template_loadverb.dm index 781ab735832..b1a524986dc 100644 --- a/code/modules/admin/verbs/map_template_loadverb.dm +++ b/code/modules/admin/verbs/map_template_loadverb.dm @@ -18,8 +18,10 @@ preview += image('icons/turf/overlays.dmi',S,"greenOverlay") usr.client.images += preview if(alert(usr,"Confirm location.","Template Confirm","Yes","No") == "Yes") - template.load(T, centered = TRUE) - message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + if(template.load(T, centered = TRUE)) + message_admins("[key_name_admin(usr)] has placed a map template ([template.name]) at (JMP)") + else + usr << "Failed to place map" usr.client.images -= preview /client/proc/map_template_upload() @@ -34,6 +36,9 @@ return var/datum/map_template/M = new(map=map, rename="[map]") - M.preload_size(map) - map_templates[M.name] = M - message_admins("[key_name_admin(usr)] has uploaded a map template ([map])") + if(M.preload_size(map)) + usr << "Map template '[map]' ready to place ([M.width]x[M.height])" + map_templates[M.name] = M + message_admins("[key_name_admin(usr)] has uploaded a map template ([map])") + else + usr << "Map template '[map]' failed to load properly" diff --git a/code/modules/awaymissions/maploader/dmm_suite.dm b/code/modules/awaymissions/maploader/dmm_suite.dm index ba4664fa4aa..01f7a08a1c9 100644 --- a/code/modules/awaymissions/maploader/dmm_suite.dm +++ b/code/modules/awaymissions/maploader/dmm_suite.dm @@ -53,10 +53,11 @@ dmm_suite{ */ - verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num){ + verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num, var/measureOnly as num){ // dmm_file: A .dmm file to load (Required). // z_offset: A number representing the z-level on which to start loading the map (Optional). // cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). + // measureOnly: When true, no changes will be made to the world (Optional). } verb/write_map(var/turf/t1 as turf, var/turf/t2 as turf, var/flags as num){ // t1: A turf representing one corner of a three dimensional grid (Required). diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index e153ad961d0..f765cda07e0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -25,7 +25,7 @@ var/global/dmm_suite/preloader/_preloader = new * 2) Read the map line by line, parsing the result (using parse_grid) * */ -/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num) +/dmm_suite/load_map(dmm_file as file, x_offset as num, y_offset as num, z_offset as num, cropMap as num, measureOnly as num) var/tfile = dmm_file//the map file we're creating if(isfile(tfile)) tfile = file2text(tfile) @@ -37,6 +37,7 @@ var/global/dmm_suite/preloader/_preloader = new if(!z_offset) z_offset = world.maxz + 1 + var/list/bounds = list(1.#INF, 1.#INF, 1.#INF, -1.#INF, -1.#INF, -1.#INF) var/list/grid_models = list() var/key_len = 0 @@ -53,7 +54,8 @@ var/global/dmm_suite/preloader/_preloader = new key_len = length(key) else throw EXCEPTION("Inconsistant key length in DMM") - grid_models[key] = dmmRegex.group[2] + if(!measureOnly) + grid_models[key] = dmmRegex.group[2] // (1,1,1) = {"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"} else if(dmmRegex.group[3]) // Coords @@ -72,6 +74,10 @@ var/global/dmm_suite/preloader/_preloader = new else world.maxz = zcrd //create a new z_level if needed + bounds[1] = min(bounds[1], xcrdStart) // Update the min-x + bounds[3] = min(bounds[3], zcrd) // Update the min-z + bounds[6] = max(bounds[6], zcrd) // Update the max-z + var/list/gridLines = splittext(dmmRegex.group[6], "\n") var/leadingBlanks = 0 @@ -85,34 +91,50 @@ var/global/dmm_suite/preloader/_preloader = new if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. + bounds[2] = min(bounds[2], ycrd) // Update the min-y ycrd += gridLines.len - 1 // Start at the top and work down if(!cropMap && ycrd > world.maxy) - world.maxy = ycrd // Expand Y here. X is expanded in the loop below + if(!measureOnly) + world.maxy = ycrd // Expand Y here. X is expanded in the loop below + bounds[5] = max(bounds[5], ycrd) // Update the max-y + else + bounds[5] = max(bounds[5], min(ycrd, world.maxy)) // Update the max-y - for(var/line in gridLines) - if(ycrd <= world.maxy && ycrd >= 1) - xcrd = xcrdStart - for(var/tpos = 1 to length(line) - key_len + 1 step key_len) - if(xcrd > world.maxx) - if(cropMap) - break - else - world.maxx = xcrd + var/maxx = xcrdStart + if(measureOnly) + for(var/line in gridLines) + maxx = max(maxx, xcrdStart + length(line) / key_len - 1) + else + for(var/line in gridLines) + if(ycrd <= world.maxy && ycrd >= 1) + xcrd = xcrdStart + for(var/tpos = 1 to length(line) - key_len + 1 step key_len) + if(xcrd > world.maxx) + if(cropMap) + break + else + world.maxx = xcrd - if(xcrd >= 1) - var/model_key = copytext(line, tpos, tpos + key_len) - if(!grid_models[model_key]) - throw EXCEPTION("Undefined model key in DMM.") - parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) - sleep(-1) + if(xcrd >= 1) + var/model_key = copytext(line, tpos, tpos + key_len) + if(!grid_models[model_key]) + throw EXCEPTION("Undefined model key in DMM.") + parse_grid(grid_models[model_key], xcrd, ycrd, zcrd) + CHECK_TICK - ++xcrd - --ycrd + maxx = max(maxx, xcrd) + ++xcrd + --ycrd + + bounds[4] = max(bounds[4], cropMap ? min(maxx, world.maxx) : maxx) // Update the max-x CHECK_TICK - return 1 + if(bounds[1] == 1.#INF) + return list(0, 0, 0, 0, 0, 0) + else + return bounds /** * Fill a given tile with its area/turf/objects/mobs From 0d8cc8aee7c65d493509b2287adf93bb96b4462b Mon Sep 17 00:00:00 2001 From: YotaXP Date: Mon, 18 Apr 2016 17:41:05 -0400 Subject: [PATCH 15/94] Make the loader use ChangeTurf() for turfs. --- code/datums/helper_datums/map_template.dm | 9 ++++--- code/game/turfs/turf.dm | 2 +- code/modules/awaymissions/maploader/reader.dm | 27 +++++++------------ code/modules/lighting/lighting_system.dm | 2 +- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 156f896e187..5f778cb5806 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -17,9 +17,10 @@ /datum/map_template/proc/preload_size(path) var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) - . = bounds[1] != 0 // 0 if the map failed to be measured - width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 - height = bounds[5] + if(bounds) + width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[5] + return bounds /datum/map_template/proc/load(turf/T, centered = FALSE) if(centered) @@ -32,6 +33,8 @@ return var/list/bounds = maploader.load_map(get_file(), T.x, T.y, T.z, cropMap=TRUE) + if(!bounds) + return 0 //initialize things that are normally initialized after map load var/list/obj/machinery/atmospherics/atmos_machines = list() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 7ab1efb6c7b..31f6e6ef0c2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -132,7 +132,7 @@ /turf/proc/ChangeTurf(path) if(!path) return - if(path == type) + if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed return src var/old_blueprint_data = blueprint_data diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index f765cda07e0..6f09a3e53d8 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -132,7 +132,7 @@ var/global/dmm_suite/preloader/_preloader = new CHECK_TICK if(bounds[1] == 1.#INF) - return list(0, 0, 0, 0, 0, 0) + return null else return bounds @@ -217,10 +217,6 @@ var/global/dmm_suite/preloader/_preloader = new //The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile - //in case of multiples turfs on one tile, - //will contains the images of all underlying turfs, to simulate the DMM multiple tiles piling - var/list/turfs_underlays = list() - //first instance the /area and remove it from the members list index = members.len if(members[index] != /area/template_noop) @@ -250,10 +246,9 @@ var/global/dmm_suite/preloader/_preloader = new //if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 while(index <= members.len - 1) // Last item is an /area - turfs_underlays.Insert(1,image(T.icon,null,T.icon_state,T.layer,T.dir))//add the current turf image to the underlays list - var/turf/UT = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf - add_underlying_turf(UT,T,turfs_underlays)//simulates the DMM piling effect - T = UT + var/underlay = T.appearance + T = instance_atom(members[index],members_attributes[index],xcrd,ycrd,zcrd)//instance new turf + T.underlays += underlay index++ //finally instance all remainings objects/mobs @@ -272,7 +267,11 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) - instance = new path (T)//first preloader pass + if(ispath(path, /turf)) + T.ChangeTurf(path) + instance = T + else + instance = new path (T)//first preloader pass if(use_preloader && instance)//second preloader pass, for those atoms that don't ..() in New() _preloader.load(instance) @@ -358,14 +357,6 @@ var/global/dmm_suite/preloader/_preloader = new return to_return -//simulates the DM multiple turfs on one tile underlaying -/dmm_suite/proc/add_underlying_turf(turf/placed,turf/underturf, list/turfs_underlays) - if(underturf.density) - placed.density = 1 - if(underturf.opacity) - placed.opacity = 1 - placed.underlays += turfs_underlays - //atom creation method that preloads variables at creation /atom/New() if(use_preloader && (src.type == _preloader.target_path))//in case the instanciated atom is creating other atoms in New() diff --git a/code/modules/lighting/lighting_system.dm b/code/modules/lighting/lighting_system.dm index cce8b0a8aef..e797c182abc 100644 --- a/code/modules/lighting/lighting_system.dm +++ b/code/modules/lighting/lighting_system.dm @@ -258,7 +258,7 @@ var/list/affecting_lights //not initialised until used (even empty lists reserve a fair bit of memory) /turf/ChangeTurf(path) - if(!path || path == type) //Sucks this is here but it would cause problems otherwise. + if(!path || (!use_preloader && path == type)) //Sucks this is here but it would cause problems otherwise. return ..() for(var/obj/effect/decal/cleanable/decal in src.contents) From 2072670afd13484d14258123fa0d21bf2ecc1b17 Mon Sep 17 00:00:00 2001 From: YotaXP Date: Mon, 18 Apr 2016 18:12:07 -0400 Subject: [PATCH 16/94] Clean up magic numbers. --- code/__DEFINES/misc.dm | 8 ++++++++ code/datums/helper_datums/map_template.dm | 7 ++++--- code/modules/awaymissions/maploader/reader.dm | 17 ++++++++--------- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 3e92c53795c..928ce91fe3d 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -410,3 +410,11 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define PLANT_WEED 1 #define PLANT_MUSHROOM 2 #define PLANT_ALIEN 3 + +// Maploader bounds indices +#define MAP_MINX 1 +#define MAP_MINY 2 +#define MAP_MINZ 3 +#define MAP_MAXX 4 +#define MAP_MAXY 5 +#define MAP_MAXZ 6 diff --git a/code/datums/helper_datums/map_template.dm b/code/datums/helper_datums/map_template.dm index 5f778cb5806..3a947256fcb 100644 --- a/code/datums/helper_datums/map_template.dm +++ b/code/datums/helper_datums/map_template.dm @@ -18,8 +18,8 @@ /datum/map_template/proc/preload_size(path) var/bounds = maploader.load_map(file(path), 1, 1, 1, cropMap=FALSE, measureOnly=TRUE) if(bounds) - width = bounds[4] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 - height = bounds[5] + width = bounds[MAP_MAXX] // Assumes all templates are rectangular, have a single Z level, and begin at 1,1,1 + height = bounds[MAP_MAXY] return bounds /datum/map_template/proc/load(turf/T, centered = FALSE) @@ -41,7 +41,8 @@ var/list/obj/structure/cable/cables = list() var/list/atom/atoms = list() - for(var/L in block(locate(bounds[1], bounds[2], bounds[3]), locate(bounds[4], bounds[5], bounds[6]))) + for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), + locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) var/turf/B = L for(var/A in B) atoms += A diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 6f09a3e53d8..e716f3e8fc0 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -74,9 +74,9 @@ var/global/dmm_suite/preloader/_preloader = new else world.maxz = zcrd //create a new z_level if needed - bounds[1] = min(bounds[1], xcrdStart) // Update the min-x - bounds[3] = min(bounds[3], zcrd) // Update the min-z - bounds[6] = max(bounds[6], zcrd) // Update the max-z + bounds[MAP_MINX] = min(bounds[MAP_MINX], xcrdStart) + bounds[MAP_MINZ] = min(bounds[MAP_MINZ], zcrd) + bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], zcrd) var/list/gridLines = splittext(dmmRegex.group[6], "\n") @@ -91,15 +91,15 @@ var/global/dmm_suite/preloader/_preloader = new if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - bounds[2] = min(bounds[2], ycrd) // Update the min-y + bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd) ycrd += gridLines.len - 1 // Start at the top and work down if(!cropMap && ycrd > world.maxy) if(!measureOnly) world.maxy = ycrd // Expand Y here. X is expanded in the loop below - bounds[5] = max(bounds[5], ycrd) // Update the max-y + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], ycrd) else - bounds[5] = max(bounds[5], min(ycrd, world.maxy)) // Update the max-y + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], min(ycrd, world.maxy)) var/maxx = xcrdStart if(measureOnly) @@ -127,11 +127,11 @@ var/global/dmm_suite/preloader/_preloader = new ++xcrd --ycrd - bounds[4] = max(bounds[4], cropMap ? min(maxx, world.maxx) : maxx) // Update the max-x + bounds[MAP_MAXX] = max(bounds[MAP_MAXX], cropMap ? min(maxx, world.maxx) : maxx) CHECK_TICK - if(bounds[1] == 1.#INF) + if(bounds[1] == 1.#INF) // Shouldn't need to check every item return null else return bounds @@ -179,7 +179,6 @@ var/global/dmm_suite/preloader/_preloader = new var/old_position = 1 var/dpos - //var/model_sl = replacetext(model, "\n", "") do //finding next member (e.g /turf/unsimulated/wall{icon_state = "rock"} or /area/mine/explored) From 7f7f1dd374889a01d0d7c54c6e91d29265a4f45e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Tue, 19 Apr 2016 00:18:33 +0100 Subject: [PATCH 17/94] Corrected description of laughter demon --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 2b559a8fbd7..1553af20d1e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -139,7 +139,7 @@ // them so much, it wants to hug everyone at once! name = "laughter demon" real_name = "laughter demon" - desc = "A large, adorable creature covered in armored pink scales." + desc = "A large, adorable creature covered in armor with pink bows." speak_emote = list("giggles","titters","chuckles") emote_hear = list("gaffaws","laughs") response_help = "hugs" @@ -182,5 +182,5 @@ if(M.real_name == ghost.real_name) ghost.reenter_corpse() break - M << "You leave the [src]'s warm embrace, and feel ready to take on the world." - + M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + From c74ad4b70881d25f96a10e3676e713531001b290 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:16:26 +0100 Subject: [PATCH 18/94] Code review --- .../miniantags/slaughter/slaughter.dm | 37 ++++++------------- .../spells/spell_types/ethereal_jaunt.dm | 3 -- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 1553af20d1e..21bd67e860e 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -42,8 +42,15 @@ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " + loot = list(/obj/effect/decal/cleanable/blood, \ + /obj/effect/decal/cleanable/blood/innards, \ + /obj/item/organ/internal/heart/demon) + del_on_death = 1 + var/death_message = "The generic slaughter demon screams in anger because this is the default death message!" + /mob/living/simple_animal/slaughter/New() ..() + death_message = "[src] screams in anger as it collapses into a puddle of viscera." var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -57,22 +64,12 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..(1) - death_gibs() + ..() death_mealspill() + visible_message(deathmessage) playsound(get_turf(src),death_sound, 200, 1) - death_message() - - ghostize() - qdel(src) - -/mob/living/simple_animal/slaughter/proc/death_gibs() - - new /obj/effect/decal/cleanable/blood(get_turf(src)) - new /obj/effect/decal/cleanable/blood/innards(get_turf(src)) - new /obj/item/organ/internal/heart/demon(src.loc) /mob/living/simple_animal/slaughter/proc/death_mealspill() if(consumed_mobs) @@ -85,9 +82,6 @@ desc = "A repulsive pile of guts and gore." random_icon_states = list("innards") -/mob/living/simple_animal/slaughter/proc/death_message() - visible_message("[src] screams in anger as it collapses into a puddle of viscera.") - /mob/living/simple_animal/slaughter/phasein() . = ..() speed = 0 @@ -148,26 +142,19 @@ attack_sound = 'sound/items/bikehorn.ogg' feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' + death_message = "[src] fades out, as all of its friends are released from its prison of hugs." icon_state = "bowmon" icon_living = "bowmon" + loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) + // Keep the people we hug! consumed_mobs = list() // HOT. PINK. //color = "#FF69B4" -/mob/living/simple_animal/slaughter/laughter/death_gibs() - // Laughter demons are powered not by demonic energy, but by the laughter - // of kittens - var/mob/living/simple_animal/pet/cat/kitten/K = new(get_turf(src)) - K.name = "Laughter" - -/mob/living/simple_animal/slaughter/laughter/death_message() - visible_message("[src] fades out, as all of its friends are released from its prison of hugs.", null, "You hear a sigh and a giggle.") - - /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) return diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm index 904160a6fe2..07623aad297 100644 --- a/code/modules/spells/spell_types/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/ethereal_jaunt.dm @@ -69,9 +69,6 @@ break target.canmove = 1 -//Silence wizard during jaunt so they cannot spell cast while invisible -// - /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/jaunt_disappear(atom/movable/overlay/animation, mob/living/target) animation.icon_state = "liquify" flick("liquify",animation) From 86f7fbc455bb05c989b828bfbaeed08a23fa8e95 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:18:13 +0100 Subject: [PATCH 19/94] Death message --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 21bd67e860e..c66d087de8f 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -142,7 +142,6 @@ attack_sound = 'sound/items/bikehorn.ogg' feast_sound = 'sound/spookoween/scary_horn2.ogg' death_sound = 'sound/misc/sadtrombone.ogg' - death_message = "[src] fades out, as all of its friends are released from its prison of hugs." icon_state = "bowmon" icon_living = "bowmon" @@ -155,6 +154,11 @@ // HOT. PINK. //color = "#FF69B4" +/mob/living/simple_animal/slaughter/laughter/New() + ..() + + death_message = "[src] fades out, as all of its friends are released from its prison of hugs." + /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) return From 4bae3212b1cf6af3e1e8be1e0ba0bdcaae2c44ad Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Wed, 20 Apr 2016 23:22:05 +0100 Subject: [PATCH 20/94] Deathmessage changes --- code/game/gamemodes/miniantags/slaughter/slaughter.dm | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index c66d087de8f..f065d53038c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -46,11 +46,11 @@ /obj/effect/decal/cleanable/blood/innards, \ /obj/item/organ/internal/heart/demon) del_on_death = 1 - var/death_message = "The generic slaughter demon screams in anger because this is the default death message!" + deathmessage = "The generic slaughter demon screams in anger because this is the default death message!" /mob/living/simple_animal/slaughter/New() ..() - death_message = "[src] screams in anger as it collapses into a puddle of viscera." + deathmessage = "[src] screams in anger as it collapses into a puddle of viscera." var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -68,7 +68,6 @@ death_mealspill() - visible_message(deathmessage) playsound(get_turf(src),death_sound, 200, 1) /mob/living/simple_animal/slaughter/proc/death_mealspill() @@ -157,7 +156,7 @@ /mob/living/simple_animal/slaughter/laughter/New() ..() - death_message = "[src] fades out, as all of its friends are released from its prison of hugs." + deathmessage = "[src] fades out, as all of its friends are released from its prison of hugs." /mob/living/simple_animal/slaughter/laughter/death_mealspill() if(!consumed_mobs) From f5d28527c5eac8f7ba1cd8b6f674b6cf38ed0e3d Mon Sep 17 00:00:00 2001 From: oranges Date: Thu, 21 Apr 2016 20:33:16 +1200 Subject: [PATCH 21/94] Properly revert the container drop code --- code/game/objects/items/weapons/storage/storage.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 9764781e8fc..0c5d6de57df 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -472,8 +472,8 @@ /obj/item/weapon/storage/Destroy() - var/turf = get_turf(src) - empty_object_contents(0, turf) + for(var/obj/O in contents) + O.mouse_opacity = initial(O.mouse_opacity) close_all() qdel(boxes) From c01d7393906419fcf1aee7bc081c9a3267ac6bf5 Mon Sep 17 00:00:00 2001 From: Lularian Date: Thu, 21 Apr 2016 17:27:47 -0500 Subject: [PATCH 22/94] R&D is shit --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index d1716bc94a2..878c1abedaf 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -35,7 +35,7 @@ desc = "A backpack that opens into a localized pocket of Blue Space." origin_tech = "bluespace=4" icon_state = "holdingpack" - max_w_class = 5 + max_w_class = 10 max_combined_w_class = 35 burn_state = FIRE_PROOF var/pshoom = 'sound/items/PSHOOM.ogg' From 3a67251ebf99b514e6a67c8cce3b71de3fb4006b Mon Sep 17 00:00:00 2001 From: oranges Date: Tue, 19 Apr 2016 22:59:42 +0000 Subject: [PATCH 23/94] Time filter added to changelog tool You can now use -t to determine how many weeks back the generated html changelog should go. The default is set to 4 Long form of the argument is supported as --time-period --- tools/ss13_genchangelog.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/ss13_genchangelog.py b/tools/ss13_genchangelog.py index ed76aa9c6c6..2238e2925e5 100644 --- a/tools/ss13_genchangelog.py +++ b/tools/ss13_genchangelog.py @@ -27,7 +27,7 @@ THE SOFTWARE. from __future__ import print_function import yaml, os, glob, sys, re, time, argparse -from datetime import datetime, date +from datetime import datetime, date, timedelta from time import time today = date.today() @@ -36,6 +36,7 @@ dateformat = "%d %B %Y" opt = argparse.ArgumentParser() opt.add_argument('-d', '--dry-run', dest='dryRun', default=False, action='store_true', help='Only parse changelogs and, if needed, the targetFile. (A .dry_changelog.yml will be output for debugging purposes.)') +opt.add_argument('-t', '--time-period', dest='timePeriod', default=4, type=int, help='Define how many weeks back the changelog should display') opt.add_argument('targetFile', help='The HTML changelog we wish to update.') opt.add_argument('ymlDir', help='The directory of YAML changelogs we will use.') @@ -172,8 +173,11 @@ with open(args.targetFile.replace('.htm', '.dry.htm') if args.dryRun else args.t with open(os.path.join(targetDir, 'templates', 'header.html'), 'r') as h: for line in h: changelog.write(line) - + + weekstoshow = timedelta(weeks=args.timePeriod) for _date in reversed(sorted(all_changelog_entries.keys())): + if not (today - _date < weekstoshow): + continue entry_htm = '\n' entry_htm += '\t\t\t

{date}

\n'.format(date=_date.strftime(dateformat)) write_entry = False From dfc91ae3c965a80d2b7a1c0ff0c6e9a509eda6ea Mon Sep 17 00:00:00 2001 From: bawhoppen Date: Fri, 22 Apr 2016 06:15:12 -0500 Subject: [PATCH 24/94] phix --- code/game/objects/items/weapons/storage/backpack.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 878c1abedaf..46ccead351f 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -35,7 +35,7 @@ desc = "A backpack that opens into a localized pocket of Blue Space." origin_tech = "bluespace=4" icon_state = "holdingpack" - max_w_class = 10 + max_w_class = 6 max_combined_w_class = 35 burn_state = FIRE_PROOF var/pshoom = 'sound/items/PSHOOM.ogg' From cf886fc84d596f26838a5fb01510ba7431cec078 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 12:22:58 +0100 Subject: [PATCH 25/94] New Processor Overload event An exospheric bubble has occured, making the telecommunications processors overload and shut down (and very occasionally, also explode). But hey, at least telecommunications is still functional? You just gotta shout REALLY LOUDLY to make yourself heard over the static. :cl: coiax rscadd: Centcom regret to inform you that new instabilities with nearby gas giants are causing exospheric bubbles to affect the telecommunications processors. Please contact your supervisor for further instructions. /:cl: --- code/modules/events/processor_overload.dm | 38 +++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 code/modules/events/processor_overload.dm diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm new file mode 100644 index 00000000000..bae9f03d574 --- /dev/null +++ b/code/modules/events/processor_overload.dm @@ -0,0 +1,38 @@ +/datum/round_event_control/processor_overload + name = "Processor Overload" + typepath = /datum/round_event/processor_overload + weight = 15 + +/datum/round_event/processor_overload + announceWhen = 1 + +/datum/round_event/processor_overload/announce() + var/alert = pick( "Exospheric bubble inbound. Processor overload is likely. Please contact you*%xp25)`6cq-BZZT", \ + "Exospheric bubble inbound. Processor overload is likel*1eta;c5;'1v¬-BZZZT", \ + "Exospheric bubble inbound. Processor ov#MCi46:5.;@63-BZZZZT", \ + "Exospheric bubble inbo'Fz\\k55_@-BZZZZZT", \ + "Exospheri:%£ QCbyj^j" + A << "[alert]" + A << "
" + + // Announce most of the time, but leave a little gap so people don't know + // whether it's, say, a tesla zapping tcomms, or some selective + // modification of the tcomms bus + if(prob(80)) + priority_announce(alert) + + +/datum/round_event/processor_overload/start() + for(var/obj/machinery/telecomms/T in telecomms_list) + if(istype(T, /obj/machinery/telecomms/processor)) + var/obj/machinery/telecomms/processor/P = T + // Wow, it overloaded so much that it EXPLODED!? + if(prob(10)) + P.ex_act(2) + else + P.emp_act(1) From 02110a84b84664fedee04da3e2162a09237bf992 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 12:41:37 +0100 Subject: [PATCH 26/94] Added processor_overload.dm to tgstation.dme --- tgstation.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..5a9e50093d4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1020,6 +1020,7 @@ #include "code\modules\events\operative.dm" #include "code\modules\events\portal_storm.dm" #include "code\modules\events\prison_break.dm" +#include "code\modules\events\processor_overload.dm" #include "code\modules\events\radiation_storm.dm" #include "code\modules\events\shuttle_loan.dm" #include "code\modules\events\spacevine.dm" From 06f34b16342f4b2469ac59befb28aa5a6eb2b3de Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Fri, 22 Apr 2016 14:29:00 +0100 Subject: [PATCH 27/94] Removed processor explosion chance --- code/modules/events/processor_overload.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bae9f03d574..200bb87c10c 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -31,8 +31,6 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Wow, it overloaded so much that it EXPLODED!? - if(prob(10)) - P.ex_act(2) - else - P.emp_act(1) + // Apparently machines very occasionally blowing up due to + // overload is "boring" and "not fun". So just EMP for now. + P.emp_act(1) From c5506d19af1fdaafb9e2077301defad8092f2871 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Fri, 22 Apr 2016 19:06:41 -0700 Subject: [PATCH 28/94] Adds craftable bracers, adds watchers dropping bones. --- code/modules/clothing/gloves/miscellaneous.dm | 19 +++++++++++++++++- code/modules/crafting/recipes.dm | 8 ++++++++ .../simple_animal/hostile/mining_mobs.dm | 2 +- icons/mob/hands.dmi | Bin 8239 -> 8608 bytes icons/obj/clothing/gloves.dmi | Bin 11753 -> 12197 bytes 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 894c8b8d3ae..1a261f16d4a 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -35,4 +35,21 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT - burn_state = FIRE_PROOF \ No newline at end of file + burn_state = FIRE_PROOF + +/obj/item/clothing/gloves/bracer + name = "bone bracers" + desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." + icon_state = "bracers" + item_state = "bracers" + item_color = null //So they don't wash. + transfer_prints = TRUE + strip_delay = 40 + put_on_delay = 20 + body_parts_covered = ARMS + cold_protection = ARMS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + burn_state = FIRE_PROOF + armor = list(melee = 60, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. + diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 2f0f739bf0d..a2b1e4a81e7 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -363,6 +363,14 @@ name = "Bone Talisman" result = /obj/item/clothing/tie/talisman time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2, + /obj/item/stack/sheet/sinew = 1) + category = CAT_MISC + +/datum/table_recipe/bracers + name = "Bone Bracers" + result = /obj/item/clothing/gloves/bracer + time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) category = CAT_MISC \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0d41abe1c86..d914bc5943b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -635,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, obj/item/stack/sheet/bone = 1) //Goliath diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index f8a6c510b68f54dbaee7423e7bda8798763692f8..6a7d0032c7f989a367ee4aa594348d453243cc26 100644 GIT binary patch literal 8608 zcmc(Fc~n!$ws+K4+X-wH5fNxxg=P{VA~J+Hpv(va2vdm43_?H%Gr^VyTTvqO3^ES^ zBC~)H6akrKNPbHNj&)(;` zxtad4!)Ffz0DxnL26~nNz@GcN>E{E&l9&gDCc=w-VOF+*daeP^k3IbYJrTYDKuC7V z7|6Ht%F+GbzH04H7?9^A;f=q)S$*x8|N1xkhZv(hmwE z?LK*|XT;GClWYQ_$w-?v{e?&f3k$slb2(Hq6F2$Dnc|srO95IfITku%1frR0l=FTV zfk3<#CDTi)W#V6EZY

WsJDt=zAxy^xApRxR#e6hneCPcRCGEJPfc;eOap+kn0xbJ=5B#+y)Lyr zm8RG&d4Uv<2KPz#e7R+E;$bv&I@eAR=%AH-;B0*1_8xjjoSd0f_fr7iSAe13O{ z+Dy2g<3h&L8j0*{sEnkd_MLa$K0GneJyC1=>(8-=;?IA(t{NnJ9(evp@A&a+>YW`n zu7|y@J@F2bz1aD&sLb$%`4JcS+txN_06DwbweGJI6S+^0efLs&lyOhHY&1Ih>mllrgJtwgTp!C;-GytGm{qudm+dlyZ0LK5O z(0%k93rTZ$H9#=U((v(t6Wj5oA9hPLd}izMpWit_%6PniQ+J1Jyq-0a$ir=3?Tw!3 z=9Oahz~+(@k|{9D;7?-~Ytv?d@TvM9X67v#!@cB6SiH6N0Iz-ZH5zpi zhWCXNeXse5)#NHx|b5d{7Y3sCX2ybIe4U+zG7E5D*r+Crno=P=qBG*U93fbCP zfgKC6BImBZ8O+kal$5xA>=e5t_|@$&WP&@B*XO~$Vc*u)Rvpiv(eR3imzAX0#?;DX znNKDU4hP`KCfyWv9*uu<@ak#z_X2r$I&pGALj}IvSeCat0&tDPf{bN`{F9B|7{-Tv z2W9OQutXA?s@N2`oCa17K<>mmuhd0Co;gK z|LH}gSW(xv3lCs=AX5xm+n@WczwzuDe3pv9s;fe;y zFHU!Y>-&uhI=Ms&02o`UC7Aoba=ds-A`?Z6izfxsc}6j#&NnRUibTYF7C&kjbV+l? z4^BrFotF~T>76lo&=? zRg~>I-ZytVP>3IvBx{?^`?;VMV;s(+Gh2182s7(oDAa?gh};ngncExOgK+fQ+3NF0 z2QHPxKZ{G_-;Qz=FDXoHT*xTzT*yYvW7>RfZiUn6Q`n(MdV8}r8;NN}2sH5mmwn|I z^ynzSKapIJNl@DipU-;8y@ks7-su;2bKAe>cs3^eu4%}1)}md@tt zy3a2~(=}~qE_XgoM|3K4?lW5dU=Uf`O*2uI8M-3GsISNR2MX@QjgO4vx3}wp1k)RH z1gFq`qa=fiFAXjuVm63N+gk@>FbW?3b{2DM#QqE|MvP5dx>hMz$(U2p@eWk{fw! zuKNb%uZv__c<%Tth`Y`bHEy2_XRnM+v2{ZG9^DLEWxm922)I^2H$L=`k;ftAw# z&U9QG-_X9+>4QL^>UbKNJdz6vA1dc>uL#R>a&q$768GHQmwsY|81fYVkg)U+%vt^D?hpU;mv_CG$p}ZLvv1SXHh&gebl8m)#UQX5!}~enVp9{ z?}UmV2mvA)v%&T}?dm+|r@H{!6}(g)9d^YTt5j=L0Wq815A?|&P`u5QwmCw(r$ycK zlw{AKhLP0Z_~j*p)Fuc`mtiU6bW=~} zikat-0?^lIR|9c*9BqPDxACw);|W{Z(6e{`1iovo`Y@qu&R(rqFC1MoJ!Jlc*OOV! z`dIQeJVz7m4%$P4~qh&Tw-!!0n1X zQ=E%8r?J*V)b5NwA#Tl-?HZ0Y4<8lhuzxrd7=hX zMKw6WE51}{A^rCmSS*gu%CgS_;oHj_zACkq>HZU6`E+(SLn6|(uxS!SIOQdHP1RQ0 z3$X2g-vs<;&qUR!eJ|aJ@FDMr6}%|h*plRT7mW*@@NW$oEZ8v7Ic;HhwLm+nj>v3D zpyxWc_dWcDSy~qs5}roYYBIxKsq^Zq=T5vSZJrrVDRQy6`laRO7S*`Il;L+badR^q z^v6J|qkn0_Md0-}?c#ZUu)1|D9hmUrU3S4kDGndh?rvE9ZcOioYhMWm&rOO7fXSg~ z3XsR&?-NberDWzO7p(osf%EhBBYFMR+#^Yb%wG9;MP?M?fSSV!%diJ4xN$eb zoz+}z7cqQwE?IB>lzwuHz=u@#$v4j>d$ere#$B=u-5(}bTkzpiNt$9E;{J5=5thhS z4HP^r=rvTg_d}()Y1lM7X%uSB+MY#wyZJPq##?y`7vN*!UhR^;6ovwENy(AdtmMg0B~%IkB#>MHt0t!K$CL zy-)MvH5)H8=LJt74AeZt7ComyP|_N91U1u>(KA|Y9|t@u$EUlEOfkx$mC)^lDuoKH z)uKVEWh=?%Jrh#R62ox<+*Uht`lQK;kYv^jF3>BkHhQ1jN21R=;flDb?Q5fKM>!@OHFZIV{4tI zsq#-WE`q}+dz?7iVUeq?Y8iPmSRvPveMVK^r&6p<4fX0U#tmV2t4bTv@N(nF(dD|9 zMZuzME`^k1gt_{Cxo@&2>gfXHl>b#sh3(kfC9UgMRxkpO#G1bRKf)B1dAqpev&VLq%Ug2{*ozA;i_39B7&U>Wp8{d^sG!qU|QA@E({$3NYQ zSpbrN6^Im6p!FNX(fQe*rtnGYflwrM^Kg>V3k8c)%*{o+cCEUkLv15dOXY%@0ICVB z$bi>r2U_j^qht8_MX6;OE!UFixxe1b0whh_b$2QKm1|ex)%*>R<>Rg#+1b&`@6p`A zO|m|y?a*mu(>{6me{@@Lg@Z_=7=Y+ zWZ`+!q5tTQZu)j$7Udc>N+z3LDOHj!y-Fbu)^|^? z?}ypcf77Y+FWvsoNhID8>TGo)0RpQW0CKb6#;#xB6w5k`h#E%Qxx#f%eSW0j$T(wo z_FSS9zri0Cz+5^9aa0oPDw4|$!d-?75>I&gnTM^3)2WWlpHv4;Es5t50j=eVhHD{j zkhXrf@q!J6h8W>dhle9+kAAAvS*B}I;$Oe1cfFX=?adAvco93Md%8XX^swok zT0-W-@{7MQUE_zfZVE?E7qEgGI9O8INI}02FWb_yJaFp8;m8ewR~0{d&O231Lvs<) zZk4aNm_qhIH#Mxi8z zIl3THw3X{w66k+RA0PU|IYI2$Vg*)xncezw+_KnNfVr)ZyOoqetyZ$|e_r@3k3!Ht zSk%9$wTP$9k?fS6mebJ{Me(9znX`@sU&o9t7VEI{wB$=Jfb1Fs43uF{bkAVUOp5Wj zq{Pi1v8c$k?xIP1CSoDRhpuwY!??t^a^Fy zrBqRcfv6>1m*X5%g`^LCLg8Dk*3Y%gDA;@|sx1@If3eB&C3mo9A-c3=z0D!X=oVvK z_*V!_oIc8MLM^?zsd=e1KH`2j)`_Gn6@SXmbz}~B;C_GnO)0YE=+m!VEo8{7msyTd zgX8frLKCN+SGBoyWIcotT|YaSl6aEYu6sJ^@^v^x#)O&!<8ziEHnL*k#+|Z-@JG58 z(4eC^>)QqCn~T-w#o(LY!~am{75<3RjbIGIZY!Mimv{QATD05nL6U|4+L}Z(VFq7Z znuqGPE(7y6fo8!_q9z`kH{y1fN)N7|%x5%t-z%e@3yrW(4QFN1q{n;FGLMJd?(uEU ztTUfidR$4EJYi_bc^1Bxniqbua^p>tMo_imkMs~n1$h>0mtRxFMn|L(JYIX~axv?3 zhVbT2)IO!Zc~3T|{f{x7)k=Tf)_FPhnTOduqKRmszxt$4i+nqn zt8O1PvHXYotK3;%N9%~NR!vvfm+q`yS~lt>L8XYNyB>4ESvo0n{>U-6Ig&<8McW!f zauCNWH8!i%&f;=2{?U>#pYe2sEv3IG{AtGz*y~q&VR>_F%}DnEp#nAMjG;$3rY<-- z{fR?b7>2?O0T1bkHr>iy0K@TQ@)j;buqfOM87weHe#OpLWP9rt1A%$wa5BSn2SA^k z!`70Jjow_bQ4<`^L#L2>xJr;wO@rD3+rnarV)gU>pD$q#=xpsoJH^n7HXAk4+B=~i z`=B}`9s7Jm2-k==*`Hfmt-rtut{sOy7-1$ypKo!oxk;ukVk|BfdxMzJ=_ zJfdZ8JUESmCUo`-!vfwo!P^!i!Iv<-#WC=gfT5eccj`^xLFP^AGN0{m_LG*#zh90w zUFnMh66{|->Gr@sZ^57*yx~9}+{esb#OI&H%o@3QX=UgwtpOIjP}`RT&?j@ zW8zzs)oLX7P4V{Scv`uw5O3GXXi!i4s?JFTuY1pYR9?*giVn9IMq#2eg>A*oHVag^q z#Ec5&hIZX}e`ny6ydzpqE|HD9KT{2DuefJ!Cmve#CItybDB`0U!RZ?lx`IY7+D0(< znAa2;iotH+X#EbuFZlaqI)<+gN$jqz{$Xy`lnVIfLM&|q(JC;IX`?_lK?~IRsqZ9A1*>kwBJQ zVZ6Lc)o`XHf7vT^*Eh|8WvT_sLyc6K4Yh$y*MpY=I6c0q;MaAihWg?@V@>D*%V>oc zp=TlFz`LE~P0bN--eQSt@mR(eN_dKy`}p*DQ5%=F-)ZW<``X&bRwjbe^^c={lFG3J zAq);$`WBg7lccQ0%#v(Gn?B}t?Y7+&-|_kA;JdRUoEk#Hwg)o0efyF7H{7#%UtSY! zg52_7frZ^z)ZbIx4ND1cA^vot0{~zg<_p74-yHA!f5aGm&~R#d081zO1!@|>|FWVB zlz#?PM^fo2a(pnwTN*XH9%cCb-L33iW%`ppR3n5Hi}Q%px5WJxa%HpIlxyS1F!{c= za7SI(gUwaon0VSfsBiVH^xh+T&zyNiM65WP?=PO~g*Vd$Rjts>c)2JsTSh{_dlr^z z90#nqpP^|9r$HsBw7S8Vh6(>EH1bs1re+vhst8AMy%x& zR@}|0S}1xk-ghBb9~dN`=4 z{8;L#uty-a-as(jXgi4Y(Zz7l^^F>H^KLC`IRf+c)^9>2>r;d0v<3bTao*uTLZ0z~ z@{2zh^7$mB^R_?xy!#bc)hiM|p~ST6_rH4fkXpivGp;qY94o;v=jgZH@k}-{ zB{M5C+06ZEZdX&FR^ehviMiLXqOzrfT|%k4kL#UGD8*;cmIs$S6C|Z19LDUm&`aJ+ z)jR}A=gyGGjC)xGot^h}IAFTOdzR?NU`;A^Cu0c5+z6HF&wj44u+E&`Mxl2Lyte!D zVrF#x+65xllLilH_Wb#$X218o&M=?*wi`xq^)_>YFBwq#BEjs8i~%F5GuT?qYx>Vs z;m$eY!v}h24z*@{#WdFb=Cce&Io<7J*SvX&$5vJTo;)kqYzrdguiqni2g^QAd$;&~ zNeZ-rprJ*AG)Fg34(N*G{PhP#yNK1-ZP$5>-rGoxiS=d!IXZ-r( zgG!K=12=_VNSN$?3&10*>K*6lV^qrTqh?g=$5o$4syK*8Qjd2k1@M7ytkO literal 8239 zcmch7cUV)|yKWo{BZ`b;K}BUoM5H4D5fCye79jLM1c68k5Smh@gjhxyx`Om7EtC*s zXc9`W0MdmJBB2C~ln_FUkOUHvoZvaG7LPH?D5IFjD8s_c~eGuKlz|| z?oy75Z+dDaTJXMvc9f-NW2rG*o}l`BQxX)1L{ zProN{QW#T(>r=?*Mig*Q($OV^cbBw&0^I(k&JX}_s`&XX;Psz?Jpi-+rBS|rR_#vn z$_1^cuvK!4SO2(L)YRdrzeD>A@>|1JFKA&&hY=_c@aaf!71?z)d}d!@R^aN2CNz-W zIS@4`1r;%0MrgFTVrMvyHW!8tkbET@@rBv%mh|ixnq2;u1ia>r?v<%Vg5LzL%Z?%L zDogy_6Y|tZ^H&@$FpX3|nAyP%3-_JxOGo(mh1k8WtFu;tVj+Ry&6#?VO{iahPicND z;nzdsQhQ6Q-P3wY?ID?YP{A5Y%QoxXOf91pG%0wJ<)d6jJ8(%~vnYi;Nn`|Fo1UH~ zH~MBG5D55Xr{CA5-O4qewo|UrFb58JX#A1Ng62<(>NuRq0Q|VWHE4TeNj#UQdczwjjdD{FjfWO;t}+5kI-ssY zK%qRF(LBA1Ybw-vN(Qa)2zxXEzn$DVx(jgoDq!bBgU;t z?p|V#b*jvCiMEDqypzfA9gkvvEzzRH+~W1_Q|p8CLzu`XgmED&CH35i8Ul&wN3s>2 zH~eO}SdW#Qk;3RD? z1XHDz9Oo1w%H8|$_@g(^Efv@jPvdW-OUB^)Gn#Y$9(7Zw?k5t6wG_s*p+Cd3|Bm@J z+nPNoC!vT3V?=S_fQaDw+(loynTGehyC1VRHjAPx>Dp#> zzYo_g<@GKH5znco=1iTUe1b%Md0qmp)-dPVtGUBVav9N$xn4T?c}j_b zXGkFu^mvI$x4r3wrp!O0iGhHE!MxcjpdLD_JLf+?wu&Yr^pCX7N$a`9eqSx}uQr{#@*R>i^}8jy4ge{P`24n*8CqseNWt_WLvzd9Xg`J4f2AgG>ef*(fF~N|>k@ zo~oWmM{Rs_757q6T>Os6I&$O)!pCQ1?tScVf|#YoK7IPdQM$SNJ&76PZ1{LdPQO$< zYUu7L9FGVJ`AE_X*pE&zO`VBaQvB~QptZ-w1d;u&L~hk!YS%;?cP2XF=ReRzx~)b^ zSw9YX{!K-pAtBy(?{*UFcJAD{ytH(wmbXY48F^JuQ1FQlMx)VQ&-gmF_zY(PV!MwP9~x0*&!pVEtGh9jI!aT;JuUVLU@9!(+pm1M*v_$p)8+9pZWb7fSyrTg>uB zaLF~DG=cv1M@DDh6~I5Aw0>mDx=N!6%3#8vjFG`j1JLP_Z?hK+Sz8uj@K84Ulx=e` zV^tFhkt~wLdI@Z`Fif0b3Ioc8Pn^BR@XUp-A3W3{Hp)4psYL_BQ3$i8oqB_aGYhNqW@jNdY=ni5T@Yk>^`mp?ig!SH&T#ESozZ zL(lW4@e>!I)9GVx^N&lN1pBg_#q9ngCP8d&U|3@2_9smEX>(uV%CE#ODpqp5i|VM; zYMg(Q5a4xwNem81l#i{q;nWFf%4^P~K_0OfQ4)V^OpKuy6-Vu4*$2FSKnP+FJM{xX zx`_gHArthRy5E~a&0S~6&CDVO-w#hk2MvDl#~Y#f{A}8sR{#exOqBmiAa|fbgR#1= zO(TC?C@pbW%6dt#HX)jO$de9xI^(4;kZ8S1VLmFbmijt{d?fw#Z~afeNO5vo{A0Mn zrv2tsCNLkueDR6XD$)?z%ZZx63oewkMIO(02EpHEuxnW6$DaXrci?yL0A&2q3Anp=$NqoB_~0k4nY|NL*TAaOHPSn4 za?RbrP%w0`he0-1QP*PKHdYwh+O7=zHdBv6zcb+#O6t>*e`pEgK<1H zC_X-PBUXB|K%qq#b0{uTDbvE|o0n)AXR+1Y3hph-R3Y%=&@IzrIwd~Wse8*@HsyAQ z3i<KpwU*wNx{WfFY>+9PX5y{}fG zMvBi-_IJGhf<+L$@I5h*uHz{l^|D1$q+_mXyz=P;Z$?)muUe%V$u9K19K8tnUfWT#Z7ugSe*;Euy_hYeKS#69ajEb5Bk7SRzuBhezdF#x8P_e zoR{x_S8lAuf(HwyE1dMp21Z;geM`zr(lwlmaFh7b4{DU3zvjHebPRe(H=3ooNewFE z_41WtsLrooqG-cZI#ajq8QjE%W7TSEPq|3d+a7jrdXlMXrLEhQBy^(!>(_J_`?66L z1Z3-z6RiHQ;U_ojRy`tn4ihAhFBsSNyr8FW(7CbW%1G@+^9hPAfJs@&v-T6gdyb{& zri5qYL>F@D`y)f8l;u^W0H9OFiw>>9J1HWQ`NTs*YzCJ^b8qFtiZ5IaLj*|BeH~t6Xr7Y-!PN z4Ro03n>3g`N<<@7#S>W$pAS`p<5t%mv6XY6*qr6Rg4*T#qAyh}B{gC>^U-xf9w3X} z^~4JD23{zY*%i7$7)hIxb)d{vp*)aJE>tFhnH8xo^0403dAtW2*O2^J-8@!ZY+;K- zGO%bOC2&;CRveoE(@L;?oF61EtE3KNZC=+}2#7y}(hoSFY8M#yL+hqUZ8{oc z0C^#ostqftkzNC^q_}PrMsD!9La=pBV!E%Z`Gil;2jD?x7w3#{b94Id9duK zI-ZWlRiIijMDL-zi*)eU(QEN`872yzTGmO_z>pI+1OMflgktHiT@`*|L z-e^CO7!)h5G#&E?T$@qby-OZHv3$PZxt6=Bs;~7RgH+uXO7!W;syj%WYKTmg1VV!e zi0nE7b5H*rXypQjo_>4$jAwW0gD)R2K!#l^p>bbn%f5tk*}*=@b?2Jkc;PxX*fpV~ zI6;6k%o@o%z&QS`IZRcNU|7sSDrJvMz3hpUoITa6ksiRYJzE*3X>F zf0s+ULVRi5P=SNUE|4M}qe78arC3?Z^4B9pxB8$WVaScLy*I0U(ZT~6mewCe-c`8` zCS+EGKNx_Dde6Eaw9EVuf;nIEq{mX^cB>~yU+asgRTz?-=UrLO{a zw%kMYjiTdwxkj_Npma5d^1dd~tdBo!NC=N0GSng32dDJn?1}wxirV9#@_{cw| zdB$ep^XqP2&({x!;_ZnNqblK-OCV>f9xcBy4fOxs(B$p`12cRl%r^hquezbJ6M zo@*L9uOB!epTBW#cEIvh`h|AxWF_A~@{2@ka9+6QyRP1pzQ2Ic`vS^!=WRz?Ws_34X)dO33w`{@@>kZl6ayNIe_k8yF z&TffvdFrF8l2Lj*pBcAJEUXN85<86cx!y7|@{p=y&P!XHW!hkUbf}vhyYD1}z20pj zX7}=qFZxI9(kr6~sJ-ivi6DOdCBg>vuc8@1F1W*px@a<*IK(xk20r#Quu2BPdBk(>$%&@&dh;%NCqMc%Ppup?IdMGQC4%?{+cMXmtfZb1?=}h?#=$ac zQ6_QPT4&nV&A6fVwL#$Ew6XBdlT!i9rZ$&P`%V8g)zE!`wjKu(!M$7u_kg?Er|x;! zm5o^0E61I;vBi9DuOB$xg9*Gub-&V2k`H659;#HzFg-JB#SsTqNdI8+W-Pvjh!TV) z**h_4{FkO?Wl`hMC4+FN@B7SCuzC!hcmX9KN;)?;fP40|)g<+lHH~XcBcrkd9I3S; zW0eepg>SA(>8Z+nqV+)2c57%ID8_735N6u5 zr@l{_UM>2ZrG3u{S2{8|-F((lYjnhYG}+JxNnR9tx0b16aan!-Z=28vNMQ>Oyl=tS zvQSUn4r)@ubk@>%UXDJ7WTr+C?Gz*P5O4Di)k89GruP@T;iHg&_fmdKjr$WpU)HW} znIN+2b8_wOK+zs&?z{Yu3iFc$RiXagJyET8n7>Rstxv@rrqw*L;dZX^PmG`@{2S`!H_J!SG`>rl=$Brmi zVF8k(2Yn@6sUOx8Ad!o9qUdwEN|;tkFCw;s(vfUM()+&A;I}mqh(#Hrjbe_WE=Dc) zyn9}2DbDS2V;Q$nwLq&sV?-OdcMaQTWqmkXiY1;K`Qh9TAi%IkzX==CJHSpTTmG5F!dwBO-)IZ2=|Ho>gcWlSj z=d~M?DaQ;sZ6o#k#OnCrRUo=%A2|frl21tKE1|DR9mP=#j z_Qp(4?`X!d?TK_&OkUFIfTx%HQ5_vU1Qx1&C4a37W#r-|Y5Tc;>gadY(;14rbTeG5 ze|^UkX|DEfN@$ZW|Hvp9?-O{rnl4!*n!qxkw}I{VGe}1qMfJ{;8X{n}j|(MgW(mz7 zXz0o3@n}XROhcxBQf8)DdXIkkhN5^;JBxJMZymyKl#m@fBzxjtEBqr1F?fya!BjLk zS78mAA{Mn#R=}s5IlVF0qTPN1WJ&(xYq5WM3Vgg%wlOdi6>k?z>It$iu-p80FZZ$tA;DpxASoSA;6y?jb^U8~(O82_@#46bkrx9V z*T4u0c-+4JO=&8fazng@5z#KZpes?6gfep`Q*le=jpnuit8W5D`kd#F&4ETr#iyHr z<%XwFM(jdNY-aYm!{agd)>oz!e?#T9O*z_bG&Ja-+S)jK*ST^dKEyPJl{l^(|PS8KDIhPjge6abY1uiZNezj^Zg);g-G_-yB zj5YDvUnT@#HVRF8K}vfa&2n0^J2XH+P6`yOVYgsYu0!tpt;to8gJ9o0k0~IZhApC) zBu?HT!9Jshg~56CIP52$t5S(Y?CAl`_{ddfoM(!cU zS+P#v#9w^RE}Uu!6S%uP%WlR(wY*|h{^jttm%*Nw42z4i&==BsJ#;d9^JD~TJ^=`u zb7@jy88#biKWJ{gys|9W*0il#qKuqGv_(BA7Nwc;TLD?c7FH8=h9X%yWjx`eK1SWw zj;|4OgJHtfk2K4ZYyEC*UPWbp6x*{ZWeT+4jjj`DXpSwq(%WoX-s%=IqJy5 zzpHs-vy08epL;Ie348$kwjH~RD*qG3H&E2K>t2V_U!p7-8Rgag5ArZfbo$%(uHdAz zjA@bUl`Y>Y*TMQaqkx%{rwI#hF^jlxg%Y@r&x?-9T#jKHL%4}B9UUD#VC}qo8-;lkj7d<${5xF%aaj_7}oP#)Wpel(a0mAarL&;)%X3sCV67?3(1&X=7 zbiKW{pZUArec_wG@l%)idJ_2Sf@`-ZQ|P`OSlWhRn6?RTR)}I%$CH`3^uk zwc5ZBPg#4WKJaYj+9q^LA|%};-dJr)-koi`0(gHWM*4ra1+XbfRVqs6N|?5b{{a9n Nxo%;My?XcYzX1%1A1D9- diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 244c3c21aaacca335a33749f85187ba8aec971e5..7eeccc9a159aa21ff36229669925f36b0a4115ae 100644 GIT binary patch literal 12197 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 VOS4|*KnOSJsj{Y0se) Date: Fri, 22 Apr 2016 19:20:59 -0700 Subject: [PATCH 29/94] ROOKIE MISTAKE --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index d914bc5943b..e3631817bda 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -635,7 +635,7 @@ stat_attack = 1 robust_searching = 1 loot = list() - butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, obj/item/stack/sheet/bone = 1) + butcher_results = list(/obj/item/weapon/ore/diamond = 2, /obj/item/stack/sheet/sinew = 1, /obj/item/stack/sheet/bone = 1) //Goliath From 6edea041a97829ed56c909352aa272d0064200eb Mon Sep 17 00:00:00 2001 From: Robustin Date: Sat, 23 Apr 2016 01:14:40 -0400 Subject: [PATCH 30/94] Update hardsuit.dm --- code/modules/clothing/spacesuits/hardsuit.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 8117736920a..f72898189a9 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -482,6 +482,10 @@ var/shield_state = "shield-old" var/shield_on = "shield-old" +/obj/item/clothing/suit/space/hardsuit/shielded/New() + jetpack = new /obj/item/weapon/tank/jetpack/suit(src) + ..() + /obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text) if(current_charges > 0) var/datum/effect_system/spark_spread/s = new From d354b5c8d08e5fef9b9f035d0db34e18e5b5f13d Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 00:26:42 -0500 Subject: [PATCH 31/94] Adds missing ruins --- _maps/RandomRuins/LavaRuins/_maplisting.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_maps/RandomRuins/LavaRuins/_maplisting.txt b/_maps/RandomRuins/LavaRuins/_maplisting.txt index de949fa1e50..175537f9008 100644 --- a/_maps/RandomRuins/LavaRuins/_maplisting.txt +++ b/_maps/RandomRuins/LavaRuins/_maplisting.txt @@ -6,7 +6,7 @@ ##BIODOMES _maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm -_maps/RandomRuins/LavaRuins/lavaland__biodome_beach.dmm +_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm _maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm @@ -15,6 +15,7 @@ _maps/RandomRuins/LavaRuins/lavaland_surface_prisoner_crash.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm ##SIN _maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -29,4 +30,5 @@ _maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm _maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +_maps/RandomRuins/LavaRuins/lavaland_fountain_hall.dmm _maps/RandomRuins/LavaRuins/lavaland_gym.dmm \ No newline at end of file From 573c5f70b8c2867b8c637fd24332c1cc0588aa80 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 13:21:40 +0100 Subject: [PATCH 32/94] Revert "Removed processor explosion chance" This reverts commit 06f34b16342f4b2469ac59befb28aa5a6eb2b3de. --- code/modules/events/processor_overload.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 200bb87c10c..bae9f03d574 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -31,6 +31,8 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Apparently machines very occasionally blowing up due to - // overload is "boring" and "not fun". So just EMP for now. - P.emp_act(1) + // Wow, it overloaded so much that it EXPLODED!? + if(prob(10)) + P.ex_act(2) + else + P.emp_act(1) From c420fd167abb83ec44a4b763ef654e697442d807 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 14:29:27 +0100 Subject: [PATCH 33/94] Buffs light replacer and makes easier to use :cl: coiax rscadd: The Janitor's Union has mandated additional features to station light replacer devices. rscadd: The light replacer now can be used on the floor to replace the bulbs of any lights on that tile. rscadd: The light replacer now eats replaced bulbs, and after a certain number of bulb fragments (four) will recycle them into a new bulb. tweak: The description of the light replacer is now more informative. /:cl: --- .../objects/items/devices/lightreplacer.dm | 101 ++++++++++++------ 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 4b448e2c61d..6ba8b31039d 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -41,7 +41,7 @@ /obj/item/device/lightreplacer name = "light replacer" - desc = "A device to automatically replace lights. Refill with working lightbulbs." + desc = "A device to automatically replace lights. Refill with broken or working lightbulbs, or sheets of glass." icon = 'icons/obj/janitor.dmi' icon_state = "lightreplacer0" @@ -61,6 +61,11 @@ var/decrement = 1 var/charge = 1 + // Eating used bulbs gives us bulb shards + var/bulb_shards = 0 + // when we get this many shards, we get a free bulb. + var/shards_required = 4 + /obj/item/device/lightreplacer/New() uses = max_uses / 2 failmsg = "The [name]'s refill light blinks red." @@ -68,7 +73,7 @@ /obj/item/device/lightreplacer/examine(mob/user) ..() - user << "It has [uses] light\s remaining." + user << status_string() /obj/item/device/lightreplacer/attackby(obj/item/W, mob/user, params) @@ -79,51 +84,60 @@ return else if(G.use(decrement)) AddUses(increment) - user << "You insert a piece of glass into the [src.name]. You have [uses] lights remaining." + user << "You insert a piece of glass into the [src.name]. You have [uses] light\s remaining." return else user << "You need one sheet of glass to replace lights!" if(istype(W, /obj/item/weapon/light)) + var/new_bulbs = 0 var/obj/item/weapon/light/L = W if(L.status == 0) // LIGHT OKAY if(uses < max_uses) if(!user.unEquip(W)) return AddUses(1) - user << "You insert the [L.name] into the [src.name]. You have [uses] lights remaining." qdel(L) - return else - user << "You need a working light!" - return + if(!user.unEquip(W)) + return + new_bulbs += AddShards(1) + qdel(L) + if(new_bulbs != 0) + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + user << "You insert the [L.name] into the [src.name]. " + status_string() + "" + return if(istype(W, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = W - var/found_good_light = 0 - var/replaced_something = 0 + var/found_lightbulbs = FALSE + var/replaced_something = TRUE for(var/obj/item/I in S.contents) if(istype(I,/obj/item/weapon/light)) var/obj/item/weapon/light/L = I + found_lightbulbs = TRUE + if(src.uses >= max_uses) + break if(L.status == LIGHT_OK) - found_good_light = 1 - if(src.uses < max_uses) - qdel(L) - AddUses(1) - replaced_something = 1 - else - break + replaced_something = TRUE + AddUses(1) + qdel(L) - if(!found_good_light) - user << "\The [S] contains no useable lights!" + else if(L.status == LIGHT_BROKEN || L.status == LIGHT_BURNED) + replaced_something = TRUE + AddShards(1) + qdel(L) + + if(!found_lightbulbs) + user << "\The [S] contains no bulbs." return if(!replaced_something && src.uses == max_uses) user << "\The [src] is full!" return - user << "You fill \the [src] with lights from \the [S]. You have [uses] lights remaining." + user << "You fill \the [src] with lights from \the [S]. " + status_string() + "" /obj/item/device/lightreplacer/emag_act() if(!emagged) @@ -138,11 +152,13 @@ usr << "You shortcircuit the [src]." return */ - usr << "It has [uses] lights remaining." + usr << status_string() /obj/item/device/lightreplacer/update_icon() icon_state = "lightreplacer[emagged]" +/obj/item/device/lightreplacer/proc/status_string() + return "It has [uses] light\s remaining (plus [bulb_shards] fragment\s)." /obj/item/device/lightreplacer/proc/Use(mob/user) @@ -152,7 +168,16 @@ // Negative numbers will subtract /obj/item/device/lightreplacer/proc/AddUses(amount = 1) - uses = min(max(uses + amount, 0), max_uses) + uses = Clamp(uses + amount, 0, max_uses) + +/obj/item/device/lightreplacer/proc/AddShards(amount = 1) + // Returns number of new bulbs made from the shards + bulb_shards += amount + var/new_bulbs = round(bulb_shards / shards_required) + if(new_bulbs > 0) + AddUses(new_bulbs) + bulb_shards = bulb_shards % shards_required + return new_bulbs /obj/item/device/lightreplacer/proc/Charge(var/mob/user) charge += 1 @@ -168,14 +193,10 @@ U << "You replace the [target.fitting] with \the [src]." if(target.status != LIGHT_EMPTY) - - var/obj/item/weapon/light/L1 = new target.light_type(target.loc) - L1.status = target.status - L1.rigged = target.rigged - L1.brightness = target.brightness - L1.switchcount = target.switchcount - target.switchcount = 0 - L1.update() + var/new_bulbs = AddShards(1) + if(new_bulbs != 0) + U << "\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses." + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) target.status = LIGHT_EMPTY target.update() @@ -220,7 +241,25 @@ else return 0 -/obj/item/device/lightreplacer/cyborg +/obj/item/device/lightreplacer/afterattack(atom/T, mob/U, proximity) + if(!proximity) + return + if(!isturf(T)) + return + + var/used = FALSE + // making special messages if there's more than one light fitting in + // a turf is dumb because it never happens + for(var/atom/A in T) + if(!CanUse(U)) + break + used = TRUE + if(istype(A, /obj/machinery/light)) + ReplaceLight(A, U) + + if(!used) + U << failmsg + return /obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) @@ -233,4 +272,4 @@ #undef LIGHT_OK #undef LIGHT_EMPTY #undef LIGHT_BROKEN -#undef LIGHT_BURNED \ No newline at end of file +#undef LIGHT_BURNED From 1329b004f289bb8119b4941b3a906c8cf19cd868 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 17:28:20 +0100 Subject: [PATCH 34/94] Removes trailing return --- code/game/objects/items/devices/lightreplacer.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 6ba8b31039d..356b8a94150 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -259,7 +259,6 @@ if(!used) U << failmsg - return /obj/item/device/lightreplacer/proc/janicart_insert(mob/user, obj/structure/janitorialcart/J) J.put_in_cart(src, user) From d80130b6a79920dfa40d4e7f139bf0f7348e6c05 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 17:41:12 +0100 Subject: [PATCH 35/94] Removed comments --- code/game/objects/items/devices/lightreplacer.dm | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 356b8a94150..08fa1ded58d 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -171,7 +171,6 @@ uses = Clamp(uses + amount, 0, max_uses) /obj/item/device/lightreplacer/proc/AddShards(amount = 1) - // Returns number of new bulbs made from the shards bulb_shards += amount var/new_bulbs = round(bulb_shards / shards_required) if(new_bulbs > 0) @@ -248,8 +247,6 @@ return var/used = FALSE - // making special messages if there's more than one light fitting in - // a turf is dumb because it never happens for(var/atom/A in T) if(!CanUse(U)) break From 3dc15117250c8d8506dec3e19cd73b22a55eb228 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sat, 23 Apr 2016 20:13:54 +0100 Subject: [PATCH 36/94] Merge "
"s into single call to the AI --- code/modules/events/communications_blackout.dm | 6 ++---- code/modules/events/processor_overload.dm | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index cb55bbbd248..51b4a8096dd 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -15,9 +15,7 @@ "#4nd%;f4y6,>£%-BZZZZZZZT") for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts. - A << "
" - A << "[alert]" - A << "
" + A << "
[alert]
" if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. priority_announce(alert) @@ -25,4 +23,4 @@ /datum/round_event/communications_blackout/start() for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) \ No newline at end of file + T.emp_act(1) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bae9f03d574..782e99b43b7 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -16,9 +16,7 @@ for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of processor overload - A << "
" - A << "[alert]" - A << "
" + A << "
[alert]
" // Announce most of the time, but leave a little gap so people don't know // whether it's, say, a tesla zapping tcomms, or some selective From 888344226631218c5e467fee51db314a225ce187 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Sat, 23 Apr 2016 15:05:29 -0700 Subject: [PATCH 37/94] Update toxin_reagents.dm --- code/modules/reagents/chemistry/reagents/toxin_reagents.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index f3ea013dd23..1cd1a222090 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -696,6 +696,8 @@ color = "#8E18A9" // rgb: 142, 24, 169 toxpwr = 2 acidpwr = 42.0 + /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/M) - M.adjustFireLoss(current_cycle/10) // MY INSIDES ARE MELTING HELP - ..() + M.adjustFireLoss(current_cycle/10, 0) // I rode a tank, held a general's rank + . = 1 // When the blitzkrieg raged and the bodies stank + ..() // Pleased to meet you, hope you guess my name From b88d7d313ba13e4dd00382c53cfe69c969b87b31 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 20:33:58 -0400 Subject: [PATCH 38/94] Blobbernaut tweaks --- code/_onclick/hud/blob_overmind.dm | 4 ++-- code/game/gamemodes/blob/blobs/blob_mobs.dm | 7 +++---- code/game/gamemodes/blob/powers.dm | 7 ++++--- tgstation.dme | 1 + 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 6357d556d40..1e507629436 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -50,8 +50,8 @@ /obj/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" - name = "Produce Blobbernaut (30)" - desc = "Produces a strong, smart blobbernaut from a factory blob for 30 points.
The factory blob used will become fragile and briefly unable to produce spores." + name = "Produce Blobbernaut (40)" + desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
The factory blob used will become fragile and briefly unable to produce spores." /obj/screen/blob/Blobbernaut/Click() if(isovermind(usr)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index b364534f729..4da251f5bcf 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -193,9 +193,9 @@ icon_state = "blobbernaut" icon_living = "blobbernaut" icon_dead = "blobbernaut_dead" - health = 200 - maxHealth = 200 - damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + health = 160 + maxHealth = 160 + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) next_move_modifier = 1.5 //slow-ass attack speed, 3 times higher than how fast the blob can attack melee_damage_lower = 20 melee_damage_upper = 20 @@ -205,7 +205,6 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" - force_threshold = 10 pressure_resistance = 40 mob_size = MOB_SIZE_LARGE see_invisible = SEE_INVISIBLE_MINIMUM diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 85434de0bc8..a8df3818ff0 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -137,7 +137,7 @@ /mob/camera/blob/verb/create_blobbernaut() set category = "Blob" - set name = "Create Blobbernaut (30)" + set name = "Create Blobbernaut (40)" set desc = "Create a powerful blobbernaut which is mildly smart and will attack enemies." var/turf/T = get_turf(src) var/obj/effect/blob/factory/B = locate(/obj/effect/blob/factory) in T @@ -150,7 +150,7 @@ if(B.health < B.maxhealth * 0.5) src << "This factory blob is too damaged to sustain a blobbernaut." return - if(!can_buy(30)) + if(!can_buy(40)) return B.maxhealth = initial(B.maxhealth) * 0.25 //factories that produced a blobbernaut have much lower health B.check_health() @@ -163,7 +163,8 @@ blobber.overmind = src blobber.update_icons() blobber.notransform = 1 //stop the naut from moving around - blob_mobs.Add(blobber) + blobber.adjustHealth(blobber.maxHealth * 0.5) + blob_mobs += blobber var/list/mob/dead/observer/candidates = pollCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly var/client/C = null if(candidates.len) //if we got at least one candidate, they're a blobbernaut now. diff --git a/tgstation.dme b/tgstation.dme index a2a4a626d32..50adc433f20 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -103,6 +103,7 @@ #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\blob_overmind.dm" +#include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\ghost.dm" From d93d6160cd7e1ecc0ff9269e726bc499aacb8fa3 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 23 Apr 2016 19:54:30 -0500 Subject: [PATCH 39/94] Gatling Buff --- .../modules/projectiles/guns/projectile/rechargable_magazine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index 10b07fb7a8c..fe800092af6 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -190,5 +190,5 @@ click_cooldown_override = 1 /obj/item/projectile/beam/weak - damage = 7 + damage = 15 armour_penetration = 50 From 0a3fd516939dcd9e75d933749d6df77c42e254d0 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:01:35 -0400 Subject: [PATCH 40/94] regen --- code/game/gamemodes/blob/blobs/blob_mobs.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 4da251f5bcf..1f5a893bbde 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -37,7 +37,7 @@ H.color = overmind.blob_reagent_datum.complementary_color else H.color = "#000000" - adjustHealth(-maxHealth*0.025) + adjustHealth(-maxHealth*0.0125) /mob/living/simple_animal/hostile/blob/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() @@ -193,9 +193,9 @@ icon_state = "blobbernaut" icon_living = "blobbernaut" icon_dead = "blobbernaut_dead" - health = 160 - maxHealth = 160 - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) + health = 200 + maxHealth = 200 + damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) next_move_modifier = 1.5 //slow-ass attack speed, 3 times higher than how fast the blob can attack melee_damage_lower = 20 melee_damage_upper = 20 @@ -205,6 +205,7 @@ verb_ask = "demands" verb_exclaim = "roars" verb_yell = "bellows" + force_threshold = 10 pressure_resistance = 40 mob_size = MOB_SIZE_LARGE see_invisible = SEE_INVISIBLE_MINIMUM From 368329f36b2856ba4f8e338eefd427c2f947a572 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:14:02 -0400 Subject: [PATCH 41/94] less spores --- code/game/gamemodes/blob/blobs/factory.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/gamemodes/blob/blobs/factory.dm b/code/game/gamemodes/blob/blobs/factory.dm index a742c20423a..56ed5167f84 100644 --- a/code/game/gamemodes/blob/blobs/factory.dm +++ b/code/game/gamemodes/blob/blobs/factory.dm @@ -26,6 +26,8 @@ /obj/effect/blob/factory/Be_Pulsed() . = ..() + if(naut) + return if(spores.len >= max_spores) return if(spore_delay > world.time) From 1c1e05651523ff3429065ad6a41108fde31ba43f Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:45:20 -0400 Subject: [PATCH 42/94] info correction --- code/_onclick/hud/blob_overmind.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index 1e507629436..e46b1bebf54 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -51,7 +51,7 @@ /obj/screen/blob/Blobbernaut icon_state = "ui_blobbernaut" name = "Produce Blobbernaut (40)" - desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
The factory blob used will become fragile and briefly unable to produce spores." + desc = "Produces a strong, smart blobbernaut from a factory blob for 40 points.
The factory blob used will become fragile and unable to produce spores." /obj/screen/blob/Blobbernaut/Click() if(isovermind(usr)) From 9fdfd4a49ed53ede888395bc5af75be71bf9148a Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:53:11 -0400 Subject: [PATCH 43/94] Hitting a closet with an item will try to open it --- code/game/objects/structures/crates_lockers/closets.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index dc219c46a74..afef3198008 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -252,7 +252,8 @@ "You hear welding.") update_icon() else - togglelock(user) + if(!toggle(user) + togglelock(user) /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(O) || O.anchored || istype(O, /obj/screen)) From 6a3f1c843aa194872eb2000f40d034f41e072491 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Sat, 23 Apr 2016 21:55:15 -0400 Subject: [PATCH 44/94] frankly, too fast --- code/game/objects/structures/crates_lockers/closets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index afef3198008..ad6ccd8ad57 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -252,7 +252,7 @@ "You hear welding.") update_icon() else - if(!toggle(user) + if(!toggle(user)) togglelock(user) /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) From 42a7ef09d330bd968f07fd3cd3842520e353deed Mon Sep 17 00:00:00 2001 From: c0 Date: Sun, 24 Apr 2016 06:07:24 +0300 Subject: [PATCH 45/94] Removes fake insulated gloves completely --- _maps/map_files/BirdStation/BirdStation.dmm | 2 +- code/modules/clothing/gloves/color.dm | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 9d5ec049990..a0912232dcc 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -2504,7 +2504,7 @@ "aWj" = (/obj/item/weapon/circuitboard/security,/turf/open/floor/plating,/area/maintenance/asmaint2) "aWk" = (/obj/structure/window/reinforced,/obj/structure/flora/kirbyplants{icon_state = "plant-17"; layer = 4.1},/turf/open/floor/plasteel/whitebot,/area/maintenance/fore{name = "Security Maintenance"}) "aWl" = (/obj/machinery/vending/assist,/turf/open/floor/plasteel/warning{icon_state = "warning"; dir = 10},/area/maintenance/fore{name = "Security Maintenance"}) -"aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/yellow/fake,/obj/item/clothing/gloves/color/yellow/fake,/obj/item/clothing/gloves/color/yellow/fake,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) +"aWm" = (/obj/structure/table,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/obj/item/clothing/gloves/color/fyellow,/turf/open/floor/plasteel/warning,/area/maintenance/fore{name = "Security Maintenance"}) "aWn" = (/obj/machinery/power/apc{dir = 4; name = "Security Maintenance APC"; pixel_x = 24},/obj/structure/cable/cyan,/obj/machinery/atmospherics/pipe/simple/cyan/hidden,/turf/open/floor/plating,/area/maintenance/fore{name = "Security Maintenance"}) "aWo" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw{pixel_y = 9},/turf/open/floor/plasteel/white,/area/security/warden) "aWp" = (/obj/structure/bodycontainer/morgue,/obj/effect/landmark{name = "revenantspawn"},/turf/open/floor/plasteel/white,/area/security/warden) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index cb5c30d57f1..cf96d56348f 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -8,10 +8,6 @@ item_color="yellow" burn_state = FIRE_PROOF -/obj/item/clothing/gloves/color/yellow/fake - desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..." - siemens_coefficient = 1 - /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly." name = "budget insulated gloves" From 543101879c9d58518b7985a279af7abb76b5a158 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:08:17 +0100 Subject: [PATCH 46/94] Actually makes the processor blow up --- code/modules/events/processor_overload.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 782e99b43b7..0be0f058479 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -29,8 +29,9 @@ for(var/obj/machinery/telecomms/T in telecomms_list) if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T - // Wow, it overloaded so much that it EXPLODED!? if(prob(10)) - P.ex_act(2) + // Only a level 1 explosion actually damages the machine + // at all + P.ex_act(1) else P.emp_act(1) From fba1660506bec2927802010d4f4459f954a176c8 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:38:26 +0100 Subject: [PATCH 47/94] Refactors dog clothing Fixes #17068. :cl: coiax tweak: The dog clothing code has been moved to make it easier to maintain. /:cl: --- code/modules/clothing/clothing.dm | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d808eef5e0f..ee35c50da12 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -19,6 +19,15 @@ var/gang //Is this a gang outfit? var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? + // Not all corgi compatible clothing alters their vars + var/dog_valid = FALSE + // Used for changing name/desc of corgis when clothing is equipped + var/dog_name + var/dog_desc + var/dog_emote_see + var/dog_emote_hear + var/dog_speak + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" From e4203c7ce91b855d3e656ca17548fa5073d25230 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 09:47:10 +0100 Subject: [PATCH 48/94] Dogs can wear certain items that are not clothing RIP. It's going to be a long PR. --- code/__DEFINES/clothing.dm | 4 ++++ code/game/objects/items.dm | 11 ++++++++++- code/modules/clothing/clothing.dm | 9 --------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index fabe22f95c4..ed0f79ea979 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -101,3 +101,7 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully + +//flags for indicating suitability of items for corgi equipping +#define DOG_BACK 1 +#define DOG_HEAD 2 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index f634e1eca8b..90f74c60133 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,6 +119,15 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) + // Not all corgi compatible clothing alters their vars + var/dog_valid = 0 + // Used for changing name/desc of corgis when clothing is equipped + var/dog_name + var/dog_desc + var/dog_emote_see + var/dog_emote_hear + var/dog_speak + /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) return 0 @@ -579,4 +588,4 @@ obj/item/proc/item_action_slot_check(slot, mob/user) return heat /obj/item/proc/is_sharp() - return sharpness \ No newline at end of file + return sharpness diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index ee35c50da12..d808eef5e0f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -19,15 +19,6 @@ var/gang //Is this a gang outfit? var/scan_reagents = 0 //Can the wearer see reagents while it's equipped? - // Not all corgi compatible clothing alters their vars - var/dog_valid = FALSE - // Used for changing name/desc of corgis when clothing is equipped - var/dog_name - var/dog_desc - var/dog_emote_see - var/dog_emote_hear - var/dog_speak - //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" From 0fd1f3c7e4de5bbabe24de28225597b792d9ba52 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:18:43 +0100 Subject: [PATCH 49/94] Made /datum/dog_fashion --- code/datums/dog_fashion.dm | 168 ++++++++++++++++++ code/game/objects/items.dm | 11 +- code/game/objects/structures/bedsheet_bin.dm | 1 + code/modules/clothing/glasses/glasses.dm | 2 + code/modules/clothing/head/collectable.dm | 22 ++- code/modules/clothing/head/hardhat.dm | 9 +- code/modules/clothing/head/helmet.dm | 12 ++ code/modules/clothing/head/jobs.dm | 16 ++ code/modules/clothing/head/misc.dm | 15 +- code/modules/clothing/head/misc_special.dm | 9 +- code/modules/clothing/head/soft_caps.dm | 15 ++ code/modules/clothing/masks/gasmask.dm | 10 +- .../clothing/spacesuits/miscellaneous.dm | 4 +- code/modules/clothing/suits/wiz_robe.dm | 11 +- code/modules/clothing/under/ties.dm | 3 +- .../mob/living/simple_animal/friendly/dog.dm | 129 ++------------ code/modules/paperwork/paper.dm | 1 + tgstation.dme | 1 + 18 files changed, 306 insertions(+), 133 deletions(-) create mode 100644 code/datums/dog_fashion.dm diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm new file mode 100644 index 00000000000..617920a065f --- /dev/null +++ b/code/datums/dog_fashion.dm @@ -0,0 +1,168 @@ +/datum/dog_fashion + var/name + var/desc + var/emote_see + var/emote_hear + var/speak + var/speak_emote + + // This isn't applied to the dog, but stores the icon_state of the + // sprite that the associated item uses + var/icon_state + +/datum/dog_fashion/New(mob/M) + if(findtext(name, "[]")) + name = text(name, M.truename) + + if(findtext(desc, "[]")) + desc = text(desc, name) + +/datum/dog_fashion/apply(mob/living/simple_animal/pet/dog/D) + if(name) + D.name = name + if(desc) + D.desc = desc + if(emote_see) + D.emote_see = emote_see + if(emote_hear) + D.emote_hear = emote_hear + if(speak) + D.speak = speak + if(speak_emote) + D.speak_emote = speak_emote + +/datum/dog_fashion/head + +/datum/dog_fashion/body + +/datum/dog_fashion/head + +/datum/dog_fashion/head/helmet + name = "Sergeant []" + desc = "The ever-loyal, the ever-vigilant." + +/datum/dog_fashion/head/chef + name = "Sous chef []" + desc = "Your food will be taste-tested. All of it." + + +/datum/dog_fashion/head/captain + name = "Captain []" + desc = "Probably better than the last captain." + +/datum/dog_fashion/head/kitty + name = "Runtime" + emote_see = list("coughs up a furball", "stretches") + emote_hear = list("purrs") + speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") + desc = "It's a cute little kitty-cat! ... wait ... what the hell?" + +/datum/dog_fashion/head/rabbit + name = "Hoppy" + emote_see = list("twitches its nose", "hops around a bit") + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + +/datum/dog_fashion/head/beret + name = "Yann" + desc = "Mon dieu! C'est un chien!" + speak = list("le woof!", "le bark!", "JAPPE!!") + emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") + + +/datum/dog_fashion/head/detective + name = "Detective []" + desc = "[] sees through your lies..." + emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.","takes a candycorn from the hat.") + + +/datum/dog_fashion/head/nurse + name = "Nurse []" + desc = "[] needs 100cc of beef jerky... STAT!" + +/datum/dog_fashion/head/pirate + name = "Pirate-title Pirate-name" + desc = "Yaarghh!! Thar' be a scurvy dog!" + emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") + emote_hear = list("growls ferociously!", "snarls.") + speak = list("Arrrrgh!!","Grrrrrr!") + +/datum/dog_fashion/head/pirate/New(mob/M) + ..() + name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" + +/datum/dog_fashion/head/ushanka + name = "Communist-title []" + desc = "A follower of Karl Barx." + emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") + +/datum/dog_fashion/head/ushanka/New(mob/M) + ..() + name = "[pick("Comrade","Commissar","Glorious Leader")] [M.real_name]" + +/datum/dog_fashion/head/warden + name = "Officer []" + emote_see = list("drools.","looks for donuts.") + desc = "Stop right there criminal scum!" + +/datum/dog_fashion/head/blue_wizard + name = "Grandwizard []" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") + +/datum/dog_fashion/head/red_wizard + name = "Pyromancer []" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") + +/datum/dog_fashion/head/cardborg + name = "Borgi" + speak = list("Ping!","Beep!","Woof!") + emote_see = list("goes rogue.", "sniffs out non-humans.") + desc = "Result of robotics budget cuts." + +/datum/dog_fashion/head/ghost + name = "\improper Ghost" + speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") + emote_see = list("stumbles around.", "shivers.") + emote_hear = list("howls!","groans.") + desc = "Spooky!" + icon_state = "sheet" + +/datum/dog_fashion/head/santa + name = "Santa's Corgi Helper" + emote_hear = list("barks Christmas songs.", "yaps merrily!") + emote_see = list("looks for presents.", "checks his list.") + desc = "He's very fond of milk and cookies." + +/datum/dog_fashion/head/cargo_tech + name = "Corgi Tech []" + desc = "The reason your yellow gloves have chew-marks." + +/datum/dog_fashion/head/reindeer + name = "[] the red-nosed Corgi" + emote_hear = list("lights the way!", "illuminates.", "yaps!") + desc = "He has a very shiny nose." + +/datum/dog_fashion/head/sombrero + name = "Segnor []" + desc = "You must respect Elder Dogname" + +/datum/dog_fashion/head/sombrero/New(mob/M) + ..() + desc = "You must respect Elder [M.truename]" + +/datum/dog_fashion/head/hop + name = "Lieutenant []" + desc = "Can actually be trusted to not run off on his own." + +/datum/dog_fashion/head/deathsquad + name = "Trooper []" + desc = "That's not red paint. That's real corgi blood." + +/datum/dog_fashion/head/clown + name = "[] the Clown" + desc = "Honkman's best friend." + speak = list("HONK!", "Honk!") + emote_see = list("plays tricks.", "slips.") + +/datum/dog_fashion/body/deathsquad + name = "Trooper []" + desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 90f74c60133..13fabfd807a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,14 +119,9 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) - // Not all corgi compatible clothing alters their vars - var/dog_valid = 0 - // Used for changing name/desc of corgis when clothing is equipped - var/dog_name - var/dog_desc - var/dog_emote_see - var/dog_emote_hear - var/dog_speak + // Needs to be in /obj/item because corgis can wear a lot of + // non-clothing items + var/datum/dog_fashion/dog_fashion /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index bc4201bcb9c..7587b19fe36 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -19,6 +19,7 @@ LINEN BINS item_color = "white" burn_state = FLAMMABLE + dog_fashion = /datum/dog_fashion/head/ghost /obj/item/weapon/bedsheet/attack(mob/living/M, mob/user) if(!attempt_initiate_surgery(src, M, user)) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index b9f54abd510..7e5b6331a5d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -133,6 +133,8 @@ flash_protect = 1 tint = 1 + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/glasses/sunglasses/reagent name = "beer goggles" desc = "A pair of sunglasses outfitted with apparatus to scan reagents." diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 3ba86cf5ad4..54b704195e2 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -26,11 +26,15 @@ icon_state = "chef" item_state = "chef" + dog_fashion = /datum/dog_fashion/head/chef + /obj/item/clothing/head/collectable/paper name = "collectable paper hat" desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from water, fire, and Librarians." icon_state = "paper" + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." @@ -43,16 +47,22 @@ icon_state = "captain" item_state = "caphat" + dog_fashion = /datum/dog_fashion/head/captain + /obj/item/clothing/head/collectable/police name = "collectable police officer's hat" desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" + dog_fashion = /datum/dog_fashion/head/warden + /obj/item/clothing/head/collectable/beret name = "collectable beret" desc = "A collectable red beret. It smells faintly of garlic." icon_state = "beret" + dog_fashion = /datum/dog_fashion/head/beret + /obj/item/clothing/head/collectable/welding name = "collectable welding helmet" desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!" @@ -78,29 +88,39 @@ icon_state = "pirate" item_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + /obj/item/clothing/head/collectable/kitty name = "collectable kitty ears" desc = "The fur feels... a bit too realistic." icon_state = "kitty" item_state = "kitty" + dog_fashion = /datum/dog_fashion/head/kitty + /obj/item/clothing/head/collectable/rabbitears name = "collectable rabbit ears" desc = "Not as lucky as the feet!" icon_state = "bunny" item_state = "bunny" + dog_fashion = /datum/dog_fashion/head/rabbit + /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" desc = "NOTE: Any magical powers gained from wearing this hat are purely coincidental." icon_state = "wizard" + dog_fashion = /datum/dog_fashion/head/blue_wizard + /obj/item/clothing/head/collectable/hardhat name = "collectable hard hat" desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!" icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/collectable/HoS name = "collectable HoS hat" desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" @@ -118,4 +138,4 @@ desc = "That's not real blood. That's red paint." //Reference to the actual description icon_state = "swat" item_state = "swat" - burn_state = FIRE_PROOF \ No newline at end of file + burn_state = FIRE_PROOF diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 1c0e4b04794..ab225656783 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -11,6 +11,8 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) burn_state = FIRE_PROOF + dog_fashion = /datum/dog_fashion/head + /obj/item/clothing/head/hardhat/attack_self(mob/user) if(!isturf(user.loc)) user << "You cannot turn the light on while in this [user.loc]!" //To prevent some lighting anomalities. @@ -50,11 +52,13 @@ icon_state = "hardhat0_orange" item_state = "hardhat0_orange" item_color = "orange" + dog_fashion = null /obj/item/clothing/head/hardhat/red icon_state = "hardhat0_red" item_state = "hardhat0_red" item_color = "red" + dog_fashion = null name = "firefighter helmet" flags = STOPSPRESSUREDMAGE heat_protection = HEAD @@ -71,16 +75,19 @@ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_valid = DOG_HEAD /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" item_color = "dblue" + dog_fashion = null /obj/item/clothing/head/hardhat/atmos icon_state = "hardhat0_atmos" item_state = "hardhat0_atmos" item_color = "atmos" + dog_fashion = null name = "atmospheric technician's firefighting helmet" desc = "A firefighter's helmet, able to keep the user cool in any situation." flags = STOPSPRESSUREDMAGE | THICKMATERIAL @@ -88,4 +95,4 @@ heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT \ No newline at end of file + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 9ec57ccafd0..9a2da325ac4 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -14,6 +14,8 @@ burn_state = FIRE_PROOF flags_cover = HEADCOVERSEYES + dog_fashion = /datum/dog_fashion/head/helmet + /obj/item/clothing/head/helmet/New() ..() @@ -31,6 +33,7 @@ item_state = "helmetalt" armor = list(melee = 15, bullet = 40, laser = 10, energy = 10, bomb = 40, bio = 0, rad = 0) can_flashlight = 1 + dog_fashion = null /obj/item/clothing/head/helmet/riot name = "riot helmet" @@ -48,6 +51,7 @@ visor_flags_inv = HIDEMASK|HIDEFACE toggle_cooldown = 0 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH + dog_fashion = null /obj/item/clothing/head/helmet/attack_self(mob/user) if(can_toggle && !user.incapacitated()) @@ -80,6 +84,7 @@ can_toggle = 1 toggle_cooldown = 20 active_sound = 'sound/items/WEEOO1.ogg' + dog_fashion = null /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" @@ -100,6 +105,7 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT flags = STOPSPRESSUREDMAGE strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/swat/nanotrasen name = "\improper SWAT helmet" @@ -119,6 +125,7 @@ heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/roman name = "roman helmet" @@ -129,6 +136,7 @@ icon_state = "roman" item_state = "roman" strip_delay = 100 + dog_fashion = null /obj/item/clothing/head/helmet/roman/legionaire name = "roman legionaire helmet" @@ -143,6 +151,7 @@ item_state = "gladiator" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR flags_cover = HEADCOVERSEYES + dog_fashion = null /obj/item/clothing/head/helmet/redtaghelm name = "red laser tag helmet" @@ -152,6 +161,7 @@ item_state = "redtaghelm" armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. + dog_fashion = null /obj/item/clothing/head/helmet/bluetaghelm name = "blue laser tag helmet" @@ -161,6 +171,7 @@ item_state = "bluetaghelm" armor = list(melee = 15, bullet = 10, laser = 20,energy = 10, bomb = 20, bio = 0, rad = 0) // Offer about the same protection as a hardhat. + dog_fashion = null /obj/item/clothing/head/helmet/knight name = "medieval helmet" @@ -172,6 +183,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH strip_delay = 80 + dog_fashion = null /obj/item/clothing/head/helmet/knight/blue icon_state = "knight_blue" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index dca4fd52164..79ac02bad92 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -9,6 +9,8 @@ strip_delay = 10 put_on_delay = 10 + dog_fashion = /datum/dog_fashion/head/chef + /obj/item/clothing/head/chefhat/suicide_act(mob/user) user.visible_message("[user] is donning [src]! It looks like they're trying to become a chef.") user.say("Bork Bork Bork!") @@ -28,12 +30,16 @@ armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/captain + //Captain: This is no longer space-worthy /obj/item/clothing/head/caphat/parade name = "captain's parade cap" desc = "Worn only by Captains with an abundance of class." icon_state = "capcap" + dog_fashion = null + //Head of Personnel /obj/item/clothing/head/hopcap @@ -42,6 +48,8 @@ desc = "The symbol of true bureaucratic micromanagement." armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/head/hop + //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" @@ -57,6 +65,8 @@ armor = list(melee = 25, bullet = 5, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0) var/candy_cooldown = 0 + dog_fashion = /datum/dog_fashion/head/detective + /obj/item/clothing/head/det_hat/AltClick() ..() if(ismob(loc)) @@ -76,6 +86,9 @@ desc = "A beret, a mime's favorite headwear." icon_state = "beret" + dog_fashion = /datum/dog_fashion/head/beret + + //Security /obj/item/clothing/head/HoS @@ -97,12 +110,15 @@ armor = list(melee = 30, bullet = 5, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = /datum/dog_fashion/head/warden + /obj/item/clothing/head/beret/sec name = "security beret" desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficent protection." icon_state = "beret_badge" armor = list(melee = 30, bullet = 25, laser = 25,energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = null /obj/item/clothing/head/beret/sec/navyhos name = "head of security's beret" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 83eed76aeee..8d58dba184c 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -20,6 +20,7 @@ desc = "It's an amish looking hat." icon_state = "tophat" item_state = "that" + dog_valid = DOG_HEAD /obj/item/clothing/head/canada name = "striped red tophat" @@ -55,6 +56,8 @@ desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" + dog_fashion = /datum/dog_fashion/head/nurse + /obj/item/clothing/head/syndicatefake name = "black space-helmet replica" icon_state = "syndicate-helm-black-red" @@ -99,6 +102,9 @@ desc = "Wearing these makes you look useless, and only good for your sex appeal." icon_state = "bunny" + dog_fashion = /datum/dog_fashion/head/rabbit + + /obj/item/clothing/head/flatcap name = "flat cap" desc = "A working man's cap." @@ -111,6 +117,8 @@ icon_state = "pirate" item_state = "pirate" + dog_fashion = /datum/dog_fashion/head/pirate + /obj/item/clothing/head/hgpiratecap name = "pirate hat" desc = "Yarr." @@ -186,12 +194,15 @@ desc = "You can practically taste the fiesta." flags_inv = HIDEHAIR + dog_fashion = /datum/dog_fashion/head/sombrero + /obj/item/clothing/head/sombrero/green name = "green sombrero" icon_state = "greensombrero" item_state = "greensombrero" desc = "As elegant as a dancing cactus." flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + dog_fashion = null /obj/item/clothing/head/sombrero/shamebrero name = "shamebrero" @@ -199,6 +210,7 @@ item_state = "shamebrero" desc = "Once it's on, it never comes off." flags = NODROP + dog_fashion = null /obj/item/clothing/head/cone desc = "This cone is trying to warn you of something!" @@ -221,6 +233,7 @@ item_state = "that" cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/santa /obj/item/clothing/head/jester name = "jester hat" @@ -247,4 +260,4 @@ name = "paper sack hat" desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." icon_state = "papersack_smile" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS \ No newline at end of file + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index fb35aceb6b6..154cf6a5d71 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -93,6 +93,8 @@ cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head/ushanka + /obj/item/clothing/head/ushanka/attack_self(mob/user) if(earflaps) src.icon_state = "ushankaup" @@ -128,6 +130,8 @@ icon_state = "kitty" color = "#999" + dog_fashion = /datum/dog_fashion/head/kitty + /obj/item/clothing/head/kitty/equipped(mob/user, slot) if(user && slot == slot_head) update_icon(user) @@ -148,6 +152,7 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) brightness_on = 1 //luminosity when on + dog_fashion = /datum/dog_fashion/head/reindeer /obj/item/clothing/head/cardborg name = "cardborg helmet" @@ -157,6 +162,8 @@ flags_cover = HEADCOVERSEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + dog_fashion = /datum/dog_fashion/head/cardborg + /obj/item/clothing/head/cardborg/equipped(mob/living/user, slot) ..() if(ishuman(user) && slot == slot_head) @@ -167,4 +174,4 @@ /obj/item/clothing/head/cardborg/dropped(mob/living/user) ..() - user.remove_alt_appearance("standard_borg_disguise") \ No newline at end of file + user.remove_alt_appearance("standard_borg_disguise") diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 689bd54862e..d66fef73c9b 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -4,6 +4,9 @@ icon_state = "cargosoft" item_state = "helmet" item_color = "cargo" + + dog_fashion = /datum/dog_fashion/head/cargo_tech + var/flipped = 0 /obj/item/clothing/head/soft/dropped() @@ -49,60 +52,70 @@ desc = "It's a baseball hat in a tasteless red colour." icon_state = "redsoft" item_color = "red" + dog_fashion = null /obj/item/clothing/head/soft/blue name = "blue cap" desc = "It's a baseball hat in a tasteless blue colour." icon_state = "bluesoft" item_color = "blue" + dog_fashion = null /obj/item/clothing/head/soft/green name = "green cap" desc = "It's a baseball hat in a tasteless green colour." icon_state = "greensoft" item_color = "green" + dog_fashion = null /obj/item/clothing/head/soft/yellow name = "yellow cap" desc = "It's a baseball hat in a tasteless yellow colour." icon_state = "yellowsoft" item_color = "yellow" + dog_fashion = null /obj/item/clothing/head/soft/grey name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" item_color = "grey" + dog_fashion = null /obj/item/clothing/head/soft/orange name = "orange cap" desc = "It's a baseball hat in a tasteless orange colour." icon_state = "orangesoft" item_color = "orange" + dog_fashion = null /obj/item/clothing/head/soft/mime name = "white cap" desc = "It's a baseball hat in a tasteless white colour." icon_state = "mimesoft" item_color = "mime" + dog_fashion = null /obj/item/clothing/head/soft/purple name = "purple cap" desc = "It's a baseball hat in a tasteless purple colour." icon_state = "purplesoft" item_color = "purple" + dog_fashion = null /obj/item/clothing/head/soft/black name = "black cap" desc = "It's a baseball hat in a tasteless black colour." icon_state = "blacksoft" item_color = "black" + dog_fashion = null /obj/item/clothing/head/soft/rainbow name = "rainbow cap" desc = "It's a baseball hat in a bright rainbow of colors." icon_state = "rainbowsoft" item_color = "rainbow" + dog_fashion = null /obj/item/clothing/head/soft/sec name = "security cap" @@ -111,9 +124,11 @@ item_color = "sec" armor = list(melee = 30, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) strip_delay = 60 + dog_fashion = null /obj/item/clothing/head/soft/emt name = "EMT cap" desc = "It's a baseball hat with a dark turquoise color and a reflective cross on the top." icon_state = "emtsoft" item_color = "emt" + dog_fashion = null diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 2e9935288f5..ba61b61699a 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -61,11 +61,17 @@ item_state = "clown_hat" flags_cover = MASKCOVERSEYES burn_state = FLAMMABLE + actions_types = list(/datum/action/item_action/adjust) + + dog_fashion = /datum/dog_fashion/head/clown + +/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user) + AltClick(user) /obj/item/clothing/mask/gas/clown_hat/AltClick(mob/living/user) if(!istype(user) || user.incapacitated()) return - + var/list/options = list() options["True Form"] = "clown" options["The Feminist"] = "sexyclown" @@ -155,4 +161,4 @@ /obj/item/clothing/mask/gas/carp name = "carp mask" desc = "Gnash gnash." - icon_state = "carp_mask" \ No newline at end of file + icon_state = "carp_mask" diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index e89458f6da9..9d6c988c63e 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -121,6 +121,8 @@ Contains: flags = STOPSPRESSUREDMAGE flags_cover = HEADCOVERSEYES + dog_fashion = /datum/dog_fashion/head/santa + /obj/item/clothing/suit/space/santa name = "Santa's suit" desc = "Festive!" @@ -308,4 +310,4 @@ Contains: /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/inquisitor name = "inquisitor's helmet" icon_state = "hardsuit0-inq" - item_state = "hardsuit0-inq" \ No newline at end of file + item_state = "hardsuit0-inq" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 71d64ce578f..dfc4756043e 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -9,21 +9,26 @@ put_on_delay = 50 unacidable = 1 burn_state = FIRE_PROOF + dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/red name = "red wizard hat" desc = "Strange-looking red hat-wear that most certainly belongs to a real magic user." icon_state = "redwizard" + dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head/red_wizard /obj/item/clothing/head/wizard/yellow name = "yellow wizard hat" desc = "Strange-looking yellow hat-wear that most certainly belongs to a powerful magic user." icon_state = "yellowwizard" + dog_fashion = null /obj/item/clothing/head/wizard/black name = "black wizard hat" desc = "Strange-looking black hat-wear that most certainly belongs to a real skeleton. Spooky." icon_state = "blackwizard" + dog_fashion = null /obj/item/clothing/head/wizard/fake name = "wizard hat" @@ -32,23 +37,27 @@ gas_transfer_coefficient = 1 permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/marisa name = "witch hat" desc = "Strange-looking hat-wear. Makes you want to cast fireballs." icon_state = "marisa" + dog_fashion = null /obj/item/clothing/head/wizard/magus name = "\improper Magus helm" desc = "A mysterious helmet that hums with an unearthly power." icon_state = "magus" item_state = "magus" + dog_fashion = null /obj/item/clothing/head/wizard/santa name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" icon_state = "santahat" flags_inv = HIDEHAIR|HIDEFACIALHAIR + dog_fashion = null /obj/item/clothing/suit/wizrobe name = "wizard robe" @@ -139,4 +148,4 @@ permeability_coefficient = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) unacidable = 0 - burn_state = FLAMMABLE \ No newline at end of file + burn_state = FLAMMABLE diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 15c3cecd3a0..48f6eb4c3fa 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -210,6 +210,7 @@ /obj/item/clothing/tie/scarf name = "scarf" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/tie/scarf/red name = "red scarf" @@ -319,4 +320,4 @@ item_state = "" item_color = "talisman" body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS|HEAD - armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code \ No newline at end of file + armor = list(melee = 5, bullet = 5, laser = 5, energy = 5, bomb = 50, bio = 65, rad = 5) //Faith is the best armor. //This won't actually work because of accessories kill me with a fucking knife jesus christ I hate code diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index c7acb904566..e34a7c811a1 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -267,122 +267,19 @@ return valid /mob/living/simple_animal/pet/dog/corgi/proc/update_corgi_fluff() - var/special_hat = 0 - if(inventory_head) - special_hat = 1 - switch(inventory_head.type) - if(/obj/item/clothing/head/helmet) - name = "Sergeant [real_name]" - desc = "The ever-loyal, the ever-vigilant." + // First, change back to defaults + name = real_name + desc = initial(desc) + speak = initial(speak) + speak_emote = initial(speak_emote) + emote_hear = initial(emote_hear) + emote_see = initial(emote_see) + desc = initial(desc) + SetLuminosity(0) - if(/obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef) - name = "Sous chef [real_name]" - desc = "Your food will be taste-tested. All of it." - - - if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain) - name = "Captain [real_name]" - desc = "Probably better than the last captain." - - if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty) - name = "Runtime" - emote_see = list("coughs up a furball", "stretches") - emote_hear = list("purrs") - speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW") - desc = "It's a cute little kitty-cat! ... wait ... what the hell?" - - if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears) - name = "Hoppy" - emote_see = list("twitches its nose", "hops around a bit") - desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" - - if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret) - name = "Yann" - desc = "Mon dieu! C'est un chien!" - speak = list("le woof!", "le bark!", "JAPPE!!") - emote_see = list("cowers in fear.", "surrenders.", "plays dead.","looks as though there is a wall in front of him.") - - if(/obj/item/clothing/head/det_hat) - name = "Detective [real_name]" - desc = "[name] sees through your lies..." - emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.") - - if(/obj/item/clothing/head/nursehat) - name = "Nurse [real_name]" - desc = "[name] needs 100cc of beef jerky... STAT!" - - if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate) - name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" - desc = "Yaarghh!! Thar' be a scurvy dog!" - emote_see = list("hunts for treasure.","stares coldly...","gnashes his tiny corgi teeth!") - emote_hear = list("growls ferociously!", "snarls.") - speak = list("Arrrrgh!!","Grrrrrr!") - - if(/obj/item/clothing/head/ushanka) - name = "[pick("Comrade","Commissar","Glorious Leader")] [real_name]" - desc = "A follower of Karl Barx." - emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") - - if(/obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police) - name = "Officer [real_name]" - emote_see = list("drools.","looks for donuts.") - desc = "Stop right there criminal scum!" - - if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard) - name = "Grandwizard [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") - - if(/obj/item/clothing/head/wizard/red) - name = "Pyromancer [real_name]" - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") - - if(/obj/item/clothing/head/cardborg) - name = "Borgi" - speak = list("Ping!","Beep!","Woof!") - emote_see = list("goes rogue.", "sniffs out non-humans.") - desc = "Result of robotics budget cuts." - - if(/obj/item/weapon/bedsheet) - name = "\improper Ghost" - speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU") - emote_see = list("stumbles around.", "shivers.") - emote_hear = list("howls!","groans.") - desc = "Spooky!" - - if(/obj/item/clothing/head/helmet/space/santahat) - name = "Santa's Corgi Helper" - emote_hear = list("barks Christmas songs.", "yaps merrily!") - emote_see = list("looks for presents.", "checks his list.") - desc = "He's very fond of milk and cookies." - - if(/obj/item/clothing/head/soft) - name = "Corgi Tech [real_name]" - desc = "The reason your yellow gloves have chew-marks." - - if(/obj/item/clothing/head/hardhat/reindeer) - name = "[real_name] the red-nosed Corgi" - emote_hear = list("lights the way!", "illuminates.", "yaps!") - desc = "He has a very shiny nose." - - if(/obj/item/clothing/head/sombrero) - name = "Segnor [real_name]" - desc = "You must respect elder [real_name]" - - if(/obj/item/clothing/head/hopcap) - name = "Lieutenant [real_name]" - desc = "Can actually be trusted to not run off on his own." - - if(/obj/item/clothing/head/helmet/space/hardsuit/deathsquad) - name = "Trooper [real_name]" - desc = "That's not red paint. That's real corgi blood." - - if(/obj/item/clothing/mask/gas/clown_hat) - name = "[real_name] the Clown" - desc = "Honkman's best friend." - speak = list("HONK!", "Honk!") - emote_see = list("plays tricks.", "slips.") - else - special_hat = 0 + if(inventory_head && inventory_head.dog_fashion) + var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) + DF.apply(src) var/special_back = 0 if(inventory_back) @@ -665,4 +562,4 @@ emote("me", 1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") \ No newline at end of file + emote("me", 1, "growls!") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index c64dca71bef..8e8b742204c 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -20,6 +20,7 @@ body_parts_covered = HEAD burn_state = FLAMMABLE burntime = 5 + dog_valid = DOG_HEAD var/info //What's actually written on the paper. var/info_links //A different version of the paper which includes html links at fields and EOF diff --git a/tgstation.dme b/tgstation.dme index be56d6608f7..15ce06b6a07 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -152,6 +152,7 @@ #include "code\datums\browser.dm" #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" +#include "code\datums\dog_fashion.dm" #include "code\datums\hud.dm" #include "code\datums\martial.dm" #include "code\datums\material_container.dm" From 8fc75b438d6e675d27520682ebe1fdbed4eb0535 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:21:14 +0100 Subject: [PATCH 50/94] Fixed some remaining variables --- code/__DEFINES/clothing.dm | 3 --- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/misc.dm | 2 +- code/modules/clothing/suits/wiz_robe.dm | 1 - code/modules/paperwork/paper.dm | 2 +- 5 files changed, 3 insertions(+), 7 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index ed0f79ea979..29e35489555 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -102,6 +102,3 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully -//flags for indicating suitability of items for corgi equipping -#define DOG_BACK 1 -#define DOG_HEAD 2 diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index ab225656783..6f0487f4836 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -75,7 +75,7 @@ max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 8d58dba184c..e96dd88e631 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -20,7 +20,7 @@ desc = "It's an amish looking hat." icon_state = "tophat" item_state = "that" - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head /obj/item/clothing/head/canada name = "striped red tophat" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index dfc4756043e..c5677007305 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -15,7 +15,6 @@ name = "red wizard hat" desc = "Strange-looking red hat-wear that most certainly belongs to a real magic user." icon_state = "redwizard" - dog_valid = DOG_HEAD dog_fashion = /datum/dog_fashion/head/red_wizard /obj/item/clothing/head/wizard/yellow diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 8e8b742204c..4f172ff20b5 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -20,7 +20,7 @@ body_parts_covered = HEAD burn_state = FLAMMABLE burntime = 5 - dog_valid = DOG_HEAD + dog_fashion = /datum/dog_fashion/head var/info //What's actually written on the paper. var/info_links //A different version of the paper which includes html links at fields and EOF From 6bc4fbf7004c7dbc2acc1603233d603b07089367 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:23:33 +0100 Subject: [PATCH 51/94] More changes --- code/game/objects/items.dm | 2 +- .../mob/living/simple_animal/friendly/dog.dm | 44 +++++++++---------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 13fabfd807a..6abdf31d797 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -121,7 +121,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s // Needs to be in /obj/item because corgis can wear a lot of // non-clothing items - var/datum/dog_fashion/dog_fashion + var/datum/dog_fashion/dog_fashion = null /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index e34a7c811a1..f91bf21f680 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -281,26 +281,9 @@ var/datum/dog_fashion/DF = new inventory_head.dog_fashion(src) DF.apply(src) - var/special_back = 0 - if(inventory_back) - special_back = 1 - switch(inventory_back.type) - if(/obj/item/clothing/suit/space/hardsuit/deathsquad) - name = "Trooper [real_name]" - desc = "That's not red paint. That's real corgi blood." - else - special_back = 0 - - if(!special_hat && !special_back) - name = real_name - desc = initial(desc) - speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") - speak_emote = list("barks", "woofs") - emote_hear = list("barks", "woofs", "yaps","pants") - emote_see = list("shakes its head", "shivers") - desc = "It's a corgi." - SetLuminosity(0) - return + if(inventory_back && inventory_back.dog_fashion) + var/datum/dog_fashion/DF = new inventory_head.back_fashion(src) + DF.apply(src) //IAN! SQUEEEEEEEEE~ /mob/living/simple_animal/pet/dog/corgi/Ian @@ -435,21 +418,34 @@ overlays.Cut() if(inventory_head) var/image/head_icon + + var/head_icon_state = inventory_head.icon_state + if(inventory_head.dog_fashion) + var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) + head_icon_state = DF.icon_state + if(health <= 0) - head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state, dir = EAST) + head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state, dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = image('icons/mob/corgi_head.dmi', icon_state = inventory_head.icon_state) + head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state) overlays += head_icon + if(inventory_back) var/image/back_icon + + var/back_icon_state = inventory_back.icon_state + if(inventory_back.dog_fashion) + var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) + back_icon_state = DF.icon_state + if(health <= 0) - back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state, dir = EAST) + back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state, dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = image('icons/mob/corgi_back.dmi', icon_state = inventory_back.icon_state) + back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state) overlays += back_icon if(facehugger) if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) From 8523295806b5618fb9b2e80880ed59b094d1cc47 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 25 Apr 2016 00:42:05 +1200 Subject: [PATCH 52/94] Fix a typo in string lists system I have no idea how this didn't cause a bug --- code/__HELPERS/_string_lists.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/_string_lists.dm b/code/__HELPERS/_string_lists.dm index 28cb7232e72..290beb20634 100644 --- a/code/__HELPERS/_string_lists.dm +++ b/code/__HELPERS/_string_lists.dm @@ -3,7 +3,7 @@ #define json_load(FILE) (json_decode(file2text(FILE))) var/global/list/string_cache -var/global/list/string_filename_current_key +var/global/string_filename_current_key /proc/strings_replacement(filename, key) From 2f26b8eabc515fc11d5c5f9a686eb4454282f85f Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 13:54:37 +0100 Subject: [PATCH 53/94] Compilation! --- code/datums/dog_fashion.dm | 47 +++++++++---------- code/game/objects/items.dm | 7 +-- .../mob/living/simple_animal/friendly/dog.dm | 2 +- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 617920a065f..eff0293d3e2 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -11,13 +11,10 @@ var/icon_state /datum/dog_fashion/New(mob/M) - if(findtext(name, "[]")) - name = text(name, M.truename) + name = replacetext(name, "REAL_NAME", M.real_name) + desc = replacetext(desc, "NAME", name) - if(findtext(desc, "[]")) - desc = text(desc, name) - -/datum/dog_fashion/apply(mob/living/simple_animal/pet/dog/D) +/datum/dog_fashion/proc/apply(mob/living/simple_animal/pet/dog/D) if(name) D.name = name if(desc) @@ -38,16 +35,16 @@ /datum/dog_fashion/head /datum/dog_fashion/head/helmet - name = "Sergeant []" + name = "Sergeant REAL_NAME" desc = "The ever-loyal, the ever-vigilant." /datum/dog_fashion/head/chef - name = "Sous chef []" + name = "Sous chef REAL_NAME" desc = "Your food will be taste-tested. All of it." /datum/dog_fashion/head/captain - name = "Captain []" + name = "Captain REAL_NAME" desc = "Probably better than the last captain." /datum/dog_fashion/head/kitty @@ -70,14 +67,14 @@ /datum/dog_fashion/head/detective - name = "Detective []" - desc = "[] sees through your lies..." + name = "Detective REAL_NAME" + desc = "NAME sees through your lies..." emote_see = list("investigates the area.","sniffs around for clues.","searches for scooby snacks.","takes a candycorn from the hat.") /datum/dog_fashion/head/nurse - name = "Nurse []" - desc = "[] needs 100cc of beef jerky... STAT!" + name = "Nurse REAL_NAME" + desc = "NAME needs 100cc of beef jerky... STAT!" /datum/dog_fashion/head/pirate name = "Pirate-title Pirate-name" @@ -91,7 +88,7 @@ name = "[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]" /datum/dog_fashion/head/ushanka - name = "Communist-title []" + name = "Communist-title Realname" desc = "A follower of Karl Barx." emote_see = list("contemplates the failings of the capitalist economic model.", "ponders the pros and cons of vanguardism.") @@ -100,16 +97,16 @@ name = "[pick("Comrade","Commissar","Glorious Leader")] [M.real_name]" /datum/dog_fashion/head/warden - name = "Officer []" + name = "Officer REAL_NAME" emote_see = list("drools.","looks for donuts.") desc = "Stop right there criminal scum!" /datum/dog_fashion/head/blue_wizard - name = "Grandwizard []" + name = "Grandwizard REAL_NAME" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!") /datum/dog_fashion/head/red_wizard - name = "Pyromancer []" + name = "Pyromancer REAL_NAME" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") /datum/dog_fashion/head/cardborg @@ -133,36 +130,36 @@ desc = "He's very fond of milk and cookies." /datum/dog_fashion/head/cargo_tech - name = "Corgi Tech []" + name = "Corgi Tech REAL_NAME" desc = "The reason your yellow gloves have chew-marks." /datum/dog_fashion/head/reindeer - name = "[] the red-nosed Corgi" + name = "REAL_NAME the red-nosed Corgi" emote_hear = list("lights the way!", "illuminates.", "yaps!") desc = "He has a very shiny nose." /datum/dog_fashion/head/sombrero - name = "Segnor []" + name = "Segnor REAL_NAME" desc = "You must respect Elder Dogname" /datum/dog_fashion/head/sombrero/New(mob/M) ..() - desc = "You must respect Elder [M.truename]" + desc = "You must respect Elder [M.real_name]" /datum/dog_fashion/head/hop - name = "Lieutenant []" + name = "Lieutenant REAL_NAME" desc = "Can actually be trusted to not run off on his own." /datum/dog_fashion/head/deathsquad - name = "Trooper []" + name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." /datum/dog_fashion/head/clown - name = "[] the Clown" + name = "REAL_NAME the Clown" desc = "Honkman's best friend." speak = list("HONK!", "Honk!") emote_see = list("plays tricks.", "slips.") /datum/dog_fashion/body/deathsquad - name = "Trooper []" + name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6abdf31d797..409b0a9974f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -119,9 +119,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s slot_drone_storage\ ) - // Needs to be in /obj/item because corgis can wear a lot of - // non-clothing items - var/datum/dog_fashion/dog_fashion = null + // Needs to be in /obj/item because corgis can wear a lot of + // non-clothing items + var/datum/dog_fashion/dog_fashion = null + /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)) || is_type_in_list(target, can_be_placed_into)) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index f91bf21f680..6e66b8b46c2 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -282,7 +282,7 @@ DF.apply(src) if(inventory_back && inventory_back.dog_fashion) - var/datum/dog_fashion/DF = new inventory_head.back_fashion(src) + var/datum/dog_fashion/DF = new inventory_back.dog_fashion(src) DF.apply(src) //IAN! SQUEEEEEEEEE~ From 1927fc73e6a455d33cd520b23c1d3f11c25ae258 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:40:08 +0100 Subject: [PATCH 54/94] Dog fashion on the back --- code/datums/dog_fashion.dm | 14 +++-- .../objects/items/devices/radio/beacon.dm | 3 +- .../objects/items/devices/radio/headset.dm | 1 + .../objects/items/devices/radio/intercom.dm | 3 +- .../game/objects/items/devices/radio/radio.dm | 3 ++ .../objects/items/weapons/extinguisher.dm | 2 + .../objects/items/weapons/tanks/tank_types.dm | 5 +- .../clothing/spacesuits/miscellaneous.dm | 1 + code/modules/clothing/suits/armor.dm | 5 ++ code/modules/clothing/suits/miscellaneous.dm | 4 +- .../mob/living/simple_animal/friendly/dog.dm | 53 ++++++------------- 11 files changed, 50 insertions(+), 44 deletions(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index eff0293d3e2..a1620abe229 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -8,6 +8,7 @@ // This isn't applied to the dog, but stores the icon_state of the // sprite that the associated item uses + var/icon_file var/icon_state /datum/dog_fashion/New(mob/M) @@ -28,9 +29,16 @@ if(speak_emote) D.speak_emote = speak_emote -/datum/dog_fashion/head +/datum/dog_fashion/proc/get_image(var/dir) + if(icon_file && icon_state) + return image(icon_file, icon_state = icon_state, dir = dir) + -/datum/dog_fashion/body +/datum/dog_fashion/head + icon_file = 'icons/mob/corgi_head.dmi' + +/datum/dog_fashion/back + icon_file = 'icons/mob/corgi_back.dmi' /datum/dog_fashion/head @@ -160,6 +168,6 @@ speak = list("HONK!", "Honk!") emote_see = list("plays tricks.", "slips.") -/datum/dog_fashion/body/deathsquad +/datum/dog_fashion/back/deathsquad name = "Trooper REAL_NAME" desc = "That's not red paint. That's real corgi blood." diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 3c372f71657..30a99c9431e 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -5,6 +5,7 @@ item_state = "beacon" var/code = "electronic" origin_tech = "bluespace=1" + dog_fashion = null /obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) return @@ -29,4 +30,4 @@ //Probably a better way of doing this, I'm lazy. /obj/item/device/radio/beacon/bacon/proc/digest_delay() spawn(600) - qdel(src)*/ //Bacon beacons are no more rip in peace \ No newline at end of file + qdel(src)*/ //Bacon beacons are no more rip in peace diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ebf159d30d3..ef15693855e 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -9,6 +9,7 @@ slot_flags = SLOT_EARS var/obj/item/device/encryptionkey/keyslot2 = null + dog_fashion = null /obj/item/device/radio/headset/New() ..() diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index da80ff840ee..8532aeb4ea2 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -9,6 +9,7 @@ var/anyai = 1 var/mob/living/silicon/ai/ai = list() var/last_tick //used to delay the powercheck + dog_fashion = null /obj/item/device/radio/intercom/New() ..() @@ -67,4 +68,4 @@ icon_state = "intercom" /obj/item/device/radio/intercom/rejects_blood() - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index bf69eb8bada..41a630797d1 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -4,6 +4,7 @@ suffix = "\[3\]" icon_state = "walkietalkie" item_state = "walkietalkie" + dog_fashion = /datum/dog_fashion/back var/on = 1 // 0 for off var/last_transmission var/frequency = 1459 //common chat @@ -538,6 +539,7 @@ /obj/item/device/radio/borg name = "cyborg radio" subspace_switchable = 1 + dog_fashion = null /obj/item/device/radio/borg/syndicate syndie = 1 @@ -587,3 +589,4 @@ /obj/item/device/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. listening = 0 // And it's nice to have a subtype too for future features. + dog_fashion = /datum/dog_fashion/back diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index ebc4bbfbc44..adcfefcd61d 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -13,6 +13,7 @@ force = 10 materials = list(MAT_METAL=90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") + dog_fashion = /datum/dog_fashion/back var/max_water = 50 var/last_use = 1 var/safety = 1 @@ -34,6 +35,7 @@ materials = list() max_water = 30 sprite_name = "miniFE" + dog_fashion = null /obj/item/weapon/extinguisher/New() create_reagents(max_water) diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index a8420574e35..c2d341a1978 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -16,6 +16,7 @@ icon_state = "oxygen" distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE force = 10 + dog_fashion = /datum/dog_fashion/back /obj/item/weapon/tank/internals/oxygen/New() @@ -28,10 +29,12 @@ /obj/item/weapon/tank/internals/oxygen/yellow desc = "A tank of oxygen, this one is yellow." icon_state = "oxygen_f" + dog_fashion = null /obj/item/weapon/tank/internals/oxygen/red desc = "A tank of oxygen, this one is red." icon_state = "oxygen_fr" + dog_fashion = null /* @@ -59,7 +62,7 @@ desc = "Mixed anyone?" icon_state = "oxygen" force = 10 - + dog_fashion = /datum/dog_fashion/back /obj/item/weapon/tank/internals/air/New() ..() diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 9d6c988c63e..d03d7e169b5 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -60,6 +60,7 @@ Contains: max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT unacidable = 1 helmettype = /obj/item/clothing/head/helmet/space/hardsuit/deathsquad + dog_fashion = /datum/dog_fashion/back/deathsquad //NEW SWAT suit /obj/item/clothing/suit/space/swat diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b1ba866af7d..6e15dfebe7a 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -16,6 +16,7 @@ item_state = "armor" blood_overlay_type = "armor" armor = list(melee = 25, bullet = 15, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/suit/armor/hos name = "armored greatcoat" @@ -47,6 +48,7 @@ heat_protection = CHEST|GROIN|ARMS|HANDS strip_delay = 70 burn_state = FLAMMABLE + dog_fashion = null /obj/item/clothing/suit/armor/vest/warden/alt name = "warden's armored jacket" @@ -61,6 +63,7 @@ body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS + dog_fashion = null /obj/item/clothing/suit/armor/vest/capcarapace name = "captain's carapace" @@ -69,6 +72,7 @@ item_state = "armor" body_parts_covered = CHEST|GROIN armor = list(melee = 50, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0) + dog_fashion = null /obj/item/clothing/suit/armor/vest/capcarapace/alt name = "captain's parade jacket" @@ -129,6 +133,7 @@ icon_state = "detective-armor" allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder,/obj/item/weapon/melee/classic_baton/telescopic) burn_state = FLAMMABLE + dog_fashion = null //Reactive armor diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index cd62fb539d3..1842f608827 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -162,6 +162,7 @@ item_state = "cardborg" body_parts_covered = CHEST|GROIN flags_inv = HIDEJUMPSUIT + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/suit/cardborg/equipped(mob/living/user, slot) ..() @@ -257,6 +258,7 @@ allowed = list(,) hooded = 1 hoodtype = /obj/item/clothing/head/ian_hood + dog_fashion = /datum/dog_fashion/back /obj/item/clothing/head/ian_hood name = "corgi hood" @@ -487,4 +489,4 @@ hoodtype = /obj/item/clothing/head/winterhood/miner /obj/item/clothing/head/winterhood/miner - icon_state = "winterhood_miner" \ No newline at end of file + icon_state = "winterhood_miner" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 6e66b8b46c2..8805f52b08e 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -165,13 +165,6 @@ //The objects that corgis can wear on their backs. var/list/allowed_types = list( - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/space/hardsuit/deathsquad, - /obj/item/device/radio, - /obj/item/device/radio/off, - /obj/item/clothing/suit/cardborg, - /obj/item/weapon/tank/internals/oxygen, - /obj/item/weapon/tank/internals/air, /obj/item/weapon/extinguisher, /obj/item/clothing/suit/hooded/ian_costume, ) @@ -202,6 +195,7 @@ //Corgis are supposed to be simpler, so only a select few objects can actually be put //to be compatible with them. The objects are below. //Many hats added, Some will probably be removed, just want to see which ones are popular. +// > some will probably be removed /mob/living/simple_animal/pet/dog/corgi/proc/place_on_head(obj/item/item_to_add, mob/user) @@ -217,26 +211,11 @@ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") return - var/valid = 0 + var/valid = FALSE + if(istype(item_to_add.dog_fashion, /datum/dog_fashion/head)) + valid = TRUE //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. - if(istype(item_to_add, /obj/item/clothing/tie/scarf)) - valid = 1 - else - switch(item_to_add.type) - if( /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/that, /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/hardhat, /obj/item/clothing/head/collectable/hardhat, /obj/item/clothing/head/hardhat/white, - /obj/item/weapon/paper, /obj/item/clothing/head/helmet, /obj/item/clothing/head/chefhat, /obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain, /obj/item/clothing/head/kitty, - /obj/item/clothing/head/collectable/kitty, /obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret, /obj/item/clothing/head/det_hat, - /obj/item/clothing/head/nursehat, /obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/ushanka, /obj/item/clothing/head/warden, /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/cardborg, /obj/item/weapon/bedsheet, /obj/item/clothing/head/helmet/space/santahat, - /obj/item/clothing/head/soft, /obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/sombrero, - /obj/item/clothing/head/hopcap, /obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/head/wizard/red) - valid = 1 if(valid) if(user && !user.drop_item()) @@ -418,35 +397,35 @@ overlays.Cut() if(inventory_head) var/image/head_icon + var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) - var/head_icon_state = inventory_head.icon_state - if(inventory_head.dog_fashion) - var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) - head_icon_state = DF.icon_state + if(!DF.icon_state) + icon_state = inventory_head.icon_state if(health <= 0) - head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state, dir = EAST) + head_icon = DF.get_image(dir = EAST) head_icon.pixel_y = -8 head_icon.transform = turn(head_icon.transform, 180) else - head_icon = image('icons/mob/corgi_head.dmi', icon_state = head_icon_state) + head_icon = DF.get_image() + overlays += head_icon if(inventory_back) var/image/back_icon + var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) - var/back_icon_state = inventory_back.icon_state - if(inventory_back.dog_fashion) - var/datum/dog_fashion.DF = new inventory_back.dog_fashion(src) - back_icon_state = DF.icon_state + if(!DF.icon_state) + DF.icon_state = inventory_back.icon_state if(health <= 0) - back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state, dir = EAST) + back_icon = DF.get_image(dir = EAST) back_icon.pixel_y = -11 back_icon.transform = turn(back_icon.transform, 180) else - back_icon = image('icons/mob/corgi_back.dmi', icon_state = back_icon_state) + back_icon = DF.get_image() overlays += back_icon + if(facehugger) if(istype(src, /mob/living/simple_animal/pet/dog/corgi/puppy)) overlays += image('icons/mob/mask.dmi',"facehugger_corgipuppy") From 2bf9caa07b219d8c9eede8f743126b6d93d124a8 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:44:55 +0100 Subject: [PATCH 55/94] I'M BRINGING FASHION BACK --- code/modules/mob/living/simple_animal/friendly/dog.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 8805f52b08e..5b2df5f2336 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -164,12 +164,11 @@ return //The objects that corgis can wear on their backs. - var/list/allowed_types = list( - /obj/item/weapon/extinguisher, - /obj/item/clothing/suit/hooded/ian_costume, - ) + var/allowed = FALSE + if(istype(item_to_add.dog_fashion,/datum/dog_fashion/back)) + allowed = TRUE - if( ! ( item_to_add.type in allowed_types ) ) + if(!allowed) usr << "You set [item_to_add] on [src]'s back, but it falls off!" if(!usr.drop_item()) usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" From 2c48313d4fc84bab775be0698ba098a2994cd49a Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 14:56:56 +0100 Subject: [PATCH 56/94] Istype/ispath memes, and tidying --- .../mob/living/simple_animal/friendly/dog.dm | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 5b2df5f2336..d3f785447b1 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -159,20 +159,22 @@ if(!item_to_add) usr.visible_message("[usr] pets [src].","You rest your hand on [src]'s back for a moment.") return + + if(!usr.drop_item()) + usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" + return + if(istype(item_to_add,/obj/item/weapon/c4)) // last thing he ever wears, I guess item_to_add.afterattack(src,usr,1) return //The objects that corgis can wear on their backs. var/allowed = FALSE - if(istype(item_to_add.dog_fashion,/datum/dog_fashion/back)) + if(ispath(item_to_add.dog_fashion,/datum/dog_fashion/back)) allowed = TRUE if(!allowed) usr << "You set [item_to_add] on [src]'s back, but it falls off!" - if(!usr.drop_item()) - usr << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s back!" - return item_to_add.loc = loc if(prob(25)) step_rand(item_to_add) @@ -210,16 +212,17 @@ user.visible_message("[user] pets [src].","You rest your hand on [src]'s head for a moment.") return + if(user && !user.drop_item()) + user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" + return 0 + var/valid = FALSE - if(istype(item_to_add.dog_fashion, /datum/dog_fashion/head)) + if(ispath(item_to_add.dog_fashion, /datum/dog_fashion/head)) valid = TRUE //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a hat is removed. if(valid) - if(user && !user.drop_item()) - user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" - return 0 if(health <= 0) user << "There is merely a dull, lifeless look in [real_name]'s eyes as you put the [item_to_add] on \him." else if(user) @@ -231,9 +234,6 @@ update_corgi_fluff() regenerate_icons() else - if(user && !user.drop_item()) - user << "\The [item_to_add] is stuck to your hand, you cannot put it on [src]'s head!" - return 0 user << "You set [item_to_add] on [src]'s head, but it falls off!" item_to_add.loc = loc if(prob(25)) From 4c0a553c1da2500ba7def3da2cc9474532025e12 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:06:39 +0100 Subject: [PATCH 57/94] Bug fix --- code/modules/mob/living/simple_animal/friendly/dog.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index d3f785447b1..ab2884a72aa 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -399,7 +399,7 @@ var/datum/dog_fashion.DF = new inventory_head.dog_fashion(src) if(!DF.icon_state) - icon_state = inventory_head.icon_state + DF.icon_state = inventory_head.icon_state if(health <= 0) head_icon = DF.get_image(dir = EAST) From de76cecc47a2803146fb2dc40b4c85dfdca51ed7 Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:23:38 +0100 Subject: [PATCH 58/94] DM initial() doesn't work on lists --- code/modules/mob/living/simple_animal/friendly/dog.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index ab2884a72aa..bd928eb762c 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -248,10 +248,11 @@ // First, change back to defaults name = real_name desc = initial(desc) - speak = initial(speak) - speak_emote = initial(speak_emote) - emote_hear = initial(emote_hear) - emote_see = initial(emote_see) + // BYOND/DM doesn't support the use of initial on lists. + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") + speak_emote = list("barks", "woofs") + emote_hear = list("barks!", "woofs!", "yaps.","pants.") + emote_see = list("shakes its head.", "chases its tail.","shivers.") desc = initial(desc) SetLuminosity(0) From a89d9516691ced800e7feb6169aac0b3268a9b5c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 15:42:20 +0100 Subject: [PATCH 59/94] Removed whitespace --- code/datums/dog_fashion.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index a1620abe229..337501d094d 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -32,7 +32,7 @@ /datum/dog_fashion/proc/get_image(var/dir) if(icon_file && icon_state) return image(icon_file, icon_state = icon_state, dir = dir) - + /datum/dog_fashion/head icon_file = 'icons/mob/corgi_head.dmi' From 8534e3dbb911bb4742ad33789634baf61aa54d5e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 16:29:17 +0100 Subject: [PATCH 60/94] Code review --- .../miniantags/slaughter/slaughter.dm | 2 +- code/modules/mob/living/bloodcrawl.dm | 21 +++++++++---------- code/modules/spells/spell.dm | 3 +-- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index f065d53038c..e1e4e0edbd3 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -64,7 +64,7 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..() + ..(1) death_mealspill() diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index d804a6bbb15..19310eb23bf 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -55,24 +55,23 @@ // dummy object var/obj/effect/dummy/slaughter/holder = PoolOrNew(/obj/effect/dummy/slaughter,mobloc) src.ExtinguishMob() - if(buckled) - buckled.unbuckle_mob(src,force=1) - if(buckled_mobs.len) - unbuckle_all_mobs(force=1) - if(pulledby) - pulledby.stop_pulling() - src.loc = holder + + // Keep a reference to whatever we're pulling, because forceMove() + // makes us stop pulling + var/pullee = src.pulling + src.holder = holder + src.forceMove(holder) // if we're not pulling anyone, or we can't eat anyone - if(!src.pulling || src.bloodcrawl != BLOODCRAWL_EAT) + if(!pullee || src.bloodcrawl != BLOODCRAWL_EAT) return // if the thing we're pulling isn't alive - if (!(istype(src.pulling, /mob/living))) + if (!(istype(pullee, /mob/living))) return - var/mob/living/victim = src.pulling + var/mob/living/victim = pullee var/kidnapped = FALSE if(victim.stat == CONSCIOUS) @@ -80,7 +79,7 @@ else if(victim.reagents && victim.reagents.has_reagent("demonsblood")) visible_message("Something prevents [victim] from entering the pool!", "A strange force is blocking [victim] from entering!", "You hear a splash and a thud.") else - victim.loc = src + victim.forceMove(src) victim.emote("scream") src.visible_message("[src] drags [victim] into the pool of blood!", null, "You hear a splash.") kidnapped = TRUE diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 3494f38659c..3adfc081740 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -92,8 +92,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin user << "Not when you're incapacitated." return 0 - var/loc = user.loc - if(!phase_allowed && istype(loc, /obj/effect/dummy)) + if(!phase_allowed && istype(user.loc, /obj/effect/dummy)) user << "[name] cannot be cast unless you are completely manifested in the material plane." return 0 From e2888a285b44b1f05290625781c871643a93177d Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Sun, 24 Apr 2016 16:45:35 +0100 Subject: [PATCH 61/94] player_list -> ai_list --- code/modules/events/communications_blackout.dm | 2 +- code/modules/events/processor_overload.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index 51b4a8096dd..5d8b72775cb 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -14,7 +14,7 @@ "Ionospheri:%£ MCayj^j<.3-BZZZZZZT", \ "#4nd%;f4y6,>£%-BZZZZZZZT") - for(var/mob/living/silicon/ai/A in player_list) //AIs are always aware of communication blackouts. + for(var/mob/living/silicon/ai/A in ai_list) //AIs are always aware of communication blackouts. A << "
[alert]
" if(prob(30)) //most of the time, we don't want an announcement, so as to allow AIs to fake blackouts. diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index 0be0f058479..bf8708ac2c6 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -14,7 +14,7 @@ "Exospheri:%£ QCbyj^j[alert]
" From 950d8e4dfa73eb3195cdf1675e0a34ec680f2ec3 Mon Sep 17 00:00:00 2001 From: RandomMarine Date: Sun, 24 Apr 2016 12:06:18 -0700 Subject: [PATCH 62/94] drones can't squish cockroaches (by accident) --- .../mob/living/simple_animal/friendly/cockroach.dm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 30af1ef94da..0a856487efc 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -32,12 +32,13 @@ if(ismob(AM)) if(isliving(AM)) var/mob/living/A = AM - if(A.mob_size > MOB_SIZE_TINY) - if(prob(squish_chance)) - A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") - death() - else - visible_message("\The [name] avoids getting crushed.") + if(!isdrone(A)) + if(A.mob_size > MOB_SIZE_TINY) + if(prob(squish_chance)) + A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") + death() + else + visible_message("\The [name] avoids getting crushed.") else if(isobj(AM)) if(istype(AM,/obj/structure)) From 3b6e237b26a7067f17694a13439f9c36839fb039 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 00:32:23 +0000 Subject: [PATCH 63/94] Automatic changelog generation for PR #17067 --- html/changelogs/AutoChangeLog-pr-17067.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17067.yml diff --git a/html/changelogs/AutoChangeLog-pr-17067.yml b/html/changelogs/AutoChangeLog-pr-17067.yml new file mode 100644 index 00000000000..69d7d32a0f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17067.yml @@ -0,0 +1,10 @@ +author: coiax +delete-after: True +changes: + - rscadd: "The Janitor's Union has mandated additional features to station +light replacer devices." + - rscadd: "The light replacer now can be used on the floor to replace +the bulbs of any lights on that tile." + - rscadd: "The light replacer now eats replaced bulbs, and after a certain +number of bulb fragments (four) will recycle them into a new bulb." + - tweak: "The description of the light replacer is now more informative." From f3f2962d268cbb1d0b836a566d89248249895da0 Mon Sep 17 00:00:00 2001 From: RandomMarine Date: Sun, 24 Apr 2016 18:26:23 -0700 Subject: [PATCH 64/94] buffs cockroach survivability --- .../living/simple_animal/friendly/cockroach.dm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/code/modules/mob/living/simple_animal/friendly/cockroach.dm b/code/modules/mob/living/simple_animal/friendly/cockroach.dm index 0a856487efc..e9f1c512b42 100644 --- a/code/modules/mob/living/simple_animal/friendly/cockroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/cockroach.dm @@ -32,13 +32,12 @@ if(ismob(AM)) if(isliving(AM)) var/mob/living/A = AM - if(!isdrone(A)) - if(A.mob_size > MOB_SIZE_TINY) - if(prob(squish_chance)) - A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") - death() - else - visible_message("\The [name] avoids getting crushed.") + if(A.mob_size > MOB_SIZE_SMALL) + if(prob(squish_chance)) + A.visible_message("\The [A] squashed \the [name].", "You squashed \the [name].") + death() + else + visible_message("\The [name] avoids getting crushed.") else if(isobj(AM)) if(istype(AM,/obj/structure)) @@ -54,4 +53,4 @@ icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - layer = 2 \ No newline at end of file + layer = 2 From 581a13975b499cb2e66413ee8117bb835f247dec Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 21:27:48 -0700 Subject: [PATCH 65/94] makes goliath plates stackable. --- code/game/mecha/working/ripley.dm | 2 +- .../objects/items/stacks/sheets/sheet_types.dm | 16 +++++++++++++++- code/modules/cargo/exports/sheets.dm | 2 +- .../modules/mining/lavaland/necropolis_chests.dm | 2 +- .../living/simple_animal/hostile/mining_mobs.dm | 8 ++++---- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index c4ccf61010f..994455ea8af 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -25,7 +25,7 @@ /obj/mecha/working/ripley/Destroy() for(var/i=1, i <= hides, i++) - new /obj/item/asteroid/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + new /obj/item/stack/sheet/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop damage_absorption["brute"] = initial(damage_absorption["brute"]) for(var/atom/movable/A in cargo) A.loc = loc diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index d6fc198ceb3..2615df9688d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -265,4 +265,18 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ w_class = 3 throw_speed = 1 throw_range = 3 - origin_tech = "materials=2;bio=2" \ No newline at end of file + origin_tech = "materials=2;bio=2" + + /* + * Plates + */ + +/obj/item/stack/sheet/goliath_hide + name = "goliath hide plates" + desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." + icon = 'icons/obj/mining.dmi' + icon_state = "goliath_hide" + singular_name = "hide plate" + flags = NOBLUDGEON + w_class = 3 + layer = 4 diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 74855bb54c3..d6484cf1691 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -35,7 +35,7 @@ /datum/export/goliath_hide cost = 2500 unit_name = "goliath hide" - export_types = list(/obj/item/asteroid/goliath_hide) + export_types = list(/obj/item/stack/sheet/goliath_hide) // Cat hide. Just in case Runtime is catsploding again. /datum/export/stack/skin/cat diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 87ce12f72d8..455d3a4e2ec 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -373,7 +373,7 @@ /datum/table_recipe/boat name = "goliath hide boat" result = /obj/vehicle/lavaboat - reqs = list(/obj/item/asteroid/goliath_hide = 3) + reqs = list(/obj/item/stack/sheet/goliath_hide = 3) time = 50 category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 0d41abe1c86..2e8398c5964 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -350,7 +350,7 @@ mob_size = MOB_SIZE_LARGE var/pre_attack = 0 var/pre_attack_icon = "Goliath_preattack" - loot = list(/obj/item/asteroid/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/goliath_hide{layer = 4.1}) /mob/living/simple_animal/hostile/asteroid/goliath/Life() ..() @@ -438,7 +438,7 @@ spawn(50) qdel(src) -/obj/item/asteroid/goliath_hide +/obj/item/stack/sheet/goliath_hide name = "goliath hide plates" desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." icon = 'icons/obj/mining.dmi' @@ -447,7 +447,7 @@ w_class = 3 layer = 4 -/obj/item/asteroid/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/stack/sheet/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) if(proximity_flag) if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/hooded/explorer) || istype(target, /obj/item/clothing/head/explorer)) var/obj/item/clothing/C = target @@ -649,7 +649,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/asteroid/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 From 556f611278e8ff31f565e508a29740a2c08b32fb Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 22:07:51 -0700 Subject: [PATCH 66/94] makes the path /animalhide --- code/game/mecha/working/ripley.dm | 2 +- code/game/objects/items/stacks/sheets/leather.dm | 14 ++++++++++++++ .../objects/items/stacks/sheets/sheet_types.dm | 12 ------------ code/modules/cargo/exports/sheets.dm | 2 +- code/modules/mining/lavaland/necropolis_chests.dm | 2 +- .../living/simple_animal/hostile/mining_mobs.dm | 8 ++++---- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 994455ea8af..b0f20c8b4e8 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -25,7 +25,7 @@ /obj/mecha/working/ripley/Destroy() for(var/i=1, i <= hides, i++) - new /obj/item/stack/sheet/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + new /obj/item/stack/sheet/animalhide/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop damage_absorption["brute"] = initial(damage_absorption["brute"]) for(var/atom/movable/A in cargo) A.loc = loc diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index feb0266390d..099ddd5bc78 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -135,6 +135,20 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ icon_state = "sinew" origin_tech = "bio=4" + /* + * Plates + */ + +/obj/item/stack/sheet/animalhide/goliath_hide + name = "goliath hide plates" + desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." + icon = 'icons/obj/mining.dmi' + icon_state = "goliath_hide" + singular_name = "hide plate" + flags = NOBLUDGEON + w_class = 3 + layer = 4 + //Step one - dehairing. diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 2615df9688d..6c9b9254103 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -267,16 +267,4 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ throw_range = 3 origin_tech = "materials=2;bio=2" - /* - * Plates - */ -/obj/item/stack/sheet/goliath_hide - name = "goliath hide plates" - desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." - icon = 'icons/obj/mining.dmi' - icon_state = "goliath_hide" - singular_name = "hide plate" - flags = NOBLUDGEON - w_class = 3 - layer = 4 diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index d6484cf1691..ba81daa0a07 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -35,7 +35,7 @@ /datum/export/goliath_hide cost = 2500 unit_name = "goliath hide" - export_types = list(/obj/item/stack/sheet/goliath_hide) + export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide) // Cat hide. Just in case Runtime is catsploding again. /datum/export/stack/skin/cat diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 455d3a4e2ec..a6fabeb90dc 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -373,7 +373,7 @@ /datum/table_recipe/boat name = "goliath hide boat" result = /obj/vehicle/lavaboat - reqs = list(/obj/item/stack/sheet/goliath_hide = 3) + reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) time = 50 category = CAT_MISC diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 2e8398c5964..33c31460b09 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -350,7 +350,7 @@ mob_size = MOB_SIZE_LARGE var/pre_attack = 0 var/pre_attack_icon = "Goliath_preattack" - loot = list(/obj/item/stack/sheet/goliath_hide{layer = 4.1}) + loot = list(/obj/item/stack/sheet/animalhide/goliath_hide{layer = 4.1}) /mob/living/simple_animal/hostile/asteroid/goliath/Life() ..() @@ -438,7 +438,7 @@ spawn(50) qdel(src) -/obj/item/stack/sheet/goliath_hide +/obj/item/stack/sheet/animalhide/goliath_hide name = "goliath hide plates" desc = "Pieces of a goliath's rocky hide, these might be able to make your suit a bit more durable to attack from the local fauna." icon = 'icons/obj/mining.dmi' @@ -447,7 +447,7 @@ w_class = 3 layer = 4 -/obj/item/stack/sheet/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) +/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag) if(proximity_flag) if(istype(target, /obj/item/clothing/suit/space/hardsuit/mining) || istype(target, /obj/item/clothing/head/helmet/space/hardsuit/mining) || istype(target, /obj/item/clothing/suit/hooded/explorer) || istype(target, /obj/item/clothing/head/explorer)) var/obj/item/clothing/C = target @@ -649,7 +649,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath2" - butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) + butcher_results = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1, /obj/item/stack/sheet/bone = 2) loot = list() stat_attack = 1 robust_searching = 1 From a45c8f5c29e68dd62edfb0587fc8659ee06b535d Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 06:00:52 +0000 Subject: [PATCH 67/94] Automatic changelog generation for PR #17078 --- html/changelogs/AutoChangeLog-pr-17078.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17078.yml diff --git a/html/changelogs/AutoChangeLog-pr-17078.yml b/html/changelogs/AutoChangeLog-pr-17078.yml new file mode 100644 index 00000000000..fba30ec9bcd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17078.yml @@ -0,0 +1,4 @@ +author: Joan +delete-after: True +changes: + - bugfix: "You can once again hit a closet or crate with an item to open it." From 508522c320604efb77967d8a29a4e632e9332fdb Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 07:15:32 +0100 Subject: [PATCH 68/94] Minor explosion damage around exploded machine --- code/modules/events/processor_overload.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index bf8708ac2c6..e200e8f52f4 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -33,5 +33,8 @@ // Only a level 1 explosion actually damages the machine // at all P.ex_act(1) + // Damage the surrounding area to indicate that it popped + var/turf/T = get_turf(P) + explosion(T, 0, 0, 2) else P.emp_act(1) From d1359a3e09e95e0a8728b28ab6421fe84b241c21 Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 23:24:42 -0700 Subject: [PATCH 69/94] What's it gonna be, loyalty to me? Or loyalty to your country? (export datum tweak) --- code/modules/cargo/exports/sheets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index ba81daa0a07..921ed474389 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -32,7 +32,7 @@ export_types = list(/obj/item/stack/sheet/animalhide/human) // Goliath hide. Expensive. -/datum/export/goliath_hide +/datum/export/stack/skin/goliath_hide cost = 2500 unit_name = "goliath hide" export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide) From 497e1ae3a9b11b1a489fe2fee151876fcd38b31e Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Sun, 24 Apr 2016 23:50:01 -0700 Subject: [PATCH 70/94] fixes plate consumption in upgrades. --- code/modules/mob/living/simple_animal/hostile/mining_mobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 33c31460b09..9fcd4c3a305 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -455,7 +455,7 @@ if(current_armor.["melee"] < 60) current_armor.["melee"] = min(current_armor.["melee"] + 10, 60) user << "You strengthen [target], improving its resistance against melee attacks." - qdel(src) + use(1) else user << "You can't improve [C] any further!" return From 19a6e140c36399f5c01ffdb1defd6e196f01d959 Mon Sep 17 00:00:00 2001 From: TheWiznard Date: Mon, 25 Apr 2016 01:48:12 -0500 Subject: [PATCH 71/94] fixes newline error moves a comment up --- code/game/gamemodes/malfunction/Malf_Modules.dm | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 238b8b9c3d7..7c5f80092ee 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -9,7 +9,6 @@ var/power_type - /datum/AI_Module/large/ uses = 1 @@ -81,7 +80,6 @@ var/message = "[timer] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!" minor_announce(message, "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", 1) - /obj/machinery/doomsday_device/proc/detonate(z_level = 1) for(var/mob/M in player_list) M << 'sound/machines/Alarm.ogg' @@ -97,6 +95,8 @@ world << "The AI cleansed the station of life with the doomsday device!" ticker.force_ending = 1 +//////END DOOMSDAY DEVICE + /datum/AI_Module/large/fireproof_core module_name = "Core Upgrade" mod_pick_name = "coreup" @@ -106,11 +106,6 @@ power_type = /mob/living/silicon/ai/proc/fireproof_core - - -//////END DOOMSDAY DEVICE - - /mob/living/silicon/ai/proc/fireproof_core() set category = "Malfunction" set name = "Fireproof Core" @@ -254,7 +249,6 @@ src << "Virus package compiled. Select a target mech at any time. You must remain on the station at all times. Loss of signal will result in total system lockout." verbs -= /mob/living/silicon/ai/proc/mech_takeover - /datum/AI_Module/large/break_fire_alarms module_name = "Thermal Sensor Override" mod_pick_name = "burnpigs" @@ -303,8 +297,6 @@ src << "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode." src.verbs -= /mob/living/silicon/ai/proc/break_air_alarms - - /datum/AI_Module/small/overload_machine module_name = "Machine Overload" mod_pick_name = "overload" @@ -623,7 +615,6 @@ src.use(usr) return - /datum/AI_Module/large/eavesdrop module_name = "Enhanced Surveillance" mod_pick_name = "eavesdrop" From 1a6ad107afb9999665acb171b3a7ad47776ec57e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 09:01:52 +0100 Subject: [PATCH 72/94] Refactoring and tweaks --- .../miniantags/slaughter/slaughter.dm | 31 +++++---- code/modules/mob/living/bloodcrawl.dm | 68 +++++++++---------- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index e1e4e0edbd3..10d99b7dc57 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -34,9 +34,6 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT see_invisible = SEE_INVISIBLE_MINIMUM - // Set consumed_mobs to a list() to keep the corpses in the demon - // for later retrieval on demon death - var/list/consumed_mobs = null var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and dissaapearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ @@ -64,16 +61,8 @@ speed = 0 /mob/living/simple_animal/slaughter/death() - ..(1) - - death_mealspill() - playsound(get_turf(src),death_sound, 200, 1) - -/mob/living/simple_animal/slaughter/proc/death_mealspill() - if(consumed_mobs) - for(var/mob/living/M in consumed_mobs) - M.forceMove(get_turf(src)) + ..() /obj/effect/decal/cleanable/blood/innards icon = 'icons/obj/surgery.dmi' @@ -148,19 +137,20 @@ loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) // Keep the people we hug! - consumed_mobs = list() + var/list/consumed_mobs = list() // HOT. PINK. //color = "#FF69B4" + /mob/living/simple_animal/slaughter/laughter/New() ..() deathmessage = "[src] fades out, as all of its friends are released from its prison of hugs." -/mob/living/simple_animal/slaughter/laughter/death_mealspill() +/mob/living/simple_animal/slaughter/laughter/death() if(!consumed_mobs) - return + return ..() for(var/mob/living/M in consumed_mobs) M.loc = get_turf(src) @@ -174,3 +164,14 @@ break M << "You leave the [src]'s warm embrace, and feel ready to take on the world." + return ..() + +/mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim) + if(consumed_mobs) + // Keep their corpse so rescue is possible + consumed_mobs += victim + else + // Be safe and just eject the corpse + victim.forceMove(get_turf(victim)) + victim.exit_blood_effect() + victim.visible_message("[victim] falls out of the air, covered in blood, looking highly confused. And dead.") diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm index 19310eb23bf..69e85dfb9ab 100644 --- a/code/modules/mob/living/bloodcrawl.dm +++ b/code/modules/mob/living/bloodcrawl.dm @@ -85,12 +85,12 @@ kidnapped = TRUE if(kidnapped) - var/success = bloodcrawl_consume(B, victim) + var/success = bloodcrawl_consume(victim) if(!success) src << "You happily devour... nothing? Your meal vanished at some point!" return 1 -/mob/living/proc/bloodcrawl_consume(obj/effect/decal/cleanable/B, mob/living/victim) +/mob/living/proc/bloodcrawl_consume(mob/living/victim) src << "You begin to feast on [victim]. You can not move while you are doing this." var/sound @@ -110,46 +110,51 @@ if(victim.reagents && victim.reagents.has_reagent("devilskiss")) src << "AAH! THEIR FLESH! IT BURNS!" adjustBruteLoss(25) //I can't use adjustHealth() here because bloodcrawl affects /mob/living and adjustHealth() only affects simple mobs - victim.loc = get_turf(B) - // This whole thing here is the ONLY reason we keep passing B down - // this proc chain, so we know where to spit the person out who's - // been drinking. TODO would be a lot better if it just picked the - // nearest bloodspot and used that, then it'd be a lot cleaner - // from a code perspective - victim.visible_message("[B] violently expels [victim]!") + var/found_bloodpool = FALSE + for(var/obj/effect/decal/cleanable/target in range(1,get_turf(victim))) + if(target.can_bloodcrawl_in()) + victim.forceMove(get_turf(target)) + victim.visible_message("[target] violently expels [victim]!") + victim.exit_blood_effect(target) + found_bloodpool = TRUE + + if(!found_bloodpool) + // Fuck it, just eject them, thanks to some split second cleaning + victim.forceMove(get_turf(victim)) + victim.visible_message("[victim] appears from nowhere, covered in blood!") + victim.exit_blood_effect() return TRUE src << "You devour [victim]. Your health is fully restored." - src.adjustBruteLoss(-1000) - src.adjustFireLoss(-1000) - src.adjustOxyLoss(-1000) - src.adjustToxLoss(-1000) + src.revive(full_heal = 1) // No defib possible after laughter victim.adjustBruteLoss(1000) victim.death() - - var/del_corpse = TRUE - var/mob/living/simple_animal/slaughter/SD - if(istype(src, /mob/living/simple_animal/slaughter)) - SD = src - // `consumed_mobs` can be set to null to gib the corpse - if(SD.consumed_mobs) - // Keep their corpse so rescue is possible - SD.consumed_mobs += victim - del_corpse = FALSE - - if(del_corpse) - qdel(victim) - + bloodcrawl_swallow(victim) return TRUE +/mob/living/proc/bloodcrawl_swallow(var/mob/living/victim) + qdel(victim) + /obj/item/weapon/bloodcrawl name = "blood crawl" desc = "You are unable to hold anything while in this form." icon = 'icons/effects/blood.dmi' flags = NODROP|ABSTRACT +/mob/living/proc/exit_blood_effect(obj/effect/decal/cleanable/B) + playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + var/oldcolor = src.color + //Makes the mob have the color of the blood pool it came out of + if(istype(B, /obj/effect/decal/cleanable/xenoblood)) + src.color = rgb(43, 186, 0) + else + src.color = rgb(149, 10, 10) + // but only for a few seconds + spawn(30) + src.color = oldcolor + /mob/living/proc/phasein(obj/effect/decal/cleanable/B) if(src.notransform) src << "Finish eating first!" @@ -162,20 +167,13 @@ src.loc = B.loc src.client.eye = src src.visible_message("[src] rises out of the pool of blood!") - playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) + exit_blood_effect(B) if(iscarbon(src)) var/mob/living/carbon/C = src for(var/obj/item/weapon/bloodcrawl/BC in C) BC.flags = null C.unEquip(BC) qdel(BC) - var/oldcolor = src.color - if(istype(B, /obj/effect/decal/cleanable/xenoblood)) //Makes the mob have the color of the blood pool it came out of for a few seconds - src.color = rgb(43, 186, 0) - else - src.color = rgb(149, 10, 10) qdel(src.holder) src.holder = null - spawn(30) - src.color = oldcolor return 1 From 8901ee0610a17afb836a93e00e3d8cea3e36296c Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 09:22:32 +0100 Subject: [PATCH 73/94] Actually compiles --- code/modules/events/processor_overload.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/events/processor_overload.dm b/code/modules/events/processor_overload.dm index e200e8f52f4..9ad23fd69ae 100644 --- a/code/modules/events/processor_overload.dm +++ b/code/modules/events/processor_overload.dm @@ -30,11 +30,10 @@ if(istype(T, /obj/machinery/telecomms/processor)) var/obj/machinery/telecomms/processor/P = T if(prob(10)) + // Damage the surrounding area to indicate that it popped + explosion(get_turf(P), 0, 0, 2) // Only a level 1 explosion actually damages the machine // at all P.ex_act(1) - // Damage the surrounding area to indicate that it popped - var/turf/T = get_turf(P) - explosion(T, 0, 0, 2) else P.emp_act(1) From f08e95977798d33e58509ead1bf9e216d0a8739e Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 08:25:24 +0000 Subject: [PATCH 74/94] Automatic changelog generation for PR #16940 --- html/changelogs/AutoChangeLog-pr-16940.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16940.yml diff --git a/html/changelogs/AutoChangeLog-pr-16940.yml b/html/changelogs/AutoChangeLog-pr-16940.yml new file mode 100644 index 00000000000..1ab63958340 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16940.yml @@ -0,0 +1,6 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Laughter demons are like slaughter demons, but they tickle people to death" + - tweak: "Slaughter demons are no longer able to cast spells while phased." + - tweak: "Wizards can now speak while ethereal, but still cannot cast spells while ethereal." From c2a3ae9424ca0e0b9cc3e5260a861e8454af4d1a Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:24:40 -0600 Subject: [PATCH 75/94] adds a new argument to ChangeTurf() which allows us to skip calling AfterChange() --- code/game/turfs/turf.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 7ab1efb6c7b..2efe567a48c 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -129,7 +129,7 @@ qdel(L) //Creates a new turf -/turf/proc/ChangeTurf(path) +/turf/proc/ChangeTurf(path, defer_change = FALSE) if(!path) return if(path == type) @@ -139,7 +139,8 @@ SSair.remove_from_active(src) var/turf/W = new path(src) - W.AfterChange() + if(!defer_change) + W.AfterChange() W.blueprint_data = old_blueprint_data return W @@ -153,10 +154,11 @@ queue_smooth_neighbors(src) -/turf/open/AfterChange() +/turf/open/AfterChange(ignore_air) ..() RemoveLattice() - Assimilate_Air() + if(!ignore_air) + Assimilate_Air() //////Assimilate Air////// /turf/open/proc/Assimilate_Air() From b9bd58de883fbec6183400818064df82bbb3094e Mon Sep 17 00:00:00 2001 From: Jack Edge Date: Mon, 25 Apr 2016 16:28:16 +0100 Subject: [PATCH 76/94] Grammar fixes --- code/__DEFINES/clothing.dm | 1 - code/datums/dog_fashion.dm | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index 29e35489555..fabe22f95c4 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -101,4 +101,3 @@ #define TINT_DARKENED 2 //Threshold of tint level to apply weld mask overlay #define TINT_BLIND 3 //Threshold of tint level to obscure vision fully - diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index 337501d094d..9446d31dc52 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -65,7 +65,7 @@ /datum/dog_fashion/head/rabbit name = "Hoppy" emote_see = list("twitches its nose", "hops around a bit") - desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit" + desc = "This is Hoppy. It's a corgi-...urmm... bunny rabbit." /datum/dog_fashion/head/beret name = "Yann" @@ -152,7 +152,7 @@ /datum/dog_fashion/head/sombrero/New(mob/M) ..() - desc = "You must respect Elder [M.real_name]" + desc = "You must respect Elder [M.real_name]." /datum/dog_fashion/head/hop name = "Lieutenant REAL_NAME" From 27bc533def16ae67386f108100cc434dcde22757 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:43:10 -0600 Subject: [PATCH 77/94] fixes air bugs with the maploader changeturf, hopefully --- code/modules/awaymissions/maploader/reader.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index e716f3e8fc0..70cf058917d 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -134,6 +134,10 @@ var/global/dmm_suite/preloader/_preloader = new if(bounds[1] == 1.#INF) // Shouldn't need to check every item return null else + for(var/t in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ]))) + var/turf/T = t + //we do this after we load everything in. if we don't; we'll have weird atmos bugs regarding atmos adjacent turfs + T.AfterChange(TRUE) return bounds /** @@ -267,7 +271,7 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) if(ispath(path, /turf)) - T.ChangeTurf(path) + T.ChangeTurf(path, defer_change = TRUE) instance = T else instance = new path (T)//first preloader pass @@ -394,4 +398,4 @@ var/global/dmm_suite/preloader/_preloader = new name = "Area Passthrough" /turf/template_noop - name = "Turf Passthrough" \ No newline at end of file + name = "Turf Passthrough" From 434c5f45be1ba3952739c4f57b64fae50fb32fe2 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 09:45:11 -0600 Subject: [PATCH 78/94] small optimization --- code/__HELPERS/lists.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index cb4e8c8163b..b6eb7864381 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -351,6 +351,6 @@ if(!islist(l)) return l . = l.Copy() - for(var/i = 1 to length(.)) + for(var/i = 1 to l.len) if(islist(.[i])) .[i] = .(.[i]) From 48ec49969e5cf5320e38ad4652d5405189596761 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 15:46:46 +0000 Subject: [PATCH 79/94] Automatic changelog generation for PR #17083 --- html/changelogs/AutoChangeLog-pr-17083.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17083.yml diff --git a/html/changelogs/AutoChangeLog-pr-17083.yml b/html/changelogs/AutoChangeLog-pr-17083.yml new file mode 100644 index 00000000000..ea4a2146270 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17083.yml @@ -0,0 +1,4 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Clown mask appearance toggle now has an action button." From 4686f80b39c3cdd0f8df7191b81736003d6d1235 Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 10:20:27 -0600 Subject: [PATCH 80/94] fixes horrible runtimes --- code/modules/awaymissions/maploader/reader.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index 70cf058917d..6aceae504df 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -271,7 +271,7 @@ var/global/dmm_suite/preloader/_preloader = new var/turf/T = locate(x,y,z) if(T) if(ispath(path, /turf)) - T.ChangeTurf(path, defer_change = TRUE) + T.ChangeTurf(path, TRUE) instance = T else instance = new path (T)//first preloader pass From b23d676995b752add20a86ad7db260f3b0695691 Mon Sep 17 00:00:00 2001 From: Shadowlight213 Date: Mon, 25 Apr 2016 10:54:45 -0700 Subject: [PATCH 81/94] Fixes sloth ruin atmos runtime. --- code/controllers/subsystem/air.dm | 2 ++ code/game/turfs/open.dm | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 0b4794e698c..0ba721fa0df 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -270,6 +270,8 @@ var/datum/subsystem/air/SSair for(var/thing in turfs_to_init) var/turf/T = thing active_turfs -= T + if (T.blocks_air) + return T.Initalize_Atmos(times_fired) diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index d5aca9fad38..1094c43a496 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -7,8 +7,7 @@ /turf/open/Initalize_Atmos(times_fired) excited = 0 update_visuals() - if (blocks_air) - return + current_cycle = times_fired //cache some vars From 2007a8241d1a52e07bcc1d56ba5f1ee5252a26bf Mon Sep 17 00:00:00 2001 From: TheWiznard Date: Mon, 25 Apr 2016 15:21:52 -0500 Subject: [PATCH 82/94] removes comment --- code/game/gamemodes/malfunction/Malf_Modules.dm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 7c5f80092ee..bfff240e195 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -15,8 +15,6 @@ /datum/AI_Module/small/ uses = 5 -//////DOOMSDAY DEVICE - /datum/AI_Module/large/nuke_station module_name = "Doomsday Device" mod_pick_name = "nukestation" @@ -95,8 +93,6 @@ world << "The AI cleansed the station of life with the doomsday device!" ticker.force_ending = 1 -//////END DOOMSDAY DEVICE - /datum/AI_Module/large/fireproof_core module_name = "Core Upgrade" mod_pick_name = "coreup" From 9b458d5b6bb143b8b4e876e6b86a77a8f13a52c0 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Mon, 25 Apr 2016 22:40:24 +0000 Subject: [PATCH 83/94] Automatic changelog generation for PR #17054 --- html/changelogs/AutoChangeLog-pr-17054.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17054.yml diff --git a/html/changelogs/AutoChangeLog-pr-17054.yml b/html/changelogs/AutoChangeLog-pr-17054.yml new file mode 100644 index 00000000000..8b8b5ff8e55 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17054.yml @@ -0,0 +1,7 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Centcom regret to inform you that new instabilities with nearby +gas giants are causing exospheric bubbles to affect the +telecommunications processors. Please contact your supervisor for +further instructions." From ba8659aaacf9a618ed8ee4ca9685d18670f9e129 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Mon, 25 Apr 2016 23:29:29 +0000 Subject: [PATCH 84/94] Automatic changelog compile --- html/changelog.html | 4475 +------------------- html/changelogs/.all_changelog.yml | 35 + html/changelogs/AutoChangeLog-pr-16940.yml | 6 - html/changelogs/AutoChangeLog-pr-16974.yml | 8 - html/changelogs/AutoChangeLog-pr-17009.yml | 6 - html/changelogs/AutoChangeLog-pr-17053.yml | 10 - html/changelogs/AutoChangeLog-pr-17054.yml | 7 - html/changelogs/AutoChangeLog-pr-17067.yml | 10 - html/changelogs/AutoChangeLog-pr-17078.yml | 4 - html/changelogs/AutoChangeLog-pr-17083.yml | 4 - 10 files changed, 65 insertions(+), 4500 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-16940.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-16974.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17009.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17053.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17054.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17067.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17078.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-17083.yml diff --git a/html/changelog.html b/html/changelog.html index 137551269a0..e6e2ce06695 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,36 @@ -->

+

25 April 2016

+

Joan updated:

+
    +
  • You can once again hit a closet or crate with an item to open it.
  • +
+

Kor Razharas updated:

+
    +
  • Adds support for autoclicking.
  • +
  • The Shock Revolver has been added to RnD.
  • +
  • The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse.
  • +
  • The Research Director now starts with a box of firing pins.
  • +
  • The SABR and Stun Revolver recipes have been removed from RnD
  • +
+

coiax updated:

+
    +
  • Laughter demons are like slaughter demons, but they tickle people to death
  • +
  • Slaughter demons are no longer able to cast spells while phased.
  • +
  • Wizards can now speak while ethereal, but still cannot cast spells while ethereal.
  • +
  • Centcom's "drone expert" reports that drones vision filters have been upgraded to include the option of making all beings appear as harmless animals. info: As always, all drone filters are togglable.
  • +
  • As a sign of friendship between the Free Golems and Centcom, they have modified Centcom's jaunter to be worn around a user's waist, which will save them from falling to their death in a chasm.
  • +
  • The Golems warn that these modifications have created a risk of accidental activation when exposed to heavy electromagnetic fields.
  • +
  • Renamed hivelord stabilizer to stabilizing serum.
  • +
  • Centcom regret to inform you that new instabilities with nearby gas giants are causing exospheric bubbles to affect the telecommunications processors. Please contact your supervisor for further instructions.
  • +
  • The Janitor's Union has mandated additional features to station light replacer devices.
  • +
  • The light replacer now can be used on the floor to replace the bulbs of any lights on that tile.
  • +
  • The light replacer now eats replaced bulbs, and after a certain number of bulb fragments (four) will recycle them into a new bulb.
  • +
  • The description of the light replacer is now more informative.
  • +
  • Clown mask appearance toggle now has an action button.
  • +
+

23 April 2016

Joan updated:

    @@ -565,4451 +595,6 @@
  • Wall-mounted flasher frames now have icons.
  • Upgraded resonators now have an inhand sprite.
- -

26 March 2016

-

CPTANT updated:

-
    -
  • Nanotrasen found a new taser supplier. The new tasers hold 12 shots, down people with 2 hits and hybrid tasers now have a light laser attached.
  • -
-

CoreOverload updated:

-
    -
  • Sorting junctions now support multiple sorting tags.
  • -
-

Fox McCloud updated:

-
    -
  • Fixes Shadowlings not being spaceproof to pressure
  • -
  • Fixes being able to receive multiple spells as a Lesser Shadowling
  • -
-

Joan updated:

-
    -
  • Adds assassin holoparasites, which do low damage and take full damage, but can go invisible, causing their next attack to do massive damage and ignore armor.
  • -
  • Assassin holoparasite stealth will be broken by attacking or taking damage, which will briefly prevent the parasite from recalling.
  • -
  • Traitor holoparasite injectors include this parasite type.
  • -
-

Kor updated:

-
    -
  • There are a couple new lavaland ruins, including one with a new ghost role.
  • -
-

PKPenguin321 updated:

-
    -
  • The RD's reactive teleport armor now has a cooldown between teleports. EMPing it will cause it to shut down and have a longer cooldown applied.
  • -
  • Bolas, both reinforced and regular, now have newer, sexier sprites.
  • -
- -

24 March 2016

-

Iamgoofball updated:

-
    -
  • CLF3 now melts, burns, and destroys floors a lot more often, as it should be.
  • -
  • CLF3 now makes 3x3 fireballs on tiles it touches now, instead of a single fireball.
  • -
-

Joan updated:

-
    -
  • Lightning Holoparasites will actually shock relatively often instead of 'sometimes, maybe, if you're really lucky'
  • -
-

PKPenguin321 updated:

-
    -
  • Sand now fits in your pockets
  • -
  • Sand can now be thrown into people's eyes, doing slight stamina damage, making their vision slightly blurry, and making them stumble when they walk for a short time.
  • -
-

RemieRichards updated:

-
    -
  • BEES
  • -
  • Hydroponics can now manage bee colonies, bees produce honeycombs that can be grinded to obtain honey, a decent nutriment+healing chemical
  • -
  • Hydroponics can inject a queen bee with a syringe of a reagent to alter her DNA to match that reagent, meaning all honeycombs produced will contain that reagent in small amounts
  • -
  • Bees with reagents will attack with that reagent
  • -
-

Xhuis updated:

-
    -
  • Alcohol has received multiple tweaks.
  • -
  • Drunkenness will now be displayed on examine as long as the target's face is not hidden, ranging from a slight flush to being a completely drunken wreck. This also helps to measure alcohol poisoning, although the appearance will remain for thirty seconds after the alcohol leaves the imbiber's bloodstream.
  • -
  • Alcohol poisoning now has different effects. It begins with standard things such as confusion, dizziness, and slurring, but eventually escalates to constant vomiting, blacking out, and toxin damage.
  • -
  • Drinks now have a wide variety of alcoholism. Grog is barely a drink whatsoever, for instance, but Manly Dorf will completely floor you with too much consumption. Note that drinks based off of whiskey and vodka are the hardest, whereas beer and wine are the softest.
  • -
  • The speed of alcohol poisoning has been slightly reduced.
  • -
  • Some drinks have received unique effects. Experiment!
  • -
  • A new base alcohol joins the lineup! Absinthe has been added, and is very strong.
  • -
  • Whiskey Sour, made with Whiskey, Lemon Juice, and Sugar, simply expands the existing whiskey-based lineup.
  • -
  • Fetching Fizz, made with Nuka-Cola and Iron, will pull all nearby ores in the direction of the imbiber.
  • -
  • Hearty Punch, made with Brave Bull, Syndicate Bomb, and Absinthe, will provide extreme healing in critical condition.
  • -
  • Bacchus' Blessing, made with four of the most powerful alcohols on the station, is over three times stronger than any other alcohol on the station. Consume in small amounts or risk death.
  • -
- -

23 March 2016

-

Iamgoofball updated:

-
    -
  • Cargo now works off of Credits.
  • -
  • Cargo now plays the Stock Market.
  • -
  • Buy Low, Sell High
  • -
- -

21 March 2016

-

CoreOverload updated:

-
    -
  • You can now construct and deconstruct wall mounted flashes by using a wrench on empty wall flash. A crate with four linked "flash frame - flash controller" pairs is added to cargo.
  • -
-

Joan updated:

-
    -
  • Explosive Holoparasites now have a 33% chance to explosively teleport attacked targets, doing damage to everyone near the target's appearance point.
  • -
  • Explosive Holoparasite bombs can now detonate when living mobs bump them.
  • -
  • Adds lightning holoparasites, which have medium damage resist, a weak attack, have a lightning chain to their summoner, and apply lightning chains when attacking targets.
  • -
  • Lightning chains shock everyone nearby, doing low burn damage. This is excluding the parasite and summoner; chains will shock enemies they're attached to.
  • -
  • Holoparasites can now smash tables and lockers.
  • -
-

PKPenguin321 && !JJRcop updated:

-
    -
  • Milk, which is good for your bones, is now extra beneficial to species that are mostly comprised of bones.
  • -
-

kingofkosmos updated:

-
    -
  • The backpack close-button has got a visual overhaul.
  • -
  • All storage items can be closed by clicking on them again.
  • -
- -

20 March 2016

-

Joan updated:

-
    -
  • Nar-Sie will now corrupt airlocks, tables, windows, and windoors.
  • -
  • Corrupted airlocks have no access restrictions.
  • -
  • Nar-Sie no longer causes destruction while moving around in favor of additional corruption.
  • -
  • The surplus crate is less likely to give you eight space suits.
  • -
  • Nukeops can once again buy noslips. The nuke op magboots are still better than noslips, buy them instead.
  • -
-

Kor updated:

-
    -
  • Runtime now has a chance to spawn with a more classic look.
  • -
  • Killing a necropolis tendril will now drop a chest full of spooky loot.
  • -
  • Killing a necropolis tendril will now cause the ground to collapse around it after 5 seconds.
  • -
- -

19 March 2016

-

Joan updated:

-
    -
  • Xray lasers now have unique inhands.
  • -
  • Xray lasers have been recolored to match R&D equipment.
  • -
-

Zombehz updated:

-
    -
  • Adds 'chicken' nuggets* in 4 shapes, including regular, star, corgi, and lizard. it. They are made with one cutlet of meat.
  • -
- -

17 March 2016

-

CoreOverload updated:

-
    -
  • The recent jetpacks nerf is finally reverted. Turbo mode is dead and stabilization is once again can be toggled on and off.
  • -
  • Added a new chest cyberimplant: implantable thrusters set. This implant is a built-in jetpack that has no stabilization mode at all and can use gas from environment (if 30+ kPa) or from internals. It can also use plasma from plasma vessel organ, if you have one.
  • -
-

Joan updated:

-
    -
  • Moved the security hud's icons down slightly to allow it to coexist with medical and antag huds.
  • -
-

Shadowlight213 updated:

-
    -
  • HOG deity can now be heard by all of its followers!
  • -
  • The prophet no longer needs to wear his hat to speak with his deity.
  • -
  • The prophet's hat and staff have a new functionality! Use the staff inhand to reveal hidden structures.
  • -
  • Deities can now hide their structures from view! Pretend to be a book club when sec bursts in. experiment:Only enemy prophets or your own deity can reveal these structures and they are disabled when hidden.
  • -
- -

15 March 2016

-

Cuboos updated:

-
    -
  • Modded the current door sound and added a few new ones, unique sound for closing, bolting up/down and a nifty denied sound.
  • -
-

Isratosh updated:

-
    -
  • Security flashlights can now be attached to the bulletproof helmets.
  • -
-

Joan updated:

-
    -
  • Resource blobs produce resources for their overmind slightly slower for each resource blob their overmind has.
  • -
  • Blob overminds get one free chemical reroll.
  • -
  • Blob overminds can no longer place resource and factory blobs out of range of cores and nodes, unless they Toggle Node Requirement off. It is on by default.
  • -
  • Blob UI buttons now have tooltips.
  • -
  • Cores and nodes will expand slightly slower.
  • -
  • Blob Chemicals no longer trigger effects on dead mobs.
  • -
  • Shifting Fragments has a lower chance to move shields with normal expansion and will no longer shift blobs to the location of a dying blob.
  • -
  • Flammable Goo no longer applies fire to tiles with blobs.
  • -
  • Electromagnetic Web has a slightly higher EMP range.
  • -
-

Kor updated:

-
    -
  • Hunger was accidentally disabled sometime back in October 2015. We finally noticed and fixed it.
  • -
-

Kor (And all the lovely maintainers and spriters who helped me along the way) updated:

-
    -
  • Adds a new, lava themed planet to mine on,with randomly generated rivers of lava and islands of volcanic rock. This mine is used on Box and Metastation. Other mappers may enable it at their discretion.
  • -
  • Added deadly ash storms to mining.
  • -
  • Added slightly deadlier variants of mining mobs to lavaland, with sprites done by my girlfriend.
  • -
  • Added portable survival capsules to mining equipment lockers. Don't forget these, or you might get caught out by a storm. You may purchase more at the venders.
  • -
  • Added randomly loaded ruins to mining. These maps contain new and unique items not seen elsewhere in thegame. There are around a dozen of them added with the "release" of lavaland, though I plan for many more.
  • -
  • Some ruins contain sleepers which allow you to spawn as various roles, such as survivors of a shuttle crash stranded in the wilderness. You can find these sleepers in the orbit list.
  • -
  • You can now fly the abandoned white ship to lavaland.
  • -
-

LanCartwright updated:

-
    -
  • Choking now deals damage based on virus' Stage speed and virus Stealth.
  • -
  • Fever heats the body based on Transmittability and Stage speed.
  • -
  • Spontaneous Combustion now adjusts firestacks based on stage speed minus Stealth.
  • -
  • Necrotizing Fasciitis now deals damage based on lower Stealth values.
  • -
  • Toxic Filter now heals based on Stage speed.
  • -
  • Deoxyribonucleic Acid Restoration now heals brain damage based on Stage speed minus Stealth.
  • -
  • Shivering now chills based on Stealth and Resistance.
  • -
  • Proc for the total stage speed of a virus' symptoms.
  • -
  • Proc for the total stealth of a virus' symptoms.
  • -
  • Proc for the total resistance of a virus' symptoms.
  • -
  • Proc for the total transmittance speed of a virus' symptoms.
  • -
-

MrStonedOne updated:

-
    -
  • Lag has been removed from the following systems: mob life()/virus process, machine/object/event processing, atmos, deletion subsystem, lighting, explosions, singularity's eat(), timers, wall smoothing, mass var edit, mass proc calls(and all of sdql2), map loader, and the away mission loader.
  • -
  • Removed limit on bomb cap of 32,64,128, it can now go to the MOON.
  • -
  • Minimap generation is now a config option that defaults to off so coders don't have to wait for it to generate to test their code, server operators should note that they need to enable it on production servers that want minimap generation.
  • -
  • if you find any things that still lag, please report them to MrStonedOne for lag removal.
  • -
  • I'm gonna take this time to shill out that, Lummox JR, byond's only dev, coded the tool that made this change possible, he lives off of byond membership donations, if you like the lag removal, become a byond member or at least throw 5 bucks byond's way for doing this.
  • -
  • Feel free to ask for bomb cap removals when solo antag, but remember, the later in the round it is, the more likely you'll get it.
  • -
-

PKPenguin321 updated:

-
    -
  • Scooters and skateboards have been added.
  • -
  • Use rods to make a scooter frame. From there, apply metal to make wheels, creating a skateboard. Apply a few more rods to make a full scooter. You can also use tablecrafting to create them, their recipes can be found under the Misc. category.
  • -
  • Each step of scooter deconstruction is performed with either a wrench or a screwdriver, depending on the step.
  • -
-

xxalpha updated:

-
    -
  • Scrubber clog event now ejects cockroaches.
  • -
- -

13 March 2016

-

Dorsisdwarf updated:

-
    -
  • Adds Robo-Doctor board (The Hippocratic Oath: Now on your beepbot)
  • -
  • Adds Reporter board (The truth will set ye free (termsandconditionsmayapply))
  • -
  • Adds Live and Let Live board
  • -
  • Adds Thermodynamics as a dangerous board.
  • -
-

Impisi updated:

-
    -
  • Improvised shells now deal more far more damage but are more inaccurate.
  • -
  • Overloaded shells now require liquid plasma in addition to black powder. Shells now fire explosive pellets that are good at hurting you and everything in front of you.
  • -
-

Joan updated:

-
    -
  • Blob gamemode blobs will no longer burst from people.
  • -
  • Instead, the blob gamemode spawns overminds, which can place their blob core underneath them in an unobserved area.
  • -
  • The overminds can, until they have placed a blob core, move to any non-space, non-shuttle tile.
  • -
  • If the overminds fail to place a blob core within a time limit, it will be automatically placed for them at a random blob spawnpoint.
  • -
  • The time before the overmind automatically places the core is slightly lower than the previous average time it'd take a blob to burst.
  • -
- -

12 March 2016

-

Joan updated:

-
    -
  • Blobbernauts and blob spores can now move near blob tiles in no gravity.
  • -
  • Boiling Oil does slightly more damage and takes slightly less damage when extinguished.
  • -
  • Flammable Goo now applies firestacks to targets, but does not ignite them.
  • -
-

Jordie0608 updated:

-
    -
  • Show Server Revision will now tell you if a PR is test merged currently.
  • -
-

PKPenguin321 updated:

-
    -
  • Added reinforced bolas. They do a very short stun in addition to normal functions, and take twice as long to break out of when compared to regular bolas.
  • -
  • The traitor's Throwing Star Box has been made into the Throwing Weapons Box. It now contains two reinforced bolas in addition to its old contents. It also costs 5 TCs, down from 6.
  • -
-

tkdrg updated:

-
    -
  • The detective's revolver now takes three full seconds to reload.
  • -
-

xxalpha updated:

-
    -
  • Detective can be a Traitor/Double Agent.
  • -
  • Removed Detective's access to security lockers and secbots.
  • -
  • Removed bowman's headset from Detective's locker.
  • -
  • Box Brig Security Office and Locker Room require a higher access level (Security Officer level).
  • -
- -

10 March 2016

-

Joan updated:

-
    -
  • The blob can now be shocked by the tesla.
  • -
  • Strong blobs are now much more resistant to brute damage.
  • -
  • Tweaks blob reagents;
  • -
  • Removes Ripping Tendrils.
  • -
  • Removes Draining Spikes.
  • -
  • Cryogenic Liquid does less burn damage.
  • -
  • Pressurized Slime does less brute damage.
  • -
  • Reactive Gelatin now has a lower minimum damage.
  • -
  • Poisonous Strands applies its damage over a longer period of time.
  • -
  • Sporing Pods now does much less damage, and is less likely to produce spores when killed.
  • -
  • Regenerative Materia, Hallucinogenic Nectar, and Envenomed Filaments do less toxin damage.
  • -
  • Energized Fibers no longer heals when hit with stamina damage, and is instead immune to the tesla.
  • -
  • Boiling Oil now takes damage from extinguisher blasts. Boiling Oil blobbernauts, however, do not.
  • -
  • Replicating Foam now takes increased brute damage and when expanding from damage, will not expand again.
  • -
  • Flammable Goo takes 50% increased burn damage, from 30%.
  • -
  • Explosive Lattice now takes much higher damage from fire, flashbangs, and the tesla.
  • -
  • Electromagnetic Web takes full brute damage, lasers will now one-hit normal blobs, and the death EMP is smaller.
  • -
- -

09 March 2016

-

Joan updated:

-
    -
  • Blobs can now attack people that end up on top of blob tiles with Left-Click or the Expand/Attack Blob verb.
  • -
  • The Toxin Filter virology symptom now heals 4-8 toxin damage instead of 8-14.
  • -
  • The Damage Converter virology symptom will now do toxin damage for each limb healed.
  • -
-

MrStonedOne updated:

-
    -
  • Centcom has improved the the tesla generator! The generated tesla energy balls should now be more stable! Growing quicker and dissipating slower. It seems to also move around a touch more but that shouldn't be an issue as the the tesla escaping containment is unheard of!
  • -
- -

07 March 2016

-

WJohnston updated:

-
    -
  • Queens and praetorians have new sprites!
  • -
- -

05 March 2016

-

CoreOverload updated:

-
    -
  • Cyborg tools (screwdriver, crowbar, wrench, etc) now have new fancy sprites.
  • -
  • Said cyborg tools have received a buff and are now two times faster than their non-cyborg counterparts.
  • -
-

Joan updated:

-
    -
  • Replicating Foam has lower expand chances when hit and on normal expand.
  • -
  • Shifting Fragments will no longer try and fail to swap with invalid blobs when hit.
  • -
  • Electromagnetic Web no longer always EMPs targets, instead doing it at a 25% chance.
  • -
  • Synchronous Mesh now only takes bonus damage from fire, bombs, and flashbangs.
  • -
  • Synchronous Mesh no longer tries to split damage to blob cores or nodes. Cores and nodes still split damage to nearby blobs, however.
  • -
  • Blobbernauts now attack much slower.
  • -
  • Blobbernauts are now maximum one per factory, reduce that factory's health drastically, and die slowly if that factory is destroyed.
  • -
  • Factories must still have above 50% health to produce blobbernauts.
  • -
- -

03 March 2016

-

Joan updated:

-
    -
  • Blobbernauts now die slowly when not near a blob.
  • -
  • Blobbernauts can now see their health and the core health of the overmind that created them.
  • -
- -

02 March 2016

-

CoreOverload updated:

-
    -
  • A new "breathing tube" mouth implant. It allows you to use internals without a mask and protects you from being choked. It doesn't protect you from the grab itself.
  • -
  • Arm cannon implants are now actually implanted into the arms, not into the chest.
  • -
  • Arm cannons have an action button again.
  • -
  • Heart removal is no longer instakill. It puts you in condition similar to heart attack instead. You can fix it by installing a new heart and applying defibrillator if it wasn't beating.
  • -
  • You can now make a stopped heart beat again by squeezing it. It will stop beating very soon, so you better be quick if you want to install it without using defibrillator.
  • -
  • There is now a chance to recover some of the internal organs when butchering aliens or monkeys.
  • -
  • A new organ - lungs. When removed, it will give you breathing and speaking troubles.
  • -
  • Human burgers are, once again, named after the generous meat donors that made them possible.
  • -
-

Fox McCloud updated:

-
    -
  • Gibbing mobs will now throw their internal organs
  • -
-

Gun Hog updated:

-
    -
  • Ghost security HUDs now show arrest status and implants.
  • -
  • The Alien queen, upon her death, will now severely weaken the remaining alien forces.
  • -
-

Joan updated:

-
    -
  • Replicating Foam has a lower chance to expand when hit.
  • -
  • Penetrating Spines is now purple instead of sea green.
  • -
  • Blobbernauts now have a brief animation when produced.
  • -
  • Adds five new blob chemicals. This is a total of 25 blob chemicals. Will it ever stop?
  • -
  • Draining Spikes, which is reddish pink and does medium brute damage, and drains blood from targets.
  • -
  • Shifting Fragments, which is tan and does medium brute damage, and shifts position when attacked.
  • -
  • Flammable Goo, which is reddish orange and does low burn and toxin damage, and when hit with burn damage, emits a burst of flame. It takes more damage from burn, though.
  • -
  • Poisonous Strands, which is lavender and does burn, fire, and toxin damage over a few seconds, instead of instantly.
  • -
  • Adaptive Nexuses, which is dark blue and does medium brute damage, and reaps 5-10 resources from unconscious humans, killing them in the process.
  • -
  • Confused about what the chemical you're fighting does? Look at https://tgstation13.org/wiki/Blob#Blob_Chemicals
  • -
  • Adds 'Support and Mechanized Exosuits' and 'Space Suits and Hardsuits' categories to the syndicate uplink.
  • -
  • Nuke op reinforcements and mechs have been moved to the first category. Syndicate space suits and hardsuits have been moved to the second category.
  • -
  • Traitors can now properly buy the blood-red hardsuit for 8 TC.
  • -
  • Nuke ops can no longer buy the blood-red hardsuit, as the elite hardsuit costs the same amount while being absolutely better.
  • -
-

Kor updated:

-
    -
  • Added door control remotes. Clicking on doors while holding them will let you open/bolt/toggle emergency access depending on the mode. They will not work on doors that have their IDscan disabled (rogue AIs take note!)
  • -
  • The Captain, RD, CE, HoS, CMO, and QM all now have door control remotes in their lockers.
  • -
-

LanCartwright updated:

-
    -
  • Adds Uranium to Virus reaction. Will create a random symptom between 5 and 6 when mixed with blood.
  • -
  • Adds Virus rations, which creates a level 1 symptom when mixed with blood.
  • -
  • Adds Mutagenic agar, which creates a level 3 symptom.
  • -
  • Adds Sucrose agar which creates a level 4 symptom.
  • -
  • Adds Weak virus plasma, which creates a level 5 symptom.
  • -
  • Adds Virus plasma, which creates a level 6 symptom.
  • -
  • Adds Virus food and Mutagen reaction, creating Mutagenic agar.
  • -
  • Adds Virus food and Synaptizine reaction, creating Virus rations.
  • -
  • Adds Virus food and Plasma reaction, creating Virus plasma.
  • -
  • Adds Synaptizine and Virus plasma reaction, creating weakened virus plasma.
  • -
  • Adds Sugar and Mutagenic agar reaction, creating sucrose agar.
  • -
  • Adds Saline glucose solution and Mutagenic agar reaction, creating sucrose agar.
  • -
  • Adds Viral self-adaptation symptom, which boosts stealth and resistance, but lowers stage speed.
  • -
  • Adds Viral evolutionary acceleration, which bosts stage speed and transmittability, but lowers stealth and resistance.
  • -
  • Flypeople now vomit when they eat nutriment.
  • -
  • Flypeople can now suck the vomit off the floor to gain it's nutritional content.
  • -
  • Flypeople now must suck puke chunks and vomit to fill themselves of food content.
  • -
-

Malkevin updated:

-
    -
  • Sec officers have two sets of cuffs again (one on spawn, one in locker)
  • -
  • Done some optimisation of sec spawn equipment lists and lockers to remove some of the repetitive clicking, sec belts are now preloaded with equipment.
  • -
  • HoS has a full baton instead of the collapsible one
  • -
  • Detective has a classic police baton and pepper spray instead of the collapsible baton (someone made police batons shit, so don't get overly happy)
  • -
  • pop scaled additional lockers spawned were the wrong type, changed them to the right type which has batons now (actually belts now that I've changed them).
  • -
-

MrStonedOne updated:

-
    -
  • Suit sensors will now favor higher levels for starting amount with the exception of the max level, that remains unchanged.
  • -
  • Old odds: 25% off 25% binary lifesigns 25% full lifesigns 25% coordinates
  • -
  • New odds: 12.5% off 25% binary lifesigns 37.5% full lifesigns 25% coordinates
  • -
-

PKPenguin321 updated:

-
    -
  • Bolas are now in the game. They're a simple device fashioned from a cable and two weights on the end, designed to entangle enemies by wrapping around their legs upon being thrown at them. The victim can remove them rather quickly, however.
  • -
  • Bolas can be crafted by applying 6 metal sheets to cablecuffs. They can also be tablecrafted.
  • -
-

Sestren413 updated:

-
    -
  • Botanists have access to a new banana mutation now, bluespace bananas. These will teleport anyone unfortunate enough to slip on their peel.
  • -
-

Shadowlight213 updated:

-
    -
  • A wave of dark energy has been detected in the area. Corgi births may be affected.
  • -
-

Shadowlight213 and Robustin updated:

-
    -
  • "Old Cult is back baby!"
  • -
  • "Cult survival objective disabled"
  • -
  • "Imbuing talismans now consumes the imbue rune"
  • -
  • "Invoking the stun talisman now hurts the cultist more"
  • -
  • "The stun talisman duration is nerfed by 10%, mute is nerfed by 60% but a stutter and special new slur effect will last much longer"
  • -
  • "The old cult has retained the rune of time stop, now requiring 3 cultists to invoke"
  • -
  • "New Cult is removed!"
  • -
-

bgobandit updated:

-
    -
  • CentComm has been informed that cargo is receiving new forms of contraband in crates. Remember, Nanotrasen has a zero-tolerance contraband policy!
  • -
-

lordpidey updated:

-
    -
  • New virology symptom, projectile vomiting. It is a level four symptom.
  • -
- -

26 February 2016

-

Iamgoofball updated:

-
    -
  • Adds the Chameleon Kit to uplinks for 4 telecrystals containing a Chameleon Jumpsuit/Exosuit/Gloves/Shoes/Glasses/Hat/Mask/Backpack/Radio/Stamp/Gun/PDA.
  • -
  • The chameleon gun fires no-damage lasers regardless of what it looks like.
  • -
  • The Voice Changer has been merged into the Chameleon Mask.
  • -
  • No-slip shoes have been combined into Chameleon Shoes.
  • -
  • Space Ninjas no longer have voice changing capabilities.
  • -
  • The Chameleon Jumpsuit has been replaced by the Chameleon Kit in the uplink for the same price.
  • -
  • All chameleon clothing items have lost EMP vulnerability.
  • -
  • Chameleon equipment provides very minor armor.
  • -
  • Agent ID Cards can now use chameleon technology to look like any other ID card.
  • -
  • The Chameleon Kit is actually purchasable now. It doesn't give a single chameleon jumpsuit anymore.
  • -
-

PKPenguin321 updated:

-
    -
  • The kitchen vendor now contains two sharpening blocks.
  • -
  • Only items that are already sharp (such as fire axes, knives, etc) can be sharpened. Items used on sharpening blocks become sharper and deadlier. The sharpening blocks themselves can only be used once, and you can only sharpen items once.
  • -
  • The EMP kit has been buffed. It now contains five EMP grenades, up from two.
  • -
  • The EMP implant found in the EMP kit has been buffed. It now has three uses, up from two.
  • -
- -

24 February 2016

-

CPTANT updated:

-
    -
  • stamina regeneration is now 50% faster.
  • -
-

Joan updated:

-
    -
  • Revenants now have an essence display on their HUD
  • -
  • Revenants retain the essence cap from the previous revenant when reforming, minus any perfect souls.
  • -
  • Revenants can now toggle their night vision.
  • -
  • Revenant Defile has one tile more of range, but does less damage to windows.
  • -
  • Revenant Blight kills space vines and glowshrooms slightly more rapidly.
  • -
  • Delays before appearing when harvesting are slightly randomized.
  • -
  • Revenant fluff objectives have been changed to be slightly more interesting.
  • -
-

RemieRichards updated:

-
    -
  • Cursed heart item for wizards, allows them to heal themselves in exchange for having to MANUALLY beat their heart every 6 seconds. Heals 25 brute/burn/oxy damage per correctly timed pump.
  • -
-

Steelpoint updated:

-
    -
  • Syndicate engineers have reinforced the exterior of their stealth attack ships. Nuclear Operative ship hull walls are now, once again, indestructible.
  • -
  • In addition Syndicate engineers had the opportunity to revamp the interior of stealth attack ships. The inside of Op ships now has a slightly new layout, including a expanded medbay, as well as additional medical and explosive equipment.
  • -
  • Thanks to covert Syndicate operatives, strike teams can now bring the stealth attack ship within very close proximity to the station codenamed 'Boxstation'. A new ship destination labeled 'south maintenance airlock' is now available to Op strike teams.
  • -
-

phil235 updated:

-
    -
  • Holo tape is replaced by holo barriers.
  • -
  • The action button of gas tanks and jetpacks now turn green when you turn your internals on.
  • -
- -

20 February 2016

-

CPTANT updated:

-
    -
  • Due to new crystals Nanotrasen lasers weapons may now set you on FIRE.
  • -
-

Joan updated:

-
    -
  • Blobbernauts and blob spores now have a visual healing effect when being healed by the blob.
  • -
-

xxalpha updated:

-
    -
  • New event: Portal Storm.
  • -
  • Kinetic accelerators now reload automatically.
  • -
- -

19 February 2016

-

AnturK updated:

-
    -
  • Chairs and stools can now be picked up and used as weapons by dragging them over your character.
  • -
-

PKPenguin321 updated:

-
    -
  • The cleanbot uprising has begun.
  • -
  • Emagged cleanbots are much scarier now. Standing on top of one will yield very devastating results, namely in the form of powerful flesh-eating acid.
  • -
- -

18 February 2016

-

Kor updated:

-
    -
  • Four more chaplain weapon options have been added: hanzo steel, light energy sword, dark energy sword, and monk's staff.
  • -
- -

17 February 2016

-

Fox McCloud updated:

-
    -
  • Laser eyes mutation no longer drains nutrition
  • -
-

Joan updated:

-
    -
  • The sleeping carp gang no longer has special equipment and an inability to use pneumatic cannons.
  • -
-

PKPenguin321 updated:

-
    -
  • The traitor surgery bag now costs 3 TC, down from 4.
  • -
-

Zerrien updated:

-
    -
  • adds unique icons for the two medical patch types
  • -
- -

14 February 2016

-

Joan updated:

-
    -
  • Blobbernauts can now speak to overminds and other blobbernauts with :b
  • -
  • Blobs can now expand onto lattices and catwalks.
  • -
  • Blob expansion on space tiles with no supports is much slower.
  • -
  • Blob Sorium and Dark Matter now have less range on targets with bio protection.
  • -
  • Blob Sorium does slightly less damage.
  • -
- -

13 February 2016

-

Buggy123 updated:

-
    -
  • You can now build cable coils using the autolathe.
  • -
-

Fox McCloud updated:

-
    -
  • Fixes the sleeping carp martial arts grab not being an instant aggressive grab
  • -
-

KazeEspada updated:

-
    -
  • New backpack options available! New options include: Department Bags, Leather Satchels, and Dufflebags!
  • -
-

Kor updated:

-
    -
  • Chainsaw sword, force weapon, and war hammer have all been added as Chaplain weapon options.
  • -
-

Malkevin updated:

-
    -
  • Tracking implants have been upgraded. The old clunky manually adjusted number system has been replaced with an automated ID scanner, this will show the implant carrier's name on both the Prisoner Management Console and the hand tracker. Happy deep striking!
  • -
-

PKPenguin321 updated:

-
    -
  • Traitor EMP kits have had their cost reduced from 5 to 2, and no longer contain the EMP flashlight. rcsadd: EMP flashlights can now be bought separately for 2 TCs.
  • -
-

Zerrien updated:

-
    -
  • Conveyor pieces can be placed as corner pieces when building in non-cardinal directions.
  • -
  • Using a wrench on a conveyor rotates it while in place.
  • -
-

neersighted updated:

-
    -
  • Gibtonite can now be pulled.
  • -
  • Slowdown factors are ignored when in zero gravity.
  • -
-

phil235 updated:

-
    -
  • Brains can no longer be blinded.
  • -
  • Fixes brain being immortal. They are immune to everything but melee weapon attacks. Brains not inside a MMI can now be attacked just like MMIs. Damaged brain can't be put into a robot, they can still be put inside a brainless humanoid corpse and cloned, but deffibing the corpse always fails (can't revive someone with a brain beaten to a pulp).
  • -
- -

12 February 2016

-

Kor updated:

-
    -
  • Malf AIs can now get the objective to have a robot army by the end of the round.
  • -
  • Malf AIs can now get the objective to ensure only human crew (no mutants) are on the shuttle at round end.
  • -
  • Malf AIs can now get the objective to prevent a crewmember from escaping the station, while requiring that crewmember still be alive.
  • -
-

neersighted updated:

-
    -
  • Cybernetic implants purchased from the uplink now include a free autoimplanter!
  • -
-

octareenroon91 updated:

-
    -
  • You can no longer kill yourself with the SORD
  • -
  • Suicide attempts with the SORD will inflict 200 stamina damage. You will only die of shame.
  • -
  • Cleanup to suicide verb code.
  • -
- -

11 February 2016

-

neersighted updated:

-
    -
  • Remove all cyborg jetpacks... They were awful...
  • -
  • Adds borg ion thrusters, which are available as an upgrade module for any borg.
  • -
  • Jetpack stabilizers are always on, but now we have...
  • -
  • Jetpack turbo mode, to move at sanic speed in space.
  • -
- -

10 February 2016

-

Joan updated:

-
    -
  • Blob mobs now heal for 2.5% of their maxhealth when blob_act()ed, basically whenever they're on blobs near a node or the core.
  • -
  • Blob expansion no longer has a chance to fail inversely proportional with the expanding blob's health. Blobs still, however, expand at roughly the same rate as they do currently.
  • -
  • Adds five new blob chemicals.
  • -
  • Adds Penetrating Spines, which is sea green and does brute damage through armor. The damage can still be reduced by bio protection.
  • -
  • Adds Explosive Lattice, which is dark orange and does brute damage to all mobs near the target. Explosive Lattice is very resistant to explosions.
  • -
  • Adds Cyclonic Grid, which is a light blueish green and does oxygen damage, in addition to randomly throwing or pulling nearby objects.
  • -
  • Adds Zombifying Feelers, which is a fleshy zombie color and does toxin damage, in addition to killing and reviving unconscious humans as blob zombies.
  • -
  • Adds Regenerative Materia, which is light pink and does toxin damage, in addition to making the attacked mob think it is at full health.
  • -
  • Tweaks some of the existing blob chemicals slightly.
  • -
  • Sporing Pods can produce spores when killed by damage less than 21, from less than 20. This means lasers can produce spores.
  • -
  • Reactive Gelatin has a slightly higher maximum damage and will attack the nearby area when hit with brute damage projectiles, from just when attacked by brute damage in melee.
  • -
  • Sorium, Dark Matter, and the new Cyclonic Grid will not throw mobs with the 'blob' faction, such as blobbernauts and spores.
  • -
-

Kor updated:

-
    -
  • The chaplain can now transform the null rod into a holy weapon of his choice by using it in hand. Each one has different strengths and drawbacks.
  • -
-

MrStonedOne updated:

-
    -
  • Tesla balance changes
  • -
  • Tesla will now require increasingly more energy to trigger new orbiting balls. First ball comes with 32 energy (down from 300), fourth requires 256 (down from 1200), and so on and on, doubling with each new ball. Balls after 7 are increasingly harder to get than before, whereas balls before 6 are easier to get.
  • -
  • MULTIBOLT IS BACK!
  • -
  • Be warned that in multibolt all but 1 primary bolt now have a random shocking range, meaning they may still target a close human over a far away grounding rod as the rod may be out of range.
  • -
  • Power output of tesla massively dropped, it should no longer put out almost twice the power of a stage 3 singulo with maxed collectors without any balls, you'll need at least 3 balls for that now.
  • -
  • Tesla can now lose power, causing ball count to drop. Tesla will never shrink out of existence, just lose its balls.
  • -
  • Tesla is now more likely to head in the direction of the thing it last zapped.
  • -
-

PKPenguin321 updated:

-
    -
  • Chameleon Jumpsuits now have slight melee, bullet, and laser protection.
  • -
  • The armor values for security helmets, caps, and berets have all been brought in line. Consequently, helmets and berets are a teeny bit better, and caps now have the slight bomb protection that the other two had.
  • -
  • The time needed to complete most tablecrafting recipes has been cut in half to make tablecrafting less annoying to use.
  • -
-

Shadowlight213 updated:

-
    -
  • pAI controlled mulebots can now run people over.
  • -
  • Mulebot health has been greatly decreased.
  • -
-

neersighted updated:

-
    -
  • Horizontal (lying) mobs now fit into crates
  • -
  • Mobs may now be stuffed into crates, as with lockers
  • -
  • Stuffing into a locker deals a mild stun (the same as tabling)
  • -
-

octareenroon91 updated:

-
    -
  • New designs can now be added to Autolathes via a design disk. Simply use a disk containing a suitable design on your autolathe.
  • -
- -

09 February 2016

-

AnturK updated:

-
    -
  • Syndicate Operatives can now buy bags full of plastic explosives for 9 TC.
  • -
-

Gun Hog updated:

-
    -
  • "Nanotrasen has drafted a design for an exosuit version of the medical nanite projector normally issued to its Emergency Response Personnel. With sufficient research, a prototype may be fabricated for field testing!"
  • -
-

incoming5643 updated:

-
    -
  • The wizard spell wild shapeshift has been made less terrible.
  • -
-

neersighted updated:

-
    -
  • Internals tanks now provide an action button
  • -
  • Jetpacks now emit the gas consumed for propulsion onto their turf
  • -
  • Jetpacks no longer have object verbs
  • -
  • tgui no longer has internals buttons
  • -
  • Malf AI's flood ability now correctly sets vent pressure bounds -- the results are devastating... Try it!
  • -
- -

08 February 2016

-

Incoming5643 updated:

-
    -
  • Poly will now speak a line or emote when pet.
  • -
  • Poly now responds to getting fed crackers by becoming more annoying for the round.
  • -
  • Every day he is growing stronger
  • -
-

Kor updated:

-
    -
  • A certain hygiene obsessed alien is now obtainable via xenobiology gold cores.
  • -
  • Add laserguns with swappable, rechargeable magazines. They are adminspawn only.
  • -
  • Operatives now get their pinpointers in their pocket when they spawn, meaning reinforcements automatically come with them (and hopefully people stop forgetting them in general).
  • -
  • Capture the flag now features a high speed instagib mode, with guns courtesy of MMMiracles.
  • -
-

phil235 updated:

-
    -
  • The vision updates for mobs are now instantaneous (e.g. you don't have to wait one second to see again when removing your welding helmet)
  • -
  • Your vision is now affected when you're inside something or viewing through a camera. You can no longer see mobs or objects when ventcrawling (unless you have xray for example), an xray user viewing through a camera do not see through walls around the camera. On the other hand, cameras with an xray upgrade let you see through walls. Unfocused camera now give you the same effect as when you are nearsighted. Being inside closets, morgue container and disposal bins give you some vision impairments.
  • -
  • The ability to toggle your hud on and off (with f12) is now available to all mobs not just humans.
  • -
- -

06 February 2016

-

LordPidey updated:

-
    -
  • Added suicide command for pipe valves. It's quite messy.
  • -
-

Lzimann updated:

-
    -
  • Combat Mechas now have a increased chance of destroying a wall with punches (40% for walls and 20% for reinforced walls)!
  • -
  • Combat mechas can now destroy tables and racks with a punch!
  • -
-

neersighted updated:

-
    -
  • The Syndicate has stolen the latest tgui improvements from Nanotrasen! All uplinks now feature filtering/search.
  • -
  • Nanotrasen is proud to announce its next generation sleepers, featuring tgui!
  • -
  • Portable atmospheric components have been overhauled to use the latest interface technology.
  • -
  • The Area Atmosphere Computer has been removed.
  • -
  • Huge scrubbers now require power.
  • -
  • Borg jetpacks are now refilled from a recharger and not a canister.
  • -
  • Power monitors now have a state of the art graph. Hopefully they're actually useful to someone.
  • -
  • Cargo consoles have been redesigned and now feature search and a shopping cart!
  • -
- -

05 February 2016

-

Joan updated:

-
    -
  • Blob expansion is faster near the expanding blob, but slower further away from it.
  • -
  • Blob spores produce a slightly larger smoke cloud when dying. Sporing Pods spores and blob zombies produce the current small cloud.
  • -
  • Blobbernauts can no longer pull anything at all.
  • -
  • Blobbernauts health reduced to 200, but blobbernauts now take half brute damage.
  • -
  • Blobbernauts now take massive damage from fire.
  • -
  • Blobbernauts do approximately 3 more damage when attacking.
  • -
  • Replicating Foam will expand more actively when damaged.
  • -
  • Adds Electromagnetic Web, which is light blue, does burn damage and EMPs targets, and causes a small EMP when dying.
  • -
  • Electromagnetic Web takes more damage; a normal blob that hasn't been near a node or the core for 6~ seconds can be oneshotted by a laser.
  • -
  • Anomalies, such as pyroclastic and vortex anomalies, now appear at the bottom of the ghost orbit and observe menus.
  • -
-

Kor updated:

-
    -
  • Nuke ops can purchase sentience potions for 4tc
  • -
-

MMMiracles updated:

-
    -
  • Bulldog now starts with stun-slugs instead of its usual 60-brute slugs. Slugs now cost 3 TC instead of 2.
  • -
  • Most SAW ammo has been slightly buffed in damage so maybe it'll be worth buying now along with a slight cost decrease for the gun itself.
  • -
  • Incen shells for the shotgun now apply extra firestacks on hit so it actually sets people on fire instead of turning them into a light show.
  • -
  • Incen rounds for the SAW now leave a fire trail similar to the bulldog's dragonsbreath round.
  • -
  • Nuke Ops now have the ability to purchase breaching shells, a weaker variant of the meteorslugs that can still push back people/airlocks/mechs/corgis.
  • -
  • SAW should now use its in-hand sprites for an open-closed magazine
  • -
-

PKPenguin321 updated:

-
    -
  • You can now sharpen carrots into shivs by using a knife or hatchet on them.
  • -
-

bgobandit updated:

-
    -
  • Seven new emoji have been added to hasten the death of the English language.
  • -
-

octareenroon91 updated:

-
    -
  • Player-controlled medibots can examine a patient to know what chems are in the patient's body.
  • -
  • autolathes have been showing extra copies of the hacked designs, but no more.
  • -
- -

01 February 2016

-

Erwgd updated:

-
    -
  • The Kitchen Vending machine now stocks salt shakers and pepper mills!
  • -
  • The NutriMax now stocks spades, cultivators and plant analyzers.
  • -
  • Rice seeds are now stocked in the MegaSeed Servitor, and the seeds supply crate now contains a pack of rice seeds.
  • -
  • Botanists should be aware that wheat stalks can no longer mutate into rice.
  • -
-

Fayrik updated:

-
    -
  • pAI cards can now be inserted into simple robots, to allow for more robust robot personalities.
  • -
-

PKPenguin321 updated:

-
    -
  • You can now store knives, pens, switchblades, and energy daggers in certain types of shoes (such as jackboots, workboots, winter boots, combat boots, or no-slips).
  • -
  • Horns can now be stored in clown shoes. Honk.
  • -
-

TrustyGun updated:

-
    -
  • Adds gag handcuffs to the prize pool for arcade machines. They act like regular handcuffs, but you break out of them in a second.
  • -
-

WJohnston updated:

-
    -
  • Adds missing booze & soda dispenser, library console, fixes door access and a few other minor things to Efficiency Station
  • -
  • Also adds direction tags so people can find their way around better.
  • -
-

bgobandit updated:

-
    -
  • On Valentine's Day, all spacemen will receive candy hearts and valentines for their special someones! Label valentines with a pen.
  • -
  • Note that today is not Valentine's Day.
  • -
- -

31 January 2016

-

Kor updated:

-
    -
  • Added a special AI upgrade disk that allows normal AIs to use malf modules and hack APCs. It is admin only.
  • -
  • Added an AI upgrade disk that grants AIs the lipreading power. It is admin only.
  • -
- -

30 January 2016

-

Boredone updated:

-
    -
  • Due to an experiment gone wrong, the Research Director's Teleport Armor now causes some mild radiation poisoning on teleportation to the wearer.
  • -
-

Francinum updated:

-
    -
  • Added two new female underwear styles.
  • -
-

Kor updated:

-
    -
  • You can now use the abandoned white ship as an escape route at round end. This is possible on Box, Meta, and Dream.
  • -
  • Added support so that mappers can make any shuttle function as an escape shuttle.
  • -
-

MMMiracles updated:

-
    -
  • Three new bra sets have been added for the ladies out there who want to show their patriotism.
  • -
-

xxalpha updated:

-
    -
  • Blueprints will now allow the expansion of an existing area by giving its name to a new adjacent area.
  • -
  • Added a no power warning cyborg verb to Robot Commands.
  • -
- -

29 January 2016

-

Joan updated:

-
    -
  • Holoparasites can now see their summoner's health at all times. The health displayed is a percentage, with 0 being dead.
  • -
  • Holoparasites now have visual flashes on the summoner's location when recalled due to range limits and when manifesting.
  • -
-

Kor updated:

-
    -
  • Red xenobio potions now work on vehicles (janitor cart, ATV, secway, etc), causing them to go faster.
  • -
  • Stuffing people in bins uses clickdrag instead of grab.
  • -
- -

28 January 2016

-

Joan updated:

-
    -
  • Blobs can communicate before bursting to allow for more coordination.
  • -
-

Kor updated:

-
    -
  • Butchering mobs by attacking them with sharp objects will only happen on harm intent. This means it is possible to do surgery on aliens again.
  • -
- -

27 January 2016

-

Joan updated:

-
    -
  • Golems have about a 40% chance to stun with punches, from about 60%.
  • -
  • Millitary Synths have about a 50% chance to stun with punches, from literally 100%.
  • -
  • Blobbernaut creation costs 30 points, and does much more damage to the factory.
  • -
  • Blob factories regenerate at half normal rate.
  • -
  • Blob reagents tweaked;
  • -
  • Ripping Tendrils does slightly more brute damage, but less stamina damage.
  • -
  • Lexorin Jelly does less brute damage.
  • -
  • Energized Fibers does slightly more burn damage.
  • -
  • Sporing Pods does slightly more toxin damage.
  • -
  • Replicating Foam will try to replicate when hit more often.
  • -
  • Hallucinogenic Nectar does slightly more toxin damage and causes hallucinations for longer.
  • -
  • Cryogenic Liquid does more burn damage.
  • -
  • Synchronous Mesh does slightly less damage with one blob but massive damage with more than one nearby blob.
  • -
  • Dark Matter does less brute damage.
  • -
  • Sorium does slightly less brute damage.
  • -
  • Pressurized Slime has a lower chance to emit water when killed and when attacking targets.
  • -
  • Supermatter explosion is no longer capped, and under normal conditions will produce a 8/16/24 explosion when delaminating.
  • -
  • Blob tiles now do an attack animation when failing to expand into a turf.
  • -
  • Overmind-directed expansion is more visible than automatic expansion.
  • -
-

Kor updated:

-
    -
  • Capture the flag has been added in space near central command. The spawners are disabled by default, so be sure to harass admins when you die until they let you play. The arena was mapped by Ausops.
  • -
  • Nuke ops can purchase mosin nagants for 2 telecrystals.
  • -
-

MrStonedOne updated:

-
    -
  • Fixes the powersink drawing less power than the smeses put out.
  • -
  • Made the powersink hold significantly more power before overloading and going boom.
  • -
  • Buffed the explosion of the power sink when it overloads. You are suggested to think twice about wiring the engine to the grid.
  • -
-

PKPenguin321 updated:

-
    -
  • The Autoimplanter, a device that can insert cyberimplants into humans instantly and without the need of surgery, has been added to the game. It is currently only obtainable by nuke ops, by way of being included in the Box of Implants.
  • -
- -

23 January 2016

-

neersighted updated:

-
    -
  • Refactor wires; port wire interface to tgui.
  • -
  • Wire colors are now fully randomized.
  • -
  • Remove pizza bombs, as the code and sprites were terrible.
  • -
  • Add pizza bomb cores, which can be combined with a pizza box to make a pizza bomb.
  • -
-

octareenroon91 updated:

-
    -
  • Chemistry machinery should now all equally accept beakers, drinking glasses, etc.
  • -
- -

19 January 2016

-

neersighted updated:

-
    -
  • Many many interfaces have been ported to tgui; uplinks and MULEbots being the most important
  • -
  • You can now tune radios by entering a frequency
  • -
  • Air Alarms now support any gas
  • -
- -

17 January 2016

-

Joan updated:

-
    -
  • You can once again repair a hacked APC by using an APC frame on it instead of welding it off the wall, at the same stage as you'd weld it off the wall.
  • -
-

MrStonedOne updated:

-
    -
  • Control clicking on a turf now un-pulls
  • -
- -

16 January 2016

-

Joan updated:

-
    -
  • Alien queens and praetorians have suitably large speechbubbles.
  • -
  • Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles.
  • -
  • Blob mobs have suitably uncomfortable-looking speechbubbles.
  • -
  • Holoparasites and guardians have suitably robotic and magical speechbubbles.
  • -
  • Swarmers have suitably holographic speechbubbles.
  • -
  • Slimes have suitably slimy speechbubbles.
  • -
- -

15 January 2016

-

Joan updated:

-
    -
  • Holoparasites can no longer beat their owner to death while inside of them.
  • -
  • Updates traitor holoparasite descriptions for accuracy.
  • -
  • Adds 8 additional silvery metals to the holoparasite name pool.
  • -
  • Adds two new holoparasite colors, light purple and red.
  • -
  • Holoparasite HUD buttons now have new sprites.
  • -
  • Adds glow effects when guardians teleport or recall, including fire guardian teleporting and support guardian teleporting.
  • -
-

Kor updated:

-
    -
  • Washing machines are activated via alt+click rather than a right click verb.
  • -
- -

13 January 2016

-

Joan updated:

-
    -
  • Alien whisper ability has a new icon
  • -
-

MrStonedOne updated:

-
    -
  • Control clicking on the thing you are pulling will no longer unpull, instead control clicking on anything too far away to be pulled will unpull. (reminder that the delete key also unpulls)
  • -
-

OneArmedYeti updated:

-
    -
  • To help with colorblindness, gang HUDs have been changed so leaders have a border and normal gangster icons are smaller.
  • -
- -

11 January 2016

-

Joan updated:

-
    -
  • Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories and resource nodes will still animate.
  • -
  • Holoparasite sprites have been updated again, are now named after silvery metals and flowers and can also be colored purple, blue or yellow.
  • -
-

xxalpha updated:

-
    -
  • Pipes and cables under walls, intact floors, grilles and reinforced windows will now be shielded from explosions until exposed.
  • -
- -

09 January 2016

-

Wjohnston updated:

-
    -
  • AI Satellite has been remapped to make it more secure.
  • -
- -

07 January 2016

-

KorPhaeron updated:

-
    -
  • Doubled cost of Lesser Summon Guns to 4 and increased charge time to 75 seconds.
  • -
-

TrustyGun updated:

-
    -
  • Added two new UI styles: black and green Operative and pale green Slimecore.
  • -
- -

02 January 2016

-

Kor updated:

-
    -
  • Guardians/Parasites are now named after constellations, and have new sprites from Ausops.
  • -
-

Kor and GunHog updated:

-
    -
  • Malfunctioning AIs can now purchase Enhanced Surveillance for 30 points, which allows them to "hear" with their camera eye.
  • -
-

MMMiracles updated:

-
    -
  • A distress signal was recently discovered with gateway coordinates attached to a far-off research facility owned by Nanotrasen. The signal was sent out in hopes of someone competent receiving it, unfortunately, your station was the only one to respond. Local security forces may not be welcoming your arrival group with open arms.
  • -
- -

01 January 2016

-

Iamgoofball updated:

-
    -
  • Redid how objectives are assigned, they're now a lot more random in terms of what you can get.
  • -
-

Incoming5643 updated:

-
    -
  • Removed gender restrictions from socks.
  • -
-

Joan updated:

-
    -
  • Storage Blobs are gone; they were effectively a waste of resources, as there are more or less no points at which you should need them, unless you were winning excessively hard.
  • -
  • Blobs can no longer burst early; instead, the button gives some early help and serves to indicate you're a blob.
  • -
  • Blobbernauts now poll candidates instead of grabbing a candidate immediately. The poll is 5 seconds, so that there's no significant pause between making a blobbernaut and it doing stuff.
  • -
  • Blobbernaut creation replaces Storage Blob creation on the blob HUD.
  • -
  • Overmind communication is now much larger and easier to see, and blob mobs, such as blobbernauts, will hear it.
  • -
-

Kor updated:

-
    -
  • The wizard has a new spell, Lesser Summon Guns. This summons an unending stream of single shot bolt action rifles into his hands, automatically replacing themselves as you fire.
  • -
  • Fixes successive generations of grey tide clones not despawning.
  • -
  • Using challenge ops now delays shuttle refuel.
  • -
  • Added a new wizard event, Advanced Darkness.
  • -
-

MrStonedOne updated:

-
    -
  • GHOST POPUP RE-WORK
  • -
  • Ghost popups will no longer steal focus
  • -
  • Ghost popups will no longer submit on key press (regardless of focus) unless you tab to a button first
  • -
  • Ghost popups will close themselves after the time out has ended
  • -
  • Ghost popups are now themed.
  • -
  • Long actions (like resisting out of handcuffs) will no longer count space/nograv drifting as the user moving.
  • -
  • This does not apply to the target of a long action if that target isn't you. Pulling something while space drifting and working on it intentionally won't work.
  • -
- -

31 December 2015

-

Bawhoppen updated:

-
    -
  • Nanotrasen has opened the availability of tactical SWAT gear to station's cargo department
  • -
  • Due to a new trade agreement with Chinese space suit manufacturers, Nanotrasen can now obtain basic space suits much cheaper; This has been reflected in the cargo prices
  • -
  • Amateur medieval enthusiasts have found a quick way to easily make wooden bucklers.
  • -
-

Joan updated:

-
    -
  • Replaced every book sprite in the game with new, consistent versions.
  • -
  • Except the one-use wizard spellbooks, which already got new sprites.
  • -
-

PKPenguin321 updated:

-
    -
  • Chest implants have been added that allow you to morph your arms into a gun and back at will. There are two variants, a taser version and a laser version. Both versions are self-charging. Getting EMPed with one of these implants results in the implant breaking and loads of fire damage. The implants are currently admin-only.
  • -
  • The telecrystal price for thermal imaging goggles has been lowered from 6 to 4.
  • -
-

incoming5643 updated:

-
    -
  • The wizard federation has finally updated their assortment of guns for the summon guns event. Look forward to getting shot in the face with a whole new batch of interesting and rarely seen weaponry!
  • -
- -

28 December 2015

-

AnturK updated:

-
    -
  • You can now write an entire word with crayons by setting it as a buffer and then clicking the target tiles in the right order.
  • -
-

Joan updated:

-
    -
  • Blobbernauts can no longer smash walls of any type.
  • -
-

MrStonedOne updated:

-
    -
  • Progress bars now have 20 states instead of 5.
  • -
  • Bump mining should be fixed.
  • -
  • Long actions now checks for movement/changed hands/etc more often to prevent edge cases.
  • -
  • Multiple progress bars will now stack properly, rather than fight each other for focus.
  • -
-

Ressler updated:

-
    -
  • Adds the reagent Haloperidol.
  • -
  • It is an anti-drug reagent, good for stopping assistants hyped up on meth, bath salts, and equally illegal drugs.
  • -
  • It can be made with Chlorine, Fluorine, Aluminum, Potassium Iodide, and Oil.
  • -
-

neersighted updated:

-
    -
  • Make NanoUIs transfer upon (un)ghosting.
  • -
  • Fix NanoUIs jumping when resized/dragged.
  • -
  • Lots of other NanoUI bugs.
  • -
- -

27 December 2015

-

Joan updated:

-
    -
  • Overmind-created blobbernauts are now player-controlled if possible.
  • -
  • Creating a blobbernaut no longer destroys the factory, instead doing heavy damage to it and preventing it from spawning spores for one minute.
  • -
  • You cannot spawn blobbernauts from overly damaged factories.
  • -
  • Procedure 5-6 may be issued for biohazard containment under certain situations.
  • -
  • Blobs will now burst slightly later on average, and the nuke report with the nuke code will arrive slightly earlier.
  • -
-

Kor updated:

-
    -
  • Spacemen now announce when they are changing magazines.
  • -
  • Command headsets now have a toggle to let you have larger radio speech.
  • -
-

LanCartwright updated:

-
    -
  • The Syndicate Ship no longer spawns with Bulldog shotguns, operative have been given 10 extra telecrystals instead.
  • -
-

MrStonedOne updated:

-
    -
  • Flashes that were emp'ed were incorrectly flashing people in range of the emper, not in range of the flash.
  • -
  • Flashes in a mob's inventory that are emp'ed will only aoe stun if it is not inside of a container like a backpack/box
  • -
- -

26 December 2015

-

Buggy123 updated:

-
    -
  • Salicyclic Acid now rapidly heals severe bruising and slowly heals minor ones.
  • -
-

Iamgoofball updated:

-
    -
  • Telsa energy ball now shoots only a single, powerful beam of lightning that can arc between mobs.
  • -
  • Energy ball can now be heard when near-by.
  • -
-

Incoming5643 updated:

-
    -
  • Animated objects now revert if they have no one to attack for a while.
  • -
  • Added Golden revolver, a powerful sounding gun with large recoil.
  • -
-

Kor updated:

-
    -
  • Transform Sting is now actually functional.
  • -
-

MrStonedOne updated:

-
    -
  • Movement in no gravity now allows you to push off of things only dense to some mobs if it is dense to you (such as tables/blob tiles) rather than just objects that are only dense to all mobs.
  • -
  • Long/timed actions will now cancel properly if you move and quickly move back to the right location.
  • -
- -

25 December 2015

-

Joan updated:

-
    -
  • The blob Split Consciousness ability has been removed.
  • -
  • The blob mode now spawns more roundstart blobs, instead.
  • -
-

Kor updated:

-
    -
  • AI holograms no longer drift in zero gravity
  • -
-

LanCartwright updated:

-
    -
  • Shotguns shells now have one extra pellet.
  • -
-

MrStonedOne updated:

-
    -
  • Screen shakes will no longer allow you to see through walls
  • -
  • Screen shakes will now move with you when moving rather than lag your client behind your mob
  • -
  • Screen shakes are now less laggy in higher tickrates
  • -
- -

22 December 2015

-

Iamgoofball updated:

-
    -
  • Tesla engine has been added alongside the singularity engine to all maps.
  • -
-

Joan updated:

-
    -
  • Adds three new blob chemicals:
  • -
  • Replicating Foam, which is brown, does brute damage, has bonus expansion, and has a chance to expand when damaged.
  • -
  • Sporing Pods, which is light orange, does low toxin damage, and has a chance to produce weak spores when expanding or killed.
  • -
  • Synchronous Mesh, which is teal, does brute damage and bonus damage for each blob tile near the target, and splits damage taken between nearby blobs.
  • -
  • Synchronous Mesh blobs take 25% more damage, to compensate for the spread damage.
  • -
-

Kor updated:

-
    -
  • Cayenne will no longer be targeted by the syndicate turrets.
  • -
  • Energy shields now only reflect energy projectiles.
  • -
  • Added accelerator sniper rounds to uplink, a weak projectile that ramps up damage the farther it flies.
  • -
-

MMMiracles updated:

-
    -
  • Saber magazines have been dropped to 21 per magazine. When asked, Nanotrasens official ballistic department replied "There is indeed such a thing as too much bullet."
  • -
-

Xhuis updated:

-
    -
  • Stun batons can now be blocked by shields, blocked hits don't deduct charge.
  • -
-

xxalpha updated:

-
    -
  • Janitor cyborgs now have a bottle of drying agent.
  • -
- -

21 December 2015

-

AnturK updated:

-
    -
  • Ghost HUD and Ghost Inquisitiveness toggles are now persistent between rounds.
  • -
-

Kor updated:

-
    -
  • Malfunctioning AIs have been merged with traitor AIs. They no longer appear in their own mode.
  • -
  • Hacking APCs now gives you points to spend on your modules. Save up enough points and you can buy a doomsday device on a 450 second timer.
  • -
  • The detectives revolver reskins on alt click now.
  • -
  • You can now dual wield guns. Firing a gun will automatically fire the gun held in your off hand if you are on harm intent.
  • -
-

LanCartwright updated:

-
    -
  • The TC costs for nuke ops have been rebalanced. Guns, viscerators and mechs are cheaper, ammo and borgs are more expensive.
  • -
  • Most guns can now be bought in bundles, together with some ammo and freebies for a special discount.
  • -
-

The-Albinobigfoot updated:

-
    -
  • Nuclear Operative families may once again requisition ultra-adhesive footwear.
  • -
- -

20 December 2015

-

Joan updated:

-
    -
  • Reduces Lexorin Jelly's oxygen damage significantly.
  • -
  • Blobbernaut chemical application on attack is back, but much less absurd this time; blobbernauts with an overmind will do 70% of the normal chem damage(plus 4) and attack at a much slower rate than the blob itself can.
  • -
  • As an example, a blobbernaut with the Ripping Tendrils chemical would do 14.5 brute and 10.5 stamina damage per hit.
  • -
-

Kor updated:

-
    -
  • Adds reactive tesla armour. Adminspawn only.
  • -
  • Adds the legendary spear, Grey Tide. Admin only.
  • -
  • Nuke Ops can now purchase penetrator rounds for their sniper rifles.
  • -
  • Nuke ops can now purchase additional team members for 25 telecrystals. They don't come with any gear other than a pistol however, so remember to save some points for them.
  • -
  • Nuke Ops now have an assault pod. A 30tc targeting device will allow you to select any area on the station as its landing zone. The pod is one way, so don't forget your nuke.
  • -
  • The teleporter board is no longer available for purchase in the uplink.
  • -
  • After finding absolutely nothing of value, Nanotrasen away teams placed charges and scuttled the abandoned space hotel.
  • -
  • Metastation now has xenobiology computers.
  • -
  • Metastation now has escape pod computers.
  • -
  • A distress signal has been detected broadcasting in an asteroid field near Space Station 13.
  • -
  • Clicking the (F) follow link for AI speech will now make you orbit their camera eye.
  • -
-

MMMiracles updated:

-
    -
  • The SAW has been revamped slightly. It now requires a free hand to fire, but includes 4 new ammo variants along with a TC cost decrease for both the gun and the ammo boxes.
  • -
-

MrStonedOne updated:

-
    -
  • Fixes ghost orbit breaking ghost floating
  • -
  • Fixes orbiting ever breaking golem spawning
  • -
  • Fixes orbiting ever preventing that ghost from showing up in pictures taken by ghost cameras resdel: Fixes being able to break your ghost sprite by multiple quick consecutive orbits (FINAL SOLUTION, PROVE ME WRONG YOU CAN'T)
  • -
-

Remie updated:

-
    -
  • Byond members can now choose how their ghost orbits things, their choices are: Circle, Triangle, Square, Pentagon and Hexagon!
  • -
  • orbit() should be much cheaper for clients now, allowing those of you with potato PCs to survive mega ghost swirling better.
  • -
-

incoming5643 updated:

-
    -
  • the terror of double tailed lizards and featureless clones should now be over
  • -
  • the emote *stopwag no longer works, just *wag again to stop instead
  • -
- -

18 December 2015

-

Incoming5643 updated:

-
    -
  • Soon to be blobs in blob mode can now burst at their choosing. However they will still burst if they wait too long.
  • -
  • Burst responsibly.
  • -
-

Joan updated:

-
    -
  • New blob chemicals:
  • -
  • Pressurized Slime, which is grey, does low brute, oxygen, and stamina damage, but releases water when damaged or destroyed.
  • -
  • Energized Fibers, which is light yellow, does low burn damage, high stamina damage, and heals if hit with stamina damage.
  • -
  • Hallucinogenic Nectar, which is pink, does low toxin damage, causes vivid hallucinations, and does some bonus toxin damage over time.
  • -
  • Replaces Kinetic Gelatin with Reactive Gelatin, which does less brute damage, but if hit with brute damage in melee, damages all nearby objects.
  • -
  • Changes three of the old blob chemicals:
  • -
  • Ripping Tendrils does slightly more stamina damage
  • -
  • Envenomed Filaments no longer causes hallucinations, but does some stamina damage in addition to toxin damage over time.
  • -
  • Cryogenic Liquid will freeze targets more effectively.
  • -
-

Kor updated:

-
    -
  • Shooting someone who is holding a grenade has a chance to set the grenade off.
  • -
  • Shooting someone who is holding a flamethrower has a chance to rupture the fuel tank.
  • -
  • Shields have a bonus against blocking thrown projectiles.
  • -
-

Swankcookie updated:

-
    -
  • lanterns no longer turn into flashlights when you pick them up.
  • -
-

bgobandit updated:

-
    -
  • Lizard tails can now be severed by surgeons with a circular saw and cautery, and attached the same way augmented limbs are.
  • -
  • The Animal Rights Consortium is horrified by Nanotrasen stations' sudden rise of illegal lizard tail trade, with such atrocities as lizardskin hats, lizard whips, lizard clubs and even lizard kebab!
  • -
-

neersighted updated:

-
    -
  • NanoUI should now load much faster, as the filesize and file count have been reduced
  • -
- -

17 December 2015

-

Kor updated:

-
    -
  • Security barricades are now deployed via grenade. You can no longer move them after they've been deployed, you must destroy them.
  • -
  • You can now shoot through wooden barricades while adjacent, while any other gunfire has a 50% chance of being blocked.
  • -
  • There are no longer restrictions against implanting the nuclear disk in people.
  • -
  • If the station is destroyed in a nuclear blast, any surviving traitors will complete their "escape alive" objective regardless of their location.
  • -
  • Hulks now lose hulk when going into crit, rather than at 25 health.
  • -
  • Shuttles will no longer drag random tiles of space with them. This means you can be thrown out of partially destroyed escape shuttles very easily.
  • -
  • The people and objects on destroyed tiles won't be along for the ride when the shuttle moves either.
  • -
  • Adds hardsuits with built in energy shielding. CTF and security versions are admin only.
  • -
  • Nuclear operatives can buy a shielded hardsuit for 30tc.
  • -
  • Traitors can now buy a Mulligan for 4 telecrystals, a syringe that completely randomizes your name and appearance.
  • -
  • The spy bundle now includes a switchblade and Mulligan.
  • -
-

MMMiracles updated:

-
    -
  • A set of coordinates have recently reappeared on the Nanotrasen gateway project. Ask your local central official about participation.
  • -
-

MrStonedOne updated:

-
    -
  • Ghosts can now double click on ANY movable thing (ie: not a turf) to orbit it
  • -
-

PKPenguin321 updated:

-
    -
  • Dope golden necklaces have been added. They're a jumpsuit attachment like ties and are completely cosmetic.
  • -
  • Dope necklaces can be bought from the clothesmate with a coin. Three are in the clothesmate by default, so you can get your posse going. Gangs that aren't Sleeping Carp can also purchase necklaces for 1 influence each. Dope.
  • -
-

xxalpha updated:

-
    -
  • Restores the ability to bolt and unbolt operating airlocks.
  • -
- -

16 December 2015

-

AnturK updated:

-
    -
  • Medical Beam Gun now available for Nuclear Operatives and ERT Medics.
  • -
-

Joan updated:

-
    -
  • Revenant Overload Lights reveal time lowered from 10 seconds to 8 seconds, shock damage increased from 18 to 20.
  • -
  • Revenant Blight reveal time lowered from 6 seconds to 5 seconds.
  • -
-

Kor updated:

-
    -
  • Styptic once again works in patches.
  • -
  • Nuke Op team leaders can now activate challenge mode if more than 50 players are online.
  • -
  • Xenobio mobs will no longer spontaneously murder their friends if you give them sentience
  • -
-

The-Albinobigfoot updated:

-
    -
  • The Wishgranter now displays its faith in humans with curbed enthusiasm.
  • -
-

Tkdrg updated:

-
    -
  • Cult has been overhauled in an attempt to make the gamemode more fun.
  • -
  • Cult onversion and stunpapers have been removed. So have most cult objectives.
  • -
  • The cult's single objective is now defend and feed a large construct shell in order to summon the Geometer.
  • -
  • The cult must sacrifice souls in order to acquire summoning orbs, which must be inserted inside said shell.
  • -
  • The large construct shell can be procured by using a summoning orb in hand, but it is vulnerable to attack.
  • -
  • Once enough orbs are inserted, the station will go Delta. After three minutes, the cult will have won.
  • -
  • Cult communications now no longer damage you when done without a tome.
  • -
  • Cultists now start with a sacrificial dagger, with bleeding effects and high throwing damage.
  • -
  • Most existing runes were buffed, merged, or removed. A Immolate rune and a Time Stop rune were added. Experiment!
  • -
  • Each cultist now gets a random set of runes in their tomes. Pool together your knowledge in order to thrive.
  • -
-

neersighted updated:

-
    -
  • NanoUI 3.0
  • -
  • Completely rewrite NanoUI frontend; rework backend.
  • -
  • Re-design NanoUI interface to be much more attractive.
  • -
  • Reduce NanoUI LOC count/resource size.
  • -
  • Reduce NanoUI tickrate; make UIs update properly.
  • -
  • Add chromeless NanoUI mode.
  • -
  • NanoUI's chromeless mode can be toggled with the 'Fancy NanoUI' preference.
  • -
  • Allow NanoUI to work on IE8-IE11, and Edge.
  • -
  • Close holes that allow NanoUI href spoofing.
  • -
- -

15 December 2015

-

Incoming5643 updated:

-
    -
  • The summon events... event "RPG loot" now allows for items to have bonuses of up to +15!
  • -
  • The "RPG loot" event now also improves the damage reduction of armor!
  • -
  • Check out the item mall for new item fortification scrolls!
  • -
-

as334 updated:

-
    -
  • New research has shown that when when plasma reaches a high enough temperature in the presence of a carbon catalyst, it undergoes a violent and powerful fusion reaction.
  • -
  • Adds a new gas reaction, fusion. Heat up plasma and carbon dioxide in order to produce large amounts of energy and heat.
  • -
-

oranges updated:

-
    -
  • hulk no longer stuns
  • -
  • John Cena
  • -
- -

13 December 2015

-

Kor updated:

-
    -
  • Adds reactive stealth armor. Admin spawn only.
  • -
- -

12 December 2015

-

Joan updated:

-
    -
  • The blob Split Consciousness ability now requires a node under the overmind's selector, instead of picking the oldest living node to spawn a core on.
  • -
  • Revenant antagonist preference can once again be toggled from the Game Preferences menu.
  • -
-

Kor updated:

-
    -
  • You now have a chance to flip while attacking with a dualsaber.
  • -
  • Bluespace survival capsules have been added to escape pod safes.
  • -
  • Standing between activating shield generators now has disastrous consequences.
  • -
-

Lo6a4evskiy updated:

-
    -
  • Ninja drains power properly, no more infinite stealth.
  • -
-

RemieRichards updated:

-
    -
  • Adds a Synth Species
  • -
  • Species can now react to being force set by admins, used for Synth species
  • -
- -

09 December 2015

-

GunHog updated:

-
    -
  • Nanotrasen has discovered new strains of Xenomorph which resist penetration by known injection devices, including syringes. This seems to only extend to the large 'Royal' strains, designed 'Queen' and 'Praetorian'. Extreme caution is advised should these specimens escape containment.
  • -
  • Ghosts may now use Diagnostic HUD.
  • -
  • Feedback added for which HUD is active.
  • -
-

Kor updated:

-
    -
  • Security barricades now block gunfire 80% of the time while deployed.
  • -
  • Standing adjacent to barricades will allow you to shoot over them.
  • -
-

MrStonedOne updated:

-
    -
  • noslip floors make you slightly faster
  • -
-

Shadowlight213 updated:

-
    -
  • Admins can now interact with mos of the station's machinery as if they were an AI when ghosting.
  • -
-

incoming5643 updated:

-
    -
  • a mutation of glowshrooms, glowcaps, have recently been discovered in botany.
  • -
-

ktccd updated:

-
    -
  • Blobs now require the correct amount of blobs to win that scales depending on number of blobs, instead of a set value of 700.
  • -
- -

08 December 2015

-

Joan updated:

-
    -
  • Revenants can no longer move through walls and windows while revealed, though they can move through tables, plastic flaps, mobs, and other similarly thin objects.
  • -
  • Defile now reveals for 4 seconds, from 8.
  • -
  • Overload lights now reveals for 10 seconds, from 8.
  • -
  • Blight now reveals for 6 seconds, from 8.
  • -
  • Blight has a higher chance of applying stamina damage to the infected.
  • -
-

Kor updated:

-
    -
  • The blocking system has been completely overhauled. Any held item, exosuit, or jumpsuit can now have a chance to block, or a custom on hit effect. Different shields can now have different block chances.
  • -
  • The clowns jumpsuit now honks when you beat the owner.
  • -
  • There is a new (admin only for now) suit of reactive armour that ignites attackers instead of warping you.
  • -
  • Shields will no longer block hugs. Give peace a chance.
  • -
-

neersighted updated:

-
    -
  • MC tab reworked, more items made available.
  • -
  • Admins can now click entries in the MC tab to debug.
  • -
- -

07 December 2015

-

octareenroon91 updated:

-
    -
  • Wallets now use the access of all IDs stored inside them.
  • -
  • As the accesses of all IDs are merged, two IDs in a wallet may grant access to a door that neither one alone would open.
  • -
  • Wallets used to be useless for access if the first ID card put into it was taken out, until another ID card was put back in. That should not happen anymore.
  • -
- -

06 December 2015

-

Gun Hog updated:

-
    -
  • Nanotrasen is proud to announce that it has improved its Diagnostic HUD firmware to include the station's automated robot population! New features include integrity tracking, Off/On status, and mode tracking! If your little robot friend suddenly manages to acquire free will, you will be able to track that as well!
  • -
  • Artificial Intelligence units may find that their bot management interface now shows when a robot gains free will. This is also displayed on the Personal Data Assistant's bot control interface.
  • -
-

neersighted updated:

-
    -
  • Cryo now properly checks it is on before healing...
  • -
- -

05 December 2015

-

Joan updated:

-
    -
  • Magic missiles no longer do damage.
  • -
- -

03 December 2015

-

Joan updated:

-
    -
  • Artificers now have feedback when healing other constructs, showing how much health the target has.
  • -
  • Constructs can move in space.
  • -
  • Fixes cult flooring not lining up with normal floors.
  • -
  • Fixes a juggernaut back spine not glowing where it should.
  • -
-

Spudboy updated:

-
    -
  • Realigned the librarian's PDA.
  • -
-

Swankcookie updated:

-
    -
  • Cakehat now creates light
  • -
-

YotaXP updated:

-
    -
  • Rolled out a new line of space heaters around the station. This new model has the functionality to cool down the environment, as well as heat it. Additionally, they can be built and upgraded like any other machine.
  • -
-

neersighted updated:

-
    -
  • Dominator now shows the correct area name on non-Box maps.
  • -
  • Unwrenching atmos pipes is less... nuts...
  • -
  • You don't get hopelessly spun when standing on a unwrenched pipe... Don't try it, though.
  • -
  • You can now cancel pulling by Ctrl+Clicking anything else
  • -
  • Chemistry Dispensers now have a built-in drain!
  • -
- -

02 December 2015

-

GunHog updated:

-
    -
  • Nanotrasen has discovered a flaw in the weapon recharging station's design that makes it incompatible with the Rapid Part Exchange Device. This has been corrected.
  • -
-

neersighted updated:

-
    -
  • You can now stop pulling by trying to pull the same object again.
  • -
  • Nanotrasen is proud to announce that even the dead can use our state of the art NanoUI technology.
  • -
- -

01 December 2015

-

Kor updated:

-
    -
  • The away mission Listening Post, originally mapped by Petethegoat, has removed as a mission. It is now present in normal deep space.
  • -
-

neersighted updated:

-
    -
  • Attack animations are now directional!
  • -
  • Nanotrasen brand Airlock Electronics now sport our latest NanoUI interface! Upgrade your electronics today!
  • -
  • Cryo now knocks you out.
  • -
  • Resisting out of cryo has a delay.
  • -
  • Cryo auto-ejection can now be configured.
  • -
  • Remove Cryo eject verb (resist out).
  • -
  • Cryo works... Love, neersighted
  • -
-

swankcookie updated:

-
    -
  • Switches cloak usage to overclothing slot
  • -
- -

30 November 2015

-

neersighted updated:

-
    -
  • Nanotrasen would like to apologize for Chemistry being stuck on NanoUI 1.0... Please report any further bugs to Nanotrasen Support.
  • -
  • NanoUI becomes... difficult to operate with brain damage. Who would have guessed?
  • -
  • Telekinesis enables you to use NanoUI at a distance.
  • -
  • Canisters require physical proximity to actuate...
  • -
  • NanoUI no longer leaks memory on click.
  • -
- -

29 November 2015

-

Firecage updated:

-
    -
  • Hand tools now have variable operating speeds.
  • -
-

GunHog updated:

-
    -
  • Nanotrasen has improved the interface for the hand-held teleportation device. It will now provide the user with the name of the destination tracking beacon.
  • -
-

JJRcop updated:

-
    -
  • Fixes changeling Hive Absorb DNA ability runtime.
  • -
-

Joan updated:

-
    -
  • When sacrificing a target with the sacrifice rune, Nar-Sie herself will briefly appear to consume them.
  • -
  • When an artificer repairs a construct, there is a visible beam between it and the target.
  • -
  • When reviving a target with the raise dead rune, there is a visible beam between the two corpses used.
  • -
  • When draining a target with the blood drain rune, there is a visible beam between you and the rune.
  • -
  • Construct sprites are now consistent and all bob in the air.
  • -
  • Most cult messages now use the cult span classes, though visible messages from cult things generally do not.
  • -
  • Examining a cultist talisman as a cultist no longer causes the paper popup to appear.
  • -
  • You no longer need to press two buttons to read a cultist tome.
  • -
  • Cult should have a few less typos and grammatical errors.
  • -
  • The sacrifice rune now uses the proper invocation.
  • -
-

KorPhaeron updated:

-
    -
  • Guardians and holoparasites can now be manually recalled by their master.
  • -
  • The ghost controlling a guardian or holoparasite can be repicked by their master, only one use which is removed when a new ghost is chosen.
  • -
-

MrStonedOne updated:

-
    -
  • Re-adds 100% chance timed injectors, as it was removed over a misunderstanding.
  • -
  • Fixes bug with injectors having a 100% power chance despite not being timed
  • -
  • Fixes the excessive amount of time it took the game to initialize.
  • -
  • Fixes some interface bugs.
  • -
  • when an interface window has to send a lot of resources before it can open, it will now tell you with a "sending resources" line so you know why it's not opening right away.
  • -
-

PKPenguin321 updated:

-
    -
  • Teleprods can now be constructed. Make them via tablecrafting, or by putting a bluespace crystal onto a stunprod. They warp the target to a random nearby area (which may include space/the inside of a wall) in addition to giving the victim a brief stun. Like stunprods, they require a power cell to function.
  • -
  • Teleprods can have their crystal removed and be made back into stunprods by using them in your hand when they have no cell installed.
  • -
  • Mounted chainsaws now have a unique inhand sprite.
  • -
-

Remie + Kor updated:

-
    -
  • Holopads now use AltClick to request the AI
  • -
-

Shadowlight213 updated:

-
    -
  • Syndie melee mobs have been buffed.
  • -
-

TheNightingale updated:

-
    -
  • Nuclear operatives can now buy the Elite Syndicate Hardsuit for 8 TC that has better armor and fireproofing.
  • -
  • Added throwing stars and Syndicate playing cards to nuclear operative's uplink.
  • -
-

Yolopanther12 updated:

-
    -
  • Added the ability to use a box of lights on a light replacer to more quickly refill it to capacity.
  • -
-

incoming5643 updated:

-
    -
  • OOC will now take steps to try and prevent accidental IC from people who mistakenly use OOC instead of say. This doesn't catch all mistakes, so please don't test it.
  • -
-

ktccd updated:

-
    -
  • Blob pieces on some areas no longer count for blob mode victory (Such as space or asteroid).
  • -
  • Blobcode no longer spawns and destroys blobs uselessly, which fixes other stuff too.
  • -
  • Asteroid areas are no longer valid gang territory.
  • -
-

neersighted updated:

-
    -
  • Nanotrasen would like to announce NanoUI 2.0, now being rolled out across all our stations. Existing NanoUI devices have been updated, and more will be added soon. Please report any bugs to Nanotrasen Support.
  • -
  • Many NanoUI interfaces have had +/- buttons replaced with input fields.
  • -
  • Some NanoUI interfaces have had more information added.
  • -
  • Drones can now interact with NanoUI windows.
  • -
-

swankcookie updated:

-
    -
  • Fixes issue of space-Christians forgetting about the true, humbling values of space-Christmas.
  • -
  • Adds snowmen outfits
  • -
- -

28 November 2015

-

TechnoAlchemisto updated:

-
    -
  • Cloaks are now worn in your exosuit slot!
  • -
- -

27 November 2015

-

AnturK updated:

-
    -
  • Turret control panels can now be made through frames available at autolathe.
  • -
  • Unlocked turrets can be linked with built controls with multiool
  • -
-

JJRcop updated:

-
    -
  • Restores golem shock immunity.
  • -
-

Kor and Ausops updated:

-
    -
  • Added four different suits of medieval plate armour.
  • -
  • The Chaplain starts with a suit of Templar armour in his locker. God wills it!
  • -
  • Rumour has it that Nanotrasen is now training a new elite unit of soldiers to deal with paranormal threats. Corporate was unable to be reached for comment.
  • -
-

MMMiracles updated:

-
    -
  • Adds a brand new away mission for the gateway called 'Caves'.
  • -
  • The away mission has multiple levels to explore and could be quite dangerous, running in without proper preparation is unadvised.
  • -
-

YotaXP updated:

-
    -
  • Drones can now use the pick-up verb, and watertanks no longer get jammed in their internal storage.
  • -
-

bgobandit updated:

-
    -
  • Due to changes in Nanotrasen's mining supply chain, ore redemption machines now offer a variety of upgraded items! However, certain items are more expensive. Point values for minerals have been adjusted to reflect their scarcity.
  • -
  • Nanotrasen R&D has discovered how to improve upon the resonator and kinetic accelerator.
  • -
  • After a colossal tectonic event on Nanotrasen's asteroid, ores are distributed more randomly.
  • -
  • Bluespace crystals have been discovered to be ore. They will now fit into satchels and ore boxes.
  • -
  • Mech advanced mining scanners now include meson functionality.
  • -
-

neersighted updated:

-
    -
  • Wooden Barricades now take bullet damage.
  • -
  • Rebalance Wooden Barricade damage.
  • -
- -

26 November 2015

-

neersighted updated:

-
    -
  • Cyborg Toner is now refilled by recharging stations.
  • -
-

oranges updated:

-
    -
  • Removed the 'gloves' from the sailor dress which looked weird since it was a blouse basically
  • -
  • Made the skirt on the blue/red skirts less blocky,
  • -
  • Made the striped dress consistent at every direction
  • -
- -

25 November 2015

-

Incoming5643 updated:

-
    -
  • A number of popular stunning spells have undergone balance changes. Note that for the most part the stuns themselves are untouched.
  • -
  • Lightning Bolt Changes:
  • -
  • You can no longer throw the bolt whenever you want, it will fire itself once it's done charging.
  • -
  • Getting hit by a bolt will do a flat 30 burn now, as opposed to scaling with how long the wizard spent charging the spell. Unless said wizard made a habit of charging lightning bolt to near maximum every time this is a buff to damage.
  • -
  • Every time the bolt jumps the next shock will do five less burn damage.
  • -
  • Lightning bolts can still jump back to the same body, so the maximum number of bolts you can be hit by in a single casting is three, and the maximum amount of damage you could take for that is 60 burn.
  • -
  • Magic Missile Changes:
  • -
  • Cooldown raised to 20 seconds, up from 15
  • -
  • Cooldown reduction from taking the spell multiple times raised from 1.5 seconds to 3.5 seconds. Rank 5 magic missile now has a cooldown of 6 seconds, down from 9, and is effectively a permastun.
  • -
  • Time Stop Changes:
  • -
  • Time Stop field now persists for 10 seconds, up from 9
  • -
  • Cooldown raised to 50 seconds, up from 40
  • -
  • Cooldown reduction from taking the spell multiple times raised from 7.75 seconds to 10 seconds. Rank 5 time stop now has a cooldown of 10 seconds, up from 9, and is effectively a permastun.
  • -
-

Kor updated:

-
    -
  • Escape pods can now be launched to the asteroid during red and delta level security alerts. Pods launched in this manner will not travel to Centcomm at the end of the round.
  • -
  • Each pod is now equipped with a safe that contains two emergency space suits and mining pickaxes. This safe will only open during red or delta level security alerts.
  • -
-

MrStonedOne updated:

-
    -
  • fixes interfaces (like the "ready" button) being unresponsive for the first minute or two after connecting.
  • -
  • Burn related code has been changed
  • -
  • This will give a small buff to fires by making them burn for longer
  • -
  • This will give a massive nerf to plasma related bombs
  • -
  • I am actively seeking feedback, if the nerf to bombs is too bad we can still tweak stuff
  • -
-

PKPenguin321 updated:

-
    -
  • Chainsaws (both arm-mounted and not arm-mounted) can now be used in surgeries as a ghetto sawing tool. Arm-mounted chainsaws are a teeny bit more precise than regular ol' everyday chainsaws.
  • -
-

YotaXP updated:

-
    -
  • Spruced up the preview icons on the Character Setup dialog.
  • -
-

incoming5643 updated:

-
    -
  • Citing shenanigan quality concerns the wizard federation has withdrawn supermatter swords and veil renderers from spellbooks.
  • -
-

neersighted updated:

-
    -
  • Make Airlock Electronics use standard ID checks, allowing Drones to use them.
  • -
- -

24 November 2015

-

Kor updated:

-
    -
  • Added a lava turf. Expect to see it in away missions or in admin 'events'
  • -
- -

23 November 2015

-

octareenroon91 updated:

-
    -
  • Spilling oxygen or nitrogen will obtain a release of the corresponding atmospheric gas in the effected tile.
  • -
  • Carbon Dioxide has been added as a reagent. Recipe: 2:1 carbon:oxygen, heated to 777K.
  • -
  • Spilling CO2 will produce CO2 gas.
  • -
- -

21 November 2015

-

Joan updated:

-
    -
  • Blobs now have a hud, with jump to node, create storage blob, create resource blob, create node blob, create factory blob, readapt chemical, relocate core, and jump to core buttons.
  • -
  • Manual blob expansion is now triggered by clicking anything next to a blob tile, instead of by ctrl-click.
  • -
  • Rally Spores no longer has a cost. Reminder: You can middle-click anything you can see to rally spores to it.
  • -
  • Creating a Shield Blob with hotkeys is now ctrl-click instead of alt-click.
  • -
  • Removing a blob now refunds some points based on the blob type, usually around 40% of initial cost. Hotkey for removal is alt-click.
  • -
  • Blobs now have the *Blob Help* verb which will pull up useful information, including what your reagent does.
  • -
  • Storage Blobs now cost 20, from 40. Storage Blobs also cannot be removed by blob removal.
  • -
  • Readapt Chemical now costs 40, from 50.
  • -
-

octareenroon91 updated:

-
    -
  • Add numbers and a star graffiti to crayon/spraycan designs.
  • -
- -

20 November 2015

-

AnturK updated:

-
    -
  • Staff of Doors now creates random types of doors.
  • -
-

Incoming5643 updated:

-
    -
  • Setting your species to something other than human (if available) once again saves properly. Note that if you join a round where your species setting is no longer valid it will be reset to human.
  • -
-

PKPenguin321 updated:

-
    -
  • Healing Fountains in Hand of God now give cultists a better and more culty healing chemical instead of Doctor's Delight.
  • -
-

kingofkosmos updated:

-
    -
  • Added the ability to upgrade your grab by clicking the grabbed mob repeatedly.
  • -
-

octareenroon91 updated:

-
    -
  • Add the four-color pen, which writes in black, red, green, and blue.
  • -
  • Adds two such pens to the Bureaucracy supply pack.
  • -
- -

19 November 2015

-

Joan updated:

-
    -
  • Constructs have action buttons for their spells.
  • -
  • The Juggernaut forcewall now has a new, more cult-appropriate sprite.
  • -
  • Cult floors and walls now have a glow effect when being created.
  • -
  • Nar-Sie and Artificers will properly produce cult flooring.
  • -
  • Nar-Sie is a she.
  • -
- -

18 November 2015

-

oranges updated:

-
    -
  • Nanotrasen apologies for a recent bad batch of synthflesh that was shipped to the station, any rumours of death or serious injury are false and should be reported to your nearest political officer. At most, only light burns would result.
  • -
-

phil235 updated:

-
    -
  • Remotely detonating a planted c4 with a signaler now works again.
  • -
- -

17 November 2015

-

Xhuis updated:

-
    -
  • Many medicines have received rebalancing. Expect underused chemicals like Oxandralone to be much more effective in restoring damage.
  • -
  • Many toxins are now more or less efficient.
  • -
  • The descriptions of many reagents have been made more accurate.
  • -
  • New poison: Heparin. Made from Formaldehyde, Sodium, Chlorine, and Lithium. Functions as an anticoagulant, inducing uncontrollable bleeding and small amounts of bruising.
  • -
  • New poison: Teslium. Made from Plasma, Silver, and Black Powder, heated to 400K. Modifies examine text and induces periodic shocks in the victim as well as making all shocks against them more damaging.
  • -
  • Two Chemistry books have been placed in the lab. When used, they will link to the wiki page for chemistry in the same vein as other wiki books.
  • -
- -

16 November 2015

-

Gun Hog updated:

-
    -
  • The Combat tech requirement for Loyalty Firing Pins has been reduced from 6 to 5.
  • -
-

Joan updated:

-
    -
  • Plasmamen can now man the bar.
  • -
  • Defile no longer directly affects mobs. Instead, it rips up floors and opens most machines and lockers.
  • -
  • Blight added. Blight infects humans with a virus that does a set amount of damage over time and is relatively easily cured. Blight also badly affects nonhuman mobs and other living things.
  • -
  • While the cure to Blight is simple, it's not in this changelog. Use a medical analyzer to find the cure.
  • -
  • Tweaked costs and stuntimes of abilities;
  • -
  • Defile now costs 30 essence and stuns for about a second.
  • -
  • Overload Lights now costs 40 essence.
  • -
  • Malfunction now costs 45 essence.
  • -
  • Blight costs 50 essence and 200 essence to unlock.
  • -
  • Transmit has a new, spookier icon.
  • -
  • Revenant abilities can be given to non-revenants, and will work as normal spells instead of runtiming.
  • -
-

bgobandit updated:

-
    -
  • Blood packs can now be labeled with a pen.
  • -
- -

15 November 2015

-

CosmicScientist updated:

-
    -
  • Hopefully made the dehydrated carp's uplink description 100% clear.
  • -
  • Made the dehydrated carp cost 1 TC (instead of 3) to help with your traitor gear combos.
  • -
-

Incoming5643 updated:

-
    -
  • The supermatter sword was being far too kind in the hands of men. They should now have the desired effect when swung at people.
  • -
-

Joan updated:

-
    -
  • Anomalies move more often, are resistant to explosions and will only be destroyed if they are in devastation range. You shouldn't bomb them, though.
  • -
  • Hyper-energetic flux anomaly will shock mobs that run into it, or if it runs into them.
  • -
  • Bluespace anomaly will occasionally teleport mobs away from it in a small radius.
  • -
  • Vortex anomalies will sometimes throw objects at nearby living mobs.
  • -
  • Pyroclastic anomalies will produce bigger, hotter fires, and if not disabled, it will release an additional burst of flame. In addition, the resulting slime will be rabid and thus attack much more aggressively.
  • -
  • Gravitational anomalies will now properly throw objects at nearby living things.
  • -
-

MrStonedOne updated:

-
    -
  • Away mission loading will no longer improperly expand the width of the game world to two times the size of the away mission map.
  • -
  • This should also improve the speed of loading away missions, since the game doesn't have to resize the world
  • -
-

RemieRichards updated:

-
    -
  • Deities now start off with the ability to place 1 free turret
  • -
  • HoG Claymores now do 30 Brute (Down from 40) but now have 15 Armour Penetration (Up from 0)
  • -
  • Killing the other god objective is fixed
  • -
  • Turrets will no longer attack handcuffed people
  • -
  • Followers are now informed of their god's death
  • -
  • Followers are now informed of the location of their god's nexus when it is placed
  • -
  • Gods can no longer place structures near the enemy god's nexus
  • -
- -

13 November 2015

-

as334 updated:

-
    -
  • Nanotrasen has hired a brand new supply of ~~expendable labor~~ *LOYAL CREW MEMBERS* please welcome them with open arms.
  • -
  • Plasmamen are now a playable race. They require plasma gas to survive and will ignite in oxygen environments.
  • -
- -

12 November 2015

-

Dunc updated:

-
    -
  • DNA injectors have been restored to their original permanent RNG state from the impermanent guaranteed state.
  • -
-

Xhuis updated:

-
    -
  • Reagents can no longer be determined by examining a reagent container without the proper apparatus. Silicons and ghosts can always see reagents.
  • -
  • Science goggles now allow reagents to be seen on examine. In addition, chemists now start wearing them. The bartender has a pair that looks and functions like sunglasses.
  • -
- -

11 November 2015

-

AnturK updated:

-
    -
  • DNA Injectors now grant temporary powers on every use. Duration dependent on activated powers and machine upgrades
  • -
  • Delayed Transfer added to DNA Scanner - It will activate on the next closing of scanner door
  • -
  • UI+UE injectors/buffer transfers added for convinience
  • -
  • Injector creation timeout cut in half
  • -
-

Firecage updated:

-
    -
  • NanoTrasen specialists has developed a new type of operating table. You can now make one yourself with only some rods and a sheet of silver!
  • -
-

Kor updated:

-
    -
  • Adds immovable and indestructible reflector structures for badmin use.
  • -
  • The Mjolnir has been added to the wizards spellbook.
  • -
  • The Singularity Hammer has been added to the wizards spellbook.
  • -
  • The Supermatter Sword has been added to the wizards spellbook.
  • -
  • The Veil Render has been added to the wizards spellbook.
  • -
  • Trigger Multiverse War (give the entire crew multiswords) has been added to the wizards spellbook, at a cost of 8 points.
  • -
  • Converting (to cultist, rev, or gangster) a jobbaned player will now automatically offer control of their character to ghosts.
  • -
  • Emergency Response Teams and Deathsquads no longer accept non-human members if the server is configured to bar mutants from being heads of staff.
  • -
-

LordPidey updated:

-
    -
  • Nanotransen doctors have re-approved Saline-Glucose Solution for usage in IV drips, when blood supplies are low. Simple pills will not suffice.
  • -
-

MMMiracles updated:

-
    -
  • Water slips have been nerfed to a more reasonable duration. It is still a guaranteed way to disarm an opponent and obtain their weapon, but you can no longer manage to cuff/choke everyone who manages to slip without a problem.
  • -
-

MrStonedOne updated:

-
    -
  • Fixes the smartfridge not stacking items.
  • -
-

Xhuis updated:

-
    -
  • The emergency shuttle now plays unique sounds (thanks to Cuboos for creating them) when launching from the station and arriving at Central Command.
  • -
-

torger597 updated:

-
    -
  • Added a syringe to boxed poison kits.
  • -
- -

08 November 2015

-

Cuboos updated:

-
    -
  • Added a new and better sounding flashbang sound and a ringing sound for flashbang deaf effect
  • -
-

JJRcop updated:

-
    -
  • Chronosuits have had their movement revised, they now take time to teleport depending on how far you've traveled, and don't teleport automatically anymore unless you stop moving for a short moment, or press the new ' Teleport Now' button.
  • -
  • Added new outfit that allows admins to dress people up in the chrono equipment easier.
  • -
-

Jalleo updated:

-
    -
  • Due to a recently discovered report it turns out The Wizard Federation has devised a way for CEOs to stop having some teas from their Smartfridges due to this change all smartfridges will temporarily be unable to stack contents.
  • -
-

Joan updated:

-
    -
  • Revenant draining now takes about 5 seconds to complete and can be interrupted by dragging the target away.
  • -
  • Revenants can now tell if they are currently visible.
  • -
  • Revenant ability costs tweaked; Defile now costs 40 essence to cast, Overload Lights now costs 45 essence to cast, and Malfunction now costs 50 essence to cast.
  • -
  • Malfunction now affects non-machine objects, even if they're not being held by a human.
  • -
  • Defile does an extremely low amount of toxin damage to humans and confuses, but does much less stamina damage and stuns the revenant for slightly longer.
  • -
  • Overload Lights will no longer shock if the light is broken after a light is chosen to shock an area.
  • -
-

Kor updated:

-
    -
  • Using water on a dark blue slime extract will now yield a new potion capable of completely fireproofing clothing items.
  • -
  • You can once again click+drag mobs into disposal units. Xenobiologists rejoice.
  • -
-

Xhuis updated:

-
    -
  • Shadowling abilities now require the user to be human.
  • -
  • Enthralling now takes 21 seconds (down from 30).
  • -
  • Regenerate Chitin has been renamed to Rapid Re-Hatch.
  • -
  • Dethralling surgery's final step now requires a flash, penlight, or flashlight.
  • -
  • Dethralling surgery now produces a black tumor, which has a high biological tech origin but dies quickly in the light.
  • -
  • Shadowlings no longer have Enthrall before hatching.
  • -
  • Shadowling clothing now has icons to better reflect its existence.
  • -
  • Ascendant Broadcast has been removed.
  • -
  • Destroy Engines is now removed from the user after it is used once.
  • -
- -

05 November 2015

-

AnturK updated:

-
    -
  • Added wild shapeshift spell for wizards.
  • -
- -

01 November 2015

-

Gun Hog updated:

-
    -
  • Nanotrasen listens! After numerous complaints and petitions from Security personnel regarding energy weapon upkeep, we have authorized the construction and maintenance of your station's weapon rechargers. As an added bonus, we have also provided a more modular design for the devices, allowing for greater recharge rates if fitted with a more efficient capacitor!
  • -
  • Added Diagnostic HUDs! They can be used to view the health and cell status of borgs and mechs. Silicons have them built in, Roboticists get two in their locker, and the RD's hardsuit has one built in.
  • -
-

Incoming5643 updated:

-
    -
  • The number of roundstart head revolutionaries nows depends on the roundstart security force as well as the roundstart heads
  • -
  • The maximum number of head revs is 3, the minimum is 1. If there is fewer than three station heads there will never be more than that number of head revs at roundstart. For every three vacant security roles (Head of Security/Warden/Security Officer/Detective) at roundstart the number of starting head revs will be reduced by 1.
  • -
  • Head revolutionaries can be gained during play if the security/head roles are filled. They are drawn from existing revolutionaries.
  • -
  • Added dental implant surgery. While targeting the mouth drill a hole in a tooth then stick a pill in there for hands free later use.
  • -
-

Kor updated:

-
    -
  • Added an experimental control console for Xenobiology. Ask the admins if you'd like to try it out. It may not work on maps other than Box if they have renamed the Xenobiology Lab.
  • -
  • Injecting blood into a cerulean slime will yield a special one use set of blueprints that will allow you to expand the territory your camera can cover.
  • -
-

Kor and Remie updated:

-
    -
  • Added as series of laser reflector structures, the frame of which can be built with 5 metal sheets.
  • -
  • Completing the frame with 5 glass sheets creates a mirror that will reflect lasers at a 90 degree angle.
  • -
  • Completing the frame with 10 reinforced glass sheets creates a double sided mirror that reflects lasers at a 90 degree angle.
  • -
  • Completing the frame with a single diamond sheet creates a box that will redirect all lasers that hit it from any angle in a single direction.
  • -
-

MMMiracles updated:

-
    -
  • Energy Swords can now embed when thrown for a 75% chance. Embedding
  • -
- -

30 October 2015

-

Incoming5643 updated:

-
    -
  • Slimepeople can now split if they contain 200 units of slime jelly, and slimepeople will now slowly generate slime jelly up to 200 units provided they are very well fed. Split slimepeople are NOT player controlled, but rather the original slime person can swap between the two mobs at will. If one of the slimepeople should die under player control, the player won't be able to swap back to their living body. Splitting only creates a new body, any items you have on you are not duplicated.
  • -
  • Slimepeople now take half damage from sources of heat, but double damage from sources of cold. Lasers good, Space bad.
  • -
- -

29 October 2015

-

Kor updated:

-
    -
  • Slightly changed what items spawn on the captain vs in his locker, hopefully saving some annoying inventory shuffle at roundstart.
  • -
- -

28 October 2015

-

Tkdrg updated:

-
    -
  • Added a Ghost On-screen HUD. It can be toggled using the "Toggle Ghost HUD" verb. Thank you Razharas for the sprites!
  • -
  • Ghosts can now use the "Toggle med/sec HUD" verb to see the basic secHUD (jobs only) or the medHUD of humans.
  • -
  • Ghost will now get clickable icon alerts from events such as being put in a cloner, drones being created, Nar-sie being summoned, among others. The older chat messages were kept. These alerts can not be toggled.
  • -
- -

27 October 2015

-

Joan updated:

-
    -
  • You can now click on things under timestop effects, instead of clicking the effect and looking like a fool.
  • -
-

Kor updated:

-
    -
  • Added a zombie mob that turns its kills into more zombies. Currently adminspawn and xenobio only.
  • -
  • Using water with a red slime extract will now yield a speed potion. Using the speed potion on an item of clothing will paint it red and remove its slowdown.
  • -
-

MrStonedOne updated:

-
    -
  • You may now access the setup character screen when not in the lobby via the game preferences verb in the preferences tab
  • -
  • The round end restart delay can now be configured by server operators. New servers will default to 90 seconds while old servers will default to the old 25 seconds until they import the config option to their server.
  • -
- -

26 October 2015

-

Fox P McCloud updated:

-
    -
  • Standardizes the slowdown of most spacesuits to 1 as opposed to 2.
  • -
-

Incoming5643 updated:

-
    -
  • 48x48 pixel mode (x1.5 zoom) has been added to the Icons menu (top left). While playing in 32x32 or 64x64 will still provide a clearer looking station, for those of us with resolutions that fall into the gap between the two zooms this can provide a more consistant looking station than stretch to fit.
  • -
  • 96x96 pixel mode (x3 zoom) has also been added for our players who enjoy looking at spacemen on their 4k monitors at a crisp and consistent scale.
  • -
  • The lich spell has been subjected to some gentle nerfing. When you die a string of energy will tie your new body to your old body for a short time, aiding others in determining your location. The duration of this beam scales with the number of deaths you've avoided.
  • -
  • Additionally the post revival stun now also scales in this way.
  • -
  • The spell will also fail if the item and the wizard don't share the same z level, though the nature of space means the odds of the item (or the wizard) looping around back to the station is pretty high.
  • -
  • The spell is still really good.
  • -
- -

25 October 2015

-

Incoming5643 updated:

-
    -
  • The spell Charge has been added to the spellbook. It can be used to extend the life of magic and energy weapons and even reset the cooldowns of held wizards! It cannot reset your own cooldowns.
  • -
  • The Staff of Healing has been added to the spellbook. Heals all damage and raises the dead! Can't be used on yourself however.
  • -
  • The exploit that allowed you to use the staff of healing on yourself by suicide has been fixed.
  • -
-

Jordie0608 updated:

-
    -
  • You can now selectively mute non-admin players from OOC with the Ignore verb in the OOC tab.
  • -
-

Tkdrg updated:

-
    -
  • Added chainsaws. They can be tablecrafted using a circular saw, a plasteel sheet, some cable coil, and a welding tool. Don't forget to turn it on!
  • -
- -

24 October 2015

-

Kor updated:

-
    -
  • The friendly gold slime reaction now spawns three mobs.
  • -
-

phil235 updated:

-
    -
  • Changed the effects of alcohol to be more realistic. The effects of alcohol now appear twice as fast. Drunkenness now scales with how much alcohol is in you, not how long you've been drinking. This means drinking very little but continuously no longer makes you very drunk, or confused/slurring for a long time or give you alcohol poisoning. The dizziness and slurring effects now properly scale with how drunk you are (and dizziness is generally more pronounced).
  • -
- -

23 October 2015

-

Incoming5643 updated:

-
    -
  • Syndicate bomb payloads will now detonate if set on fire long enough. Note that the casings for the bombs is fireproof, so if you want to set fire to a bombcore you'll need to remove it from the case first (cut all wires, then crowbar it out). A reassurance from our explosives department: it is, and always has been, impossible to detonate a syndicate bomb that isn't ticking with wirecutters alone.
  • -
-

Xhuis updated:

-
    -
  • Geiger counters have been added and are obtainable from autolathes and EngiVends. They will measure the severity of radiation pulses while in your pockets, belt, or hands. One can scan a mob's radiation level by switching to Help intent and clicking on it. These counters never really discard the radiation they store, and rumor has it this can be used in nefarious ways...
  • -
  • When a mob is impacted by radiation, the radiation is now relayed to all items on the mob.
  • -
- -

19 October 2015

-

AnturK updated:

-
    -
  • Handheld T-Ray Scanners now detect critters in pipes.
  • -
-

Kor updated:

-
    -
  • Weapons and projectiles that are armour piercing now have an increased chance to bypass riot shields.
  • -
  • Slipping on lube now deals slightly more damage, but is concentrated on a random body part, rather than spread to your entire body.
  • -
  • Slipping on water no longer deals damage
  • -
  • You can now attach grenades and C4 to spears to create explosive lances. This is done via table crafting. Alt+click the spear to set a war cry.
  • -
-

Shadowlight213 updated:

-
    -
  • In response to reports of stranded drones, Nanotrasen has added magnets to drone legs. They are no longer affected by lack of gravity or spacewind!
  • -
  • Drones can now set Airlock access on RCDs.
  • -
-

bgobandit updated:

-
    -
  • Nanotrasen loves recycling! In the highly unlikely occasion that your space station accumulates gibs, scoop 'em up and bring them to chemistry to recycle into soap, candles, or even delicious meat product!
  • -
  • L3 biohazard closets now contain bio-bag satchels for the safe collection of biowaste products, such as slime extracts.
  • -
-

phil235 updated:

-
    -
  • Removing Smile, Swedish, Chav and Elvis mutations from genetics. These mutation can still be acquired via adminspawned dna injector.
  • -
  • Added a dna injector for laser eyes mutation for admin use.
  • -
  • Fixes winter coat hood sprite appearing as a bucket.
  • -
  • Fixes using razor on non human shaving non existent hair.
  • -
  • Fixes chair deconstruction dropping too much metal.
  • -
  • Fixes snapcorn not giving seeds.
  • -
  • Fixes portable chem dispenser.
  • -
  • Changing the transfer amount of all reagent containers (beaker, bucket, glass) is now done by clicking them, similar to spray. Reagent dispensers (watertank, fueltank, pepperspray dispenser) no longer have their own transfer amounts and use the reagent container's transfer amount instead (except for sprays which get 50u for faster refilling).
  • -
- -

16 October 2015

-

MrStonedOne updated:

-
    -
  • Added a reconnect option to the file menu. This will allow you to reconnect to the game server without closing and re-opening the game window. This should also prevent another byond ad from playing during reconnections.
  • -
-

Xhuis updated:

-
    -
  • A gamebreaking bug has been fixed with buckets. You can now wear them on your head.
  • -
-

bgobandit updated:

-
    -
  • The Grape Growers Consortium has complained that Nanotrasen kitchens do not use their products enough. HQ has come up with a few recipes to pacify them. Goddamn winos.
  • -
- -

13 October 2015

-

AnturK updated:

-
    -
  • Display cases can now be built using 5 wood planks and 10 glass sheets.
  • -
  • Add airlock electronics to open it with id later, otherwise you'll have to use crowbar
  • -
  • Broken display cases can be fixed with glass sheets or removed using crowbar
  • -
  • Added start_showpiece_type variable for mappers to create custom displays
  • -
  • Syndicate Lone Operatives spotted near the nanotrasen stations! Keep the disk safe!
  • -
  • Admin spawned nuclear operatives will now have access to nukeop equipment
  • -
-

Gun Hog updated:

-
    -
  • Nanotrasen's research team has released a new, high tech design for Science Goggles, which previously did nothing! They new come fitted with a portable scanning module which will display the potential research data gained from experimenting with an object. Nanotrasen has also released drivers which shall enable the prototype hardsuit's built in scan visor.
  • -
  • Supporting this new design, Nanotrasen has seen fit to provide blueprints for Science Goggles to the station's protolathe.
  • -
-

Kor updated:

-
    -
  • Gang implanters now only break implants/deconvert gangsters, meaning you will have to use a pen to convert them afterwards.
  • -
  • An important function, accessible via alt+click, has been restored to the detectives hat.
  • -
  • When Nar-Sie is created, they now use the old sound effect.
  • -
-

Steelpoint updated:

-
    -
  • The Chief Medical Officers 'Medical Hardsuit' has been added to the CMO's office. Boasts the usage of lightweight materials allowing fast movement while wearing the suit as well as complete biological protection to airborne and similar pathogens.
  • -
  • The Head of Security's personal 'HoS Hardsuit' has been added to the HoS's office. This Hardsuit is slightly more armored than the regular Security Hardsuit.
  • -
  • The Research Directors 'Prototype Hardsuit' has been added to the RD's office. This Hardsuit offers the highest levels of protection against explosive, as well as biological, attacks, as well as fireproofing.
  • -
  • The Command EVA space suits, due to budget concerns, have been removed and reloacted to another space station.
  • -
-

Xhuis updated:

-
    -
  • All instances of autorifles have been removed from Security.
  • -
  • The armory has been re-mapped.
  • -
  • The spell book has received a rebalancing! There are now ten uses by default, but most spells cost two uses. Some underused spells, like Blind, Smoke, and Forcewall, only cost a single use.
  • -
  • After searching through the Sleeping Carp's ancient monastery in deep space, more secrets have been uncovered of their traditional fighting techniques.
  • -
  • Members of the Sleeping Carp gang are now able to deflect all ranged projectiles.
  • -
  • Members of the Sleeping Carp gang are now uanble to use any type of ranged weaponry. Doing so would be dishonorable.
  • -
  • The Sleeping Carp martial art's effects are more damaging, and many stuns have been increased in duration.
  • -
-

phil235 updated:

-
    -
  • Fixes critical bug causing multiple hits from single projectile.
  • -
  • Fixes not being able to shoot a mob on same tile as the shooter.
  • -
  • Clicking your mob (without targeting your mouth) no longer causes you to shoot yourself.
  • -
  • Fixes not being able to shoot non human mobs at point blank.
  • -
  • Morphs no longer automatically drop the things they swallowed, you have to butcher their corpse to retrieve their contents.
  • -
  • butchering a corpse no longer also attacks it.
  • -
  • Dipping cigarette (to asbsorb liquids) in a glass can now only be done with an unlit cigarette. Lit cigarette now heats up the glass content (like other heat sources).
  • -
  • Fixes trashbag not being able to pickup drinks and ammo casings.
  • -
  • Slimes now attaches themselves to mobs via buckling.
  • -
- -

07 October 2015

-

Kor updated:

-
    -
  • The alien queen can now perform a tail sweep attack, throwing back and stunning all nearby foes.
  • -
- -

06 October 2015

-

Gun Hog, for WJohnston updated:

-
    -
  • Add new Xenomorph caste: The Praetorian. Drones may become this on their way to growing into a full queen, and a queen may promote one if there is not one already.
  • -
  • Xenomorph queens are now GIGANTIC, along with the new Praetorian. Together, they are considered royals.
  • -
  • Queens are now significantly tougher to make up for their huge size.
  • -
  • All forms of dead xenomorph may now be grabbed and placed on a surgery table for organ harvesting!
  • -
-

Xhuis updated:

-
    -
  • Maintenance drones now have a more descriptive message when examined.
  • -
  • A recent Nanotrasen firmware update to drones has increased vulnerability to foreign influences. Please periodically check drones for abnormal behavior or status LED malfunction. Note, however, that cryptographic sequencers will not incur this behavior.
  • -
  • In response to complaints about rogue drones, Nanotrasen engineers have allowed factory resets on all drones by simply using a wrench.
  • -
  • Central Command reminds drones to immediately retreat, if possible, when a law override is begun. Not doing so may anger the gods and incur their wrath!
  • -
  • Some virus symptoms that had no messages now have them.
  • -
  • New virology symptom: Weakness. This will cause stamina damage and fainting spells.
  • -
  • Many virus symptom messages have been changed to be more threatening.
  • -
- -

04 October 2015

-

Fox P McCloud updated:

-
    -
  • Adds a bar of soap to the janitor's locker.
  • -
  • Re-adds the advanced mop as a researchable R&D item.
  • -
  • Adds a bluespace trashbag as a researchable R&D item; can hold large quantities of garbage.
  • -
-

Jordie0608 updated:

-
    -
  • Added Special Verb 'Create Poll', an in-game interface to create server polls for admins with +permissions.
  • -
-

MrPerson updated:

-
    -
  • Removed NTSL. Sorry. People could write scripts that crashed the server, and this is the only thing that can be done to prevent them from doing that.
  • -
-

MrStonedOne updated:

-
    -
  • Removed feature where quick consecutive ghost orbits while moving could be used to fuck with your sprite
  • -
  • Fixed ghosts losing floating animation when returning from an orbit
  • -
  • Fixed logic error that prevented orbit's automatic cancel when the orbiting thing moved in certain situations.
  • -
  • Ghost Orbit size now changes based on the icon size of the thing they are orbiting (for that sweet sweet singulo orbiting action)
  • -
  • Removed needless checks in ghost orbit, you can now orbit yourself and restart an orbit around the thing you are already orbiting
  • -
-

Xhuis updated:

-
    -
  • Syndicate Medical cyborgs now have cryptographic sequencers.
  • -
  • Syndicate Medical cyborgs no longer have syringes.
  • -
  • Restorative Nanites now heal much more damage per type.
  • -
  • Operative pinpointers now actually point toward the nearest operative.
  • -
  • Syndicate Assault cyborgs no longer start with medical supplies.
  • -
  • Energy saws now have a proper icon.
  • -
  • Non-operatives can now longer use operative pinpointers or Syndicate cyborg teleporters.
  • -
  • Doctor's Delight now requires cryoxadone in its recipe instead of omnizine.
  • -
  • Doctor's Delight now restores half a point of brute, burn, toxin, and oxygen damage per tick.
  • -
  • Doctor's Delight now drains nutrition while it's in your system (that is, unless you're a doctor).
  • -
  • Syndicate roboticists have given Syndicate medical cyborgs sharper hypospray needles - they are now able to penetrate armor.
  • -
- -

29 September 2015

-

Kor updated:

-
    -
  • The Chaos holoparasite can now actually set people on fire properly.
  • -
  • Guardian powers are now used via alt+click rather than shift+click.
  • -
  • Added an alert chime for ghosts when someone is summoning a Guardian.
  • -
- -

28 September 2015

-

Feemjmeem updated:

-
    -
  • Rechargers can now be wrenched and unwrenched by cyborgs.
  • -
  • Rechargers no longer stop working forever if you move them from an unpowered area to a powered area, and now actually look powered off when they are.
  • -
  • Guns and batons can no longer be placed in unwrenched chargers.
  • -
-

Razharas updated:

-
    -
  • Added button to preferences menu that kills all currently playing sounds when pressed, now you can kill midis and any other sounds for real.
  • -
-

phil235 updated:

-
    -
  • Fixed the syndicate cyborg's grenade launcher.
  • -
  • You can modify the dna of corpses again.
  • -
- -

26 September 2015

-

MMMiracles updated:

-
    -
  • Nanotrasen's genetic researchers have rediscovered the inactive dwarfism genetic defect inside all bipedal humanoids. Suffer not the short to live.
  • -
-

WJohnston updated:

-
    -
  • Repiped the entire station. Atmosia and the disposals loop were not touched.
  • -
  • Moved mulebot delivery from misc lab to RnD.
  • -
- -

25 September 2015

-

Xhuis updated:

-
    -
  • Changelings have a new ablity, Biodegrade. Costing 30 chemicals and having an unlock cost of 1, it allows them to dissolve handcuffs and straight jackets in 3 seconds, and escape from lockers in 7.
  • -
  • Fleshmend's effectiveness is now halved each time it is used in a short time span.
  • -
  • Last Resort now blinds and confuses nearby humans and briefly disables silicons upon use.
  • -
  • Headslugs now have 50 health, up from 20.
  • -
- -

24 September 2015

-

Jordie0608 updated:

-
    -
  • Advanced energy guns now only critically fail after successive minor failures. Cease firing after multiple recent minor failures to avoid critical ones.
  • -
-

Kor updated:

-
    -
  • Guardian Spirit types and powers have been heavily reworked. Full details of each type are available on the wiki.
  • -
  • Guardian damage transfer to users now deals cloneloss if their user is in crit.
  • -
  • Guardians are now undergoing a trial run in the traitor uplink, under the name of Holoparasites.
  • -
  • You can now hang human mobs (dead or alive) from meatspikes. Escaping the meatspike will further damage the victim.
  • -
  • You can no longer slam humans into the meatspike as an attack.
  • -
- -

23 September 2015

-

Xhuis updated:

-
    -
  • Syndicate medical cyborgs have been added.
  • -
  • The Dart Pistol is now available from the uplink for 4 telecrystals. It functions as a pocket-sized syringe gun with a quieter firing sound.
  • -
  • Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are available to traitors.
  • -
  • Foam dart pistols now cost 3 telecrystals, down from 6.
  • -
  • Syndicate cyborg teleporters now allow a choice between Assault and Medical cyborgs.
  • -
  • Syndicate cyborgs are now distinguished as Syndicate Assault.
  • -
  • Syndicate cyborg energy swords now cost 50 energy per use, down from 500.
  • -
  • Airlock charges now cost 2 telecrystals, down from 5.
  • -
  • Airlock charges are much more powerful.
  • -
  • There is no longer a 25% chance to detonate an airlock charge while removing it.
  • -
  • The description of many uplink items has been changed to better reflect their use.
  • -
- -

22 September 2015

-

Kor updated:

-
    -
  • A new admin command, Offer Control to Ghosts, can be found in the view variables menu. It will randomly select a willing candidate from among dead players, providing a fair method of replacing antagonists.
  • -
-

Xhuis updated:

-
    -
  • When a morph changes form, a message is shown to nearby people. This also happens upon undisguising.
  • -
  • Morphs now have an attack sound and message.
  • -
  • The Spawn Morph event now plays a sound to the chosen candidate.
  • -
  • Slaughter demons (and other creatures with blood crawl) now take two seconds to emerge from blood pools. Entering is still instantaneous.
  • -
  • The demon heart's sprite has been updated.
  • -
  • Eating a demon heart now surgically implants the heart into your chest. If the heart is removed from you, you lose the ability. Someone else can eat the heart to gain the ability.
  • -
  • Blood Crawl no longer has a 1-second cooldown, instead having none.
  • -
  • You can no longer hold items when attempting to Blood Crawl, nor can you use any items while Blood Crawling.
  • -
  • Creatures that can Blood Crawl now take two seconds to emerge from blood pools.
  • -
  • Slaughter demons now store devoured creatures, and will drop them upon death.
  • -
  • Revenants now have the ability to speak to the dead.
  • -
  • Revenant abilities now have icons.
  • -
  • Malfunction no longer EMPs a specific area - it will instead EMP nearby machines directly and stun cyborgs. Dominators are immune to this.
  • -
  • Revenants now have directional sprites.
  • -
  • Overload Lights now has a smaller radius.
  • -
  • Defile no longer corrupts tiles.
  • -
  • When glimmering residue reforms, the game will attempt to place the old revenant in control of the new one. If this cannot be done, it will find a random candidate.
  • -
  • Revenants can no longer see ghosts. They can see other revenants, however, and ghosts can still see revenants.
  • -
  • The Spawn Slaughter Demon event now plays a sound to the chosen candidate.
  • -
-

phil235 updated:

-
    -
  • Lizards and other non human species can no longer acquire the hulk mutation. Hulks no longer have red eyes
  • -
  • Monkeys now always have dna and a blood type (compatible with humans).
  • -
  • Monkey transformation no longer deletes the human's clothes.
  • -
  • Space Retrovirus now correctly transfers dna SE to the infected human.
  • -
  • Changeling's Anatomic Panacea removes alien embryo again.
  • -
  • Cloning someone now correctly sets up their dna UE.
  • -
  • Fixes the laser eyes mutation not giving glowing red eyes to the human.
  • -
  • Using changeling readaptation now properly removes all evolutions bought (arm blade, chameleon skin, organic suit).
  • -
-

xxalpha updated:

-
    -
  • Added a researchable cyborg self-repair module to the robotics fabricator.
  • -
- -

20 September 2015

-

Xhuis updated:

-
    -
  • Rites have been renamed to their old runes, which reflect their functionality.
  • -
  • Examining a talisman no longer opens the paper GUI.
  • -
  • Armor talismans have been re-added.
  • -
  • EMP talismans now have the same range as their rune counterpart.
  • -
  • Some talismans now cost health to use, costing more or less depending on their effect.
  • -
  • Scribing runes now deals 0.1 brute damage instead of 1.
  • -
  • Bind Talisman runes no longer deal 5 brute damage when invoking.
  • -
  • Rune shapes and colors are now identical to their old versions.
  • -
  • Conversion runes can no longer be used by yourself, and require a static 2 cultists.
  • -
- -

19 September 2015

-

Xhuis updated:

-
    -
  • Shadowlings are now able to sacrifice a thrall to extend the shuttle timer by 15 minutes. This will not stack.
  • -
  • Additional abilities granted by Collective Mind will now properly have icons.
  • -
  • Shadowlings now have their antagonism removed if turned into a silicon.
  • -
  • The order of abilities unlocked by Collective Mind has been changed. It now starts with Sonic Screech.
  • -
  • Veil now destroys glowshrooms in a much larger radius than before.
  • -
- -

17 September 2015

-

bgobandit updated:

-
    -
  • Meatspikes can now be constructed and deconstructed with metal and rods, as well as wrenched and unwrenched! Humans and corgis can be used on them as well.
  • -
-

xxalpha updated:

-
    -
  • Reworked nuke deconstruction: Standardized steps, partial reparation (use metal) to contain radiation.
  • -
  • New portable nuke, self-destruct terminal, syndie screwdriver sprites by WJohnston.
  • -
- -

16 September 2015

-

Razharas updated:

-
    -
  • Replaces the space cube with space torus. Space levels are now each round randomly placed on the grid with at least one neigbour, any side of the space level that doesnt have neigbour will loop either onto itself or onto the opposite side of the furthest straight-connected space level on the same axis.
  • -
-

Supermichael777 updated:

-
    -
  • The detomax pda cartridge no longer blows its user up.
  • -
-

Xhuis updated:

-
    -
  • Cultists will now be able to create all runes without needing to research or collect words. This is subject to change.
  • -
  • Cult code has been significantly improved and will run much faster and be more responsive.
  • -
  • Conversion runes can now be invoked with less than three cultists, but take a small amount of time to convert the target.
  • -
  • Armor runes will only outfit the user with standard armor, rather than having different loadouts for different worn clothing items.
  • -
  • Astral Journey runes will now pull the user back to the rune if they are moved. The user also has a different color while on the rune.
  • -
  • Free Cultist has been removed. Summon Cultist now works even if the target is restrained.
  • -
  • Sacrifice and Raise Dead runes now offer more precise target selection.
  • -
  • Sacrifice runes now have different sounds, and gib rather than dust (assuming the target is not a silicon).
  • -
  • There is no longer a maximum cap on active runes.
  • -
  • Runes have been renamed to Rites. For instance, the Teleport rune is now the Rite of Translocation. The only exception to this is the rune to summon Nar-Sie, which is a Ritual.
  • -
  • Nar-Sie now has a new summon sound.
  • -
  • The Nar-Sie summon rune has a new 3x3 sprite.
  • -
  • The stun rune no longer stuns cultists.
  • -
  • The Rite of False Truths had been added, that will make all nearby runes appear as if they were drawn in crayon.
  • -
  • Runes can now be examined by cultists to determine their name, function, and words.
  • -
-

phil235 updated:

-
    -
  • Riot and energy shield users now have a chance to block things thrown at them as well as xeno leaping at them.
  • -
- -

14 September 2015

-

Fox P McCloud updated:

-
    -
  • Adds a mining voucher to the Quartermaster's locker.
  • -
-

Thunder12345 updated:

-
    -
  • The captain has been issued with a new jacket for formal occasions.
  • -
  • Research has shown that is is possible to build technological shotshells without the need for silver. The design blueprints supplied to your station have been updated accordingly.
  • -
-

xxalpha updated:

-
    -
  • Fixed not being able to grab things from storage while inside aliens.
  • -
  • Fixed two progress bars when devouring.
  • -
  • Shields will now block alien hunter pounces.
  • -
  • Alien hunters health reduced to 125 from 150. Alien sentinels health increased to 150 from 125.
  • -
  • Alien hunters will no longer be transparent when stalking, this ability was given to alien sentinels.
  • -
  • Alien slashing now deals constant 20 damage but has a chance to miss.
  • -
  • Reduced alien disarm stun duration vs cyborgs, from 7 seconds to 2 seconds.
  • -
  • Alien sentinels now move as fast as humans.
  • -
  • Facehuggers and alien eggs layers increased to be higher than resin walls.
  • -
- -

13 September 2015

-

Fox P McCloud updated:

-
    -
  • Fixes an exploit and inconsistency issue with a few material amounts on a few items and designs.
  • -
  • Fixes Bibles/holy books not properly revealing runes.
  • -
  • fixes stimulants not properly applying its speedbuff.
  • -
-

Gun Hog updated:

-
    -
  • Nanotrasen scientists have proposed a refined prototype design for the nuclear powered Advanced Energy guns to include a taser function along with the disable and kill modes. Addtionally, they have modified the chassis blueprint to include a hardpoint for attachable seclites.
  • -
-

Iamgoofball updated:

-
    -
  • Reduced the cost of changeling armor to 1 and increased it's armor values.
  • -
-

Jordie0608 updated:

-
    -
  • You can now view the reason of a jobban from character setup.
  • -
-

xxalpha updated:

-
    -
  • Drying agent splashed on galoshes will turn them into absorbent galoshes that dry wet floors they walk on.
  • -
  • Drying agent can be made with ethanol, sodium and stable plasma.
  • -
- -

11 September 2015

-

CosmicScientist updated:

-
    -
  • Drone dispenser now has a var for its cooldown, get var editing.
  • -
- -

09 September 2015

-

Joan updated:

-
    -
  • New blob chemical; Cryogenic Liquid. Cools down targets.
  • -
  • Tweaked names, colors, and effects of remaining blob chemicals;
  • -
  • Skin Ripper is now Ripping Tendrils and does minor stamina damage, in addition to the brute damage.
  • -
  • Toxic Goop is now Envenomed Filaments and injects targets with spore toxin and causes hallucinations, in addition to the toxin damage.
  • -
  • Lung Destroying Toxin is now Lexorin Jelly and does brute damage instead of toxin damage. The oxygen loss it causes can also no longer crit you in one hit.
  • -
  • Explosive Gelatin is now Kinetic Gelatin and does random brute damage, instead of randomly exploding targets.
  • -
  • Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone.
  • -
-

bgobandit updated:

-
    -
  • Nanotrasen has commissioned two new corporate motivational posters for your perusal and edification.
  • -
  • Nanotrasen also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts.
  • -
- -

07 September 2015

-

xxalpha updated:

-
    -
  • Changed xeno weed spread to be like gas spread.
  • -
- -

06 September 2015

-

Fox P McCloud updated:

-
    -
  • Fixes gold sheets having plasma as their material.
  • -
-

Xhuis updated:

-
    -
  • Nanotrasen inspectors have discovered a fault in the buckles of chairs and beds. This has been fixed and you are now able to buckle again.
  • -
- -

05 September 2015

-

Shadowlight213 updated:

-
    -
  • The syndicate have taken notice of the camera bug's woeful underuse, and have managed to combine all of its upgrades into one!
  • -
- -

01 September 2015

-

Dorsidwarf updated:

-
    -
  • Changelings' Digital Camoflague ability now renders them totally invisible to the AI
  • -
-

ExcessiveUseOfCobblestone updated:

-
    -
  • Added health analyzer to the autolathe.
  • -
  • Moved Cloning board to Medical Machinery section.
  • -
  • Moved Telesci stuff to Teleporter section.
  • -
-

Fox P McCloud updated:

-
    -
  • Adds the emitter board to to the circuit imprinter for R&D.
  • -
-

Gun Hog updated:

-
    -
  • The Disable RCD Malfunction power is now Destroy RCDs! It costs 25 CPU (down from 50), causes RCDs to explode, can be used multiple times, and no longer affects cyborgs.
  • -
-

Kor updated:

-
    -
  • Revheads and Gang leaders now spawn with chameleon security HUDs, for keeping track of loyalty implanted crew.
  • -
  • Syndicate thermals now have a chameleon function as well, allowing you to disguise the goggles to match your job.
  • -
-

Miauw updated:

-
    -
  • Edaggers actually work now and have been buffed to 18 brute and 2 TC.
  • -
-

Oisin100 updated:

-
    -
  • Nanotransen discover ancient human knowledge confirming that trees produce Oxygen From Carbon Dioxide
  • -
  • Trees now require Oxygen to live. And will die in extreme temperatures
  • -
-

Xhuis updated:

-
    -
  • The arcade machines have been stocked with a xenomorph action figure that comes with realistic sounds!
  • -
  • Darksight now has its own icon.
  • -
  • Empowered thralls have been added. While obvious, they are more powerful and can resist dethralling while conscious. Only 5 can exist at one time.
  • -
  • Shadowlings can now change their night vision radius by using the action button their eyes (glasses) now provide.
  • -
  • Torches are dimmer, being as bright as flashlights, and no longer fit on belts.
  • -
  • Black Recuperation now has a 1 minute cooldown, down from 5. It can also be used to empower living thralls.
  • -
  • Guise can now be used outside of darkness and makes the user more invisible than before.
  • -
  • Enthrall now functions properly when a shadowling is not hatched, allowing them to enthrall up to 5 people before hatching.
  • -
-

xxalpha updated:

-
    -
  • Blood crawling is now a spell.
  • -
  • Engineering cyborgs now have a constant magpulse.
  • -
  • Changed foam spreading to be like gas spreading.
  • -
- -

28 August 2015

-

bgobandit updated:

-
    -
  • Overheard at CentComm: 'This burn kit said salicyclic acid would heal my burns! WHO MADE THIS SHIT?' A muffled honking is heard in the background. (Burn first-aid kits now contain an appropriate burn pill.)
  • -
  • Oxandrolone, a new burn healing medication, has been added to burn first-aid kits and to chemistry. Ingesting 25 units or more causes burn and brute damage.
  • -
- -

19 August 2015

-

Joan updated:

-
    -
  • Added a new revenant ability; Malfunction. It does bad stuff to machines.
  • -
  • Defile and Overload Lights now briefly stun the revenant.
  • -
  • You can now Harvest a target by clicking on them while next to them.
  • -
  • Harvesting no longer leaves you draining if the target is deleted mid-drain attempt.
  • -
  • Defile no longer emags bots or disables cyborgs, Malfunction does that now.
  • -
-

Kor updated:

-
    -
  • The Ranged and Scout guardian types have been merged, and gained a new surveillance snare ability.
  • -
-

SconesC updated:

-
    -
  • Added Military Belts to traitor uplinks.
  • -
-

bgobandit updated:

-
    -
  • CentComm now offers its cargo department toys, as well as detective gear so their boss can figure out which tech wasted all the points on them.
  • -
-

phil235 updated:

-
    -
  • You can now partially protect yourself from blob attack effects by wearing impermeable clothes like hardsuits, medical clothes, masks, etc. Max protection effect is capped at 50%.
  • -
  • Splashing someone with chemicals no longer injects those chemicals in their body.
  • -
  • Fixes splashing acid on items or floor with items not having any effect.
  • -
- -

18 August 2015

-

CoreOverload updated:

-
    -
  • Added a new low-tech eye cyberimplant in RnD - welding shield implant.
  • -
  • Implanter and empty implant case added to protolathe.
  • -
  • You can sell tech disks and maxed reliability design disks in cargo for supply points.
  • -
  • DA menu shows current research levels.
  • -
  • You can print cyberimplants in updated mech fab.
  • -
-

Supermichael777 updated:

-
    -
  • Added an ooc hotkey for borgs = O. They simply didn't have one and it was a consistency issue
  • -
  • Also added Ctrl+O as an any mode keycombo so you dont have to backspace and type ooc. Added to hotkey mode to remain consistent with all other Ctrl combos
  • -
-

bustygoku updated:

-
    -
  • Most backpacks now have 21 or more slots, but are still weight restricted. What this means is that you can have a lot of tiny weight items, but only 7 medium items just like before.
  • -
-

phil235 updated:

-
    -
  • Janicart rider no longer slip on wet floor or bananas. Moving on a floor tile with lube while buckled (chair, roller bed, etc) will make you fall off.
  • -
- -

16 August 2015

-

Joan updated:

-
    -
  • Revenants will now occasionally spawn as an event.
  • -
  • Revenants gain more energy from Harvesting, and can Harvest from people in crit.
  • -
  • Revenant powers are more effective, and no longer freeze you in place, besides Harvest.
  • -
  • Slain Revenants will respawn much faster.
  • -
  • Fixed a whole bunch of revenant bugs, including one that caused the objective to always fail.
  • -
-

Kor updated:

-
    -
  • The wizard can now stop time.
  • -
-

MMMiracles updated:

-
    -
  • Revamps bioterror darts into a less-lethal, syringe form. Removed the coniine and spore toxins to keep it solely for quiet take-downs.
  • -
- -

15 August 2015

-

Miauw updated:

-
    -
  • Changeling transformations have been upgraded to also include clothing instead of just DNA.
  • -
  • Patches no longer work on dead people.
  • -
  • Added 15-force edaggers that function like pens when off.
  • -
-

MrPerson updated:

-
    -
  • Objects being dragged will no longer get shoved out of your grasp by space wind. Retrieving dead bodies should be possible.
  • -
-

RemieRichards updated:

-
    -
  • Added Changeling Team Objectives, these are handed out to all lings, with the chance of a round having one being 20*number_of_lings% (3 lings = 60%)
  • -
  • Impersonate Department (Team Objective): As many members of a department as can reasonably be picked are chosen for the lings to kill, replace and escape as
  • -
  • Impersonate Heads (Team Objective): 3 to 6 Heads of Staff are chosen for the lings to kill, replace and escape as
  • -
  • If the Changelings have a Team Objective, their usual Kill, Maroon, Etc. objectives will not pick other changelings, to discourage backstabbing in teamling
  • -
  • Changeling Engorged Glands is now the default storage and regen rate, Engorged Glands remains for an extra boost
  • -
  • Armblades can now be used to open powered doors, however it takes 10 seconds of the changeling standing still, Their ability to instantly open unpowered doors remains unchanged
  • -
  • Debrain objective is no longer handed out to lings, it's as good as broken these days
  • -
  • Changelings may now purchase a togglable version of the Chameleon Skin genetics mutation, for 2 DNA
  • -
- -

13 August 2015

-

CoreOverload updated:

-
    -
  • Added a new 8TC traitor item: subspace storage implant. It allows you to store two box-sized items in (almost) undetectable storage.
  • -
  • Changed the way most of the surgical operations work. See wiki for new steps.
  • -
  • You can cancel step 2+ surgeries with drapes and cautery in inactive hand.
  • -
  • Defib no longer works on humans who have no heart. Changeling/thrall/cult/strange reagent revives are still working, and this is intended.
  • -
  • You can eat all organs raw now, with exception for brains and cyberimplants.
  • -
  • Some xenos abilities are linked to their organs. Play with xenos' guts for fun and profit!
  • -
-

RemieRichards updated:

-
    -
  • Modifying a string (Text) variable with View Variables or View Variables Mass Modify now allows you to embed variables like real byond strings, For example the variable real_name; you could set a text var to [real_name] and it would be replaced with the actual contents of the var, This allows for Mass fixing of certain variables but it's also useful for badmin gimmickery
  • -
- -

12 August 2015

-

CosmicScientist updated:

-
    -
  • Added Space Carp costume to the code, get it from an autodrobe near you.
  • -
  • Added Ian costume to the code, take his place under the HoP's hand, get it from an autodrobe or corgi hide, keep it away from washing machines or it'll meat its end as clothing.
  • -
  • Added Space Carp spacesuit to the code, I know what I'm praying for.
  • -
-

bgobandit updated:

-
    -
  • After multiple complaints from WaffleCo food activists, Nanotrasen has added real chocolate, berry juice and blue flavouring to its ice cream products.
  • -
- -

09 August 2015

-

RemieRichards updated:

-
    -
  • Nanotrasen Mandatory FunCo Subsidiary: CoderbusGames, would like to announce an update to Orion Trail!
  • -
  • Spaceports: Buy/Sell Crew, Trade Fuel for Food, Trade Food for Fuel, Buy Spare Electronics, Engine Parts and Hull Plates, or maybe you think you're tough enough to attack the spaceport?
  • -
  • Changelings: Changelings can now sneak into your crew, Changelings eat double the standard food ration and have a chance to Ambush the rest of the crew!
  • -
  • Kill Crewmembers: Do you suspect changelings? or dont feel you have enough food rations? Just shoot somebody in the head, at any time!
  • -
- -

07 August 2015

-

KorPhaeron updated:

-
    -
  • Added a new Guardian Mob that can be summoned to manifest inside a mob.
  • -
  • Guardians can communicate with their host and materialize themselves to protect their host with magic powers.
  • -
  • Guardians are invincible but cannot live without or too far from their host, they also relay injuries they suffer to the host.
  • -
-

Phil235 updated:

-
    -
  • Fixed being able to run into your own bullet.
  • -
-

RemieRichards updated:

-
    -
  • You no longer need to click on an item in a storage container to remove it, clicking anywhere around the item works.
  • -
-

bustygoku updated:

-
    -
  • Removed the chance for a disease to make you a carrier on transfer.
  • -
-

phil235 updated:

-
    -
  • The plasma cutter's fire rate is now a bit lower but its projectile can pierce multiple asteroid walls and its range isn't lowered in pressurized environment anymore.
  • -
- -

06 August 2015

-

AnturK updated:

-
    -
  • Adds the voodoo doll as a mining treasure, link it with a victim with an item previously held by them.
  • -
  • Once linked the voodoo doll can be used to injure, confuse and control the victim.
  • -
-

Core0verlad updated:

-
    -
  • Items can now be removed from storage containers inside storage containers.
  • -
  • Beds and bedsheets have new sprites.
  • -
  • MMIs are no longer ID locked.
  • -
-

KorPhaeron updated:

-
    -
  • Slaughter Demon's have had their health reduced to 200 and their speed reduced but they get a speed boost when exiting blood.
  • -
-

MrPerson updated:

-
    -
  • Items stacks now automatically merge unless thrown when moved onto the same tile.
  • -
- -

05 August 2015

-

CoreOverload updated:

-
    -
  • Implants, implant cases and implanters got RnD levels and can be DA'ed for science.
  • -
  • Surgically removed implant can be placed into an implant case. Remove implant with empty implant case in inactive hand.
  • -
  • Surgical steps now got progress bars.
  • -
  • You can cancel a surgery by using drape on operable body part again. This works only before you perform surgery's first step.
  • -
  • Operating computer shows next step for surgeries. No more alt-tabbing to view next step on wiki while operating.
  • -
  • You cannot start two surgeries on one body part at once. You can start two multiloc surgeries (i.e. two augumentations) on diffirent body parts at once.
  • -
  • Monkey <-> Human transformations now keep your internal organs, cyberimplants and xeno embryos included.
  • -
-

Ikarrus updated:

-
    -
  • Head beatings no longer deconvert gangsters.
  • -
-

LordPidey updated:

-
    -
  • Added a new chemical. Spray tan. It is made by mixing orange juice with oil or corn oil. Warning: overexposure may result in orange douchebaggery.
  • -
-

Xhuis updated:

-
    -
  • Shadowling thralls can now be deconverted via surgery or borging.
  • -
  • Thralls can be revealed by examining them. They can hide this by wearing a mask.
  • -
  • Thralls have a few minor abilities they can use in addition to night vision.
  • -
  • Hatch-exclusive abilities can no longer be used if you are not the shadowling mutant race.
  • -
  • Ascendants are now immune to bombs and singularities. Honk.
  • -
  • A Centcom report has been added for shadowlings.
  • -
  • Ascending no longer kills all shadowling thralls. This allows antagonists who were enthralled to succeed along with the ascendants.
  • -
  • Annihilate now has different sound and a shorter delay before the target explodes. In addition, it now works on all mobs, instead of just humans.
  • -
  • Glacial Blast now properly has no cooldown if used while phase shifting.
  • -
  • Fixes a runtime if a target with no mind is enthralled.
  • -
-

bgobandit updated:

-
    -
  • Nanotrasen scientists have achieved the tremendous breakthrough of injecting gold slime extracts with water. Pets ensued.
  • -
- -

04 August 2015

-

Kor updated:

-
    -
  • Soulstones will now attempt to pull ghosts from beyond if the targeted corpse has no soul.
  • -
-

Summoner99 updated:

-
    -
  • Added the *roar emote back to Alien Larva
  • -
  • Fixed aliens not being able to do the *hiss and *screech emotes
  • -
  • Changed how the plural emote system works and now some emotes have plural versions, example is: *hiss and *hisses.
  • -
- -

02 August 2015

-

Incoming5643 updated:

-
    -
  • Syndicate toolboxes now come with never before seen red insulated gloves.
  • -
-

Steelpoint updated:

-
    -
  • Fixed multiple mapping errors for Boxstation and the mining base.
  • -
  • A circuit imprinter and exosuit fabrication board have been added to tech storage.
  • -
-

SvartaSvansen updated:

-
    -
  • Our lizard engineers have worked hard and managed to improve Centcom airlocks so they no longer disintegrate when the electronics are removed!
  • -
  • Put a safety net in place so future airlocks without assemblies produce the default assembly instead of disintegrating.
  • -
- -

30 July 2015

-

Gun Hog updated:

-
    -
  • The Reactivate Camera power for Malfunctining AIs now costs 10 CPU, and works on the entire camera network, up to 30 cameras fixed.
  • -
  • The Upgrade Cameras power now costs 35 CPU, upgrades all cameras in the network to have EMP proofing, X-ray, and gives the AI night-vision.
  • -
-

Ikarrus updated:

-
    -
  • Door Access buttons can now be emagged to remove access restrictions.
  • -
-

LordPidey updated:

-
    -
  • Added a new medication, Miner's Salve. It heals brute/burn damage over time, and has the side effect of making the patient think their wounds are fully healed. It is mixed with water+iron+oil, or grind a twinkie, a sheet of metal, and a sheet of plasma.
  • -
  • Added a grinder to the mining station.
  • -
-

Midaychi updated:

-
    -
  • Random loot has been added to the derelict as salvage for drones.
  • -
-

Scones updated:

-
    -
  • Adds a Rice Hat to the biogenerator.
  • -
- -

29 July 2015

-

AnturK updated:

-
    -
  • Aliens can now mine through asteroid rock.
  • -
-

GunHog updated:

-
    -
  • Cyborg headlamps have a short cooldown before reactivation when forcibly deactivated.
  • -
  • Shadowling's Veil now shuts down headlamps for the ability's entire duration.
  • -
-

Kor updated:

-
    -
  • Eating the heart of a Slaughter Demon will grant you dark powers.
  • -
-

freerealestate updated:

-
    -
  • Fixed bug where copying with ctrl+C didn't work due to it being assigned to resist.
  • -
  • Changed resist to B (hotkeys mode) and ctrl+B (either mode) instead.
  • -
  • Removed End resist from cyborgs.
  • -
- -

28 July 2015

-

Anonus updated:

-
    -
  • New gang tags for Omni and Prima gangs.
  • -
-

Chiefwaffles updated:

-
    -
  • After realizing how often AIs tend to 'disappear', Central Command has authorized the shipment of the Automated Announcement System to take over the AI's responsibility of announcing new arrivals.
  • -
  • In addition, users are able to configure the messages to their liking. Early testing has shown that this feature may be vulnerable to malicious external elements!
  • -
  • The station's R&D software has been updated so it can now succesfully create its own prototype AAS board once the prerequisite levels have been met.
  • -
-

Dorsisdwarf updated:

-
    -
  • Increased the cost of Bioterror darts to 6TC.
  • -
-

Incoming5643 updated:

-
    -
  • Double Agents no longer know they're Double Agents and not just standard Traitors.
  • -
-

xxalpha updated:

-
    -
  • Removed Anti-Drop and Nutriment Pump implants from Nuclear Operative's uplink.
  • -
- -

27 July 2015

-

Bgobandit updated:

-
    -
  • Burgers can now be made from corgi meat again.
  • -
-

Ikarrus updated:

-
    -
  • Added shutters to the armory to allow quick access when needed.
  • -
  • Security can now use the Brig external airlocks.
  • -
  • Added a join queue when the server has exceeded the population cap.
  • -
  • Decreased the cost of Body Swap and removed it's genetic damage.
  • -
-

kingofkosmos updated:

-
    -
  • Added a link to re-enter corpse to alert when your body is placed in a cloning scanner.
  • -
- -

26 July 2015

-

Phil235 updated:

-
    -
  • Sechailers will now break when used too often.
  • -
  • Mechs now have new action button sprites.
  • -
-

Steelpoint updated:

-
    -
  • Security Officers now spawn with a security breathmask in their internals box.
  • -
  • Abductor's batons now changes color with modes.
  • -
  • Unique sprites for Abductor hand cuffs and paper.
  • -
-

goosefraba19 updated:

-
    -
  • Updated the Power Monitoring Console with better alignment and colorized readouts.
  • -
- -

25 July 2015

-

Dorsisdwarf updated:

-
    -
  • Due to a fire sale at Syndicate HQ, many of the more interesting traitor gadgets have been cut in price dramatically. Please take this opportunity to make full use, as we cannot guarantee that the sale will last!
  • -
-

bgobandit updated:

-
    -
  • Under pressure from the Animal Rights Consortium, Nanotrasen has improved conditions at its cat and dog breeding facilities. Cats and pugs are now much more responsive to their owners.
  • -
-

duncathan updated:

-
    -
  • Restores RPD delay on disposals machines.
  • -
-

xxalpha updated:

-
    -
  • Agent IDs are now rewrittable.
  • -
- -

24 July 2015

-

Incoming5643 updated:

-
    -
  • The spells disintegrate and flesh to stone have had their mechanics changed. Using these spells will spawn a special touch weapon in a free hand (your dominant hand if possible) that can then be used to inflict the spell on the target of your choice. Having the touch weapon out is obvious, this is not a stealth based change. Clicking the spell while the hand is out will let you return the charge without using it.
  • -
  • The spell won't begin to recharge until the hand attack is either used or returned. Additionally these changes mean you can no longer use these spells while stunned or handcuffed. As a suggestion remember that the mutate spell allows you to break out of cuffs very easily, and warping abilities will keep you from getting cuffed to begin with!
  • -
- -

23 July 2015

-

NullQuery updated:

-
    -
  • Crew monitoring: The minimap now supports scaling. You can zoom in and out using the buttons. Hovering over an entry in the table centers the minimap on that part of the screen.
  • -
  • Crew monitoring: If the window is wide enough the health indicator will expand to show full health data (if available).
  • -
  • Crew monitoring: Clicking on the area name will now copy the coordinates to your clipboard.
  • -
  • Crew monitoring: The AI can view health information again, but there is a 5 second delay between updates for everyone watching.
  • -
-

freerealestate updated:

-
    -
  • Added resist hotkeys for borgs and humans. With hotkeys mode, use CTRL+C or C as a human and CTRL+C, C or END as a borg. With hotkeys mode off, use CTRL+C as a human and END as a borg.
  • -
-

xxalpha updated:

-
    -
  • Changeling augmented eyesight night vision is now working.
  • -
- -

21 July 2015

-

Fayrik updated:

-
    -
  • Syndicate Donksoft gear now costs less.
  • -
-

Xhuis updated:

-
    -
  • Firelocks may now be constructed and deconstructed with standard tools. Circuit boards can be produced at a standard autolathe.
  • -
-

phil235 updated:

-
    -
  • Thrown things no longer bounces off walls, unless they're in no gravity. Heavy items and mobs thrown can push the mobs and non anchored objects they land on. Throwing a mob onto a mob in no gravity will push each one in opposite direction. Thrown mobs landing on wall, or dense object or mob gets stunned and a bit injured. The damage when mob hit a wall is nerfed.
  • -
- -

20 July 2015

-

AnturK updated:

-
    -
  • Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage to each target depending on the chargeup
  • -
-

KorPaheron updated:

-
    -
  • Added the Multiverse Sword, a new wizard artifact that can summon clones of yourself from other universes, allowing for dangerous amounts of recursion.
  • -
-

phil235 updated:

-
    -
  • Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
  • -
  • Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window.
  • -
  • Mechs get two special alerts when their battery or health is low.
  • -
  • Mechs now properly consume energy when moving and having their lights on.
  • -
  • Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill).
  • -
- -

19 July 2015

-

Gun Hog updated:

-
    -
  • Nanotrasen advancements in cyborg technology now allow for integrated headlamps! As such, the flashlight package normally used as a module is now seamlessly merged with their systems!
  • -
-

Ikarrus updated:

-
    -
  • Asimov's subject of "human beings" can now be modified by uploaders.
  • -
  • Eaxmining AI modules while adjacent to them will show you what laws it will upload.
  • -
-

MMMiracles updated:

-
    -
  • Adds a TWANG sound effect when hitting things with a guitar.
  • -
- -

18 July 2015

-

AlexanderUlanH updated:

-
    -
  • Reduced stun duration of tabling to be closer to other stuns.
  • -
-

Iamgoofball updated:

-
    -
  • The Bioterror Chemical Sprayer is now filled with a more deadly mix of chemicals.
  • -
-

RemieRichards updated:

-
    -
  • Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)
  • -
  • Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead
  • -
  • Changelings now get to see the last 8 messages the person they absorbed said, to allow them to better impersonate their victim's speech patterns
  • -
-

Steelpoint updated:

-
    -
  • Reduced weight of Sechailer, it now fits in boxes.
  • -
-

phil updated:

-
    -
  • Smoke and foam touch reactions gets buffed.
  • -
  • Reagent dispensers (watertank, fueltank) tells you how much reagents they have left when examined.
  • -
  • Liquid dark matter blob spore smoke now cannot throw you. The effects of sorium, blob sorium, liquid dark matter and blob liquid dark matter are now scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are close but simply moves the mobs that are further away.
  • -
- -

17 July 2015

-

Ikarrus updated:

-
    -
  • Virology is no longer all-access.
  • -
  • Changelings now have the ability to swap forms with another being.
  • -
  • Halved Domination Time.
  • -
  • Reinforced windows and windoors are a bit more resistant to fires and blasts.
  • -
-

MrStonedOne updated:

-
    -
  • Scrubbers now use power: 10w + 10w for every gas its configured to filter. (60w for siphon)
  • -
  • Scrubbers can now be configured to operate on a 3x3 range via the air alarm at a high cost (ranging from 100w to 1000w depending on how many tiles are near it that aren't blocked and how much power it's using normally)
  • -
  • Huge portable scrubbers (like in toxins storage) now use a 3x3 range rather then a higher volume rate
  • -
  • Fixed issue with atmos not allowing low levels of plasma to spread
  • -
  • Fixed issue with atmos not adding or removing plasma overlays in some cases
  • -
  • Panic siphon now uses a 3x3 area range rather then increasing the scrubbers intake rate by 8x
  • -
  • Replace air uses 3x3 range for the first stage
  • -
  • Air alarms now have 3 new environmental modes:
  • -
  • Siphon - Panic siphon without the panic, operates on a 1 tile range
  • -
  • Contaminated - Activates all gas filters and 3x3 scrubbing mode
  • -
  • Refill Air - 3 times the normal vent output
  • -
- -

14 July 2015

-

AnturK updated:

-
    -
  • New species of mimic was spotted in the wilderness of space. Watch out!
  • -
-

Jordie0608 updated:

-
    -
  • Added a Local Narrate verb for admins.
  • -
- -

13 July 2015

-

Ikarrus updated:

-
    -
  • Loyalty Implant HUD Icon has been updated.
  • -
-

duncathan updated:

-
    -
  • Greatly shortened the time it takes to lay pipes with the RPD and to unwrench pipes in general.
  • -
  • Added Optical T-Ray scanners to R&D and Atmospheric Technician closets. Optical T-Ray Scanners function identically to a handheld scanner.
  • -
- -

11 July 2015

-

Dorsidwarf updated:

-
    -
  • Due to a new Syndicate budget, uplink implants are now only 14 TC.
  • -
  • In order to facilitate inter-agent communication, Syndicate Encryption Keys have been reduced to 2TC. They retain the ability to intercept all channels and speak on a private frequency.
  • -
-

Ikarrus updated:

-
    -
  • Robotic augmentations have been made a bit more difficult to maintain.
  • -
- -

10 July 2015

-

Ikarrus updated:

-
    -
  • New Changeling Ability: False Armblade Sting. It creates an undroppable armblade on the target temporarily. It will appear exactly like a real one, except you can't do anything with it.
  • -
  • Transform stings are no longer stealthy.
  • -
- -

09 July 2015

-

AlexanderUlanH updated:

-
    -
  • Riot Shotguns now spawn loaded with rubber pellet shells that deal high stamina damage.
  • -
-

kingofkosmos updated:

-
    -
  • Both beakers and drinking glasses can now be be drunk from, fed to mobs and splashed on mobs, turfs and most objects with harm intent.
  • -
-

nukeop updated:

-
    -
  • RCDs have a larger storage and can be loaded with glass, metal and plasteel.
  • -
  • Grilles and Windows can be made with an RCD.
  • -
  • Engi-Vend machine now has three RCDs.
  • -
  • Removed RCD as a steal objective.
  • -
- -

07 July 2015

-

Ikarrus updated:

-
    -
  • Fixed bug where gang messages would occasionally fail to send.
  • -
  • Fixed bug that prevented implant breakers from recruiting security.
  • -
  • Implanters are now only blocked by helmets with THICKMATERIAL
  • -
  • Light severity explosions no longer shred clothes.
  • -
-

MMMiracles updated:

-
    -
  • Adds a new crate to cargo in the security section, for when desperate times call for desperate measures.
  • -
-

NullQuery updated:

-
    -
  • Crew monitoring computers now sort by department and rank again.
  • -
  • Crew monitoring computer: Hovering over a dot on the minimap will now jump to the appropriate entry in the table.
  • -
  • sNPCs were given ID cards with blank assignments.
  • -
- -

06 July 2015

-

Ikarrus updated:

-
    -
  • Increased Uzi SMG cost to 60 influence.
  • -
  • Increased Uzi ammo cost to 40 influence.
  • -
  • Domination attempt limit is reduced to 1 per gang while the shuttle is docked with the station.
  • -
  • Gang bosses can promote and recall the shuttle using spare gangtools
  • -
  • Fixed Gang bosses getting deconverted with head trauma
  • -
  • Lizard characters can now get random names unique from humans.
  • -
- -

05 July 2015

-

AlexanderUlanH & Xhuis updated:

-
    -
  • Shadowling Ascendants have a new ability to send messages to the world.
  • -
  • Glare now properly silences targets.
  • -
  • Veil now turns off held lights.
  • -
  • Drain Thralls replaced with Drain Life, which targets all nearby humans.
  • -
  • Spatial Relocation replaced with Black Recuperation which lets you revive a dead thrall every five minutes.
  • -
  • Removed Vortex.
  • -
  • Shadowlings can now only enthrall five people before being forced to hatch; Hatched shadowlings can continue to enthrall however non-hatched ones can't pass the global limit.
  • -
  • Enthralling sends a message to all nearby humans.
  • -
  • Removed cooldown on Glacial Freeze.
  • -
-

Ikarrus updated:

-
    -
  • Reactive armor may now teleport user to space tiles. Be careful using it around space.
  • -
-

Razharas updated:

-
    -
  • Firing pins can now be removed by tablecrafting a gun with a plasmacutter, screwdriver and wirecutters.
  • -
-

RemieRichards updated:

-
    -
  • Melee attacks with weapons now display and animation of the weapon over the target.
  • -
  • Tablecrafting window now shows all recipies and has been split into categorized tabs.
  • -
  • 30 item limit removed.
  • -
-

Sabbat updated:

-
    -
  • Updated the cult armor rune to let you get additional equipment or abilities based on what you're wearing or holding. Some nerfed versions of wizard spells can be used by the cult in exchange for unique clothing, these spells require the cult robes or armor in order to use. No armor choices are mandatory, you will always have the option of the default choice.
  • -
  • Zealot - Default armor rune. If none of the required clothing is worn this will be chosen automatically. Is the same as ever.
  • -
  • Summoner - If you are wearing the wizard robe and hat when using the armor rune this choice will be available. User will receive magus robes and hat and nerfed versions of the summon shard and summon shell spells.
  • -
  • Traveler - Available to people wearing EVA suit and helmet. Replaces the EVA suit and helmet with the cult space suit and space helmet. Gives you a sword.
  • -
  • Marauder - Available to people wearing the captain's space suit and helmet. Same as Traveler except user is given a spell of summon creature (two creatures). They can and will attack the user.
  • -
  • Trickster - Available if wearing the RD's reactive teleport armor. Gives you magus robes, a wand of doors, and a nerfed version of Blink.
  • -
  • Physician - Available if wearing the CMO's labcoat. Gives you a wand of life.
  • -
-

TheVekter updated:

-
    -
  • Ian now has a dog-bed in the HoP's office.
  • -
-

nukeop updated:

-
    -
  • Uplinks now have a syndicate surgery bag containing surgery tools, a muzzle, a straightjacket and a syndicate MMI.
  • -
  • Syndicate MMIs can only be placed in cyborgs to create an unlinked cyborg with syndicate laws.
  • -
- -

04 July 2015

-

Gun Hog updated:

-
    -
  • The Ore Redemption Machine now allows users to release minerals without having to insert an ID first.
  • -
-

Ikarrus updated:

-
    -
  • Fixed items that logically shouldn't spill, spilling their contents when thrown
  • -
  • Fixed Bartender's non-spilling powers
  • -
  • Fixed thrown beakers not applying their contents onto floors
  • -
  • Fixed unable to transfer reagents between beakers you are holding
  • -
  • Fixed bombs shredding clothes that should have been protected by covering clothes
  • -
  • Fixed gang mode.
  • -
-

MMMiracles updated:

-
    -
  • Added patriotic underwear apparel due to the most god damn american holiday being just around the corner.
  • -
  • Also adds some other stuff for those inferior countires too, I guess.
  • -
- -

03 July 2015

-

Ikarrus updated:

-
    -
  • Added support for up to six gangs at a time. Admins may add additional gangs to any round.
  • -
  • Gang mode now has a chance to start with a third gang.
  • -
  • Promotion of lieutenants have been re-added
  • -
  • Every lieutenant promoted will lengthen the gang's recruitment cooldowns by one minute.
  • -
  • Only gang bosses will be able to recall the shuttle from their gangtool.
  • -
  • A recruitment pen that has not been used for a while will accumilate charges, so you are no longer punished for waiting to convert people.
  • -
  • Gangs are now fully functional outside of gang mode.
  • -
-

Ricotez updated:

-
    -
  • Added two categories of mutant bodyparts for humans with the same system that lizards use: ears and tails. Right now only admins can edit these.
  • -
  • Updated the system that checks for which jobs your character qualifies to be species-dependant. At this moment you won't notice any differences, but in the future coders can use this to be more specific about which jobs a species is allowed in under which circumstances.
  • -
  • Added one option to both categories, taken from the kitty ears: a cat tail and cat ears.
  • -
  • Added a new button to the VV menu drop-down list for admins: Toggle Purrbation. Putting a human on purrbation will give them cat ears and a cat tail, and send them the message 'You suddenly feel valid.' Using the button a second time removes the effects.
  • -
  • Adding categories for tattoos and scars is in the works. (Read: I need sprites!)
  • -
-

oranges updated:

-
    -
  • Engineers in nanotrasen's safety equipment department announced the release of a new and improved version of the X25 taser trigger, previous triggers, which suffered from a long line of misfire problems were recalled enmasse. Nanotrasen refused to comment on rumours that the previous trigger design was the work of a saboteur.
  • -
- -

02 July 2015

-

Ikarrus updated:

-
    -
  • Throwing reagent containers such as drinks or beakers may spill their contents onto whatever they hit
  • -
  • Slipping while carrying items in your hand may cause ~accidents~
  • -
  • Mounted and portable flashers can now only be burned out from overuse, similar to flashes.
  • -
-

oranges updated:

-
    -
  • Thanks to department budget cuts we've had to remove the security cameras built into officer helmets, Nanotrasen apologies for this inconvenience.
  • -
- -

01 July 2015

-

Ikarrus updated:

-
    -
  • Multiple gang leaders are spawned at round start, the number which depends on server population
  • -
  • Gangsters can no longer be promoted mid-game.
  • -
  • Security can once again deconvert gangsters with loyalty implants
  • -
  • Added an Implant Breaker item to the gangtool as a purchasable item for 10 influence each
    * They are a one-use item that destroys all implants in the target, including loyalty implants
    * They will also attempt to recruit the target before destroying itself
  • -
  • Implanters no longer work if the target is wearing headgear. Remove them first.
  • -
-

NullQuery updated:

-
    -
  • The crew monitoring computer, AI crew monitoring popup and the handheld crew monitor now update automatically.
  • -
  • Crew monitoring: The health information has been turned into a health indicator. It goes from green to red. Hovering over the icon shows detailed information (if available).
  • -
  • Crew monitoring: The location coordinates have been hidden. You can see them by hovering over the 'Location' column.
  • -
  • Crew monitoring: A minimap has been added so you can easily see where people are.
  • -
  • Crew monitoring: Players who are not in range of a camera are not shown on the minimap.
  • -
  • Crew monitoring: AI players can quickly move to other locations or track players by clicking the minimap or items in the table.
  • -
  • Crew monitoring: For AI players, health information always shows a white indicator instead of green-to-red. This is a deliberate limitation to prevent the AI from becoming too omnipresent.
  • -
-

phil235 updated:

-
    -
  • Space drug overdose no longer cause brute/brain damage but you hallucinate more. Space Drug Blob now makes you hallucinate even if you don't overdose on its space drug.
  • -
-

xxalpha updated:

-
    -
  • Added a new traitor objective: steal the station's self-destruct nuke plutonium core.
  • -
- -

29 June 2015

-

Ikarrus updated:

-
    -
  • Clothing has been separated out of equipment lockers into wardrobes to reduce clutter.
  • -
-

Incoming5643 updated:

-
    -
  • The secrets of the rainbow slimes have finally been revealed. To attain this rare blob you must breed a slime with a 100% mutation chance!
  • -
  • Rainbow slime cores will generate a randomly colored slime when injected with plasma. It's a good plan B if the slimes aren't cooperating in terms of colors. You can get any color slime this way, pray to the RNG!
  • -
-

Xhuis updated:

-
    -
  • The Sleeping Carp clan has made its presence known on Space Station 13. Some gangs will name themselves after this group and practice martial arts rather than using traditional gang weaponry. These shadowboxers are not to be taken lightly.
  • -
-

oranges updated:

-
    -
  • Thanks to a breakthrough in directed vector thrusting, all nanotrasen brand jetpacks have been greatly improved in speed and handling
  • -
- -

28 June 2015

-

Ikarrus updated:

-
    -
  • Gang Lieutenants can buy gang tools now, but at a higher cost than the original boss
  • -
  • Gang leaders can register additional gangtools to themselves for use as spares.
  • -
  • Number of maximum lieutenants lowered to 2
  • -
  • Pistol cost increased to 25 influence
  • -
  • Uzi cost increased to 50 influence
  • -
  • Uzi Ammo decreased to 20 influence
  • -
  • Overcoats added to items the biogenerator can produce.
  • -
  • Micro and Macro bomb implants are now restricted to the Nuclear game mode.
  • -
-

phil235 updated:

-
    -
  • Smoke (and foam) no longer distribute more reagents than they have. The amount of clouds in a smoke now depends on the amount of smoke created. Acid no longer melts items on a mob at low volume, and the chances to melt them increases with the amount applied on the mob. Sprays can now contain acid again.
  • -
- -

27 June 2015

-

Ikarrus updated:

-
    -
  • Some objects can be burned now.
  • -
  • Bombs will shred your clothes, with respect to their layering and armor values. Exterior clothing will shield clothing underneath. Storage items will drop their contents when bombed this way.
  • -
-

Laharl Montogmmery updated:

-
    -
  • Storage Content Transfer : Bluespace Boogaloo! You can now transfer the content of the BoH/BRPED into tiles/bins/bags out of your reach. Range is 7 tiles.
  • -
-

MrStonedOne updated:

-
    -
  • Admins will now receive a notification when one of them starts to reply to an adminhelp to cut down on multiple responses to adminhelps and let admins know when an adminhelp isn't getting replied to.
  • -
  • The keyword finder in admin helps (adds a (?) link next to player names in the text of adminhelps) has been added for all player to admin pms, as well as admin say.
  • -
-

NullQuery updated:

-
    -
  • Introduces html_interface, a module to streamline the management of browser windows.
  • -
  • Adds playing cards that utilize a new HTML window management system.
  • -
-

Vekter updated:

-
    -
  • Added a new military jacket to the Autodrobe and ClothesMate.
  • -
- -

26 June 2015

-

Ikarrus updated:

-
    -
  • Added a couple of new gang tag resprites by Joan.
  • -
-

Kor updated:

-
    -
  • Summon Guns has returned to its former glory. The spell will once again create antagonists, now with the objective to steal as many guns as possible.
  • -
  • Summon Guns once again costs a spell point, rather than granting one.
  • -
-

phil235 updated:

-
    -
  • Buffs traitor stimpack (and adrenalin implant) to be more efficient against stuns/knockdowns.
  • -
-

pudl updated:

-
    -
  • You can now play games of mastermind to unlock abandoned crates found throughout space.
  • -
- -

25 June 2015

-

Iamgoofball updated:

-
    -
  • Changes up how Explosive Implants work.
  • -
  • They have become Microbomb Implants. They cost 1 TC each. Each implant you inject increases the size of the explosion. You gib on usage, regardless of explosion size.
  • -
  • A Macrobomb implant was added for 20 TC. It is the equivalent of injecting 20 microbombs.
  • -
  • Nuke Ops start with microbomb implants again.
  • -
- -

24 June 2015

-

Ikarrus updated:

-
    -
  • Request Console message sent to major departments will now be broadcasted on that department's radio.
  • -
  • Request Consoles can be used to quicly declare a security, medical, or engineering emergency.
  • -
- -

23 June 2015

-

Fayrik updated:

-
    -
  • NanoUI is now Telekenesis aware, but due to other constraints, NanoUI interfaces are read only at a distance.
  • -
  • Refactored all NanoUI interfaces to use a more universal proc.
  • -
  • Adjusted the refresh time of the NanoUI SubSystem. All interfaces will update less, but register mouse clicks faster.
  • -
  • Removed automatic updates on atmospheric pumps, canisters and tanks, making them respond to button clicks much faster.
  • -
  • Atmos alarm reset buttons work now. Probably.
  • -
-

Iamgoofball updated:

-
    -
  • Adds a progress bar when performing actions.
  • -
-

Ikarrus updated:

-
    -
  • New gang names with tags created by Joan
  • -
  • C4 explosive can be purchased by gangs for 10 influence.
  • -
  • Recruitment pen cost increased to 50.
  • -
  • Lieutenants recieve one free recruitment pen.
  • -
  • Recruitment pens are now stealthy and no longer give a tiny prick message.
  • -
  • Increased chance of deconversion with head trauma
  • -
  • Recalling the shuttle now takes about a minute to work, during which you won't be able to use your gangtool.
  • -
  • Pinpointers no longer point at dominators. Instead, dominators will beep while active.
  • -
  • Added puffer jackets and vests.
  • -
  • Increased gang outfit armor. It is moderately resistant to bullets now.
  • -
  • Removed bulletproof vests from gangtool menu.
  • -
-

Jordie0608 updated:

-
    -
  • Admins can now flag ckeys to be alerted when they connect to the server.
  • -
-

MrStonedOne updated:

-
    -
  • Admins can now reject poor adminhelps. This will tell the player how to construct a useful adminhelp and give them back their adminhelp verb
  • -
-

RemieRichards updated:

-
    -
  • Cumulative armour damage resistance is now capped at 90%, you will now always take at bare minimum, 10% of the incoming damage.
  • -
  • Added a system for Armour Penetration to items, it works by temporarily (It does NOT damage the armour or anything) reducing the armour values by the AP value during the attack instance.
  • -
  • The formula for AP is Armour-ArmourPenetration = AdjustedArmour and AdjustedArmour is used for all the remaining calculations instead of Armour (Eg: 80 Melee - 15 AP = 65 Melee).
  • -
  • The Ninja's Energy Katana has 15 AP, Xenomorphs have an inbuilt AP of 10.
  • -
  • You can now unwrench pipes who's internal pressures are greater than that of their environment...
  • -
  • However it will throw you away from the pipe at extreme speed! (You are warned beforehand if the pipe will do this, allowing you to cancel)
  • -
-

Vekter updated:

-
    -
  • Finally fixed immovable rods! They will now properly bisect the station (and crit anyone unlucky enough to be in their path).
  • -
  • Increased Meteor activity detected in the vicinity of the station. Be advised that many storms may be more violent than they once were.
  • -
  • Gravitational anomalies will now throw items at mobs in their vicinity. Take care while scanning them.
  • -
  • Flux anomalies explode much more violently now. Get there and destroy them, or risk losing half a department.
  • -
-

xxalpha updated:

-
    -
  • Added a new Reviver implant: now it revives you from unconsciousness rather than death.
  • -
  • Added cybernetic implants and a cybernetic implants bundle to the Nuke Ops uplink.
  • -
  • Fixed Nutriment pump implant printing.
  • -
  • Health Analyzers now have the ability to detect cybernetic implants.
  • -
  • X-Ray implants are now much harder to unlock.
  • -
- -

22 June 2015

-

Iamgoofball updated:

-
    -
  • Removed failure chance and delay when emagging an APC.
  • -
-

KorPhaeron updated:

-
    -
  • Rebalanced armor to be less effective, reducing the melee, bullet and/or laser damage reduction of all armor suits.
  • -
-

LaharlMontogmmery updated:

-
    -
  • You can now click and drag a storage container to empty it's contents into another container, disposal bin or floor tile.
  • -
-

Xhuis updated:

-
    -
  • Revenants have received a considerable overhaul.
  • -
  • Revenants will no longer share spawn points with space carp and will spawn in locations like the morgue and prisoner transfer center.
  • -
  • Revenants can no longer cross tiles covered in holy water.
  • -
  • Revenants have a new ability called Defile for 30E. It will cause robots to malfunction, holy water over tiles to evaporate, and a few other effects.
  • -
  • Upon death, revenants will appear and play a sound before rapidly fading away and leaving behind glimmering residue as evidence of their demise.
  • -
  • This residue lingers with the essence of the revenant. If left unattended, it may reform into a new revenant. Simply scattering it is enough to stop this, but it also has high research levels.
  • -
  • Revenants now have fluff objectives as well as a set essence goal.
  • -
  • Revenanants will be revealed for longer when using abilities and also receive feedback on this revealing.
  • -
  • Revenants can now only spawn via random event with a specific amount of dead mobs on the station. The default for this is 10.
  • -
  • Revenants can no longer use abilities from inside walls.
  • -
  • Directly lethal abilities have been removed from revenants. In addition, they can no longer harvest unconscious people, only the dead.
  • -
- -

21 June 2015

-

GunHog updated:

-
    -
  • The Hostile Lockdown ability for Malfunctioning AIs has been nerfed. It now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds.
  • -
  • Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy lasers instead of simply shooting faster.
  • -
  • Nanotrasen has released an Artificial Intelligence firmware upgrade under the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants of exosuit technology, from the Ripley APLU design to even experimental Phazon units. Simply upload your AI to the exosuit's internal computer via the InteliCard device. Per safety regulations, the exosuit must have maintenance protocols enabled in order to remove an AI from it.
  • -
  • Malfunctioning AIs may wirelessly steal mechs via a new power, Mech Domination. For 30 CPU, a Malf AI may permanently upload itself to a mech, ejecting any pilots. Malf AIs will still lose if they leave the Z-level, and the Malf will be gibbed if the mech is destroyed - they cannot be carded out of the mech or shunt to an APC.
  • -
-

Iamgoofball updated:

-
    -
  • Blobs can no longer have Morphine as their chemical.
  • -
-

duncathan updated:

-
    -
  • Heat exchangers now update their color to match that of the pipe connected to them.
  • -
  • Heat exchangers are on longer dense.
  • -
- -

20 June 2015

-

Dorsisdwarf updated:

-
    -
  • Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default
  • -
  • Nuke Ops can now buy team grab-bags of bulldog ammo at a discount.
  • -
-

Ikarrus updated:

-
    -
  • Wearing your gang's outfit now increases influence and shortens takeover time faster.
  • -
  • Added several more options for gang outfits
  • -
  • Pinpointers will now point at active dominators.
  • -
  • Gang outfits are now slightly armored
  • -
  • Gang tags are now named 'graffiti' to make them harder to detect
  • -
  • Initial takeover timer is now capped at 5 minutes (50% control)
  • -
  • Server Operators: The default Delta Alert texts have changed. Please check if your game_options.txt is up to date.
  • -
  • Loyalty implants now treat gangs as it treats cultists. Implants can no longer deconvert gangsters, but it can still prevent recruitments.
  • -
  • Replaced tommy guns with 9mm 2-burst 32 mag uzis that costs 40 influence. Unlike tommy guns gangs will be able to purchase ammo for uzis.
  • -
-

Jordie0608 updated:

-
    -
  • For Admins: Jump-to-Mob (JMP) notification command replaced with Follow (FLW).
  • -
  • Message and Follow links added to many notifications.
  • -
  • New buttons to toggle nuke and set security level.
  • -
  • Flamethrowers are logged in attack_log.
  • -
-

Thunder12345 updated:

-
    -
  • Combat shotguns are now semi automatic, and will be pumped automatically after firing.
  • -
  • Combat shotgun capacity has been reduced to six shells.
  • -
-

Xhuis updated:

-
    -
  • You will now trip over securitrons if you run over them whilst they are chasing a target.
  • -
  • An admin-spawnable drone dispenser has been added that will automatically create drone shells when supplied with materials.
  • -
  • Airlock charges are available to traitors and will cause a lethal explosion on the next person to open the door.
  • -
  • Nuclear operatives can now buy drum magazines for their Bulldog shotguns filled with lethal poison-filled darts.
  • -
  • When a malfunctioning AI declares Delta, all blue tiles in its core will begin flashing red.
  • -
  • Back-worn cloaks have been added for all heads except the HoP. LARPers rejoice!
  • -
  • More suicide messages have been added for a few items.
  • -
- -

18 June 2015

-

AnturK updated:

-
    -
  • Added new photo-over-pda function. Apply the photo to PDA to send it with your next message!
  • -
-

Ikarrus updated:

-
    -
  • Department Management consoles have been added to Head of Staff offices. These will enable heads to modify ID's access to their department, as well as preform demotions.
  • -
-

Miauw updated:

-
    -
  • Bullets can now damage cameras.
  • -
  • Camera alarms now trigger 90 seconds after the first EMP pulse, instead of when all EMP pulses run out.
  • -
  • Makes the force required to damage cameras greater than or equal to ten instead of greater than ten.
  • -
  • Camera alarms now trigger when cameras are disabled with brute force or bullets.
  • -
-

Xhuis updated:

-
    -
  • Nanotrasen scientists have determined that a delaminating supermatter shard combining with a gravitational singularity is an extremely bad idea. They advise keeping the two as far apart as possible.
  • -
-

phil235 updated:

-
    -
  • Nerfed the xray gun. Its range is now 15 tiles.
  • -
- -

15 June 2015

-

Incoming5643 updated:

-
    -
  • Lizards can now choose from a wide varity of physical appearances in character creation! Sprites made by WJohn. Hiss Responsibly.
  • -
-

Kor updated:

-
    -
  • A terrible new creature stalks the halls of SS13.
  • -
  • The wizard has a new artefact related to said creature.
  • -
  • Added a new sepia slime plasma reaction. Try it out!
  • -
-

spasticVerbalizer updated:

-
    -
  • Drones can now properly quick-equip.
  • -
- -

14 June 2015

-

Ikarrus updated:

-
    -
  • White suits added to gang outfits
  • -
  • Gang outfits are now free, but are now limited in stock (that replenishes over time)
  • -
  • While attempting a Hostile Takeover, gangs do not gain influence. Instead, the takeover timer will be reduced by how many territories they control.
  • -
  • Spraycan cost reduced to 5 influence.
  • -
  • Recruitment Pen cooldown increased to 2 minutes, but is reduced if the enemy gang has more members than yours.
  • -
  • Tommy guns no longer deal stamina damage.
  • -
  • Gangtools can no longer recall the shuttle if the game mode is not Gang War
  • -
- -

12 June 2015

-

Ikarrus updated:

-
    -
  • Gang Updates
  • -
  • New objective: To win, Gangs must now buy a Dominator machine (50 influence) and defend it for a varying time frame.
    * The location of the dominator is broadcasted to the entire station the moment it is activated
    * The more territories the gang controls, the less time it will take
    * Gangs no longer win by capturing territories
  • -
  • A choice of gang outfits are now purchasable for 1 influence each
  • -
  • Thompson SMGs aka "tommy guns" are now purchasable for 50 influence
  • -
  • Bulletproof armor vests are now purchasable for 10 influence
  • -
  • Gang messages are now free to send
  • -
  • Prices of pistols and pens reduced to 20 and 30, respectively
  • -
  • Gang spraycans have been made a lot less obvious. They look nearly identical to regular ones, now.
  • -
  • Gangs will no longer be notified how much territory the enemy controls
  • -
-

Incoming5643 updated:

-
    -
  • Growing tired of reports of slain members, the Wizard Federation has cautiously sactioned the dark path of lichdom. Beware of the powerful lich who hides his phylactery well, for he is immortal!
  • -
  • The trick to defeating liches is to destroy either their body or their phylactery item before they can ressurect to it. The more a lich is slain the longer it will take him to make use of his phylactery and the more likely the crew is to catch him during a vunerable moment.
  • -
  • Due to the addition of proper liching, skeletons as a choosable race from magic mirrors has been discontinued. My apologies to the powergamers. A special admin version of the mirror that allows for skeletons has also been added to the code.
  • -
-

Miauw updated:

-
    -
  • AIs have received several minor nerfs in order to increase antagonist counterplay:
  • -
  • AI tracking is no longer instant, it takes an amount of time that increases with distance from the AI eye, up to 4 seconds. The AI detector item will light up when an AI begins tracking.
  • -
  • A random camera failure event has been added, which will break one or two random cameras.
  • -
  • You can no longer keep tracking people that are outside of your camera vision.
  • -
  • Camera wires have been removed. Screwdriver a camera to open the panel, then use wirecutters to disable it or a multitool to change the focus.
  • -
  • You can now hit cameras with items to break them. To repair a camera, simply open the panel and use wirecutters on it.
  • -
  • Camera alerts now only happen after a camera is reactivated.
  • -
-

RemieRichards updated:

-
    -
  • New optional explosion effect ported from /vg/'s DeityLink, Explosions that are affected by Walls and Doors
  • -
- -

11 June 2015

-

Cheridan updated:

-
    -
  • Removes the powerdrain for individiual active modules on cyborgs.
  • -
- -

09 June 2015

-

Aranclanos updated:

-
    -
  • Structures and machines can now be built on shuttles.
  • -
-

Iamgoofball updated:

-
    -
  • Adds the Bluespace Rapid Part Exchange Device: holds up to 400 stock parts and can be used to upgrade machines at range without needing to open their maintenance panel.
  • -
  • A new tier of stock parts have been added, they're very expensive to produce but provide ample improvements.
  • -
  • Many machines can now also be upgraded.
  • -
  • Emitter: Lasers decrease firing delay and Capacitors decrease power consumption.
  • -
  • Gibber: Matter Bins increase yield of meat and Manipulators speed up operation time, at high level can gib creatures with clothes.
  • -
  • Seed Extractor: Matter Bins increase storage and Manipulators multiply seed production.
  • -
  • Monkey Recycler: Matter Bins increase the amount of monkey cubes produced and Manipulators reduce the monkey-to-cubes ratio to a minimum of 1-to-1.
  • -
  • Crusher: Matter Bins increase material yield and Manipulators increase chance to yield materials, at high level there is a chance for rarer materials.
  • -
  • Holopad: Capacitors increase an AI's traversal range from the holopad.
  • -
  • Smartfridge: Matter Bins increase storage.
  • -
  • Processor: Matter Bins increase yield and Manipulators speed up operation time.
  • -
  • Microwave: Matter Bins increase storage.
  • -
  • Ore Redemption Machine: Matter Bins increase yield per ore, Lasers increase points per ore and Manipulators speed up operation time.
  • -
  • Hydroponics Tray: Manipulators improve water and nutrients efficiency.
  • -
  • Biogenerator: Matter Bins increase storage.
  • -
-

bananacreampie updated:

-
    -
  • Added several new options to the ghostform sprites
  • -
- -

08 June 2015

-

AnturK updated:

-
    -
  • Improved the interface of Spellbooks.
  • -
-

Cheridan updated:

-
    -
  • Push-force from Atmospherics now depends on an entity's weight, heavier objects are less prone to being pushed.
  • -
  • Magboots and No-Slip shoes now prevent pushing from spacewind.
  • -
-

Firecage updated:

-
    -
  • Protolathes can now build Experimental Welding Tools.
  • -
- -

07 June 2015

-

Aranclanos updated:

-
    -
  • Malfunctioning AIs can preview placement of a Robotic Factory.
  • -
-

Iamgoofball updated:

-
    -
  • Bicardine, Dexalin, Kelotane, Anti-toxin, Inaprovaline and Tricordrazine have been re-added.
  • -
-

RemieRichards updated:

-
    -
  • Lizards can now wag their tails, emote *wag to start and *stopwag to stop.
  • -
-

kingofkosmos updated:

-
    -
  • Mops can now be wet from normal buckets and sinks.
  • -
- -

06 June 2015

-

Incoming5643 updated:

-
    -
  • Antagonists with escape alone can now escape with others on the shuttle, so long as they are also antagonists.
  • -
  • Antagonists with escape alone can also win if non-antagonists are on the shuttle provided they are locked in the brig.
  • -
  • Escaping to syndicate space on board the nuke op shuttle is now a valid way to escape the station.
  • -
-

Jordie0608 updated:

-
    -
  • Admin-delaying the round now works once it has finished.
  • -
- -

05 June 2015

-

CandyClown updated:

-
    -
  • Ointments, bruise packs, and gauze are now stacked to 6 instead of 5.
  • -
-

CorruptComputer updated:

-
    -
  • Security lockers no longer spawn in front of each other on Box.
  • -
  • Hooked up the scrubbers in QM's office on Box.
  • -
  • Fixed bar disposals on Box
  • -
  • Fixed the stacked heater+freezer in expirementor maint on Box
  • -
  • Made the turbine into Atmos and Engineering access only, and renamed the doors to Turbine on Box.
  • -
-

Ikarrus updated:

-
    -
  • Gang Bosses will now be able to discreetly send messages to everyone in their gang for 5 influence a message.
  • -
  • Conversion pens now use a flat 60sec cooldown rate.
  • -
-

KorPhaeron updated:

-
    -
  • You can now lay tiles on the asteroid. Go nuts building forts.
  • -
- -

04 June 2015

-

Cuboos updated:

-
    -
  • Added casting and firing sounds for wizard spells and staves.
  • -
  • A new title theme has been added.
  • -
-

Gun Hog updated:

-
    -
  • Nanotrasen has approved the designs for destination taggers and hand labelers in the autolathe.
  • -
-

Palpatine213 updated:

-
    -
  • Allows sechuds to have their id locks removed via emag as well as EMP
  • -
- -

31 May 2015

-

duncathan updated:

-
    -
  • Clarified the ability to retract changeling armblades.
  • -
- -

30 May 2015

-

duncathan updated:

-
    -
  • Fixes passive gates not auto-coloring.
  • -
-

spasticVerbalizer updated:

-
    -
  • Players trying to speak but unable to will now get a message.
  • -
- -

26 May 2015

-

CosmicScientist updated:

-
    -
  • Corrected wording for the pAI, donksoft riot darts and some tip of the round tips.
  • -
-

xxalpha updated:

-
    -
  • Fixed changeling revival.
  • -
- -

25 May 2015

-

spasticVerbalizer updated:

-
    -
  • Glass airlocks can now be made heat-proof by using a sheet of reinforced glass to create the window, regular glass creates a normal glass airlock.
  • -
-

xxalpha updated:

-
    -
  • You can no longer drop items inside mechas nor machinery (this includes gas pipes, disposal pipes, cryopods, sleepers, etc.).
  • -
  • Fixed exploit of changelings being able to keep thermal vision after resetting their powers.
  • -
  • Fixed being able to implant NODROP items with cavity implant surgery.
  • -
- -

22 May 2015

-

Jordie0608 updated:

-
    -
  • Smothering someone with a damp rag when in harm intent will apply reagents onto them, for acid-burning their face; otherwise it will inject them, for drugging with chloral hydrate.
  • -
  • The healthdoll is now blue when at full health to make it more clear when a body part is injured.
  • -
- -

20 May 2015

-

xxalpha updated:

-
    -
  • Added three drone shells to the derelict.
  • -
- -

16 May 2015

-

MartiUK updated:

-
    -
  • Fixed a typo when cleaning a Microwave.
  • -
  • Fixed a typo when burning someone with a lighter.
  • -
- -

15 May 2015

-

xxalpha updated:

-
    -
  • Fixed emitter beams not being reflectable.
  • -
- -

13 May 2015

-

Firecage updated:

-
    -
  • Kudzu is now admin-logged in Investigate.
  • -
-

GunHog updated:

-
    -
  • Positronic brains are now entered by clicking on an empty one, in the same manner as drones.
  • -
  • Ghosts are alerted when a new posibrain is made.
  • -
-

Jordie0608 updated:

-
    -
  • Borg reagent containers (beakers, spraybottles, shakers etc.) are no longer emptied when stowed.
  • -
  • Fixes North and West Mining Outposts having empty SMESs.
  • -
  • Aliens and slimes can smash metal foam again.
  • -
  • Deconstructing reinforced walls no longer creates additional rods out of nowhere.
  • -
  • Pepperspray now has inhand sprites.
  • -
-

Xhuis updated:

-
    -
  • Fixes the recipe for pneumatic cannons; it now only requires a wrench, 4 metal, 2 pipes and 8 package wrappers .
  • -
- -

11 May 2015

-

Firecage updated:

-
    -
  • New icons for Industrial and Experimental welding tools.
  • -
-

Gun Hog updated:

-
    -
  • The power mechanic for mining drills and the jackhammer has been removed. They no longer require cells or recharging.
  • -
  • The diamond drill upgrade for mining cyborgs has been fixed.
  • -
-

Xhuis updated:

-
    -
  • Adds the pneumatic cannon, attach an air tank and shoot anything out of it.
  • -
  • Improvised pneumatic cannons can be tablecrafted with a wrench, 4 metal, 2 pipes, a pipe manifold, a pipe valve and 8 package wrappers.
  • -
-

spasticVerbalizer updated:

-
    -
  • False walls no longer stackable.
  • -
- -

10 May 2015

-

AnturK updated:

-
    -
  • Fixed borg's cells draining much faster than they're meant to.
  • -
-

Gun Hog updated:

-
    -
  • Station bot performance greatly increased.
  • -
  • Captain PDA cartridge now includes nearly all utilities and functions, including signaller and all bots! HoP now has janitor and quartermaster functions! The RD and Roboticists now have access to Floor, Clean, and Medibots!
  • -
  • Bot access on PDA is now one button across all PDAs. You will only see what bots you can access, however.
  • -
  • Cartridges that include a signaller have been improved so they will work on a larger frequency range.
  • -
  • All bots now have Robotics access, so they may be set to patrol and released once constructed.
  • -
  • Roboticists now have access to bot navigation beacons. They are found under the floor tiles as patrol route nodes.
  • -
- -

09 May 2015

-

Firecage updated:

-
    -
  • Increased the manifestation chance of super powers.
  • -
-

Ikarrus updated:

-
    -
  • Loyalty implants will no longer survive deconverting a gangster. Security now needs to use two of them if they want the permanent effects: The first to deconvert them, and the second to make them loyal.
  • -
-

KorPhaeron updated:

-
    -
  • Slime mutation chance now starts at 30%.
  • -
  • Baby slimes have a -5% to 5% difference of their parent's mutation chance, allowing you to breed slimes that are more likely to mutate.
  • -
  • Plasma and epinephrine no longer affect mutation chance of slimes.
  • -
  • Red slime extract and plasma makes a potion that can increase mutation chance, Blue slime extract and plasma potions will decrease it.
  • -
- -

08 May 2015

-

Firecage updated:

-
    -
  • Mobs can now be buckled to operating tables.
  • -
-

Gun Hog updated:

-
    -
  • Top scientists at Nanotrasen have made strong progress in Artificial Intelligence technology, and have completed a design for replicating a human mind: Positronic Brains. Prototypes produced on your research station should be compatible with all Man-Machine Interface compliant machines, be it Mechs, AIs, and even Cyborg bodies. Please note that Cyborgs created from artificial brains are called Androids.
  • -
  • The pAI role preference and related jobbans have been renamed to properly reflect that they are not soley for pAI, but include drones and positroinc prains.
  • -
-

astralenigma updated:

-
    -
  • Cargo packages are now delivered with their manifests taped to the outside. Click on them with an open hand to remove them.
  • -
-

optimumtact updated:

-
    -
  • Machine frame and girder deconstruction now uses a screwdriver instead of welding tool.
  • -
- -

07 May 2015

-

Xhuis updated:

-
    -
  • Emagged defibrillators will now do burn damage and stop the patient's heart if used in harm intent.
  • -
  • The previous stunning functionality of the emagged defibrillator has been moved to disarm intent.
  • -
-

phil235 updated:

-
    -
  • Temperature effects from frost oil and capsaicin reagents and basilisk have been buffed to be significant again.
  • -
-

xxalpha updated:

-
    -
  • Hulks can now break windoors.
  • -
- -

06 May 2015

-

Jordie0608 updated:

-
    -
  • Borgs can now open lockers with the 'Toggle Open' verb.
  • -
-

Thunder12345 updated:

-
    -
  • Severed the cryo tube's connection to the spirit world. Ghosts will no longer be able to eject people from cryo. Please report further instances of poltergeist activity to your local exorcist.
  • -
-

Xhuis updated:

-
    -
  • Many minor technical changes have been made to cult.
  • -
  • Cultist communications now show the name of the person using them. Emergency communications do not do this.
  • -
  • Emergency communication does less damage.
  • -
-

xxalpha updated:

-
    -
  • Engineering cyborgs can now pick their cable coil color whenever they want.
  • -
- -

05 May 2015

-

Firecage updated:

-
    -
  • Golems and skeletons no longer fall over when stepping on shards.
  • -
-

Gun Hog updated:

-
    -
  • Mining borg diamond drill upgrade now functional.
  • -
-

Ikarrus updated:

-
    -
  • Doubled the initial charge of SMESs in Engineering.
  • -
  • Influence cap for gangs has been increased.
  • -
-

incoming5643 updated:

-
    -
  • All modes now select their antagonists before job selection, this means that a player who prefers roles normally immune to being certain antagonists (implanted roles/silicons) can still have a fair shot at every antagonist roll they opt into. If they're selected they simply will not end up with an incompatible job.
  • -
  • As an example if someone loved to play Head of Security (humor me here) and had it set to high, and the only other jobs he had set were security officer at medium and botanist at low but he was selected to be a traitor, he would spawn as a botanist even if there ended up being no Head of Security.
  • -
  • Please give playing security another chance if you'd written it off because it affected your antag chances.
  • -
-

xxalpha updated:

-
    -
  • Hulks can now break windoors.
  • -
  • Fixed smoking pipe messages. Fixed emptying a smoking pipe with nothing in it.
  • -
- -

04 May 2015

-

Firecage updated:

-
    -
  • Emagged windoors can now be deconstructed.
  • -
-

RemieRichards updated:

-
    -
  • Adds Plasmamen, a species that breathes plasma and bursts into flames if they don't wear special suits.
  • -
  • New burning icon for all humanoid mobs.
  • -
  • New sprite for Skeletons to match Plasmamen.
  • -
-

oranges updated:

-
    -
  • Thanks to recent advances in fork science, you no longer need to aim at your eyes to eat the food off a fork
  • -
-

xxalpha updated:

-
    -
  • Adds a new barsign: 'The Net'.
  • -
- -

03 May 2015

-

AnturK updated:

-
    -
  • Abductors can purchase spare gear with experimentation points.
  • -
-

Ikarrus updated:

-
    -
  • Admins can now adjust the pre-game delay time.
  • -
-

MrStonedOne updated:

-
    -
  • MasterController and subsystem rejiggering!
  • -
  • The MC can now dynamcially change the rate a subsystem is triggered based on how laggy it's being. This has been applied to atmos to allow for faster air processing without lagging the server
  • -
  • Pipes and atmos machinery now processes in tune with air, rather than seperately.
  • -
  • Fixed hotspots and fire causing more lag than they needed to
  • -
  • Fixed some objects not getting garbage collected because they didn't properly clear references in Destory()
  • -
  • The qdel subsystem will now limit its processing time to a 5th of a second each tick to prevent lag when a lot of deletes happen
  • -
  • Fixed the ticker not showing a tip of the round if an admin forces the round to start immediately
  • -
- -

02 May 2015

-

Boggart updated:

-
    -
  • Cryo tubes can no longer be used for ventcrawling.
  • -
-

Ikarrus updated:

-
    -
  • Admins can choose the strength and size of Centcom teams to send, ranging from officials to deathsquads, with the 'Make Centcom Respone Team' button.
  • -
-

phil235 updated:

-
    -
  • Space carps can no longer knock down anyone, but they now deal additional stamina damage to humans.
  • -
  • Radiation effects from uranium walls are nerfed to the level of uranium floor.
  • -
  • You can no longer put an inactive MMI in a cyborg shell. Ghosted brains now get an alert when someone puts their brain in a MMI. You can now examine the MMI to see if its brain is active.
  • -
- -

01 May 2015

-

Ikarrus updated:

-
    -
  • Gang bosses can now rally their gang to their location with their gangtool.
  • -
  • Gangtools can no longer recall the shuttle if station integrity is lower than 70%
  • -
  • Removed requirement to be in the territory to tag it.
  • -
  • Recruitment Pen cost reduced to 40.
  • -
  • Communications console should now accurately print the (lack of a) location of the last shuttle call.
  • -
-

Xhuis updated:

-
    -
  • Revenants will no longer spawn without admin intervention. They are pending a remake.
  • -
- -

30 April 2015

-

Fayrik updated:

-
    -
  • Ported NanoUI to most atmospherics equipment.
  • -
-

TheVekter updated:

-
    -
  • Hooch is now made with 2 parts Ethanol, 1 part Welder fuel and 1 part Universal Enzyme as a catalyst.
  • -
  • No-slip shoes are paintable, painting them doesn't remove no-slip properties.
  • -
- -

29 April 2015

-

AndroidSFV updated:

-
    -
  • Dehydrated carp now are friendly to both the imprinter of the plushie as well as any coded-in allies (I.E. Nuke Ops team), and unfriendly to carp of other origin othan than yourself or your coded-in allies. Dehydrated carp that are not imprinted will still have the same behavior as regular carp.
  • -
-

AnturK updated:

-
    -
  • Advanced cameras now have all functionality of the abductor consoles.
  • -
  • Pinpoint teleportation takes 8 seconds and spawns a flashy silhouette at the target location. Can be used as distraction since it appears even if teleporter is empty.
  • -
  • Abductors are now immune to viruses.
  • -
  • Dissection surgery ignores clothes.
  • -
  • Non-abductors can escape the ship by fiddling with consoles enough.
  • -
  • Three new negative glands.
  • -
  • Bloody glands spray blood everywhere and injure the host.
  • -
  • Bodysnatch glands turn the host into a cocoon that hatches doppelgangers.
  • -
  • Plasma glands cause the host to explode into a cloud of plasma.
  • -
-

GoonOnMoon updated:

-
    -
  • Added a new assault rifle to the game for use by Nanotrasen fighting forces in special events. Also happens to be available in the Liberation Station vending machine and the summon guns spell usable by the wizard and badminnery.
  • -
-

Iamgoofball updated:

-
    -
  • Acid blob has been removed.
  • -
  • Charcoal and Silver Sulf are more powerful now.
  • -
  • Styptic power and Silver Sulf metabolize at the default rate.
  • -
-

Ikarrus updated:

-
    -
  • Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as grafiti.
  • -
  • Influence income changed to provide weaker gangs a bigger boost, while slowing down stronger gangs to promote opportunity for comebacks.
  • -
  • Gangs only earn influence on territories they have held on to since the previous Status Report (the income calculation every 5 minutes). This places more significance on defending your existing territory.
  • -
  • You must be in the territory physically to tag it now. So no more tagging everything from maint.
  • -
  • Gang income delay reduced to 3 minutes intervals.
  • -
  • Gang Capture goal reduced to 50%
  • -
  • Gang spraycan use increased to 20
  • -
  • Gang Boss icon is now a red [G] icon to make it stand out better from regular gang icons
  • -
-

JJRcop updated:

-
    -
  • TED's kill duration has been halved.
  • -
  • Escaping from the TED's field no longer kills you.
  • -
-

RemieRichards updated:

-
    -
  • Adds Easels and canvases for custom drawings.
  • -
  • Place a canvas on an easel and draw on it with crayons, clean one pixel with a rag or soap and activate it in-hand to erase the whole canvas.
  • -
  • Ports VG's Ventcrawling overhaul!
  • -
  • Crawling through vents is no longer instant, you now have to move and navigate manually
  • -
  • While inside pipes and other atmos machinery, you now see pipe vision
  • -
-

phil235 updated:

-
    -
  • Podplants are no longer unharvestable.
  • -
  • Choosing your clown, mime, cyborg and AI name as well as religion and deity is now done in the preferences window. As a chaplain , your bible's icon is now chosen by clicking the bible.
  • -
- -

25 April 2015

-

Boggart updated:

-
    -
  • Generalizes handheld instrument code and Ports Nienhaus's guitar, sounds by BartNixon of Tau Ceti.
  • -
  • Fixes being unable to build disposal pipes on walls, makes changing the RPD's settings not affect pipes that are currently building, makes the RPD use the datum/browser ui, makes it use categories and makes it show the selected mode.
  • -
-

Gun Hog updated:

-
    -
  • Nanotrasen has provided designs for fabrication of APC power control modules. You may print them at any autolathe.
  • -
-

Ikarrus updated:

-
    -
  • Gangs can now purchase switchblades, a relatively cheap and decently robust melee weapon.
  • -
  • Gangs now require at least 66% control of the station to win.
  • -
  • Gang spraycan uses reduced to 15.
  • -
  • Pistol cost increased to 30 Influence
  • -
  • Promotions now start off cheap at 20 influence but get more expensive the more people you promote.
  • -
-

Xhuis updated:

-
    -
  • Added a Create Antagonist button for revenants.
  • -
  • Removed Mind Blast.
  • -
  • Revenants no longer get killed by explosions.
  • -
  • Mind spike cooldown increased to 4 seconds.
  • -
  • Harvest now takes 8 seconds and requires you to be adjacent to the target.
  • -
  • Hypnotise sleeps targets for longer.
  • -
  • Revenant now starts with 3 strikes.
  • -
-

phil235 updated:

-
    -
  • Telecom machines are now deconstructed the same way as all other constructable machines.
  • -
  • You can no longer overdose on nicotine but you can get addicted (very mild effects).
  • -
- -

22 April 2015

-

Incoming5643 updated:

-
    -
  • Adds a new fun button for admins: 'Set Round End Sound'. You can use the set round end sound button to set the round end sound. Glad we cleared that up!
  • -
-

Miauw62 updated:

-
    -
  • Very slightly expanded atmos and added an external airlock.
  • -
-

Xhuis updated:

-
    -
  • A few issues have been fixed for revenants. In addition, the Mind Blast/Mind Spike sound effect has been removed.
  • -
  • Adds the Hypnotize ability to revenants. It will cause a target to fall asleep after a short time.
  • -
-

xxalpha updated:

-
    -
  • Added an Exosuit Mining Scanner to the robotics fabricator.
  • -
  • Buffed Ripley's movement and drilling speed in low pressure environments.
  • -
- -

21 April 2015

-

Ikarrus updated:

-
    -
  • Gang mode has had some considerable work done on it, including a new objective and currency dynamic.
  • -
  • New objective: Claim half the station as territory by tagging it with spray cans supplied to gang bosses, but usable by any member.
  • -
  • An area can only be tagged by one gang at a time, remove your opponent's tag or spray over it.
  • -
  • New recruitment: Recruiment pens replace flashes, stab people to recruit them.
  • -
  • Recruitment is silent, but causes brief seizures and has a cooldown that scales upwards with a gang's size.
  • -
  • New tool: The Gangtool is used by bosses and lieutenants to recall the shuttle and purchase supplies.
  • -
  • Pistols, ammo, spraycans, recruitment pens and additional gangtools can all be bought.
  • -
  • Gangtools also alert the user of promotions, purchases and territory changes within the gang.
  • -
  • Lieutenants are promoted from gang members when given their own gangtool; they're immune to deconversion and able to do anything a boss can except promotion.
  • -
  • New currency: Influence is used to purchase with the gangtool and is generated every 5 minutes by each territory owned by the gang.
  • -
  • Thermite can be cleaned off walls now.
  • -
- -

20 April 2015

-

Fayrik updated:

-
    -
  • Abductors now get advanced camera consoles.
  • -
  • Redesigned Centcom again. There's a bar at the thunderdome now.
  • -
  • Headsets can now be locked to a spesific frequency, this only occurs for nuke ops and deathsquads.
  • -
  • The Centcom channel is now available over all z-levels, regardless of telecomms status.
  • -
  • The Deathsquad space suits have been upgraded to hardsuits.
  • -
  • The Deathsquad now have thermal imaging huds, which can swap which hud they display on the fly.
  • -
-

phil235 updated:

-
    -
  • Reagents are now back to being metabolized every tick. Fixes frost oil and capsaicin not working.
  • -
  • Fixes not being able to make sterilizine.
  • -
  • Adding overdose to space drug, causing mild hallucination and toxin and brain damage.
  • -
  • Nerfed healing power of stimulant reagent. Buffed ephedrine a bit.
  • -
  • Nitroglycerin can now be stabilized with stabilizing agent, and explodes when heated.
  • -
- -

19 April 2015

-

AnturK updated:

-
    -
  • Observers can now see abductor hivemind messages.
  • -
  • Adds advanced baton for abductors: Stun, Sleep and Cuff in one tool.
  • -
  • Abductor agents now have vest cameras.
  • -
  • New sprites for abductors and their gear made by Ausops.
  • -
-

Fayrik updated:

-
    -
  • Added jobban options for Abductors and Deathsquads.
  • -
  • Made admin antag spawning buttons more efficient and less prone to failure.
  • -
-

Xhuis updated:

-
    -
  • Recent sightings aboard space stations shows that spirits seem to be manifesting as malevolent revenants and draining the life of crew. The chaplain may be helpful in stopping this new threat.
  • -
-

kingofkosmos updated:

-
    -
  • Girder and machine frame construction protocols has been changed. They can now be secured/unsecured with a wrench and disassembled with a welder.
  • -
- -

16 April 2015

-

AnturK updated:

-
    -
  • Nanotrasen authorities are reporting sightings of unidentified space craft near space station 13. Report any strange sightings or mental breakdowns to central command.
  • -
  • PS : Abductions are not covered by health insurance.
  • -
  • Shadowlings and their thralls now have HUD icons.
  • -
  • Thralls learn their master's objectives when enthralled.
  • -
  • Regenerate Chitin ability lets shadowlings re-equip their armor if lost.
  • -
  • Loyalty implanted people take 25% longer to enthrall, but lose their implant and become immune to re-implanting.
  • -
  • Shadowlings now have a message in their spawning text which specifies that cooperation is mandatory.
  • -
  • Veil now works on equipped lights.
  • -
  • Shadowlings now take correct amount of burn damage and in light and heal clone and brain damage in darkness.
  • -
  • Fixes 'Round end code broke' displaying every round.
  • -
  • Shadowlings who ascend will nore greentext properly.
  • -
-

Gun Hog updated:

-
    -
  • Thinktronic Systems, LTD. has increased the Value of the Value-PAK PDA cartridge! Standard issue for Captain PDAs, it can now access security bots, medibots, cleanbots, and floorbots ALL AT ONCE! In addition, it can also connect to your station's Newscaster network at NO EXTRA CHARGE! As a Thank you for our contract with them, they have thrown in Newscaster access for the HumanResources9001 cartridge, Heads of Personnel rejoice!
  • -
  • The Newscaster app has also gotten a free upgrade which allows it to display images and comments inside of posts!
  • -
  • Nanotrasen has concurrently released a patch for bots which will allow off-station bots to properly patrol.
  • -
-

Incoming5643 updated:

-
    -
  • Changeling head slugs have been given player control, ventcrawling, and a short escape period after egg laying.
  • -
-

MrStonedOne updated:

-
    -
  • Admin ghosts can now drag ghosts to mobs to put that ghost in control of that mob.
  • -
-

Xhuis updated:

-
    -
  • Nanotrasen scientists have recently observed a strange genome shift in green slimes. Experiments have shown that injection of radium into an active green slime extract will create a very unstable mutation toxin. Use with caution.
  • -
- -

13 April 2015

-

AnturK updated:

-
    -
  • Spacemen have learned the basics of martial arts: Boxing, unleash it's power by wearing Boxing Gloves.
  • -
  • While boxing you can't grab or disarm, but you hit harder with a knockout chance that scales off stamina damage above 50.
  • -
  • Rumors have been heard of powerful martial styles avaliable only to the gods themselves.
  • -
-

CosmicScientist updated:

-
    -
  • Added a dehydrated space carp to traitor items, bought with telecrystals. Use dehydrated space carp in hand to school them on loyalty. Add water to create a vicious murder machine just for the halibut.
  • -
  • The toy carp plushie now has attack verbs for fun, hit your friend with one today. I put my sole into this mod.
  • -
  • If you can think of a better fish pun let minnow but I shouldn't leave it to salmon else.
  • -
-

Ikarrus updated:

-
    -
  • Gang bosses can no longer purchase certain potent traitor items but instead have access to some of a nuke op's arsenal of weapons.
  • -
-

Incoming5643 updated:

-
    -
  • Three new chemical types of blob can occur: Omnizine, Morphine and Space Drugs.
  • -
-

MrPerson updated:

-
    -
  • New lighting system! Lighting now smoothly transfers from one lighting level to the next.
  • -
-

Xhuis updated:

-
    -
  • There have been... odd sighting in Space Station 13's sector. Alien organisms have appeared on stations 57, 23, and outlying.
  • -
  • Nanotrasen personnel have reason to believe that Space Station 13 is under attack by shadowlings. We have little intel on these creatures, but be on the lookout for odd behavior and dark areas. Use plenty of lights.
  • -
-

Zelacks updated:

-
    -
  • Defibs no longer have a minimum damage requirement for a successful revive. Patients will have 150 total damage on a successful revive.
  • -
  • Additional feedback is given for several failure states of the defib.
  • -
-

xxalpha updated:

-
    -
  • Airlock crushing damage increased.
  • -
- -

11 April 2015

-

Gun Hog updated:

-
    -
  • Nanotrasen has approved an access upgrade for Cargo Technicians! They are now authorized to release minerals from the ore redemption machine, to allow proper inventory management and shipping.
  • -
-

Iamgoofball updated:

-
    -
  • Blobbernauts no longer deal chemical damage, brute damage increased however.
  • -
-

Ikarrus updated:

-
    -
  • Getting converted by a rev or cultist will stun you for a few seconds.
  • -
-

Incoming5643 updated:

-
    -
  • Fixes some AI malf powers being usable when dead.
  • -
-

MrPerson updated:

-
    -
  • Reduces movement speed penalty from being cold.
  • -
-

Xhuis updated:

-
    -
  • Adds a pizza bomb traitor item for 4 telecrystals. It's a bomb, diguised as a pizza box. You can also attempt to defuse it by using wirecutters.
  • -
-

kingofkosmos updated:

-
    -
  • Activating internals with an adjusted breath mask will automatically push it up to normal state.
  • -
  • Masks can now be adjusted when buckled to a chair.
  • -
-

optimumtact updated:

-
    -
  • Stun batons no longer lose charge over time when on.
  • -
-

phil235 updated:

-
    -
  • The AI holopads now use a popup window just like computers and other machines.
  • -
  • Nerfs kinetic accelerator and plasma cutters. Plasma cutter is no longer in the mining vendor. Reduces the drilling cost of all drills.
  • -
  • Adding 40+ new food and drink recipes, mostly using the newest plants. Notably rice recipes, burritos, nachos, salads, pizzas.
  • -
  • Opening the tablecrafting window can now also be done by dragging the mouse from any food (that's on a table) onto you.
  • -
  • The kitchen cabinet starts with one rice pack.
  • -
  • Glasses with unknown reagent will no longer be always brown but will take the color of their reagents.
  • -
- -

09 April 2015

-

Iamgoofball updated:

-
    -
  • Quite a lot of cleanables can now be scooped up with a beaker in order to acquire the contents.
  • -
  • Light a piece of paper on fire with a lighter, and scoop up the ashes!
  • -
  • Scoop up the flour the clown sprayed everywhere as a 'joke'!
  • -
  • Scoop up the oil left behind by exploding robots for re-usage in chemistry!
  • -
  • You can splash the contents of a beaker onto the floor to create a Chemical Pile! This pile can be heated or blown up and have the reagents take the effects. Make a string of black powder around a department in maint. and then heat it with a welder today!
  • -
  • Reagents now can have processing effects when just sitting in a beaker.
  • -
  • Pyrosium and Cryostylane now feed off of oxygen and heat/cool the beaker without having to be inside of a person!
  • -
  • Reagents can now respond to explosions!
  • -
  • Black Powder now instantly detonates if there is an explosion that effects it.
  • -
  • Fire now heats up beakers and their contents!
  • -
  • Activate some smoke powder in style by lighting the beaker on fire with a burning hot plasma fire!
  • -
-

RemieRichards updated:

-
    -
  • Ninja stars are summoned to your hand to be thrown rather than automatically targetting nearby mobs.
  • -
  • Added Sword Recall: pulls your katana towards you, hitting mobs in the way. Free if within sight, cost scales with distance otherwise.
  • -
  • Enemies can be electrocuted by a ninja as the cost of his energy, stunning and injuring them.
  • -
  • Removed SpiderOS, functions moved to status panel.
  • -
  • Fixed energy nets not anchoring target, katana emag spam and sound delay.
  • -
-

optimumtact updated:

-
    -
  • Mimes can't use megaphone without breaking their vow anymore.
  • -
-

phil235 updated:

-
    -
  • Flying animals no longer triggers mouse traps, bear traps or mines.
  • -
- -

04 April 2015

-

ACCount updated:

-
    -
  • Emergency welding tool added to emergency toolbox.
  • -
  • Changed industrial welding tool sprite.
  • -
  • Replaced welder in syndicate toolbox with industrial one.
  • -
  • All tools in syndicate toolbox are red. Corporate style!
  • -
  • Red crowbar is a bit more robust.
  • -
  • Fixed two bugs: welder icon disappearing and drone toolbox spawning with invisible cable coil.
  • -
-

AnturK updated:

-
    -
  • Picket signs: table crafted with a rod and two cardboard sheets, write on them with pen or crayon.
  • -
-

Cheridan updated:

-
    -
  • The bar's layout has been changed with a poker table and re-arranged seating.
  • -
-

Dannno updated:

-
    -
  • Added gun lockers for shotguns and energy guns. Click on the lockers with an item to close them if they're full.
  • -
-

Gun Hog updated:

-
    -
  • Nanotrasen research has finalized improvements for the experimental Reactive Teleport Armor. The armor is now made of a thinner, lightweight material which will not hinder movement. In addition, the armor shows an increase in responsiveness, activating in at least 50% of tests.
  • -
-

Incoming updated:

-
    -
  • The iconic blood-red hardsuits of nuke ops can now be purchased for a moderate sum of 8 TC by traitors.
  • -
-

Jordie0608 updated:

-
    -
  • Cyborg mining drills now use up their internal battery before drawing power from a borg's cell.
  • -
  • Fixes cyborg mining drills not recharging.
  • -
-

RemieRichards updated:

-
    -
  • Burning mobs will ignite others they bump into or when they are stepped on.
  • -
-

Xhuis updated:

-
    -
  • Malfunctioning AIs can no longer leave the station z-level. Upon doing this, they will fail the round.
  • -
  • Phazon exosuits now require an anomaly core as the final step in their construction.
  • -
-

xxalpha updated:

-
    -
  • Added Nutriment Pump, Nutriment Pump Plus and Reviver implants.
  • -
  • Added origin technologies to all implants.
  • -
  • The following implants are now much harder to obtain: X-ray, Thermals, Anti-Stun, Nutriment Pump Plus, Reviver.
  • -
  • Cauterizing a surgery wound will now heal some of the damage done by the bonesaw if it was used as part of the same surgery.
  • -
  • Added ability for Medical HUDs to detect cybernetic implants in humans.
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4fd3cb663bb..3d1210ce8b6 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4600,3 +4600,38 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: You can craft primitive gear from bone and sinew. coiax: - bugfix: Non-humans are now able to interact with bee boxes. +2016-04-25: + Joan: + - bugfix: You can once again hit a closet or crate with an item to open it. + Kor Razharas: + - rscadd: Adds support for autoclicking. + - rscadd: The Shock Revolver has been added to RnD. + - rscadd: The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick + to fire as you hold down the mouse. + - rscadd: The Research Director now starts with a box of firing pins. + - rscadd: The SABR and Stun Revolver recipes have been removed from RnD + coiax: + - rscadd: Laughter demons are like slaughter demons, but they tickle people to death + - tweak: Slaughter demons are no longer able to cast spells while phased. + - tweak: Wizards can now speak while ethereal, but still cannot cast spells while + ethereal. + - rscadd: 'Centcom''s "drone expert" reports that drones vision filters have been + upgraded to include the option of making all beings appear as harmless animals. + info: As always, all drone filters are togglable.' + - rscadd: As a sign of friendship between the Free Golems and Centcom, they have + modified Centcom's jaunter to be worn around a user's waist, which will save + them from falling to their death in a chasm. + - experiment: The Golems warn that these modifications have created a risk of accidental + activation when exposed to heavy electromagnetic fields. + - tweak: Renamed hivelord stabilizer to stabilizing serum. + - rscadd: Centcom regret to inform you that new instabilities with nearby gas giants + are causing exospheric bubbles to affect the telecommunications processors. + Please contact your supervisor for further instructions. + - rscadd: The Janitor's Union has mandated additional features to station light + replacer devices. + - rscadd: The light replacer now can be used on the floor to replace the bulbs of + any lights on that tile. + - rscadd: The light replacer now eats replaced bulbs, and after a certain number + of bulb fragments (four) will recycle them into a new bulb. + - tweak: The description of the light replacer is now more informative. + - rscadd: Clown mask appearance toggle now has an action button. diff --git a/html/changelogs/AutoChangeLog-pr-16940.yml b/html/changelogs/AutoChangeLog-pr-16940.yml deleted file mode 100644 index 1ab63958340..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16940.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Laughter demons are like slaughter demons, but they tickle people to death" - - tweak: "Slaughter demons are no longer able to cast spells while phased." - - tweak: "Wizards can now speak while ethereal, but still cannot cast spells while ethereal." diff --git a/html/changelogs/AutoChangeLog-pr-16974.yml b/html/changelogs/AutoChangeLog-pr-16974.yml deleted file mode 100644 index 26c9011ff0e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-16974.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: Kor Razharas -delete-after: True -changes: - - rscadd: "Adds support for autoclicking." - - rscadd: "The Shock Revolver has been added to RnD." - - rscadd: "The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse." - - rscadd: "The Research Director now starts with a box of firing pins." - - rscadd: "The SABR and Stun Revolver recipes have been removed from RnD" diff --git a/html/changelogs/AutoChangeLog-pr-17009.yml b/html/changelogs/AutoChangeLog-pr-17009.yml deleted file mode 100644 index 81dc53b9e65..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17009.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Centcom's \"drone expert\" reports that drones vision filters have -been upgraded to include the option of making all beings appear as harmless animals. -info: As always, all drone filters are togglable." diff --git a/html/changelogs/AutoChangeLog-pr-17053.yml b/html/changelogs/AutoChangeLog-pr-17053.yml deleted file mode 100644 index e8f61cf4668..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17053.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "As a sign of friendship between the Free Golems and Centcom, -they have modified Centcom's jaunter to be worn around a user's waist, -which will save them from falling to their death in a chasm." - - experiment: "The Golems warn that these modifications have created -a risk of accidental activation when exposed to heavy electromagnetic -fields." - - tweak: "Renamed hivelord stabilizer to stabilizing serum." diff --git a/html/changelogs/AutoChangeLog-pr-17054.yml b/html/changelogs/AutoChangeLog-pr-17054.yml deleted file mode 100644 index 8b8b5ff8e55..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17054.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Centcom regret to inform you that new instabilities with nearby -gas giants are causing exospheric bubbles to affect the -telecommunications processors. Please contact your supervisor for -further instructions." diff --git a/html/changelogs/AutoChangeLog-pr-17067.yml b/html/changelogs/AutoChangeLog-pr-17067.yml deleted file mode 100644 index 69d7d32a0f7..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17067.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "The Janitor's Union has mandated additional features to station -light replacer devices." - - rscadd: "The light replacer now can be used on the floor to replace -the bulbs of any lights on that tile." - - rscadd: "The light replacer now eats replaced bulbs, and after a certain -number of bulb fragments (four) will recycle them into a new bulb." - - tweak: "The description of the light replacer is now more informative." diff --git a/html/changelogs/AutoChangeLog-pr-17078.yml b/html/changelogs/AutoChangeLog-pr-17078.yml deleted file mode 100644 index fba30ec9bcd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17078.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Joan -delete-after: True -changes: - - bugfix: "You can once again hit a closet or crate with an item to open it." diff --git a/html/changelogs/AutoChangeLog-pr-17083.yml b/html/changelogs/AutoChangeLog-pr-17083.yml deleted file mode 100644 index ea4a2146270..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17083.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: coiax -delete-after: True -changes: - - rscadd: "Clown mask appearance toggle now has an action button." From 2f1b5d8fba4d518b2a32c32c14619e49fd323ceb Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 00:28:29 +0000 Subject: [PATCH 85/94] Automatic changelog generation for PR #17076 --- html/changelogs/AutoChangeLog-pr-17076.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17076.yml diff --git a/html/changelogs/AutoChangeLog-pr-17076.yml b/html/changelogs/AutoChangeLog-pr-17076.yml new file mode 100644 index 00000000000..6e2acc3ef64 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17076.yml @@ -0,0 +1,7 @@ +author: Joan +delete-after: True +changes: + - tweak: "Blobbernauts now spawn at half health." + - tweak: "Blobbernauts regeneration on blob is now 2.5 health per tick, from 5." + - tweak: "Blobbernauts now cost 40 resources to produce, from 30." + - rscdel: "Factories supporting blobbernauts do not spawn spores." From 7576665b1ade719c3af794868453e3c516a73c60 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 26 Apr 2016 00:32:24 +0000 Subject: [PATCH 86/94] Automatic changelog compile --- html/changelog.html | 98 ++-------------------- html/changelogs/.all_changelog.yml | 6 ++ html/changelogs/AutoChangeLog-pr-17076.yml | 7 -- 3 files changed, 15 insertions(+), 96 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17076.yml diff --git a/html/changelog.html b/html/changelog.html index e6e2ce06695..2dd16a891d2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,15 @@ -->
+

26 April 2016

+

Joan updated:

+
    +
  • Blobbernauts now spawn at half health.
  • +
  • Blobbernauts regeneration on blob is now 2.5 health per tick, from 5.
  • +
  • Blobbernauts now cost 40 resources to produce, from 30.
  • +
  • Factories supporting blobbernauts do not spawn spores.
  • +
+

25 April 2016

Joan updated:

    @@ -506,95 +515,6 @@
  • Honey buns and honey nut bars are now craftable using honey.
  • Brewing mead now requires actual honey.
- -

29 March 2016

-

Bawhoppen updated:

-
    -
  • Bruisepacks, ointment, and gauze now will apply significanty faster.
  • -
  • SWAT crates no longer contain combat knives.
  • -
  • SWAT crates now contain combat gloves.
  • -
  • Combat knives now can be ordered in their own crate.
  • -
-

Iamsaltball updated:

-
    -
  • GRAB SUPER NERFED
  • -
  • IT'S WAY EASIER TO ESCAPE GRABS NOW
  • -
  • IT TAKES WAY LONGER TO UPGRADE GRABS NOW
  • -
  • YOU CAN ACTUALLY FUCKING ESCAPE GRABS NOW TOO #WOW #WHOA
  • -
  • GRAB TEXT IS ALL BIG BOLD AND RED MUCH LIKE YOUR MOM LAST NIGHT
  • -
  • GIT GUDDERS GO FUCK YOURSELVES YOU CAN'T GET GOOD AGAINST "LOL INSTANT PERMASTUN THAT ISN'T OBVIOUS IN CHAT LIKE THE REST OF THE STUNS"
  • -
-

Joan updated:

-
    -
  • Ghost revival/body creation alerts now use the ghost's hud style.
  • -
  • Support holoparasites now have a healing effect with their color when successfully healing a target.
  • -
  • Ranged holoparasite projectiles now take on the color of the holoparasite.
  • -
  • Holoparasite communication(holo->summoner) now sends the message to all holoparasites the summoner has.
  • -
  • If you have multiple holoparasites for some reason, Reset Guardian allows you to choose which to reset.
  • -
  • Resetting a holoparasite also resets its color and name, to make it more obvious it's a new player.
  • -
  • Holoparasites can now see their summoner's health and various ability cooldowns from the status panel.
  • -
  • Blobbernauts are now alerted when their factory is destroyed.
  • -
-

KazeEspada updated:

-
    -
  • Blob Mobs no longer swap with other mobs.
  • -
-

RemieRichards updated:

-
    -
  • Added the ability to make Apiaries and Honey frames with wood
  • -
  • Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey
  • -
  • Added the ability to make more Queen Bees from Royal Bee Jelly by using it on an existing Queen, to split her into two Queens
  • -
  • Made homeless bees more obvious
  • -
  • Fixed a typo that made almost all bees homeless, severely reducing the odds of getting honeycomb
  • -
  • Made bee progress reports (50% towards new honeycomb, etc.) always show, even if it's 0%
  • -
  • Made some feedback text more obvious
  • -
  • Fixed being able to duplicate the bee holder object, this was not exploity, just weird
  • -
  • Fixed being able to put two (or more) queens in the same apiary
  • -
  • Fixed some runtimes from hydro code assuming a plant gene exists
  • -
  • Fixed runtime when you use a honeycomb in your hand
  • -
  • It now takes and uses 5u of a reagent to give a bee that reagent
  • -
  • Removed unused icon file
  • -
-

Ricotez updated:

-
    -
  • The default white ghost form now has directional sprites.
  • -
  • The default white ghost form now also has (your) hair! Here's how it works.
  • -
  • If you ghost from a body, you'll get the hair from that body. If it has hair.
  • -
  • If you hit Observe, you'll get the hair from the character you had active in your setup window. If they had hair.
  • -
  • This only works with the default white ghost form right now (because the other forms have the wrong shape or lack directional sprites), and with human bodies since they're the only ones that have hair. Sorry lizards and plasmamen! You'll get your turn next time.
  • -
  • A new preference called Ghost Accessories. This lets you configure if you want your ghost sprite to show both hair and directional sprites, only directional sprites or just use its original default version without directional sprites.
  • -
  • A new preference called Ghosts of Others. This preference is clientside and lets you configure how other ghosts appear to you: as their own setting, as the form they chose but without any hair or directional sprites, or as the simple white ghost sprite if you're sick of those premium users with their rainbow ghosts.
  • -
  • The layout of the ghost preference buttons has slightly changed. The old Choose Ghost Form and Choose Ghost Orbit are now a part of Ghost Customization, which also contains the new Ghost Accessories button. Clicking Ghost Customization will send you directly to Ghost Accessories if you don't have premium. The Preferences tab now also contains the Ghost Display button, which lets you configure how other ghosts appear to you.
  • -
  • Fixed a bug where the toggles for Ghost Accessories and Ghosts of Others in the Preferences menu wouldn't save your preference update to your save file.
  • -
  • Renamed the "Ghost Display Settings" preference toggle button to "Ghosts of Others", so it fits with the name the preference has everywhere else.
  • -
-

TehZombehz updated:

-
    -
  • Paper sacks are now craftable by tablecrafting with 5 sheets of paper.
  • -
  • Comes in 5 different designs: Use a pen on a paper sack to change the design.
  • -
  • Certain paper sack designs can be modified with a sharp object to craft a (creepy) paper sack hat.
  • -
-

Xhuis updated:

-
    -
  • Portal storm messages now use the station name rather than the world name.
  • -
  • Shadowlings can no longer glare while shadow walking.
  • -
  • Progress bars are now properly shown when reloading revolvers.
  • -
  • Cyborgs and AIs are no longer knocked out when being stuffed into lockers.
  • -
  • Plasmamen can no longer be the patient zero of the space retrovirus.
  • -
  • Cyborgs and AIs now properly display death messages.
  • -
  • Revenants can no longer be closed into lockers.
  • -
  • Airlocks no longer play sounds or flash lights when denying access if the airlock has no power.
  • -
  • Job spawn icons in mapping have been fixed.
  • -
  • Gibtonite's disarm message no longer include the outside viewer.
  • -
  • Cult walls and girders are now more streamlined and can be built with runed metal.
  • -
  • Positronic brains and MMIs can no longer see ghosts.
  • -
  • When someone is turned into a statue, the statue now appears as a greyscale version of them.
  • -
  • Returning from a statue to a human now knocks you down.
  • -
  • Flesh to Stone no longer works on dead mobs.
  • -
  • Wall-mounted flasher crates now have the proper price.
  • -
  • Wall-mounted flasher frames now have icons.
  • -
  • Upgraded resonators now have an inhand sprite.
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 3d1210ce8b6..822c5f31361 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4635,3 +4635,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. of bulb fragments (four) will recycle them into a new bulb. - tweak: The description of the light replacer is now more informative. - rscadd: Clown mask appearance toggle now has an action button. +2016-04-26: + Joan: + - tweak: Blobbernauts now spawn at half health. + - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. + - tweak: Blobbernauts now cost 40 resources to produce, from 30. + - rscdel: Factories supporting blobbernauts do not spawn spores. diff --git a/html/changelogs/AutoChangeLog-pr-17076.yml b/html/changelogs/AutoChangeLog-pr-17076.yml deleted file mode 100644 index 6e2acc3ef64..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17076.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Joan -delete-after: True -changes: - - tweak: "Blobbernauts now spawn at half health." - - tweak: "Blobbernauts regeneration on blob is now 2.5 health per tick, from 5." - - tweak: "Blobbernauts now cost 40 resources to produce, from 30." - - rscdel: "Factories supporting blobbernauts do not spawn spores." From f84b00441ac7ae0a04b65d2ed3c386e1ae38e360 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 03:35:45 +0000 Subject: [PATCH 87/94] Automatic changelog generation for PR #17101 --- html/changelogs/AutoChangeLog-pr-17101.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-17101.yml diff --git a/html/changelogs/AutoChangeLog-pr-17101.yml b/html/changelogs/AutoChangeLog-pr-17101.yml new file mode 100644 index 00000000000..b747e7cc3af --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17101.yml @@ -0,0 +1,4 @@ +author: TechnoAlchemisto +delete-after: True +changes: + - tweak: "Goliath plates can now be stacked." From 930f49589d411bb1af99493a1d414cc9d145fc6f Mon Sep 17 00:00:00 2001 From: TechnoAlchemist Date: Mon, 25 Apr 2016 21:01:31 -0700 Subject: [PATCH 88/94] nerfs bracers :( --- code/modules/clothing/gloves/miscellaneous.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 1a261f16d4a..6cf66684ab9 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -51,5 +51,5 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT burn_state = FIRE_PROOF - armor = list(melee = 60, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. + armor = list(melee = 15, bullet = 35, laser = 35, energy = 20, bomb = 35, bio = 35, rad = 35) //Not like anything ever hits the arms anyways. From 0aa0c39d9bc19ccdde69334d442859cec3598d3e Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Tue, 26 Apr 2016 04:07:49 +0000 Subject: [PATCH 89/94] Automatic changelog compile --- html/changelog.html | 4 ++++ html/changelogs/.all_changelog.yml | 2 ++ html/changelogs/AutoChangeLog-pr-17101.yml | 4 ---- 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-17101.yml diff --git a/html/changelog.html b/html/changelog.html index 2dd16a891d2..d9b0177b8df 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -63,6 +63,10 @@
  • Blobbernauts now cost 40 resources to produce, from 30.
  • Factories supporting blobbernauts do not spawn spores.
  • +

    TechnoAlchemisto updated:

    +
      +
    • Goliath plates can now be stacked.
    • +

    25 April 2016

    Joan updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 822c5f31361..78ff59445de 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -4641,3 +4641,5 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. - tweak: Blobbernauts now cost 40 resources to produce, from 30. - rscdel: Factories supporting blobbernauts do not spawn spores. + TechnoAlchemisto: + - tweak: Goliath plates can now be stacked. diff --git a/html/changelogs/AutoChangeLog-pr-17101.yml b/html/changelogs/AutoChangeLog-pr-17101.yml deleted file mode 100644 index b747e7cc3af..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17101.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: TechnoAlchemisto -delete-after: True -changes: - - tweak: "Goliath plates can now be stacked." From 0f0aa25976144682d38cbe982c210480435cba6a Mon Sep 17 00:00:00 2001 From: duncathan salt Date: Mon, 25 Apr 2016 23:44:06 -0600 Subject: [PATCH 90/94] fixes watcher sinew origin tech --- code/game/objects/items/stacks/sheets/leather.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 099ddd5bc78..e4f86b5ce89 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -133,7 +133,7 @@ var/global/list/datum/stack_recipe/xeno_recipes = list ( \ desc = "Long stringy filaments which presumably came from a watcher's wings." singular_name = "watcher sinew" icon_state = "sinew" - origin_tech = "bio=4" + origin_tech = "biotech=4" /* * Plates From dadae277cbbf43c2c5dd3ae0a3887f4f5c244fd3 Mon Sep 17 00:00:00 2001 From: Zuvassin Date: Tue, 26 Apr 2016 18:55:31 +1000 Subject: [PATCH 91/94] Adds champion armour to necro chests --- .../clothing/spacesuits/miscellaneous.dm | 13 +++++++++++++ .../mining/lavaland/necropolis_chests.dm | 3 ++- icons/mob/head.dmi | Bin 143251 -> 143601 bytes icons/mob/suit.dmi | Bin 291711 -> 294139 bytes icons/obj/clothing/hats.dmi | Bin 68694 -> 68915 bytes icons/obj/clothing/suits.dmi | Bin 95473 -> 96224 bytes 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index d03d7e169b5..48188b2764d 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -312,3 +312,16 @@ Contains: name = "inquisitor's helmet" icon_state = "hardsuit0-inq" item_state = "hardsuit0-inq" + +/obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker + name = "champion's hardsuit" + desc = "Voices echo from the hardsuit, driving the user insane." + icon_state = "hardsuit-beserker" + item_state = "hardsuit-beserker" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker + +/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal/beserker + name = "champion's helmet" + desc = "Peering into the eyes of the helmet is enough to seal damnation." + icon_state = "hardsuit0-beserker" + item_state = "hardsuit0-beserker" diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index a6fabeb90dc..b0b3ab28b58 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -38,7 +38,7 @@ if(11) new /obj/vehicle/lavaboat/dragon(src) if(12) - new /obj/item/upgradescroll(src) + new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker(src) if(13) new /obj/item/weapon/sord(src) if(14) @@ -68,6 +68,7 @@ new /obj/item/weapon/spellbook/oneuse/smoke(src) + //Spooky special loot /obj/item/device/wisp_lantern diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index c5de161057880b5fc72610903cb4e6c50b0a34a8..c434ad6a378b96032e02ed4a4cced2bc05b9ec15 100644 GIT binary patch delta 8803 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 wsYqi*np}2J@n$3(Cy0=}%m!W3vkcA|$$&JamW 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 Z6$Ki8oECMmrAgE2K6rS);-15+{{lTzX9NHM diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 77a3ec6f9edd757b3744e46ee695672b045d0e75..11f55cbc902e04bba4572b6af87e94417d8a37e6 100644 GIT binary patch delta 15111 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 OYAOnv@@2B-Z~qsCBJfE7 delta 12664 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 z

    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 b<0Z%0FKFX?J2AHhK%eId8uDeb=7IkQpP3-p delta 11233 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 YC)a`qH$hE42Egm7iYBZ=*&^is04|G;+5i9m delta 21629 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

    GwK)&_{skW;M$mWLw{+s${zcIe&D7ue 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 MRJ*TQq-^2)9|R3`(f|Me From 9b1512e0b1a50ce55b7f38764517de2aa293558b Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Tue, 26 Apr 2016 10:13:10 +0000 Subject: [PATCH 92/94] Automatic changelog generation for PR #16732 --- html/changelogs/AutoChangeLog-pr-16732.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-16732.yml diff --git a/html/changelogs/AutoChangeLog-pr-16732.yml b/html/changelogs/AutoChangeLog-pr-16732.yml new file mode 100644 index 00000000000..6f9aae5797a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16732.yml @@ -0,0 +1,5 @@ +author: Iamgoofball & Super Aggro Crag +delete-after: True +changes: + - tweak: "Fluorosulfuric Acid now has doubled acid power." + - experiment: "Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer." From 02b29f888a5956ded459f19a67300b7d9cf0204b Mon Sep 17 00:00:00 2001 From: erwgd Date: Tue, 26 Apr 2016 18:41:21 +0100 Subject: [PATCH 93/94] Prevents collapsing roller beds or grabbing chairs whilst incapacitated (#17074) * added if(usr.incapacitated) for grabbing a chair * added if(usr.incapacitated()) for collapsing a roller bed --- code/game/objects/structures/beds_chairs/bed.dm | 3 +++ code/game/objects/structures/beds_chairs/chair.dm | 3 +++ 2 files changed, 6 insertions(+) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index fc16964286d..0488755e685 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -69,6 +69,9 @@ return 0 if(buckled_mobs.len) return 0 + if(usr.incapacitated()) + usr << "You can't do that right now!" + return 0 usr.visible_message("[usr] collapses \the [src.name].", "You collapse \the [src.name].") new foldabletype(get_turf(src)) qdel(src) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 82218cdbd37..9950aa178c0 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -214,6 +214,9 @@ if(over_object == usr && Adjacent(usr)) if(!item_chair || !ishuman(usr) || buckled_mobs.len || src.flags & NODECONSTRUCT) return + if(usr.incapacitated()) + usr << "You can't do that right now!" + return usr.visible_message("[usr] grabs \the [src.name].", "You grab \the [src.name].") var/C = new item_chair(loc) usr.put_in_hands(C) From de5a21413231b78389e0387c2564fa074041e199 Mon Sep 17 00:00:00 2001 From: kevinz000 Date: Tue, 26 Apr 2016 10:49:11 -0700 Subject: [PATCH 94/94] Fixes detection multitool (#17011) * detectionfix * unnessacary_things_removal * Uranges --- code/game/objects/items/devices/multitool.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 2ec98bab769..bc65f1a0f12 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -31,7 +31,6 @@ var/track_cooldown = 0 var/track_delay = 10 //How often it checks for proximity var/detect_state = PROXIMITY_NONE - var/turf/our_turf var/rangealert = 8 //Glows red when inside var/rangewarning = 20 //Glows yellow when inside @@ -47,12 +46,12 @@ if(track_cooldown > world.time) return detect_state = PROXIMITY_NONE - our_turf = get_turf(src) multitool_detect() icon_state = "[initial(icon_state)][detect_state]" - track_cooldown = world.time + track_delay // 1 second + track_cooldown = world.time + track_delay /obj/item/device/multitool/ai_detect/proc/multitool_detect() + var/turf/our_turf = get_turf(src) for(var/mob/living/silicon/ai/AI in ai_list) if(AI.cameraFollow == src) detect_state = PROXIMITY_ON_SCREEN @@ -76,7 +75,8 @@ track_delay = 5 /obj/item/device/multitool/ai_detect/admin/multitool_detect() - for(var/mob/J in range(rangewarning,src)) + var/turf/our_turf = get_turf(src) + for(var/mob/J in urange(rangewarning,our_turf)) if(admin_datums[J.ckey]) detect_state = PROXIMITY_NEAR var/turf/detect_turf = get_turf(J)