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 075241ce87..b561b8d8dc 100644 Binary files a/icons/turf/flooring/asteroid.dmi and b/icons/turf/flooring/asteroid.dmi differ 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"