mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
[s] Lavaland Patch (#18398)
* Commit squash before update to master * Removed repathing and slot machine shenanigans * Legion spawn changes * Map edits, round II * Some changes * Removes map changes, hopefully * Conflicts 1 * Updates the maps * Conflicts 2 * How about now? * Remaps the colossus arena * Restores old colossus spawning
This commit is contained in:
@@ -220,8 +220,10 @@
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"aF" = (
|
||||
/obj/machinery/door/unpowered/shuttle,
|
||||
/turf/open/floor/plating{
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Restroom"
|
||||
},
|
||||
/turf/open/floor/plasteel/bar{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
@@ -257,10 +259,7 @@
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"aM" = (
|
||||
/obj/effect/mob_spawn/human/doctor/alive{
|
||||
flavour_text = "You were putting in your hours as a vet in the local animal hospital when a massive bluespace translocation shunted you across the galaxy. Can you survive on this desolate wasteland..?";
|
||||
id_job = "Veterinarian"
|
||||
},
|
||||
/obj/effect/mob_spawn/human/doctor/alive/lavaland,
|
||||
/turf/open/floor/plasteel/blue/side{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
|
||||
dir = 1
|
||||
@@ -384,6 +383,10 @@
|
||||
"bd" = (
|
||||
/obj/structure/table/glass,
|
||||
/obj/item/weapon/storage/box/gloves,
|
||||
/obj/item/weapon/storage/box/masks{
|
||||
pixel_x = 3;
|
||||
pixel_y = 3
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
@@ -530,7 +533,7 @@
|
||||
"bv" = (
|
||||
/obj/effect/mob_spawn/mouse{
|
||||
dir = 4;
|
||||
flavour_text = "You're a mousey! You're getting pretty old as mice go, and you haven't been feeling well as of late. Your master loves you a lot so he took you to this place so you can get better! You can't wait to see him again!";
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou're a mousey! You're getting pretty old as mice go, and you haven't been feeling well as of late. Your master loves you a lot so he took you to this place so you can get better! You can't wait to see him again!<b>";
|
||||
mob_name = "Stallman Jr."
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
@@ -546,9 +549,9 @@
|
||||
"bx" = (
|
||||
/obj/machinery/door/airlock/medical{
|
||||
name = "Patient Room";
|
||||
req_access_txt = "5"
|
||||
req_access_txt = "0"
|
||||
},
|
||||
/turf/open/floor/plating{
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
@@ -641,8 +644,10 @@
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"bJ" = (
|
||||
/obj/machinery/door/airlock/glass_large,
|
||||
/turf/open/floor/plating{
|
||||
/obj/machinery/door/airlock/glass_large{
|
||||
name = "Ian's Pet Care"
|
||||
},
|
||||
/turf/open/floor/plasteel{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
@@ -673,7 +678,7 @@
|
||||
"bN" = (
|
||||
/obj/effect/mob_spawn/cow{
|
||||
dir = 4;
|
||||
flavour_text = "You're a cow. You've lived a pampered life as a prized show heifer, a real blue-ribbon winner. After showing signs of a minor respiratory infection, your master took you to the hospital right away. He'd better come back soon, you're getting quite impatient.";
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou're a cow. You've lived a pampered life as a prized show heifer, a real blue-ribbon winner. After showing signs of a minor respiratory infection, your master took you to the hospital right away. He'd better come back soon. You're getting quite impatient.</b>";
|
||||
mob_name = "Flossie"
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
@@ -706,7 +711,10 @@
|
||||
"bR" = (
|
||||
/obj/structure/table,
|
||||
/obj/machinery/cell_charger,
|
||||
/obj/item/weapon/melee/baton/cattleprod,
|
||||
/obj/item/weapon/melee/baton/cattleprod{
|
||||
desc = "On-the-fly rabies treatment.";
|
||||
name = "cattle prod"
|
||||
},
|
||||
/obj/item/weapon/stock_parts/cell/high,
|
||||
/turf/open/floor/plasteel/blue/side{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
|
||||
@@ -802,13 +810,66 @@
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"cf" = (
|
||||
/obj/machinery/sleeper{
|
||||
icon_state = "sleeper-open";
|
||||
dir = 4
|
||||
/obj/structure/closet/l3closet,
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/turf/open/floor/plasteel/blue/side{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
|
||||
dir = 1
|
||||
/area/ruin/powered)
|
||||
"cm" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Tool Storage"
|
||||
},
|
||||
/turf/open/floor/plating{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"cl" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Safety Supplies"
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"ck" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Medical Supplies"
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"cj" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Morgue"
|
||||
},
|
||||
/turf/open/floor/plating{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"ci" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
desc = "There's a note wedged in the seam saying something about directing pizza here.";
|
||||
name = "Staff Entrance"
|
||||
},
|
||||
/turf/open/floor/plating{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"ch" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Emergency Care"
|
||||
},
|
||||
/turf/open/floor/plasteel/white{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
"cg" = (
|
||||
/obj/machinery/door/unpowered/shuttle{
|
||||
name = "Break Room"
|
||||
},
|
||||
/turf/open/floor/plasteel/cmo{
|
||||
baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
|
||||
},
|
||||
/area/ruin/powered)
|
||||
|
||||
@@ -942,7 +1003,7 @@ ae
|
||||
ae
|
||||
ae
|
||||
aE
|
||||
aF
|
||||
ci
|
||||
ae
|
||||
aE
|
||||
aT
|
||||
@@ -974,11 +1035,11 @@ ay
|
||||
ae
|
||||
aK
|
||||
aK
|
||||
aF
|
||||
cj
|
||||
aU
|
||||
aZ
|
||||
bg
|
||||
aF
|
||||
cj
|
||||
aK
|
||||
bp
|
||||
by
|
||||
@@ -1061,7 +1122,7 @@ ae
|
||||
ai
|
||||
as
|
||||
as
|
||||
aF
|
||||
cg
|
||||
aK
|
||||
aP
|
||||
ae
|
||||
@@ -1094,11 +1155,11 @@ as
|
||||
ae
|
||||
aM
|
||||
aK
|
||||
aF
|
||||
ck
|
||||
ao
|
||||
bb
|
||||
ao
|
||||
aF
|
||||
ck
|
||||
aK
|
||||
aK
|
||||
aK
|
||||
@@ -1133,7 +1194,7 @@ bl
|
||||
bt
|
||||
aK
|
||||
aK
|
||||
aU
|
||||
aK
|
||||
aJ
|
||||
aJ
|
||||
ab
|
||||
@@ -1154,11 +1215,11 @@ as
|
||||
ae
|
||||
aM
|
||||
aK
|
||||
aF
|
||||
cl
|
||||
ao
|
||||
bc
|
||||
ao
|
||||
aF
|
||||
cl
|
||||
aK
|
||||
aK
|
||||
aK
|
||||
@@ -1181,7 +1242,7 @@ ae
|
||||
am
|
||||
as
|
||||
as
|
||||
aF
|
||||
cg
|
||||
aK
|
||||
aP
|
||||
ae
|
||||
@@ -1215,7 +1276,7 @@ aH
|
||||
aL
|
||||
aP
|
||||
ae
|
||||
aV
|
||||
cf
|
||||
bd
|
||||
bj
|
||||
ae
|
||||
@@ -1271,10 +1332,10 @@ cc
|
||||
ce
|
||||
ao
|
||||
ao
|
||||
aF
|
||||
ch
|
||||
aK
|
||||
aK
|
||||
aF
|
||||
cm
|
||||
aX
|
||||
be
|
||||
bk
|
||||
|
||||
45
code/game/objects/structures/fluff.dm
Normal file
45
code/game/objects/structures/fluff.dm
Normal file
@@ -0,0 +1,45 @@
|
||||
//Fluff structures serve no purpose and exist only for enriching the environment. They can be destroyed with a wrench.
|
||||
|
||||
/obj/structure/fluff
|
||||
name = "fluff structure"
|
||||
desc = "Fluffier than a sheep. This shouldn't exist."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "minibar"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
|
||||
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
user.visible_message("<span class='notice'>[user] starts disassembling [src]...</span>", "<span class='notice'>You start disassembling [src]...</span>")
|
||||
playsound(user, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(!do_after(user, 50, target = src))
|
||||
return 0
|
||||
user.visible_message("<span class='notice'>[user] disassembles [src]!</span>", "<span class='notice'>You break down [src] into scrap metal.</span>")
|
||||
playsound(user, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
new/obj/item/stack/sheet/metal(get_turf(src))
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated.
|
||||
name = "empty terrarium"
|
||||
desc = "An ancient machine that seems to be used for storing plant matter. Its hatch is ajar."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "terrarium_open"
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/fluff/empty_sleeper //Empty sleepers are created by a good few ghost roles in lavaland.
|
||||
name = "empty sleeper"
|
||||
desc = "An open sleeper. It looks as though it would be awaiting another patient, were it not broken."
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper-open"
|
||||
|
||||
/obj/structure/fluff/empty_sleeper/syndicate
|
||||
icon_state = "sleeper_s-open"
|
||||
|
||||
/obj/structure/fluff/empty_cryostasis_sleeper //Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated
|
||||
name = "empty cryostasis sleeper"
|
||||
desc = "Although comfortable, this sleeper won't function as anything but a bed ever again."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "cryostasis_sleeper_open"
|
||||
235
code/game/objects/structures/ghost_role_spawners.dm
Normal file
235
code/game/objects/structures/ghost_role_spawners.dm
Normal file
@@ -0,0 +1,235 @@
|
||||
//Objects that spawn ghosts in as a certain role when they click on it, i.e. away mission bartenders.
|
||||
|
||||
//Preserved terrarium/seed vault: Spawns in seed vault structures in lavaland. Ghosts become plantpeople and are advised to begin growing plants in the room near them.
|
||||
/obj/effect/mob_spawn/human/seed_vault
|
||||
name = "preserved terrarium"
|
||||
desc = "An ancient machine that seems to be used for storing plant matter. The glass is obstructed by a mat of vines."
|
||||
mob_name = "a lifebringer"
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "terrarium"
|
||||
density = TRUE
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
mob_species = /datum/species/pod
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a sentient ecosystem - an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \
|
||||
seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \
|
||||
for contact from your creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago.</b>"
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault/special(mob/living/new_spawn)
|
||||
var/plant_name = pick("Tomato", "Potato", "Brocolli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Bannana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \
|
||||
"Venus", "Sprout","Cocao", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper")
|
||||
new_spawn.real_name = plant_name
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.underwear = "Nude" //You're a plant, partner
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault/Destroy()
|
||||
new/obj/structure/fluff/empty_terrarium(get_turf(src))
|
||||
..()
|
||||
|
||||
//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers.
|
||||
/obj/effect/mob_spawn/human/ash_walker
|
||||
name = "ash walker egg"
|
||||
desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within."
|
||||
mob_name = "an ash walker"
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "large_egg"
|
||||
mob_species = /datum/species/lizard/ashwalker
|
||||
helmet = /obj/item/clothing/head/helmet/gladiator
|
||||
uniform = /obj/item/clothing/under/gladiator
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
anchored = 0
|
||||
density = 0
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are an ash walker. Your tribe worships <span class='danger'>the Necropolis</span>. The wastes are sacred ground, its monsters a blessed bounty. \
|
||||
You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest.</b>"
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = random_unique_lizard_name(gender)
|
||||
new_spawn << "<b>Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!</b>"
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.underwear = "Nude"
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker/New()
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
|
||||
//Timeless prisons: Spawns in Wish Granter prisons in lavaland. Ghosts become age-old users of the Wish Granter and are advised to seek repentance for their past.
|
||||
/obj/effect/mob_spawn/human/exile
|
||||
name = "timeless prison"
|
||||
desc = "Although this stasis pod looks medicinal, it seems as though it's meant to preserve something for a very long time."
|
||||
mob_name = "a penitent exile"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
mob_species = /datum/species/shadow
|
||||
flavour_text = "<font size=3><b>Y</b></font>ou are cursed. Years ago, you sacrificed the lives of your trusted friends and the humanity of yourself to reach the Wish Granter. Though you did so, \
|
||||
it has come at a cost: your very body rejects the light, dooming you to wander endlessly in this horrible wasteland.</b>"
|
||||
|
||||
/obj/effect/mob_spawn/human/exile/Destroy()
|
||||
new/obj/structure/fluff/empty_sleeper(get_turf(src))
|
||||
..()
|
||||
|
||||
/obj/effect/mob_spawn/human/exile/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = "[new_spawn.real_name] ([rand(0,999)])"
|
||||
var/wish = rand(1,4)
|
||||
switch(wish)
|
||||
if(1)
|
||||
new_spawn << "<b>You wished to kill, and kill you did. You've lost track of how many, but the spark of excitement that murder once held has winked out. You feel only regret.</b>"
|
||||
if(2)
|
||||
new_spawn << "<b>You wished for unending wealth, but no amount of money was worth this existence. Maybe charity might redeem your soul?</b>"
|
||||
if(3)
|
||||
new_spawn << "<b>You wished for power. Little good it did you, cast out of the light. You are the [gender == MALE ? "king" : "queen"] of a hell that holds no subjects. You feel only remorse.</b>"
|
||||
if(4)
|
||||
new_spawn << "<b>You wished for immortality, even as your friends lay dying behind you. No matter how many times you cast yourself into the lava, you awaken in this room again within a few days. There is no escape.</b>"
|
||||
|
||||
//Golem shells: Spawns in Free Golem ships in lavaland. Ghosts become mineral golems and are advised to spread personal freedom.
|
||||
/obj/effect/mob_spawn/human/golem
|
||||
name = "inert golem shell"
|
||||
desc = "A humanoid shape, empty, lifeless, and full of potential."
|
||||
mob_name = "a free golem"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "construct"
|
||||
mob_species = /datum/species/golem
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
anchored = 0
|
||||
density = 0
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou are a Free Golem. Your family worships <span class='danger'>The Liberator</span>. In his infinite and divine wisdom, he set your clan free to \
|
||||
travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \
|
||||
golems, so that no golem may ever be forced to serve again.</b>"
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/New()
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("A golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn)
|
||||
var/golem_surname = pick(golem_names)
|
||||
// 3% chance that our golem has a human surname, because
|
||||
// cultural contamination
|
||||
if(prob(3))
|
||||
golem_surname = pick(last_names)
|
||||
|
||||
var/datum/species/X = mob_species
|
||||
var/golem_forename = initial(X.id)
|
||||
|
||||
// The id of golem species is either their material "diamond","gold",
|
||||
// or just "golem" for the plain ones. So we're using it for naming.
|
||||
|
||||
if(golem_forename == "golem")
|
||||
golem_forename = "iron"
|
||||
|
||||
new_spawn.real_name = "[capitalize(golem_forename)] [golem_surname]"
|
||||
// This means golems have names like Iron Forge, or Diamond Quarry
|
||||
// also a tiny chance of being called "Plasma Meme"
|
||||
// which is clearly a feature
|
||||
|
||||
new_spawn << "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked."
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.set_cloned_appearance()
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/adamantine
|
||||
name = "dust-caked golem shell"
|
||||
desc = "A humanoid shape, empty, lifeless, and full of potential."
|
||||
mob_name = "a free golem"
|
||||
anchored = 1
|
||||
density = 1
|
||||
mob_species = /datum/species/golem/adamantine
|
||||
|
||||
//Malfunctioning cryostasis sleepers: Spawns in makeshift shelters in lavaland. Ghosts become hermits with knowledge of how they got to where they are now.
|
||||
/obj/effect/mob_spawn/human/hermit
|
||||
name = "malfunctiong cryostasis sleeper"
|
||||
desc = "A humming sleeper with a silhoutted occupant inside. Its stasis function is broken and it's likely being used as a bed."
|
||||
mob_name = "a stranded hermit"
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "cryostasis_sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = "<font size=3><b>Y</b></font><b>ou've been stranded in this godless prison of a planet for longer than you can remember. Each day you barely scrape by, and between the terrible \
|
||||
conditions of your makeshift shelter, the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between your toes and \
|
||||
the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... "
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit/New()
|
||||
var/arrpee = rand(1,4)
|
||||
switch(arrpee)
|
||||
if(1)
|
||||
flavour_text += "you were a [pick("arms dealer", "shipwright", "docking manager")]'s assistant on a small trading station several sectors from here. Raiders attacked, and there was \
|
||||
only one pod left when you got to the escape bay. You took it and launched it alone, and the crowd of terrified faces crowding at the airlock door as your pod's engines burst to \
|
||||
life and sent you to this hell are forever branded into your memory.</b>"
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
if(2)
|
||||
flavour_text += "you're an exile from the Tiger Cooperative. Their technological fanaticism drove you to question the power and beliefs of the Exolitics, and they saw you as a \
|
||||
heretic and subjected you to hours of horrible torture. You were hours away from execution when a high-ranking friend of yours in the Cooperative managed to secure you a pod, \
|
||||
scrambled its destination's coordinates, and launched it. You awoke from stasis when you landed and have been surviving - barely - ever since.</b>"
|
||||
uniform = /obj/item/clothing/under/rank/prisoner
|
||||
shoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
if(3)
|
||||
flavour_text += "you were a doctor on one of Nanotrasen's space stations, but you left behind that damn corporation's tyranny and everything it stood for. From a metaphorical hell \
|
||||
to a literal one, you find yourself nonetheless missing the recycled air and warm floors of what you left behind... but you'd still rather be here than there.</b>"
|
||||
uniform = /obj/item/clothing/under/rank/medical
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat
|
||||
back = /obj/item/weapon/storage/backpack/medic
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
if(4)
|
||||
flavour_text += "you were always joked about by your friends for \"not playing with a full deck\", as they so <i>kindly</i> put it. It seems that they were right when you, on a tour \
|
||||
at one of Nanotrasen's state-of-the-art research facilities, were in one of the escape pods alone and saw the red button. It was big and shiny, and it caught your eye. You pressed \
|
||||
it, and after a terrifying and fast ride for days, you landed here. You've had time to wisen up since then, and you think that your old friends wouldn't be laughing now.</b>"
|
||||
uniform = /obj/item/clothing/under/color/grey/glorf
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
..()
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit/Destroy()
|
||||
new/obj/structure/fluff/empty_cryostasis_sleeper(get_turf(src))
|
||||
..()
|
||||
|
||||
//Broken rejuvenation pod: Spawns in animal hospitals in lavaland. Ghosts become disoriented interns and are advised to search for help.
|
||||
/obj/effect/mob_spawn/human/doctor/alive/lavaland
|
||||
name = "broken rejuvenation pod"
|
||||
desc = "A small sleeper typically used to instantly restore minor wounds. This one seems broken, and its occupant is comatose."
|
||||
mob_name = "a translocated vet"
|
||||
flavour_text = "<font size=3><b>W</b></font><b>hat...? Where are you? Where are the others? This is still the animal hospital - you should know, you've been an intern here for weeks - but \
|
||||
everyone's gone. One of the cats scratched you just a few minutes ago. That's why you were in the pod - to heal the scratch. The scabs are still fresh; you see them right now. So where is \
|
||||
everyone? Where did they go? What happened to the hospital? And is that <i>smoke</i> you smell? You need to find someone else. Maybe they can tell you what happened.</b>"
|
||||
|
||||
//Prisoner containment sleeper: Spawns in crashed prison ships in lavaland. Ghosts become escaped prisoners and are advised to find a way out of the mess they've gotten themselves into.
|
||||
/obj/effect/mob_spawn/human/prisoner_transport
|
||||
name = "prisoner containment sleeper"
|
||||
desc = "A sleeper designed to put its occupant into a deep coma, unbreakable until the sleeper turns off. This one's glass is cracked and you can see a pale, sleeping face staring out."
|
||||
mob_name = "an escaped prisoner"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper_s"
|
||||
uniform = /obj/item/clothing/under/rank/prisoner
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
flavour_text = "<font size=3><b>G</b></font><b>ood. It seems as though your ship crashed. You're a prisoner, sentenced to hard work in one of Nanotrasen's labor camps, but it seems as \
|
||||
though fate has other plans for you. You remember that you were convicted of "
|
||||
|
||||
/obj/effect/mob_spawn/human/prisoner_transport/New()
|
||||
var/list/crimes = list("murder", "larceny", "embezzlement", "unionization", "dereliction of duty", "kidnapping", "gross incompetence", "grand theft", "collaboration with the Syndicate", \
|
||||
"worship of a forbidden deity", "interspecies relations", "mutiny")
|
||||
flavour_text += "[pick(crimes)]. but regardless of that, it seems like your crime doesn't matter now. You don't know where you are, but you know that it's out to kill you, and you're not going \
|
||||
to lose this opportunity. Find a way to get out of this mess and back to where you rightfully belong - your [pick("house", "apartment", "spaceship", "station")]</b>."
|
||||
..()
|
||||
|
||||
/obj/effect/mob_spawn/human/prisoner_transport/Destroy()
|
||||
new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src))
|
||||
..()
|
||||
@@ -497,24 +497,6 @@
|
||||
uniform = /obj/item/clothing/under/color/grey
|
||||
shoes = /obj/item/clothing/shoes/combat
|
||||
|
||||
///Prisoner
|
||||
|
||||
/obj/effect/mob_spawn/human/prisoner_transport
|
||||
name = "prisoner sleeper"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
uniform = /obj/item/clothing/under/rank/prisoner
|
||||
mask = /obj/item/clothing/mask/breath
|
||||
shoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
flavour_text = {"You were a prisoner, sentenced to hard labour in one of Nanotrasen's harsh gulags, but judging by the explosive crash you just survived, fate may have other plans for. First thing is first though: Find a way to survive this mess."}
|
||||
|
||||
/obj/effect/mob_spawn/human/prisoner_transport/special(mob/living/new_spawn)
|
||||
var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting your manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence")
|
||||
new_spawn << "You were convincted of: [crime]."
|
||||
|
||||
//For ghost bar.
|
||||
/obj/effect/mob_spawn/human/alive/space_bar_patron
|
||||
name = "Bar cryogenics"
|
||||
|
||||
@@ -7,12 +7,15 @@
|
||||
var/name = "storm"
|
||||
var/start_up_time = 300 //30 seconds
|
||||
var/start_up_message = "The wind begins to pick up."
|
||||
var/start_up_sound
|
||||
var/duration = 120 //2 minutes
|
||||
var/duration_lower = 120
|
||||
var/duration_upper = 120
|
||||
var/duration_sound
|
||||
var/duration_message = "A storm has started!"
|
||||
var/wind_down = 300 // 30 seconds
|
||||
var/wind_down_message = "The storm is passing."
|
||||
var/wind_down_sound
|
||||
|
||||
var/target_z = 1
|
||||
var/exclude_walls = TRUE
|
||||
@@ -35,8 +38,9 @@
|
||||
update_areas()
|
||||
for(var/mob/M in player_list)
|
||||
if(M.z == target_z)
|
||||
M << "<span class='danger'><B>[start_up_message]</B></span>"
|
||||
|
||||
M << "<span class='warning'><B>[start_up_message]</B></span>"
|
||||
if(start_up_sound)
|
||||
M << start_up_sound
|
||||
sleep(start_up_time)
|
||||
stage = MAIN_STAGE
|
||||
weather_main()
|
||||
@@ -46,7 +50,9 @@
|
||||
update_areas()
|
||||
for(var/mob/M in player_list)
|
||||
if(M.z == target_z)
|
||||
M << "<span class='danger'><B>[duration_message]</B></span>"
|
||||
M << "<span class='userdanger'><i>[duration_message]</i></span>"
|
||||
if(duration_sound)
|
||||
M << duration_sound
|
||||
if(purely_aesthetic)
|
||||
sleep(duration*10)
|
||||
else //Storm effects
|
||||
@@ -66,7 +72,8 @@
|
||||
for(var/mob/M in player_list)
|
||||
if(M.z == target_z)
|
||||
M << "<span class='danger'><B>[wind_down_message]</B></span>"
|
||||
|
||||
if(wind_down_sound)
|
||||
M << wind_down_sound
|
||||
sleep(wind_down)
|
||||
|
||||
stage = END_STAGE
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
duration_upper = 60 //1 minute
|
||||
duration_message = "This isn't average everyday darkness... this is advanced darkness!"
|
||||
wind_down = 100 // 10 seconds
|
||||
wind_down_message = "The darkness is receding. Thank god."
|
||||
wind_down_message = "The darkness recedes."
|
||||
purely_aesthetic = TRUE
|
||||
|
||||
target_z = 1
|
||||
@@ -68,12 +68,15 @@
|
||||
/datum/weather/ash_storm
|
||||
name = "ash storm"
|
||||
start_up_time = 300 //30 seconds
|
||||
start_up_message = "The wind begins to pick up. Seek shelter."
|
||||
start_up_message = "An eerie moan rises on the wind. Sheets of burning ash blacken the horizon. Seek shelter."
|
||||
start_up_sound = 'sound/lavaland/ash_storm_windup.ogg'
|
||||
duration_lower = 60 //1 minute
|
||||
duration_upper = 150 //2.5 minutes
|
||||
duration_message = "An ash storm has started! Get inside!"
|
||||
duration_message = "Smoldering clouds of scorching ash billow down around you! Get inside!"
|
||||
duration_sound = 'sound/lavaland/ash_storm_start.ogg'
|
||||
wind_down = 300 // 30 seconds
|
||||
wind_down_message = "The storm begins to fade. Should be safe to go outside again."
|
||||
wind_down_message = "The shrieking wind whips away the last of the ash and falls to its usual murmur. It should be safe to go outside now."
|
||||
wind_down_sound = 'sound/lavaland/ash_storm_end.ogg'
|
||||
|
||||
target_z = ZLEVEL_LAVALAND
|
||||
area_type = /area/lavaland/surface/outdoors
|
||||
@@ -88,8 +91,8 @@
|
||||
/datum/weather/ash_storm/false_alarm //No storm, just light ember fall
|
||||
purely_aesthetic = TRUE
|
||||
duration_overlay = "light_ash"
|
||||
duration_message = "Looks like the storm just missed the mining area. False alarm."
|
||||
wind_down_message = "The ash fall starts to trail off."
|
||||
duration_message = "<span class='notice'>Gentle ashfall surrounds you like grotesque snow. The storm seems to have passed you by.</span>"
|
||||
wind_down_message = "The ashfall quietly slows, then stops. Another layer of hardened soot to the volcanic rock beneath you."
|
||||
|
||||
/datum/weather/ash_storm/storm_act(mob/living/L)
|
||||
if(immunity_type in L.weather_immunities)
|
||||
|
||||
@@ -263,7 +263,8 @@
|
||||
|
||||
/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/colossus = 2)
|
||||
/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/colossus = 2)
|
||||
|
||||
turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
|
||||
initial_gas_mix = "o2=14;n2=23;TEMP=300"
|
||||
@@ -587,7 +588,7 @@
|
||||
if(istype(H.belt, /obj/item/device/wormhole_jaunter))
|
||||
var/obj/item/device/wormhole_jaunter/J = H.belt
|
||||
// To freak out any bystanders
|
||||
visible_message("[H] falls into [src]!")
|
||||
visible_message("<span class='boldwarning'>[H] falls into [src]!</span>")
|
||||
J.chasm_react(H)
|
||||
return
|
||||
if(H.dna.species && (FLYING in H.dna.species.specflags))
|
||||
@@ -599,9 +600,10 @@
|
||||
/*visible_message("[AM] falls into [src]!")
|
||||
qdel(AM)*/
|
||||
AM.forceMove(locate(drop_x, drop_y, drop_z))
|
||||
AM.visible_message("[AM] falls from above!")
|
||||
AM.visible_message("<span class='boldwarning'>[AM] falls from above!</span>", "<span class='userdanger'>GAH! Ah... where are you?</span>")
|
||||
if(istype(AM, /mob/living))
|
||||
var/mob/living/L = AM
|
||||
L.Weaken(5)
|
||||
L.adjustBruteLoss(30)
|
||||
|
||||
/turf/open/chasm/straight_down/New()
|
||||
@@ -625,7 +627,20 @@
|
||||
|
||||
/turf/open/chasm/straight_down/lava_land_surface/drop(atom/movable/AM)
|
||||
if(!AM.invisibility)
|
||||
visible_message("[AM] falls into [src]!")
|
||||
AM.visible_message("<span class='boldwarning'>[AM] falls into [src]!</span>", "<span class='userdanger'>You stumble and stare into an abyss before you. It stares back, and you fall \
|
||||
into the enveloping dark.</span>")
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
L.notransform = TRUE
|
||||
L.Stun(10)
|
||||
L.resting = TRUE
|
||||
animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10)
|
||||
for(var/i in 1 to 5)
|
||||
AM.pixel_y--
|
||||
sleep(2)
|
||||
if(isrobot(AM))
|
||||
var/mob/living/silicon/robot/S = AM
|
||||
qdel(S.mmi)
|
||||
qdel(AM)
|
||||
|
||||
/turf/closed/mineral/volcanic/lava_land_surface
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
loot = list(/obj/machinery/smartfridge/black_box)
|
||||
butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30)
|
||||
|
||||
deathmessage = "disintegrates, leaving a glowing core."
|
||||
deathmessage = "disintegrates, leaving a glowing core in its wake."
|
||||
death_sound = 'sound/magic/demon_dies.ogg'
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1)
|
||||
var/anger_modifier = 0
|
||||
@@ -114,7 +114,7 @@
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/double_spiral()
|
||||
visible_message("<span class='cult'><font size=5>\"<b>Die</b>\"</font></span>")
|
||||
visible_message("<span class='cult'><font size=5>\"<b>Die.</b>\"</font></span>")
|
||||
|
||||
sleep(10)
|
||||
spawn()
|
||||
@@ -220,55 +220,6 @@
|
||||
playsound(get_turf(src),'sound/magic/clockwork/narsie_attack.ogg', 200, 1)
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/seeking_laser()
|
||||
visible_message("<span class='cult'><font size=5>\"<b>You can't run.</b>\"</font></span>")
|
||||
var/obj/effect/overlay/temp/seeking_beam/B = new(get_turf(src))
|
||||
B.target = target
|
||||
B.firer = src
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam
|
||||
name = "disintegration ball"
|
||||
desc = "Get out of the way!"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "shield-cult"
|
||||
density = 1
|
||||
luminosity = 1
|
||||
var/target
|
||||
var/firer
|
||||
duration = 100
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/New()
|
||||
..()
|
||||
spawn()
|
||||
while(loc)
|
||||
step_towards(src, target)
|
||||
sleep(1)
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/process()
|
||||
step_towards(src, target)
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/Crossed(AM as mob|obj)
|
||||
..()
|
||||
collision(AM)
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/Bumped(AM as mob|obj)
|
||||
..()
|
||||
collision(AM)
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/Bump(AM as mob|obj)
|
||||
..()
|
||||
collision(AM)
|
||||
|
||||
/obj/effect/overlay/temp/seeking_beam/proc/collision(AM as mob|obj)
|
||||
if(AM == firer)
|
||||
return
|
||||
if(isliving(AM))
|
||||
var/mob/living/M = AM
|
||||
visible_message("<span class='danger'>[M] is disintegrated by the disintegration ball!</span>")
|
||||
M.dust()
|
||||
else if(istype(AM, /obj/item))
|
||||
var/obj/item/I = AM
|
||||
I.burn()
|
||||
|
||||
/obj/item/projectile/colossus
|
||||
name ="death bolt"
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
A.faction = faction
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
else
|
||||
visible_message("<span class='danger'>[src] charges!</span>")
|
||||
visible_message("<span class='warning'><b>[src] charges!</b></span>")
|
||||
SpinAnimation(speed = 20, loops = 5)
|
||||
ranged = 0
|
||||
retreat_distance = 0
|
||||
@@ -81,7 +81,7 @@
|
||||
|
||||
L.target = target
|
||||
|
||||
visible_message("<span class='danger'>[src] splits!</span>")
|
||||
visible_message("<span class='boldannounce'>[src] splits in twain!</span>")
|
||||
else
|
||||
var/last_legion = TRUE
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in mob_list)
|
||||
@@ -148,4 +148,4 @@
|
||||
storm_cooldown = world.time + 600
|
||||
|
||||
else
|
||||
user << "You can't seem to control the weather here."
|
||||
user << "You can't seem to control the weather here."
|
||||
|
||||
@@ -711,7 +711,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher
|
||||
name = "watcher"
|
||||
desc = "Its stare causes victims to freeze from the inside."
|
||||
desc = "A levitating, eye-like creature held aloft by winglike formations of sinew. A sharp spine of crystal protrudes from its body."
|
||||
icon = 'icons/mob/lavaland/watcher.dmi'
|
||||
icon_state = "watcher"
|
||||
icon_living = "watcher"
|
||||
@@ -721,7 +721,7 @@
|
||||
throw_message = "bounces harmlessly off of"
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
attacktext = "stares into the soul of"
|
||||
attacktext = "impales"
|
||||
a_intent = "harm"
|
||||
speak_emote = list("telepathically cries")
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
@@ -734,7 +734,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/goliath/beast
|
||||
name = "goliath"
|
||||
desc = "A massive beast that uses long tentacles to ensare its prey, threatening them is not advised under any conditions."
|
||||
desc = "A hulking, armor-plated beast with long tendrils arching from its back."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "goliath"
|
||||
icon_living = "goliath"
|
||||
@@ -774,7 +774,7 @@
|
||||
var/mob/living/carbon/human/stored_mob
|
||||
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/death(gibbed)
|
||||
visible_message("<span class='warning'>[src] wails as in anger as they are driven from their form!</span>")
|
||||
visible_message("<span class='warning'>The skulls on [src] wail in anger as they flee from their dying host!</span>")
|
||||
if(stored_mob)
|
||||
stored_mob.loc = get_turf(src)
|
||||
stored_mob.adjustBruteLoss(1000)
|
||||
@@ -1007,14 +1007,14 @@
|
||||
|
||||
/obj/effect/collapse/New()
|
||||
..()
|
||||
visible_message("<B><span class='danger'>The tendril writhes in pain and anger and the earth around it begins to split! Get back!</span></B>")
|
||||
visible_message("<span class='danger'>A chest falls clear of the tendril!</span>")
|
||||
visible_message("<span class='boldannounce'>The tendril writhes in fury as the earth around it begins to crack and break apart! Get back!</span>")
|
||||
visible_message("<span class='warning'>Something falls free of the tendril!</span>")
|
||||
playsound(get_turf(src),'sound/effects/tendril_destroyed.ogg', 200, 0, 50, 1, 1)
|
||||
spawn(50)
|
||||
for(var/mob/M in range(7,src))
|
||||
shake_camera(M, 15, 1)
|
||||
playsound(get_turf(src),'sound/effects/explosionfar.ogg', 200, 1)
|
||||
visible_message("<B><span class='danger'>The tendril collapes!</span></B>")
|
||||
visible_message("<span class='boldannounce'>The tendril falls inward, the ground around it widening into a yawning chasm!</span>")
|
||||
for(var/turf/T in range(2,src))
|
||||
if(!T.density)
|
||||
T.ChangeTurf(/turf/open/chasm/straight_down/lava_land_surface)
|
||||
|
||||
@@ -1,40 +1,4 @@
|
||||
/obj/structure/lavaland_door
|
||||
name = "necropolis gate"
|
||||
desc = "An imposing, seemingly impenetrable door."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "door"
|
||||
anchored = 1
|
||||
density = 1
|
||||
bound_width = 96
|
||||
bound_height = 96
|
||||
burn_state = LAVA_PROOF
|
||||
luminosity = 1
|
||||
var/boss = FALSE
|
||||
|
||||
/obj/structure/lavaland_door/attack_hand(mob/user)
|
||||
if(boss)
|
||||
return
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/L in mob_list)
|
||||
return
|
||||
var/safety = alert(user, "Are you sure you want to do this? You and everyone else on lavaland will likely die.", "Knock on the door?", "Proceed", "Abort")
|
||||
if(safety == "Abort" || !in_range(src, user) || !src || boss || user.incapacitated())
|
||||
return
|
||||
boss = TRUE
|
||||
user << "You knock on the door."
|
||||
playsound(user.loc, 'sound/effects/shieldbash.ogg', 50, 1)
|
||||
visible_message("<span class='danger'>Legion emerges from the Necropolis!</span>")
|
||||
message_admins("[key_name_admin(user)] has summoned Legion.")
|
||||
log_game("[key_name(user)] summoned Legion.")
|
||||
new /mob/living/simple_animal/hostile/megafauna/legion(get_step(src.loc, SOUTH))
|
||||
|
||||
/obj/structure/lavaland_door/singularity_pull()
|
||||
return 0
|
||||
|
||||
/obj/structure/lavaland_door/Destroy(force)
|
||||
if(force)
|
||||
. = ..()
|
||||
else
|
||||
return QDEL_HINT_LETMELIVE
|
||||
//If you're looking for spawners like ash walker eggs, check ghost_role_spawners.dm
|
||||
|
||||
/obj/machinery/lavaland_controller
|
||||
name = "weather control machine"
|
||||
@@ -48,7 +12,11 @@
|
||||
if(ongoing_weather || weather_cooldown > world.time)
|
||||
return
|
||||
weather_cooldown = world.time + rand(3500, 6500)
|
||||
var/datum/weather/ash_storm/LAVA = new /datum/weather/ash_storm
|
||||
var/datum/weather/ash_storm/LAVA
|
||||
if(prob(10)) //10% chance for the ash storm to miss the area entirely
|
||||
LAVA = new /datum/weather/ash_storm/false_alarm
|
||||
else
|
||||
LAVA = new /datum/weather/ash_storm
|
||||
ongoing_weather = LAVA
|
||||
LAVA.weather_start_up()
|
||||
ongoing_weather = null
|
||||
@@ -75,364 +43,3 @@
|
||||
/obj/item/seeds/berry/glow = 10,
|
||||
/obj/item/seeds/sunflower/moonflower = 8
|
||||
)
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault
|
||||
name = "vault creature sleeper"
|
||||
mob_name = "Vault Creature"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
mob_species = /datum/species/pod
|
||||
flavour_text = {"You are a strange, artificial creature. Your creators were a highly advanced and benevolent race, and launched many seed vaults into the stars, hoping to aid fledgling civilizations. You are to tend to the vault and await the arrival of sentient species. You've been waiting quite a while though..."}
|
||||
|
||||
/obj/effect/mob_spawn/human/seed_vault/special(mob/living/new_spawn)
|
||||
var/plant_name = pick("Tomato", "Potato", "Brocolli", "Carrot", "Deathcap", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Bannana", "Moss", "Flower", "Bloom", "Spore", "Root", "Bark", "Glowshroom", "Petal", "Leaf", "Venus", "Sprout","Cocao", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper")
|
||||
new_spawn.real_name = plant_name
|
||||
|
||||
//Greed
|
||||
|
||||
/obj/structure/cursed_slot_machine
|
||||
name = "greed's slot machine"
|
||||
desc = "High stakes, high rewards."
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
icon_state = "slots1"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/win_prob = 5
|
||||
|
||||
/obj/structure/cursed_slot_machine/attack_hand(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(in_use)
|
||||
return
|
||||
in_use = TRUE
|
||||
user << "<span class='danger'><B>You feel your very life draining away as you pull the lever...it'll be worth it though, right?</B></span>"
|
||||
user.adjustCloneLoss(20)
|
||||
if(user.stat)
|
||||
user.gib()
|
||||
icon_state = "slots2"
|
||||
sleep(50)
|
||||
icon_state = "slots1"
|
||||
in_use = FALSE
|
||||
if(prob(win_prob))
|
||||
new /obj/item/weapon/dice/d20/fate/one_use(get_turf(src))
|
||||
if(user)
|
||||
user << "You hear laughter echoing around you as the machine fades away. In it's place...more gambling."
|
||||
qdel(src)
|
||||
else
|
||||
if(user)
|
||||
user << "<span class='danger'>Looks like you didn't win anything this time...next time though, right?</span>"
|
||||
//Gluttony
|
||||
|
||||
/obj/effect/gluttony
|
||||
name = "gluttony's wall"
|
||||
desc = "Only those who truly indulge may pass."
|
||||
anchored = 1
|
||||
density = 1
|
||||
icon_state = "blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
|
||||
/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = mover
|
||||
if(H.nutrition >= NUTRITION_LEVEL_FAT)
|
||||
return 1
|
||||
else
|
||||
H << "<span class='danger'><B>You're not gluttonous enough to pass this barrier!</B></span>"
|
||||
else
|
||||
return 0
|
||||
|
||||
//Pride
|
||||
|
||||
/obj/structure/mirror/magic/pride
|
||||
name = "pride's mirror"
|
||||
desc = "Pride cometh before the..."
|
||||
icon_state = "magic_mirror"
|
||||
|
||||
/obj/structure/mirror/magic/pride/curse(mob/user)
|
||||
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as their hand leaves the mirror!</B></span>")
|
||||
var/turf/T = get_turf(user)
|
||||
T.ChangeTurf(/turf/open/chasm/straight_down)
|
||||
var/turf/open/chasm/straight_down/C = T
|
||||
C.drop(user)
|
||||
|
||||
//Sloth - I'll finish this item later
|
||||
|
||||
//Envy
|
||||
|
||||
/obj/item/weapon/knife/envy
|
||||
name = "envy's knife"
|
||||
desc = "Their success will be yours."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "render"
|
||||
item_state = "render"
|
||||
force = 18
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/weapon/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity)
|
||||
..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(!istype(user))
|
||||
return
|
||||
if(istype(AM, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user << "You assume the face of [H]. Are you satisfied?"
|
||||
|
||||
///Ash Walkers
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker
|
||||
name = "ash walker nest"
|
||||
desc = "A nest built around a necropolis tendril. The eggs seem to grow unnaturally fast..."
|
||||
icon = 'icons/mob/nest.dmi'
|
||||
icon_state = "ash_walker_nest"
|
||||
icon_living = "ash_walker_nest"
|
||||
faction = list("ashwalker")
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
loot = list(/obj/effect/gibspawner, /obj/item/device/assembly/signaler/anomaly)
|
||||
del_on_death = 1
|
||||
var/meat_counter
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/Life()
|
||||
..()
|
||||
if(!stat)
|
||||
consume()
|
||||
spawn_mob()
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/proc/consume()
|
||||
for(var/mob/living/H in view(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat)
|
||||
visible_message("<span class='warning'>Tendrils reach out from \the [src.name] pulling [H] in! Blood seeps over the eggs as [H] is devoured.</span>")
|
||||
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
|
||||
if(istype(H,/mob/living/simple_animal/hostile/megafauna/dragon))
|
||||
meat_counter += 20
|
||||
else
|
||||
meat_counter ++
|
||||
for(var/obj/item/W in H)
|
||||
H.unEquip(W)
|
||||
H.gib()
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/spawn_mob()
|
||||
if(meat_counter >= 2)
|
||||
new /obj/effect/mob_spawn/human/ash_walker(get_step(src.loc, SOUTH))
|
||||
visible_message("<span class='danger'>An egg is ready to hatch!</span>")
|
||||
meat_counter -= 2
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker
|
||||
name = "ash walker egg"
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "large_egg"
|
||||
mob_species = /datum/species/lizard/ashwalker
|
||||
helmet = /obj/item/clothing/head/helmet/gladiator
|
||||
uniform = /obj/item/clothing/under/gladiator
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
anchored = 0
|
||||
density = 0
|
||||
flavour_text = {"<B>You are an Ash Walker. Your tribe worships <span class='danger'>the necropolis</span>. The wastes are sacred ground, its monsters a blessed bounty. You have seen lights in the distance though, the arrival of outsiders seeking to destroy the land. Fresh sacrifices.</B>"}
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = random_unique_lizard_name(gender)
|
||||
new_spawn << "Drag corpses to your nest to feed the young, and spawn more Ash Walkers. Bring glory to the tribe!"
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.underwear = "Nude"
|
||||
H.update_body()
|
||||
|
||||
/obj/effect/mob_spawn/human/ash_walker/New()
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
|
||||
//Wishgranter Exile
|
||||
|
||||
/obj/effect/mob_spawn/human/exile
|
||||
name = "exile sleeper"
|
||||
mob_name = "Penitent Exile"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
mob_species = /datum/species/shadow
|
||||
flavour_text = {"You are cursed! Many years ago you risked it all to reach the Wish Granter, siezing it's power for yourself and leaving your friends for dead.. Though your wish came true, it did so at a price, and you've been doomed to wander these wastes ever since. You seek only to atone now, to somehow redeem yourself, and finally be released. You've seen ships landing in the distance. Perhaps now is the time to make things right?"}
|
||||
|
||||
/obj/effect/mob_spawn/human/exile/special(mob/living/new_spawn)
|
||||
new_spawn.real_name = "[new_spawn.real_name] ([rand(0,999)])"
|
||||
var/wish = rand(1,4)
|
||||
switch(wish)
|
||||
if(1)
|
||||
new_spawn << "You wished to kill, and kill you did. You've lost track of the number and murder long lost it's spark of excitement. You feel only regret."
|
||||
if(2)
|
||||
new_spawn << "You wished for unending wealth, but no amount of money was worth this existence. Maybe charity might redeem your soul?"
|
||||
if(3)
|
||||
new_spawn << "You wished for power. Little good it did you, cast out of the light. You are a king, but ruling over a miserable wasteland. You feel only remorse."
|
||||
if(4)
|
||||
new_spawn << "You wished for immortality, even as your friends lay dying behind you. No matter how many times you cast yourself into the lava, you awaken in this room again within a few days. You are overwhelmed with guilt."
|
||||
|
||||
//Free Golems
|
||||
|
||||
/obj/item/weapon/disk/design_disk/golem_shell
|
||||
name = "Golem Creation Disk"
|
||||
desc = "A gift from the Liberator."
|
||||
icon_state = "datadisk1"
|
||||
|
||||
/obj/item/weapon/disk/design_disk/golem_shell/New()
|
||||
..()
|
||||
var/datum/design/golem_shell/G = new
|
||||
blueprint = G
|
||||
|
||||
/datum/design/golem_shell
|
||||
name = "Golem Shell Construction"
|
||||
desc = "Allows for the construction of a Golem Shell."
|
||||
id = "golem"
|
||||
req_tech = list("materials" = 12)
|
||||
build_type = AUTOLATHE
|
||||
materials = list(MAT_METAL = 40000)
|
||||
build_path = /obj/item/golem_shell
|
||||
category = list("Imported")
|
||||
|
||||
/obj/item/golem_shell
|
||||
name = "incomplete golem shell"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "construct"
|
||||
desc = "The incomplete body of a golem. Add ten sheets of any mineral to finish."
|
||||
|
||||
/obj/item/golem_shell/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
var/species
|
||||
if(istype(I, /obj/item/stack/sheet))
|
||||
var/obj/item/stack/sheet/O = I
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/metal))
|
||||
species = /datum/species/golem
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/mineral/plasma))
|
||||
species = /datum/species/golem/plasma
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/mineral/diamond))
|
||||
species = /datum/species/golem/diamond
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/mineral/gold))
|
||||
species = /datum/species/golem/gold
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/mineral/silver))
|
||||
species = /datum/species/golem/silver
|
||||
|
||||
if(istype(O, /obj/item/stack/sheet/mineral/uranium))
|
||||
species = /datum/species/golem/uranium
|
||||
|
||||
if(species)
|
||||
if(O.use(10))
|
||||
user << "You finish up the golem shell with ten sheets of [O]."
|
||||
var/obj/effect/mob_spawn/human/golem/G = new(get_turf(src))
|
||||
G.mob_species = species
|
||||
qdel(src)
|
||||
else
|
||||
user << "You need at least ten sheets to finish a golem."
|
||||
else
|
||||
user << "You can't build a golem out of this kind of material."
|
||||
|
||||
/obj/effect/mob_spawn/human/golem
|
||||
name = "completed golem shell"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "construct"
|
||||
mob_species = /datum/species/golem
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
anchored = 0
|
||||
density = 0
|
||||
flavour_text = {"<B>You are a Free Golem. Your family worships <span class='danger'>The Liberator</span>. In his infinite and divine wisdom, he set your clan free to travel the stars with a single declaration; 'Yeah go do whatever.' Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn golems, so that no golem may ever be forced to serve again.</B>"}
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/New()
|
||||
..()
|
||||
var/area/A = get_area(src)
|
||||
if(A)
|
||||
notify_ghosts("A golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK)
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn)
|
||||
var/golem_surname = pick(golem_names)
|
||||
// 3% chance that our golem has a human surname, because
|
||||
// cultural contamination
|
||||
if(prob(3))
|
||||
golem_surname = pick(last_names)
|
||||
|
||||
var/datum/species/X = mob_species
|
||||
var/golem_forename = initial(X.id)
|
||||
|
||||
// The id of golem species is either their material "diamond","gold",
|
||||
// or just "golem" for the plain ones. So we're using it for naming.
|
||||
|
||||
if(golem_forename == "golem")
|
||||
golem_forename = "iron"
|
||||
|
||||
new_spawn.real_name = "[capitalize(golem_forename)] [golem_surname]"
|
||||
// This means golems have names like Iron Forge, or Diamond Quarry
|
||||
// also a tiny chance of being called "Plasma Meme"
|
||||
// which is clearly a feature
|
||||
|
||||
new_spawn << "Build golem shells in the autolathe, and feed refined mineral sheets to the shells to bring them to life! You are generally a peaceful group unless provoked."
|
||||
if(ishuman(new_spawn))
|
||||
var/mob/living/carbon/human/H = new_spawn
|
||||
H.set_cloned_appearance()
|
||||
|
||||
|
||||
/obj/effect/mob_spawn/human/golem/adamantine
|
||||
name = "golem sleeper"
|
||||
mob_name = "Free Golem"
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
anchored = 1
|
||||
density = 1
|
||||
mob_species = /datum/species/golem/adamantine
|
||||
|
||||
|
||||
//Hermit
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit
|
||||
name = "hermit sleeper"
|
||||
mob_name = "Hermit"
|
||||
icon = 'icons/obj/lavaland/survival_pod.dmi'
|
||||
icon_state = "sleeper"
|
||||
roundstart = FALSE
|
||||
death = FALSE
|
||||
random = TRUE
|
||||
mob_species = /datum/species/human
|
||||
flavour_text = {"Doomed to walk this eternal hellscape due to means you barely remember at this point, every day is a struggle for survival as you barely scrape by in your makeshift housing."}
|
||||
|
||||
/obj/effect/mob_spawn/human/hermit/New()
|
||||
var/arrpee = rand(1,4)
|
||||
switch(arrpee)
|
||||
if(1)
|
||||
flavour_text = {"You were the sole survivor of a raid-party's onslaught on a small orbital tradestation. You were forced to early-eject your pod to escape, the horrifed faces of the remaining crew when the raiders blew apart the room's airlock forever ingrained in your mind."}
|
||||
uniform = /obj/item/clothing/under/assistantformal
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
if(2)
|
||||
flavour_text = {"A castaway from a far-off civilization, banished for crimes of heresy against the church. You awoke from hypersleep your pod crashlanding into this hellscape, only the essentials left to make a new life for yourself."}
|
||||
uniform = /obj/item/clothing/under/rank/prisoner
|
||||
shoes = /obj/item/clothing/shoes/sneakers/orange
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
if(3)
|
||||
flavour_text = {"A runaway from the tyranny of Nanotrasen and everything all these damnned corporations stand for. From a metaphorical hell to a literal one, you do your best to put your station-life behind you to try and survive in this harsh land."}
|
||||
uniform = /obj/item/clothing/under/rank/medical
|
||||
suit = /obj/item/clothing/suit/toggle/labcoat
|
||||
back = /obj/item/weapon/storage/backpack/medic
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
if(4)
|
||||
flavour_text = {"You weren't exactly the sharpest tool in the shed, hitting that big red button on the escape pod wondering what it'd do. Whether this 'special' attribute of yours is a defect of cloning or just genuine stupidity, the fact you've survived this long in a literal hellhole is enough to make Darwin roll in his grave."}
|
||||
uniform = /obj/item/clothing/under/color/grey/glorf
|
||||
shoes = /obj/item/clothing/shoes/sneakers/black
|
||||
back = /obj/item/weapon/storage/backpack
|
||||
39
code/modules/ruins/objects_and_mobs/ash_walker_den.dm
Normal file
39
code/modules/ruins/objects_and_mobs/ash_walker_den.dm
Normal file
@@ -0,0 +1,39 @@
|
||||
#define ASH_WALKER_SPAWN_THRESHOLD 2
|
||||
//The ash walker den consumes corpses or unconscious mobs to create ash walker eggs. For more info on those, check ghost_role_spawners.dm
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker
|
||||
name = "ash walker nest"
|
||||
desc = "A nest built around a necropolis tendril. The eggs seem to grow unnaturally fast..."
|
||||
icon = 'icons/mob/nest.dmi'
|
||||
icon_state = "ash_walker_nest"
|
||||
icon_living = "ash_walker_nest"
|
||||
faction = list("ashwalker")
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
loot = list(/obj/effect/gibspawner, /obj/item/device/assembly/signaler/anomaly)
|
||||
del_on_death = 1
|
||||
var/meat_counter
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/Life()
|
||||
..()
|
||||
if(!stat)
|
||||
consume()
|
||||
spawn_mob()
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/proc/consume()
|
||||
for(var/mob/living/H in view(src,1)) //Only for corpse right next to/on same tile
|
||||
if(H.stat)
|
||||
visible_message("<span class='warning'>Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.</span>")
|
||||
playsound(get_turf(src),'sound/magic/Demon_consume.ogg', 100, 1)
|
||||
if(istype(H,/mob/living/simple_animal/hostile/megafauna/dragon))
|
||||
meat_counter += 20
|
||||
else
|
||||
meat_counter ++
|
||||
for(var/obj/item/W in H)
|
||||
H.unEquip(W)
|
||||
H.gib()
|
||||
|
||||
/mob/living/simple_animal/hostile/spawner/ash_walker/spawn_mob()
|
||||
if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD)
|
||||
new /obj/effect/mob_spawn/human/ash_walker(get_step(src.loc, SOUTH))
|
||||
visible_message("<span class='danger'>One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!</span>")
|
||||
meat_counter -= ASH_WALKER_SPAWN_THRESHOLD
|
||||
63
code/modules/ruins/objects_and_mobs/necropolis_gate.dm
Normal file
63
code/modules/ruins/objects_and_mobs/necropolis_gate.dm
Normal file
@@ -0,0 +1,63 @@
|
||||
//The necropolis gate is used to call forth Legion from the Necropolis.
|
||||
/obj/structure/lavaland_door
|
||||
name = "necropolis gate"
|
||||
desc = "A tremendous and impossibly large gateway, bored into dense bedrock."
|
||||
icon = 'icons/effects/96x96.dmi'
|
||||
icon_state = "door"
|
||||
anchored = 1
|
||||
density = 1
|
||||
opacity = 1
|
||||
bound_width = 96
|
||||
bound_height = 96
|
||||
pixel_x = -32
|
||||
bound_x = -32
|
||||
burn_state = LAVA_PROOF
|
||||
luminosity = 1
|
||||
var/boss = FALSE
|
||||
var/is_anyone_home = FALSE
|
||||
|
||||
/obj/structure/lavaland_door/attack_hand(mob/user)
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/L in mob_list)
|
||||
return
|
||||
if(is_anyone_home)
|
||||
return
|
||||
var/safety = alert(user, "You think this might be a bad idea...", "Knock on the door?", "Proceed", "Abort")
|
||||
if(safety == "Abort" || !in_range(src, user) || !src || is_anyone_home || user.incapacitated())
|
||||
return
|
||||
user.visible_message("<span class='warning'>[user] knocks on [src]...</span>", "<span class='boldannounce'>You tentatively knock on [src]...</span>")
|
||||
playsound(user.loc, 'sound/effects/shieldbash.ogg', 100, 1)
|
||||
is_anyone_home = TRUE
|
||||
sleep(50)
|
||||
if(boss)
|
||||
user << "<span class='notice'>There's no response.</span>"
|
||||
is_anyone_home = FALSE
|
||||
return 0
|
||||
boss = TRUE
|
||||
visible_message("<span class='warning'>Locks along the door begin clicking open from within...</span>")
|
||||
var/volume = 60
|
||||
for(var/i in 1 to 3)
|
||||
playsound(src, 'sound/items/Deconstruct.ogg', volume, 0)
|
||||
volume += 20
|
||||
sleep(10)
|
||||
sleep(10)
|
||||
visible_message("<span class='userdanger'>Something horrible emerges from the Necropolis!</span>")
|
||||
message_admins("[key_name_admin(user)] has summoned Legion!")
|
||||
log_game("[key_name(user)] summoned Legion.")
|
||||
for(var/mob/M in player_list)
|
||||
if(M.z == z)
|
||||
M << "<span class='userdanger'>Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has come.</span>"
|
||||
M << 'sound/creatures/legion_spawn.ogg'
|
||||
if(M.client)
|
||||
flash_color(M, color = "#FF0000", time = 50)
|
||||
notify_ghosts("Legion has been summoned in the [get_area(src)]!", source = src, action = NOTIFY_ORBIT)
|
||||
is_anyone_home = FALSE
|
||||
new/mob/living/simple_animal/hostile/megafauna/legion(get_step(src.loc, SOUTH))
|
||||
|
||||
/obj/structure/lavaland_door/singularity_pull()
|
||||
return 0
|
||||
|
||||
/obj/structure/lavaland_door/Destroy(force)
|
||||
if(force)
|
||||
. = ..()
|
||||
else
|
||||
return QDEL_HINT_LETMELIVE
|
||||
126
code/modules/ruins/objects_and_mobs/sin_ruins.dm
Normal file
126
code/modules/ruins/objects_and_mobs/sin_ruins.dm
Normal file
@@ -0,0 +1,126 @@
|
||||
//These objects are used in the cardinal sin-themed ruins (i.e. Gluttony, Pride...)
|
||||
|
||||
/obj/structure/cursed_slot_machine //Greed's slot machine: Used in the Greed ruin. Deals clone damage on each use, with a successful use giving a d20 of fate.
|
||||
name = "greed's slot machine"
|
||||
desc = "High stakes, high rewards."
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
icon_state = "slots1"
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/win_prob = 5
|
||||
|
||||
/obj/structure/cursed_slot_machine/attack_hand(mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(in_use)
|
||||
return
|
||||
in_use = TRUE
|
||||
user.adjustCloneLoss(20)
|
||||
if(user.stat)
|
||||
user << "<span class='userdanger'>No... just one more try...</span>"
|
||||
user.gib()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user], pulls [src]'s lever with a glint in their eyes!</span>", "<span class='warning'>You feel a draining as you pull the lever, but you \
|
||||
know it'll be worth it.</span>")
|
||||
icon_state = "slots2"
|
||||
playsound(src, 'sound/lavaland/cursed_slot_machine.ogg', 50, 0)
|
||||
sleep(50)
|
||||
icon_state = "slots1"
|
||||
in_use = FALSE
|
||||
if(prob(win_prob))
|
||||
playsound(src, 'sound/lavaland/cursed_slot_machine_jackpot.ogg', 50, 0)
|
||||
new/obj/structure/cursed_money(get_turf(src))
|
||||
if(user)
|
||||
user << "<span class='boldwarning'>You've hit jackpot. Laughter echoes around you as your reward appears in the machine's place.</span>"
|
||||
qdel(src)
|
||||
else
|
||||
if(user)
|
||||
user << "<span class='boldwarning'>Fucking machine! Must be rigged. Still... one more try couldn't hurt, right?</span>"
|
||||
|
||||
/obj/structure/cursed_money
|
||||
name = "bag of money"
|
||||
desc = "RICH! YES! YOU KNEW IT WAS WORTH IT! YOU'RE RICH! RICH! RICH!"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "moneybag"
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/cursed_money/New()
|
||||
spawn(600)
|
||||
if(src)
|
||||
visible_message("<span class='warning'>[src] falls in on itself, canvas rotting away and contents vanishing.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/cursed_money/attack_hand(mob/living/user)
|
||||
user.visible_message("<span class='boldwarning'>You open the bag...!</span>\n<span class='danger'>And see a bag full of dice. Confused, you take one... and the bag vanishes.</span>")
|
||||
var/obj/item/weapon/dice/d20/fate/one_use/critical_fail = new(get_turf(user))
|
||||
user.put_in_hands(critical_fail)
|
||||
qdel(src)
|
||||
|
||||
|
||||
|
||||
/obj/effect/gluttony //Gluttony's wall: Used in the Gluttony ruin. Only lets the overweight through.
|
||||
name = "gluttony's wall"
|
||||
desc = "Only those who truly indulge may pass."
|
||||
anchored = 1
|
||||
density = 1
|
||||
icon_state = "blob"
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
color = rgb(145, 150, 0)
|
||||
|
||||
/obj/effect/gluttony/CanPass(atom/movable/mover, turf/target, height=0)//So bullets will fly over and stuff.
|
||||
if(height==0)
|
||||
return 1
|
||||
if(istype(mover, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = mover
|
||||
if(H.nutrition >= NUTRITION_LEVEL_FAT)
|
||||
H.visible_message("<span class='warning'>[H] pushes through [src]!</span>", "<span class='notice'>You've seen and eaten worse than this.</span>")
|
||||
return 1
|
||||
else
|
||||
H << "<span class='warning'>You're repulsed by even looking at [src]. Only a pig could force themselves to go through it.</span>"
|
||||
else
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/obj/structure/mirror/magic/pride //Pride's mirror: Used in the Pride ruin.
|
||||
name = "pride's mirror"
|
||||
desc = "Pride cometh before the..."
|
||||
icon_state = "magic_mirror"
|
||||
|
||||
/obj/structure/mirror/magic/pride/curse(mob/user)
|
||||
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as their hand leaves the mirror!</B></span>", \
|
||||
"<span class='notice'>Perfect. Much better! Now <i>nobody</i> will be able to resist yo-</span>")
|
||||
var/turf/T = get_turf(user)
|
||||
T.ChangeTurf(/turf/open/chasm/straight_down)
|
||||
var/turf/open/chasm/straight_down/C = T
|
||||
C.drop(user)
|
||||
|
||||
//can't be bothered to do sloth right now, will make later
|
||||
|
||||
/obj/item/weapon/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike.
|
||||
name = "envy's knife"
|
||||
desc = "Their success will be yours."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "render"
|
||||
item_state = "render"
|
||||
force = 18
|
||||
throwforce = 10
|
||||
w_class = 3
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
/obj/item/weapon/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity)
|
||||
..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(!istype(user))
|
||||
return
|
||||
if(istype(AM, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(user.real_name != H.dna.real_name)
|
||||
user.real_name = H.dna.real_name
|
||||
H.dna.transfer_identity(user, transfer_SE=1)
|
||||
user.updateappearance(mutcolor_update=1)
|
||||
user.domutcheck()
|
||||
user.visible_message("<span class='warning'>[user]'s appearance shifts into [H]'s!</span>", \
|
||||
"<span class='boldannounce'>They think they're <i>sooo</i> much better than you. Not anymore, they won't.</span>")
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 449 KiB After Width: | Height: | Size: 462 KiB |
BIN
icons/obj/lavaland/spawners.dmi
Normal file
BIN
icons/obj/lavaland/spawners.dmi
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
@@ -53,6 +53,7 @@ h1.alert, h2.alert {color: #000000;}
|
||||
.userdanger {color: #ff0000; font-weight: bold; font-size: 3;}
|
||||
.danger {color: #ff0000;}
|
||||
.warning {color: #ff0000; font-style: italic;}
|
||||
.boldwarning {color: #ff0000; font-style: italic; font-weight: bold}
|
||||
.announce {color: #228b22; font-weight: bold;}
|
||||
.boldannounce {color: #ff0000; font-weight: bold;}
|
||||
.greenannounce {color: #00ff00; font-weight: bold;}
|
||||
|
||||
BIN
sound/creatures/legion_spawn.ogg
Normal file
BIN
sound/creatures/legion_spawn.ogg
Normal file
Binary file not shown.
BIN
sound/lavaland/ash_storm_end.ogg
Normal file
BIN
sound/lavaland/ash_storm_end.ogg
Normal file
Binary file not shown.
BIN
sound/lavaland/ash_storm_start.ogg
Normal file
BIN
sound/lavaland/ash_storm_start.ogg
Normal file
Binary file not shown.
BIN
sound/lavaland/ash_storm_windup.ogg
Normal file
BIN
sound/lavaland/ash_storm_windup.ogg
Normal file
Binary file not shown.
BIN
sound/lavaland/cursed_slot_machine.ogg
Normal file
BIN
sound/lavaland/cursed_slot_machine.ogg
Normal file
Binary file not shown.
BIN
sound/lavaland/cursed_slot_machine_jackpot.ogg
Normal file
BIN
sound/lavaland/cursed_slot_machine_jackpot.ogg
Normal file
Binary file not shown.
@@ -734,6 +734,8 @@
|
||||
#include "code\game\objects\structures\false_walls.dm"
|
||||
#include "code\game\objects\structures\fireaxe.dm"
|
||||
#include "code\game\objects\structures\flora.dm"
|
||||
#include "code\game\objects\structures\fluff.dm"
|
||||
#include "code\game\objects\structures\ghost_role_spawners.dm"
|
||||
#include "code\game\objects\structures\girders.dm"
|
||||
#include "code\game\objects\structures\grille.dm"
|
||||
#include "code\game\objects\structures\guncase.dm"
|
||||
@@ -1683,6 +1685,9 @@
|
||||
#include "code\modules\research\xenobiology\xenobiology.dm"
|
||||
#include "code\modules\ruins\lavaland_ruin_code.dm"
|
||||
#include "code\modules\ruins\ruin_areas.dm"
|
||||
#include "code\modules\ruins\objects_and_mobs\ash_walker_den.dm"
|
||||
#include "code\modules\ruins\objects_and_mobs\necropolis_gate.dm"
|
||||
#include "code\modules\ruins\objects_and_mobs\sin_ruins.dm"
|
||||
#include "code\modules\security_levels\keycard_authentication.dm"
|
||||
#include "code\modules\security_levels\security_levels.dm"
|
||||
#include "code\modules\shuttle\assault_pod.dm"
|
||||
|
||||
Reference in New Issue
Block a user