Further turf updates, add Necropolis/boss turfs

This commit is contained in:
Mark van Alphen
2019-03-30 01:24:03 +01:00
parent 2091a431bb
commit f0dab66ebc
34 changed files with 70574 additions and 382 deletions
File diff suppressed because it is too large Load Diff
+13 -13
View File
@@ -4,7 +4,7 @@
/area/space)
"ab" = (
/turf/simulated/mineral,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"ac" = (
/obj/docking_port/stationary{
dheight = 9;
@@ -19,10 +19,10 @@
/area/space)
"ad" = (
/turf/simulated/floor/plating/asteroid/airless/cave,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"ae" = (
/turf/simulated/mineral/random,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"af" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
@@ -60,7 +60,7 @@
/area/space)
"ak" = (
/turf/simulated/mineral/random/high_chance,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"al" = (
/obj/structure/window/reinforced{
dir = 4
@@ -1287,7 +1287,7 @@
/area/mine/north_outpost)
"dy" = (
/turf/simulated/floor/plating/asteroid/airless,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"dz" = (
/obj/machinery/atmospherics/pipe/manifold4w/hidden,
/turf/simulated/floor/plasteel{
@@ -1595,7 +1595,7 @@
/area/mine/abandoned)
"em" = (
/turf/simulated/mineral/random/labormineral,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"en" = (
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating/airless{
@@ -1795,7 +1795,7 @@
/area/mine/laborcamp)
"eB" = (
/turf/simulated/wall,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"eC" = (
/obj/machinery/atmospherics/unary/vent_pump{
on = 1
@@ -1975,7 +1975,7 @@
/turf/simulated/floor/plating/airless{
icon_state = "asteroidplating"
},
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"eX" = (
/obj/item/shard{
icon_state = "medium"
@@ -2175,21 +2175,21 @@
icon_state = "asteroidwarning";
dir = 10
},
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"ft" = (
/turf/simulated/floor/plasteel/airless{
tag = "icon-asteroidwarning (SOUTHEAST)";
icon_state = "asteroidwarning";
dir = 6
},
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"fu" = (
/turf/simulated/floor/plasteel/airless{
tag = "icon-asteroidwarning";
icon_state = "asteroidwarning";
dir = 2
},
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"fv" = (
/obj/machinery/light/small{
dir = 4
@@ -3133,7 +3133,7 @@
/area/mine/living_quarters)
"hB" = (
/turf/space,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"hC" = (
/obj/structure/lattice,
/turf/space,
@@ -3539,7 +3539,7 @@
"iz" = (
/obj/structure/disposalpipe/segment,
/turf/simulated/mineral/random,
/area/mine/dangerous/unexplored)
/area/mine/unexplored)
"iA" = (
/obj/machinery/light/small{
dir = 4
+4
View File
@@ -52,6 +52,10 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list(
#define ismineralturf(A) istype(A, /turf/simulated/mineral)
#define islava(A) (istype(A, /turf/simulated/floor/plating/lava))
#define ischasm(A) (istype(A, /turf/simulated/floor/chasm))
//Mobs
#define isliving(A) (istype(A, /mob/living))
+2
View File
@@ -141,6 +141,8 @@
#define LIGHT_COLOR_WHITE "#FFFFFF"
#define LIGHT_COLOR_LAVA "#C48A18" //Very warm yellow, leaning slightly towards orange. rgb(196, 138, 24)
#define RESIZE_DEFAULT_SIZE 1
//transfer_ai() defines. Main proc in ai_core.dm
+9
View File
@@ -2012,3 +2012,12 @@ var/mob/dview/dview_mob = new
/proc/pass()
return
/atom/proc/Shake(pixelshiftx = 15, pixelshifty = 15, duration = 250)
var/initialpixelx = pixel_x
var/initialpixely = pixel_y
var/shiftx = rand(-pixelshiftx,pixelshiftx)
var/shifty = rand(-pixelshifty,pixelshifty)
animate(src, pixel_x = pixel_x + shiftx, pixel_y = pixel_y + shifty, time = 0.2, loop = duration)
pixel_x = initialpixelx
pixel_y = initialpixely
+5
View File
@@ -18,6 +18,9 @@
ambientsounds = list('sound/ambience/ambimine.ogg')
flags = NONE
/area/mine/dangerous/explored/golem
name = "Small Asteroid"
/area/mine/unexplored
name = "Mine"
icon_state = "unexplored"
@@ -78,6 +81,8 @@
name = "Labor Camp Security"
icon_state = "security"
/area/mine/podbay
name = "Mining Podbay"
+1 -1
View File
@@ -139,7 +139,7 @@ var/global/max_secret_rooms = 6
possiblethemes -= theme //once a theme is selected, it's out of the running!
var/floor = pick(floortypes)
turfs = get_area_turfs(/area/mine/dangerous/unexplored)
turfs = get_area_turfs(/area/mine/unexplored)
if(!turfs.len)
return 0
+10
View File
@@ -40,6 +40,16 @@
var/mob/MM = AM
if(MM.flying)
return 0
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
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("<span class='boldwarning'>[H] falls into [src]!</span>")
J.chasm_react(H)
return 0
return 1
/turf/simulated/floor/chasm/proc/drop(atom/movable/AM)
+314 -261
View File
@@ -1,296 +1,421 @@
/**********************Mineral deposits**************************/
#define NORTH_EDGING "north"
#define SOUTH_EDGING "south"
#define EAST_EDGING "east"
#define WEST_EDGING "west"
var/global/list/rockTurfEdgeCache = list(
NORTH_EDGING = image('icons/turf/mining.dmi', "rock_side_n", layer = 6),
SOUTH_EDGING = image('icons/turf/mining.dmi', "rock_side_s"),
EAST_EDGING = image('icons/turf/mining.dmi', "rock_side_e", layer = 6),
WEST_EDGING = image('icons/turf/mining.dmi', "rock_side_w", layer = 6))
/turf/simulated/mineral //wall piece
name = "Rock"
name = "rock"
icon = 'icons/turf/mining.dmi'
icon_state = "rock_nochance"
oxygen = 0
nitrogen = 0
icon_state = "rock"
var/smooth_icon = 'icons/turf/smoothrocks.dmi'
smooth = SMOOTH_MORE | SMOOTH_BORDER
canSmoothWith
baseturf = /turf/simulated/floor/plating/asteroid/airless
temperature = 2.7
opacity = 1
density = 1
blocks_air = 1
layer = EDGED_TURF_LAYER
temperature = TCMB
var/environment_type = "asteroid"
var/turf/simulated/floor/plating/turf_type = /turf/simulated/floor/plating/asteroid/airless
var/mineralType = null
var/mineralAmt = 3
var/mineralName = null
var/spread = 0 //will the seam spread?
var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles
var/last_act = 0
var/scan_state = null //Holder for the image we display when we're pinged by a mining scanner
var/hidden = 1
//start xenoarch vars
var/datum/geosample/geologic_data
var/excavation_level = 0
var/list/finds
var/next_rock = 0
var/archaeo_overlay = ""
var/excav_overlay = ""
var/obj/item/last_find
var/datum/artifact_find/artifact_find
//end xenaorch vars
/turf/simulated/mineral/ex_act(severity, target)
..()
switch(severity)
if(3.0)
if(prob(75))
src.gets_drilled(null, 1)
if(2.0)
if(prob(90))
src.gets_drilled(null, 1)
if(1.0)
src.gets_drilled(null, 1)
return
var/defer_change = 0
/turf/simulated/mineral/New()
if (!canSmoothWith)
canSmoothWith = list(/turf/simulated/mineral)
pixel_y = -4
pixel_x = -4
icon = smooth_icon
..()
GLOB.mineral_turfs += src
if(mineralType && mineralAmt && spread && spreadChance)
if (mineralType && mineralAmt && spread && spreadChance)
for(var/dir in cardinal)
if(prob(spreadChance))
var/turf/T = get_step(src, dir)
if(istype(T, /turf/simulated/mineral/random))
Spread(T)
HideRock()
/turf/simulated/mineral/shuttleRotate(rotation)
setDir(angle2dir(rotation + dir2angle(dir)))
queue_smooth(src)
/turf/simulated/mineral/attackby(var/obj/item/pickaxe/P as obj, mob/user as mob, params)
if(!user.IsAdvancedToolUser())
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(istype(P, /obj/item/pickaxe))
var/turf/T = user.loc
if(!isturf(T))
return
if(last_act + (40 * P.toolspeed) > world.time) // Prevents message spam
return
last_act = world.time
to_chat(user, "<span class='notice'>You start picking...</span>")
P.playDigSound()
if(do_after(user, 40 * P.toolspeed, target = src))
if(istype(src, /turf/simulated/mineral)) //sanity check against turf being deleted during digspeed delay
to_chat(user, "<span class='notice'>You finish cutting into the rock.</span>")
P.update_icon()
gets_drilled(user)
feedback_add_details("pick_used_mining","[P.name]")
else
return attack_hand(user)
/turf/simulated/mineral/proc/gets_drilled()
if(mineralType && (mineralAmt > 0) && (mineralAmt < 11))
var/i
for(i=0; i < mineralAmt; i++)
new mineralType(src)
feedback_add_details("ore_mined","[mineralType]|[mineralAmt]")
ChangeTurf(turf_type, defer_change)
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction
if(rand(1, 750) == 1)
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
new /obj/structure/closet/crate/secure/loot(src)
/turf/simulated/mineral/proc/HideRock()
if(hidden)
name = "rock"
icon_state = "rock"
return
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
gets_drilled()
..()
/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M)
to_chat(M, "<span class='notice'>You start digging into the rock...</span>")
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
if(do_after(M, 40, target = src))
to_chat(M, "<span class='notice'>You tunnel into the rock.</span>")
gets_drilled()
/turf/simulated/mineral/Bumped(AM as mob|obj)
. = ..()
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand))
attackby(H.l_hand,H)
else if((istype(H.r_hand,/obj/item/pickaxe)) && H.hand)
attackby(H.r_hand,H)
return
else if(isrobot(AM))
var/mob/living/silicon/robot/R = AM
if(istype(R.module_active,/obj/item/pickaxe))
attackby(R.module_active,R)
else if(ismecha(AM))
var/obj/mecha/M = AM
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
M.selected.action(src)
/turf/simulated/mineral/ex_act(severity, target)
..()
switch(severity)
if(3)
if (prob(75))
gets_drilled(null, 1)
if(2)
if (prob(90))
gets_drilled(null, 1)
if(1)
gets_drilled(null, 1)
/turf/simulated/mineral/proc/Spread(var/turf/T)
new src.type(T)
/hook/startup/proc/add_mineral_edges()
var/watch = start_watch()
log_startup_progress("Reticulating splines...")
for(var/turf/simulated/mineral/M in GLOB.mineral_turfs)
M.add_edges()
log_startup_progress(" Splines reticulated in [stop_watch(watch)]s.")
return 1
/turf/simulated/mineral/proc/add_edges()
var/turf/T
if((istype(get_step(src, NORTH), /turf/simulated/floor)) || (istype(get_step(src, NORTH), /turf/space)))
T = get_step(src, NORTH)
if(T)
T.overlays += rockTurfEdgeCache[SOUTH_EDGING]
if((istype(get_step(src, SOUTH), /turf/simulated/floor)) || (istype(get_step(src, SOUTH), /turf/space)))
T = get_step(src, SOUTH)
if(T)
T.overlays += rockTurfEdgeCache[NORTH_EDGING]
if((istype(get_step(src, EAST), /turf/simulated/floor)) || (istype(get_step(src, EAST), /turf/space)))
T = get_step(src, EAST)
if(T)
T.overlays += rockTurfEdgeCache[WEST_EDGING]
if((istype(get_step(src, WEST), /turf/simulated/floor)) || (istype(get_step(src, WEST), /turf/space)))
T = get_step(src, WEST)
if(T)
T.overlays += rockTurfEdgeCache[EAST_EDGING]
T.ChangeTurf(type)
/turf/simulated/mineral/random
name = "mineral deposit"
icon_state = "rock"
var/mineralSpawnChanceList = list(
"Uranium" = 5, "Diamond" = 1, "Gold" = 10,
"Silver" = 12, "Plasma" = 20, "Iron" = 40,
"Gibtonite" = 4, "Cave" = 2, "BScrystal" = 1,
"Titanium" = 11)
var/mineralSpawnChanceList
var/mineralChance = 13
var/display_icon_state = "rock"
/turf/simulated/mineral/random/New()
if (!mineralSpawnChanceList)
mineralSpawnChanceList = list(
/turf/simulated/mineral/uranium = 5, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 10,
/turf/simulated/mineral/silver = 12, /turf/simulated/mineral/plasma = 20, /turf/simulated/mineral/iron = 40, /turf/simulated/mineral/titanium = 11,
/turf/simulated/mineral/gibtonite = 4, /turf/simulated/floor/plating/asteroid/airless/cave = 2, /turf/simulated/mineral/bscrystal = 1)
if (display_icon_state)
icon_state = display_icon_state
..()
if(prob(mineralChance))
var/mName = pickweight(mineralSpawnChanceList) //temp mineral name
if(mName)
var/turf/simulated/mineral/M
switch(mName)
if("Uranium")
M = new/turf/simulated/mineral/uranium(src)
if("Iron")
M = new/turf/simulated/mineral/iron(src)
if("Diamond")
M = new/turf/simulated/mineral/diamond(src)
if("Gold")
M = new/turf/simulated/mineral/gold(src)
if("Silver")
M = new/turf/simulated/mineral/silver(src)
if("Plasma")
M = new/turf/simulated/mineral/plasma(src)
if("Cave")
new/turf/simulated/floor/plating/asteroid/airless/cave(src)
if("Gibtonite")
M = new/turf/simulated/mineral/gibtonite(src)
if("Bananium")
M = new/turf/simulated/mineral/clown(src)
if("Tranquillite")
M = new/turf/simulated/mineral/mime(src)
if("Titanium")
M = new/turf/simulated/mineral/titanium(src)
if("BScrystal")
M = new/turf/simulated/mineral/bscrystal(src)
if(M)
M.mineralAmt = rand(1, 5)
src = M
M.levelupdate()
return
if (prob(mineralChance))
var/path = pickweight(mineralSpawnChanceList)
var/turf/T = ChangeTurf(path,FALSE,TRUE)
if(T && ismineralturf(T))
var/turf/simulated/mineral/M = T
M.mineralAmt = rand(1, 5)
M.environment_type = environment_type
M.turf_type = turf_type
M.baseturf = baseturf
src = M
M.levelupdate()
/turf/simulated/mineral/random/high_chance
icon_state = "rock_highchance"
mineralChance = 25
mineralSpawnChanceList = list(
"Uranium" = 35, "Diamond" = 30, "Gold" = 45,
"Silver" = 50, "Plasma" = 50, "BScrystal" = 20,
"Titanium" = 45)
/turf/simulated/mineral/uranium = 35, /turf/simulated/mineral/diamond = 30, /turf/simulated/mineral/gold = 45, /turf/simulated/mineral/titanium = 45,
/turf/simulated/mineral/silver = 50, /turf/simulated/mineral/plasma = 50, /turf/simulated/mineral/bscrystal = 20)
/turf/simulated/mineral/random/high_chance_clown
/turf/simulated/mineral/random/high_chance/clown
mineralChance = 40
mineralSpawnChanceList = list(
"Uranium" = 35, "Diamond" = 2,
"Gold" = 5, "Silver" = 5, "Plasma" = 25,
"Iron" = 30, "Bananium" = 15, "Tranquillite" = 15, "BScrystal" = 10)
/turf/simulated/mineral/uranium = 35, /turf/simulated/mineral/diamond = 2, /turf/simulated/mineral/gold = 5, /turf/simulated/mineral/silver = 5,
/turf/simulated/mineral/iron = 30, /turf/simulated/mineral/clown = 15, /turf/simulated/mineral/mime = 15, /turf/simulated/mineral/bscrystal = 10)
/turf/simulated/mineral/random/high_chance/New()
icon_state = "rock"
..()
/turf/simulated/mineral/random/high_chance/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
mineralSpawnChanceList = list(
/turf/simulated/mineral/uranium/volcanic = 35, /turf/simulated/mineral/diamond/volcanic = 30, /turf/simulated/mineral/gold/volcanic = 45, /turf/simulated/mineral/titanium/volcanic = 45,
/turf/simulated/mineral/silver/volcanic = 50, /turf/simulated/mineral/plasma/volcanic = 50, /turf/simulated/mineral/bscrystal/volcanic = 20)
/turf/simulated/mineral/random/low_chance
icon_state = "rock_lowchance"
mineralChance = 6
mineralSpawnChanceList = list(
"Uranium" = 2, "Diamond" = 1, "Gold" = 4,
"Silver" = 6, "Plasma" = 15, "Iron" = 40,
"Gibtonite" = 2, "BScrystal" = 1, "Titanium" = 4)
/turf/simulated/mineral/uranium = 2, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 4, /turf/simulated/mineral/titanium = 4,
/turf/simulated/mineral/silver = 6, /turf/simulated/mineral/plasma = 15, /turf/simulated/mineral/iron = 40,
/turf/simulated/mineral/gibtonite = 2, /turf/simulated/mineral/bscrystal = 1)
/turf/simulated/mineral/random/low_chance/New()
icon_state = "rock"
..()
/turf/simulated/mineral/random/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
mineralChance = 10
mineralSpawnChanceList = list(
/turf/simulated/mineral/uranium/volcanic = 5, /turf/simulated/mineral/diamond/volcanic = 1, /turf/simulated/mineral/gold/volcanic = 10, /turf/simulated/mineral/titanium/volcanic = 11,
/turf/simulated/mineral/silver/volcanic = 12, /turf/simulated/mineral/plasma/volcanic = 20, /turf/simulated/mineral/iron/volcanic = 40,
/turf/simulated/mineral/gibtonite/volcanic = 4, /turf/simulated/floor/plating/asteroid/airless/cave/volcanic = 1, /turf/simulated/mineral/bscrystal/volcanic = 1)
/turf/simulated/mineral/random/labormineral
mineralSpawnChanceList = list(
/turf/simulated/mineral/uranium = 2, /turf/simulated/mineral/diamond = 1, /turf/simulated/mineral/gold = 3, /turf/simulated/mineral/titanium = 4,
/turf/simulated/mineral/silver = 6, /turf/simulated/mineral/plasma = 15, /turf/simulated/mineral/iron = 80,
/turf/simulated/mineral/gibtonite = 3)
icon_state = "rock_labor"
/turf/simulated/mineral/random/labormineral/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
mineralSpawnChanceList = list(
/turf/simulated/mineral/uranium/volcanic = 2, /turf/simulated/mineral/diamond/volcanic = 1, /turf/simulated/mineral/gold/volcanic = 3, /turf/simulated/mineral/titanium/volcanic = 4,
/turf/simulated/mineral/silver/volcanic = 6, /turf/simulated/mineral/plasma/volcanic = 15, /turf/simulated/mineral/iron/volcanic = 80,
/turf/simulated/mineral/gibtonite/volcanic = 3)
// Actual minerals
/turf/simulated/mineral/iron
name = "iron deposit"
icon_state = "rock_Iron"
mineralType = /obj/item/stack/ore/iron
mineralName = "Iron"
spreadChance = 20
spread = 1
hidden = 0
scan_state = "rock_Iron"
/turf/simulated/mineral/iron/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/uranium
name = "uranium deposit"
mineralType = /obj/item/stack/ore/uranium
mineralName = "Uranium"
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Uranium"
/turf/simulated/mineral/uranium/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/diamond
name = "diamond deposit"
mineralType = /obj/item/stack/ore/diamond
mineralName = "Diamond"
spreadChance = 0
spread = 1
hidden = 1
scan_state = "rock_Diamond"
/turf/simulated/mineral/diamond/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/gold
name = "gold deposit"
mineralType = /obj/item/stack/ore/gold
mineralName = "Gold"
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Gold"
/turf/simulated/mineral/gold/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/silver
name = "silver deposit"
mineralType = /obj/item/stack/ore/silver
mineralName = "Silver"
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Silver"
/turf/simulated/mineral/silver/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/titanium
name = "titanium deposit"
mineralType = /obj/item/stack/ore/titanium
spreadChance = 5
spread = 1
hidden = 1
scan_state = "rock_Titanium"
/turf/simulated/mineral/titanium/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/plasma
name = "plasma deposit"
icon_state = "rock_Plasma"
mineralType = /obj/item/stack/ore/plasma
mineralName = "Plasma"
spreadChance = 8
spread = 1
hidden = 1
scan_state = "rock_Plasma"
/turf/simulated/mineral/plasma/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/clown
name = "bananium deposit"
icon_state = "rock_Clown"
mineralType = /obj/item/stack/ore/bananium
mineralName = "Bananium"
mineralAmt = 3
spreadChance = 0
spread = 0
hidden = 0
scan_state = "rock_Clown"
/turf/simulated/mineral/clown/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/mime
name = "tranquillite deposit"
icon_state = "rock_Mime"
mineralType = /obj/item/stack/ore/tranquillite
mineralAmt = 3
spreadChance = 0
spread = 0
hidden = 0
/turf/simulated/mineral/mime/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/bscrystal
name = "bluespace crystal deposit"
icon_state = "rock_BScrystal"
mineralType = /obj/item/stack/ore/bluespace_crystal
mineralName = "Bluespace crystal"
mineralAmt = 1
spreadChance = 0
spread = 0
hidden = 1
scan_state = "rock_BScrystal"
////////////////////////////////Gibtonite
/turf/simulated/mineral/bscrystal/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt
baseturf = /turf/simulated/floor/plating/asteroid/basalt
oxygen = 14
nitrogen = 23
temperature = 300
/turf/simulated/mineral/volcanic/lava_land_surface
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
defer_change = 1
// Gibtonite
/turf/simulated/mineral/gibtonite
name = "gibtonite deposit"
icon_state = "rock_Gibtonite"
mineralAmt = 1
mineralName = "Gibtonite"
spreadChance = 0
spread = 0
hidden = 1
scan_state = "rock_Gibtonite"
var/det_time = 8 //Countdown till explosion, but also rewards the player for how close you were to detonation when you defuse it
var/stage = 0 //How far into the lifecycle of gibtonite we are, 0 is untouched, 1 is active and attempting to detonate, 2 is benign and ready for extraction
var/activated_ckey = null //These are to track who triggered the gibtonite deposit for logging purposes
var/activated_name = null
var/activated_image = null
/turf/simulated/mineral/gibtonite/volcanic
environment_type = "basalt"
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
baseturf = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
oxygen = 14
nitrogen = 23
temperature = 300
defer_change = 1
/turf/simulated/mineral/gibtonite/New()
det_time = rand(8,10) //So you don't know exactly when the hot potato will explode
@@ -304,7 +429,9 @@ var/global/list/rockTurfEdgeCache = list(
/turf/simulated/mineral/gibtonite/proc/explosive_reaction(var/mob/user = null, triggered_by_explosion = 0)
if(stage == 0)
icon_state = "rock_Gibtonite_active"
var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_active", layer = ON_EDGED_TURF_LAYER)
add_overlay(I)
activated_image = I
name = "gibtonite deposit"
desc = "An active gibtonite reserve. Run!"
stage = 1
@@ -328,20 +455,22 @@ var/global/list/rockTurfEdgeCache = list(
countdown(notify_admins)
/turf/simulated/mineral/gibtonite/proc/countdown(notify_admins = 0)
spawn(0)
while(stage == 1 && det_time > 0 && mineralAmt >= 1)
det_time--
sleep(5)
set waitfor = 0
while(istype(src, /turf/simulated/mineral/gibtonite) && stage == 1 && det_time > 0 && mineralAmt >= 1)
det_time--
sleep(5)
if(istype(src, /turf/simulated/mineral/gibtonite))
if(stage == 1 && det_time <= 0 && mineralAmt >= 1)
var/turf/bombturf = get_turf(src)
mineralAmt = 0
stage = 3
explosion(bombturf,1,3,5, adminlog = notify_admins)
if(stage == 0 || stage == 2)
return
/turf/simulated/mineral/gibtonite/proc/defuse()
if(stage == 1)
icon_state = "rock_Gibtonite_inactive"
overlays -= activated_image
var/image/I = image('icons/turf/smoothrocks.dmi', loc = src, icon_state = "rock_Gibtonite_inactive", layer = ON_EDGED_TURF_LAYER)
add_overlay(I)
desc = "An inactive gibtonite reserve. The ore can be extracted."
stage = 2
if(det_time < 0)
@@ -350,13 +479,14 @@ var/global/list/rockTurfEdgeCache = list(
/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0)
if(stage == 0 && mineralAmt >= 1) //Gibtonite deposit is activated
playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1)
playsound(src, 'sound/effects/hit_on_shattered_glass.ogg',50,1)
explosive_reaction(user, triggered_by_explosion)
return
if(stage == 1 && mineralAmt >= 1) //Gibtonite deposit goes kaboom
var/turf/bombturf = get_turf(src)
mineralAmt = 0
explosion(bombturf,1,2,5, adminlog = 0)
stage = 3
explosion(bombturf, 1, 2, 5, adminlog = 0)
if(stage == 2) //Gibtonite deposit is now benign and extractable. Depending on how close you were to it blowing up before defusing, you get better quality ore.
var/obj/item/twohanded/required/gibtonite/G = new /obj/item/twohanded/required/gibtonite/(src)
if(det_time <= 0)
@@ -365,83 +495,6 @@ var/global/list/rockTurfEdgeCache = list(
if(det_time >= 1 && det_time <= 2)
G.quality = 2
G.icon_state = "Gibtonite ore 2"
ChangeTurf(/turf/simulated/floor/plating/asteroid/airless/gibtonite_remains)
/turf/simulated/floor/plating/asteroid/airless/gibtonite_remains
var/det_time = 0
var/stage = 0
////////////////////////////////End Gibtonite
/turf/simulated/mineral/attackby(var/obj/item/pickaxe/P as obj, mob/user as mob, params)
if(!user.IsAdvancedToolUser())
to_chat(usr, "<span class='warning'>You don't have the dexterity to do this!</span>")
return
if(istype(P, /obj/item/pickaxe))
var/turf/T = user.loc
if(!( istype(T, /turf) ))
return
if(last_act + (40 * P.toolspeed) > world.time)//prevents message spam
return
last_act = world.time
to_chat(user, "<span class='notice'>You start picking...</span>")
P.playDigSound()
if(do_after(user, 40 * P.toolspeed, target = src))
if(istype(src, /turf/simulated/mineral)) //sanity check against turf being deleted during digspeed delay
to_chat(user, "<span class='notice'>You finish cutting into the rock.</span>")
P.update_icon()
gets_drilled(user)
feedback_add_details("pick_used_mining","[P.name]")
else
return attack_hand(user)
return
/turf/simulated/mineral/proc/gets_drilled()
if(mineralType && (src.mineralAmt > 0) && (src.mineralAmt < 11))
var/i
for(i=0;i<mineralAmt;i++)
new mineralType(src)
feedback_add_details("ore_mined","[mineralType]|[mineralAmt]")
ChangeTurf(/turf/simulated/floor/plating/asteroid/airless)
playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction
if(rand(1,750) == 1)
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
new /obj/structure/closet/crate/secure/loot(src)
return
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user as mob)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
gets_drilled()
..()
/turf/simulated/mineral/attack_alien(var/mob/living/carbon/alien/M)
to_chat(M, "<span class='notice'>You start digging into the rock...</span>")
playsound(src, 'sound/effects/break_stone.ogg', 50, 1)
if(do_after(M, 40, target = src))
to_chat(M, "<span class='notice'>You tunnel into the rock.</span>")
gets_drilled()
/turf/simulated/mineral/Bumped(AM as mob|obj)
. = ..()
if(istype(AM,/mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand))
attackby(H.l_hand,H)
else if((istype(H.r_hand,/obj/item/pickaxe)) && H.hand)
attackby(H.r_hand,H)
else if(istype(AM,/mob/living/silicon/robot))
var/mob/living/silicon/robot/R = AM
if(istype(R.module_active,/obj/item/pickaxe))
attackby(R.module_active,R)
else if(istype(AM,/obj/mecha))
var/obj/mecha/M = AM
if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill))
M.selected.action(src)
ChangeTurf(turf_type, defer_change)
addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE)
+46
View File
@@ -48,3 +48,49 @@
"human" = list('sound/effects/footstep/wood_all.ogg'), //@RonaldVanWonderen of Freesound.org
"xeno" = list('sound/effects/footstep/wood_all.ogg') //@RonaldVanWonderen of Freesound.org
)
/turf/unsimulated/floor/necropolis
name = "necropolis floor"
desc = "It's regarding you suspiciously."
icon = 'icons/turf/floors.dmi'
icon_state = "necro1"
baseturf = /turf/unsimulated/floor/necropolis
oxygen = 14
nitrogen = 23
temperature = 300
/turf/unsimulated/floor/necropolis/Initialize()
. = ..()
if(prob(12))
icon_state = "necro[rand(2,3)]"
/turf/unsimulated/floor/necropolis/air
oxygen = 0
nitrogen = 0
temperature = T20C
/turf/unsimulated/floor/boss //you put stone tiles on this and use it as a base
name = "necropolis floor"
icon = 'icons/turf/floors/boss_floors.dmi'
icon_state = "boss"
baseturf = /turf/unsimulated/floor/boss
oxygen = 14
nitrogen = 23
temperature = 300
/turf/unsimulated/floor/boss/air
oxygen = 0
nitrogen = 0
temperature = T20C
/turf/unsimulated/floor/hierophant
icon_state = "hierophant1"
oxygen = 14
nitrogen = 23
temperature = 300
desc = "A floor with a square pattern. It's faintly cool to the touch."
/turf/unsimulated/floor/hierophant/New()
..()
if(prob(50))
icon_state = "hierophant2"
+29 -1
View File
@@ -32,4 +32,32 @@
/turf/unsimulated/wall/abductor
icon_state = "alien1"
explosion_block = 50
explosion_block = 50
/turf/unsimulated/wall/necropolis
name = "necropolis wall"
desc = "A seemingly impenetrable wall."
icon = 'icons/turf/walls.dmi'
icon_state = "necro"
explosion_block = 50
baseturf = /turf/unsimulated/wall/necropolis
/turf/unsimulated/wall/boss
name = "necropolis wall"
desc = "A thick, seemingly indestructible stone wall."
icon = 'icons/turf/walls/boss_wall.dmi'
icon_state = "wall"
canSmoothWith = list(/turf/unsimulated/wall/boss, /turf/unsimulated/wall/boss/see_through)
explosion_block = 50
baseturf = /turf/simulated/floor/plating/asteroid/basalt
smooth = SMOOTH_TRUE
/turf/unsimulated/wall/boss/see_through
opacity = FALSE
/turf/unsimulated/wall/hierophant
name = "wall"
desc = "A wall made out of smooth, cold stone."
icon = 'icons/turf/walls/hierophant_wall.dmi'
icon_state = "hierophant"
smooth = SMOOTH_TRUE
-3
View File
@@ -22,9 +22,6 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away
var/atom/A = R
if(A.smooth)
queue_smooth(A)
if(istype(T, /turf/simulated/mineral)) // For the listening post, among other maps
var/turf/simulated/mineral/MT = T
MT.add_edges()
log_debug("\tTook [stop_watch(subtimer)]s")
log_debug("Late setup finished - took [stop_watch(total_timer)]s")
@@ -189,7 +189,7 @@
terrain_theme = pick("lavaland","winter","jungle","alien")
switch(terrain_theme)
if("lavaland")//Depressurizes the place... and free cult metal, I guess.
NewTerrainFloors = /turf/simulated/floor/asteroid/basalt // Needs to be updated after turf update
NewTerrainFloors = /turf/simulated/floor/plating/asteroid/basalt // Needs to be updated after turf update
NewTerrainWalls = /turf/simulated/wall/cult
NewFlora = list(/mob/living/simple_animal/hostile/asteroid/goldgrub)
florachance = 1
-75
View File
@@ -1,75 +0,0 @@
/**********************Mine areas**************************/
/area/mine
icon_state = "mining"
/area/mine/dangerous/explored
name = "Mine"
icon_state = "explored"
music = null
always_unpowered = 1
requires_power = 1
poweralm = 0
power_environ = 0
power_equip = 0
power_light = 0
outdoors = 1
ambientsounds = list('sound/ambience/ambimine.ogg')
/area/mine/dangerous/explored/golem
name = "Small Asteroid"
/area/mine/dangerous/unexplored
name = "Mine"
icon_state = "unexplored"
music = null
always_unpowered = 1
requires_power = 1
poweralm = 0
power_environ = 0
power_equip = 0
power_light = 0
outdoors = 1
ambientsounds = list('sound/ambience/ambimine.ogg')
/area/mine/lobby
name = "Mining Station"
/area/mine/storage
name = "Mining Station Storage"
/area/mine/production
name = "Mining Station Starboard Wing"
icon_state = "mining_production"
/area/mine/abandoned
name = "Abandoned Mining Station"
/area/mine/living_quarters
name = "Mining Station Port Wing"
icon_state = "mining_living"
/area/mine/eva
name = "Mining Station EVA"
icon_state = "mining_eva"
/area/mine/maintenance
name = "Mining Station Communications"
/area/mine/cafeteria
name = "Mining Station Cafeteria"
/area/mine/hydroponics
name = "Mining Station Hydroponics"
/area/mine/sleeper
name = "Mining Station Emergency Sleeper"
/area/mine/north_outpost
name = "North Mining Outpost"
/area/mine/west_outpost
name = "West Mining Outpost"
/area/mine/podbay
name = "Mining Podbay"
@@ -592,23 +592,4 @@ Difficulty: Hard
desc = "Heed its words."
invisibility = 100
/turf/simulated/indestructible/hierophant
icon_state = "hierophant1"
oxygen = 14
nitrogen = 23
temperature = 300
desc = "A floor with a square pattern. It's faintly cool to the touch."
/turf/simulated/indestructible/hierophant/New()
..()
if(prob(50))
icon_state = "hierophant2"
/turf/simulated/indestructible/riveted/hierophant
name = "wall"
desc = "A wall made out of smooth, cold stone."
icon = 'icons/turf/walls/hierophant_wall.dmi'
icon_state = "hierophant"
smooth = SMOOTH_TRUE
#undef MEDAL_PREFIX
@@ -0,0 +1,413 @@
//The necropolis gate is used to call forth Legion from the Necropolis.
/obj/structure/necropolis_gate
name = "necropolis gate"
desc = "A massive stone gateway."
icon = 'icons/effects/96x96.dmi'
icon_state = "gate_full"
flags = ON_BORDER
appearance_flags = 0
layer = TABLE_LAYER
anchored = TRUE
density = TRUE
pixel_x = -32
pixel_y = -32
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
unacidable = 1
light_range = 8
light_color = LIGHT_COLOR_LAVA
var/open = FALSE
var/changing_openness = FALSE
var/locked = FALSE
var/static/mutable_appearance/top_overlay
var/static/mutable_appearance/door_overlay
var/static/mutable_appearance/dais_overlay
var/obj/structure/opacity_blocker/sight_blocker
var/sight_blocker_distance = 1
/obj/structure/necropolis_gate/Initialize()
. = ..()
setDir(SOUTH)
var/turf/sight_blocker_turf = get_turf(src)
if(sight_blocker_distance)
for(var/i in 1 to sight_blocker_distance)
if(!sight_blocker_turf)
break
sight_blocker_turf = get_step(sight_blocker_turf, NORTH)
if(sight_blocker_turf)
sight_blocker = new (sight_blocker_turf) //we need to block sight in a different spot than most things do
sight_blocker.pixel_y = initial(sight_blocker.pixel_y) - (32 * sight_blocker_distance)
icon_state = "gate_bottom"
top_overlay = mutable_appearance('icons/effects/96x96.dmi', "gate_top")
top_overlay.layer = EDGED_TURF_LAYER
add_overlay(top_overlay)
door_overlay = mutable_appearance('icons/effects/96x96.dmi', "door")
door_overlay.layer = EDGED_TURF_LAYER
add_overlay(door_overlay)
dais_overlay = mutable_appearance('icons/effects/96x96.dmi', "gate_dais")
dais_overlay.layer = CLOSED_TURF_LAYER
add_overlay(dais_overlay)
/obj/structure/necropolis_gate/Destroy(force)
if(force)
qdel(sight_blocker, TRUE)
. = ..()
else
return QDEL_HINT_LETMELIVE
/obj/structure/necropolis_gate/singularity_pull()
return 0
/obj/structure/necropolis_gate/CanPass(atom/movable/mover, turf/target)
if(get_dir(loc, target) == dir)
return !density
return 1
/obj/structure/necropolis_gate/CheckExit(atom/movable/O, target)
if(get_dir(O.loc, target) == dir)
return !density
return 1
/obj/structure/opacity_blocker
icon = 'icons/effects/96x96.dmi'
icon_state = "gate_blocker"
layer = EDGED_TURF_LAYER
pixel_x = -32
pixel_y = -32
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
opacity = TRUE
anchored = TRUE
/obj/structure/opacity_blocker/singularity_pull()
return 0
/obj/structure/opacity_blocker/Destroy(force)
if(force)
. = ..()
else
return QDEL_HINT_LETMELIVE
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/necropolis_gate/attack_hand(mob/user)
if(locked)
to_chat(user, "<span class='boldannounce'>It's [open ? "stuck open":"locked"].</span>")
return
toggle_the_gate(user)
return ..()
/obj/structure/necropolis_gate/proc/toggle_the_gate(mob/user, legion_damaged)
if(changing_openness)
return
changing_openness = TRUE
var/turf/T = get_turf(src)
if(open)
new /obj/effect/temp_visual/necropolis(T)
visible_message("<span class='boldwarning'>The door slams closed!</span>")
sleep(1)
playsound(T, 'sound/effects/stonedoor_openclose.ogg', 300, TRUE, frequency = 80000)
sleep(1)
density = TRUE
sleep(1)
var/turf/sight_blocker_turf = get_turf(src)
if(sight_blocker_distance)
for(var/i in 1 to sight_blocker_distance)
if(!sight_blocker_turf)
break
sight_blocker_turf = get_step(sight_blocker_turf, NORTH)
if(sight_blocker_turf)
sight_blocker.pixel_y = initial(sight_blocker.pixel_y) - (32 * sight_blocker_distance)
sight_blocker.forceMove(sight_blocker_turf)
sleep(2.5)
playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 30, TRUE, frequency = 15000)
add_overlay(door_overlay)
open = FALSE
else
cut_overlay(door_overlay)
new /obj/effect/temp_visual/necropolis/open(T)
sleep(2)
visible_message("<span class='warning'>The door starts to grind open...</span>")
playsound(T, 'sound/effects/stonedoor_openclose.ogg', 300, TRUE, frequency = 20000)
sleep(22)
sight_blocker.forceMove(src)
sleep(5)
density = FALSE
sleep(5)
open = TRUE
changing_openness = FALSE
return TRUE
/obj/structure/necropolis_gate/locked
locked = TRUE
GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate)
/obj/structure/necropolis_gate/legion_gate
desc = "A tremendous, impossibly large gateway, set into a massive tower of stone."
sight_blocker_distance = 2
/obj/structure/necropolis_gate/legion_gate/Initialize()
. = ..()
GLOB.necropolis_gate = src
/obj/structure/necropolis_gate/legion_gate/Destroy(force)
if(force)
if(GLOB.necropolis_gate == src)
GLOB.necropolis_gate = null
. = ..()
else
return QDEL_HINT_LETMELIVE
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/structure/necropolis_gate/legion_gate/attack_hand(mob/user)
if(!open && !changing_openness)
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 || open || changing_openness || 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)
sleep(50)
return ..()
/obj/structure/necropolis_gate/legion_gate/toggle_the_gate(mob/user, legion_damaged)
if(open)
return
. = ..()
if(.)
locked = TRUE
var/turf/T = get_turf(src)
visible_message("<span class='userdanger'>Something horrible emerges from the Necropolis!</span>")
if(legion_damaged)
message_admins("Legion took damage while the necropolis gate was closed, and has released itself!")
log_game("Legion took damage while the necropolis gate was closed and released itself.")
else
message_admins("[user ? ADMIN_LOOKUPFLW(user):"Unknown"] has released Legion!")
log_game("[user ? key_name(user) : "Unknown"] released Legion.")
var/sound/legion_sound = sound('sound/creatures/legion_spawn.ogg')
for(var/mob/M in GLOB.player_list)
if(M.z == z)
to_chat(M, "<span class='userdanger'>Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has been released.</span>")
M.playsound_local(T, null, 100, FALSE, 0, FALSE, pressure_affected = FALSE, S = legion_sound)
flash_color(M, flash_color = "#FF0000", flash_time = 50)
var/mutable_appearance/release_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor")
notify_ghosts("Legion has been released in the [get_area(src)]!", source = src, alert_overlay = release_overlay, action = NOTIFY_JUMP)
/obj/effect/temp_visual/necropolis
icon = 'icons/effects/96x96.dmi'
icon_state = "door_closing"
appearance_flags = 0
duration = 6
layer = EDGED_TURF_LAYER
pixel_x = -32
pixel_y = -32
/obj/effect/temp_visual/necropolis/open
icon_state = "door_opening"
duration = 38
/obj/structure/necropolis_arch
name = "necropolis arch"
desc = "A massive arch over the necropolis gate, set into a massive tower of stone."
icon = 'icons/effects/160x160.dmi'
icon_state = "arch_full"
appearance_flags = 0
layer = TABLE_LAYER
anchored = TRUE
pixel_x = -64
pixel_y = -40
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
unacidable = TRUE
var/open = FALSE
var/static/mutable_appearance/top_overlay
/obj/structure/necropolis_arch/Initialize()
. = ..()
icon_state = "arch_bottom"
top_overlay = mutable_appearance('icons/effects/160x160.dmi', "arch_top")
top_overlay.layer = EDGED_TURF_LAYER
add_overlay(top_overlay)
/obj/structure/necropolis_arch/singularity_pull()
return 0
/obj/structure/necropolis_arch/Destroy(force)
if(force)
. = ..()
else
return QDEL_HINT_LETMELIVE
#define STABLE 0 //The tile is stable and won't collapse/sink when crossed.
#define COLLAPSE_ON_CROSS 1 //The tile is unstable and will temporary become unusable when crossed.
#define DESTROY_ON_CROSS 2 //The tile is nearly broken and will permanently become unusable when crossed.
#define UNIQUE_EFFECT 3 //The tile has some sort of unique effect when crossed.
//stone tiles for boss arenas
/obj/structure/stone_tile
name = "stone tile"
icon = 'icons/turf/boss_floors.dmi'
icon_state = "pristine_tile1"
layer = ABOVE_OPEN_TURF_LAYER
anchored = TRUE
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF
unacidable = TRUE
var/tile_key = "pristine_tile"
var/tile_random_sprite_max = 24
var/fall_on_cross = STABLE //If the tile has some sort of effect when crossed
var/fallen = FALSE //If the tile is unusable
var/falling = FALSE //If the tile is falling
/obj/structure/stone_tile/Initialize(mapload)
. = ..()
icon_state = "[tile_key][rand(1, tile_random_sprite_max)]"
/obj/structure/stone_tile/Destroy(force)
if(force || fallen)
. = ..()
else
return QDEL_HINT_LETMELIVE
/obj/structure/stone_tile/singularity_pull()
return
/obj/structure/stone_tile/Crossed(atom/movable/AM)
if(falling || fallen)
return
var/turf/T = get_turf(src)
if(!islava(T) && !ischasm(T)) //nothing to sink or fall into
return
var/obj/item/I
if(istype(AM, /obj/item))
I = AM
var/mob/living/L
if(isliving(AM))
L = AM
switch(fall_on_cross)
if(COLLAPSE_ON_CROSS, DESTROY_ON_CROSS)
if((I && I.w_class >= WEIGHT_CLASS_BULKY) || (L && !(L.flying) && L.mob_size >= MOB_SIZE_HUMAN)) //too heavy! too big! aaah!
collapse()
if(UNIQUE_EFFECT)
crossed_effect(AM)
/obj/structure/stone_tile/proc/collapse()
falling = TRUE
var/break_that_sucker = fall_on_cross == DESTROY_ON_CROSS
playsound(src, 'sound/effects/pressureplate.ogg', 50, TRUE)
Shake(-1, -1, 25)
sleep(5)
if(break_that_sucker)
playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE)
else
playsound(src, 'sound/mecha/mechmove04.ogg', 50, TRUE)
animate(src, alpha = 0, pixel_y = pixel_y - 3, time = 5)
fallen = TRUE
if(break_that_sucker)
QDEL_IN(src, 10)
else
addtimer(CALLBACK(src, .proc/rebuild), 55)
/obj/structure/stone_tile/proc/rebuild()
pixel_x = initial(pixel_x)
pixel_y = initial(pixel_y) - 5
animate(src, alpha = initial(alpha), pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 30)
sleep(30)
falling = FALSE
fallen = FALSE
/obj/structure/stone_tile/proc/crossed_effect(atom/movable/AM)
return
/obj/structure/stone_tile/block
name = "stone block"
icon_state = "pristine_block1"
tile_key = "pristine_block"
tile_random_sprite_max = 4
/obj/structure/stone_tile/slab
name = "stone slab"
icon_state = "pristine_slab1"
tile_key = "pristine_slab"
tile_random_sprite_max = 4
/obj/structure/stone_tile/center
name = "stone center tile"
icon_state = "pristine_center1"
tile_key = "pristine_center"
tile_random_sprite_max = 4
/obj/structure/stone_tile/surrounding
name = "stone surrounding slab"
icon_state = "pristine_surrounding1"
tile_key = "pristine_surrounding"
tile_random_sprite_max = 2
/obj/structure/stone_tile/surrounding_tile
name = "stone surrounding tile"
icon_state = "pristine_surrounding_tile1"
tile_key = "pristine_surrounding_tile"
tile_random_sprite_max = 2
//cracked stone tiles
/obj/structure/stone_tile/cracked
name = "cracked stone tile"
icon_state = "cracked_tile1"
tile_key = "cracked_tile"
/obj/structure/stone_tile/block/cracked
name = "cracked stone block"
icon_state = "cracked_block1"
tile_key = "cracked_block"
/obj/structure/stone_tile/slab/cracked
name = "cracked stone slab"
icon_state = "cracked_slab1"
tile_key = "cracked_slab"
tile_random_sprite_max = 1
/obj/structure/stone_tile/center/cracked
name = "cracked stone center tile"
icon_state = "cracked_center1"
tile_key = "cracked_center"
/obj/structure/stone_tile/surrounding/cracked
name = "cracked stone surrounding slab"
icon_state = "cracked_surrounding1"
tile_key = "cracked_surrounding"
tile_random_sprite_max = 1
/obj/structure/stone_tile/surrounding_tile/cracked
name = "cracked stone surrounding tile"
icon_state = "cracked_surrounding_tile1"
tile_key = "cracked_surrounding_tile"
//burnt stone tiles
/obj/structure/stone_tile/burnt
name = "burnt stone tile"
icon_state = "burnt_tile1"
tile_key = "burnt_tile"
/obj/structure/stone_tile/block/burnt
name = "burnt stone block"
icon_state = "burnt_block1"
tile_key = "burnt_block"
/obj/structure/stone_tile/slab/burnt
name = "burnt stone slab"
icon_state = "burnt_slab1"
tile_key = "burnt_slab"
/obj/structure/stone_tile/center/burnt
name = "burnt stone center tile"
icon_state = "burnt_center1"
tile_key = "burnt_center"
/obj/structure/stone_tile/surrounding/burnt
name = "burnt stone surrounding slab"
icon_state = "burnt_surrounding1"
tile_key = "burnt_surrounding"
/obj/structure/stone_tile/surrounding_tile/burnt
name = "burnt stone surrounding tile"
icon_state = "burnt_surrounding_tile1"
tile_key = "burnt_surrounding_tile"
#undef STABLE
#undef COLLAPSE_ON_CROSS
#undef DESTROY_ON_CROSS
#undef UNIQUE_EFFECT
+1 -6
View File
@@ -1,12 +1,11 @@
//Parent types
/area/ruin/
/area/ruin
name = "\improper Unexplored Location"
icon_state = "away"
has_gravity = 1
there_can_be_many = 1
/area/ruin/unpowered
always_unpowered = 0
@@ -16,9 +15,6 @@
/area/ruin/powered
requires_power = 0
//Areas
/area/ruin/unpowered/no_grav/way_home
@@ -35,7 +31,6 @@
name = "Hallway"
icon_state = "hallC"
/area/ruin/onehalf/drone_bay
name = "Mining Drone Bay"
icon_state = "engine"
+1 -1
View File
@@ -358,7 +358,7 @@
dwidth = 1
width = 3
height = 4
var/target_area = /area/mine/dangerous/unexplored
var/target_area = /area/mine/unexplored
/obj/docking_port/stationary/random/Initialize()
..()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

After

Width:  |  Height:  |  Size: 533 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 KiB

After

Width:  |  Height:  |  Size: 406 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 419 KiB

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 203 KiB

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

+1 -1
View File
@@ -1611,7 +1611,6 @@
#include "code\modules\mining\machine_processing.dm"
#include "code\modules\mining\machine_stacking.dm"
#include "code\modules\mining\machine_unloading.dm"
#include "code\modules\mining\mine_areas.dm"
#include "code\modules\mining\mine_items.dm"
#include "code\modules\mining\minebot.dm"
#include "code\modules\mining\mint.dm"
@@ -2280,6 +2279,7 @@
#include "code\modules\response_team\ert.dm"
#include "code\modules\response_team\ert_outfits.dm"
#include "code\modules\ruins\ruin_areas.dm"
#include "code\modules\ruins\objects_and_mobs\necropolis_gate.dm"
#include "code\modules\security_levels\keycard authentication.dm"
#include "code\modules\security_levels\security levels.dm"
#include "code\modules\shuttle\assault_pod.dm"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.