Files
Yogstation/code/modules/ruins/lavaland_ruin_code.dm
2016-06-06 14:56:02 -04:00

438 lines
16 KiB
Plaintext

/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
/obj/machinery/lavaland_controller
name = "weather control machine"
desc = "Controls the weather."
icon = 'icons/obj/machines/telecomms.dmi'
icon_state = "processor"
var/datum/weather/ongoing_weather = FALSE
var/weather_cooldown = 0
/obj/machinery/lavaland_controller/process()
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
ongoing_weather = LAVA
LAVA.weather_start_up()
ongoing_weather = null
/obj/machinery/lavaland_controller/Destroy(force)
if(force)
. = ..()
else
return QDEL_HINT_LETMELIVE
/obj/structure/fans/tiny/invisible //For blocking air in ruin doorways
invisibility = INVISIBILITY_ABSTRACT
//lavaland_surface_seed_vault.dmm
//Seed Vault
/obj/effect/spawner/lootdrop/seed_vault
name = "seed vault seeds"
lootcount = 1
loot = list(/obj/item/seeds/gatfruit = 10,
/obj/item/seeds/cherry = 15,
/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