Merge branch 'master' into mapsyncs43293845982

This commit is contained in:
deathride58
2018-01-08 06:18:11 +00:00
committed by GitHub
35 changed files with 269 additions and 142 deletions
+13 -4
View File
@@ -58,12 +58,21 @@ GLOBAL_LIST_EMPTY(blob_nodes)
/mob/camera/blob/proc/validate_location()
var/turf/T = get_turf(src)
var/area/A = get_area(T)
if(((A && !A.blob_allowed) || !T || !is_station_level(T.z)) && LAZYLEN(GLOB.blobstart))
T = get_turf(pick(GLOB.blobstart))
if(!is_valid_turf(T) && LAZYLEN(GLOB.blobstart))
var/list/blobstarts = shuffle(GLOB.blobstart)
for(var/_T in blobstarts)
if(is_valid_turf(_T))
T = _T
break
if(!T)
CRASH("No blobspawnpoints and blob spawned in nullspace.")
forceMove(T)
/mob/camera/blob/proc/is_valid_turf(turf/T)
var/area/A = get_area(T)
if((A && !A.blob_allowed) || !T || !is_station_level(T.z) || isspaceturf(T))
return FALSE
return TRUE
/mob/camera/blob/Life()
if(!blob_core)
@@ -246,4 +255,4 @@ GLOBAL_LIST_EMPTY(blob_nodes)
. = ..()
var/datum/antagonist/blob/B = mind.has_antag_datum(/datum/antagonist/blob)
if(!B)
mind.add_antag_datum(/datum/antagonist/blob)
mind.add_antag_datum(/datum/antagonist/blob)
@@ -1,5 +1,11 @@
#define ARK_GRACE_PERIOD 300 //In seconds, how long the crew has before the Ark truly "begins"
/proc/clockwork_ark_active() //A helper proc so the Ark doesn't have to be typecast every time it's checked; returns null if there is no Ark and its active var otherwise
var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar
if(!G)
return
return G.active
//The gateway to Reebe, from which Ratvar emerges.
/obj/structure/destructible/clockwork/massive/celestial_gateway
name = "\improper Ark of the Clockwork Justicar"
@@ -63,7 +69,7 @@
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/cry_havoc()
visible_message("<span class='boldwarning'>[src] shudders and roars to life, its parts beginning to whirr and screech!</span>")
hierophant_message("<span class='bold large_brass'>The Ark is activating! Get back to the base!</span>")
hierophant_message("<span class='bold large_brass'>The Ark is activating! You will be transported there soon!</span>")
for(var/mob/M in GLOB.player_list)
if(is_servant_of_ratvar(M) || isobserver(M) || M.z == z)
M.playsound_local(M, 'sound/magic/clockwork/ark_activation_sequence.ogg', 30, FALSE, pressure_affected = FALSE)
@@ -86,6 +92,8 @@
var/datum/stack_recipe/R = V
if(R.title == "wall gear")
R.time *= 2 //Building walls becomes slower when the Ark activates
mass_recall()
recalls_remaining++ //So it doesn't use up a charge
/obj/structure/destructible/clockwork/massive/celestial_gateway/proc/open_portal(turf/T)
new/obj/effect/clockwork/city_of_cogs_rift(T)
@@ -261,6 +269,12 @@
if(!step_away(O, src, 2) || get_dist(O, src) < 2)
O.take_damage(50, BURN, "bomb")
O.update_icon()
for(var/V in GLOB.player_list)
var/mob/M = V
if(is_servant_of_ratvar(M) && M.z != z)
M.forceMove(get_step(src, SOUTH))
M.overlay_fullscreen("flash", /obj/screen/fullscreen/flash)
M.clear_fullscreen("flash", 5)
if(grace_period)
grace_period--
return
+8 -5
View File
@@ -11,11 +11,11 @@
slot_flags = SLOT_BELT
var/usability = 0
var/reusable = TRUE
var/old_shard = FALSE
var/spent = FALSE
/obj/item/device/soulstone/proc/was_used()
if(!reusable)
if(old_shard)
spent = TRUE
name = "dull [name]"
desc = "A fragment of the legendary treasure known simply as \
@@ -27,7 +27,7 @@
/obj/item/device/soulstone/anybody/chaplain
name = "mysterious old shard"
reusable = FALSE
old_shard = TRUE
/obj/item/device/soulstone/pickup(mob/living/user)
..()
@@ -38,7 +38,10 @@
/obj/item/device/soulstone/examine(mob/user)
..()
if(usability || iscultist(user) || iswizard(user) || isobserver(user))
to_chat(user, "<span class='cult'>A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.</span>")
if (old_shard)
to_chat(user, "<span class='cult'>A soulstone, used to capture a soul, either from dead humans or from freed shades.</span>")
else
to_chat(user, "<span class='cult'>A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.</span>")
to_chat(user, "<span class='cult'>The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.</span>")
if(spent)
to_chat(user, "<span class='cult'>This shard is spent; it is now just a creepy rock.</span>")
@@ -151,7 +154,7 @@
if(contents.len)
to_chat(user, "<span class='userdanger'>Capture failed!</span>: The soulstone is full! Free an existing soul to make room.")
else
if(T.stat != CONSCIOUS)
if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD))
if(T.client == null)
to_chat(user, "<span class='userdanger'>Capture failed!</span>: The soul has already fled its mortal frame. You attempt to bring it back...")
getCultGhost(T,user)
@@ -283,6 +283,9 @@
if(!is_servant_of_ratvar(user))
to_chat(user, "<span class='warning'>[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.</span>")
return
if(clockwork_ark_active())
to_chat(user, "<span class='warning'>The Ark is active, and [src] has shut down.</span>")
return
. = ..()
/datum/action/innate/servant_warp
@@ -130,7 +130,6 @@
if(authenticated==2)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0)
make_announcement(usr)
deadchat_broadcast("<span class='deadsay bold'>[usr.name] made an priority announcement.</span>", usr)
if("crossserver")
if(authenticated==2)
@@ -702,6 +701,7 @@
if(!input || !user.canUseTopic(src))
return
SScommunications.make_announcement(user, is_silicon, input)
deadchat_broadcast("<span class='deadsay bold'>[user.name] made an priority announcement.</span>", user)
/obj/machinery/computer/communications/proc/post_status(command, data1, data2)
+9 -1
View File
@@ -3,6 +3,14 @@
anchored = TRUE
resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF
/obj/effect/decal/Initialize()
. = ..()
if(!isturf(loc) || NeverShouldHaveComeHere(loc))
return INITIALIZE_HINT_QDEL
/obj/effect/decal/proc/NeverShouldHaveComeHere(turf/T)
return isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || ischasm(T)
/obj/effect/decal/ex_act(severity, target)
qdel(src)
@@ -12,7 +20,7 @@
/obj/effect/decal/HandleTurfChange(turf/T)
..()
if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || ischasm(T)))
if(T == loc && NeverShouldHaveComeHere(T))
qdel(src)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+3 -3
View File
@@ -9,7 +9,7 @@
points = 50
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
refined_type = /obj/item/stack/sheet/bluespace_crystal
grind_results = list("bluespace" = 2)
grind_results = list("bluespace" = 20)
/obj/item/ore/bluespace_crystal/refined
name = "refined bluespace crystal"
@@ -49,7 +49,7 @@
blink_range = 4 // Not as good as the organic stuff!
points = 0 //nice try
refined_type = null
grind_results = list("bluespace" = 1, "silicon" = 2)
grind_results = list("bluespace" = 10, "silicon" = 20)
//Polycrystals, aka stacks
/obj/item/stack/sheet/bluespace_crystal
@@ -60,7 +60,7 @@
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed")
novariants = TRUE
grind_results = list("bluespace" = 2)
grind_results = list("bluespace" = 20)
var/crystal_type = /obj/item/ore/bluespace_crystal/refined
/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening
+2 -2
View File
@@ -111,7 +111,7 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
heal_brute = 40
self_delay = 20
grind_results = list("styptic_powder" = 1)
grind_results = list("styptic_powder" = 10)
/obj/item/stack/medical/bruise_pack/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -148,4 +148,4 @@
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
heal_burn = 40
self_delay = 20
grind_results = list("silver_sulfadiazine" = 1)
grind_results = list("silver_sulfadiazine" = 10)
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/glass
grind_results = list("silicon" = 1)
grind_results = list("silicon" = 20)
/obj/item/stack/sheet/glass/cyborg
materials = list()
@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmaglass
grind_results = list("silicon" = 1, "plasma" = 1)
grind_results = list("silicon" = 20, "plasma" = 10)
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
@@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/rglass
grind_results = list("silicon" = 1, "iron" = 1)
grind_results = list("silicon" = 20, "iron" = 10)
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
@@ -171,7 +171,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plasmarglass
grind_results = list("silicon" = 1, "plasma" = 1, "iron" = 1)
grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10)
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.prglass_recipes
@@ -11,7 +11,7 @@
throw_range = 7
flags_1 = CONDUCT_1
max_amount = 60
grind_results = list("silicon" = 1, "copper" = 1)
grind_results = list("silicon" = 20, "copper" = 5)
/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params)
@@ -330,7 +330,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \
sheettype = "runed"
merge_type = /obj/item/stack/sheet/runed_metal
novariants = TRUE
grind_results = list("iron" = 0.5, "blood" = 1.5)
grind_results = list("iron" = 5, "blood" = 15)
/obj/item/stack/sheet/runed_metal/ratvar_act()
new /obj/item/stack/tile/brass(loc, amount)
@@ -394,7 +394,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
throw_range = 3
turf_type = /turf/open/floor/clockwork
novariants = FALSE
grind_results = list("iron" = 0.5, "teslium" = 1.5)
grind_results = list("iron" = 5, "teslium" = 15)
/obj/item/stack/tile/brass/narsie_act()
new /obj/item/stack/sheet/runed_metal(loc, amount)
@@ -445,7 +445,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
w_class = WEIGHT_CLASS_NORMAL
throw_speed = 1
throw_range = 3
grind_results = list("carbon" = 1)
grind_results = list("carbon" = 10)
GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
+5 -5
View File
@@ -55,8 +55,8 @@ FLOOR SAFES
if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open)
if(user)
visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
return 1
return 0
return TRUE
return FALSE
/obj/structure/safe/proc/decrement(num)
@@ -83,7 +83,7 @@ FLOOR SAFES
/obj/structure/safe/attack_hand(mob/user)
user.set_machine(src)
var/dat = "<center>"
dat += "<a href='?src=[REF(src)];open=1'>[open ? "Close" : "Open"] [src]</a> | <a href='?src=[REF(src)];decrement=1'>-</a> [dial * 5] <a href='?src=[REF(src)];increment=1'>+</a>"
dat += "<a href='?src=[REF(src)];open=1'>[open ? "Close" : "Open"] [src]</a> | <a href='?src=[REF(src)];decrement=1'>-</a> [dial] <a href='?src=[REF(src)];increment=1'>+</a>"
if(open)
dat += "<table>"
for(var/i = contents.len, i>=1, i--)
@@ -101,9 +101,9 @@ FLOOR SAFES
if(!user.canUseTopic(src))
return
var/canhear = 0
var/canhear = FALSE
if(user.is_holding_item_of_type(/obj/item/clothing/neck/stethoscope))
canhear = 1
canhear = TRUE
if(href_list["open"])
if(check_unlocked())