mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
438 lines
16 KiB
Plaintext
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 |