initial commit - cross reference with 5th port - obviously has compile errors
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
//If you're looking for spawners like ash walker eggs, check ghost_role_spawners.dm
|
||||
|
||||
/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
|
||||
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
|
||||
|
||||
/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
|
||||
)
|
||||
|
||||
//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."
|
||||
@@ -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
|
||||
@@ -0,0 +1,61 @@
|
||||
//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
|
||||
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'
|
||||
flash_color(M, flash_color = "#FF0000", flash_time = 50)
|
||||
var/image/door_overlay = image('icons/effects/effects.dmi', "legiondoor")
|
||||
notify_ghosts("Legion has been summoned in the [get_area(src)]!", source = src, alert_overlay = door_overlay, action = NOTIFY_JUMP)
|
||||
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
|
||||
@@ -0,0 +1,134 @@
|
||||
//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()
|
||||
. = ..()
|
||||
addtimer(src, "collapse", 600)
|
||||
|
||||
/obj/structure/cursed_money/proc/collapse()
|
||||
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='warning'>[user] opens the bag and \
|
||||
and removes a die. The bag then vanishes.</span>",
|
||||
"<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/turf/T = get_turf(user)
|
||||
var/obj/item/weapon/dice/d20/fate/one_use/critical_fail = new(T)
|
||||
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/kitchen/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/kitchen/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>")
|
||||
@@ -0,0 +1,54 @@
|
||||
//Parent types
|
||||
|
||||
/area/ruin/
|
||||
name = "\improper Unexplored Location"
|
||||
icon_state = "away"
|
||||
has_gravity = 1
|
||||
|
||||
|
||||
/area/ruin/unpowered
|
||||
always_unpowered = 0
|
||||
|
||||
/area/ruin/unpowered/no_grav
|
||||
has_gravity = 0
|
||||
|
||||
/area/ruin/powered
|
||||
requires_power = 0
|
||||
|
||||
|
||||
|
||||
|
||||
//Areas
|
||||
|
||||
/area/ruin/unpowered/no_grav/way_home
|
||||
name = "\improper Salvation"
|
||||
icon_state = "away"
|
||||
|
||||
/area/ruin/powered/snow_biodome
|
||||
|
||||
/area/ruin/powered/golem_ship
|
||||
name = "Free Golem Ship"
|
||||
|
||||
// Ruins of "onehalf" ship
|
||||
/area/ruin/onehalf/hallway
|
||||
name = "Hallway"
|
||||
icon_state = "hallC"
|
||||
|
||||
|
||||
/area/ruin/onehalf/drone_bay
|
||||
name = "Mining Drone Bay"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/ruin/onehalf/dorms_med
|
||||
name = "Crew Quarters"
|
||||
icon_state = "Sleep"
|
||||
|
||||
/area/ruin/onehalf/bridge
|
||||
name = "Bridge"
|
||||
icon_state = "bridge"
|
||||
|
||||
/area/ruin/powered/dinner_for_two
|
||||
name = "Dinner for Two"
|
||||
|
||||
/area/ruin/powered/authorship
|
||||
name = "Authorship"
|
||||
Reference in New Issue
Block a user