Merge branch 'master' into mapsyncs43293845982
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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), \
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user