mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-05-17 22:19:01 +01:00
533 lines
14 KiB
Plaintext
533 lines
14 KiB
Plaintext
/turf/unsimulated/floor/cave
|
|
name = "cave floor"
|
|
icon_state = "cave-medium"
|
|
RL_Ignore = 0
|
|
|
|
/turf/unsimulated/wall/cave
|
|
name = "cave wall"
|
|
icon_state = "cave-dark"
|
|
RL_Ignore = 0
|
|
|
|
////// cogwerks - lava turf
|
|
|
|
/turf/unsimulated/floor/lava
|
|
name = "Lava"
|
|
desc = "The floor is lava. Oh no."
|
|
icon_state = "lava"
|
|
var/deadly = 1
|
|
RL_Ignore = 0
|
|
pathable = 0
|
|
can_replace_with_stuff = 1
|
|
|
|
Entered(atom/movable/O)
|
|
..()
|
|
if(src.deadly)
|
|
if (istype(O, /obj/critter) && O:flying)
|
|
return
|
|
|
|
if (istype(O, /obj/projectile))
|
|
return
|
|
|
|
if (istype(O, /obj/overlay/tile_effect))
|
|
return
|
|
|
|
if (O.throwing && !istype(O, /mob/living))
|
|
spawn(8)
|
|
if (O && O.loc == src)
|
|
melt_away(O)
|
|
return
|
|
|
|
melt_away(O)
|
|
|
|
|
|
proc/melt_away(atom/movable/O)
|
|
if (istype(O, /mob))
|
|
if (istype(O, /mob/living))
|
|
var/mob/living/M = O
|
|
var/mob/living/carbon/human/H = M
|
|
if (istype(H))
|
|
H.unkillable = 0
|
|
if(!M.stat) M.emote("scream")
|
|
src.visible_message("<span style=\"color:red\"><B>[M]</B> falls into the [src] and melts away!</span>")
|
|
M.firegib() // thanks ISN!
|
|
else
|
|
src.visible_message("<span style=\"color:red\"><B>[O]</B> falls into the [src] and melts away!</span>")
|
|
qdel(O)
|
|
|
|
ex_act(severity)
|
|
return
|
|
|
|
/obj/decal/lightshaft
|
|
name = "light"
|
|
desc = "There's light coming through a hole in the ceiling."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = NOLIGHT_EFFECTS_LAYER_BASE
|
|
icon = 'icons/effects/64x64.dmi'
|
|
icon_state = "lightshaft"
|
|
luminosity = 2
|
|
|
|
/obj/decal/stalagtite
|
|
name = "stalactite" // c, not g! c as in ceiling, g as in ground. dang!
|
|
desc = "It's a stalactite."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = EFFECTS_LAYER_BASE
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "stal1"
|
|
|
|
/obj/decal/stalagmite
|
|
name = "stalagmite"
|
|
desc = "It's a stalagmite."
|
|
density = 1
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = EFFECTS_LAYER_BASE
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "stal2"
|
|
|
|
/obj/decal/snowbits
|
|
name = "snow"
|
|
desc = "A bit of snow."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "snowbits"
|
|
|
|
/obj/decal/runemarks
|
|
name = "runes"
|
|
desc = "A set of dimly glowing runes is carved into the rock here."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "runemarks"
|
|
|
|
/obj/decal/cliff
|
|
name = "cliff"
|
|
desc = "The edge of a cliff."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "cliff"
|
|
|
|
/obj/decal/statue
|
|
name = "statue"
|
|
desc = "A statue of some humanoid being."
|
|
density = 1
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "stat1"
|
|
|
|
/obj/decal/statue/monkey1
|
|
desc = "A statue of a monkey of some sort."
|
|
icon_state = "stat2"
|
|
|
|
/obj/decal/statue/monkey2
|
|
desc = "A statue of a monkey of some sort."
|
|
icon_state = "stat3"
|
|
|
|
/obj/decal/statue/monkey3
|
|
desc = "A statue of a monkey of some sort."
|
|
icon_state = "stat4"
|
|
|
|
/obj/decal/woodclutter
|
|
name = "pieces of wood"
|
|
desc = "Theres bits and pieces of wood all over the place."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "woodclutter4"
|
|
|
|
/obj/decal/mushrooms
|
|
name = "mushroom"
|
|
desc = "Some sort of mushroom."
|
|
density = 0
|
|
anchored = 1
|
|
opacity = 0
|
|
layer = OBJ_LAYER
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "mushroom7"
|
|
|
|
/obj/decal/mushrooms/type1
|
|
icon_state = "mushroom1"
|
|
|
|
/obj/decal/mushrooms/type2
|
|
icon_state = "mushroom2"
|
|
|
|
/obj/decal/mushrooms/type3
|
|
icon_state = "mushroom3"
|
|
|
|
/obj/decal/mushrooms/type4
|
|
icon_state = "mushroom4"
|
|
|
|
/obj/decal/mushrooms/type5
|
|
icon_state = "mushroom5"
|
|
|
|
/obj/decal/mushrooms/type6
|
|
icon_state = "mushroom6"
|
|
|
|
/obj/decal/mushrooms/type7
|
|
icon_state = "mushroom7"
|
|
|
|
/obj/shifting_wall/sneaky/cave
|
|
name = "strange wall"
|
|
desc = "This wall seems strangely out-of-place."
|
|
icon_state = "cave-dark"
|
|
icon = 'icons/turf/walls.dmi'
|
|
|
|
var/active = 0
|
|
|
|
proc/do_move(var/direction)
|
|
if(active) return
|
|
var/turf/tile = get_step(src,direction)
|
|
if(tile.density) return
|
|
if(is_blocked_turf(tile)) return
|
|
if(locate(/obj/decal/runemarks) in tile) return
|
|
|
|
active = 1
|
|
|
|
if(src.loc.invisibility) src.loc.invisibility = 0
|
|
if(src.loc.opacity) src.loc.opacity = 0
|
|
|
|
src.set_loc(tile)
|
|
|
|
spawn(5)
|
|
tile.invisibility = 100
|
|
tile.opacity = 1
|
|
active = 0
|
|
|
|
find_suitable_tiles()
|
|
var/list/possible = new/list()
|
|
|
|
for(var/A in cardinal)
|
|
var/turf/current = get_step(src,A)
|
|
if(current.density) continue
|
|
if(is_blocked_turf(current)) continue
|
|
if(someone_can_see(current)) continue
|
|
if(locate(/obj/decal/runemarks) in current) continue
|
|
possible += current
|
|
|
|
return possible
|
|
|
|
update()
|
|
if(active) return
|
|
if(someone_can_see_me())
|
|
spawn(rand(50,80)) update()
|
|
return
|
|
|
|
var/list/possible = find_suitable_tiles()
|
|
|
|
if(!possible.len)
|
|
spawn(30) update()
|
|
return
|
|
|
|
active = 1
|
|
if(prob(25)) // don't let all of them spam the noise at once
|
|
spawn(rand(1,10))
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
|
|
var/turf/picked = pick(possible)
|
|
if(src.loc.invisibility) src.loc.invisibility = 0
|
|
if(src.loc.opacity) src.loc.opacity = 0
|
|
|
|
src.set_loc(picked)
|
|
|
|
spawn(5)
|
|
picked.invisibility = 100
|
|
picked.opacity = 1
|
|
active = 0
|
|
|
|
//spawn(rand(100,200)) update() // raised delay
|
|
|
|
/obj/line_obj/whip
|
|
name = "Whip"
|
|
desc = ""
|
|
anchored = 1
|
|
density = 0
|
|
opacity = 0
|
|
|
|
/obj/whip_trg_dummy
|
|
name = ""
|
|
desc = ""
|
|
anchored = 1
|
|
density = 0
|
|
opacity = 0
|
|
invisibility = 99
|
|
|
|
/obj/item/whip
|
|
name = "whip"
|
|
desc = "a sturdy whip."
|
|
icon = 'icons/misc/exploration.dmi'
|
|
inhand_image_icon = 'icons/mob/inhand/hand_weapons.dmi'
|
|
icon_state = "whip"
|
|
item_state = "c_tube"
|
|
flags = FPRINT | EXTRADELAY | TABLEPASS | CONDUCT
|
|
w_class = 2.0
|
|
|
|
afterattack(atom/target as mob|obj|turf, mob/user as mob)
|
|
if(target == usr) return
|
|
|
|
if(get_dist(usr, target) > 5)
|
|
boutput(usr, "<span style=\"color:red\">That is too far away!</span>")
|
|
return
|
|
|
|
var/atom/target_r = target
|
|
|
|
if(isturf(target))
|
|
target_r = new/obj/whip_trg_dummy(target)
|
|
|
|
playsound(src, 'sound/effects/snap.ogg', 40, 1)
|
|
|
|
var/list/affected = DrawLine(src.loc, target_r, /obj/line_obj/whip ,'icons/obj/projectiles.dmi',"WholeWhip",1,1,"HalfStartWhip","HalfEndWhip",OBJ_LAYER,1)
|
|
|
|
for(var/obj/O in affected)
|
|
O.anchored = 1 //Proc wont spawn the right object type so lets do that here.
|
|
O.name = "Whip"
|
|
|
|
var/turf/T = O.loc
|
|
|
|
if(locate(/obj/decal/stalagmite) in T)
|
|
boutput(usr, "<span style=\"color:red\">You pull yourself to the stalagmite using the whip.</span>")
|
|
usr.set_loc(T)
|
|
else if(locate(/obj/decal/stalagtite) in T)
|
|
boutput(usr, "<span style=\"color:red\">You pull yourself to the stalagtite using the whip.</span>")
|
|
usr.set_loc(T)
|
|
|
|
spawn(2) pool(O)
|
|
|
|
if(istype(target_r, /obj/whip_trg_dummy)) qdel(target_r)
|
|
|
|
return
|
|
|
|
/obj/boulder_trap_boulder
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "boulder"
|
|
density = 1
|
|
anchored = 1
|
|
opacity = 0
|
|
|
|
New(var/atom/sloc)
|
|
src.set_loc(sloc)
|
|
spawn(0) go()
|
|
|
|
proc/go()
|
|
while(!disposed)
|
|
sleep(2)
|
|
var/turf/next = get_step(src, SOUTH)
|
|
if(prob(30))
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 60, 1) // having some noise might be rad
|
|
|
|
if(!next || next.density)
|
|
playsound(src.loc, 'sound/effects/Explosion2.ogg', 40, 1)
|
|
new/obj/item/raw_material/rock(src.loc)
|
|
new/obj/item/raw_material/rock(src.loc)
|
|
new/obj/item/raw_material/rock(src.loc)
|
|
new/obj/item/raw_material/rock(src.loc)
|
|
spawn(0)
|
|
dispose()
|
|
return
|
|
else
|
|
src.set_loc(next)
|
|
for(var/mob/living/carbon/C in next)
|
|
C.TakeDamage("chest", 33, 0)
|
|
if(hasvar(C, "weakened"))
|
|
C:weakened += 5
|
|
|
|
|
|
/obj/boulder_trap/respawning
|
|
resets = 10
|
|
|
|
/obj/boulder_trap
|
|
icon = 'icons/misc/mark.dmi'
|
|
icon_state = "x4"
|
|
invisibility = 101
|
|
anchored = 1
|
|
density = 0
|
|
var/ready = 1
|
|
var/resets = 0
|
|
|
|
HasEntered(atom/movable/AM as mob|obj)
|
|
if(!ready) return
|
|
if(ismob(AM))
|
|
if(AM:client)
|
|
ready = 0
|
|
playsound(src, 'sound/effects/exlow.ogg', 40, 0)
|
|
var/turf/spawnloc = get_step(get_step(get_step(src, NORTH), NORTH), NORTH)
|
|
new/obj/boulder_trap_boulder(spawnloc)
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
|
|
if(resets)
|
|
spawn(resets) ready = 1
|
|
|
|
/obj/item/runetablet
|
|
name = "Runic Tablet"
|
|
desc = "A Tablet with several runes engraved upon its surface."
|
|
icon = 'icons/misc/exploration.dmi'
|
|
icon_state = "runetablet"
|
|
|
|
attack_self()
|
|
|
|
var/dat = ""
|
|
dat += "<b>There's several runes inscribed here ...</b><BR><BR>"
|
|
dat += "<A href='?src=\ref[src];north=1'>Touch the first rune</A><BR>"
|
|
dat += "<A href='?src=\ref[src];east=1'>Touch the second rune</A><BR>"
|
|
dat += "<A href='?src=\ref[src];south=1'>Touch the third rune</A><BR>"
|
|
dat += "<A href='?src=\ref[src];west=1'>Touch the fourth rune</A><BR>"
|
|
|
|
usr.machine = src
|
|
usr << browse("[dat]", "window=rtab;size=400x300")
|
|
onclose(usr, "rtab")
|
|
return
|
|
|
|
Topic(href, href_list)
|
|
if (..(href, href_list))
|
|
return
|
|
|
|
var/movedir = null
|
|
|
|
if (href_list["north"])
|
|
boutput(usr, "<span style=\"color:blue\">The rune glows softly...</span>")
|
|
movedir = NORTH
|
|
playsound(src.loc, 'sound/machines/ArtifactEld1.ogg', 30, 1)
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
else if (href_list["east"])
|
|
boutput(usr, "<span style=\"color:blue\">The rune glows softly...</span>")
|
|
movedir = EAST
|
|
playsound(src.loc, 'sound/machines/ArtifactEld1.ogg', 30, 1)
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
else if (href_list["south"])
|
|
boutput(usr, "<span style=\"color:blue\">The rune glows softly...</span>")
|
|
movedir = SOUTH
|
|
playsound(src.loc, 'sound/machines/ArtifactEld1.ogg', 30, 1)
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
else if (href_list["west"])
|
|
boutput(usr, "<span style=\"color:blue\">The rune glows softly...</span>")
|
|
movedir = WEST
|
|
playsound(src.loc, 'sound/machines/ArtifactEld1.ogg', 30, 1)
|
|
playsound(src.loc, 'sound/effects/rockscrape.ogg', 40, 1)
|
|
|
|
if(movedir != null)
|
|
for(var/obj/shifting_wall/sneaky/cave/C in orange(3, usr))
|
|
C.do_move(movedir)
|
|
|
|
usr << browse(null, "window=rtab")
|
|
src.updateUsrDialog()
|
|
return
|
|
|
|
|
|
// cogwerks - wall shift trigger
|
|
|
|
/obj/sneaky_wall_trigger
|
|
icon = 'icons/misc/mark.dmi'
|
|
icon_state = "ydn"
|
|
invisibility = 101
|
|
anchored = 1
|
|
density = 0
|
|
var/active = 0
|
|
HasEntered(atom/movable/AM as mob|obj)
|
|
if(active) return
|
|
if(ismob(AM))
|
|
if(AM:client)
|
|
if(prob(75))
|
|
active = 1
|
|
for(var/obj/shifting_wall/sneaky/cave/C in orange(7, usr))
|
|
C.update()
|
|
spawn(100) active = 0
|
|
|
|
//////// cogwerks - reward item, based on the old cyborg suit
|
|
|
|
/obj/item/clothing/suit/armor/ancient
|
|
name = "ancient armor"
|
|
desc = "It belongs in a museum. Or maybe a laboratory. What the hell is this?"
|
|
icon_state = "death"
|
|
item_state = "death"
|
|
// stole some shit from the welder's apron
|
|
flags = FPRINT | TABLEPASS | SPACEWEAR
|
|
body_parts_covered = TORSO|LEGS|ARMS
|
|
fire_resist = T0C+5200
|
|
permeability_coefficient = 0.02
|
|
protective_temperature = 1000
|
|
heat_transfer_coefficient = 0.02
|
|
cant_self_remove = 1
|
|
cant_other_remove = 1
|
|
w_class = 3.0
|
|
var/processing = 0
|
|
|
|
|
|
// scare the everliving fuck out of the player when they equip it
|
|
// what else should this thing do? idk yet. maybe some crazy hallucinations with an ancient blood reagent or something? something like the obsidian crown?
|
|
// spookycoders are welcome to contribute to this thing
|
|
|
|
/obj/item/clothing/suit/armor/ancient/equipped(var/mob/user, var/slot)
|
|
boutput(user, "<span style=\"color:blue\">The armor plates creak oddly as you put on [src].</span>")
|
|
playsound(src.loc, 'sound/machines/ArtifactEld2.ogg', 30, 1)
|
|
user.reagents.add_reagent("itching", 10)
|
|
take_bleeding_damage(user, null, 0, DAMAGE_STAB, 0)
|
|
bleed(user, 5, 5)
|
|
src.desc = "This isn't coming off... oh god..."
|
|
if (!src.processing)
|
|
src.processing++
|
|
if (!(src in processing_items))
|
|
processing_items.Add(src)
|
|
spawn(50)
|
|
boutput(user, "<span style=\"color:blue\">The [src] feels like it's getting tighter. Ouch! Seems to have a lot of sharp edges inside.</span>")
|
|
random_brute_damage(user, 5)
|
|
take_bleeding_damage(user, null, 0, DAMAGE_STAB, 0)
|
|
bleed(user, 5, 5)
|
|
spawn(90)
|
|
user.visible_message("<span style=\"color:red\"><b>[src] violently contracts around [user]!</B></span>")
|
|
playsound(user.loc, 'sound/effects/bloody_stab.ogg', 50, 1, -1)
|
|
random_brute_damage(user, 15)
|
|
user.emote("scream")
|
|
take_bleeding_damage(user, null, 0, DAMAGE_STAB, 0)
|
|
bleed(user, 5, 1)
|
|
spawn(50)
|
|
user.visible_message("<span style=\"color:red\"><b>[src] digs into [user]!</B></span>")
|
|
playsound(user.loc, 'sound/effects/bloody_stab.ogg', 50, 1, -1)
|
|
random_brute_damage(user, 15)
|
|
user.emote("scream")
|
|
take_bleeding_damage(user, null, 0, DAMAGE_STAB, 0)
|
|
bleed(user, 5, 5)
|
|
spawn(50)
|
|
var/mob/living/carbon/human/H = user
|
|
playsound(user.loc, 'sound/effects/blobattack.ogg', 50, 1, -1)
|
|
H.visible_message("<span style=\"color:red\"><b>[src] absorbs some of [user]'s skin!</b></span>")
|
|
random_brute_damage(user, 30)
|
|
H.emote("scream")
|
|
if (!H.decomp_stage)
|
|
H.bioHolder.AddEffect("eaten") //gross
|
|
take_bleeding_damage(user, null, 0, DAMAGE_CUT, 0)
|
|
bleed(user, 15, 5)
|
|
user.emote("faint")
|
|
user.reagents.add_reagent("ectoplasm", 50)
|
|
return
|
|
|
|
|
|
/obj/item/clothing/suit/armor/ancient/process()
|
|
var/mob/living/host = src.loc
|
|
if (!istype(host))
|
|
processing_items.Remove(src)
|
|
processing = 0
|
|
return
|
|
|
|
if(prob(30) && istype(host,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/M = host
|
|
M.bioHolder.age++
|
|
if(prob(10)) boutput(M, "<span style=\"color:red\">You feel [pick("old", "strange", "frail", "peculiar", "odd")].</span>")
|
|
if(prob(4)) M.emote("scream")
|
|
return
|
|
|
|
///////////////////////////////
|