mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 11:34:19 +01:00
440 lines
13 KiB
Plaintext
440 lines
13 KiB
Plaintext
/**********************Mineral deposits**************************/
|
|
|
|
/// wall piece
|
|
/turf/simulated/mineral
|
|
name = "rock"
|
|
icon = 'icons/turf/walls/32x40smoothrocks.dmi'
|
|
icon_state = "smoothrocks-0"
|
|
base_icon_state = "smoothrocks"
|
|
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
|
|
smoothing_groups = list(SMOOTH_GROUP_SIMULATED_TURFS, SMOOTH_GROUP_ROCK_WALLS)
|
|
canSmoothWith = list(SMOOTH_GROUP_ROCK_WALLS)
|
|
baseturf = /turf/simulated/floor/plating/asteroid/airless
|
|
opacity = TRUE
|
|
density = TRUE
|
|
blocks_air = TRUE
|
|
flags = NO_RUST
|
|
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
|
rad_insulation_beta = RAD_BETA_BLOCKER
|
|
layer = EDGED_TURF_LAYER
|
|
temperature = TCMB
|
|
color = COLOR_ROCK
|
|
var/environment_type = "asteroid"
|
|
var/turf/simulated/floor/plating/turf_type = /turf/simulated/floor/plating/asteroid/airless
|
|
var/last_act = 0
|
|
|
|
var/defer_change = 0
|
|
var/mine_time = 4 SECONDS //Changes how fast the turf is mined by pickaxes, multiplied by toolspeed
|
|
/// Should this be set to the normal rock colour on init?
|
|
var/should_reset_color = TRUE
|
|
|
|
/// The ore type, if any, that should spawn in the wall on Initialize.
|
|
/// Expected to be a subtype of [/datum/ore].
|
|
var/preset_ore_type
|
|
/// The representation of the unmined ore in the wall, if any.
|
|
var/datum/ore/ore
|
|
|
|
/turf/simulated/mineral/Initialize(mapload)
|
|
. = ..()
|
|
|
|
if(should_reset_color)
|
|
color = COLOR_ROCK
|
|
|
|
if(preset_ore_type)
|
|
set_ore(preset_ore_type)
|
|
|
|
AddComponent(/datum/component/debris, DEBRIS_ROCK, -20, 10, 1)
|
|
|
|
/turf/simulated/mineral/proc/set_ore(ore_type)
|
|
if(!ore_type)
|
|
return
|
|
|
|
if(ore)
|
|
qdel(ore)
|
|
|
|
ore = new ore_type()
|
|
if(ore.spread_chance)
|
|
for(var/dir in GLOB.cardinal)
|
|
if(prob(ore.spread_chance))
|
|
var/turf/simulated/mineral/T = get_step(src, dir)
|
|
if(istype(T))
|
|
T.set_ore(ore_type)
|
|
|
|
/turf/simulated/mineral/shuttleRotate(rotation)
|
|
QUEUE_SMOOTH(src)
|
|
|
|
/turf/simulated/mineral/proc/invalid_tool(mob/user, obj/item/pickaxe/axe)
|
|
if(!istype(axe))
|
|
return TRUE
|
|
|
|
return FALSE
|
|
|
|
/turf/simulated/mineral/attack_by(obj/item/attacking, mob/user, params)
|
|
if(..())
|
|
return FINISH_ATTACK
|
|
|
|
if(!user.IsAdvancedToolUser())
|
|
to_chat(usr, SPAN_WARNING("You don't have the dexterity to do this!"))
|
|
return FINISH_ATTACK
|
|
|
|
if(istype(attacking, /obj/item/pickaxe))
|
|
var/obj/item/pickaxe/P = attacking
|
|
if(invalid_tool(user, P))
|
|
return FINISH_ATTACK
|
|
|
|
var/turf/T = user.loc
|
|
if(!isturf(T))
|
|
return FINISH_ATTACK
|
|
|
|
if(last_act + (mine_time * P.toolspeed) > world.time) // Prevents message spam
|
|
return FINISH_ATTACK
|
|
|
|
last_act = world.time
|
|
to_chat(user, SPAN_NOTICE("You start picking..."))
|
|
P.playDigSound()
|
|
|
|
if(do_after(user, mine_time * P.toolspeed, target = src))
|
|
if(ismineralturf(src)) //sanity check against turf being deleted during digspeed delay
|
|
to_chat(user, SPAN_NOTICE("You finish cutting into the rock."))
|
|
gets_drilled(user, productivity_mod = P.bit_productivity_mod)
|
|
SSblackbox.record_feedback("tally", "pick_used_mining", 1, P.name)
|
|
|
|
return FINISH_ATTACK
|
|
else
|
|
return attack_hand(user)
|
|
|
|
/turf/simulated/mineral/proc/mine_ore(mob/user, triggered_by_explosion, productivity_mod = 1)
|
|
if(!ore)
|
|
return MINERAL_ALLOW_DIG
|
|
|
|
for(var/obj/effect/temp_visual/mining_overlay/M in src)
|
|
qdel(M)
|
|
|
|
return ore.on_mine(src, user, triggered_by_explosion, productivity_mod)
|
|
|
|
/turf/simulated/mineral/proc/gets_drilled(mob/user, triggered_by_explosion = FALSE, productivity_mod = 1)
|
|
if(mine_ore(user, triggered_by_explosion, productivity_mod) == MINERAL_PREVENT_DIG)
|
|
return
|
|
|
|
ChangeTurf(turf_type, defer_change)
|
|
addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE)
|
|
playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction
|
|
|
|
/turf/simulated/mineral/attack_animal(mob/living/simple_animal/user)
|
|
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
|
|
gets_drilled()
|
|
..()
|
|
|
|
/turf/simulated/mineral/attack_alien(mob/living/carbon/alien/M)
|
|
to_chat(M, SPAN_NOTICE("You start digging into the rock..."))
|
|
playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE)
|
|
if(do_after(M, 40, target = src))
|
|
to_chat(M, SPAN_NOTICE("You tunnel into the rock."))
|
|
gets_drilled(M)
|
|
|
|
/turf/simulated/mineral/Bumped(atom/movable/AM)
|
|
..()
|
|
if(ishuman(AM))
|
|
var/mob/living/carbon/human/H = AM
|
|
if((istype(H.l_hand,/obj/item/pickaxe)) && (!H.hand))
|
|
attack_by(H.l_hand, H)
|
|
else if((istype(H.r_hand,/obj/item/pickaxe)) && H.hand)
|
|
attack_by(H.r_hand, H)
|
|
return
|
|
|
|
else if(isrobot(AM))
|
|
var/mob/living/silicon/robot/R = AM
|
|
if(istype(R.selected_item, /obj/item/pickaxe))
|
|
attack_by(R.selected_item, 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/acid_melt()
|
|
ChangeTurf(baseturf)
|
|
|
|
/turf/simulated/mineral/ex_act(severity)
|
|
..()
|
|
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/random
|
|
var/mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 40,
|
|
/datum/ore/plasma = 20,
|
|
/datum/ore/silver = 12,
|
|
/datum/ore/titanium = 11,
|
|
/datum/ore/gold = 10,
|
|
/datum/ore/uranium = 5,
|
|
/datum/ore/gibtonite = 4,
|
|
/datum/ore/bluespace = 1,
|
|
/datum/ore/diamond = 1,
|
|
)
|
|
|
|
var/mineralChance = 10
|
|
|
|
/turf/simulated/mineral/random/Initialize(mapload)
|
|
. = ..()
|
|
|
|
mineralSpawnChanceList = typelist("mineralSpawnChanceList", mineralSpawnChanceList)
|
|
if(prob(mineralChance))
|
|
var/new_ore_type = pickweight(mineralSpawnChanceList)
|
|
set_ore(new_ore_type)
|
|
|
|
/turf/simulated/mineral/random/space
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 40,
|
|
/datum/ore/plasma = 20,
|
|
/datum/ore/silver = 12,
|
|
/datum/ore/titanium = 11,
|
|
/datum/ore/gold = 10,
|
|
/datum/ore/uranium = 5,
|
|
/datum/ore/gibtonite = 4,
|
|
/datum/ore/bluespace = 1,
|
|
/datum/ore/diamond = 1,
|
|
/datum/ore/platinum = 3,
|
|
/datum/ore/palladium = 3,
|
|
/datum/ore/iridium = 3
|
|
)
|
|
|
|
/turf/simulated/mineral/ancient
|
|
name = "ancient rock"
|
|
desc = "A rare asteroid rock that appears to be resistant to all mining tools except pickaxes!"
|
|
smoothing_groups = list(SMOOTH_GROUP_ROCK_WALLS, SMOOTH_GROUP_ASTEROID_WALLS)
|
|
canSmoothWith = list(SMOOTH_GROUP_ROCK_WALLS, SMOOTH_GROUP_ASTEROID_WALLS)
|
|
mine_time = 6 SECONDS
|
|
color = COLOR_ANCIENT_ROCK
|
|
layer = MAP_EDITOR_TURF_LAYER
|
|
should_reset_color = FALSE
|
|
baseturf = /turf/simulated/floor/plating/asteroid/ancient
|
|
|
|
/turf/simulated/mineral/ancient/blob_act(obj/structure/blob/B)
|
|
if(prob(50))
|
|
blob_destruction()
|
|
|
|
/turf/simulated/mineral/ancient/proc/blob_destruction()
|
|
playsound(src, pick('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg'), 30, 1 )
|
|
|
|
for(var/obj/O in contents) //Eject contents!
|
|
if(istype(O, /obj/structure/sign/poster))
|
|
var/obj/structure/sign/poster/P = O
|
|
P.roll_and_drop(src)
|
|
else
|
|
O.forceMove(src)
|
|
|
|
ChangeTurf(/turf/simulated/floor/plating/asteroid/ancient)
|
|
return TRUE
|
|
|
|
/turf/simulated/mineral/ancient/outer
|
|
name = "cold ancient rock"
|
|
desc = "A rare and dense asteroid rock that appears to be resistant to everything except diamond and sonic tools! Can not be used to create portals to hell."
|
|
mine_time = 15 SECONDS
|
|
color = COLOR_COLD_ANCIENT_ROCK
|
|
var/static/list/allowed_picks_typecache
|
|
|
|
/turf/simulated/mineral/ancient/outer/Initialize(mapload)
|
|
. = ..()
|
|
allowed_picks_typecache = typecacheof(list(
|
|
/obj/item/pickaxe/drill/jackhammer,
|
|
/obj/item/pickaxe/diamond,
|
|
/obj/item/pickaxe/drill/cyborg/diamond,
|
|
/obj/item/pickaxe/drill/diamonddrill,
|
|
))
|
|
|
|
/turf/simulated/mineral/ancient/outer/invalid_tool(mob/user, obj/item/pickaxe/axe)
|
|
if(..())
|
|
return TRUE
|
|
|
|
if(!(is_type_in_typecache(axe, allowed_picks_typecache)))
|
|
to_chat(user, SPAN_NOTICE("Only diamond tools or a sonic jackhammer can break this rock."))
|
|
return TRUE
|
|
|
|
/turf/simulated/mineral/ancient/lava_land_surface_hard
|
|
name = "hardened volcanic rock"
|
|
desc = "A dense volcanic rock that appears to be resistant to everything except diamond and sonic tools!"
|
|
mine_time = 15 SECONDS
|
|
color = COLOR_HARD_ROCK
|
|
oxygen = LAVALAND_OXYGEN
|
|
nitrogen = LAVALAND_NITROGEN
|
|
temperature = LAVALAND_TEMPERATURE
|
|
atmos_mode = ATMOS_MODE_EXPOSED_TO_ENVIRONMENT
|
|
atmos_environment = ENVIRONMENT_LAVALAND
|
|
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface_hard
|
|
var/static/list/allowed_picks_typecache
|
|
|
|
/turf/simulated/mineral/ancient/lava_land_surface_hard/Initialize(mapload)
|
|
. = ..()
|
|
allowed_picks_typecache = typecacheof(list(
|
|
/obj/item/pickaxe/drill/jackhammer,
|
|
/obj/item/pickaxe/diamond,
|
|
/obj/item/pickaxe/drill/cyborg/diamond,
|
|
/obj/item/pickaxe/drill/diamonddrill,
|
|
))
|
|
|
|
/turf/simulated/mineral/ancient/lava_land_surface_hard/invalid_tool(mob/user, obj/item/pickaxe/axe)
|
|
if(..())
|
|
return TRUE
|
|
|
|
if(!(is_type_in_typecache(axe, allowed_picks_typecache)))
|
|
to_chat(user, SPAN_NOTICE("Only diamond tools or a sonic jackhammer can break this rock."))
|
|
return TRUE
|
|
|
|
/turf/simulated/mineral/random/high_chance
|
|
color = COLOR_YELLOW
|
|
mineralChance = 25
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/silver = 50,
|
|
/datum/ore/plasma = 50,
|
|
/datum/ore/gold = 45,
|
|
/datum/ore/titanium = 45,
|
|
/datum/ore/uranium = 35,
|
|
/datum/ore/diamond = 30,
|
|
/datum/ore/bluespace = 20,
|
|
)
|
|
|
|
/turf/simulated/mineral/random/high_chance/space
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/silver = 50,
|
|
/datum/ore/plasma = 50,
|
|
/datum/ore/gold = 45,
|
|
/datum/ore/titanium = 45,
|
|
/datum/ore/uranium = 35,
|
|
/datum/ore/diamond = 30,
|
|
/datum/ore/bluespace = 20,
|
|
/datum/ore/platinum = 25,
|
|
/datum/ore/palladium = 25,
|
|
/datum/ore/iridium = 25
|
|
)
|
|
|
|
/turf/simulated/mineral/random/high_chance/clown
|
|
mineralChance = 40
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/uranium = 35,
|
|
/datum/ore/iron = 30,
|
|
/datum/ore/bananium = 15,
|
|
/datum/ore/tranquillite = 15,
|
|
/datum/ore/bluespace = 10,
|
|
/datum/ore/gold = 5,
|
|
/datum/ore/silver = 5,
|
|
/datum/ore/diamond = 2,
|
|
)
|
|
|
|
/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/lava/mapping_lava
|
|
oxygen = LAVALAND_OXYGEN
|
|
nitrogen = LAVALAND_NITROGEN
|
|
temperature = LAVALAND_TEMPERATURE
|
|
atmos_mode = ATMOS_MODE_EXPOSED_TO_ENVIRONMENT
|
|
atmos_environment = ENVIRONMENT_LAVALAND
|
|
defer_change = 1
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/silver = 50,
|
|
/datum/ore/plasma = 50,
|
|
/datum/ore/gold = 45,
|
|
/datum/ore/titanium = 45,
|
|
/datum/ore/uranium = 35,
|
|
/datum/ore/diamond = 30,
|
|
/datum/ore/bluespace = 20,
|
|
)
|
|
|
|
/turf/simulated/mineral/random/low_chance
|
|
color = COLOR_VIOLET
|
|
mineralChance = 6
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 40,
|
|
/datum/ore/plasma = 15,
|
|
/datum/ore/silver = 6,
|
|
/datum/ore/gold = 4,
|
|
/datum/ore/titanium = 4,
|
|
/datum/ore/gibtonite = 2,
|
|
/datum/ore/uranium = 2,
|
|
/datum/ore/diamond = 1,
|
|
/datum/ore/bluespace = 1,
|
|
)
|
|
|
|
/turf/simulated/mineral/random/low_chance/space
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 40,
|
|
/datum/ore/plasma = 15,
|
|
/datum/ore/silver = 6,
|
|
/datum/ore/gold = 4,
|
|
/datum/ore/titanium = 4,
|
|
/datum/ore/gibtonite = 2,
|
|
/datum/ore/uranium = 2,
|
|
/datum/ore/diamond = 1,
|
|
/datum/ore/bluespace = 1,
|
|
/datum/ore/platinum = 1,
|
|
/datum/ore/palladium = 1,
|
|
/datum/ore/iridium = 1
|
|
)
|
|
|
|
/turf/simulated/mineral/random/volcanic
|
|
environment_type = "basalt"
|
|
turf_type = /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface
|
|
baseturf = /turf/simulated/floor/lava/mapping_lava
|
|
oxygen = LAVALAND_OXYGEN
|
|
nitrogen = LAVALAND_NITROGEN
|
|
temperature = LAVALAND_TEMPERATURE
|
|
atmos_mode = ATMOS_MODE_EXPOSED_TO_ENVIRONMENT
|
|
atmos_environment = ENVIRONMENT_LAVALAND
|
|
defer_change = 1
|
|
|
|
/turf/simulated/mineral/random/labormineral
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 95,
|
|
/datum/ore/plasma = 30,
|
|
/datum/ore/silver = 20,
|
|
/datum/ore/gold = 8,
|
|
/datum/ore/titanium = 8,
|
|
/datum/ore/uranium = 3,
|
|
/datum/ore/gibtonite = 2,
|
|
/datum/ore/diamond = 1,
|
|
)
|
|
color = COLOR_MAROON
|
|
|
|
/turf/simulated/mineral/random/volcanic/labormineral
|
|
mineralSpawnChanceList = list(
|
|
/datum/ore/iron = 95,
|
|
/datum/ore/plasma = 30,
|
|
/datum/ore/silver = 20,
|
|
/datum/ore/titanium = 8,
|
|
/datum/ore/gold = 8,
|
|
/datum/ore/uranium = 3,
|
|
/datum/ore/gibtonite = 2,
|
|
/datum/ore/bluespace = 1,
|
|
/datum/ore/diamond = 1,
|
|
)
|
|
|
|
// Actual minerals
|
|
/turf/simulated/mineral/clown
|
|
preset_ore_type = /datum/ore/bananium
|
|
|
|
/turf/simulated/mineral/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 = LAVALAND_OXYGEN
|
|
nitrogen = LAVALAND_NITROGEN
|
|
temperature = LAVALAND_TEMPERATURE
|
|
atmos_mode = ATMOS_MODE_EXPOSED_TO_ENVIRONMENT
|
|
atmos_environment = ENVIRONMENT_LAVALAND
|
|
defer_change = 1
|
|
|
|
/turf/simulated/mineral/volcanic/clown
|
|
preset_ore_type = /datum/ore/bananium
|
|
|
|
/turf/simulated/mineral/volcanic/lava_land_surface
|
|
baseturf = /turf/simulated/floor/lava/mapping_lava
|