From f2cc74d588bffb52e5e7e6b0010b202ad27b5285 Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Fri, 11 Dec 2015 09:48:22 +1030 Subject: [PATCH] # This is a combination of 2 commits. # The first commit's message is: Rewriting the mining turfs to reduce worldstart lag. # This is the 2nd commit message: Map cleanup. --- code/game/base_turf.dm | 6 +- code/game/mecha/equipment/tools/tools.dm | 13 - code/modules/mining/drilling/drill.dm | 6 +- code/modules/mining/mine_items.dm | 2 +- code/modules/mining/mine_turfs.dm | 642 ++++++++++------------ code/modules/random_map/automata/caves.dm | 32 +- code/world.dm | 4 +- icons/turf/flooring/asteroid.dmi | Bin 7065 -> 6976 bytes polaris.dme | 1 - 9 files changed, 322 insertions(+), 384 deletions(-) diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm index ead191c0e7..c524a97ad0 100644 --- a/code/game/base_turf.dm +++ b/code/game/base_turf.dm @@ -1,8 +1,8 @@ // Returns the lowest turf available on a given Z-level, defaults to asteroid for Polaris. var/global/list/base_turf_by_z = list( - "1" = /turf/simulated/floor/asteroid, - "4" = /turf/simulated/floor/asteroid, - "5" = /turf/simulated/floor/asteroid + "1" = /turf/simulated/mineral/floor, + "4" = /turf/simulated/mineral/floor, + "5" = /turf/simulated/mineral/floor ) proc/get_base_turf(var/z) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 8dbefe9a55..41f1ba44ef 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -107,10 +107,6 @@ for(var/obj/item/weapon/ore/ore in range(chassis,1)) if(get_dir(chassis,ore)&chassis.dir) ore.Move(ore_box) - else if(istype(target, /turf/simulated/floor/asteroid)) - for(var/turf/simulated/floor/asteroid/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.gets_dug() log_message("Drilled through [target]") if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo @@ -160,15 +156,6 @@ for(var/obj/item/weapon/ore/ore in range(chassis,1)) if(get_dir(chassis,ore)&chassis.dir) ore.Move(ore_box) - else if(istype(target,/turf/simulated/floor/asteroid)) - for(var/turf/simulated/floor/asteroid/M in range(target,1)) - M.gets_dug() - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(target,1)) - ore.Move(ore_box) else if(target.loc == C) log_message("Drilled through [target]") target.ex_act(2) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index 0f78a2785a..440f1283e0 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -74,11 +74,7 @@ return //Drill through the flooring, if any. - if(istype(get_turf(src), /turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/T = get_turf(src) - if(!T.dug) - T.gets_dug() - else if(istype(get_turf(src), /turf/simulated/floor)) + if(istype(get_turf(src), /turf/simulated/floor)) var/turf/simulated/floor/T = get_turf(src) T.ex_act(2.0) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index f0c6f215f3..71d1d807bd 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -235,7 +235,7 @@ var/obj/item/stack/flag/F = locate() in get_turf(src) var/turf/T = get_turf(src) - if(!T || !istype(T,/turf/simulated/floor/asteroid)) + if(!T || !istype(T,/turf/simulated/mineral)) user << "The flag won't stand up in this terrain." return diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 03fadf92a5..f462dd3e31 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -5,7 +5,7 @@ icon_state = "rock-dark" /turf/simulated/mineral //wall piece - name = "Rock" + name = "rock" icon = 'icons/turf/walls.dmi' icon_state = "rock" oxygen = 0 @@ -14,11 +14,13 @@ density = 1 blocks_air = 1 temperature = T0C - var/mined_turf = /turf/simulated/floor/asteroid + var/ore/mineral + var/sand_dug var/mined_ore = 0 var/last_act = 0 var/emitter_blasts_taken = 0 // EMITTER MINING! Muhehe. + var/overlay_detail var/datum/geosample/geologic_data var/excavation_level = 0 @@ -28,26 +30,108 @@ var/excav_overlay = "" var/obj/item/weapon/last_find var/datum/artifact_find/artifact_find + var/ignore_mapgen has_resources = 1 -/turf/simulated/mineral/New() - spawn(0) - MineralSpread() - spawn(2) - updateMineralOverlays(1) +/turf/simulated/mineral/ignore_mapgen + ignore_mapgen = 1 -/turf/simulated/mineral/proc/updateMineralOverlays(var/update_neighbors) - var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST) - for(var/direction in step_overlays) - var/turf/turf_to_check = get_step(src,step_overlays[direction]) - if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/asteroid)) - var/turf/simulated/floor/asteroid/T = turf_to_check - T.updateMineralOverlays() - else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor)) - turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]") +/turf/simulated/mineral/floor + name = "sand" + icon = 'icons/turf/flooring/asteroid.dmi' + icon_state = "asteroid" + density = 0 + opacity = 0 + +/turf/simulated/mineral/floor/ignore_mapgen + ignore_mapgen = 1 + +/turf/simulated/mineral/proc/make_floor() + if(!density && !opacity) + return + density = 0 + opacity = 0 + update_icon() + reconsider_lights() + +/turf/simulated/mineral/proc/make_wall() + if(density && opacity) + return + density = 1 + opacity = 1 + update_icon() + reconsider_lights() + +/turf/simulated/mineral/Entered(atom/movable/M as mob|obj) + . = ..() + if(istype(M,/mob/living/silicon/robot)) + var/mob/living/silicon/robot/R = M + if(R.module) + if(istype(R.module_state_1,/obj/item/weapon/storage/bag/ore)) + attackby(R.module_state_1,R) + else if(istype(R.module_state_2,/obj/item/weapon/storage/bag/ore)) + attackby(R.module_state_2,R) + else if(istype(R.module_state_3,/obj/item/weapon/storage/bag/ore)) + attackby(R.module_state_3,R) + else + return + +/turf/simulated/mineral/initialize() + if(prob(20)) + overlay_detail = "asteroid[rand(0,9)]" + if(density) + spawn(0) + MineralSpread() + update_icon(1) + +/turf/simulated/mineral/update_icon(var/update_neighbors) + + overlays.Cut() + var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) + + if(density) + if(mineral) + name = "[mineral.display_name] deposit" + else + name = "rock" + + icon = 'icons/turf/walls.dmi' + icon_state = "rock" + + for(var/direction in step_overlays) + var/turf/T = get_step(src,step_overlays[direction]) + if(istype(T) && !T.density) + T.overlays += image('icons/turf/walls.dmi', "rock_side", dir = turn(step_overlays[direction], 180)) + else + + name = "sand" + icon = 'icons/turf/flooring/asteroid.dmi' + icon_state = "asteroid" + + if(sand_dug) + overlays += image('icons/turf/flooring/asteroid.dmi', "dug_overlay") + + for(var/direction in step_overlays) + if(istype(get_step(src, step_overlays[direction]), /turf/space)) + overlays += image('icons/turf/flooring/asteroid.dmi', "asteroid_edges", dir = step_overlays[direction]) + else + var/turf/simulated/mineral/M = get_step(src, step_overlays[direction]) + if(istype(M) && M.density) + overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[direction]) + + if(overlay_detail) + overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail) + + if(update_neighbors) + var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST) + for(var/direction in all_step_directions) + if(istype(get_step(src, direction), /turf/simulated/mineral)) + var/turf/simulated/mineral/M = get_step(src, direction) + M.update_icon() /turf/simulated/mineral/ex_act(severity) + switch(severity) if(2.0) if (prob(70)) @@ -62,13 +146,17 @@ // Emitter blasts if(istype(Proj, /obj/item/projectile/beam/emitter)) emitter_blasts_taken++ - if(emitter_blasts_taken > 2) // 3 blasts per tile mined_ore = 1 GetDrilled() /turf/simulated/mineral/Bumped(AM) + . = ..() + + if(!density) + return . + if(istype(AM,/mob/living/carbon/human)) var/mob/living/carbon/human/H = AM if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand)) @@ -91,7 +179,7 @@ for(var/trydir in cardinal) if(prob(mineral.spread_chance)) var/turf/simulated/mineral/target_turf = get_step(src, trydir) - if(istype(target_turf) && !target_turf.mineral) + if(istype(target_turf) && target_turf.density && !target_turf.mineral) target_turf.mineral = mineral target_turf.UpdateMineral() target_turf.MineralSpread() @@ -99,143 +187,185 @@ /turf/simulated/mineral/proc/UpdateMineral() clear_ore_effects() - if(!mineral) - name = "\improper Rock" - icon_state = "rock" - return - name = "\improper [mineral.display_name] deposit" - new /obj/effect/mineral(src, mineral) + if(mineral) + new /obj/effect/mineral(src, mineral) + update_icon() //Not even going to touch this pile of spaghetti /turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob) if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") - usr << "\red You don't have the dexterity to do this!" + usr << "You don't have the dexterity to do this!" return - if (istype(W, /obj/item/device/core_sampler)) - geologic_data.UpdateNearbyArtifactInfo(src) - var/obj/item/device/core_sampler/C = W - C.sample_item(src, user) - return + if(!density) - if (istype(W, /obj/item/device/depth_scanner)) - var/obj/item/device/depth_scanner/C = W - C.scan_atom(user, src) - return + var/list/usable_tools = list( + /obj/item/weapon/shovel, + /obj/item/weapon/pickaxe/diamonddrill, + /obj/item/weapon/pickaxe/drill, + /obj/item/weapon/pickaxe/borgdrill + ) - if (istype(W, /obj/item/device/measuring_tape)) - var/obj/item/device/measuring_tape/P = W - user.visible_message("\blue[user] extends [P] towards [src].","\blue You extend [P] towards [src].") - if(do_after(user,25)) - user << "\blue \icon[P] [src] has been excavated to a depth of [2*excavation_level]cm." - return + var/valid_tool + for(var/valid_type in usable_tools) + if(istype(W,valid_type)) + valid_tool = 1 + break - if (istype(W, /obj/item/weapon/pickaxe)) - var/turf/T = user.loc - if (!( istype(T, /turf) )) - return - - var/obj/item/weapon/pickaxe/P = W - if(last_act + P.digspeed > world.time)//prevents message spam - return - last_act = world.time - - playsound(user, P.drill_sound, 20, 1) - - //handle any archaeological finds we might uncover - var/fail_message - if(finds && finds.len) - var/datum/find/F = finds[1] - if(excavation_level + P.excavation_amount > F.excavation_required) - //Chance to destroy / extract any finds here - fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]" - - user << "\red You start [P.drill_verb][fail_message ? fail_message : ""]." - - if(fail_message && prob(90)) - if(prob(25)) - excavate_find(5, finds[1]) - else if(prob(50)) - finds.Remove(finds[1]) - if(prob(50)) - artifact_debris() - - if(do_after(user,P.digspeed)) - user << "\blue You finish [P.drill_verb] the rock." - - if(finds && finds.len) - var/datum/find/F = finds[1] - if(round(excavation_level + P.excavation_amount) == F.excavation_required) - //Chance to extract any items here perfectly, otherwise just pull them out along with the rock surrounding them - if(excavation_level + P.excavation_amount > F.excavation_required) - //if you can get slightly over, perfect extraction - excavate_find(100, F) - else - excavate_find(80, F) - - else if(excavation_level + P.excavation_amount > F.excavation_required - F.clearance_range) - //just pull the surrounding rock out - excavate_find(0, F) - - if( excavation_level + P.excavation_amount >= 100 ) - //if players have been excavating this turf, leave some rocky debris behind - var/obj/structure/boulder/B - if(artifact_find) - if( excavation_level > 0 || prob(15) ) - //boulder with an artifact inside - B = new(src) - if(artifact_find) - B.artifact_find = artifact_find - else - artifact_debris(1) - else if(prob(15)) - //empty boulder - B = new(src) - - if(B) - GetDrilled(0) - else - GetDrilled(1) + if(valid_tool) + if (sand_dug) + user << "This area has already been dug." return - excavation_level += P.excavation_amount + var/turf/T = user.loc + if (!(istype(T))) + return - //archaeo overlays - if(!archaeo_overlay && finds && finds.len) - var/datum/find/F = finds[1] - if(F.excavation_required <= excavation_level + F.view_range) - archaeo_overlay = "overlay_archaeo[rand(1,3)]" - overlays += archaeo_overlay + user << "You start digging." + playsound(user.loc, 'sound/effects/rustle1.ogg', 50, 1) - //there's got to be a better way to do this - var/update_excav_overlay = 0 - if(excavation_level >= 75) - if(excavation_level - P.excavation_amount < 75) - update_excav_overlay = 1 - else if(excavation_level >= 50) - if(excavation_level - P.excavation_amount < 50) - update_excav_overlay = 1 - else if(excavation_level >= 25) - if(excavation_level - P.excavation_amount < 25) - update_excav_overlay = 1 + if(!do_after(user,40)) return - //update overlays displaying excavation level - if( !(excav_overlay && excavation_level > 0) || update_excav_overlay ) - var/excav_quadrant = round(excavation_level / 25) + 1 - excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]" - overlays += excav_overlay - - //drop some rocks - next_rock += P.excavation_amount * 10 - while(next_rock > 100) - next_rock -= 100 - var/obj/item/weapon/ore/O = new(src) - geologic_data.UpdateNearbyArtifactInfo(src) - O.geologic_data = geologic_data + user << "You dug a hole." + GetDrilled() + else if(istype(W,/obj/item/weapon/storage/bag/ore)) + var/obj/item/weapon/storage/bag/ore/S = W + if(S.collection_mode) + for(var/obj/item/weapon/ore/O in contents) + O.attackby(W,user) + return + else if(istype(W,/obj/item/weapon/storage/bag/fossils)) + var/obj/item/weapon/storage/bag/fossils/S = W + if(S.collection_mode) + for(var/obj/item/weapon/fossil/F in contents) + F.attackby(W,user) + return else - return attack_hand(user) + if (istype(W, /obj/item/device/core_sampler)) + geologic_data.UpdateNearbyArtifactInfo(src) + var/obj/item/device/core_sampler/C = W + C.sample_item(src, user) + return + + if (istype(W, /obj/item/device/depth_scanner)) + var/obj/item/device/depth_scanner/C = W + C.scan_atom(user, src) + return + + if (istype(W, /obj/item/device/measuring_tape)) + var/obj/item/device/measuring_tape/P = W + user.visible_message("\The [user] extends \a [P] towards \the [src].","You extend \the [P] towards \the [src].") + if(do_after(user,25)) + user << "\icon[P] [src] has been excavated to a depth of [2*excavation_level]cm." + return + + if (istype(W, /obj/item/weapon/pickaxe)) + var/turf/T = user.loc + if (!( istype(T, /turf) )) + return + + var/obj/item/weapon/pickaxe/P = W + if(last_act + P.digspeed > world.time)//prevents message spam + return + last_act = world.time + + playsound(user, P.drill_sound, 20, 1) + + //handle any archaeological finds we might uncover + var/fail_message + if(finds && finds.len) + var/datum/find/F = finds[1] + if(excavation_level + P.excavation_amount > F.excavation_required) + //Chance to destroy / extract any finds here + fail_message = ". [pick("There is a crunching noise","[W] collides with some different rock","Part of the rock face crumbles away","Something breaks under [W]")]" + + user << "You start [P.drill_verb][fail_message ? fail_message : ""]." + + if(fail_message && prob(90)) + if(prob(25)) + excavate_find(5, finds[1]) + else if(prob(50)) + finds.Remove(finds[1]) + if(prob(50)) + artifact_debris() + + if(do_after(user,P.digspeed)) + user << "You finish [P.drill_verb] \the [src]." + + if(finds && finds.len) + var/datum/find/F = finds[1] + if(round(excavation_level + P.excavation_amount) == F.excavation_required) + //Chance to extract any items here perfectly, otherwise just pull them out along with the rock surrounding them + if(excavation_level + P.excavation_amount > F.excavation_required) + //if you can get slightly over, perfect extraction + excavate_find(100, F) + else + excavate_find(80, F) + + else if(excavation_level + P.excavation_amount > F.excavation_required - F.clearance_range) + //just pull the surrounding rock out + excavate_find(0, F) + + if( excavation_level + P.excavation_amount >= 100 ) + //if players have been excavating this turf, leave some rocky debris behind + var/obj/structure/boulder/B + if(artifact_find) + if( excavation_level > 0 || prob(15) ) + //boulder with an artifact inside + B = new(src) + if(artifact_find) + B.artifact_find = artifact_find + else + artifact_debris(1) + else if(prob(15)) + //empty boulder + B = new(src) + + if(B) + GetDrilled(0) + else + GetDrilled(1) + return + + excavation_level += P.excavation_amount + + //archaeo overlays + if(!archaeo_overlay && finds && finds.len) + var/datum/find/F = finds[1] + if(F.excavation_required <= excavation_level + F.view_range) + archaeo_overlay = "overlay_archaeo[rand(1,3)]" + overlays += archaeo_overlay + + //there's got to be a better way to do this + var/update_excav_overlay = 0 + if(excavation_level >= 75) + if(excavation_level - P.excavation_amount < 75) + update_excav_overlay = 1 + else if(excavation_level >= 50) + if(excavation_level - P.excavation_amount < 50) + update_excav_overlay = 1 + else if(excavation_level >= 25) + if(excavation_level - P.excavation_amount < 25) + update_excav_overlay = 1 + + //update overlays displaying excavation level + if( !(excav_overlay && excavation_level > 0) || update_excav_overlay ) + var/excav_quadrant = round(excavation_level / 25) + 1 + excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]" + overlays += excav_overlay + + //drop some rocks + next_rock += P.excavation_amount * 10 + while(next_rock > 100) + next_rock -= 100 + var/obj/item/weapon/ore/O = new(src) + geologic_data.UpdateNearbyArtifactInfo(src) + O.geologic_data = geologic_data + return + + return attack_hand(user) /turf/simulated/mineral/proc/clear_ore_effects() for(var/obj/effect/mineral/M in contents) @@ -244,7 +374,6 @@ /turf/simulated/mineral/proc/DropMineral() if(!mineral) return - clear_ore_effects() var/obj/item/weapon/ore/O = new mineral.ore (src) if(istype(O)) @@ -253,7 +382,15 @@ return O /turf/simulated/mineral/proc/GetDrilled(var/artifact_fail = 0) - //var/destroyed = 0 //used for breaking strange rocks + + if(!density) + if(!sand_dug) + sand_dug = 1 + for(var/i=0;i<(rand(3)+2);i++) + new/obj/item/weapon/ore/glass(src) + update_icon() + return + if (mineral && mineral.result_amount) //if the turf has already been excavated, some of it's ore has been removed @@ -267,7 +404,7 @@ if(prob(50)) pain = 1 for(var/mob/living/M in range(src, 200)) - M << "[pick("A high pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!" + M << "[pick("A high-pitched [pick("keening","wailing","whistle")]","A rumbling noise like [pick("thunder","heavy machinery")]")] somehow penetrates your mind before fading away!" if(pain) flick("pain",M.pain) if(prob(50)) @@ -278,25 +415,17 @@ M.Stun(5) M.apply_effect(25, IRRADIATE) - - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - - //Add some rubble, you did just clear out a big chunk of rock. - - var/turf/simulated/floor/asteroid/N = ChangeTurf(mined_turf) - // Kill and update the space overlays around us. + var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) for(var/direction in step_overlays) var/turf/space/T = get_step(src, step_overlays[direction]) if(istype(T)) T.overlays.Cut() for(var/next_direction in step_overlays) if(istype(get_step(T, step_overlays[next_direction]),/turf/simulated/mineral)) - T.overlays += image('icons/turf/walls.dmi', "rock_side_[next_direction]") + T.overlays += image('icons/turf/walls.dmi', "rock_side", dir = step_overlays[next_direction]) - if(istype(N)) - N.overlay_detail = "asteroid[rand(0,9)]" - N.updateMineralOverlays(1) + make_floor() /turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F) //with skill and luck, players can cleanly extract finds @@ -311,7 +440,7 @@ //some find types delete the /obj/item/weapon/archaeological_find and replace it with something else, this handles when that happens //yuck - var/display_name = "something" + var/display_name = "Something" if(!X) X = last_find if(X) @@ -322,12 +451,11 @@ var/obj/effect/suspension_field/S = locate() in src if(!S || S.field_type != get_responsive_reagent(F.find_type)) if(X) - visible_message("\red[pick("[display_name] crumbles away into dust","[display_name] breaks apart")].") + visible_message("\The [pick("[display_name] crumbles away into dust","[display_name] breaks apart")].") qdel(X) finds.Remove(F) - /turf/simulated/mineral/proc/artifact_debris(var/severity = 0) //cael's patented random limited drop componentized loot system! //sky's patented not-fucking-retarded overhaul! @@ -336,152 +464,24 @@ for(var/j in 1 to rand(1, 3 + max(min(severity, 1), 0) * 2)) switch(rand(1,7)) if(1) - var/obj/item/stack/rods/R = new(src) - R.amount = rand(5,25) - + new /obj/item/stack/rods(src, rand(5,25)) if(2) - var/obj/item/stack/material/plasteel/R = new(src) - R.amount = rand(5,25) - + new /obj/item/stack/material/plasteel(src, rand(5,25)) if(3) - var/obj/item/stack/material/steel/R = new(src) - R.amount = rand(5,25) - + new /obj/item/stack/material/steel(src, rand(5,25)) if(4) - var/obj/item/stack/material/plasteel/R = new(src) - R.amount = rand(5,25) - + new /obj/item/stack/material/plasteel(src, rand(5,25)) if(5) - var/quantity = rand(1,3) - for(var/i=0, iConstructing support lattice ..." - playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) - new /obj/structure/lattice(get_turf(src)) +/turf/simulated/mineral/proc/make_ore(var/rare_ore) + if(mineral) return else if(istype(W, /obj/item/stack/tile/floor)) @@ -500,55 +500,9 @@ return else - ..(W,user) - return - -/turf/simulated/floor/asteroid/proc/gets_dug() - - if(dug) - return - - for(var/i=0;i<(rand(3)+2);i++) - new/obj/item/weapon/ore/glass(src) - - dug = 1 - icon_state = "asteroid_dug" - return - -/turf/simulated/floor/asteroid/proc/updateMineralOverlays(var/update_neighbors) - - overlays.Cut() - - var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST) - for(var/direction in step_overlays) - - if(istype(get_step(src, step_overlays[direction]), /turf/space)) - overlays += image('icons/turf/floors.dmi', "asteroid_edge_[direction]") - - if(istype(get_step(src, step_overlays[direction]), /turf/simulated/mineral)) - overlays += image('icons/turf/walls.dmi', "rock_side_[direction]") - - //todo cache - if(overlay_detail) overlays |= image(icon = 'icons/turf/flooring/decals.dmi', icon_state = overlay_detail) - - if(update_neighbors) - var/list/all_step_directions = list(NORTH,NORTHEAST,EAST,SOUTHEAST,SOUTH,SOUTHWEST,WEST,NORTHWEST) - for(var/direction in all_step_directions) - var/turf/simulated/floor/asteroid/A - if(istype(get_step(src, direction), /turf/simulated/floor/asteroid)) - A = get_step(src, direction) - A.updateMineralOverlays() - -/turf/simulated/floor/asteroid/Entered(atom/movable/M as mob|obj) - ..() - if(istype(M,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/R = M - if(R.module) - if(istype(R.module_state_1,/obj/item/weapon/storage/bag/ore)) - attackby(R.module_state_1,R) - else if(istype(R.module_state_2,/obj/item/weapon/storage/bag/ore)) - attackby(R.module_state_2,R) - else if(istype(R.module_state_3,/obj/item/weapon/storage/bag/ore)) - attackby(R.module_state_3,R) - else - return \ No newline at end of file + mineral_name = pickweight(list("Uranium" = 5, "Platinum" = 5, "Iron" = 35, "Coal" = 35, "Diamond" = 1, "Gold" = 5, "Silver" = 5, "Phoron" = 10)) + mineral_name = lowertext(mineral_name) + if(mineral_name && (mineral_name in ore_data)) + mineral = ore_data[mineral_name] + UpdateMineral() + update_icon() diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm index fe959c72b5..30e6f1376a 100644 --- a/code/modules/random_map/automata/caves.dm +++ b/code/modules/random_map/automata/caves.dm @@ -1,23 +1,10 @@ /datum/random_map/automata/cave_system iterations = 5 descriptor = "moon caves" - wall_type = /turf/simulated/mineral - floor_type = /turf/simulated/floor/asteroid - target_turf_type = /turf/unsimulated/mask - var/mineral_sparse = /turf/simulated/mineral/random - var/mineral_rich = /turf/simulated/mineral/random/high_chance var/list/ore_turfs = list() /datum/random_map/automata/cave_system/get_appropriate_path(var/value) - switch(value) - if(DOOR_CHAR) - return mineral_sparse - if(EMPTY_CHAR) - return mineral_rich - if(FLOOR_CHAR) - return floor_type - if(WALL_CHAR) - return wall_type + return /datum/random_map/automata/cave_system/get_map_char(var/value) switch(value) @@ -50,3 +37,20 @@ map[check_cell] = EMPTY_CHAR // Rare mineral block. ore_count-- return 1 + +/datum/random_map/automata/cave_system/apply_to_turf(var/x,var/y) + var/current_cell = get_map_cell(x,y) + if(!current_cell) + return 0 + var/turf/simulated/mineral/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z) + if(istype(T) && !T.ignore_mapgen) + if(map[current_cell] == FLOOR_CHAR) + T.make_floor() + else + T.make_wall() + if(map[current_cell] == DOOR_CHAR) + T.make_ore() + else if(map[current_cell] == EMPTY_CHAR) + T.make_ore(1) + get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y)) + return T \ No newline at end of file diff --git a/code/world.dm b/code/world.dm index 2b5d541f74..a046f2e059 100644 --- a/code/world.dm +++ b/code/world.dm @@ -91,9 +91,7 @@ var/global/datum/global_init/init = new () // Update all turfs to ensure everything looks good post-generation. Yes, // it's brute-forcey, but frankly the alternative is a mine turf rewrite. for(var/turf/simulated/mineral/M in world) // Ugh. - M.updateMineralOverlays() - for(var/turf/simulated/floor/asteroid/M in world) // Uuuuuugh. - M.updateMineralOverlays() + M.update_icon() // Create autolathe recipes, as above. populate_lathe_recipes() diff --git a/icons/turf/flooring/asteroid.dmi b/icons/turf/flooring/asteroid.dmi index 075241ce87b8282f9d88efa5985404df26aa007f..b561b8d8dca22e3754f9794e253d00b1b16328da 100644 GIT binary patch literal 6976 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 Dl%vb& diff --git a/polaris.dme b/polaris.dme index d337865505..85b53114e9 100644 --- a/polaris.dme +++ b/polaris.dme @@ -1659,7 +1659,6 @@ #include "code\modules\random_map\mazes\maze.dm" #include "code\modules\random_map\mazes\maze_cell.dm" #include "code\modules\random_map\noise\desert.dm" -#include "code\modules\random_map\noise\magma.dm" #include "code\modules\random_map\noise\noise.dm" #include "code\modules\random_map\noise\ore.dm" #include "code\modules\random_map\noise\tundra.dm"