From d43e8320b245d21fe15b9792c18f21a9c6d76312 Mon Sep 17 00:00:00 2001 From: AnturK Date: Wed, 3 Jun 2015 21:57:11 +0200 Subject: [PATCH 1/2] Adds area generators to build mode Adds two generators : Asteroid and Syndicate Syndicate templates Finish syndicate templates Moves border and repressurize to helpers.dm Repressurize generator Shuttle generator Buildmode now resets the corners when switching modes/generators --- code/modules/admin/verbs/buildmode.dm | 106 +++++++++++++----- .../mapGeneratorModules/helpers.dm | 44 ++++++++ .../mapGenerators/asteroid.dm | 45 ++++++++ .../mapGenerators/shuttle.dm | 15 +++ .../mapGenerators/syndicate.dm | 52 +++++++++ icons/misc/buildmode.dmi | Bin 911 -> 944 bytes tgstation.dme | 4 + 7 files changed, 240 insertions(+), 26 deletions(-) create mode 100644 code/modules/procedural mapping/mapGeneratorModules/helpers.dm create mode 100644 code/modules/procedural mapping/mapGenerators/asteroid.dm create mode 100644 code/modules/procedural mapping/mapGenerators/shuttle.dm create mode 100644 code/modules/procedural mapping/mapGenerators/syndicate.dm diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 767f30e1380..d06bd7e61c8 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -1,3 +1,10 @@ +#define BASIC_BUILDMODE 1 +#define ADV_BUILDMODE 2 +#define VAR_BUILDMODE 3 +#define THROW_BUILDMODE 4 +#define AREA_BUILDMODE 5 +#define NUM_BUILDMODES 5 + /proc/togglebuildmode(mob/M as mob in player_list) set name = "Toggle Build Mode" set category = "Special Verbs" @@ -35,7 +42,7 @@ M.client.screen += D H.cl = M.client -/obj/effect/bmode//Cleaning up the tree a bit +/obj/effect/bmode //Cleaning up the tree a bit density = 1 anchored = 1 layer = 20 @@ -68,7 +75,7 @@ /obj/effect/bmode/buildhelp/Click() switch(master.cl.buildmode) - if(1) + if(BASIC_BUILDMODE) usr << "\blue ***********************************************************" usr << "\blue Left Mouse Button = Construct / Upgrade" usr << "\blue Right Mouse Button = Deconstruct / Delete / Downgrade" @@ -78,7 +85,7 @@ usr << "\blue Use the button in the upper left corner to" usr << "\blue change the direction of built objects." usr << "\blue ***********************************************************" - if(2) + if(ADV_BUILDMODE) usr << "\blue ***********************************************************" usr << "\blue Right Mouse Button on buildmode button = Set object type" usr << "\blue Left Mouse Button on turf/obj = Place objects" @@ -87,17 +94,23 @@ usr << "\blue Use the button in the upper left corner to" usr << "\blue change the direction of built objects." usr << "\blue ***********************************************************" - if(3) + if(VAR_BUILDMODE) usr << "\blue ***********************************************************" usr << "\blue Right Mouse Button on buildmode button = Select var(type) & value" usr << "\blue Left Mouse Button on turf/obj/mob = Set var(type) & value" usr << "\blue Right Mouse Button on turf/obj/mob = Reset var's value" usr << "\blue ***********************************************************" - if(4) + if(THROW_BUILDMODE) usr << "\blue ***********************************************************" usr << "\blue Left Mouse Button on turf/obj/mob = Select" usr << "\blue Right Mouse Button on turf/obj/mob = Throw" usr << "\blue ***********************************************************" + if(AREA_BUILDMODE) + usr << "\blue ***********************************************************" + usr << "\blue Left Mouse Button on turf/obj/mob = Select corner" + usr << "\blue Right Mouse Button on buildmode button = Select generator" + usr << "\blue ***********************************************************" + return 1 /obj/effect/bmode/buildquit @@ -117,6 +130,13 @@ var/obj/effect/bmode/buildmode/buildmode = null var/obj/effect/bmode/buildquit/buildquit = null var/atom/movable/throw_atom = null + var/turf/cornerA = null + var/turf/cornerB = null + var/generator_path = null + +/obj/effect/bmode/buildholder/proc/Reset()//Reset temporary variables + cornerA = null + cornerB = null /obj/effect/bmode/buildmode icon_state = "buildmode1" @@ -129,25 +149,15 @@ var/list/pa = params2list(params) if(pa.Find("left")) - switch(master.cl.buildmode) - if(1) - master.cl.buildmode = 2 - src.icon_state = "buildmode2" - if(2) - master.cl.buildmode = 3 - src.icon_state = "buildmode3" - if(3) - master.cl.buildmode = 4 - src.icon_state = "buildmode4" - if(4) - master.cl.buildmode = 1 - src.icon_state = "buildmode1" + master.cl.buildmode = (master.cl.buildmode % NUM_BUILDMODES) +1 + master.Reset() + src.icon_state = "buildmode[master.cl.buildmode]" else if(pa.Find("right")) switch(master.cl.buildmode) - if(1) + if(BASIC_BUILDMODE) return 1 - if(2) + if(ADV_BUILDMODE) objholder = text2path(input(usr,"Enter typepath:" ,"Typepath","/obj/structure/closet")) if(!ispath(objholder)) objholder = /obj/structure/closet @@ -155,7 +165,7 @@ else if(ispath(objholder,/mob) && !check_rights(R_DEBUG,0)) objholder = /obj/structure/closet - if(3) + if(VAR_BUILDMODE) var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name") @@ -174,6 +184,16 @@ master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as obj in world if("turf-reference") master.buildmode.valueholder = input(usr,"Enter variable value:" ,"Value") as turf in world + if(AREA_BUILDMODE) + var/list/gen_paths = typesof(/datum/mapGenerator) - /datum/mapGenerator + + var/type = input(usr,"Select Generator Type","Type") as null|anything in gen_paths + if(!type) return + + master.generator_path = type + master.cornerA = null + master.cornerB = null + return 1 @@ -186,8 +206,11 @@ if(!holder) return var/list/pa = params2list(params) + if(istype(object,/obj/effect/bmode)) + return + switch(buildmode) - if(1) + if(BASIC_BUILDMODE) if(istype(object,/turf) && pa.Find("left") && !pa.Find("alt") && !pa.Find("ctrl") ) var/turf/T = object if(istype(object,/turf/space)) @@ -233,7 +256,7 @@ var/obj/structure/window/reinforced/WIN = new/obj/structure/window/reinforced(get_turf(object)) WIN.dir = NORTHWEST log_admin("Build Mode: [key_name(usr)] built a window at ([object.x],[object.y],[object.z])") - if(2) + if(ADV_BUILDMODE) if(pa.Find("left")) if(ispath(holder.buildmode.objholder,/turf)) var/turf/T = get_turf(object) @@ -248,7 +271,7 @@ log_admin("Build Mode: [key_name(usr)] deleted [object] at ([object.x],[object.y],[object.z])") qdel(object) - if(3) + if(VAR_BUILDMODE) if(pa.Find("left")) //I cant believe this shit actually compiles. if(object.vars.Find(holder.buildmode.varholder)) log_admin("Build Mode: [key_name(usr)] modified [object.name]'s [holder.buildmode.varholder] to [holder.buildmode.valueholder]") @@ -262,7 +285,7 @@ else usr << "[initial(object.name)] does not have a var called '[holder.buildmode.varholder]'" - if(4) + if(THROW_BUILDMODE) if(pa.Find("left")) if(isturf(object)) return @@ -271,4 +294,35 @@ if(holder.throw_atom) holder.throw_atom.throw_at(object, 10, 1) log_admin("Build Mode: [key_name(usr)] threw [holder.throw_atom] at [object] ([object.x],[object.y],[object.z])") - + if(AREA_BUILDMODE) + if(!holder.cornerA) + holder.cornerA = get_turf(object) + return + if(holder.cornerA && !holder.cornerB) + holder.cornerB = get_turf(object) + + if(pa.Find("left")) //rectangular + if(holder.cornerA && holder.cornerB) + if(!holder.generator_path) + usr << "Select generator type first." + var/datum/mapGenerator/G = new holder.generator_path + G.defineRegion(holder.cornerA,holder.cornerB,1) + G.generate() + holder.cornerA = null + holder.cornerB = null + return + /* Something wrong with this, will check later + if(pa.Find("right")) // circular + if(holder.cornerA && holder.cornerB) + if(!holder.generator_path) + usr << "Select generator type first." + var/datum/mapGenerator/G = new holder.generator_path + G.defineCircularRegion(holder.cornerA,holder.cornerB,1) + G.generate() + holder.cornerA = null + holder.cornerB = null + return + */ + //Something wrong - Reset + holder.cornerA = null + holder.cornerB = null \ No newline at end of file diff --git a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm new file mode 100644 index 00000000000..bad449a9e8f --- /dev/null +++ b/code/modules/procedural mapping/mapGeneratorModules/helpers.dm @@ -0,0 +1,44 @@ +//Helper Modules + + +// Helper to repressurize the area in case it was run in space +/datum/mapGeneratorModule/bottomLayer/repressurize + spawnableAtoms = list() + spawnableTurfs = list() + +/datum/mapGeneratorModule/bottomLayer/repressurize/generate() + if(!mother) + return + var/list/map = mother.map + for(var/turf/simulated/T in map) + SSair.remove_from_active(T) + for(var/turf/simulated/T in map) + if(T.air) + T.air.oxygen = T.oxygen + T.air.nitrogen = T.nitrogen + T.air.carbon_dioxide = T.carbon_dioxide + T.air.toxins = T.toxins + T.air.temperature = T.temperature + SSair.add_to_active(T) + +//Only places atoms/turfs on area borders +/datum/mapGeneratorModule/border + clusterCheckFlags = CLUSTER_CHECK_NONE + +/datum/mapGeneratorModule/border/generate() + if(!mother) + return + var/list/map = mother.map + for(var/turf/T in map) + if(is_border(T)) + place(T) + +/datum/mapGeneratorModule/border/proc/is_border(var/turf/T) + for(var/direction in list(SOUTH,EAST,WEST,NORTH)) + if (get_step(T,direction) in mother.map) + continue + return 1 + return 0 + +/datum/mapGenerator/repressurize + modules = list(/datum/mapGeneratorModule/bottomLayer/repressurize) \ No newline at end of file diff --git a/code/modules/procedural mapping/mapGenerators/asteroid.dm b/code/modules/procedural mapping/mapGenerators/asteroid.dm new file mode 100644 index 00000000000..4dc002aa56a --- /dev/null +++ b/code/modules/procedural mapping/mapGenerators/asteroid.dm @@ -0,0 +1,45 @@ +//Asteroid turfs +/datum/mapGeneratorModule/bottomLayer/asteroidTurfs + spawnableTurfs = list(/turf/simulated/floor/plating/asteroid = 100) + +/datum/mapGeneratorModule/bottomLayer/asteroidWalls + spawnableTurfs = list(/turf/simulated/mineral = 100) + +//Border walls +/datum/mapGeneratorModule/border/asteroidWalls + spawnableAtoms = list() + spawnableTurfs = list(/turf/simulated/mineral = 100) + +//Random walls +/datum/mapGeneratorModule/splatterLayer/asteroidWalls + clusterCheckFlags = CLUSTER_CHECK_NONE + spawnableAtoms = list() + spawnableTurfs = list(/turf/simulated/mineral = 30) + +//Monsters +/datum/mapGeneratorModule/splatterLayer/asteroidMonsters + spawnableTurfs = list() + spawnableAtoms = list(/mob/living/simple_animal/hostile/asteroid/basilisk = 10, \ + /mob/living/simple_animal/hostile/asteroid/hivelord = 10, \ + /mob/living/simple_animal/hostile/asteroid/goliath = 10) + + +// GENERATORS + +/datum/mapGenerator/asteroid/hollow + modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ + /datum/mapGeneratorModule/border/asteroidWalls) + +/datum/mapGenerator/asteroid/hollow/random + modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ + /datum/mapGeneratorModule/border/asteroidWalls, \ + /datum/mapGeneratorModule/splatterLayer/asteroidWalls) + +/datum/mapGenerator/asteroid/hollow/random/monsters + modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidTurfs, \ + /datum/mapGeneratorModule/border/asteroidWalls, \ + /datum/mapGeneratorModule/splatterLayer/asteroidWalls, \ + /datum/mapGeneratorModule/splatterLayer/asteroidMonsters) + +/datum/mapGenerator/asteroid/filled + modules = list(/datum/mapGeneratorModule/bottomLayer/asteroidWalls) \ No newline at end of file diff --git a/code/modules/procedural mapping/mapGenerators/shuttle.dm b/code/modules/procedural mapping/mapGenerators/shuttle.dm new file mode 100644 index 00000000000..c532a70226c --- /dev/null +++ b/code/modules/procedural mapping/mapGenerators/shuttle.dm @@ -0,0 +1,15 @@ +/datum/mapGeneratorModule/bottomLayer/shuttleFloor + spawnableTurfs = list(/turf/simulated/shuttle/floor = 100) + +/datum/mapGeneratorModule/border/shuttleWalls + spawnableAtoms = list() + spawnableTurfs = list(/turf/simulated/shuttle/wall = 100) +// Generators + +/datum/mapGenerator/shuttle/full + modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor, \ + /datum/mapGeneratorModule/border/shuttleWalls,\ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/shuttle/floor + modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor) diff --git a/code/modules/procedural mapping/mapGenerators/syndicate.dm b/code/modules/procedural mapping/mapGenerators/syndicate.dm new file mode 100644 index 00000000000..c7f029ef269 --- /dev/null +++ b/code/modules/procedural mapping/mapGenerators/syndicate.dm @@ -0,0 +1,52 @@ +// Modules + +/turf/simulated/shuttle/floor/syndicate //TODO: move to proper file/replace syndie shuttle turfs + icon_state = "floor4" + +/datum/mapGeneratorModule/bottomLayer/syndieFloor + spawnableTurfs = list(/turf/simulated/shuttle/floor/syndicate = 100) + +/datum/mapGeneratorModule/border/syndieWalls + spawnableAtoms = list() + spawnableTurfs = list(/turf/simulated/wall/r_wall = 100) + + +/datum/mapGeneratorModule/syndieFurniture + clusterCheckFlags = CLUSTER_CHECK_ALL + spawnableTurfs = list() + spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/stool/bed/chair = 15,/obj/structure/stool = 10, \ + /obj/structure/computerframe = 15, /obj/item/weapon/storage/toolbox/syndicate = 15 ,\ + /obj/structure/closet/syndicate = 25, /obj/machinery/suit_storage_unit/syndicate = 15) + +/datum/mapGeneratorModule/splatterLayer/syndieMobs + spawnableAtoms = list(/mob/living/simple_animal/hostile/syndicate = 30, \ + /mob/living/simple_animal/hostile/syndicate/melee = 20, \ + /mob/living/simple_animal/hostile/syndicate/ranged = 20, \ + /mob/living/simple_animal/hostile/viscerator = 30) + spawnableTurfs = list() + +// Generators + +/datum/mapGenerator/syndicate/empty //walls and floor only + modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ + /datum/mapGeneratorModule/border/syndieWalls,\ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/syndicate/mobsonly + modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ + /datum/mapGeneratorModule/border/syndieWalls,\ + /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/syndicate/furniture + modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ + /datum/mapGeneratorModule/border/syndieWalls,\ + /datum/mapGeneratorModule/syndieFurniture, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/syndicate/full + modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \ + /datum/mapGeneratorModule/border/syndieWalls,\ + /datum/mapGeneratorModule/syndieFurniture, \ + /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) \ No newline at end of file diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index a885e76d549d102dcd6434e04434e6bb64adde35..089427111f2f5bc779167b3c22ce191d71f82ff5 100644 GIT binary patch delta 774 zcmV+h1Nr=q2e1c_I2*vgzyJW5P$ckm00001bW%=J06^y0W&i*Hkdae@e~4FVic6`o zf~%hkI0gWa32}(R|7#)u00ON^L_t(&f$f+Ja^oNjhLam)_XhhoL9OutR=SC2eE%aX zAi#hDOOQ@GZJ5b4e`-Dp&;z*LrrVFK>Gl2R@1*^DX!Y&>XGz-I!)w4?m;aBt1t6LO z01-|Bh}eWt01%)vVH7|Je+V=Ku&Xcws4pW0O``y04Wj_l(P>`c0f6agbz*=P0AzJy zKmsT`oHV)i?{WXj-|)Qw<&e}vr~-PEC;@brQ3B{Xk_gatWkvARgGmv-b$}v)G{RY) z!Wsa15^W_EaT;#{#D(Mxm@RG7#q|@k&$>TQ`@suviblEi2?c#Pe}x^2Tr&V|IK%OP zLOTF(M#AubMl--wK0F>!Xa_+40m1_s%>XXA#{&xeWdO62IK7P1jx_Dc^T9M7&hrW7 zn*(0^gRi+i$WJ6^eF?zD1sd3}ujwiPlCACt0Mgw$cYp!_U4ZQ!&kH_R#15sd0Ngai zl!f+fU_OLZT?1eZe*gU3KF7{F|4`|$n1e`{RICWLyF-2eap07*qoM6N<$ Eg1^dD+yDRo delta 741 zcmVH+vwf9L^}myv>|Rsf2IR)FisT2{CL;CgzU7+?hed7T)L0P+qC zP27G?$1nMWdjs+znTJpWY)zsDu(^yHz@{Uq0PC)72%d5<8N#;=FeH$baMq`=6@Wg8 zt|b(88eapb3&|4DTiUvd>jSh$-5;3!;00Jjqh5~*1;=m-I~2VZe*pS$hUo=^W&lV= z!tjDc3xF#hPA?cV15mzz@Pb7PKnm{kfjB9xy6{Emga!*1 z0KbJ90piL7ZUSa=-~rx%B$zA!o&%&f2Lfv-l3mrq?RqUBW8=$a^ zHbCY`(Ggo+KiLe(gXt1S(HPE`;0BEe#R^zWX=)3mq*_Yr3c#$x9{{Swv({>*Ywz|8 XUD$sySm*yg00000NkvXXu0mjfWI9IA diff --git a/tgstation.dme b/tgstation.dme index 55616d11204..ab636184689 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1331,8 +1331,12 @@ #include "code\modules\procedural mapping\mapGenerator.dm" #include "code\modules\procedural mapping\mapGeneratorModule.dm" #include "code\modules\procedural mapping\mapGeneratorReadme.dm" +#include "code\modules\procedural mapping\mapGeneratorModules\helpers.dm" #include "code\modules\procedural mapping\mapGeneratorModules\nature.dm" +#include "code\modules\procedural mapping\mapGenerators\asteroid.dm" #include "code\modules\procedural mapping\mapGenerators\nature.dm" +#include "code\modules\procedural mapping\mapGenerators\shuttle.dm" +#include "code\modules\procedural mapping\mapGenerators\syndicate.dm" #include "code\modules\projectiles\ammunition.dm" #include "code\modules\projectiles\firing.dm" #include "code\modules\projectiles\gun.dm" From 3a5745b505f3141900b63285d05318f584381452 Mon Sep 17 00:00:00 2001 From: AnturK Date: Wed, 3 Jun 2015 22:52:39 +0200 Subject: [PATCH 2/2] Updates paths --- code/modules/procedural mapping/mapGenerators/shuttle.dm | 4 ++-- code/modules/procedural mapping/mapGenerators/syndicate.dm | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/procedural mapping/mapGenerators/shuttle.dm b/code/modules/procedural mapping/mapGenerators/shuttle.dm index c532a70226c..7197b127d48 100644 --- a/code/modules/procedural mapping/mapGenerators/shuttle.dm +++ b/code/modules/procedural mapping/mapGenerators/shuttle.dm @@ -1,9 +1,9 @@ /datum/mapGeneratorModule/bottomLayer/shuttleFloor - spawnableTurfs = list(/turf/simulated/shuttle/floor = 100) + spawnableTurfs = list(/turf/simulated/floor/plasteel/shuttle = 100) /datum/mapGeneratorModule/border/shuttleWalls spawnableAtoms = list() - spawnableTurfs = list(/turf/simulated/shuttle/wall = 100) + spawnableTurfs = list(/turf/simulated/wall/shuttle = 100) // Generators /datum/mapGenerator/shuttle/full diff --git a/code/modules/procedural mapping/mapGenerators/syndicate.dm b/code/modules/procedural mapping/mapGenerators/syndicate.dm index c7f029ef269..e48fe718d00 100644 --- a/code/modules/procedural mapping/mapGenerators/syndicate.dm +++ b/code/modules/procedural mapping/mapGenerators/syndicate.dm @@ -1,10 +1,10 @@ // Modules -/turf/simulated/shuttle/floor/syndicate //TODO: move to proper file/replace syndie shuttle turfs - icon_state = "floor4" +/turf/simulated/floor/plasteel/shuttle/red/syndicate + name = "floor" //Not Brig Floor /datum/mapGeneratorModule/bottomLayer/syndieFloor - spawnableTurfs = list(/turf/simulated/shuttle/floor/syndicate = 100) + spawnableTurfs = list(/turf/simulated/floor/plasteel/shuttle/red/syndicate = 100) /datum/mapGeneratorModule/border/syndieWalls spawnableAtoms = list()