mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 05:00:55 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into many_hands_make_light_work
This commit is contained in:
@@ -214,10 +214,14 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/burn()
|
||||
SSobj.burning -= src
|
||||
boom()
|
||||
|
||||
/obj/structure/closet/crate/secure/loot/proc/boom(mob/user)
|
||||
user << "<span class='danger'>The crate's anti-tamper system activates!</span>"
|
||||
if(user)
|
||||
user << "<span class='danger'>The crate's anti-tamper system activates!</span>"
|
||||
for(var/atom/movable/AM in src)
|
||||
qdel(AM)
|
||||
var/turf/T = get_turf(src)
|
||||
explosion(T, -1, -1, 1, 1)
|
||||
explosion(get_turf(src), 0, 1, 5, 5)
|
||||
qdel(src)
|
||||
@@ -0,0 +1,252 @@
|
||||
/obj/structure/flora/ash
|
||||
gender = PLURAL
|
||||
layer = PROJECTILE_HIT_THRESHHOLD_LAYER //sporangiums up don't shoot
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "l_mushroom"
|
||||
name = "large mushrooms"
|
||||
desc = "A number of large mushrooms, covered in a faint layer of ash and what can only be spores."
|
||||
var/harvested_name = "shortened mushrooms"
|
||||
var/harvested_desc = "Some quickly regrowing mushrooms, formerly known to be quite large."
|
||||
var/needs_sharp_harvest = TRUE
|
||||
var/harvest = /obj/item/ash_flora/shavings
|
||||
var/harvest_amount_low = 1
|
||||
var/harvest_amount_high = 3
|
||||
var/harvest_time = 60
|
||||
var/harvest_message_low = "You pick a mushroom, but fail to collect many shavings from its cap."
|
||||
var/harvest_message_med = "You pick a mushroom, carefully collecting the shavings from its cap."
|
||||
var/harvest_message_high = "You harvest and collect shavings from several mushroom caps."
|
||||
var/harvested = FALSE
|
||||
var/base_icon
|
||||
var/regrowth_time_low = 4800
|
||||
var/regrowth_time_high = 8400
|
||||
|
||||
/obj/structure/flora/ash/New()
|
||||
..()
|
||||
base_icon = "[icon_state][rand(1, 4)]"
|
||||
icon_state = base_icon
|
||||
if(prob(15))
|
||||
harvest(null, TRUE)
|
||||
|
||||
/obj/structure/flora/ash/proc/harvest(user, no_drop)
|
||||
if(harvested)
|
||||
return 0
|
||||
if(!no_drop)
|
||||
var/rand_harvested = rand(harvest_amount_low, harvest_amount_high)
|
||||
if(rand_harvested)
|
||||
if(user)
|
||||
var/msg = harvest_message_med
|
||||
if(rand_harvested == harvest_amount_low)
|
||||
msg = harvest_message_low
|
||||
else if(rand_harvested == harvest_amount_high)
|
||||
msg = harvest_message_high
|
||||
user << "<span class='notice'>[msg]</span>"
|
||||
for(var/i in 1 to rand_harvested)
|
||||
new harvest(get_turf(src))
|
||||
icon_state = "[base_icon]p"
|
||||
name = harvested_name
|
||||
desc = harvested_desc
|
||||
harvested = TRUE
|
||||
addtimer(src, "regrow", rand(regrowth_time_low, regrowth_time_high))
|
||||
return 1
|
||||
|
||||
/obj/structure/flora/ash/proc/regrow()
|
||||
icon_state = base_icon
|
||||
name = initial(name)
|
||||
desc = initial(desc)
|
||||
harvested = FALSE
|
||||
|
||||
/obj/structure/flora/ash/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(!harvested && needs_sharp_harvest && W.sharpness)
|
||||
user.visible_message("<span class='notice'>[user] starts to harvest from [src] with [W].</span>","<span class='notice'>You begin to harvest from [src] with [W].</span>")
|
||||
if(do_after(user, harvest_time, target = src))
|
||||
harvest(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/flora/ash/attack_hand(mob/user)
|
||||
if(!harvested && !needs_sharp_harvest)
|
||||
user.visible_message("<span class='notice'>[user] starts to harvest from [src].</span>","<span class='notice'>You begin to harvest from [src].</span>")
|
||||
if(do_after(user, harvest_time, target = src))
|
||||
harvest(user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/structure/flora/ash/leaf_shroom
|
||||
icon_state = "s_mushroom"
|
||||
name = "leafy mushrooms"
|
||||
desc = "A number of mushrooms, each of which surrounds a greenish sporangium with a number of leaf-like structures."
|
||||
harvested_name = "leafless mushrooms"
|
||||
harvested_desc = "A bunch of formerly-leafed mushrooms, with their sporangiums exposed. Scandalous?"
|
||||
harvest = /obj/item/ash_flora/mushroom_leaf
|
||||
needs_sharp_harvest = FALSE
|
||||
harvest_amount_high = 4
|
||||
harvest_time = 20
|
||||
harvest_message_low = "You pluck a single, suitable leaf."
|
||||
harvest_message_med = "You pluck a number of leaves, leaving a few unsuitable ones."
|
||||
harvest_message_high = "You pluck quite a lot of suitable leaves."
|
||||
regrowth_time_low = 2400
|
||||
regrowth_time_high = 6000
|
||||
|
||||
/obj/structure/flora/ash/cap_shroom
|
||||
icon_state = "r_mushroom"
|
||||
name = "tall mushrooms"
|
||||
desc = "Several mushrooms, the larger of which have a ring of conks at the midpoint of their stems."
|
||||
harvested_name = "small mushrooms"
|
||||
harvested_desc = "Several small mushrooms near the stumps of what likely were larger mushrooms."
|
||||
harvest = /obj/item/ash_flora/mushroom_cap
|
||||
harvest_amount_high = 4
|
||||
harvest_time = 50
|
||||
harvest_message_low = "You slice the cap off of a mushroom."
|
||||
harvest_message_med = "You slice off a few conks from the larger mushrooms."
|
||||
harvest_message_high = "You slice off a number of caps and conks from these mushrooms."
|
||||
regrowth_time_low = 3000
|
||||
regrowth_time_high = 5400
|
||||
|
||||
/obj/structure/flora/ash/stem_shroom
|
||||
icon_state = "t_mushroom"
|
||||
name = "numerous mushrooms"
|
||||
desc = "A large number of mushrooms, some of which have long, fleshy stems."
|
||||
harvested_name = "tiny mushrooms"
|
||||
harvested_desc = "A few tiny mushrooms around larger stumps. You can already see them growing back."
|
||||
harvest = /obj/item/ash_flora/mushroom_stem
|
||||
harvest_amount_high = 4
|
||||
harvest_time = 40
|
||||
harvest_message_low = "You pick and slice the cap off of a mushroom, leaving the stem."
|
||||
harvest_message_med = "You pick and decapitate several mushrooms for their stems."
|
||||
harvest_message_high = "You acquire a number of stems from these mushrooms."
|
||||
regrowth_time_low = 3000
|
||||
regrowth_time_high = 6000
|
||||
|
||||
/obj/structure/flora/ash/cacti
|
||||
icon_state = "cactus"
|
||||
name = "fruiting cacti"
|
||||
desc = "Several prickly cacti, brimming with ripe fruit and covered in a thin layer of ash."
|
||||
harvested_name = "cacti"
|
||||
harvested_desc = "A bunch of prickly cacti. You can see fruits slowly growing beneath the covering of ash."
|
||||
harvest = /obj/item/ash_flora/cactus_fruit
|
||||
needs_sharp_harvest = FALSE
|
||||
harvest_amount_high = 2
|
||||
harvest_time = 10
|
||||
harvest_message_low = "You pick a cactus fruit."
|
||||
harvest_message_med = "You pick several cactus fruit." //shouldn't show up, because you can't get more than two
|
||||
harvest_message_high = "You pick a pair of cactus fruit."
|
||||
regrowth_time_low = 4800
|
||||
regrowth_time_high = 7200
|
||||
|
||||
/obj/structure/flora/ash/cacti/Crossed(mob/AM)
|
||||
if(ishuman(AM) && has_gravity(loc) && prob(70))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(!H.shoes && !H.lying) //ouch, my feet.
|
||||
var/picked_def_zone = pick("l_leg", "r_leg")
|
||||
var/obj/item/bodypart/O = H.get_bodypart(picked_def_zone)
|
||||
if(!istype(O) || (PIERCEIMMUNE in H.dna.species.specflags))
|
||||
return
|
||||
H.apply_damage(rand(3, 6), BRUTE, picked_def_zone)
|
||||
H.Weaken(2)
|
||||
H.visible_message("<span class='danger'>[H] steps on a cactus!</span>", \
|
||||
"<span class='userdanger'>You step on a cactus!</span>")
|
||||
|
||||
/obj/item/ash_flora
|
||||
name = "mushroom shavings"
|
||||
desc = "Some shavings from a tall mushroom. With enough, might serve as a bowl."
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "mushroom_shavings"
|
||||
w_class = 1
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 30
|
||||
var/prepared = FALSE
|
||||
var/prepared_type = /obj/item/ash_flora/shavings
|
||||
var/standard_prep = TRUE
|
||||
|
||||
/obj/item/ash_flora/New()
|
||||
..()
|
||||
pixel_x = rand(-4, 4)
|
||||
pixel_y = rand(-4, 4)
|
||||
|
||||
/obj/item/ash_flora/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(!standard_prep || !W.sharpness || !prepare(user))
|
||||
return ..()
|
||||
|
||||
/obj/item/ash_flora/proc/prepare(mob/user)
|
||||
if(!prepared)
|
||||
prepared = TRUE
|
||||
user << "<span class='notice'>You prepare [src].</span>"
|
||||
var/obj/item/ash_flora/A = new prepared_type(get_turf(src))
|
||||
if(src in get_both_hands(user))
|
||||
user.unEquip(src, TRUE)
|
||||
user.put_in_hands(A)
|
||||
qdel(src)
|
||||
. = 1
|
||||
|
||||
/obj/item/ash_flora/shavings //for actual crafting
|
||||
prepared = TRUE
|
||||
|
||||
/obj/item/ash_flora/mushroom_leaf
|
||||
name = "mushroom leaf"
|
||||
desc = "A leaflike structure from a mushroom. You should probably wash the ash off."
|
||||
icon_state = "mushroom_leaf"
|
||||
standard_prep = FALSE
|
||||
prepared_type = /obj/item/ash_flora/mushroom_leaf/prepared
|
||||
|
||||
/obj/item/ash_flora/mushroom_leaf/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag && (istype(target, /turf/open/floor/plating/ashplanet/wateryrock) || istype(target, /obj/structure/sink)))
|
||||
prepare(user)
|
||||
|
||||
/obj/item/ash_flora/mushroom_leaf/prepared
|
||||
name = "washed mushroom leaf"
|
||||
desc = "A greenish leaflike structure from a mushroom. Kind of like lettuce?"
|
||||
icon_state = "mushroom_leaf_p"
|
||||
prepared = TRUE
|
||||
|
||||
/obj/item/ash_flora/mushroom_cap
|
||||
name = "mushroom cap"
|
||||
desc = "A mushroom cap. Possibly delicious, at least if you cut it up a bit first."
|
||||
icon_state = "mushroom_cap"
|
||||
prepared_type = /obj/item/ash_flora/mushroom_cap/prepared
|
||||
|
||||
/obj/item/ash_flora/mushroom_cap/prepared
|
||||
name = "sliced mushroom cap"
|
||||
desc = "A sliced-up mushroom cap, revealing pale yellow innards. It smells faintly salty."
|
||||
icon_state = "mushroom_cap_p"
|
||||
prepared = TRUE
|
||||
|
||||
/obj/item/ash_flora/mushroom_stem
|
||||
name = "mushroom stem"
|
||||
desc = "A mushroom stem. Slice it up, throw it in a stew."
|
||||
icon_state = "mushroom_stem"
|
||||
prepared_type = /obj/item/ash_flora/mushroom_stem/prepared
|
||||
|
||||
/obj/item/ash_flora/mushroom_stem/prepared
|
||||
name = "sliced mushroom stem"
|
||||
desc = "A mushroom stem, cut in half to reveal orange flesh. Smells almost like potatos, but with a sour undertone."
|
||||
icon_state = "mushroom_stem_p"
|
||||
prepared = TRUE
|
||||
|
||||
/obj/item/ash_flora/cactus_fruit
|
||||
name = "cactus fruit"
|
||||
desc = "A cactus fruit covered in a thick, reddish skin. And some ash."
|
||||
icon_state = "cactus_fruit"
|
||||
prepared_type = /obj/item/ash_flora/cactus_fruit/prepared
|
||||
|
||||
/obj/item/ash_flora/cactus_fruit/prepared
|
||||
name = "peeled cactus fruit"
|
||||
desc = "A cactus fruit with the skin and ash carefully scraped off, revealing a faintly sweet-smelling yellow center."
|
||||
icon_state = "cactus_fruit_p"
|
||||
prepared = TRUE
|
||||
|
||||
/obj/item/mushroom_bowl
|
||||
name = "mushroom bowl"
|
||||
desc = "A bowl made out of mushrooms. Not food, though it might have contained some at some point."
|
||||
icon = 'icons/obj/lavaland/ash_flora.dmi'
|
||||
icon_state = "mushroom_bowl"
|
||||
w_class = 2
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 40
|
||||
|
||||
//what you can craft with these things
|
||||
/datum/crafting_recipe/mushroom_bowl
|
||||
name = "Mushroom Bowl"
|
||||
result = /obj/item/mushroom_bowl
|
||||
reqs = list(/obj/item/ash_flora/shavings = 5)
|
||||
time = 30
|
||||
//category = CAT_PRIMAL //uncomment once ashplanet exists and this wouldn't just take up space fnr
|
||||
@@ -193,19 +193,23 @@
|
||||
weaken = 3
|
||||
var/chain
|
||||
|
||||
/obj/item/ammo_casing/magic/hook/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
|
||||
/obj/item/projectile/hook/fire(setAngle)
|
||||
if(firer)
|
||||
chain = Beam(firer, icon_state = "chain", icon = 'icons/obj/lavaland/artefacts.dmi', time = INFINITY, maxdistance = INFINITY)
|
||||
..()
|
||||
var/obj/item/projectile/hook/P = BB
|
||||
spawn(1)
|
||||
P.chain = P.Beam(user,icon_state="chain",icon = 'icons/obj/lavaland/artefacts.dmi',time=1000, maxdistance = 30)
|
||||
|
||||
/obj/item/projectile/hook/on_hit(atom/target)
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
L.visible_message("<span class='danger'>[L] is snagged by [firer]'s hook!</span>")
|
||||
L.forceMove(get_turf(firer))
|
||||
qdel(chain)
|
||||
if(!L.anchored)
|
||||
L.visible_message("<span class='danger'>[L] is snagged by [firer]'s hook!</span>")
|
||||
L.forceMove(get_turf(firer))
|
||||
|
||||
/obj/item/projectile/hook/Destroy()
|
||||
qdel(chain)
|
||||
return ..()
|
||||
|
||||
|
||||
//Immortality Talisman
|
||||
/obj/item/device/immortality_talisman
|
||||
@@ -628,7 +632,9 @@
|
||||
var/transform_string = "lava"
|
||||
var/reset_turf_type = /turf/open/floor/plating/asteroid/basalt
|
||||
var/reset_string = "basalt"
|
||||
var/cooldown = 200
|
||||
var/create_cooldown = 100
|
||||
var/create_delay = 30
|
||||
var/reset_cooldown = 50
|
||||
var/timer = 0
|
||||
var/banned_turfs
|
||||
|
||||
@@ -650,15 +656,31 @@
|
||||
if(!istype(T))
|
||||
return
|
||||
if(!istype(T, turf_type))
|
||||
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
|
||||
message_admins("[key_name_admin(user)] fired the lava staff at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>[get_area(target)] ([T.x], [T.y], [T.z])</a>).")
|
||||
log_game("[key_name(user)] fired the lava staff at [get_area(target)] ([T.x], [T.y], [T.z]).")
|
||||
T.ChangeTurf(turf_type)
|
||||
var/obj/effect/overlay/temp/lavastaff/L = PoolOrNew(/obj/effect/overlay/temp/lavastaff, T)
|
||||
L.alpha = 0
|
||||
animate(L, alpha = 255, time = create_delay)
|
||||
user.visible_message("<span class='danger'>[user] points [src] at [T]!</span>")
|
||||
timer = world.time + create_delay + 1
|
||||
if(do_after(user, create_delay, target = T))
|
||||
user.visible_message("<span class='danger'>[user] turns \the [T] into [transform_string]!</span>")
|
||||
message_admins("[key_name_admin(user)] fired the lava staff at [get_area(target)]. [ADMIN_COORDJMP(T)]")
|
||||
log_game("[key_name(user)] fired the lava staff at [get_area(target)] [COORD(T)].")
|
||||
T.ChangeTurf(turf_type)
|
||||
timer = world.time + create_cooldown
|
||||
qdel(L)
|
||||
else
|
||||
timer = world.time
|
||||
qdel(L)
|
||||
return
|
||||
else
|
||||
user.visible_message("<span class='danger'>[user] turns \the [T] into [reset_string]!</span>")
|
||||
T.ChangeTurf(reset_turf_type)
|
||||
playsound(get_turf(src),'sound/magic/Fireball.ogg', 200, 1)
|
||||
timer = world.time + cooldown
|
||||
timer = world.time + reset_cooldown
|
||||
playsound(T,'sound/magic/Fireball.ogg', 200, 1)
|
||||
|
||||
/obj/effect/overlay/temp/lavastaff
|
||||
icon_state = "lavastaff_warn"
|
||||
duration = 50
|
||||
|
||||
///Bubblegum
|
||||
|
||||
@@ -733,3 +755,189 @@
|
||||
H.put_in_hands_or_del(new /obj/item/weapon/kitchen/knife/butcher(H))
|
||||
|
||||
qdel(src)
|
||||
|
||||
//Hierophant
|
||||
|
||||
/obj/item/weapon/hierophant_staff
|
||||
name = "Hierophant's staff"
|
||||
desc = "A large club with intense magic power infused into it."
|
||||
icon_state = "hierophant_staff"
|
||||
item_state = "hierophant_staff"
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 4
|
||||
force = 20
|
||||
hitsound = "swing_hit"
|
||||
//hitsound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
actions_types = list(/datum/action/item_action/vortex_recall, /datum/action/item_action/toggle_unfriendly_fire)
|
||||
var/cooldown_time = 20 //how long the cooldown between non-melee ranged attacks is
|
||||
var/chaser_cooldown = 101 //how long the cooldown between firing chasers at mobs is
|
||||
var/chaser_timer = 0 //what our current chaser cooldown is
|
||||
var/timer = 0 //what our current cooldown is
|
||||
var/blast_range = 3 //how long the cardinal blast's walls are
|
||||
var/obj/effect/hierophant/rune //the associated rune we teleport to
|
||||
var/teleporting = FALSE //if we ARE teleporting
|
||||
var/friendly_fire_check = FALSE //if the blasts we make will consider our faction against the faction of hit targets
|
||||
|
||||
/obj/item/weapon/hierophant_staff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
..()
|
||||
var/turf/T = get_turf(target)
|
||||
if(!T || timer > world.time)
|
||||
return
|
||||
timer = world.time + CLICK_CD_MELEE //by default, melee attacks only cause melee blasts, and have an accordingly short cooldown
|
||||
if(proximity_flag)
|
||||
addtimer(src, "aoe_burst", 0, FALSE, T, user)
|
||||
add_logs(user, target, "fired 3x3 blast at", src)
|
||||
else
|
||||
if(istype(target, /turf/closed/mineral) && get_dist(user, target) < 6) //target is minerals, we can hit it(even if we can't see it)
|
||||
addtimer(src, "cardinal_blasts", 0, FALSE, T, user)
|
||||
timer = world.time + cooldown_time
|
||||
else if(target in view(5, get_turf(user))) //if the target is in view, hit it
|
||||
timer = world.time + cooldown_time
|
||||
if(isliving(target) && chaser_timer <= world.time) //living and chasers off cooldown? fire one!
|
||||
chaser_timer = world.time + chaser_cooldown
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/chaser, list(get_turf(user), user, target, 1.5, friendly_fire_check))
|
||||
add_logs(user, target, "fired a chaser at", src)
|
||||
else
|
||||
addtimer(src, "cardinal_blasts", 0, FALSE, T, user) //otherwise, just do cardinal blast
|
||||
add_logs(user, target, "fired cardinal blast at", src)
|
||||
else
|
||||
user << "<span class='warning'>That target is out of range!</span>" //too far away
|
||||
|
||||
/obj/item/weapon/hierophant_staff/ui_action_click(mob/user, actiontype)
|
||||
if(actiontype == /datum/action/item_action/toggle_unfriendly_fire) //toggle friendly fire...
|
||||
friendly_fire_check = !friendly_fire_check
|
||||
user << "<span class='warning'>You toggle friendly fire [friendly_fire_check ? "off":"on"]!</span>"
|
||||
return
|
||||
if(!rune)
|
||||
if(isturf(user.loc))
|
||||
user.visible_message("<span class='hierophant_warning'>[user] holds [src] carefully in front of them, moving it in a strange pattern...</span>", \
|
||||
"<span class='notice'>You start creating a hierophant rune to teleport to...</span>")
|
||||
timer = world.time + 51
|
||||
if(do_after(user, 50, target = user))
|
||||
var/turf/T = get_turf(user)
|
||||
playsound(T,'sound/magic/Blind.ogg', 200, 1, -4)
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(T, user))
|
||||
var/obj/effect/hierophant/H = new/obj/effect/hierophant(T)
|
||||
rune = H
|
||||
user.update_action_buttons_icon()
|
||||
user.visible_message("<span class='hierophant_warning'>[user] creates a strange rune beneath them!</span>", \
|
||||
"<span class='hierophant'>You create a hierophant rune, which you can teleport yourself and any allies to at any time!</span>\n\
|
||||
<span class='notice'>You can remove the rune to place a new one by striking it with the staff.</span>")
|
||||
else
|
||||
timer = world.time
|
||||
else
|
||||
user << "<span class='warning'>You need to be on solid ground to produce a rune!</span>"
|
||||
return
|
||||
if(src != user.l_hand && src != user.r_hand) //you need to hold the staff to teleport
|
||||
user << "<span class='warning'>You need to hold the staff in your hands to [rune ? "teleport with it":"create a rune"]!</span>"
|
||||
return
|
||||
if(get_dist(user, rune) <= 2) //rune too close abort
|
||||
user << "<span class='warning'>You are too close to the rune to teleport to it!</span>"
|
||||
return
|
||||
if(is_blocked_turf(get_turf(rune)))
|
||||
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
|
||||
return
|
||||
teleporting = TRUE //start channel
|
||||
user.update_action_buttons_icon()
|
||||
user.visible_message("<span class='hierophant_warning'>[user] starts to glow faintly...</span>")
|
||||
timer = world.time + 50
|
||||
if(do_after(user, 40, target = user) && rune)
|
||||
var/turf/T = get_turf(rune)
|
||||
var/turf/source = get_turf(user)
|
||||
if(is_blocked_turf(T))
|
||||
teleporting = FALSE
|
||||
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
|
||||
user.update_action_buttons_icon()
|
||||
return
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, user))
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(source, user))
|
||||
playsound(T,'sound/magic/blink.ogg', 200, 1)
|
||||
//playsound(T,'sound/magic/Wand_Teleport.ogg', 200, 1)
|
||||
playsound(source,'sound/magic/blink.ogg', 200, 1)
|
||||
//playsound(source,'sound/machines/AirlockOpen.ogg', 200, 1)
|
||||
if(!do_after(user, 3, target = user) || !rune) //no walking away shitlord
|
||||
teleporting = FALSE
|
||||
if(user)
|
||||
user.update_action_buttons_icon()
|
||||
return
|
||||
if(is_blocked_turf(T))
|
||||
teleporting = FALSE
|
||||
user << "<span class='warning'>The rune is blocked by something, preventing teleportation!</span>"
|
||||
user.update_action_buttons_icon()
|
||||
return
|
||||
add_logs(user, rune, "teleported self from ([source.x],[source.y],[source.z]) to")
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(T, user))
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/teleport, list(source, user))
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, user, TRUE)) //blasts produced will not hurt allies
|
||||
B.damage = 30
|
||||
for(var/t in RANGE_TURFS(1, source))
|
||||
var/obj/effect/overlay/temp/hierophant/blast/B = PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, user, TRUE)) //but absolutely will hurt enemies
|
||||
B.damage = 30
|
||||
for(var/mob/living/L in range(1, source))
|
||||
addtimer(src, "teleport_mob", 0, FALSE, source, L, T, user) //regardless, take all mobs near us along
|
||||
sleep(6) //at this point the blasts detonate
|
||||
else
|
||||
timer = world.time
|
||||
teleporting = FALSE
|
||||
if(user)
|
||||
user.update_action_buttons_icon()
|
||||
|
||||
/obj/item/weapon/hierophant_staff/proc/teleport_mob(turf/source, mob/M, turf/target, mob/user)
|
||||
var/turf/turf_to_teleport_to = get_step(target, get_dir(source, M)) //get position relative to caster
|
||||
if(!turf_to_teleport_to || is_blocked_turf(turf_to_teleport_to))
|
||||
return
|
||||
animate(M, alpha = 0, time = 2, easing = EASE_OUT) //fade out
|
||||
sleep(1)
|
||||
if(!M)
|
||||
return
|
||||
M.visible_message("<span class='hierophant_warning'>[M] fades out!</span>")
|
||||
sleep(2)
|
||||
if(!M)
|
||||
return
|
||||
M.forceMove(turf_to_teleport_to)
|
||||
sleep(1)
|
||||
if(!M)
|
||||
return
|
||||
animate(M, alpha = 255, time = 2, easing = EASE_IN) //fade IN
|
||||
sleep(1)
|
||||
if(!M)
|
||||
return
|
||||
M.visible_message("<span class='hierophant_warning'>[M] fades in!</span>")
|
||||
if(user != M)
|
||||
add_logs(user, M, "teleported", null, "from ([source.x],[source.y],[source.z])")
|
||||
|
||||
/obj/item/weapon/hierophant_staff/proc/cardinal_blasts(turf/T, mob/living/user) //fire cardinal cross blasts with a delay
|
||||
if(!T)
|
||||
return
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph/cardinal, list(T, user))
|
||||
playsound(T,'sound/magic/blink.ogg', 200, 1)
|
||||
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(T, user, friendly_fire_check))
|
||||
for(var/d in cardinal)
|
||||
addtimer(src, "blast_wall", 0, FALSE, T, d, user)
|
||||
|
||||
/obj/item/weapon/hierophant_staff/proc/blast_wall(turf/T, dir, mob/living/user) //make a wall of blasts blast_range tiles long
|
||||
if(!T)
|
||||
return
|
||||
var/range = blast_range
|
||||
var/turf/previousturf = T
|
||||
var/turf/J = get_step(previousturf, dir)
|
||||
for(var/i in 1 to range)
|
||||
if(!J)
|
||||
return
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(J, user, friendly_fire_check))
|
||||
previousturf = J
|
||||
J = get_step(previousturf, dir)
|
||||
|
||||
/obj/item/weapon/hierophant_staff/proc/aoe_burst(turf/T, mob/living/user) //make a 3x3 blast around a target
|
||||
if(!T)
|
||||
return
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/telegraph, list(T, user))
|
||||
playsound(T,'sound/magic/blink.ogg', 200, 1)
|
||||
//playsound(T,'sound/effects/bin_close.ogg', 200, 1)
|
||||
sleep(2)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
PoolOrNew(/obj/effect/overlay/temp/hierophant/blast, list(t, user, friendly_fire_check))
|
||||
|
||||
@@ -88,11 +88,12 @@
|
||||
else
|
||||
process_sheet(O)
|
||||
i++
|
||||
if(i > 0)
|
||||
var/msg = "Now available in the cargo Bay: \n"
|
||||
if(i > 0 && z == ZLEVEL_STATION)
|
||||
var/area/orm_area = get_area(src)
|
||||
var/msg = "Now available in [orm_area.map_name]:"
|
||||
for(var/s in stack_list) // Making an announcement for cargo
|
||||
var/obj/item/stack/sheet/mats = stack_list[s]
|
||||
msg += "[capitalize(mats.name)]: [mats.amount] sheets \n"
|
||||
msg += "\n[capitalize(mats.name)]: [mats.amount] sheets"
|
||||
for(var/obj/machinery/requests_console/D in allConsoles)
|
||||
if(D.department == "Science" || D.department == "Robotics" || D.department == "Research Director's Desk" || D.department == "Chemistry" || D.department == "Bar")
|
||||
D.createmessage("Ore Redemption Machine", "New minerals available!", msg, 1, 0)
|
||||
|
||||
@@ -2,10 +2,16 @@
|
||||
|
||||
//this item is intended to give the effect of entering the mine, so that light gradually fades
|
||||
/obj/effect/light_emitter
|
||||
name = "Light-emtter"
|
||||
name = "Light emitter"
|
||||
anchored = 1
|
||||
unacidable = 1
|
||||
luminosity = 8
|
||||
invisibility = 101
|
||||
var/set_luminosity = 8
|
||||
var/set_cap = 0
|
||||
|
||||
/obj/effect/light_emitter/New()
|
||||
..()
|
||||
SetLuminosity(set_luminosity, set_cap)
|
||||
|
||||
/**********************Miner Lockers**************************/
|
||||
|
||||
@@ -535,9 +541,15 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
say("<span class='danger'>Launch sequence activated! Prepare for drop!</span>")
|
||||
playsound(loc, 'sound/machines/warning-buzzer.ogg', 70, 0)
|
||||
launch_warning = FALSE
|
||||
feedback_add_details("colonies_dropped") //Number of times a base has been dropped!
|
||||
..()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/computer/shuttle/auxillary_base/onShuttleMove(turf/T1, rotation)
|
||||
..()
|
||||
if(z == ZLEVEL_MINING) //Avoids double logging and landing on other Z-levels due to badminnery
|
||||
feedback_add_details("colonies_dropped", "[x]|[y]|[z]") //Number of times a base has been dropped!
|
||||
|
||||
/obj/machinery/computer/shuttle/auxillary_base/proc/set_mining_mode()
|
||||
if(z == ZLEVEL_MINING) //The console switches to controlling the mining shuttle once landed.
|
||||
req_access = list()
|
||||
@@ -713,4 +725,4 @@ interface with the mining shuttle at the landing site if a mobile beacon is also
|
||||
anti_spam_cd = 0
|
||||
|
||||
/obj/structure/mining_shuttle_beacon/attack_robot(mob/user)
|
||||
return (attack_hand(user)) //So borgies can help
|
||||
return (attack_hand(user)) //So borgies can help
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
icon_state = "rock"
|
||||
var/smooth_icon = 'icons/turf/smoothrocks.dmi'
|
||||
smooth = SMOOTH_MORE|SMOOTH_BORDER
|
||||
canSmoothWith = list (/turf/closed/mineral, /turf/closed/wall)
|
||||
canSmoothWith = list (/turf/closed)
|
||||
baseturf = /turf/open/floor/plating/asteroid/airless
|
||||
initial_gas_mix = "TEMP=2.7"
|
||||
opacity = 1
|
||||
@@ -278,7 +278,7 @@
|
||||
/turf/open/floor/plating/asteroid/airless/cave/volcanic
|
||||
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goldgrub = 10, /mob/living/simple_animal/hostile/asteroid/goliath/beast = 50, /mob/living/simple_animal/hostile/asteroid/basilisk/watcher = 40, /mob/living/simple_animal/hostile/asteroid/hivelord/legion = 30,
|
||||
/mob/living/simple_animal/hostile/spawner/lavaland = 2, /mob/living/simple_animal/hostile/spawner/lavaland/goliath = 3, /mob/living/simple_animal/hostile/spawner/lavaland/legion = 3, \
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = 2)
|
||||
/mob/living/simple_animal/hostile/megafauna/dragon = 2, /mob/living/simple_animal/hostile/megafauna/bubblegum = 2, /mob/living/simple_animal/hostile/megafauna/colossus = 2)
|
||||
|
||||
data_having_type = /turf/open/floor/plating/asteroid/airless/cave/volcanic/has_data
|
||||
turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
|
||||
@@ -506,6 +506,9 @@
|
||||
/turf/open/floor/plating/asteroid/snow/temperatre
|
||||
initial_gas_mix = "TEMP=255.37"
|
||||
|
||||
/turf/open/floor/plating/asteroid/snow/atmosphere
|
||||
initial_gas_mix = "o2=22;n2=82;TEMP=180"
|
||||
|
||||
/turf/open/floor/plating/asteroid/New()
|
||||
var/proper_name = name
|
||||
..()
|
||||
@@ -617,15 +620,18 @@
|
||||
|
||||
/turf/open/chasm/Entered(atom/movable/AM)
|
||||
START_PROCESSING(SSobj, src)
|
||||
drop_stuff()
|
||||
drop_stuff(AM)
|
||||
|
||||
/turf/open/chasm/process()
|
||||
if(!drop_stuff())
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/turf/open/chasm/proc/drop_stuff()
|
||||
/turf/open/chasm/proc/drop_stuff(AM)
|
||||
. = 0
|
||||
for(var/thing in contents)
|
||||
var/thing_to_check = src
|
||||
if(AM)
|
||||
thing_to_check = list(AM)
|
||||
for(var/thing in thing_to_check)
|
||||
if(droppable(thing))
|
||||
. = 1
|
||||
addtimer(src, "drop", 0, FALSE, thing)
|
||||
@@ -811,48 +817,60 @@
|
||||
name = "rock"
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
smooth_icon = 'icons/turf/walls/rock_wall.dmi'
|
||||
icon_state = "rock"
|
||||
icon_state = "rock2"
|
||||
smooth = SMOOTH_MORE|SMOOTH_BORDER
|
||||
canSmoothWith = list (/turf/closed/mineral, /turf/closed/wall)
|
||||
baseturf = /turf/open/floor/plating/ash
|
||||
canSmoothWith = list (/turf/closed)
|
||||
baseturf = /turf/open/floor/plating/ashplanet/wateryrock
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
environment_type = "waste"
|
||||
turf_type = /turf/open/floor/plating/ash
|
||||
turf_type = /turf/open/floor/plating/ashplanet/rocky
|
||||
defer_change = 1
|
||||
|
||||
/turf/open/floor/plating/ash
|
||||
/turf/open/floor/plating/ashplanet
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
name = "ash"
|
||||
icon_state = "ash"
|
||||
smooth = SMOOTH_MORE|SMOOTH_BORDER
|
||||
canSmoothWith = list (/turf/open/floor/plating/ash, /turf/closed)
|
||||
var/smooth_icon = 'icons/turf/floors/ash.dmi'
|
||||
desc = "The ground is covered in volcanic ash."
|
||||
baseturf = /turf/open/floor/plating/ash //I assume this will be a chasm eventually, once this becomes an actual surface
|
||||
slowdown = 1
|
||||
baseturf = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
planetary_atmos = TRUE
|
||||
|
||||
/turf/open/floor/plating/ash/New()
|
||||
pixel_y = -4
|
||||
pixel_x = -4
|
||||
icon = smooth_icon
|
||||
/turf/open/floor/plating/ashplanet/New()
|
||||
if(smooth)
|
||||
pixel_y = -4
|
||||
pixel_x = -4
|
||||
icon = smooth_icon
|
||||
..()
|
||||
|
||||
/turf/open/floor/plating/ash/break_tile()
|
||||
/turf/open/floor/plating/ashplanet/break_tile()
|
||||
return
|
||||
|
||||
/turf/open/floor/plating/ash/burn_tile()
|
||||
/turf/open/floor/plating/ashplanet/burn_tile()
|
||||
return
|
||||
|
||||
/turf/open/floor/plating/ash/rocky
|
||||
/turf/open/floor/plating/ashplanet/ash
|
||||
canSmoothWith = list(/turf/open/floor/plating/ashplanet/ash, /turf/closed)
|
||||
layer = HIGH_TURF_LAYER
|
||||
slowdown = 1
|
||||
|
||||
/turf/open/floor/plating/ashplanet/rocky
|
||||
name = "rocky ground"
|
||||
icon_state = "rockyash"
|
||||
icon = 'icons/turf/mining.dmi'
|
||||
smooth_icon = 'icons/turf/floors/rocky_ash.dmi'
|
||||
slowdown = 0
|
||||
smooth = SMOOTH_MORE|SMOOTH_BORDER
|
||||
canSmoothWith = list (/turf/open/floor/plating/ash/rocky, /turf/closed)
|
||||
layer = MID_TURF_LAYER
|
||||
canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
|
||||
|
||||
/turf/open/floor/plating/ashplanet/wateryrock
|
||||
name = "wet rocky ground"
|
||||
smooth = null
|
||||
icon_state = "wateryrock"
|
||||
slowdown = 2
|
||||
|
||||
/turf/open/floor/plating/ashplanet/wateryrock/New()
|
||||
icon_state = "[icon_state][rand(1, 9)]"
|
||||
..()
|
||||
|
||||
//Necropolis
|
||||
|
||||
|
||||
Reference in New Issue
Block a user