From 351d1fabc9f098c33caa8c0ffea54b73c30f7ad7 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 07:15:19 -0400 Subject: [PATCH 01/37] Ratvarian Spears will stun cyborgs and cultists for twice as long --- code/game/gamemodes/clock_cult/clock_items.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_items.dm b/code/game/gamemodes/clock_cult/clock_items.dm index ee629dcc550..a53e0135e82 100644 --- a/code/game/gamemodes/clock_cult/clock_items.dm +++ b/code/game/gamemodes/clock_cult/clock_items.dm @@ -784,8 +784,8 @@ return var/mob/living/L = target if(issilicon(L) || iscultist(L)) - L.Stun(3) - L.Weaken(3) + L.Stun(6) + L.Weaken(6) break_spear(T) /obj/item/clockwork/ratvarian_spear/proc/break_spear(turf/T) From 9f9c1b4f8fdef524f877f2c149e0eef95d70ec9a Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Wed, 29 Jun 2016 04:39:46 -0700 Subject: [PATCH 02/37] VV now escapes name (because name could be an item in a list) --- code/datums/datumvars.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index f0da4d0a1e3..1d2bf99a418 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -354,10 +354,10 @@ body html += "
  • " if (isnull(value)) - html += "[name] = null" + html += "[html_encode(name)] = null" else if (istext(value)) - html += "[name] = \"[html_encode(value)]\"" + html += "[html_encode(name)] = \"[html_encode(value)]\"" else if (isicon(value)) #ifdef VARSICON @@ -365,9 +365,9 @@ body var/rnd = rand(1,10000) var/rname = "tmp\ref[I][rnd].png" usr << browse_rsc(I, rname) - html += "[name] = ([value]) " + html += "[html_encode(name)] = ([value]) " #else - html += "[name] = /icon ([value])" + html += "[html_encode(name)] = /icon ([value])" #endif /* else if (istype(value, /image)) @@ -382,19 +382,19 @@ body #endif */ else if (isfile(value)) - html += "[name] = '[value]'" + html += "[html_encode(name)] = '[value]'" else if (istype(value, /datum)) var/datum/D = value - html += "[name] \ref[value] = [D.type]" + html += "[html_encode(name)] \ref[value] = [D.type]" else if (istype(value, /client)) var/client/C = value - html += "[name] \ref[value] = [C] [C.type]" + html += "[html_encode(name)] \ref[value] = [C] [C.type]" // else if (istype(value, /list)) var/list/L = value - html += "[name] = /list ([L.len])" + html += "[html_encode(name)] = /list ([L.len])" if (L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500)) // not sure if this is completely right... @@ -414,7 +414,7 @@ body html += "" else - html += "[name] = [html_encode(value)]" + html += "[html_encode(name)] = [html_encode(value)]" html += "
  • " From 48fed3ecec492070e7afed868a459f817c09997a Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 08:11:23 -0400 Subject: [PATCH 03/37] Buffs Vitality Matrices --- .../gamemodes/clock_cult/clock_structures.dm | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index c0d4428e331..46c994d2228 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -846,8 +846,9 @@ affects_servants = TRUE stat_affected = DEAD var/vitality = 0 - var/base_revive_cost = 25 + var/base_revive_cost = 20 var/sigil_active = FALSE + var/animation_number = 3 //each cycle increments this by 1, at 4 it produces an animation and resets /obj/effect/clockwork/sigil/vitality/examine(mob/user) ..() @@ -864,9 +865,12 @@ sigil_active = TRUE //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality while(L && (!is_servant_of_ratvar(L) && L.stat != DEAD || (is_servant_of_ratvar(L) && vitality)) && get_turf(L) == get_turf(src)) - PoolOrNew(/obj/effect/overlay/temp/ratvar/sigil/vitality, get_turf(src)) + if(animation_number >= 4) + PoolOrNew(/obj/effect/overlay/temp/ratvar/sigil/vitality, get_turf(src)) + animation_number = 0 + animation_number++ if(!is_servant_of_ratvar(L)) - var/vitality_drained = L.adjustToxLoss(4) + var/vitality_drained = L.adjustToxLoss(1.5) if(vitality_drained) vitality += vitality_drained else @@ -880,14 +884,19 @@ var/total_damage = clone_to_heal + tox_to_heal + burn_to_heal + brute_to_heal + oxy_to_heal if(L.stat == DEAD) var/revival_cost = base_revive_cost + total_damage - oxy_to_heal //ignores oxygen damage - if(vitality >= revival_cost) - L.revive(1, 1) - L.visible_message("[L] suddenly gets back up, their mouth dripping blue ichor!", "\"Lbh jvyy or bxnl, puvyq.\"") - vitality -= revival_cost + var/mob/dead/observer/ghost = L.grab_ghost(TRUE) + if(ghost) + if(vitality >= revival_cost) + L.revive(1, 1) + playsound(L, 'sound/magic/Staff_Healing.ogg', 50, 1) + L.visible_message("[L] suddenly gets back up, their mouth dripping blue ichor!", "\"Lbh jvyy or bxnl, puvyq.\"") + vitality -= revival_cost + break + else break if(!total_damage) break - var/vitality_for_cycle = min(vitality, 8) + var/vitality_for_cycle = min(vitality, 3) if(clone_to_heal && vitality_for_cycle) var/healing = min(vitality_for_cycle, clone_to_heal) @@ -918,8 +927,9 @@ vitality_for_cycle -= healing L.adjustOxyLoss(-healing) vitality -= healing - sleep(8) + sleep(2) + animation_number = initial(animation_number) sigil_active = FALSE animate(src, alpha = initial(alpha), time = 20) visible_message("[src] slowly stops glowing!") From 5cfcb7dea3f908c8a6dd7ce024273ab7bc582b47 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 08:32:23 -0400 Subject: [PATCH 04/37] Clockwork structures now produce more sounds when hit --- code/game/gamemodes/clock_cult/clock_structures.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index c0d4428e331..c11b9097a45 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -103,6 +103,7 @@ /obj/structure/clockwork/bullet_act(obj/item/projectile/P) . = ..() visible_message("[src] is hit by \a [P]!") + playsound(src, P.hitsound, 50, 1) take_damage(P.damage, P.damage_type) /obj/structure/clockwork/proc/attack_generic(mob/user, damage = 0, damage_type = BRUTE) //used by attack_alien, attack_animal, and attack_slime @@ -112,26 +113,30 @@ take_damage(damage, damage_type) /obj/structure/clockwork/attack_alien(mob/living/user) + playsound(src 'sound/weapons/bladeslice.ogg', 50, 1) attack_generic(user, 15) /obj/structure/clockwork/attack_animal(mob/living/simple_animal/M) if(!M.melee_damage_upper) return + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) attack_generic(M, M.melee_damage_upper, M.melee_damage_type) /obj/structure/clockwork/attack_slime(mob/living/simple_animal/slime/user) if(!user.is_adult) return + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) attack_generic(user, rand(10, 15)) /obj/structure/clockwork/attacked_by(obj/item/I, mob/living/user) . = ..() if(I.force && takes_damage) - take_damage(I.force, I.damtype) playsound(src, I.hitsound, 50, 1) + take_damage(I.force, I.damtype) /obj/structure/clockwork/mech_melee_attack(obj/mecha/M) if(..()) + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) take_damage(M.force, M.damtype) /obj/structure/clockwork/cache //Tinkerer's cache: Stores components for later use. From 4119711c3f71178738921d5fa93b899b2ee2e1c7 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 08:44:56 -0400 Subject: [PATCH 05/37] , --- code/game/gamemodes/clock_cult/clock_structures.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index c11b9097a45..fc7c9ae7faf 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -113,7 +113,7 @@ take_damage(damage, damage_type) /obj/structure/clockwork/attack_alien(mob/living/user) - playsound(src 'sound/weapons/bladeslice.ogg', 50, 1) + playsound(src, 'sound/weapons/bladeslice.ogg', 50, 1) attack_generic(user, 15) /obj/structure/clockwork/attack_animal(mob/living/simple_animal/M) From 9ca029be9f58c614e863b750e1db0e197c995289 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 10:26:54 -0400 Subject: [PATCH 06/37] Swarmers can now consume swarmer shells for a full material refund --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 7cd0cfb392d..0143fe3e80e 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -276,6 +276,12 @@ /obj/machinery/droneDispenser/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S << "This object is receiving unactivated swarmer shells to help us. Aborting." +/obj/item/device/unactivated_swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + if(S.resources + 50 > 100) + S << "We have too many resources to reconsume this shell. Aborting." + else + ..() + S.resources += 49 //refund the whole thing ////END CTRL CLICK FOR SWARMERS//// From 4aa8131a8e304abd4ea8c543521156a13148f1e1 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 16:10:17 -0400 Subject: [PATCH 07/37] You must be able to actually see and reach mania motors to be converted by them --- .../gamemodes/clock_cult/clock_machines.dm | 76 ++++++++++++------- 1 file changed, 47 insertions(+), 29 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index f9410a65285..ee07c610d45 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -255,6 +255,9 @@ var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gurfr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gurfr vqvbgf va gur neg bs pbairefvba.\"", \ "\"Bu, bs pbhefr, fbzrbar jr pna'g pbaireg. Gurfr freinagf ner sbbyf.\"", "\"Ubj uneq vf vg gb hfr n Fvtvy, naljnl? Nyy vg gnxrf vf qenttvat fbzrbar bagb vg.\"", \ "\"Ubj qb gurl snvy gb hfr n Fvtvy bs Npprffvba, naljnl?\"", "\"Jul vf vg gung nyy freinagf ner guvf varcg?\"", "\"Vg'f abg yvxryl lbh'yy or fghpx urer ybat.\"") + var/close_messages = list("\"Jryy, lbh pna'g ernpu gur zbgbe sebz GUR'ER, lbh zbeba.\"", "\"Vagrerfgvat ybpngvba. V'q cersre vs lbh jrag fbzrjurer lbh pbhyq NPGHNYYL GBHPU GUR NAGRAANR!\"", \ + "\"Nznmvat. Lbh fbzrubj znantrq gb jrqtr lbhefrys fbzrjurer lbh pna'g npghnyyl ernpu gur zbgbe sebz.\"", "\"Fhpu n fubj-bs vqvbpl vf hacnenyyryrq. Creuncf V fubhyq chg lbh ba qvfcynl?\"", \ + "\"Qvq lbh qb guv'f ba checbfr? V pna'g vzntvar lbh qbvat fb nppvqragnyyl. Bu, jnvg, V pna.\"", "\"Ubj vf vg gun'g fhpu fzneg perngherf pna fgvyy qb fbzrguv'at NF FGHCVQ NF GUV'F!\"") /obj/structure/clockwork/powered/mania_motor/examine(mob/user) @@ -271,11 +274,27 @@ return if(try_use_power(mania_cost)) var/hum = get_sfx('sound/effects/screech.ogg') //like playsound, same sound for everyone affected + for(var/mob/living/carbon/human/H in view(1, src)) + if(H.Adjacent(src) && try_use_power(convert_attempt_cost)) + if(is_eligible_servant(H) && try_use_power(convert_cost)) + H << "\"Lbh ner zvar-naq-uvf, abj.\"" + H.playsound_local(T, hum, 80, 1) + add_servant_of_ratvar(H) + else if(!H.stat) + if(H.getBrainLoss() >= H.maxHealth) + H.Paralyse(5) + H << "[pick(convert_messages)]" + else + H.adjustBrainLoss(100) + H.visible_message("[H] reaches out and touches [src].", "You touch [src] involuntarily.") + else + visible_message("[src]'s antennae fizzle quietly.") + playsound(src, 'sound/effects/light_flicker.ogg', 50, 1) for(var/mob/living/carbon/human/H in range(10, src)) - if(!is_servant_of_ratvar(H) && !H.null_rod_check()) + if(!is_servant_of_ratvar(H) && !H.null_rod_check() && H.stat == CONSCIOUS) var/distance = get_dist(T, get_turf(H)) - var/falloff_distance = (110) - distance * 10 - var/sound_distance = falloff_distance * 0.4 + var/falloff_distance = min((110) - distance * 10, 80) + var/sound_distance = falloff_distance * 0.5 var/targetbrainloss = H.getBrainLoss() var/targethallu = H.hallucination var/targetdruggy = H.druggy @@ -289,26 +308,26 @@ H << "[pick(mania_messages)]" else H << "[pick(compel_messages)]" - if(targetbrainloss <= 70) - H.adjustBrainLoss(70 - targetbrainloss) //got too close had brain eaten + if(targetbrainloss <= 50) + H.adjustBrainLoss(50 - targetbrainloss) //got too close had brain eaten if(targetdruggy <= 150) - H.adjust_drugginess(10) + H.adjust_drugginess(11) if(targethallu <= 150) - H.hallucination += 10 + H.hallucination += 11 if(4 to 5) if(targetbrainloss <= 50) - H.adjustBrainLoss(5) + H.adjustBrainLoss(3) if(targetdruggy <= 120) - H.adjust_drugginess(10) + H.adjust_drugginess(9) if(targethallu <= 120) - H.hallucination += 10 + H.hallucination += 9 if(6 to 7) if(targetbrainloss <= 30) H.adjustBrainLoss(2) if(prob(falloff_distance) && targetdruggy <= 90) - H.adjust_drugginess(10) + H.adjust_drugginess(7) else if(targethallu <= 90) - H.hallucination += 10 + H.hallucination += 7 if(8 to 9) if(H.getBrainLoss() <= 10) H.adjustBrainLoss(1) @@ -318,24 +337,23 @@ H.hallucination += 5 if(10 to INFINITY) if(prob(falloff_distance) && targetdruggy <= 30) - H.adjust_drugginess(5) + H.adjust_drugginess(3) else if(targethallu <= 30) - H.hallucination += 5 - else //if it's a distance of 1 or they're on top of it(how'd they get on top of it???) - if(try_use_power(convert_attempt_cost)) - if(is_eligible_servant(H) && try_use_power(convert_cost)) - H << "\"Lbh ner zvar-naq-uvf, abj.\"" - add_servant_of_ratvar(H) - else if(!H.stat) - if(targetbrainloss >= H.maxHealth) - H.Paralyse(5) - H << "[pick(convert_messages)]" - else - H.adjustBrainLoss(100) - H.visible_message("[H] reaches out and touches [src].", "You touch [src] involuntarily.") - else - visible_message("[src]'s antennae fizzle quietly.") - playsound(src, 'sound/effects/light_flicker.ogg', 50, 1) + H.hallucination += 3 + else //if it's a distance of 1 and they can't see it/aren't adjacent or they're on top of it(how'd they get on top of it and still trigger this???) + if(prob(falloff_distance)) + if(prob(falloff_distance)) + H << "[pick(compel_messages)]" + else if(prob(falloff_distance)) + H << "[pick(close_messages)]" + else + H << "[pick(mania_messages)]" + if(targetbrainloss <= 100) + H.adjustBrainLoss(100 - targetbrainloss) + if(targetdruggy <= 200) + H.adjust_drugginess(15) + if(targethallu <= 200) + H.hallucination += 15 if(is_servant_of_ratvar(H) && (H.getBrainLoss() || H.hallucination || H.druggy)) //not an else so that newly converted servants are healed of the damage it inflicts H.adjustBrainLoss(-H.getBrainLoss()) //heals servants of braindamage, hallucination, and druggy From c7b903b3b45ebe9a025294a6a1e091c32b226932 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 16:25:04 -0400 Subject: [PATCH 08/37] fixes some grammar structure --- code/game/gamemodes/clock_cult/clock_machines.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index ee07c610d45..67f20e083f0 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -252,9 +252,9 @@ "\"Tb ebhaq gur oraq.\"", "\"Ynaq va yhanpl.\"", "\"Gel qrzragvn.\"", "\"Fgevir gb trg n fperj ybbfr.\"") var/compel_messages = list("\"Pbzr pybfre.\"", "\"Nccebnpu gur genafzvggre.\"", "\"Gbhpu gur nagraanr.\"", "\"V nyjnlf unir gb qrny jvgu vqvbgf. Zbir gbjneqf gur znavn zbgbe.\"", \ "\"Nqinapr sbejneq naq cynpr lbhe urnq orgjrra gur nagraanr - gung'f nyy vg'f tbbq sbe.\"", "\"Vs lbh jrer fznegre, lbh'q or bire urer nyernql.\"", "\"Zbir SBEJNEQ, lbh sbby.\"") - var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gurfr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gurfr vqvbgf va gur neg bs pbairefvba.\"", \ - "\"Bu, bs pbhefr, fbzrbar jr pna'g pbaireg. Gurfr freinagf ner sbbyf.\"", "\"Ubj uneq vf vg gb hfr n Fvtvy, naljnl? Nyy vg gnxrf vf qenttvat fbzrbar bagb vg.\"", \ - "\"Ubj qb gurl snvy gb hfr n Fvtvy bs Npprffvba, naljnl?\"", "\"Jul vf vg gung nyy freinagf ner guvf varcg?\"", "\"Vg'f abg yvxryl lbh'yy or fghpx urer ybat.\"") + var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gur'fr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gur'fr vqvbgf va gur neg bs pbairefvba.\"", \ + "\"Bu-bs pbhefr, fbzrbar jr pna'g pbaireg. Gur'fr freinagf ner sbbyf.\"", "\"Ubj uneq vf vg gb hfr n Fvtvy, naljnl? Nyy vg gnxrf vf qenttvat fbzrbar bagb vg.\"", \ + "\"Ubj qb gur'l snvy gb hfr n Fvtvy-bs Npprffvba, naljnl?\"", "\"Jul vf vg gun'g nyy freinagf ner guv'f varcg?\"", "\"Vg'f dhvgr yvxryl lbh'yy or fghpx urer sbe n juvyr.\"") var/close_messages = list("\"Jryy, lbh pna'g ernpu gur zbgbe sebz GUR'ER, lbh zbeba.\"", "\"Vagrerfgvat ybpngvba. V'q cersre vs lbh jrag fbzrjurer lbh pbhyq NPGHNYYL GBHPU GUR NAGRAANR!\"", \ "\"Nznmvat. Lbh fbzrubj znantrq gb jrqtr lbhefrys fbzrjurer lbh pna'g npghnyyl ernpu gur zbgbe sebz.\"", "\"Fhpu n fubj-bs vqvbpl vf hacnenyyryrq. Creuncf V fubhyq chg lbh ba qvfcynl?\"", \ "\"Qvq lbh qb guv'f ba checbfr? V pna'g vzntvar lbh qbvat fb nppvqragnyyl. Bu, jnvg, V pna.\"", "\"Ubj vf vg gun'g fhpu fzneg perngherf pna fgvyy qb fbzrguv'at NF FGHCVQ NF GUV'F!\"") From e185512fcf6f3b4dc368ea74cc14290b7adbf0fc Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 16:25:56 -0400 Subject: [PATCH 09/37] missed one --- code/game/gamemodes/clock_cult/clock_machines.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index 67f20e083f0..c6ed2b76051 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -251,7 +251,7 @@ var/mania_messages = list("\"Tb ahgf.\"", "\"Gnxr n penpx ng penml.\"", "\"Znxr n ovq sbe vafnavgl.\"", "\"Trg xbbxl.\"", "\"Zbir gbjneqf znavn.\"", "\"Orpbzr orjvyqrerq.\"", "\"Jnk jvyq.\"", \ "\"Tb ebhaq gur oraq.\"", "\"Ynaq va yhanpl.\"", "\"Gel qrzragvn.\"", "\"Fgevir gb trg n fperj ybbfr.\"") var/compel_messages = list("\"Pbzr pybfre.\"", "\"Nccebnpu gur genafzvggre.\"", "\"Gbhpu gur nagraanr.\"", "\"V nyjnlf unir gb qrny jvgu vqvbgf. Zbir gbjneqf gur znavn zbgbe.\"", \ - "\"Nqinapr sbejneq naq cynpr lbhe urnq orgjrra gur nagraanr - gung'f nyy vg'f tbbq sbe.\"", "\"Vs lbh jrer fznegre, lbh'q or bire urer nyernql.\"", "\"Zbir SBEJNEQ, lbh sbby.\"") + "\"Nqinapr sbejneq naq cynpr lbhe urnq orgjrra gur nagraanr - gun'g'f nyy vg'f tbbq sbe.\"", "\"Vs lbh jrer fznegre, lbh'q or bire urer nyernql.\"", "\"Zbir SBEJNEQ, lbh sbby.\"") var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gur'fr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gur'fr vqvbgf va gur neg bs pbairefvba.\"", \ "\"Bu-bs pbhefr, fbzrbar jr pna'g pbaireg. Gur'fr freinagf ner sbbyf.\"", "\"Ubj uneq vf vg gb hfr n Fvtvy, naljnl? Nyy vg gnxrf vf qenttvat fbzrbar bagb vg.\"", \ "\"Ubj qb gur'l snvy gb hfr n Fvtvy-bs Npprffvba, naljnl?\"", "\"Jul vf vg gun'g nyy freinagf ner guv'f varcg?\"", "\"Vg'f dhvgr yvxryl lbh'yy or fghpx urer sbe n juvyr.\"") From 5216907194916a82e11c6da466f8d8e8dafe02f7 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Wed, 29 Jun 2016 18:14:19 -0400 Subject: [PATCH 10/37] :neckbeard: you really love :heart: to nitpick --- code/game/gamemodes/clock_cult/clock_machines.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index c6ed2b76051..f2c2e20f81b 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -252,7 +252,7 @@ "\"Tb ebhaq gur oraq.\"", "\"Ynaq va yhanpl.\"", "\"Gel qrzragvn.\"", "\"Fgevir gb trg n fperj ybbfr.\"") var/compel_messages = list("\"Pbzr pybfre.\"", "\"Nccebnpu gur genafzvggre.\"", "\"Gbhpu gur nagraanr.\"", "\"V nyjnlf unir gb qrny jvgu vqvbgf. Zbir gbjneqf gur znavn zbgbe.\"", \ "\"Nqinapr sbejneq naq cynpr lbhe urnq orgjrra gur nagraanr - gun'g'f nyy vg'f tbbq sbe.\"", "\"Vs lbh jrer fznegre, lbh'q or bire urer nyernql.\"", "\"Zbir SBEJNEQ, lbh sbby.\"") - var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gur'fr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gur'fr vqvbgf va gur neg bs pbairefvba.\"", \ + var/convert_messages = list("\"Lbh jba'g qb. Tb gb fyrrc juvyr V gryy gur'fr avgjvgf ubj gb pbaireg lbh.\"", "\"Lbh ner vafhssvpvrag. V zhfg vafgehpg gur'fr vqvbgf va gur neg-bs pbairefvba.\"", \ "\"Bu-bs pbhefr, fbzrbar jr pna'g pbaireg. Gur'fr freinagf ner sbbyf.\"", "\"Ubj uneq vf vg gb hfr n Fvtvy, naljnl? Nyy vg gnxrf vf qenttvat fbzrbar bagb vg.\"", \ "\"Ubj qb gur'l snvy gb hfr n Fvtvy-bs Npprffvba, naljnl?\"", "\"Jul vf vg gun'g nyy freinagf ner guv'f varcg?\"", "\"Vg'f dhvgr yvxryl lbh'yy or fghpx urer sbe n juvyr.\"") var/close_messages = list("\"Jryy, lbh pna'g ernpu gur zbgbe sebz GUR'ER, lbh zbeba.\"", "\"Vagrerfgvat ybpngvba. V'q cersre vs lbh jrag fbzrjurer lbh pbhyq NPGHNYYL GBHPU GUR NAGRAANR!\"", \ From da5eac806acb8e6ddd4cd2a9a2045fc054634f42 Mon Sep 17 00:00:00 2001 From: NikNakFlak Date: Wed, 29 Jun 2016 23:57:38 -0700 Subject: [PATCH 11/37] Fuck Coding --- code/game/objects/structures/showcase.dm | 44 +++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 5468f4b0230..170b709328e 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -1,3 +1,6 @@ +#define SHOWCASE_CONSTRUCTED 1 +#define SHOWCASE_SCREWDRIVERED 2 + /*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/ /obj/structure/showcase name = "showcase" @@ -6,6 +9,7 @@ desc = "A stand with the empty body of a cyborg bolted to it." density = 1 anchored = 1 + var/deconstruction_state = SHOWCASE_CONSTRUCTED /obj/structure/showcase/fakeid name = "\improper Centcom identification console" @@ -31,4 +35,42 @@ name = "horrific experiment" desc = "Some sort of pod filled with blood and viscera. You swear you can see it moving..." icon = 'icons/obj/cloning.dmi' - icon_state = "pod_g" \ No newline at end of file + icon_state = "pod_g" + +//Deconstructing +//Showcases can be any sprite, so it makes sense that they can't be constructed. +//However if a player wants to move an existing showcase or remove one, this is for that. + +/obj/structure/showcase/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/screwdriver) && !anchored) + if(deconstruction_state == SHOWCASE_SCREWDRIVERED) + user << "You screw the screws back into the showcase." + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + deconstruction_state = SHOWCASE_CONSTRUCTED + else if (deconstruction_state == SHOWCASE_CONSTRUCTED) + user << "You unscrew the screws." + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + deconstruction_state = SHOWCASE_SCREWDRIVERED + + if(istype(W, /obj/item/weapon/crowbar) && deconstruction_state == SHOWCASE_SCREWDRIVERED) + if(do_after(user, 20/W.toolspeed, target = src)) + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + user << "You start to crowbar the showcase apart..." + new /obj/item/stack/sheet/metal (get_turf(src), 4) + qdel(src) + + if(deconstruction_state == SHOWCASE_CONSTRUCTED && default_unfasten_wrench(user, W)) + return + +//Feedback is given in examine because showcases can basically have any sprite assigned to them + +/obj/structure/showcase/examine(mob/user) + ..() + + switch(deconstruction_state) + if(SHOWCASE_CONSTRUCTED) + user << "The showcase is fully constructed." + if(SHOWCASE_SCREWDRIVERED) + user << "The showcase has its screws loosened." + else + user << "If you see this, something is wrong." \ No newline at end of file From 55e6c0e133e8078734e0afb06206810b66ed816b Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 06:59:39 -0400 Subject: [PATCH 12/37] only reenter if reviving --- code/game/gamemodes/clock_cult/clock_structures.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_structures.dm b/code/game/gamemodes/clock_cult/clock_structures.dm index 46c994d2228..305f644b5e7 100644 --- a/code/game/gamemodes/clock_cult/clock_structures.dm +++ b/code/game/gamemodes/clock_cult/clock_structures.dm @@ -884,9 +884,10 @@ var/total_damage = clone_to_heal + tox_to_heal + burn_to_heal + brute_to_heal + oxy_to_heal if(L.stat == DEAD) var/revival_cost = base_revive_cost + total_damage - oxy_to_heal //ignores oxygen damage - var/mob/dead/observer/ghost = L.grab_ghost(TRUE) + var/mob/dead/observer/ghost = L.get_ghost(TRUE) if(ghost) if(vitality >= revival_cost) + ghost.reenter_corpse() L.revive(1, 1) playsound(L, 'sound/magic/Staff_Healing.ogg', 50, 1) L.visible_message("[L] suddenly gets back up, their mouth dripping blue ichor!", "\"Lbh jvyy or bxnl, puvyq.\"") From 9d53fee7730e06af31a71f81174064b803ba450f Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 07:00:45 -0400 Subject: [PATCH 13/37] 20 --- code/game/gamemodes/clock_cult/clock_scripture.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 6f3d3a9e57f..3db2a44d215 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -815,7 +815,7 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed whispered = TRUE object_path = /obj/effect/clockwork/sigil/vitality creator_message = "A vitality matrix appears below you. It will drain life from non-servants and heal servants that cross it." - usage_tip = "To revive a servant, the sigil must have 25 vitality plus the target servant's non-oxygen damage. It will still heal dead servants if it lacks the vitality to outright revive them." + usage_tip = "To revive a servant, the sigil must have 20 vitality plus the target servant's non-oxygen damage. It will still heal dead servants if it lacks the vitality to outright revive them." tier = SCRIPTURE_APPLICATION one_per_tile = TRUE From 22b04bd5a127d81f198f06a23c359d61ad918191 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 07:14:22 -0400 Subject: [PATCH 14/37] esk --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 0143fe3e80e..7d5a8b8c6fe 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -101,6 +101,7 @@ del_on_death = 1 deathmessage = "explodes with a sharp pop!" var/resources = 0 //Resource points, generated by consuming metal/glass + var/max_resources = 100 /mob/living/simple_animal/hostile/swarmer/Login() ..() @@ -277,7 +278,7 @@ S << "This object is receiving unactivated swarmer shells to help us. Aborting." /obj/item/device/unactivated_swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(S.resources + 50 > 100) + if(S.resources + 50 > max_resources) S << "We have too many resources to reconsume this shell. Aborting." else ..() @@ -297,7 +298,7 @@ return 1 /mob/living/simple_animal/hostile/swarmer/proc/Integrate(var/obj/item/target) - if(resources >= 100) + if(resources >= max_resources) src << "We cannot hold more materials!" return if((target.materials[MAT_METAL]) || (target.materials[MAT_GLASS])) From d3816aaff0b60765a713578655d105230add72a6 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 08:09:15 -0400 Subject: [PATCH 15/37] var --- code/game/gamemodes/miniantags/bot_swarm/swarmer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 7d5a8b8c6fe..bb3c3641e22 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -278,7 +278,7 @@ S << "This object is receiving unactivated swarmer shells to help us. Aborting." /obj/item/device/unactivated_swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(S.resources + 50 > max_resources) + if(S.resources + 50 > S.max_resources) S << "We have too many resources to reconsume this shell. Aborting." else ..() From 49f82613a39a6d21ebcde860c299bf0db779ad88 Mon Sep 17 00:00:00 2001 From: Core0verload Date: Thu, 30 Jun 2016 19:17:14 +0300 Subject: [PATCH 16/37] Makes angel potion bottle into a real bottle (#19026) --- .../mining/lavaland/necropolis_chests.dm | 56 ++++++++++-------- icons/obj/lavaland/artefacts.dmi | Bin 9211 -> 9381 bytes 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index ce73251df4b..92dcdaeec3a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -23,7 +23,7 @@ if(5) new /obj/item/clothing/glasses/godeye(src) if(6) - new /obj/item/weapon/wingpotion(src) + new /obj/item/weapon/reagent_containers/glass/bottle/potion/flight(src) if(7) new /obj/item/weapon/pickaxe/diamond(src) if(8) @@ -411,37 +411,41 @@ vehicle_move_delay = 1 //Potion of Flight - -/obj/item/weapon/wingpotion - name = "strange elixir" - desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says 'erqo'hyy tvi'rf lbh jv'atf'" +/obj/item/weapon/reagent_containers/glass/bottle/potion icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "potionflask" - w_class = 2 - var/used = FALSE -/obj/item/weapon/wingpotion/attack_self(mob/living/M) - if(used) - M << "The flask is empty, what a shame." +/obj/item/weapon/reagent_containers/glass/bottle/potion/flight + name = "strange elixir" + desc = "A flask with an almost-holy aura emitting from it. The label on the bottle says: 'erqo'hyy tvi'rf lbh jv'atf'." + list_reagents = list("flightpotion" = 5) + +/obj/item/weapon/reagent_containers/glass/bottle/potion/update_icon() + if(reagents.total_volume) + icon_state = "potionflask" else - if(iscarbon(M)) - var/mob/living/carbon/C = M - CHECK_DNA_AND_SPECIES(C) - if(C.wear_mask) - C << "It's pretty hard to drink something with a mask on!" - else - if(!ishumanbasic(C)) //implying xenoshumans are holy - C << "You down the elixir, noting nothing else but a terrible aftertaste." - else - C << "You down the elixir, a terrible pain travels down your back as wings burst out!" - C.set_species(/datum/species/angel) - playsound(loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) - C.adjustBruteLoss(20) - C.emote("scream") - playsound(loc, 'sound/items/drink.ogg', 50, 1, -1) - src.used = TRUE + icon_state = "potionflask_empty" +/datum/reagent/flightpotion + name = "Flight Potion" + id = "flightpotion" + description = "Strange mutagenic compound of unknown origins." + reagent_state = LIQUID + color = "#FFEBEB" +/datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) + if(iscarbon(M) && M.stat != DEAD) + if(!ishumanbasic(M) || reac_volume < 5) // implying xenohumans are holy + if(method == INGEST && show_message) + M << "You feel nothing but a terrible aftertaste." + return ..() + + M << "A terrible pain travels down your back as wings burst out!" + M.set_species(/datum/species/angel) + playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) + M.adjustBruteLoss(20) + M.emote("scream") + ..() diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi index 93bd2aa1b23b7509372d2626b9d744c1b08c22b5..9123949dc7cbbc63dedf676a3b010c38ce67283c 100644 GIT binary patch literal 9381 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 literal 9211 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 From adab4f4233e1662c144684c952702a302475c233 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 12:31:08 -0400 Subject: [PATCH 17/37] Removes some unnecessary code (#19025) --- code/game/objects/effects/overlays.dm | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 38b924650f5..55123f67dfb 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -32,18 +32,12 @@ return QDEL_HINT_PUTINPOOL /obj/effect/overlay/temp/New() + ..() if(randomdir) setDir(pick(cardinal)) flick("[icon_state]", src) //Because we might be pulling it from a pool, flick whatever icon it uses so it starts at the start of the icon's animation. - // Because some people are sticklers for animation accuracy, we use - // spawn() if it's not a multiple of 2 deciseconds, which is the timer - // ss accuracy - if(duration % 2) //ODD - spawn(duration) - qdel(src) - else //EVEN - QDEL_IN(src, duration) + QDEL_IN(src, duration) /obj/effect/overlay/temp/bloodsplatter icon = 'icons/effects/blood.dmi' From 77325aa2b1bd102b8b158c1014918036ae25b4f7 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 12:31:30 -0400 Subject: [PATCH 18/37] Removes Justicar's Gavel (#19020) --- .../gamemodes/clock_cult/clock_scripture.dm | 89 ------------------- 1 file changed, 89 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index a01e9e20be9..293d1e7d117 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -170,49 +170,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed new object_path (get_turf(invoker)) return 1 - - -/datum/clockwork_scripture/targeted //Accepts a name and affects that target - var/target_name //The inputted name, used to find targets - var/mob/living/target //The target mob - var/affects_servants = FALSE //If servants are valid targets - -/datum/clockwork_scripture/targeted/check_special_requirements() - while(!target) - target_name = reject_bad_name(input(invoker, "Enter the actual name of a target (case-sensitive).", name), 1) - if(!target_name) - return 0 - var/list/targets = find_targets() - if(targets.len) - if(targets.len == 1) - target = targets[1] - else - target = input(invoker, "Choose a target to affect.", "Target Selection") as null|anything in targets - if(!target) - return 0 - if(!target.mind) - invoker << "[target] has no mind!" - target = null - if(target.stat) - invoker << "[target] is dead or unconscious!" - target = null - if(is_servant_of_ratvar(target) && !affects_servants) - invoker << "[target] is a servant, and [name] cannot target servants!" - target = null - else - invoker << "There are no targets with that name!" - return 0 - return 1 - -/datum/clockwork_scripture/targeted/proc/find_targets() - var/list/validtargets = list() - for(var/mob/living/L in living_mob_list) - if(L.real_name == target_name) - if(is_servant_of_ratvar(L) && !affects_servants) - continue - validtargets |= L - . = validtargets - ///////////// // DRIVERS // ///////////// @@ -887,52 +844,6 @@ Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed -/datum/clockwork_scripture/targeted/justiciars_gavel //Justiciar's Gavel: Deals extreme but temporary brain damage to a target with the inputted name and knocks them out for a brief time. - descname = "Stun Designated Target" - name = "Justiciar's Gavel" - desc = "Deals massive brain damage to and knocks out a target with the inputted name. This brain damage will slowly recover itself." - invocations = list("Guvf urngura...", "...unf jebatrq lbh!") - channel_time = 40 - required_components = list("belligerent_eye" = 2, "guvax_capacitor" = 2, "hierophant_ansible" = 1) - consumed_components = list("belligerent_eye" = 2, "guvax_capacitor" = 1, "hierophant_ansible" = 1) - invokers_required = 3 - multiple_invokers_used = TRUE - usage_tip = "Also functions on silicon-based lifeforms, although it will not apply brain damage." - tier = SCRIPTURE_APPLICATION - -/datum/clockwork_scripture/targeted/justiciars_gavel/scripture_effects() - if(!target) - return 0 //wait where'd they go - if(iscarbon(target)) - if(target.null_rod_check()) - var/obj/item/I = target.null_rod_check() - target.visible_message("[target]'s [I.name] glows a blazing white!", "Your [I.name] suddenly glows with intense heat!") - invoker << "[target] had a holy artifact and was unaffected!" - playsound(target, 'sound/weapons/sear.ogg', 50, 1) - target.adjustFireLoss(10) //Still has *some* effect - return - if(iscultist(target)) - target.visible_message("Blood sprays from a sudden wound on [target]'s head!", \ - "\"If you like wasting your own blood so much, pig, why don't you bathe in it?\"\n\ - An unbearable pain invades your mind, rupturing your head and wiping all thought.") - target.apply_damage(rand(20, 30), BRUTE, "head") - else - target.visible_message("[target]'s face falls lax, their eyes dimming.", \ - "\"I don't think you need that brain. Not like you use it anyway.\"\n\ - A savage pain invades your mind, driving out all conscious thought.") - target.adjustBrainLoss(200) - if(target.reagents) - target.reagents.add_reagent("mannitol", 25) //Enough to cure most of it but not all of it - target.Paralyse(10) - else if(issilicon(target)) - target.visible_message("[target] suddenly shuts down!", \ - "\"NOB ZVANG-VBA! You disgust me, abomination of circuits and wires.\"\n\ - Factory reset sequence initiated by foreign signal. Entering standby mode and halting sequence.") - target.Weaken(10) - return 1 - - - /datum/clockwork_scripture/create_object/interdiction_lens //Interdiction Lens: Creates a powerful totem that disables radios and cameras and drains power into nearby sigils. descname = "Structure, Disables Machinery" name = "Interdiction Lens" From 480f2587bc6c4aaf33f8d7d7c5ba9af74da0e244 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 30 Jun 2016 16:31:31 +0000 Subject: [PATCH 19/37] Automatic changelog generation for PR #19020 [ci skip] --- html/changelogs/AutoChangeLog-pr-19020.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19020.yml diff --git a/html/changelogs/AutoChangeLog-pr-19020.yml b/html/changelogs/AutoChangeLog-pr-19020.yml new file mode 100644 index 00000000000..5fca07252d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19020.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscdel: "Removed the Justicar's Gavel application scripture." From f30f9025e9deb27b691e0aacb01f2e36bacdcd07 Mon Sep 17 00:00:00 2001 From: Joan Lung Date: Thu, 30 Jun 2016 14:54:52 -0400 Subject: [PATCH 20/37] little fix --- code/game/gamemodes/clock_cult/clock_machines.dm | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/clock_cult/clock_machines.dm b/code/game/gamemodes/clock_cult/clock_machines.dm index f2c2e20f81b..42077d41548 100644 --- a/code/game/gamemodes/clock_cult/clock_machines.dm +++ b/code/game/gamemodes/clock_cult/clock_machines.dm @@ -341,15 +341,15 @@ else if(targethallu <= 30) H.hallucination += 3 else //if it's a distance of 1 and they can't see it/aren't adjacent or they're on top of it(how'd they get on top of it and still trigger this???) - if(prob(falloff_distance)) + if(targetbrainloss <= 99) if(prob(falloff_distance)) - H << "[pick(compel_messages)]" - else if(prob(falloff_distance)) - H << "[pick(close_messages)]" - else - H << "[pick(mania_messages)]" - if(targetbrainloss <= 100) - H.adjustBrainLoss(100 - targetbrainloss) + if(prob(falloff_distance)) + H << "[pick(compel_messages)]" + else if(prob(falloff_distance)) + H << "[pick(close_messages)]" + else + H << "[pick(mania_messages)]" + H.adjustBrainLoss(99 - targetbrainloss) if(targetdruggy <= 200) H.adjust_drugginess(15) if(targethallu <= 200) From 769373d2a73c127c2882de9cee60a87019a91b32 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 30 Jun 2016 18:57:20 +0000 Subject: [PATCH 21/37] Automatic changelog generation for PR #19018 [ci skip] --- html/changelogs/AutoChangeLog-pr-19018.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19018.yml diff --git a/html/changelogs/AutoChangeLog-pr-19018.yml b/html/changelogs/AutoChangeLog-pr-19018.yml new file mode 100644 index 00000000000..91d071c80ad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19018.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "Ratvarian Spears will stun cyborgs and cultists for twice as long when thrown; on cyborgs, this should be long enough to use Guvax on them." From 57c65e43c122e4ec66eddacf537a9ec7297735cd Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 30 Jun 2016 18:58:01 +0000 Subject: [PATCH 22/37] Automatic changelog generation for PR #19023 [ci skip] --- html/changelogs/AutoChangeLog-pr-19023.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19023.yml diff --git a/html/changelogs/AutoChangeLog-pr-19023.yml b/html/changelogs/AutoChangeLog-pr-19023.yml new file mode 100644 index 00000000000..104a2d2a4b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19023.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - tweak: "Vitality Matrices will drain and heal 50% faster, and the base cost to revive is 20% lower; 20, from 25." + - rscadd: "Vitality Matrices will not revive or heal corpses unless they can grab the ghost of the corpse, and will immediately grab the ghost when reviving." From a4f14bad9ad665680f62dd20ba600e8b22156981 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Thu, 30 Jun 2016 18:59:46 +0000 Subject: [PATCH 23/37] Automatic changelog generation for PR #19029 [ci skip] --- html/changelogs/AutoChangeLog-pr-19029.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19029.yml diff --git a/html/changelogs/AutoChangeLog-pr-19029.yml b/html/changelogs/AutoChangeLog-pr-19029.yml new file mode 100644 index 00000000000..72f67125617 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19029.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Swarmers consuming swarmer shells now refunds the swarmer the entire cost of the shell instead of 2% of the shell's cost." From 180bebbc512dc13d664c2cc18f55c0ee9d6ed0ca Mon Sep 17 00:00:00 2001 From: Leo Date: Thu, 30 Jun 2016 21:53:41 -0300 Subject: [PATCH 24/37] pAI mulebots no longer stuns people (#18965) * pAI mulebots no longer stun * Makes the pAI insertion a proc so it can be overidden for the mulebot feedback --- .../mob/living/simple_animal/bot/bot.dm | 51 ++++++++++--------- .../mob/living/simple_animal/bot/mulebot.dm | 15 ++++-- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index df86b65a6ef..1fb34fd9e90 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -257,29 +257,7 @@ else user << "Access denied." else if(istype(W, /obj/item/device/paicard)) - if(paicard) - user << "A [paicard] is already inserted!" - else if(allow_pai && !key) - if(!locked && !open) - var/obj/item/device/paicard/card = W - if(card.pai && card.pai.mind) - if(!user.drop_item()) - return - W.forceMove(src) - paicard = card - user.visible_message("[user] inserts [W] into [src]!","You insert [W] into [src].") - paicard.pai.mind.transfer_to(src) - src << "You sense your form change as you are uploaded into [src]." - bot_name = name - name = paicard.pai.name - faction = user.faction - add_logs(user, paicard.pai, "uploaded to [src.bot_name],") - else - user << "[W] is inactive." - else - user << "The personality slot is locked." - else - user << "[src] is not compatible with [W]" + insertpai(user, W) else if(istype(W, /obj/item/weapon/hemostat) && paicard) if(open) user << "Close the access panel before manipulating the personality slot!" @@ -864,6 +842,31 @@ Pass a positive integer as an argument to override a bot's default speed. eject += "
    " return eject +/mob/living/simple_animal/bot/proc/insertpai(mob/user, obj/item/device/paicard/card) + if(paicard) + user << "A [paicard] is already inserted!" + else if(allow_pai && !key) + if(!locked && !open) + if(card.pai && card.pai.mind) + if(!user.drop_item()) + return + card.forceMove(src) + paicard = card + user.visible_message("[user] inserts [card] into [src]!","You insert [card] into [src].") + paicard.pai.mind.transfer_to(src) + src << "You sense your form change as you are uploaded into [src]." + bot_name = name + name = paicard.pai.name + faction = user.faction + add_logs(user, paicard.pai, "uploaded to [bot_name],") + return 1 + else + user << "[card] is inactive." + else + user << "The personality slot is locked." + else + user << "[src] is not compatible with [card]" + /mob/living/simple_animal/bot/proc/ejectpai(mob/user = null, announce = 1) if(paicard) if(mind && paicard.pai) @@ -918,4 +921,4 @@ Pass a positive integer as an argument to override a bot's default speed. if(!data_hud_type) return var/datum/atom_hud/datahud = huds[data_hud_type] - datahud.add_hud_to(src) \ No newline at end of file + datahud.add_hud_to(src) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index f1e159a3ec9..2d82b9e4a53 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -639,11 +639,12 @@ var/global/mulebot_count = 0 if(istype(M,/mob/living/silicon/robot)) visible_message("[src] bumps into [M]!") else - add_logs(src, M, "knocked down") - visible_message("[src] knocks over [M]!") - M.stop_pulling() - M.Stun(8) - M.Weaken(5) + if(!paicard) + add_logs(src, M, "knocked down") + visible_message("[src] knocks over [M]!") + M.stop_pulling() + M.Stun(8) + M.Weaken(5) return ..() // called from mob/living/carbon/human/Crossed() @@ -737,6 +738,10 @@ var/global/mulebot_count = 0 unload(get_dir(loc, A)) else ..() + +/mob/living/simple_animal/bot/mulebot/insertpai(mob/user, obj/item/device/paicard/card) + if(..()) + visible_message("[src] safeties are locked on.") #undef SIGH #undef ANNOYED From 805448b8a1b4be16c2c407b31f9089c5a4357099 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 1 Jul 2016 00:53:43 +0000 Subject: [PATCH 25/37] Automatic changelog generation for PR #18965 [ci skip] --- html/changelogs/AutoChangeLog-pr-18965.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-18965.yml diff --git a/html/changelogs/AutoChangeLog-pr-18965.yml b/html/changelogs/AutoChangeLog-pr-18965.yml new file mode 100644 index 00000000000..bbe21c8b8cb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-18965.yml @@ -0,0 +1,4 @@ +author: "name: Lzimann" +delete-after: True +changes: + - tweak: "Mulebots with pAI cards no longer stun people" From 1eb337ed72a8939a1335b4d5442ea25007a7f6d5 Mon Sep 17 00:00:00 2001 From: coiax Date: Fri, 1 Jul 2016 01:58:22 +0100 Subject: [PATCH 26/37] Nuke disk relocation is more random (#19019) The nuke disk reappears on the station in far more random locations Nuke disk now uses find_safe_turf(), same proc as swarmers and laughter demons. Fallback is blobstart turfs in case it can't find anything (find_safe_turf() gives up after 1000 tries) --- code/game/gamemodes/nuclear/nuclearbomb.dm | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 6526ab166cf..349dfda0374 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -462,18 +462,22 @@ This is here to make the tiles around the station mininuke change when it's arme log_game("[src] has been moved out of bounds in ([diskturf ? "[diskturf.x], [diskturf.y] ,[diskturf.z]":"nonexistent location"]). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z]).") /obj/item/weapon/disk/nuclear/proc/relocate() - if(blobstart.len > 0) - var/turf/targetturf = get_turf(pick(blobstart)) - if(ismob(loc)) - var/mob/M = loc - M.remove_from_mob(src) - if(istype(loc, /obj/item/weapon/storage)) - var/obj/item/weapon/storage/S = loc - S.remove_from_storage(src, targetturf) - forceMove(targetturf) //move the disc, so ghosts remain orbitting it even if it's "destroyed" - return targetturf - else - throw EXCEPTION("Unable to find a blobstart landmark") + var/targetturf = find_safe_turf(ZLEVEL_STATION) + if(!targetturf) + if(blobstart.len > 0) + targetturf = get_turf(pick(blobstart)) + else + throw EXCEPTION("Unable to find a blobstart landmark") + + if(ismob(loc)) + var/mob/M = loc + M.remove_from_mob(src) + if(istype(loc, /obj/item/weapon/storage)) + var/obj/item/weapon/storage/S = loc + S.remove_from_storage(src, targetturf) + // move the disc, so ghosts remain orbiting it even if it's "destroyed" + forceMove(targetturf) + return targetturf /obj/item/weapon/disk/nuclear/Destroy(force) var/turf/diskturf = get_turf(src) From 122b2f122f3983ae45cf6c9fd26f260202ac6ba1 Mon Sep 17 00:00:00 2001 From: tgstation-server Date: Fri, 1 Jul 2016 00:58:23 +0000 Subject: [PATCH 27/37] Automatic changelog generation for PR #19019 [ci skip] --- html/changelogs/AutoChangeLog-pr-19019.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-19019.yml diff --git a/html/changelogs/AutoChangeLog-pr-19019.yml b/html/changelogs/AutoChangeLog-pr-19019.yml new file mode 100644 index 00000000000..276cbe60af9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-19019.yml @@ -0,0 +1,4 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "The nuke disk reappears on the station in far more random locations, but tends to re-materialise in safe pressurised areas that aren't on fire." From 08c6923a12fb50ca15cfbf07aad4864808710333 Mon Sep 17 00:00:00 2001 From: Leo Date: Thu, 30 Jun 2016 22:28:58 -0300 Subject: [PATCH 28/37] Adds the tele-gulag [ready for review/merge] (#18644) Now security can send the bad guys to the gulag without any effort! Just put the unlucky guy inside the teleporter, insert a prisoner ID and hit the button! You don't even need to strip him, it's all automatic! --- _maps/map_files/MetaStation/MetaStation.dmm | 50 +- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 27 +- _maps/map_files/generic/lavaland.dmm | 6649 +++++++++-------- .../game/machinery/computer/buildandrepair.dm | 4 +- .../machinery/computer/gulag_teleporter.dm | 164 + code/game/machinery/gulag_item_reclaimer.dm | 108 + code/game/machinery/gulag_teleporter.dm | 173 + .../modules/mining/laborcamp/laborminerals.dm | 12 +- code/modules/mining/laborcamp/laborstacker.dm | 204 +- .../modules/mining/lavaland/lavaland_areas.dm | 3 + code/modules/mining/mine_turfs.dm | 2 +- icons/obj/machines/implantchair.dmi | Bin 7622 -> 8079 bytes tgstation.dme | 3 + tgui/assets/tgui.css | 2 +- tgui/assets/tgui.js | 26 +- tgui/src/interfaces/gulag_console.ract | 49 + tgui/src/interfaces/gulag_item_reclaimer.ract | 10 + tgui/src/interfaces/labor_claim_console.ract | 29 + 18 files changed, 4042 insertions(+), 3473 deletions(-) create mode 100644 code/game/machinery/computer/gulag_teleporter.dm create mode 100644 code/game/machinery/gulag_item_reclaimer.dm create mode 100644 code/game/machinery/gulag_teleporter.dm create mode 100644 tgui/src/interfaces/gulag_console.ract create mode 100644 tgui/src/interfaces/gulag_item_reclaimer.ract create mode 100644 tgui/src/interfaces/labor_claim_console.ract diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index cf6ae7bb7f7..bb988a84303 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -9681,19 +9681,7 @@ /turf/open/floor/plasteel/black, /area/security/brig) "arh" = ( -/obj/structure/table, -/obj/item/weapon/storage/box/prisoner, -/obj/item/weapon/razor{ - pixel_x = -6 - }, -/obj/item/weapon/paper{ - desc = ""; - info = "Labor Camp Facility Operation Guide

    Hello there, proud operator of an NT-Sec Prisoner Rehabilitation Center. A solution to rising crime rates and falling productivity, these facilities are specifically designed for the safe, productive imprisonment of your most dangerous criminals.

    To press a long-term prisoner into the service of the station, replace his equipment with prisoners' garb at one of the prison lockers, as per normal operating procedure. Before assigning a prisoner his ID, insert the ID into a prisoner management console and assign the prisoner a quota, based on the severity of his crime.
    A single sheet of most materials produces five points for the prisoner, and points can be expected to be produced at a rate of about 100 per minute, though punishments as severe as forced labor should be reserved for serious crimes of sentences not less than five minutes long.
    Once you have prepared the prisoner, place him in the secure northern half of the labor shuttle, and send him to the station. Once he meets his quota by feeding sheets to the stacker, he will be allowed to return to the station, and will be able to open the secure door to the prisoner release area.

    In the case of dangerous prisoners, surveilance may be needed. To that end, there is a prisoner monitoring room on the mining station, equipped with a remote flasher and a lockdown button. The mine itself is patrolled by a securibot, so the nearby security records console can also be used to secure hostile prisoners on the mine."; - name = "Labor Camp Operating Guide" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, +/obj/machinery/computer/shuttle/labor, /turf/open/floor/plasteel/black, /area/security/brig) "ari" = ( @@ -10505,23 +10493,26 @@ c_tag = "Labor Shuttle Control Desk"; dir = 4 }, -/obj/machinery/computer/shuttle/labor, /obj/machinery/light{ dir = 8 }, +/obj/structure/table, +/obj/item/weapon/storage/box/prisoner, +/obj/item/weapon/razor{ + pixel_x = -6 + }, +/obj/item/weapon/paper{ + desc = ""; + info = "Labor Camp Facility Operation Guide

    Hello there, proud operator of an NT-Sec Prisoner Rehabilitation Center. A solution to rising crime rates and falling productivity, these facilities are specifically designed for the safe, productive imprisonment of your most dangerous criminals.

    To press a long-term prisoner into the service of the station, replace his equipment with prisoners' garb at one of the prison lockers, as per normal operating procedure. Before assigning a prisoner his ID, insert the ID into a prisoner management console and assign the prisoner a quota, based on the severity of his crime.
    A single sheet of most materials produces five points for the prisoner, and points can be expected to be produced at a rate of about 100 per minute, though punishments as severe as forced labor should be reserved for serious crimes of sentences not less than five minutes long.
    Once you have prepared the prisoner, place him in the secure northern half of the labor shuttle, and send him to the station. Once he meets his quota by feeding sheets to the stacker, he will be allowed to return to the station, and will be able to open the secure door to the prisoner release area.

    In the case of dangerous prisoners, surveilance may be needed. To that end, there is a prisoner monitoring room on the mining station, equipped with a remote flasher and a lockdown button. The mine itself is patrolled by a securibot, so the nearby security records console can also be used to secure hostile prisoners on the mine."; + name = "Labor Camp Operating Guide" + }, +/obj/item/weapon/pen, /turf/open/floor/plasteel/black, /area/security/brig) "asy" = ( /obj/structure/chair/office/dark{ dir = 8 }, -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Labor Camp Desk"; - req_access_txt = "0" - }, /turf/open/floor/plasteel/black, /area/security/brig) "asz" = ( @@ -11484,19 +11475,11 @@ }, /area/shuttle/labor) "atW" = ( -/obj/machinery/computer/prisoner, +/obj/machinery/computer/gulag_teleporter_computer, /turf/open/floor/plasteel/black, /area/security/brig) "atX" = ( -/obj/structure/table, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/pen, -/obj/structure/window/reinforced{ - dir = 4 - }, +/obj/machinery/gulag_teleporter, /turf/open/floor/plasteel/black, /area/security/brig) "atY" = ( @@ -15841,6 +15824,9 @@ pixel_x = 24; pixel_y = 20 }, +/obj/machinery/gulag_item_reclaimer{ + pixel_y = 24 + }, /turf/open/floor/plasteel/black, /area/hallway/primary/fore) "aBp" = ( @@ -118133,7 +118119,7 @@ aju avw aju aaa -azT +aDN aBo aCA aDO diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index ad10023e18a..4cc0fd113ae 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -4501,14 +4501,11 @@ /turf/open/space, /area/solar/auxport) "ajr" = ( -/obj/machinery/computer/security{ - name = "Labor Camp Monitoring"; - network = list("Labor") - }, +/obj/machinery/computer/gulag_teleporter_computer, /turf/open/floor/plasteel, /area/security/processing) "ajs" = ( -/obj/machinery/computer/prisoner, +/obj/machinery/gulag_teleporter, /turf/open/floor/plasteel, /area/security/processing) "ajt" = ( @@ -4516,21 +4513,24 @@ pixel_x = 32; pixel_y = 0 }, -/obj/structure/closet/emcloset, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/table, +/obj/item/weapon/storage/box/prisoner, +/obj/machinery/camera{ + c_tag = "Labor Shuttle Dock North" + }, /turf/open/floor/plasteel, /area/security/processing) "aju" = ( -/obj/machinery/camera{ - c_tag = "Labor Shuttle Dock North" - }, -/obj/structure/table, -/obj/item/weapon/storage/box/prisoner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, +/obj/machinery/computer/security{ + name = "Labor Camp Monitoring"; + network = list("Labor") + }, /turf/open/floor/plasteel, /area/security/processing) "ajv" = ( @@ -6434,7 +6434,9 @@ }, /area/security/processing) "ant" = ( -/obj/structure/closet/emcloset, +/obj/machinery/gulag_item_reclaimer{ + pixel_y = 24 + }, /turf/open/floor/plasteel/warning{ dir = 9 }, @@ -6869,6 +6871,7 @@ }, /area/security/processing) "aos" = ( +/obj/structure/closet/emcloset, /turf/open/floor/plasteel/warning{ dir = 10 }, diff --git a/_maps/map_files/generic/lavaland.dmm b/_maps/map_files/generic/lavaland.dmm index 1575ffc7988..80fbd46fec6 100644 --- a/_maps/map_files/generic/lavaland.dmm +++ b/_maps/map_files/generic/lavaland.dmm @@ -111,6 +111,7 @@ /obj/item/weapon/storage/bag/ore, /obj/item/weapon/pickaxe, /obj/item/device/flashlight, +/obj/item/clothing/glasses/meson, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, @@ -122,6 +123,7 @@ /obj/item/weapon/storage/bag/ore, /obj/item/device/flashlight, /obj/item/weapon/pickaxe, +/obj/item/clothing/glasses/meson, /turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, @@ -306,7 +308,7 @@ "aN" = ( /obj/structure/closet/crate, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) +/area/lavaland/surface/outdoors/explored) "aO" = ( /obj/machinery/door/airlock/glass_security{ name = "Labor Camp Shuttle Security Airlock"; @@ -556,7 +558,7 @@ width = 9 }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) +/area/lavaland/surface/outdoors/explored) "bm" = ( /obj/machinery/door/airlock/glass_security{ name = "Labor Camp Shuttle Prisoner Airlock"; @@ -717,10 +719,11 @@ }, /area/mine/eva) "bA" = ( -/turf/closed/wall{ +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, -/area/mine/laborcamp/security) +/area/lavaland/surface/outdoors/explored) "bB" = ( /obj/structure/table, /obj/machinery/recharger, @@ -906,11 +909,10 @@ }, /area/mine/production) "bT" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ +/turf/open/floor/plasteel{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface }, -/area/mine/laborcamp/security) +/area/lavaland/surface/outdoors/explored) "bU" = ( /turf/open/floor/plasteel/purple/corner{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; @@ -1230,11 +1232,11 @@ }, /area/mine/production) "cx" = ( -/obj/machinery/mineral/stacking_unit_console, -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface +/turf/open/floor/plasteel/purple/corner{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; + dir = 4 }, -/area/mine/production) +/area/lavaland/surface/outdoors/explored) "cy" = ( /obj/machinery/door/airlock/mining{ name = "Mining Station Storage"; @@ -1659,9 +1661,8 @@ }, /area/mine/living_quarters) "dq" = ( -/turf/open/floor/plating/lava/smooth/lava_land_surface, -/turf/closed/mineral/random/volcanic, -/area/lavaland/surface/outdoors) +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors/explored) "dr" = ( /obj/machinery/conveyor_switch/oneway{ id = "gulag" @@ -2084,6 +2085,8 @@ }, /area/mine/living_quarters) "en" = ( +/obj/item/weapon/pickaxe, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, /turf/closed/indestructible/riveted, /area/ruin/unpowered{ name = "Necropolis Bridge" @@ -2781,6 +2784,38 @@ dir = 8 }, /area/mine/laborcamp) +"fI" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/lavaland/surface/outdoors) +"fJ" = ( +/turf/closed/mineral/random/volcanic, +/area/lavaland/surface/outdoors/explored) +"fK" = ( +/turf/closed/mineral/random/labormineral/volcanic, +/area/lavaland/surface/outdoors) +"fL" = ( +/obj/structure/ore_box, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors/explored) +"fM" = ( +/obj/structure/gulag_beacon, +/turf/open/floor/plasteel{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/laborcamp) +"fN" = ( +/turf/closed/wall{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/laborcamp/security) +"fO" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/mine/laborcamp/security) (1,1,1) = {" aa @@ -3424,11 +3459,11 @@ af af af af -al -al -al -al -al +ed +ed +ed +ed +ed ab af af @@ -3960,7 +3995,7 @@ af af af af -al +fK ab af af @@ -4224,10 +4259,10 @@ af af af af -al -al -al -al +fK +fK +fK +fK af af af @@ -4283,7 +4318,7 @@ af af af af -ab +dq af af af @@ -4424,10 +4459,10 @@ af af af af -al -al -al -al +fK +fK +fK +fK af af af @@ -4535,10 +4570,10 @@ af af af af -ab -ab +dq +dq af -ab +dq af af af @@ -4683,52 +4718,52 @@ af ab ab ed -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ed -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab ab -al -al +fK +fK ab ab -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab ab @@ -4791,8 +4826,8 @@ af af af af -ab -ab +dq +dq af af af @@ -4939,71 +4974,71 @@ al af af ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -5048,15 +5083,15 @@ af af af af -ab -ab +dq +dq af af -ab -ab +dq +dq af af -ab +dq af af af @@ -5197,67 +5232,67 @@ al af ab ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab ab @@ -5304,19 +5339,19 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -5454,76 +5489,76 @@ al af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab -al -al -al -al -al +fK +fK +fK +fK +fK af af af @@ -5559,22 +5594,22 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -5712,85 +5747,85 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -5799,7 +5834,7 @@ af af af af -al +fK ab af af @@ -5817,24 +5852,24 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af -ab +dq af af af @@ -5969,84 +6004,84 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab af @@ -6056,8 +6091,8 @@ af af af ab -al -al +fK +fK af af af @@ -6075,19 +6110,19 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -6227,94 +6262,94 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -6331,21 +6366,21 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -6486,92 +6521,92 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -6588,22 +6623,22 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -6742,93 +6777,93 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -6846,19 +6881,19 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -7000,92 +7035,92 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab af af @@ -7103,19 +7138,19 @@ af af af af -ab -ab -ab -ab -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq +dq +dq +dq +dq bl -ab -ab -ab +dq +dq +dq af af af @@ -7259,90 +7294,90 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab af @@ -7367,12 +7402,12 @@ an an aO an -ab +fI an bm an -ab -ab +dq +dq af af af @@ -7517,99 +7552,99 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab -al +fK ab af af @@ -7624,15 +7659,15 @@ aG an aP an -an +aZ an aF an -ab -al +dq +fJ af af -ab +dq af ab al @@ -7773,101 +7808,101 @@ al af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab af af @@ -7881,13 +7916,13 @@ au an aO an -aZ +fM an bm an -al -al -al +fJ +fJ +fJ af af af @@ -8031,102 +8066,102 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK am am am @@ -8142,9 +8177,9 @@ ba at at an -bA -bA -bA +fN +fN +fN af af af @@ -8289,101 +8324,101 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK am ao ao @@ -8401,7 +8436,7 @@ at an bB bK -bT +fO af af af @@ -8546,101 +8581,101 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an ap fD @@ -8658,7 +8693,7 @@ bc bu bC bL -bT +fO af af af @@ -8810,94 +8845,94 @@ ab ab af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an aq aM @@ -8915,7 +8950,7 @@ be an bD bM -bT +fO af af af @@ -9068,93 +9103,93 @@ af af ab ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an an an @@ -9326,92 +9361,92 @@ af af af ed -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an ar ar @@ -9583,92 +9618,92 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an as at @@ -9841,91 +9876,91 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an an av @@ -10100,103 +10135,103 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an an an an at an -aY +fL aN aN -ab -ab -ab -ab +dq +dq +dq +dq an bF bG @@ -10357,103 +10392,103 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK an aF an -aY -ab -ab -ab -ab -ab -ab +fL +dq +dq +dq +dq +dq +dq an an an @@ -10616,100 +10651,100 @@ af af af af -al +fK af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq an aE an -aY -ab -ab -ab -ab -ab +fL +dq +dq +dq +dq +dq af af af @@ -10875,97 +10910,97 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq aJ -ab -ab -ab -ab -ab +dq +dq +dq +dq +dq af af af @@ -11131,99 +11166,99 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab -ab -ab -ab -ab -ab -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -11390,97 +11425,97 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab -ab -ab -ab -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq +dq +dq +dq +dq +dq af af af @@ -11647,97 +11682,97 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab -ab -ab -ab -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq +dq +dq +dq +dq +dq af af af @@ -11905,97 +11940,97 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab -ab -ab -ab -ab -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq +dq +dq +dq +dq +dq +dq af af af @@ -12166,93 +12201,93 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -aU -aY -al -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +en +fL +fK +dq +dq af af af @@ -12425,92 +12460,92 @@ af af af af -al -al -al -ab -ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab +fK +fK +fK ab ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq +dq af af al @@ -12688,86 +12723,86 @@ af af ab ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af al @@ -12946,86 +12981,86 @@ af af ab ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq af af ee @@ -13203,86 +13238,86 @@ af af af ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq af af ef @@ -13460,86 +13495,86 @@ af af af ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq af af ee @@ -13716,25 +13751,25 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -13743,60 +13778,60 @@ af ab ab ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq af ab ee @@ -13975,20 +14010,20 @@ af af af af -al -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab ab af @@ -14001,58 +14036,58 @@ af af af ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -al -ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +dq +dq af af ab @@ -14237,15 +14272,15 @@ af af af af -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -14256,16 +14291,16 @@ af af af af -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK af af af @@ -14278,37 +14313,37 @@ af af af af -al -al +fK +fK ab af af ab -al -al -al -al -al -al -al -al -al -al -al -al -al +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK +fK ab af af -al -al -al -al -al -ab -ab -ab -ab +fK +fK +fK +fK +fK +dq +dq +dq +dq af af af @@ -14548,11 +14583,11 @@ af af af af -al -al -al -al -al +fK +fK +fK +fK +fK af af af @@ -14560,10 +14595,10 @@ af af af af -ab -ab -ab -ab +dq +dq +dq +dq af af af diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 2c58aa54a82..955cbf118bb 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -270,7 +270,9 @@ /obj/item/weapon/circuitboard/computer/prisoner name = "circuit board (Prisoner Management Console)" build_path = /obj/machinery/computer/prisoner - +/obj/item/weapon/circuitboard/computer/gulag_teleporter_console + name = "circuit board (Labor Camp teleporter console)" + build_path = /obj/machinery/computer/gulag_teleporter_computer /obj/item/weapon/circuitboard/computer/rdconsole name = "circuit board (RD Console)" diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm new file mode 100644 index 00000000000..c467e54b4fb --- /dev/null +++ b/code/game/machinery/computer/gulag_teleporter.dm @@ -0,0 +1,164 @@ +//computer that handle the points and teleports the prisoner +/obj/machinery/computer/gulag_teleporter_computer + name = "labor camp teleporter console" + desc = "Used to send criminals to the Labor Camp" + icon_screen = "explosive" + icon_keyboard = "security_key" + req_access = list(access_security) + circuit = /obj/item/weapon/circuitboard/computer/gulag_teleporter_console + var/default_goal = 200 + var/obj/item/weapon/card/id/prisoner/id = null + var/obj/machinery/gulag_teleporter/teleporter = null + var/obj/structure/gulag_beacon/beacon = null + var/mob/living/carbon/human/prisoner = null + var/datum/data/record/temporary_record = null + +/obj/machinery/computer/gulag_teleporter_computer/New() + ..() + addtimer(src, "scan_machinery", 5) + +/obj/machinery/computer/gulag_teleporter_computer/Destroy() + if(id) + id.forceMove(get_turf(src)) + return ..() + +/obj/machinery/computer/gulag_teleporter_computer/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/weapon/card/id/prisoner)) + if(!id) + if(!user.drop_item()) + return + W.forceMove(src) + id = W + user << "You insert [W]." + return + else + user << "There's an ID inserted already." + return ..() + +/obj/machinery/computer/gulag_teleporter_computer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "gulag_console", name, 455, 440, master_ui, state) + ui.open() + +/obj/machinery/computer/gulag_teleporter_computer/ui_data(mob/user) + var/list/data = list() + + var/list/prisoner_list = list() + var/can_teleport = FALSE + + if(teleporter && (teleporter.occupant && ishuman(teleporter.occupant))) + prisoner = teleporter.occupant + prisoner_list["name"] = prisoner.real_name + if(id) + can_teleport = TRUE + if(!isnull(data_core.general)) + for(var/r in data_core.security) + var/datum/data/record/R = r + if(R.fields["name"] == prisoner_list["name"]) + temporary_record = R + prisoner_list["crimstat"] = temporary_record.fields["criminal"] + + data["prisoner"] = prisoner_list + + if(teleporter) + data["teleporter"] = teleporter + data["teleporter_location"] = "([teleporter.x], [teleporter.y], [teleporter.z])" + data["teleporter_lock"] = teleporter.locked + data["teleporter_state_open"] = teleporter.state_open + if(beacon) + data["beacon"] = beacon + data["beacon_location"] = "([beacon.x], [beacon.y], [beacon.z])" + if(id) + data["id"] = id + data["id_name"] = id.registered_name + data["goal"] = id.goal + data["can_teleport"] = can_teleport + + return data + +/obj/machinery/computer/gulag_teleporter_computer/ui_act(action, list/params) + if(..()) + return + if(!allowed(usr)) + usr << "Access denied." + return + switch(action) + if("scan_teleporter") + teleporter = findteleporter() + if("scan_beacon") + beacon = findbeacon() + if("handle_id") + if(id) + if(!usr.get_active_hand()) + usr.put_in_hands(id) + id = null + else + id.forceMove(get_turf(src)) + id = null + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/card/id/prisoner)) + if(!usr.drop_item()) + return + I.forceMove(src) + id = I + if("set_goal") + var/new_goal = input("Set the amount of points:", "Points", id.goal) as num|null + if(!isnum(new_goal)) + return + if(!new_goal) + new_goal = default_goal + id.goal = Clamp(new_goal, 0, 1000) //maximum 1000 points + if("toggle_open") + if(teleporter.locked) + usr << "The teleporter is locked" + return + teleporter.toggle_open() + if("teleporter_lock") + if(teleporter.state_open) + usr << "Close the teleporter before locking!" + return + teleporter.locked = !teleporter.locked + if("teleport") + if(!teleporter || !beacon) + return + addtimer(src, "teleport", 5, FALSE, usr) + +/obj/machinery/computer/gulag_teleporter_computer/proc/scan_machinery() + teleporter = findteleporter() + beacon = findbeacon() + +/obj/machinery/computer/gulag_teleporter_computer/proc/findteleporter() + var/obj/machinery/gulag_teleporter/teleporterf = null + + for(dir in cardinal) + teleporterf = locate(/obj/machinery/gulag_teleporter, get_step(src, dir)) + if(teleporterf && teleporterf.is_operational()) + return teleporterf + +/obj/machinery/computer/gulag_teleporter_computer/proc/findbeacon() + return locate(/obj/structure/gulag_beacon) + +/obj/machinery/computer/gulag_teleporter_computer/proc/teleport(mob/user) + log_game("[user]([user.ckey] teleported [prisoner]([prisoner.ckey]) to the Labor Camp ([beacon.x], [beacon.y], [beacon.z]) for [id.goal] points.") + teleporter.handle_prisoner(id, temporary_record) + playsound(loc, "sound/weapons/emitter.ogg", 50, 1) + prisoner.forceMove(beacon) + prisoner.Weaken(2) // small travel dizziness + prisoner << "The teleportation makes you a little dizzy." + PoolOrNew(/obj/effect/particle_effect/sparks, prisoner.loc) + playsound(src.loc, "sparks", 50, 1) + if(teleporter.locked) + teleporter.locked = FALSE + teleporter.toggle_open() + id = null + temporary_record = null + + + + + + + diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm new file mode 100644 index 00000000000..91d7bb1882a --- /dev/null +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -0,0 +1,108 @@ +/obj/machinery/gulag_item_reclaimer + name = "equipment reclaimer station" + desc = "Used to reclaim your items after you finish your sentence at the labor camp" + icon = 'icons/obj/terminals.dmi' + icon_state = "dorm_taken" + req_access = list(access_security) //reqaccess to access all stored items + density = 0 + anchored = 1 + use_power = 1 + idle_power_usage = 100 + active_power_usage = 2500 + var/list/stored_items = list() + var/obj/item/weapon/card/id/prisoner/inserted_id = null + var/obj/machinery/gulag_teleporter/linked_teleporter = null + +/obj/machinery/gulag_item_reclaimer/Destroy() + for(var/i in contents) + var/obj/item/I = i + I.forceMove(get_turf(src)) + if(linked_teleporter) + linked_teleporter.linked_reclaimer = null + if(inserted_id) + inserted_id.forceMove(get_turf(src)) + inserted_id = null + return ..() + +/obj/machinery/gulag_item_reclaimer/emag_act(mob/user) + if(!emagged) // emagging lets anyone reclaim all the items + req_access = list() + emagged = 1 + +/obj/machinery/gulag_item_reclaimer/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/card/id/prisoner)) + if(!inserted_id) + if(!user.drop_item()) + return + I.forceMove(src) + inserted_id = I + user << "You insert [I]." + return + else + user << "There's an ID inserted already." + return ..() + +/obj/machinery/gulag_item_reclaimer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "gulag_item_reclaimer", name, 455, 440, master_ui, state) + ui.open() + +/obj/machinery/gulag_item_reclaimer/ui_data(mob/user) + var/list/data = list() + var/can_reclaim = FALSE + + if(inserted_id) + data["id"] = inserted_id + data["id"]["name"] = inserted_id.registered_name + if(inserted_id.points >= inserted_id.goal || allowed(user)) + can_reclaim = TRUE + + var/list/mobs = list() + for(var/i in stored_items) + var/mob/thismob = i + var/list/mob_info = list() + mob_info["name"] = thismob.real_name + mob_info["mob"] = "\ref[thismob]" + mobs += list(mob_info) + + data["mobs"] = mobs + + + data["can_reclaim"] = can_reclaim + + return data + +/obj/machinery/gulag_item_reclaimer/ui_act(action, list/params) + switch(action) + if("handle_id") + if(inserted_id) + if(!usr.get_active_hand()) + usr.put_in_hands(inserted_id) + inserted_id = null + else + inserted_id.forceMove(get_turf(src)) + inserted_id = null + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/card/id/prisoner)) + if(!usr.drop_item()) + return + I.forceMove(src) + inserted_id = I + if("release_items") + var/mob/M = locate(params["mobref"]) + if(M == usr || allowed(usr)) + drop_items(M) + else + usr << "Access denied." + +/obj/machinery/gulag_item_reclaimer/proc/drop_items(mob/user) + if(!stored_items[user]) + return + for(var/i in stored_items[user]) + var/obj/item/W = i + stored_items[user] -= W + W.forceMove(get_turf(src)) + stored_items -= user \ No newline at end of file diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm new file mode 100644 index 00000000000..8a1ae3a9378 --- /dev/null +++ b/code/game/machinery/gulag_teleporter.dm @@ -0,0 +1,173 @@ +/* +The gulag teleporter teleports a prisoner to the gulag outpost. +It automatically strips the prisoner and equips a prisoner ID, prisoner jumpsuit and oranges sneakers. +You can set the amount of points in the console +The console is located at computer/gulag_teleporter.dm +*/ + +//Gulag teleporter +/obj/machinery/gulag_teleporter + name = "labor camp teleporter" + desc = "A bluespace teleporter used for teleporting prisoners to the labor camp." + icon = 'icons/obj/machines/implantchair.dmi' + icon_state = "implantchair" + state_open = 0 + density = 1 + anchored = 1 + use_power = 1 + idle_power_usage = 200 + active_power_usage = 5000 + var/locked = FALSE + var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner + var/shoes_type = /obj/item/clothing/shoes/sneakers/orange + var/obj/machinery/gulag_item_reclaimer/linked_reclaimer = null + +/obj/machinery/gulag_teleporter/New() + ..() + var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gulag_teleporter(null) + B.apply_default_parts(src) + addtimer(src, "locate_reclaimer", 5) + +/obj/machinery/gulag_teleporter/Destroy() + if(linked_reclaimer) + linked_reclaimer.linked_teleporter = null + return ..() + +/obj/machinery/gulag_teleporter/power_change() + ..() + update_icon() + + +/obj/machinery/gulag_teleporter/interact(mob/user) + if(locked) + user << "[src] is locked." + return + toggle_open() + +/obj/machinery/gulag_teleporter/updateUsrDialog() + return + +/obj/machinery/gulag_teleporter/attackby(obj/item/I, mob/user) + if(!occupant && default_deconstruction_screwdriver(user, "[icon_state]", "[icon_state]",I)) + update_icon() + return + + if(default_deconstruction_crowbar(I)) + return + + if(default_pry_open(I)) + return + + return ..() + +/obj/machinery/gulag_teleporter/update_icon() + icon_state = initial(icon_state) + (state_open ? "_open" : "") + //no power or maintenance + if(stat & (NOPOWER|BROKEN)) + icon_state += "_unpowered" + if((stat & MAINT) || panel_open) + icon_state += "_maintenance" + return + + if((stat & MAINT) || panel_open) + icon_state += "_maintenance" + return + + //running and someone in there + if(occupant) + icon_state += "_occupied" + return + + +/obj/machinery/gulag_teleporter/relaymove(mob/user) + if(user.stat != CONSCIOUS) + return + if(locked) + user << "[src] is locked!" + return + open_machine() + +/obj/machinery/gulag_teleporter/container_resist(mob/living/user) + var/breakout_time = 600 + if(!locked) + open_machine() + return + user.changeNext_move(CLICK_CD_BREAKOUT) + user.last_special = world.time + CLICK_CD_BREAKOUT + user << "You lean on the back of [src] and start pushing the door open... (this will take about a minute.)" + user.visible_message("You hear a metallic creaking from [src]!") + + if(do_after(user,(breakout_time), target = src)) + if(!user || user.stat != CONSCIOUS || user.loc != src || state_open || !locked) + return + + locked = FALSE + visible_message("[user] successfully broke out of [src]!") + user << "You successfully break out of [src]!" + + open_machine() + +/obj/machinery/gulag_teleporter/proc/locate_reclaimer() + linked_reclaimer = locate(/obj/machinery/gulag_item_reclaimer) + if(linked_reclaimer) + linked_reclaimer.linked_teleporter = src + +/obj/machinery/gulag_teleporter/proc/toggle_open() + if(panel_open) + usr << "Close the maintenance panel first." + return + + if(state_open) + close_machine() + return + if(!locked) + open_machine() + +// strips and stores all occupant's items +/obj/machinery/gulag_teleporter/proc/strip_occupant() + if(linked_reclaimer) + linked_reclaimer.stored_items[occupant] = list() + for(var/obj/item/W in occupant) + if(occupant.unEquip(W)) + if(istype(W, /obj/item/weapon/restraints/handcuffs)) + W.forceMove(get_turf(src)) + continue + if(istype(W, /obj/item/weapon/implant/storage)) + continue + if(linked_reclaimer) + linked_reclaimer.stored_items[occupant] += W + linked_reclaimer.contents += W + W.forceMove(linked_reclaimer) + else + W.forceMove(src) + +/obj/machinery/gulag_teleporter/proc/handle_prisoner(obj/item/id, datum/data/record/R) + if(!ishuman(occupant)) + return + strip_occupant() + var/mob/living/carbon/human/prisoner = occupant + if(jumpsuit_type) + prisoner.equip_to_appropriate_slot(new jumpsuit_type) + if(shoes_type) + prisoner.equip_to_appropriate_slot(new shoes_type) + if(id) + prisoner.equip_to_appropriate_slot(id) + if(R) + R.fields["criminal"] = "Incarcerated" + +/obj/item/weapon/circuitboard/machine/gulag_teleporter + name = "circuit board (labor camp teleporter)" + build_path = /obj/machinery/gulag_teleporter + origin_tech = "programming=3;engineering=4;bluespace=4;materials=4" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 2, + /obj/item/weapon/stock_parts/scanning_module, + /obj/item/weapon/stock_parts/manipulator) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/* beacon that receives the teleported prisoner */ +/obj/structure/gulag_beacon + name = "labor camp bluespace beacon" + desc = "A recieving beacon for bluespace teleportations." + icon = 'icons/turf/floors.dmi' + icon_state = "light_on-w" diff --git a/code/modules/mining/laborcamp/laborminerals.dm b/code/modules/mining/laborcamp/laborminerals.dm index f39f10ed440..5299d953754 100644 --- a/code/modules/mining/laborcamp/laborminerals.dm +++ b/code/modules/mining/laborcamp/laborminerals.dm @@ -6,4 +6,14 @@ /turf/closed/mineral/random/labormineral/New() icon_state = "rock" - ..() \ No newline at end of file + ..() + +/turf/closed/mineral/random/labormineral/volcanic + environment_type = "basalt" + turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + initial_gas_mix = "o2=14;n2=23;TEMP=300" + defer_change = 1 + mineralSpawnChanceList = list( + /turf/closed/mineral/iron/volcanic = 100, /turf/closed/mineral/uranium/volcanic = 1, /turf/closed/mineral/diamond/volcanic = 1, + /turf/closed/mineral/gold/volcanic = 1, /turf/closed/mineral/silver/volcanic = 1, /turf/closed/mineral/plasma/volcanic = 1) \ No newline at end of file diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 2b1c53c082a..58e13865f94 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -7,7 +7,7 @@ icon_state = "console" density = 0 anchored = 1 - var/obj/machinery/mineral/stacking_machine/laborstacker/machine = null + var/obj/machinery/mineral/stacking_machine/laborstacker/stacking_machine = null var/machinedir = SOUTH var/obj/item/weapon/card/id/prisoner/inserted_id var/obj/machinery/door/airlock/release_door @@ -19,50 +19,106 @@ ..() Radio = new/obj/item/device/radio(src) Radio.listening = 0 - spawn(7) - src.machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) - var/t - for(var/obj/machinery/door/airlock/d in range(5,src)) - t = d.id_tag - if(t == src.door_tag) - src.release_door = d - if (machine && release_door) - machine.CONSOLE = src - else - qdel(src) - -/obj/machinery/mineral/labor_claim_console/proc/check_auth() - if(emagged) return 1 //Shuttle is emagged, let any ol' person through - return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota. - - -/obj/machinery/mineral/labor_claim_console/attack_hand(mob/user) - var/dat - dat += text("Point Claim Console

    ") - if(emagged) //Shit's broken - dat += text("QU&#t0A In%aL*D
    ") - else if(istype(inserted_id)) //There's an ID in there. - dat += text("ID: [inserted_id.registered_name] Eject ID.
    ") - dat += text("Points Collected:[inserted_id.points]
    ") - dat += text("Point Quota: [inserted_id.goal] - Reach your quota to earn your release
    ") - dat += text("Unclaimed Collection Points: [machine.points]. Claim points.
    ") - else //No ID in sight. Complain about it. - dat += text("No ID inserted. Insert ID.
    ") - if(check_auth()) - dat += text("Proceed to Station.
    ") - dat += text("Open release door.
    ") - if(machine) - dat += text("
    Mineral Value List:
    [machine.get_ore_values()]") - - - user << browse("[dat]", "window=console_stacking_machine") - + addtimer(src, "locate_stacking_machine", 7) /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/card/id)) - return attack_hand(user) + if(istype(I, /obj/item/weapon/card/id/prisoner)) + if(!inserted_id) + if(!user.drop_item()) + return + I.forceMove(src) + inserted_id = I + user << "You insert [I]." + return + else + user << "There's an ID inserted already." + return ..() + +/obj/machinery/mineral/labor_claim_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "labor_claim_console", name, 450, 475, master_ui, state) + ui.open() + +/obj/machinery/mineral/labor_claim_console/ui_data(mob/user) + var/list/data = list() + var/can_go_home = FALSE + + data["emagged"] = emagged + if(inserted_id) + data["id"] = inserted_id + data["id_name"] = inserted_id.registered_name + data["points"] = inserted_id.points + data["goal"] = inserted_id.goal + if(check_auth()) + can_go_home = TRUE + + var/list/ores = list() + if(stacking_machine) + data["unclaimed_points"] = stacking_machine.points + for(var/ore in stacking_machine.ore_values) + var/list/O = list() + O["ore"] = ore + O["value"] = stacking_machine.ore_values[ore] + ores += list(O) + + data["ores"] = ores + data["can_go_home"] = can_go_home + + return data + +/obj/machinery/mineral/labor_claim_console/ui_act(action, params) + if(..()) + return + switch(action) + if("handle_id") + if(inserted_id) + if(!usr.get_active_hand()) + usr.put_in_hands(inserted_id) + inserted_id = null + else + inserted_id.forceMove(get_turf(src)) + inserted_id = null + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/weapon/card/id/prisoner)) + if(!usr.drop_item()) + return + I.forceMove(src) + inserted_id = I + if("claim_points") + inserted_id.points += stacking_machine.points + stacking_machine.points = 0 + usr << "Points transferred." + if("move_shuttle") + if(!alone_in_area(get_area(src), usr)) + usr << "Prisoners are only allowed to be released while alone." + else + switch(SSshuttle.moveShuttle("laborcamp","laborcamp_home")) + if(1) + usr << "Shuttle not found" + if(2) + usr << "Shuttle already at station" + if(3) + usr << "No permission to dock could be granted." + else + if(!emagged) + Radio.set_frequency(SEC_FREQ) + Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", SEC_FREQ) + usr << "Shuttle received message and will be sent shortly." + +/obj/machinery/mineral/labor_claim_console/proc/check_auth() + if(emagged) + return 1 //Shuttle is emagged, let any ol' person through + return (istype(inserted_id) && inserted_id.points >= inserted_id.goal) //Otherwise, only let them out if the prisoner's reached his quota. + +/obj/machinery/mineral/labor_claim_console/proc/locate_stacking_machine() + stacking_machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) + if(stacking_machine) + stacking_machine.CONSOLE = src else - return ..() + qdel(src) /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) if(!emagged) @@ -70,74 +126,12 @@ user << "PZZTTPFFFT" - -/obj/machinery/mineral/labor_claim_console/Topic(href, href_list) - usr.set_machine(src) - src.add_fingerprint(usr) - if(href_list["choice"]) - if(istype(inserted_id)) //Sanity check against href spoofs - if(href_list["choice"] == "eject") - inserted_id.loc = loc - inserted_id.verb_pickup() - inserted_id = null - if(href_list["choice"] == "claim") - inserted_id.points += machine.points - machine.points = 0 - src << "Points transferred." - else if(href_list["choice"] == "insert") - var/obj/item/weapon/card/id/prisoner/I = usr.get_active_hand() - if(istype(I)) - if(!usr.drop_item()) - return - I.loc = src - inserted_id = I - else usr << "Invalid ID." - if(check_auth()) //Sanity check against hef spoofs - if(href_list["choice"] == "station") - if(!alone_in_area(get_area(src), usr)) - usr << "Prisoners are only allowed to be released while alone." - else - switch(SSshuttle.moveShuttle("laborcamp","laborcamp_home")) - if(1) - usr << "Shuttle not found" - if(2) - usr << "Shuttle already at station" - if(3) - usr << "No permission to dock could be granted." - else - Radio.set_frequency(SEC_FREQ) - Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", SEC_FREQ) - usr << "Shuttle received message and will be sent shortly." - - if(href_list["choice"] == "release") - if(alone_in_area(get_area(loc), usr)) - var/obj/docking_port/stationary/S = SSshuttle.getDock("laborcamp_home") - if(S && S.get_docked()) - if(release_door && release_door.density) - release_door.open() - else - usr << "Prisoners can only be released while docked with the station." - else - usr << "Prisoners are only allowed to be released while alone." - - src.updateUsrDialog() - return - - /**********************Prisoner Collection Unit**************************/ /obj/machinery/mineral/stacking_machine/laborstacker var/points = 0 //The unclaimed value of ore stacked. Value for each ore loosely relative to its rarity. - var/list/ore_values = list(("glass" = 1), ("metal" = 2), ("solid plasma" = 20), ("plasteel" = 23), ("reinforced glass" = 4), ("gold" = 20), ("silver" = 20), ("uranium" = 20), ("diamond" = 25), ("bananium" = 50)) - -/obj/machinery/mineral/stacking_machine/laborstacker/proc/get_ore_values() - var/dat = "" - for(var/ore in ore_values) - var/value = ore_values[ore] - dat += "" - dat += "
    [capitalize(ore)][value]
    " - return dat + var/list/ore_values = list("glass" = 1, "metal" = 2, "solid plasma" = 20, "plasteel" = 23, "reinforced glass" = 4, "gold" = 20, "silver" = 20, "uranium" = 20, "diamond" = 25, "bananium" = 50) /obj/machinery/mineral/stacking_machine/laborstacker/process_sheet(obj/item/stack/sheet/inp) if(istype(inp)) diff --git a/code/modules/mining/lavaland/lavaland_areas.dm b/code/modules/mining/lavaland/lavaland_areas.dm index 246fee16f8e..d87b2310615 100644 --- a/code/modules/mining/lavaland/lavaland_areas.dm +++ b/code/modules/mining/lavaland/lavaland_areas.dm @@ -27,3 +27,6 @@ /area/lavaland/surface/outdoors name = "Lavaland Wastes" outdoors = 1 + +/area/lavaland/surface/outdoors/explored + name = "Lavaland Labor Camp" \ No newline at end of file diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 723f9988266..a41933fcd67 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -339,7 +339,7 @@ new turf_type(T) /turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T) if(prob(30)) - if(istype(loc, /area/mine/explored)) + if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored)) return for(var/atom/A in urange(12,T))//Lowers chance of mob clumps if(istype(A, /mob/living/simple_animal/hostile/asteroid)) diff --git a/icons/obj/machines/implantchair.dmi b/icons/obj/machines/implantchair.dmi index 94adefcbf2812f18fd20940bd966a1dd4795f4e0..d57db2b4f3117f60df38d4511038937fab759aed 100644 GIT binary patch literal 8079 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 literal 7622 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 i=this.tryEntries[r],a=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var o=b.call(i,"catchLoc"),s=b.call(i,"finallyLoc");if(o&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),O}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;d(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},O}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(190),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{190:190}],3:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],4:[function(t,e,n){var r=t(84)("unscopables"),i=Array.prototype;void 0==i[r]&&t(32)(i,r,{}),e.exports=function(t){i[r][t]=!0}},{32:32,84:84}],5:[function(t,e,n){var r=t(39);e.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},{39:39}],6:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].copyWithin||function(t,e){var n=r(this),o=a(n.length),s=i(t,o),u=i(e,o),c=arguments,l=c.length>2?c[2]:void 0,p=Math.min((void 0===l?o:i(l,o))-u,o-s),f=1;for(s>u&&u+p>s&&(f=-1,u+=p-1,s+=p-1);p-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{77:77,80:80,81:81}],7:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].fill||function(t){for(var e=r(this),n=a(e.length),o=arguments,s=o.length,u=i(s>1?o[1]:void 0,n),c=s>2?o[2]:void 0,l=void 0===c?n:i(c,n);l>u;)e[u++]=t;return e}},{77:77,80:80,81:81}],8:[function(t,e,n){var r=t(79),i=t(80),a=t(77);e.exports=function(t){return function(e,n,o){var s,u=r(e),c=i(u.length),l=a(o,c);if(t&&n!=n){for(;c>l;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l;return!t&&-1}}},{77:77,79:79,80:80}],9:[function(t,e,n){var r=t(18),i=t(35),a=t(81),o=t(80),s=t(10);e.exports=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,l=6==t,p=5==t||l;return function(f,d,h){for(var m,v,g=a(f),b=i(g),y=r(d,h,3),x=o(b.length),_=0,w=e?s(f,x):n?s(f,0):void 0;x>_;_++)if((p||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(c)return!1;return l?-1:u||c?c:w}}},{10:10,18:18,35:35,80:80,81:81}],10:[function(t,e,n){var r=t(39),i=t(37),a=t(84)("species");e.exports=function(t,e){var n;return i(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!i(n.prototype)||(n=void 0),r(n)&&(n=n[a],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{37:37,39:39,84:84}],11:[function(t,e,n){var r=t(12),i=t(84)("toStringTag"),a="Arguments"==r(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[i])?n:a?r(e):"Object"==(o=r(e))&&"function"==typeof e.callee?"Arguments":o}},{12:12,84:84}],12:[function(t,e,n){var r={}.toString;e.exports=function(t){return r.call(t).slice(8,-1)}},{}],13:[function(t,e,n){"use strict";var r=t(47),i=t(32),a=t(61),o=t(18),s=t(70),u=t(19),c=t(28),l=t(43),p=t(45),f=t(83)("id"),d=t(31),h=t(39),m=t(66),v=t(20),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";i(t,f,++y)}return"O"+t[f]},_=function(t,e){var n,r=x(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,i){var l=t(function(t,a){s(t,l,e),t._i=r.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=a&&c(a,n,t[i],t)});return a(l.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var r=n.n,i=n.p;delete e._i[n.i],n.r=!0,i&&(i.n=r),r&&(r.p=i),e._f==n&&(e._f=r),e._l==n&&(e._l=i),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&r.setDesc(l.prototype,"size",{get:function(){return u(this[b])}}),l},def:function(t,e,n){var r,i,a=_(t,e);return a?a.v=n:(t._l=a={i:i=x(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=a),r&&(r.n=a),t[b]++,"F"!==i&&(t._i[i]=a)),t},getEntry:_,setStrong:function(t,e,n){l(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?p(0,n.k):"values"==e?p(0,n.v):p(0,[n.k,n.v]):(t._t=void 0,p(1))},n?"entries":"values",!n,!0),m(e)}}},{18:18,19:19,20:20,28:28,31:31,32:32,39:39,43:43,45:45,47:47,61:61,66:66,70:70,83:83}],14:[function(t,e,n){var r=t(28),i=t(11);e.exports=function(t){return function(){if(i(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return r(this,!1,e.push,e),e}}},{11:11,28:28}],15:[function(t,e,n){"use strict";var r=t(32),i=t(61),a=t(5),o=t(39),s=t(70),u=t(28),c=t(9),l=t(31),p=t(83)("weak"),f=Object.isExtensible||o,d=c(5),h=c(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,r){var a=t(function(t,i){s(t,a,e),t._i=m++,t._l=void 0,void 0!=i&&u(i,n,t[r],t)});return i(a.prototype,{"delete":function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i)&&delete t[p][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i):v(this).has(t):!1}}),a},def:function(t,e,n){return f(a(e))?(l(e,p)||r(e,p,{}),e[p][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:p}},{28:28,31:31,32:32,39:39,5:5,61:61,70:70,83:83,9:9}],16:[function(t,e,n){"use strict";var r=t(30),i=t(23),a=t(62),o=t(61),s=t(28),u=t(70),c=t(39),l=t(25),p=t(44),f=t(67);e.exports=function(t,e,n,d,h,m){var v=r[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];a(y,t,"delete"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!l(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=l(function(){k.has(1)}),O=p(function(t){new g(t)});O||(g=e(function(e,n){u(e,g,t);var r=new v;return void 0!=n&&s(n,h,r[b],r),r}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),x[t]=g,i(i.G+i.W+i.F*(g!=v),x),m||d.setStrong(g,t,h),g}},{23:23,25:25,28:28,30:30,39:39,44:44,61:61,62:62,67:67,70:70}],17:[function(t,e,n){var r=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=r)},{}],18:[function(t,e,n){var r=t(3);e.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},{3:3}],19:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],20:[function(t,e,n){e.exports=!t(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{25:25}],21:[function(t,e,n){var r=t(39),i=t(30).document,a=r(i)&&r(i.createElement);e.exports=function(t){return a?i.createElement(t):{}}},{30:30,39:39}],22:[function(t,e,n){var r=t(47);e.exports=function(t){var e=r.getKeys(t),n=r.getSymbols;if(n)for(var i,a=n(t),o=r.isEnum,s=0;a.length>s;)o.call(t,i=a[s++])&&e.push(i);return e}},{47:47}],23:[function(t,e,n){var r=t(30),i=t(17),a=t(32),o=t(62),s=t(18),u="prototype",c=function(t,e,n){var l,p,f,d,h=t&c.F,m=t&c.G,v=t&c.S,g=t&c.P,b=t&c.B,y=m?r:v?r[e]||(r[e]={}):(r[e]||{})[u],x=m?i:i[e]||(i[e]={}),_=x[u]||(x[u]={});m&&(n=e);for(l in n)p=!h&&y&&l in y,f=(p?y:n)[l],d=b&&p?s(f,r):g&&"function"==typeof f?s(Function.call,f):f,y&&!p&&o(y,l,f),x[l]!=f&&a(x,l,d),g&&_[l]!=f&&(_[l]=f)};r.core=i,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},{17:17,18:18,30:30,32:32,62:62}],24:[function(t,e,n){var r=t(84)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(i){}}return!0}},{84:84}],25:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],26:[function(t,e,n){"use strict";var r=t(32),i=t(62),a=t(25),o=t(19),s=t(84);e.exports=function(t,e,n){var u=s(t),c=""[t];a(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,n(o,u,c)),r(RegExp.prototype,u,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},{19:19,25:25,32:32,62:62,84:84}],27:[function(t,e,n){"use strict";var r=t(5);e.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{5:5}],28:[function(t,e,n){var r=t(18),i=t(41),a=t(36),o=t(5),s=t(80),u=t(85);e.exports=function(t,e,n,c){var l,p,f,d=u(t),h=r(n,c,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(a(d))for(l=s(t.length);l>m;m++)e?h(o(p=t[m])[0],p[1]):h(t[m]);else for(f=d.call(t);!(p=f.next()).done;)i(f,h,p.value,e)}},{18:18,36:36,41:41,5:5,80:80,85:85}],29:[function(t,e,n){var r=t(79),i=t(47).getNames,a={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return i(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==a.call(t)?s(t):i(r(t))}},{47:47,79:79}],30:[function(t,e,n){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],31:[function(t,e,n){var r={}.hasOwnProperty;e.exports=function(t,e){return r.call(t,e)}},{}],32:[function(t,e,n){var r=t(47),i=t(60);e.exports=t(20)?function(t,e,n){return r.setDesc(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},{20:20,47:47,60:60}],33:[function(t,e,n){e.exports=t(30).document&&document.documentElement},{30:30}],34:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],35:[function(t,e,n){var r=t(12);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},{12:12}],36:[function(t,e,n){var r=t(46),i=t(84)("iterator"),a=Array.prototype;e.exports=function(t){return void 0!==t&&(r.Array===t||a[i]===t)}},{46:46,84:84}],37:[function(t,e,n){var r=t(12);e.exports=Array.isArray||function(t){return"Array"==r(t)}},{12:12}],38:[function(t,e,n){var r=t(39),i=Math.floor;e.exports=function(t){return!r(t)&&isFinite(t)&&i(t)===t}},{39:39}],39:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],40:[function(t,e,n){var r=t(39),i=t(12),a=t(84)("match");e.exports=function(t){var e;return r(t)&&(void 0!==(e=t[a])?!!e:"RegExp"==i(t))}},{12:12,39:39,84:84}],41:[function(t,e,n){var r=t(5);e.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&r(o.call(t)),a}}},{5:5}],42:[function(t,e,n){"use strict";var r=t(47),i=t(60),a=t(67),o={};t(32)(o,t(84)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=r.create(o,{next:i(1,n)}),a(t,e+" Iterator")}},{32:32,47:47,60:60,67:67,84:84}],43:[function(t,e,n){"use strict";var r=t(49),i=t(23),a=t(62),o=t(32),s=t(31),u=t(46),c=t(42),l=t(67),p=t(47).getProto,f=t(84)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){c(n,e,b);var w,k,E=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",O=y==v,C=!1,A=t.prototype,P=A[f]||A[h]||y&&A[y],T=P||E(y);if(P){var j=p(T.call(new t));l(j,S,!0),!r&&s(A,h)&&o(j,f,g),O&&P.name!==v&&(C=!0,T=function(){return P.call(this)})}if(r&&!_||!d&&!C&&A[f]||o(A,f,T),u[e]=T,u[S]=g,y)if(w={values:O?T:E(v),keys:x?T:E(m),entries:O?E("entries"):T},_)for(k in w)k in A||a(A,k,w[k]);else i(i.P+i.F*(d||C),e,w);return w}},{23:23,31:31,32:32,42:42,46:46,47:47,49:49,62:62,67:67,84:84}],44:[function(t,e,n){var r=t(84)("iterator"),i=!1;try{var a=[7][r]();a["return"]=function(){i=!0},Array.from(a,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var a=[7],o=a[r]();o.next=function(){n=!0},a[r]=function(){return o},t(a)}catch(s){}return n}},{84:84}],45:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],46:[function(t,e,n){e.exports={}},{}],47:[function(t,e,n){var r=Object;e.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},{}],48:[function(t,e,n){var r=t(47),i=t(79);e.exports=function(t,e){for(var n,a=i(t),o=r.getKeys(a),s=o.length,u=0;s>u;)if(a[n=o[u++]]===e)return n}},{47:47,79:79}],49:[function(t,e,n){e.exports=!1},{}],50:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],51:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],52:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],53:[function(t,e,n){var r,i,a,o=t(30),s=t(76).set,u=o.MutationObserver||o.WebKitMutationObserver,c=o.process,l=o.Promise,p="process"==t(12)(c),f=function(){var t,e,n;for(p&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;i=void 0,t&&t.enter()};if(p)a=function(){c.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),a=function(){h.data=d=-d}}else a=l&&l.resolve?function(){l.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:p&&c.domain};i&&(i.next=e),r||(r=e,a()),i=e}},{12:12,30:30,76:76}],54:[function(t,e,n){var r=t(47),i=t(81),a=t(35);e.exports=t(25)(function(){var t=Object.assign,e={},n={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach(function(t){n[t]=t}),7!=t({},e)[r]||Object.keys(t({},n)).join("")!=i})?function(t,e){for(var n=i(t),o=arguments,s=o.length,u=1,c=r.getKeys,l=r.getSymbols,p=r.isEnum;s>u;)for(var f,d=a(o[u++]),h=l?c(d).concat(l(d)):c(d),m=h.length,v=0;m>v;)p.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{25:25,35:35,47:47,81:81}],55:[function(t,e,n){var r=t(23),i=t(17),a=t(25);e.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],o={};o[t]=e(n),r(r.S+r.F*a(function(){n(1)}),"Object",o)}},{17:17,23:23,25:25}],56:[function(t,e,n){var r=t(47),i=t(79),a=r.isEnum;e.exports=function(t){return function(e){for(var n,o=i(e),s=r.getKeys(o),u=s.length,c=0,l=[];u>c;)a.call(o,n=s[c++])&&l.push(t?[n,o[n]]:o[n]);return l}}},{47:47,79:79}],57:[function(t,e,n){var r=t(47),i=t(5),a=t(30).Reflect;e.exports=a&&a.ownKeys||function(t){var e=r.getNames(i(t)),n=r.getSymbols;return n?e.concat(n(t)):e}},{30:30,47:47,5:5}],58:[function(t,e,n){"use strict";var r=t(59),i=t(34),a=t(3);e.exports=function(){for(var t=a(this),e=arguments.length,n=Array(e),o=0,s=r._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var r,a=this,o=arguments,c=o.length,l=0,p=0;if(!u&&!c)return i(t,n,a);if(r=n.slice(),u)for(;e>l;l++)r[l]===s&&(r[l]=o[p++]);for(;c>p;)r.push(o[p++]);return i(t,r,a)}}},{3:3,34:34,59:59}],59:[function(t,e,n){e.exports=t(30)},{30:30}],60:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],61:[function(t,e,n){var r=t(62);e.exports=function(t,e){for(var n in e)r(t,n,e[n]);return t}},{62:62}],62:[function(t,e,n){var r=t(30),i=t(32),a=t(83)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(17).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(a)||i(n,a,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||i(n,"name",e)),t===r?t[e]=n:(o||delete t[e],i(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[a]||s.call(this)})},{17:17,30:30,32:32,83:83}],63:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],64:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],65:[function(t,e,n){var r=t(47).getDesc,i=t(39),a=t(5),o=function(t,e){if(a(t),!i(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,i){try{i=t(18)(Function.call,r(Object.prototype,"__proto__").set,2),i(e,[]),n=!(e instanceof Array)}catch(a){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:i(t,e),t}}({},!1):void 0),check:o}},{18:18,39:39,47:47,5:5}],66:[function(t,e,n){"use strict";var r=t(30),i=t(47),a=t(20),o=t(84)("species");e.exports=function(t){var e=r[t];a&&e&&!e[o]&&i.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{20:20,30:30,47:47,84:84}],67:[function(t,e,n){var r=t(47).setDesc,i=t(31),a=t(84)("toStringTag");e.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,a)&&r(t,a,{configurable:!0,value:e})}},{31:31,47:47,84:84}],68:[function(t,e,n){var r=t(30),i="__core-js_shared__",a=r[i]||(r[i]={});e.exports=function(t){return a[t]||(a[t]={})}},{30:30}],69:[function(t,e,n){var r=t(5),i=t(3),a=t(84)("species");e.exports=function(t,e){var n,o=r(t).constructor;return void 0===o||void 0==(n=r(o)[a])?e:i(n)}},{3:3,5:5,84:84}],70:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],71:[function(t,e,n){var r=t(78),i=t(19);e.exports=function(t){return function(e,n){var a,o,s=i(e)+"",u=r(n),c=s.length;return 0>u||u>=c?t?"":void 0:(a=s.charCodeAt(u),55296>a||a>56319||u+1===c||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):a:t?s.slice(u,u+2):(a-55296<<10)+(o-56320)+65536)}}},{19:19,78:78}],72:[function(t,e,n){var r=t(40),i=t(19);e.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return i(t)+""}},{19:19,40:40}],73:[function(t,e,n){var r=t(80),i=t(74),a=t(19);e.exports=function(t,e,n,o){var s=a(t)+"",u=s.length,c=void 0===n?" ":n+"",l=r(e);if(u>=l)return s;""==c&&(c=" ");var p=l-u,f=i.call(c,Math.ceil(p/c.length));return f.length>p&&(f=f.slice(0,p)),o?f+s:s+f}},{19:19,74:74,80:80}],74:[function(t,e,n){"use strict";var r=t(78),i=t(19);e.exports=function(t){var e=i(this)+"",n="",a=r(t);if(0>a||a==1/0)throw RangeError("Count can't be negative");for(;a>0;(a>>>=1)&&(e+=e))1&a&&(n+=e);return n}},{19:19,78:78}],75:[function(t,e,n){var r=t(23),i=t(19),a=t(25),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",c=RegExp("^"+s+s+"*"),l=RegExp(s+s+"*$"),p=function(t,e){var n={};n[t]=e(f),r(r.P+r.F*a(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=p.trim=function(t,e){return t=i(t)+"",1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(l,"")),t};e.exports=p},{19:19,23:23,25:25}],76:[function(t,e,n){var r,i,a,o=t(18),s=t(34),u=t(33),c=t(21),l=t(30),p=l.process,f=l.setImmediate,d=l.clearImmediate,h=l.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},r(m),m},d=function(t){delete v[t]},"process"==t(12)(p)?r=function(t){p.nextTick(o(b,t,1))}:h?(i=new h,a=i.port2,i.port1.onmessage=y,r=o(a.postMessage,a,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",y,!1)):r=g in c("script")?function(t){u.appendChild(c("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{12:12,18:18,21:21,30:30,33:33,34:34}],77:[function(t,e,n){var r=t(78),i=Math.max,a=Math.min;e.exports=function(t,e){return t=r(t),0>t?i(t+e,0):a(t,e)}},{78:78}],78:[function(t,e,n){var r=Math.ceil,i=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?i:r)(t)}},{}],79:[function(t,e,n){var r=t(35),i=t(19);e.exports=function(t){return r(i(t))}},{19:19,35:35}],80:[function(t,e,n){var r=t(78),i=Math.min;e.exports=function(t){return t>0?i(r(t),9007199254740991):0}},{78:78}],81:[function(t,e,n){var r=t(19);e.exports=function(t){return Object(r(t))}},{19:19}],82:[function(t,e,n){var r=t(39);e.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},{39:39}],83:[function(t,e,n){var r=0,i=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+i).toString(36))}},{}],84:[function(t,e,n){var r=t(68)("wks"),i=t(83),a=t(30).Symbol;e.exports=function(t){return r[t]||(r[t]=a&&a[t]||(a||i)("Symbol."+t))}},{30:30,68:68,83:83}],85:[function(t,e,n){var r=t(11),i=t(84)("iterator"),a=t(46);e.exports=t(17).getIteratorMethod=function(t){return void 0!=t?t[i]||t["@@iterator"]||a[r(t)]:void 0}},{11:11,17:17,46:46,84:84}],86:[function(t,e,n){"use strict";var r,i=t(47),a=t(23),o=t(20),s=t(60),u=t(33),c=t(21),l=t(31),p=t(12),f=t(34),d=t(25),h=t(5),m=t(3),v=t(39),g=t(81),b=t(79),y=t(78),x=t(77),_=t(80),w=t(35),k=t(83)("__proto__"),E=t(9),S=t(8)(!1),O=Object.prototype,C=Array.prototype,A=C.slice,P=C.join,T=i.setDesc,j=i.getDesc,M=i.setDescs,L={};o||(r=!d(function(){return 7!=T(c("div"),"a",{get:function(){return 7}}).a}),i.setDesc=function(t,e,n){if(r)try{return T(t,e,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},i.getDesc=function(t,e){if(r)try{return j(t,e)}catch(n){}return l(t,e)?s(!O.propertyIsEnumerable.call(t,e),t[e]):void 0},i.setDescs=M=function(t,e){h(t);for(var n,r=i.getKeys(e),a=r.length,o=0;a>o;)i.setDesc(t,n=r[o++],e[n]);return t}),a(a.S+a.F*!o,"Object",{getOwnPropertyDescriptor:i.getDesc,defineProperty:i.setDesc,defineProperties:M});var F="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),N=F.concat("length","prototype"),R=F.length,D=function(){var t,e=c("iframe"),n=R,r=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("