mirror of
https://github.com/goonstation/goonstation-2016.git
synced 2026-08-24 14:36:14 +01:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,477 @@
|
||||
/datum/mining_encounter
|
||||
var/name = null
|
||||
var/info = null
|
||||
var/rarity_tier = 0
|
||||
|
||||
proc/generate(var/obj/magnet_target_marker/target)
|
||||
return 0
|
||||
|
||||
/datum/mining_encounter/asteroid_small
|
||||
name = "Small Asteroid"
|
||||
rarity_tier = -1
|
||||
|
||||
generate(var/obj/magnet_target_marker/target)
|
||||
if (..())
|
||||
return
|
||||
var/list/generated_turfs
|
||||
var/size = 3
|
||||
|
||||
var/magnetic_center = mining_controls.magnetic_center
|
||||
var/area_restriction = /area/mining/magnet
|
||||
if (target)
|
||||
magnetic_center = target.magnetic_center
|
||||
area_restriction = null
|
||||
|
||||
generated_turfs = Turfspawn_Asteroid_Round(magnetic_center, /turf/simulated/wall/asteroid, size, 0, area_restriction)
|
||||
|
||||
var/quality = rand(-101,101)
|
||||
for (var/turf/simulated/wall/asteroid/AST in generated_turfs)
|
||||
AST.quality = quality
|
||||
AST.space_overlays()
|
||||
AST.build_icon()
|
||||
|
||||
for (var/turf/simulated/floor/plating/airless/asteroid/AST in generated_turfs)
|
||||
AST.update_icon()
|
||||
|
||||
Turfspawn_Asteroid_SeedOre(generated_turfs,rand(2,6),rand(0,40))
|
||||
Turfspawn_Asteroid_SeedEvents(Turfspawn_Asteroid_CheckForModifiableTurfs(generated_turfs),rand(1,6))
|
||||
|
||||
/datum/mining_encounter/asteroid
|
||||
name = "Asteroid"
|
||||
rarity_tier = 1
|
||||
|
||||
generate(var/obj/magnet_target_marker/target)
|
||||
if (..())
|
||||
return
|
||||
var/list/generated_turfs
|
||||
var/size = rand(mining_controls.min_magnet_spawn_size, mining_controls.max_magnet_spawn_size)
|
||||
|
||||
var/magnetic_center = mining_controls.magnetic_center
|
||||
var/area_restriction = /area/mining/magnet
|
||||
if (target)
|
||||
magnetic_center = target.magnetic_center
|
||||
area_restriction = null
|
||||
|
||||
var/rand_num = rand(1,3)
|
||||
switch(rand_num)
|
||||
if (1)
|
||||
generated_turfs = Turfspawn_Asteroid_DegradeFromCenter(magnetic_center, /turf/simulated/wall/asteroid, size, 10, area_restriction)
|
||||
if (2)
|
||||
var/list/turfs_near_center = list()
|
||||
for(var/turf/space/S in orange(4,magnetic_center))
|
||||
turfs_near_center += S
|
||||
|
||||
var/chunks = rand(2,6)
|
||||
while(chunks > 0)
|
||||
chunks--
|
||||
generated_turfs = generated_turfs + Turfspawn_Asteroid_Round(pick(turfs_near_center), /turf/simulated/wall/asteroid, rand(2,4), 0, area_restriction)
|
||||
else
|
||||
generated_turfs = Turfspawn_Asteroid_Round(magnetic_center, /turf/simulated/wall/asteroid, size, 0, area_restriction)
|
||||
|
||||
var/quality = rand(-101,101)
|
||||
for (var/turf/simulated/wall/asteroid/AST in generated_turfs)
|
||||
AST.quality = quality
|
||||
AST.space_overlays()
|
||||
AST.build_icon()
|
||||
|
||||
for (var/turf/simulated/floor/plating/airless/asteroid/AST in generated_turfs)
|
||||
AST.update_icon()
|
||||
|
||||
Turfspawn_Asteroid_SeedOre(generated_turfs,rand(2,6),0)
|
||||
Turfspawn_Asteroid_SeedEvents(Turfspawn_Asteroid_CheckForModifiableTurfs(generated_turfs),rand(1,6))
|
||||
|
||||
/datum/mining_encounter/comet_chunk
|
||||
name = "Comet Chunk"
|
||||
rarity_tier = 2
|
||||
|
||||
generate(var/obj/magnet_target_marker/target)
|
||||
if (..())
|
||||
return
|
||||
var/list/generated_turfs
|
||||
var/size = rand(mining_controls.min_magnet_spawn_size, mining_controls.max_magnet_spawn_size)
|
||||
|
||||
var/magnetic_center = mining_controls.magnetic_center
|
||||
var/area_restriction = /area/mining/magnet
|
||||
if (target)
|
||||
magnetic_center = target.magnetic_center
|
||||
area_restriction = null
|
||||
|
||||
generated_turfs = Turfspawn_Asteroid_Round(magnetic_center, /turf/simulated/wall/asteroid/ice, size, 0, area_restriction)
|
||||
|
||||
var/quality = rand(-101,101)
|
||||
for (var/turf/simulated/wall/asteroid/AST in generated_turfs)
|
||||
AST.quality = quality
|
||||
AST.space_overlays()
|
||||
AST.build_icon()
|
||||
|
||||
for (var/turf/simulated/floor/plating/airless/asteroid/AST in generated_turfs)
|
||||
AST.update_icon()
|
||||
|
||||
Turfspawn_Asteroid_SeedOre(generated_turfs,rand(1,2),40)
|
||||
Turfspawn_Asteroid_SeedEvents(Turfspawn_Asteroid_CheckForModifiableTurfs(generated_turfs),rand(4,12))
|
||||
|
||||
/datum/mining_encounter/wreckage
|
||||
name = "Wreckage"
|
||||
rarity_tier = 2
|
||||
|
||||
generate(var/obj/magnet_target_marker/target)
|
||||
if (..())
|
||||
return
|
||||
|
||||
var/magnetic_center = mining_controls.magnetic_center
|
||||
var/area_restriction = /area/mining/magnet
|
||||
if (target)
|
||||
magnetic_center = target.magnetic_center
|
||||
area_restriction = null
|
||||
|
||||
var/size = rand(mining_controls.min_magnet_spawn_size, mining_controls.max_magnet_spawn_size)
|
||||
Turfspawn_Wreckage(magnetic_center, size, 0, area_restriction)
|
||||
|
||||
/datum/mining_encounter/geode
|
||||
name = "Geode"
|
||||
rarity_tier = 3
|
||||
|
||||
generate(var/obj/magnet_target_marker/target)
|
||||
if (..())
|
||||
return
|
||||
|
||||
var/magnetic_center = mining_controls.magnetic_center
|
||||
var/area_restriction = /area/mining/magnet
|
||||
if (target)
|
||||
magnetic_center = target.magnetic_center
|
||||
area_restriction = null
|
||||
|
||||
var/list/generated_turfs = Turfspawn_Asteroid_Round(magnetic_center, /turf/simulated/wall/asteroid/geode, 7, 1, area_restriction)
|
||||
|
||||
var/quality = rand(0,101)
|
||||
for (var/turf/simulated/wall/asteroid/AST in generated_turfs)
|
||||
AST.quality = quality
|
||||
AST.space_overlays()
|
||||
AST.build_icon()
|
||||
|
||||
var/list/floors = list()
|
||||
var/list/gems = list(/obj/item/raw_material/uqill,/obj/item/raw_material/miracle,/obj/item/raw_material/gemstone,
|
||||
/obj/item/raw_material/telecrystal,/obj/item/raw_material/fibrilith)
|
||||
for (var/turf/simulated/floor/plating/airless/asteroid/T in generated_turfs)
|
||||
floors += T
|
||||
|
||||
var/amount = rand(20,40)
|
||||
var/the_gem = null
|
||||
while (amount > 0)
|
||||
amount--
|
||||
the_gem = pick(gems)
|
||||
new the_gem(pick(floors))
|
||||
|
||||
// Terrain Gen Procs
|
||||
|
||||
// Checks
|
||||
|
||||
/proc/Turfspawn_CheckForNearbyTurfsOfType(var/turf/center,var/turfpath,var/include_diagonals = 1)
|
||||
if (!center || !istype(center,/turf/) || !ispath(turfpath))
|
||||
return 0
|
||||
if (include_diagonals)
|
||||
for (var/turf/A in range(1,center))
|
||||
if (A.type == turfpath)
|
||||
return 1
|
||||
else
|
||||
var/turf/checked
|
||||
for (var/dir in cardinal)
|
||||
checked = get_step(center, dir)
|
||||
if (istype(checked,turfpath))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/Turfspawn_CheckForFreeSpace(var/turf/space/center,var/size)
|
||||
if (!istype(center))
|
||||
return list()
|
||||
if (!isnum(size))
|
||||
return list()
|
||||
|
||||
var/list/acceptable_turfs = list()
|
||||
var/loopbroken = 0
|
||||
|
||||
for (var/turf/space/TF in range(center,size))
|
||||
loopbroken = 0
|
||||
if (TF.loc.type != /area)
|
||||
asteroid_blocked_turfs += TF
|
||||
continue
|
||||
if (TF.x <= turf_spawn_edge_limit || TF.x >= world.maxx - turf_spawn_edge_limit)
|
||||
asteroid_blocked_turfs += TF
|
||||
continue
|
||||
if (TF.y <= turf_spawn_edge_limit || TF.y >= world.maxy - turf_spawn_edge_limit)
|
||||
asteroid_blocked_turfs += TF
|
||||
continue
|
||||
for (var/obj/O in TF.contents)
|
||||
if (O.density)
|
||||
asteroid_blocked_turfs += TF
|
||||
loopbroken = 1
|
||||
break
|
||||
if (istype(O, /obj/landmark/asteroid_spawn_blocker))
|
||||
qdel(O)
|
||||
asteroid_blocked_turfs += TF
|
||||
loopbroken = 1
|
||||
break
|
||||
if (!loopbroken)
|
||||
acceptable_turfs += TF
|
||||
|
||||
return acceptable_turfs
|
||||
|
||||
/proc/Turfspawn_Asteroid_CheckForModifiableTurfs(var/list/turfs)
|
||||
if (!turfs || turfs.len < 1)
|
||||
return list()
|
||||
var/list/acceptable_turfs = list()
|
||||
|
||||
for (var/turf/simulated/wall/asteroid/AST in turfs)
|
||||
if (AST.ore || AST.event)
|
||||
continue
|
||||
acceptable_turfs += AST
|
||||
|
||||
return acceptable_turfs
|
||||
|
||||
// Generators
|
||||
|
||||
/proc/Turfspawn_Asteroid_DegradeFromCenter(var/turf/space/center, var/base_rock = /turf/simulated/wall/asteroid, var/size = 8, var/degradation = 10, var/area/area_restriction = null)
|
||||
if (!istype(center))
|
||||
return list()
|
||||
if (!isnum(size) || size < 1)
|
||||
size = rand(5,15)
|
||||
if (!ispath(base_rock,/turf/simulated/wall/asteroid))
|
||||
return list()
|
||||
|
||||
var/current_chance = 100
|
||||
var/current_range = 0
|
||||
var/list/generated_turfs = list()
|
||||
|
||||
var/turf/simulated/wall/asteroid/A
|
||||
A = new base_rock(locate(center.x, center.y, center.z),0)
|
||||
generated_turfs += A
|
||||
var/turf/simulated/wall/asteroid/B
|
||||
|
||||
while (current_range < size - 1)
|
||||
current_range++
|
||||
current_chance -= degradation
|
||||
for (var/turf/space/S in range(current_range,A))
|
||||
if (get_dist(S,A) == current_range)
|
||||
if (S in asteroid_blocked_turfs)
|
||||
continue
|
||||
if (!Turfspawn_CheckForNearbyTurfsOfType(S,base_rock,1))
|
||||
continue
|
||||
if (!prob(current_chance))
|
||||
continue
|
||||
if (area_restriction && S.loc.type != area_restriction)
|
||||
continue
|
||||
B = new base_rock(locate(S.x, S.y, S.z),0)
|
||||
generated_turfs += B
|
||||
|
||||
return generated_turfs
|
||||
|
||||
/proc/Turfspawn_Asteroid_Round(var/turf/space/center, var/base_rock = /turf/simulated/wall/asteroid, var/size = 8, var/hollow = 0, var/area/area_restriction = null)
|
||||
if (!istype(center))
|
||||
return list()
|
||||
if (!isnum(size) || size < 1)
|
||||
size = rand(5,15)
|
||||
if (!ispath(base_rock,/turf/simulated/wall/asteroid))
|
||||
return list()
|
||||
|
||||
var/current_range = 0
|
||||
var/list/generated_turfs = list()
|
||||
|
||||
var/turf/A
|
||||
if (hollow)
|
||||
A = new /turf/simulated/floor/plating/airless/asteroid(locate(center.x, center.y, center.z),0)
|
||||
else
|
||||
A = new base_rock(locate(center.x, center.y, center.z),0)
|
||||
generated_turfs += A
|
||||
var/turf/simulated/wall/asteroid/B
|
||||
var/turf/simulated/floor/plating/airless/asteroid/F
|
||||
|
||||
var/corner_range = round(size * 1.5)
|
||||
var/total_distance = 0
|
||||
|
||||
var/stone_color
|
||||
|
||||
while (current_range < size - 1)
|
||||
current_range++
|
||||
total_distance = 0
|
||||
for (var/turf/space/S in range(current_range,A))
|
||||
if (get_dist(S,A) == current_range)
|
||||
if (S in asteroid_blocked_turfs)
|
||||
continue
|
||||
total_distance = abs(A.x - S.x) + abs(A.y - S.y) + (current_range / 2)
|
||||
if (total_distance > corner_range)
|
||||
continue
|
||||
if (area_restriction && S.loc.type != area_restriction)
|
||||
continue
|
||||
if (hollow && total_distance < size / 2)
|
||||
F = new /turf/simulated/floor/plating/airless/asteroid(locate(S.x, S.y, S.z),0)
|
||||
//F.stone_color = B.stone_color
|
||||
generated_turfs += F
|
||||
else
|
||||
B = new base_rock(locate(S.x, S.y, S.z),0)
|
||||
stone_color = B.stone_color
|
||||
generated_turfs += B
|
||||
|
||||
|
||||
for (var/turf/simulated/floor/plating/airless/asteroid/FLOOR in generated_turfs)
|
||||
FLOOR.color = stone_color
|
||||
|
||||
return generated_turfs
|
||||
|
||||
/proc/Turfspawn_Wreckage(var/turf/space/center,var/size = 6,var/area/area_restriction = null)
|
||||
if (!istype(center))
|
||||
return list()
|
||||
if (!isnum(size) || size < 1)
|
||||
size = rand(3,6)
|
||||
|
||||
var/current_chance = 100
|
||||
var/current_range = 0
|
||||
var/list/generated_turfs = list()
|
||||
|
||||
var/turf/A = new /turf/simulated/floor/plating/airless(locate(center.x, center.y, center.z),0)
|
||||
generated_turfs += A
|
||||
var/turf/B = null
|
||||
|
||||
while (current_range < size - 1)
|
||||
current_range++
|
||||
current_chance = max(2,min(current_chance - 25,100))
|
||||
for (var/turf/space/S in range(current_range,A))
|
||||
if (get_dist(S,A) == current_range)
|
||||
if (S in asteroid_blocked_turfs)
|
||||
continue
|
||||
if (!Turfspawn_CheckForNearbyTurfsOfType(S,/turf/simulated/floor/plating/airless,1))
|
||||
continue
|
||||
if (area_restriction && S.loc.type != area_restriction)
|
||||
continue
|
||||
|
||||
if (prob(current_chance))
|
||||
B = new /turf/simulated/floor/plating/airless(locate(S.x, S.y, S.z),0)
|
||||
generated_turfs += B
|
||||
else
|
||||
if (prob(round(current_chance / 2)))
|
||||
switch(rand(1,6))
|
||||
if(4)
|
||||
new /obj/decal/cleanable/robot_debris/gib(locate(S.x, S.y, S.z),0)
|
||||
if(5)
|
||||
new /obj/decal/cleanable/machine_debris(locate(S.x, S.y, S.z),0)
|
||||
if(6)
|
||||
new /obj/grille/steel/broken(locate(S.x, S.y, S.z),0)
|
||||
else
|
||||
new /obj/lattice(locate(S.x, S.y, S.z),0)
|
||||
|
||||
var/num_items = rand(4,20)
|
||||
var/datum/material/scrap_material = null
|
||||
|
||||
switch(RarityClassRoll(100,0,list(90,50)))
|
||||
if(1)
|
||||
scrap_material = getCachedMaterial(pick("steel","mauxite"))
|
||||
if(2)
|
||||
scrap_material = getCachedMaterial(pick("cobryl","bohrum"))
|
||||
if(3)
|
||||
scrap_material = getCachedMaterial(pick("gold","syreline"))
|
||||
|
||||
var/list/turfs_near_center = list()
|
||||
for(var/turf/T in range(size - 1,center))
|
||||
turfs_near_center += T
|
||||
|
||||
var/picker = 0
|
||||
var/obj/item/I = null
|
||||
while(num_items > 0)
|
||||
num_items--
|
||||
picker = rand(1,6)
|
||||
switch(picker)
|
||||
if (1 to 3)
|
||||
I = new /obj/item/raw_material/scrap_metal(pick(turfs_near_center))
|
||||
I.setMaterial(scrap_material)
|
||||
if (4)
|
||||
I = new /obj/item/sheet(pick(turfs_near_center))
|
||||
I.amount = rand(1,5)
|
||||
I.setMaterial(scrap_material)
|
||||
if (5)
|
||||
if (prob(15))
|
||||
Artifact_Spawn(pick(turfs_near_center))
|
||||
else
|
||||
I = new /obj/item/rods(pick(turfs_near_center))
|
||||
I.amount = rand(2,10)
|
||||
I.setMaterial(scrap_material)
|
||||
if (6)
|
||||
if (prob(15))
|
||||
new /obj/storage/crate/loot(pick(turfs_near_center))
|
||||
else
|
||||
new /obj/item/cable_coil/cut(pick(turfs_near_center))
|
||||
|
||||
|
||||
return generated_turfs
|
||||
|
||||
// Modifiers
|
||||
|
||||
/proc/Turfspawn_Asteroid_SeedOre(var/list/turfs,var/veins,var/rarity_mod = 0)
|
||||
if (!turfs || turfs.len < 1)
|
||||
return list()
|
||||
|
||||
if (!isnum(veins) && veins <= 1)
|
||||
veins = rand(2,6)
|
||||
if (!isnum(rarity_mod))
|
||||
rarity_mod = 0
|
||||
|
||||
while (veins > 0)
|
||||
veins--
|
||||
if (turfs.len < 1)
|
||||
break
|
||||
var/rarity_roller = RarityClassRoll(100,rarity_mod,list(90,50))
|
||||
var/list/ores_to_pick = list()
|
||||
switch(rarity_roller)
|
||||
if(3) // rare tier
|
||||
ores_to_pick = mining_controls.ore_types_rare
|
||||
if(2) // uncommon tier
|
||||
ores_to_pick = mining_controls.ore_types_uncommon
|
||||
else // common tier
|
||||
ores_to_pick = mining_controls.ore_types_common
|
||||
|
||||
var/datum/ore/O = pick(ores_to_pick)
|
||||
var/ore_tiles = rand(O.tiles_per_rock_min,O.tiles_per_rock_max)
|
||||
|
||||
while (ore_tiles > 0)
|
||||
if (turfs.len < 1)
|
||||
break
|
||||
ore_tiles--
|
||||
var/turf/simulated/wall/asteroid/AST = pick(turfs)
|
||||
if (!istype(AST))
|
||||
turfs -= AST
|
||||
ore_tiles++
|
||||
continue
|
||||
AST.ore = O
|
||||
AST.hardness += O.hardness_mod
|
||||
AST.amount = rand(O.amount_per_tile_min,O.amount_per_tile_max)
|
||||
var/image/ore_overlay = image('icons/turf/asteroid.dmi',O.name)
|
||||
ore_overlay.transform = turn(ore_overlay.transform, pick(0,90,180,-90))
|
||||
ore_overlay.pixel_x += rand(-6,6)
|
||||
ore_overlay.pixel_y += rand(-6,6)
|
||||
AST.overlays += ore_overlay
|
||||
if (prob(O.event_chance) && O.events.len > 0)
|
||||
var/new_event = pick(O.events)
|
||||
var/datum/ore/event/E = new new_event
|
||||
E.set_up(O)
|
||||
AST.set_event(E)
|
||||
|
||||
turfs -= AST
|
||||
|
||||
/proc/Turfspawn_Asteroid_SeedEvents(var/list/turfs,var/amount)
|
||||
if (!turfs || turfs.len < 1)
|
||||
return list()
|
||||
if (!isnum(amount) || amount <= 0)
|
||||
amount = rand(1,6)
|
||||
|
||||
var/datum/ore/event/E
|
||||
var/turf/simulated/wall/asteroid/AST
|
||||
|
||||
while (amount > 0)
|
||||
amount--
|
||||
if (turfs.len < 1)
|
||||
break
|
||||
E = pick(mining_controls.events)
|
||||
AST = pick(turfs)
|
||||
if (!istype(AST) || (E.restrict_to_turf_type && AST.type != E.restrict_to_turf_type))
|
||||
turfs -= AST
|
||||
amount++
|
||||
continue
|
||||
AST.set_event(E)
|
||||
@@ -0,0 +1,187 @@
|
||||
/obj/item/goldbar //deprecated, needs getting rid of except the map is being weird about it
|
||||
name = "fool's pyrite bar"
|
||||
desc = "It's gold that isn't. Except it is. MINDFUCK"
|
||||
icon = 'icons/obj/materials.dmi'
|
||||
icon_state = "gold-bar"
|
||||
force = 8
|
||||
throwforce = 10
|
||||
//metal = 1
|
||||
//conductor = 1
|
||||
New()
|
||||
src.material = getCachedMaterial("gold")
|
||||
return ..()
|
||||
|
||||
/datum/ore
|
||||
var/name = null
|
||||
var/output = null
|
||||
var/list/events = list()
|
||||
var/list/gems = list()
|
||||
var/rarity_tier = 1
|
||||
var/amount_per_tile_min = 1
|
||||
var/amount_per_tile_max = 3
|
||||
var/tiles_per_rock_min = 7
|
||||
var/tiles_per_rock_max = 25
|
||||
var/hardness_mod = 0
|
||||
var/event_chance = 8
|
||||
|
||||
proc/set_up()
|
||||
return 0
|
||||
|
||||
proc/onGenerate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (!istype(AST))
|
||||
return 1
|
||||
|
||||
proc/onHit(var/turf/simulated/wall/asteroid/AST)
|
||||
if (!istype(AST))
|
||||
return 1
|
||||
|
||||
proc/onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (!istype(AST))
|
||||
return 1
|
||||
|
||||
/datum/ore/mauxite
|
||||
name = "mauxite"
|
||||
output = /obj/item/raw_material/mauxite
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/uqill,/obj/item/raw_material/fibrilith)
|
||||
hardness_mod = 1
|
||||
|
||||
/datum/ore/pharosium
|
||||
name = "pharosium"
|
||||
output = /obj/item/raw_material/pharosium
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/uqill,/obj/item/raw_material/fibrilith)
|
||||
hardness_mod = 1
|
||||
|
||||
/datum/ore/molitz
|
||||
name = "molitz"
|
||||
output = /obj/item/raw_material/molitz
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/uqill,/obj/item/raw_material/fibrilith)
|
||||
hardness_mod = 1
|
||||
|
||||
/datum/ore/char
|
||||
name = "char"
|
||||
output = /obj/item/raw_material/char
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/fibrilith)
|
||||
tiles_per_rock_min = 6
|
||||
tiles_per_rock_max = 16
|
||||
amount_per_tile_min = 2
|
||||
amount_per_tile_max = 6
|
||||
hardness_mod = -1
|
||||
|
||||
/datum/ore/ice
|
||||
name = "ice"
|
||||
output = /obj/item/raw_material/ice
|
||||
hardness_mod = -2
|
||||
|
||||
/datum/ore/cobryl
|
||||
name = "cobryl"
|
||||
output = /obj/item/raw_material/cobryl
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/uqill,/obj/item/raw_material/miracle)
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 16
|
||||
hardness_mod = 2
|
||||
|
||||
/datum/ore/bohrum
|
||||
name = "bohrum"
|
||||
output = /obj/item/raw_material/bohrum
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/telecrystal,/obj/item/raw_material/miracle)
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 16
|
||||
hardness_mod = 3
|
||||
rarity_tier = 2
|
||||
|
||||
/datum/ore/claretine
|
||||
name = "claretine"
|
||||
output = /obj/item/raw_material/claretine
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/telecrystal,/obj/item/raw_material/miracle)
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 16
|
||||
hardness_mod = 3
|
||||
rarity_tier = 2
|
||||
|
||||
/datum/ore/viscerite
|
||||
name = "viscerite"
|
||||
output = /obj/item/raw_material/martian
|
||||
events = list()
|
||||
gems = list()
|
||||
event_chance = 0
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 16
|
||||
hardness_mod = 2
|
||||
rarity_tier = 2
|
||||
|
||||
/datum/ore/syreline
|
||||
name = "syreline"
|
||||
output = /obj/item/raw_material/syreline
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/telecrystal,/obj/item/raw_material/miracle)
|
||||
amount_per_tile_min = 2
|
||||
amount_per_tile_max = 3
|
||||
hardness_mod = 4
|
||||
rarity_tier = 3
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 10
|
||||
|
||||
/datum/ore/cerenkite
|
||||
name = "cerenkite"
|
||||
output = /obj/item/raw_material/cerenkite
|
||||
events = list(/datum/ore/event/gem,/datum/ore/event/radioactive)
|
||||
gems = list(/obj/item/raw_material/uqill,/obj/item/raw_material/miracle)
|
||||
hardness_mod = 3
|
||||
rarity_tier = 3
|
||||
event_chance = 15
|
||||
amount_per_tile_min = 1
|
||||
amount_per_tile_max = 2
|
||||
tiles_per_rock_min = 2
|
||||
tiles_per_rock_max = 8
|
||||
|
||||
onHit(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
for (var/mob/living/L in range(1,AST))
|
||||
L.irradiate(5)
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
for (var/mob/living/L in range(1,AST))
|
||||
L.irradiate(10)
|
||||
|
||||
/datum/ore/plasmastone
|
||||
name = "plasmastone"
|
||||
output = /obj/item/raw_material/plasmastone
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/uqill,/obj/item/raw_material/miracle)
|
||||
hardness_mod = 2
|
||||
rarity_tier = 3
|
||||
tiles_per_rock_min = 2
|
||||
tiles_per_rock_max = 8
|
||||
amount_per_tile_min = 1
|
||||
amount_per_tile_max = 2
|
||||
|
||||
/datum/ore/koshmarite
|
||||
name = "koshmarite"
|
||||
output = /obj/item/raw_material/eldritch
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/uqill,/obj/item/raw_material/miracle)
|
||||
event_chance = 12
|
||||
tiles_per_rock_min = 4
|
||||
tiles_per_rock_max = 16
|
||||
hardness_mod = 2
|
||||
rarity_tier = 3
|
||||
|
||||
/datum/ore/gold
|
||||
name = "gold"
|
||||
output = /obj/item/raw_material/gold
|
||||
events = list(/datum/ore/event/gem)
|
||||
gems = list(/obj/item/raw_material/gemstone,/obj/item/raw_material/telecrystal,/obj/item/raw_material/miracle)
|
||||
tiles_per_rock_min = 2
|
||||
tiles_per_rock_max = 8
|
||||
hardness_mod = 4
|
||||
rarity_tier = 3
|
||||
@@ -0,0 +1,134 @@
|
||||
/datum/ore/event
|
||||
var/analysis_string = "Caution! Anomaly detected!"
|
||||
var/excavation_string = null
|
||||
var/distribution_range = 2
|
||||
var/nearby_tile_distribution_min = 0
|
||||
var/nearby_tile_distribution_max = 0
|
||||
var/scan_decal = null
|
||||
var/prevent_excavation = 0
|
||||
var/restrict_to_turf_type = null
|
||||
|
||||
set_up(var/datum/ore/event/parent_event)
|
||||
..()
|
||||
if (parent_event)
|
||||
if (!istype(parent_event, /datum/ore/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/datum/ore/event/gem
|
||||
analysis_string = "Small extraneous mineral deposit detected."
|
||||
excavation_string = "Something shiny tumbles out of the collapsing rock!"
|
||||
scan_decal = "scan-gem"
|
||||
var/gem_type = /obj/item/raw_material/gemstone
|
||||
|
||||
set_up(var/datum/ore/parent)
|
||||
if (..() || !parent)
|
||||
return 1
|
||||
if (parent.gems.len < 1)
|
||||
return 1
|
||||
gem_type = pick(parent.gems)
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
var/obj/item/I = new gem_type(AST)
|
||||
I.quality = AST.quality + rand(-50,50)
|
||||
I.name = "[getGemQualityName(I.quality)] [I.name]"
|
||||
score_gemsmined++
|
||||
|
||||
/datum/ore/event/rock_worm
|
||||
analysis_string = "Caution! Life signs detected!"
|
||||
excavation_string = "A rock worm jumps out of the collapsing rock!"
|
||||
scan_decal = "scan-object"
|
||||
restrict_to_turf_type = /turf/simulated/wall/asteroid
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
new /obj/critter/rockworm(AST)
|
||||
|
||||
/datum/ore/event/loot_crate
|
||||
analysis_string = "Caution! Large object embedded in rock!"
|
||||
excavation_string = "An abandoned crate was unearthed!"
|
||||
scan_decal = "scan-object"
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
new /obj/storage/crate/loot(AST)
|
||||
|
||||
/datum/ore/event/artifact
|
||||
analysis_string = "Caution! Large object embedded in rock!"
|
||||
excavation_string = "An artifact was unearthed!"
|
||||
scan_decal = "scan-object"
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
Artifact_Spawn(AST)
|
||||
|
||||
/datum/ore/event/soft_rock
|
||||
analysis_string = "Caution! Weak rock formation detected!"
|
||||
hardness_mod = -1
|
||||
distribution_range = 4
|
||||
nearby_tile_distribution_min = 4
|
||||
nearby_tile_distribution_max = 12
|
||||
scan_decal = "scan-soft"
|
||||
|
||||
onGenerate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
AST.hardness += hardness_mod
|
||||
|
||||
/datum/ore/event/hard_rock
|
||||
analysis_string = "Caution! Dense rock formation detected!"
|
||||
hardness_mod = 1
|
||||
distribution_range = 4
|
||||
nearby_tile_distribution_min = 4
|
||||
nearby_tile_distribution_max = 12
|
||||
scan_decal = "scan-hard"
|
||||
|
||||
onGenerate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
AST.hardness += hardness_mod
|
||||
AST.amount += rand(1,3)
|
||||
|
||||
/datum/ore/event/volatile
|
||||
analysis_string = "Caution! Volatile compounds detected!"
|
||||
scan_decal = "scan-danger"
|
||||
prevent_excavation = 1
|
||||
restrict_to_turf_type = /turf/simulated/wall/asteroid
|
||||
var/image/warning_overlay = null
|
||||
|
||||
New()
|
||||
..()
|
||||
warning_overlay = image('icons/turf/asteroid.dmi', "unstable")
|
||||
|
||||
onHit(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
AST.overlays += warning_overlay
|
||||
var/timer = rand(3,6) * 10
|
||||
spawn(timer)
|
||||
AST.invincible = 0
|
||||
explosion(AST, AST, 1, 2, 3, 4, 1)
|
||||
|
||||
/datum/ore/event/radioactive
|
||||
analysis_string = "Caution! Radioactive mineral deposits detected!"
|
||||
nearby_tile_distribution_min = 4
|
||||
nearby_tile_distribution_max = 8
|
||||
scan_decal = "scan-danger"
|
||||
restrict_to_turf_type = /turf/simulated/wall/asteroid
|
||||
|
||||
onHit(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
for (var/mob/living/L in range(1,AST))
|
||||
L.irradiate(5)
|
||||
|
||||
onExcavate(var/turf/simulated/wall/asteroid/AST)
|
||||
if (..())
|
||||
return
|
||||
for (var/mob/living/L in range(1,AST))
|
||||
L.irradiate(10)
|
||||
Reference in New Issue
Block a user