diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index b7caf86669a..64e013a4fd5 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -64,6 +64,13 @@ proc/isemptylist(list/list) return 1 return 0 +//Checks for specific paths in a list +/proc/is_path_in_list(var/atom/A, var/list/L) + for(var/path in L) + if(ispath(A, path)) + return 1 + return 0 + //Empties the list by setting the length to 0. Hopefully the elements get garbage collected proc/clearlist(list/list) if(istype(list)) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 37dcbf9f4e4..b54cc6250b0 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -99,16 +99,24 @@ build_cost = 1 build_type = "floor" build_turf = /turf/simulated/floor/plating/airless + else if(!deconstruct && istype(T,/turf/simulated/floor/plating/asteroid)) + build_cost = 1 + build_type = "floor" + build_turf = /turf/simulated/floor/plating else if(deconstruct && istype(T,/turf/simulated/wall)) build_delay = deconstruct ? 50 : 40 build_cost = 5 build_type = (!canRwall && istype(T,/turf/simulated/wall/r_wall)) ? null : "wall" build_turf = /turf/simulated/floor else if(istype(T,/turf/simulated/floor)) + var/turf/simulated/floor/F = T build_delay = deconstruct ? 50 : 20 build_cost = deconstruct ? 10 : 3 build_type = deconstruct ? "floor" : "wall" - build_turf = deconstruct ? /turf/space : /turf/simulated/wall + if(F.check_destroy_override(F)) + build_turf = deconstruct ? destroy_floor_override_path : /turf/simulated/wall + else + build_turf = deconstruct ? /turf/space : /turf/simulated/wall else return 0 diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index a32af450d5e..ca9f44833d6 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -11,9 +11,9 @@ /obj/structure/lattice/New() ..() ///// Z-Level Stuff - if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/floor/open))) +// if(!(istype(src.loc, /turf/space) || istype(src.loc, /turf/simulated/floor/open))) ///// Z-Level Stuff - del(src) +// del(src) for(var/obj/structure/lattice/LAT in src.loc) if(LAT != src) del(LAT) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 9546bf9ba1b..8b7559fc568 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -14,6 +14,16 @@ ..() levelupdate() +/turf/simulated/proc/check_destroy_override() + if(destroy_floor_override) //Don't bother doing the additional checks if we don't have to. + var/area/my_area = get_area(src) + my_area = my_area.master + if(is_type_in_list(my_area, destroy_floor_override_ignore_areas)) + return 0 + if(z in destroy_floor_override_z_levels) + return 1 + return 0 + /turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src if(!tracks) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 07b68a329a7..44dc199e875 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -70,6 +70,8 @@ var/list/wood_icons = list("wood","wood-broken") else icon_regular_floor = icon_state + + //turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) // if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) // if (!( locate(/obj/machinery/mass_driver, src) )) @@ -80,14 +82,23 @@ var/list/wood_icons = list("wood","wood-broken") //set src in oview(1) switch(severity) if(1.0) - src.ChangeTurf(/turf/space) + if(check_destroy_override()) + src.ChangeTurf(destroy_floor_override_path) + else + src.ChangeTurf(/turf/space) if(2.0) switch(pick(1,2;75,3)) if (1) - src.ReplaceWithLattice() + if(check_destroy_override()) + src.ChangeTurf(destroy_floor_override_path) + else + src.ReplaceWithLattice() if(prob(33)) new /obj/item/stack/sheet/metal(src) if(2) - src.ChangeTurf(/turf/space) + if(check_destroy_override()) + src.ChangeTurf(destroy_floor_override_path) + else + src.ChangeTurf(/turf/space) if(3) if(prob(80)) src.break_tile_to_plating() diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 4c4682c5c59..b85224bff7d 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -216,4 +216,48 @@ icon_state = "snow" /turf/simulated/floor/plating/snow/ex_act(severity) - return + return + +/turf/simulated/floor/plating/asteroid //underfloor for the station + name = "asteroid" + icon = 'icons/turf/floors.dmi' + icon_state = "asteroid" + icon_plating = "asteroid" + +/turf/simulated/floor/plating/asteroid/ex_act(severity) + return + +/turf/simulated/floor/plating/asteroid/attackby(obj/item/weapon/W as obj, mob/user as mob) + + if(!W || !user) + return 0 + + if(istype(W, /obj/item/weapon/shovel) || istype(W, /obj/item/weapon/pickaxe)) + user << "This area is unsuitable for digging." + return + + if(istype(W, /obj/item/stack/rods)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + return + var/obj/item/stack/rods/R = W + if (R.use(1)) + user << "Constructing support lattice ..." + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + new /obj/structure/lattice(get_turf(src)) + return + + if(istype(W, /obj/item/stack/tile/plasteel)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + var/obj/item/stack/tile/plasteel/S = W + if (S.get_amount() < 1) + return + del(L) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + S.build(src) + S.use(1) + return + else + user << "The plating is going to need some support." + return \ No newline at end of file diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 969b872caf6..95c8d4aa670 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -183,7 +183,10 @@ /turf/simulated/wall/ex_act(severity) switch(severity) if(1.0) - src.ChangeTurf(/turf/space) + if(check_destroy_override()) + src.ChangeTurf(destroy_floor_override_path) + else + src.ChangeTurf(/turf/space) return if(2.0) if(prob(75)) diff --git a/code/global.dm b/code/global.dm index 38362296492..9527627645f 100644 --- a/code/global.dm +++ b/code/global.dm @@ -86,11 +86,24 @@ var/blobevent = 0 var/diary = null var/href_logfile = null -var/station_name = "NSS Exodus" -var/game_version = "Baystation12" +var/station_name = "Northern Star" +var/game_version = "Polaris" var/changelog_hash = "" var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) + + //On some maps, it does not make sense for space turf to appear when something blows up (e.g. on an asteroid colony, or planetside) + //The turf listed here is what is created after ex_act() and other tile-destroying procs are called on a turf that + //is not already in a blacklisted area. + //Set to 1 to enable it. +var/destroy_floor_override = 1 + //Below is the path of turf used in place of space tiles. +var/destroy_floor_override_path = /turf/simulated/floor/plating/asteroid + //A list of z-levels to apply the override to. This is so z-levels like tcomms work as they did before. +var/list/destroy_floor_override_z_levels = list(1) + //Some areas you may want to not turn into the override path you made above, like space or the solars. +var/list/destroy_floor_override_ignore_areas = list(/area/space,/area/solar,/area/shuttle) + var/going = 1.0 var/master_mode = "extended" // "extended" var/secret_force_mode = "secret" // if this is anything but "secret", the secret rotation will forceably choose this mode. diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index c56bcde6423..1c1de4b0015 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -463,6 +463,32 @@ F.attackby(W,user) return + else if(istype(W, /obj/item/stack/rods)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + return + var/obj/item/stack/rods/R = W + if (R.use(1)) + user << "Constructing support lattice ..." + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + new /obj/structure/lattice(get_turf(src)) + return + + else if(istype(W, /obj/item/stack/tile/plasteel)) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + var/obj/item/stack/tile/plasteel/S = W + if (S.get_amount() < 1) + return + del(L) + playsound(src, 'sound/weapons/Genhit.ogg', 50, 1) + S.build(src) + S.use(1) + return + else + user << "The plating is going to need some support." + return + else ..(W,user) return