From d3179bb5b5524da1c3e3a97d3c311b371c4f5539 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Tue, 14 Aug 2012 09:55:57 -0700 Subject: [PATCH 1/3] Random not much finished bullshit work on mapdata. --- baystation12.dme | 18 ++- .../SkyMarshal/DebuggingNTesting.dm | 11 ++ code/WorkInProgress/new_explosion.dm | 152 ++++++++++++++++++ code/datums/configuration.dm | 4 +- code/defines/global.dm | 31 +--- code/game/jobs/job/job.dm | 6 - code/game/json.dm | 3 +- code/game/landmarks.dm | 16 +- code/setup_3d.dm | 2 +- maps/map_controller/map_controller.dm | 0 maps/map_controller/maps.dm | 47 ++++++ .../maps => maps/map_editing}/SwapMaps.dm | 0 .../maps => maps/map_editing}/dmm_suite.dm | 0 .../maps => maps/map_editing}/fromdmp.dm | 0 .../maps => maps/map_editing}/randomZlevel.dm | 0 .../maps => maps/map_editing}/reader.dm | 0 .../maps => maps/map_editing}/writer.dm | 0 .../assistantChamber.dmm | 0 18 files changed, 233 insertions(+), 57 deletions(-) create mode 100644 code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm create mode 100644 code/WorkInProgress/new_explosion.dm create mode 100644 maps/map_controller/map_controller.dm create mode 100644 maps/map_controller/maps.dm rename {code/modules/maps => maps/map_editing}/SwapMaps.dm (100%) rename {code/modules/maps => maps/map_editing}/dmm_suite.dm (100%) rename {code/modules/maps => maps/map_editing}/fromdmp.dm (100%) rename {code/modules/maps => maps/map_editing}/randomZlevel.dm (100%) rename {code/modules/maps => maps/map_editing}/reader.dm (100%) rename {code/modules/maps => maps/map_editing}/writer.dm (100%) rename maps/{RandomZLevels => map_storage}/assistantChamber.dmm (100%) diff --git a/baystation12.dme b/baystation12.dme index 7da86180317..17e852ff08b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -105,7 +105,6 @@ #define FILE_DIR "code/modules/flufftext" #define FILE_DIR "code/modules/food" #define FILE_DIR "code/modules/icon generation" -#define FILE_DIR "code/modules/maps" #define FILE_DIR "code/modules/mining" #define FILE_DIR "code/modules/mob" #define FILE_DIR "code/modules/mob/dead" @@ -173,7 +172,6 @@ #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" -#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter/backup" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" #define FILE_DIR "code/WorkInProgress/Chinsky" #define FILE_DIR "code/WorkInProgress/mapload" @@ -211,7 +209,9 @@ #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" -#define FILE_DIR "maps/RandomZLevels" +#define FILE_DIR "maps/map_controller" +#define FILE_DIR "maps/map_editing" +#define FILE_DIR "maps/map_storage" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" @@ -907,11 +907,6 @@ #include "code\modules\food\food.dm" #include "code\modules\food\meat.dm" #include "code\modules\food\recipes_microwave.dm" -#include "code\modules\maps\dmm_suite.dm" -#include "code\modules\maps\randomZlevel.dm" -#include "code\modules\maps\reader.dm" -#include "code\modules\maps\SwapMaps.dm" -#include "code\modules\maps\writer.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" #include "code\modules\mining\machine_stacking.dm" @@ -1282,4 +1277,11 @@ #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\tgstation.2.0.8.dmm" +#include "maps\map_controller\map_controller.dm" +#include "maps\map_controller\maps.dm" +#include "maps\map_editing\dmm_suite.dm" +#include "maps\map_editing\randomZlevel.dm" +#include "maps\map_editing\reader.dm" +#include "maps\map_editing\SwapMaps.dm" +#include "maps\map_editing\writer.dm" // END_INCLUDE diff --git a/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm b/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm new file mode 100644 index 00000000000..04778ffd808 --- /dev/null +++ b/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm @@ -0,0 +1,11 @@ +mob/verb/add_z() + set usr = src + set category = "TEST" + + world.maxz++ + +mob/verb/remove_z() + set usr = src + set category = "TEST" + + world.maxz-- \ No newline at end of file diff --git a/code/WorkInProgress/new_explosion.dm b/code/WorkInProgress/new_explosion.dm new file mode 100644 index 00000000000..7d47ae1b819 --- /dev/null +++ b/code/WorkInProgress/new_explosion.dm @@ -0,0 +1,152 @@ +/* - uncomment this to test it out! */ +/mob/verb/kaboom() + var/power = input(src, "power?", "power?") as num + var/turf/T = get_turf(src) + explosion_rec(T, power) + +/obj + var/explosion_resistance + +/datum/explosion_turf + var/turf/turf //The turf which will get ex_act called on it + var/max_power //The largest amount of power the turf sustained + + New() + ..() + max_power = 0 + + proc/save_power_if_larger(power) + if(power > max_power) + max_power = power + return 1 + return 0 + +var/list/datum/explosion_turf/explosion_turfs = list() +var/explosion_in_progress = 0 + +proc/get_explosion_turf(var/turf/T) + for( var/datum/explosion_turf/ET in explosion_turfs ) + if( T == ET.turf ) + return ET + var/datum/explosion_turf/ET = new() + ET.turf = T + explosion_turfs += ET + return ET + +proc/explosion_rec(turf/epicenter, power) + + var/loopbreak = 0 + while(explosion_in_progress) + if(loopbreak >= 15) return + sleep(10) + loopbreak++ + + if(power <= 0) return + epicenter = get_turf(epicenter) + if(!epicenter) return + + message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") + log_game("Explosion with size ([power]) in area [epicenter.loc.name] ") + + playsound(epicenter, 'explosionfar.ogg', 100, 1, round(power*2,1) ) + playsound(epicenter, "explosion", 100, 1, round(power,1) ) + + explosion_in_progress = 1 + explosion_turfs = list() + var/datum/explosion_turf/ETE = get_explosion_turf() + ETE.turf = epicenter + ETE.max_power = power + + //This steap handles the gathering of turfs which will be ex_act() -ed in the next step. It also ensures each turf gets the maximum possible amount of power dealt to it. + for(var/direction in cardinal) + var/turf/T = get_step(epicenter, direction) + T.explosion_spread(power - epicenter.explosion_resistance, direction) + + //This step applies the ex_act effects for the explosion, as planned in the previous step. + for( var/datum/explosion_turf/ET in explosion_turfs ) + if(ET.max_power <= 0) continue + if(!ET.turf) continue + + var/severity = 4 - round(max(min( 3, (ET.max_power / 3) ) ,1), 1) + var/x = ET.turf.x + var/y = ET.turf.y + var/z = ET.turf.z + ET.turf.ex_act(severity) + if(!ET.turf) + ET.turf = locate(x,y,z) + for( var/atom/A in ET.turf ) + A.ex_act(severity) + + explosion_in_progress = 0 + +/turf + var/explosion_resistance + +/turf/space + explosion_resistance = 10 + +/turf/simulated/floor + explosion_resistance = 1 + +/turf/simulated/mineral + explosion_resistance = 2 + +/turf/simulated/shuttle/floor + explosion_resistance = 1 + +/turf/simulated/shuttle/floor4 + explosion_resistance = 1 + +/turf/simulated/shuttle/plating + explosion_resistance = 1 + +/turf/simulated/shuttle/wall + explosion_resistance = 5 + +/turf/simulated/wall + explosion_resistance = 5 + +/turf/simulated/r_wall + explosion_resistance = 25 + +/turf/simulated/wall/r_wall + explosion_resistance = 25 + +//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station. +//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force. +/turf/proc/explosion_spread(power, direction) + if(power <= 0) + return + + /* + sleep(2) + new/obj/effect/debugging/marker(src) + */ + + var/datum/explosion_turf/ET = get_explosion_turf(src) + if(ET.max_power >= power) + return //The turf already sustained and spread a power greated than what we are dealing with. No point spreading again. + ET.max_power = power + + var/spread_power = power - src.explosion_resistance //This is the amount of power that will be spread to the tile in the direction of the blast + var/side_spread_power = power - 2 * src.explosion_resistance //This is the amount of power that will be spread to the side tiles + for(var/obj/O in src) + if(O.explosion_resistance) + spread_power -= O.explosion_resistance + side_spread_power -= O.explosion_resistance + + var/turf/T = get_step(src, direction) + T.explosion_spread(spread_power, direction) + T = get_step(src, turn(direction,90)) + T.explosion_spread(side_spread_power, turn(direction,90)) + T = get_step(src, turn(direction,-90)) + T.explosion_spread(side_spread_power, turn(direction,90)) + + /* + for(var/direction in cardinal) + var/turf/T = get_step(src, direction) + T.explosion_spread(spread_power) + */ + +/turf/unsimulated/explosion_spread(power) + return //So it doesn't get to the parent proc, which simulates explosions \ No newline at end of file diff --git a/code/datums/configuration.dm b/code/datums/configuration.dm index 67dec25042e..0b1fabd5a6d 100644 --- a/code/datums/configuration.dm +++ b/code/datums/configuration.dm @@ -32,7 +32,6 @@ var/traitor_scaling = 0 //if amount of traitors scales based on amount of players var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other var/Tensioner_Active = 0 // If the tensioner is running. - var/allow_Metadata = 0 // Metadata is supported. var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. var/Ticklag = 0.9 var/Tickcomp = 0 @@ -50,6 +49,7 @@ var/kick_inactive = 0 //force disconnect for inactive players var/load_jobs_from_txt = 0 var/usealienwhitelist = 0 + var/allow_Metadata = 0 var/server var/banappeals @@ -185,7 +185,7 @@ if ("allow_admin_jump") config.allow_admin_jump = 1 - if("allow_admin_rev") + if ("allow_admin_rev") config.allow_admin_rev = 1 if ("allow_admin_spawning") diff --git a/code/defines/global.dm b/code/defines/global.dm index f5d4266cddb..df5fbc420e6 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -1,31 +1,18 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -var/global/obj/effect/datacore/data_core = null -var/global/obj/effect/overlay/plmaster = null -var/global/obj/effect/overlay/slmaster = null +var/obj/effect/datacore/data_core = null +var/obj/effect/overlay/plmaster = null +var/obj/effect/overlay/slmaster = null //obj/hud/main_hud1 = null -var/global/list/machines = list() -var/global/list/processing_objects = list() -var/global/list/active_diseases = list() +var/list/machines = list() +var/list/processing_objects = list() +var/list/active_diseases = list() //items that ask to be called every cycle -var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event +var/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event - //list/global_map = null //Borked, do not touch. DMTG - //list/global_map = list(list(1,5),list(4,3))//an array of map Z levels. - //Resulting sector map looks like - //|_1_|_4_| - //|_5_|_3_| - // - //1 - SS13 - //4 - Derelict - //3 - AI satellite - //5 - empty space - - - ////////////// var/BLINDBLOCK = 0 var/DEAFBLOCK = 0 @@ -104,10 +91,6 @@ var/list/reg_dna = list( ) var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) -var/shuttle_z = 2 //default -var/airtunnel_start = 68 // default -var/airtunnel_stop = 68 // default -var/airtunnel_bottom = 72 // default var/list/monkeystart = list() var/list/wizardstart = list() var/list/newplayer_start = list() diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 07b1a4ee1a3..3dcc2ebc531 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -10,12 +10,6 @@ //Players will be allowed to spawn in as jobs that are set to "Station" var/faction = "None" - //How many players can be this job - var/total_positions = 0 - - //How many players can spawn in as this job - var/spawn_positions = 0 - //How many players have this job var/current_positions = 0 diff --git a/code/game/json.dm b/code/game/json.dm index fa237e675c0..31c90341a3d 100644 --- a/code/game/json.dm +++ b/code/game/json.dm @@ -40,7 +40,7 @@ proc/makejson() players += "[C.key];" F << "{\"mode\":\"[mode]\",\"players\" : \"[players]\",\"playercount\" : \"[playerscount]\",\"admin\" : \"[admins]\",\"time\" : \"[time2text(world.realtime,"MM/DD - hh:mm")]\"}" fcopy("info.json","[jsonpath]/info.json") - +/* /proc/switchmap(newmap,newpath) var/oldmap var/obj/mapinfo/M = locate() @@ -95,6 +95,7 @@ client/proc/ChangeMap(var/X as text) set name = "Change Map" set category = "Admin" switchmap(X,X) + */ proc/send2irc(msg,msg2) shell("python nudge.py [msg] [msg2]") proc/send2adminirc(channel,msg) diff --git a/code/game/landmarks.dm b/code/game/landmarks.dm index 31cd58b45ce..67367bd8df4 100644 --- a/code/game/landmarks.dm +++ b/code/game/landmarks.dm @@ -4,19 +4,6 @@ tag = text("landmark*[]", name) invisibility = 101 - if (name == "shuttle") - shuttle_z = z - del(src) - - if (name == "airtunnel_stop") - airtunnel_stop = x - - if (name == "airtunnel_start") - airtunnel_start = x - - if (name == "airtunnel_bottom") - airtunnel_bottom = y - if (name == "monkey") monkeystart += loc del(src) @@ -36,8 +23,7 @@ if (name == "prisonwarp") prisonwarp += loc del(src) -// if (name == "mazewarp") -// mazewarp += loc + if (name == "Holding Facility") holdingfacility += loc if (name == "tdome1") diff --git a/code/setup_3d.dm b/code/setup_3d.dm index 607e350f153..676579c6131 100644 --- a/code/setup_3d.dm +++ b/code/setup_3d.dm @@ -9,7 +9,7 @@ var/list/levels_3d = list(1,2) //To expediate calculations, just do "z in levels_3d" -var/list/global_adjacent_z_levels = list("1" = list("up" = 2), "2" = list("down" = 1)) //Example. 2 is above 1 +var/list/global_adjacent_z_levels = list(list("up" = 2),list("down" = 1),null,null,null,null) //Example. 2 is above 1 //Commented out ones are incomplete. //#include "TriDimension\Pipes.dm" //Example diff --git a/maps/map_controller/map_controller.dm b/maps/map_controller/map_controller.dm new file mode 100644 index 00000000000..e69de29bb2d diff --git a/maps/map_controller/maps.dm b/maps/map_controller/maps.dm new file mode 100644 index 00000000000..41c27a96b70 --- /dev/null +++ b/maps/map_controller/maps.dm @@ -0,0 +1,47 @@ + ///////////////////////////////////////////////////////////////////////////// + //Contents: Map datums for use with runtime map loading, and voteable maps.// +///////////////////////////////////////////////////////////////////////////// + +map + var + name = "Default/Debug Map" + desc = "You should not see this, tell a coder." + is_playable = 1 + is_flotilla = 0 + relative_path = "maps/tgstation.2.0.8.dmm" //Path from the .dmb file to the map. Set to TG station in case of derp. + + x = 1 + y = 1 + z = 1 + + engsec_job_flags = 0 + list/engsec_spawn_positions = list() + list/engsec_total_positions = list() + + medsci_job_flags = 0 + list/medsci_spawn_positions = list() + list/medsci_total_positions = list() + + civilian_job_flags = 0 + list/civilian_spawn_positions = list() + list/civilian_total_positions = list() + + + +map/tg_station + name = "/TG/'s SS13 map, TGstation 2.0.8" + desc = "A large map featuring a space station, derelict, mining asteroid, and communication satelite." + relative_path = "maps/tgstation.2.0.8.dmm" + x = 255 + y = 255 + z = 6 + +//All possible jobs availible. + engsec_job_flags = CAPTAIN|HOS|WARDEN|DETECTIVE|OFFICER|CHIEF|ENGINEER|ATMOSTECH|ROBOTICIST|AI|CYBORG + engsec_spawn_positions = list("[CAPTAIN]" = 1, + + + medsci_job_flags = RD|SCIENTIST|CHEMIST|CMO|DOCTOR|GENETICIST + + + civilian_job_flags = HOP|BARTENDER|BOTANIST|CHEF|JANITOR|LIBRARIAN|QUARTERMASTER|CARGOTECH|MINER|LAWYER|CHAPLAIN|CLOWN|MIME|ASSISTANT \ No newline at end of file diff --git a/code/modules/maps/SwapMaps.dm b/maps/map_editing/SwapMaps.dm similarity index 100% rename from code/modules/maps/SwapMaps.dm rename to maps/map_editing/SwapMaps.dm diff --git a/code/modules/maps/dmm_suite.dm b/maps/map_editing/dmm_suite.dm similarity index 100% rename from code/modules/maps/dmm_suite.dm rename to maps/map_editing/dmm_suite.dm diff --git a/code/modules/maps/fromdmp.dm b/maps/map_editing/fromdmp.dm similarity index 100% rename from code/modules/maps/fromdmp.dm rename to maps/map_editing/fromdmp.dm diff --git a/code/modules/maps/randomZlevel.dm b/maps/map_editing/randomZlevel.dm similarity index 100% rename from code/modules/maps/randomZlevel.dm rename to maps/map_editing/randomZlevel.dm diff --git a/code/modules/maps/reader.dm b/maps/map_editing/reader.dm similarity index 100% rename from code/modules/maps/reader.dm rename to maps/map_editing/reader.dm diff --git a/code/modules/maps/writer.dm b/maps/map_editing/writer.dm similarity index 100% rename from code/modules/maps/writer.dm rename to maps/map_editing/writer.dm diff --git a/maps/RandomZLevels/assistantChamber.dmm b/maps/map_storage/assistantChamber.dmm similarity index 100% rename from maps/RandomZLevels/assistantChamber.dmm rename to maps/map_storage/assistantChamber.dmm From 4d7b17208d77ac4554fad55456a6b60e8c0ee530 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Thu, 6 Sep 2012 15:48:11 -0700 Subject: [PATCH 2/3] Update for everyone wishing to make a spacecraft, has a small map file (7x9) of a effective supermatter reactor (untested) and some changes to allow TEG's to be rotated. Signed-off-by: SkyMarshal --- code/modules/power/generator_type2.dm | 4 +- icons/obj/power.dmi | Bin 22538 -> 25710 bytes maps/reactor.dmm | 53 ++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 maps/reactor.dmm diff --git a/code/modules/power/generator_type2.dm b/code/modules/power/generator_type2.dm index 20b732c3ec1..7157ce369e6 100644 --- a/code/modules/power/generator_type2.dm +++ b/code/modules/power/generator_type2.dm @@ -4,8 +4,8 @@ ..() spawn(5) - input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,WEST) - input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,EAST) + input1 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, 90)) + input2 = locate(/obj/machinery/atmospherics/unary/generator_input) in get_step(src,turn(dir, -90)) if(!input1 || !input2) stat |= BROKEN diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index d424877853b5b158ee8f97b630be3ee9323e17b8..b71a23808adcd910694b4513c340b2ef5cd97ea0 100644 GIT binary patch literal 25710 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 Date: Thu, 6 Sep 2012 15:51:23 -0700 Subject: [PATCH 3/3] Revert "Random not much finished bullshit work on mapdata." This reverts commit d3179bb5b5524da1c3e3a97d3c311b371c4f5539. --- baystation12.dme | 18 +-- .../SkyMarshal/DebuggingNTesting.dm | 11 -- code/WorkInProgress/new_explosion.dm | 152 ------------------ code/datums/configuration.dm | 4 +- code/defines/global.dm | 31 +++- code/game/jobs/job/job.dm | 6 + code/game/json.dm | 3 +- code/game/landmarks.dm | 16 +- .../modules/maps}/SwapMaps.dm | 0 .../modules/maps}/dmm_suite.dm | 0 .../modules/maps}/fromdmp.dm | 0 .../modules/maps}/randomZlevel.dm | 0 .../modules/maps}/reader.dm | 0 .../modules/maps}/writer.dm | 0 code/setup_3d.dm | 2 +- .../assistantChamber.dmm | 0 maps/map_controller/map_controller.dm | 0 maps/map_controller/maps.dm | 47 ------ 18 files changed, 57 insertions(+), 233 deletions(-) delete mode 100644 code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm delete mode 100644 code/WorkInProgress/new_explosion.dm rename {maps/map_editing => code/modules/maps}/SwapMaps.dm (100%) rename {maps/map_editing => code/modules/maps}/dmm_suite.dm (100%) rename {maps/map_editing => code/modules/maps}/fromdmp.dm (100%) rename {maps/map_editing => code/modules/maps}/randomZlevel.dm (100%) rename {maps/map_editing => code/modules/maps}/reader.dm (100%) rename {maps/map_editing => code/modules/maps}/writer.dm (100%) rename maps/{map_storage => RandomZLevels}/assistantChamber.dmm (100%) delete mode 100644 maps/map_controller/map_controller.dm delete mode 100644 maps/map_controller/maps.dm diff --git a/baystation12.dme b/baystation12.dme index 17e852ff08b..7da86180317 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -105,6 +105,7 @@ #define FILE_DIR "code/modules/flufftext" #define FILE_DIR "code/modules/food" #define FILE_DIR "code/modules/icon generation" +#define FILE_DIR "code/modules/maps" #define FILE_DIR "code/modules/mining" #define FILE_DIR "code/modules/mob" #define FILE_DIR "code/modules/mob/dead" @@ -172,6 +173,7 @@ #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/BirdMan" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Rust" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Supermatter/backup" #define FILE_DIR "code/WorkInProgress/Cael_Aislinn/Tajara" #define FILE_DIR "code/WorkInProgress/Chinsky" #define FILE_DIR "code/WorkInProgress/mapload" @@ -209,9 +211,7 @@ #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" -#define FILE_DIR "maps/map_controller" -#define FILE_DIR "maps/map_editing" -#define FILE_DIR "maps/map_storage" +#define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" @@ -907,6 +907,11 @@ #include "code\modules\food\food.dm" #include "code\modules\food\meat.dm" #include "code\modules\food\recipes_microwave.dm" +#include "code\modules\maps\dmm_suite.dm" +#include "code\modules\maps\randomZlevel.dm" +#include "code\modules\maps\reader.dm" +#include "code\modules\maps\SwapMaps.dm" +#include "code\modules\maps\writer.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" #include "code\modules\mining\machine_stacking.dm" @@ -1277,11 +1282,4 @@ #include "interface\interface.dm" #include "interface\skin.dmf" #include "maps\tgstation.2.0.8.dmm" -#include "maps\map_controller\map_controller.dm" -#include "maps\map_controller\maps.dm" -#include "maps\map_editing\dmm_suite.dm" -#include "maps\map_editing\randomZlevel.dm" -#include "maps\map_editing\reader.dm" -#include "maps\map_editing\SwapMaps.dm" -#include "maps\map_editing\writer.dm" // END_INCLUDE diff --git a/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm b/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm deleted file mode 100644 index 04778ffd808..00000000000 --- a/code/WorkInProgress/SkyMarshal/DebuggingNTesting.dm +++ /dev/null @@ -1,11 +0,0 @@ -mob/verb/add_z() - set usr = src - set category = "TEST" - - world.maxz++ - -mob/verb/remove_z() - set usr = src - set category = "TEST" - - world.maxz-- \ No newline at end of file diff --git a/code/WorkInProgress/new_explosion.dm b/code/WorkInProgress/new_explosion.dm deleted file mode 100644 index 7d47ae1b819..00000000000 --- a/code/WorkInProgress/new_explosion.dm +++ /dev/null @@ -1,152 +0,0 @@ -/* - uncomment this to test it out! */ -/mob/verb/kaboom() - var/power = input(src, "power?", "power?") as num - var/turf/T = get_turf(src) - explosion_rec(T, power) - -/obj - var/explosion_resistance - -/datum/explosion_turf - var/turf/turf //The turf which will get ex_act called on it - var/max_power //The largest amount of power the turf sustained - - New() - ..() - max_power = 0 - - proc/save_power_if_larger(power) - if(power > max_power) - max_power = power - return 1 - return 0 - -var/list/datum/explosion_turf/explosion_turfs = list() -var/explosion_in_progress = 0 - -proc/get_explosion_turf(var/turf/T) - for( var/datum/explosion_turf/ET in explosion_turfs ) - if( T == ET.turf ) - return ET - var/datum/explosion_turf/ET = new() - ET.turf = T - explosion_turfs += ET - return ET - -proc/explosion_rec(turf/epicenter, power) - - var/loopbreak = 0 - while(explosion_in_progress) - if(loopbreak >= 15) return - sleep(10) - loopbreak++ - - if(power <= 0) return - epicenter = get_turf(epicenter) - if(!epicenter) return - - message_admins("Explosion with size ([power]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])") - log_game("Explosion with size ([power]) in area [epicenter.loc.name] ") - - playsound(epicenter, 'explosionfar.ogg', 100, 1, round(power*2,1) ) - playsound(epicenter, "explosion", 100, 1, round(power,1) ) - - explosion_in_progress = 1 - explosion_turfs = list() - var/datum/explosion_turf/ETE = get_explosion_turf() - ETE.turf = epicenter - ETE.max_power = power - - //This steap handles the gathering of turfs which will be ex_act() -ed in the next step. It also ensures each turf gets the maximum possible amount of power dealt to it. - for(var/direction in cardinal) - var/turf/T = get_step(epicenter, direction) - T.explosion_spread(power - epicenter.explosion_resistance, direction) - - //This step applies the ex_act effects for the explosion, as planned in the previous step. - for( var/datum/explosion_turf/ET in explosion_turfs ) - if(ET.max_power <= 0) continue - if(!ET.turf) continue - - var/severity = 4 - round(max(min( 3, (ET.max_power / 3) ) ,1), 1) - var/x = ET.turf.x - var/y = ET.turf.y - var/z = ET.turf.z - ET.turf.ex_act(severity) - if(!ET.turf) - ET.turf = locate(x,y,z) - for( var/atom/A in ET.turf ) - A.ex_act(severity) - - explosion_in_progress = 0 - -/turf - var/explosion_resistance - -/turf/space - explosion_resistance = 10 - -/turf/simulated/floor - explosion_resistance = 1 - -/turf/simulated/mineral - explosion_resistance = 2 - -/turf/simulated/shuttle/floor - explosion_resistance = 1 - -/turf/simulated/shuttle/floor4 - explosion_resistance = 1 - -/turf/simulated/shuttle/plating - explosion_resistance = 1 - -/turf/simulated/shuttle/wall - explosion_resistance = 5 - -/turf/simulated/wall - explosion_resistance = 5 - -/turf/simulated/r_wall - explosion_resistance = 25 - -/turf/simulated/wall/r_wall - explosion_resistance = 25 - -//Code-wise, a safe value for power is something up to ~25 or ~30.. This does quite a bit of damage to the station. -//direction is the direction that the spread took to come to this tile. So it is pointing in the main blast direction - meaning where this tile should spread most of it's force. -/turf/proc/explosion_spread(power, direction) - if(power <= 0) - return - - /* - sleep(2) - new/obj/effect/debugging/marker(src) - */ - - var/datum/explosion_turf/ET = get_explosion_turf(src) - if(ET.max_power >= power) - return //The turf already sustained and spread a power greated than what we are dealing with. No point spreading again. - ET.max_power = power - - var/spread_power = power - src.explosion_resistance //This is the amount of power that will be spread to the tile in the direction of the blast - var/side_spread_power = power - 2 * src.explosion_resistance //This is the amount of power that will be spread to the side tiles - for(var/obj/O in src) - if(O.explosion_resistance) - spread_power -= O.explosion_resistance - side_spread_power -= O.explosion_resistance - - var/turf/T = get_step(src, direction) - T.explosion_spread(spread_power, direction) - T = get_step(src, turn(direction,90)) - T.explosion_spread(side_spread_power, turn(direction,90)) - T = get_step(src, turn(direction,-90)) - T.explosion_spread(side_spread_power, turn(direction,90)) - - /* - for(var/direction in cardinal) - var/turf/T = get_step(src, direction) - T.explosion_spread(spread_power) - */ - -/turf/unsimulated/explosion_spread(power) - return //So it doesn't get to the parent proc, which simulates explosions \ No newline at end of file diff --git a/code/datums/configuration.dm b/code/datums/configuration.dm index 0b1fabd5a6d..67dec25042e 100644 --- a/code/datums/configuration.dm +++ b/code/datums/configuration.dm @@ -32,6 +32,7 @@ var/traitor_scaling = 0 //if amount of traitors scales based on amount of players var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other var/Tensioner_Active = 0 // If the tensioner is running. + var/allow_Metadata = 0 // Metadata is supported. var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1. var/Ticklag = 0.9 var/Tickcomp = 0 @@ -49,7 +50,6 @@ var/kick_inactive = 0 //force disconnect for inactive players var/load_jobs_from_txt = 0 var/usealienwhitelist = 0 - var/allow_Metadata = 0 var/server var/banappeals @@ -185,7 +185,7 @@ if ("allow_admin_jump") config.allow_admin_jump = 1 - if ("allow_admin_rev") + if("allow_admin_rev") config.allow_admin_rev = 1 if ("allow_admin_spawning") diff --git a/code/defines/global.dm b/code/defines/global.dm index df5fbc420e6..f5d4266cddb 100644 --- a/code/defines/global.dm +++ b/code/defines/global.dm @@ -1,18 +1,31 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -var/obj/effect/datacore/data_core = null -var/obj/effect/overlay/plmaster = null -var/obj/effect/overlay/slmaster = null +var/global/obj/effect/datacore/data_core = null +var/global/obj/effect/overlay/plmaster = null +var/global/obj/effect/overlay/slmaster = null //obj/hud/main_hud1 = null -var/list/machines = list() -var/list/processing_objects = list() -var/list/active_diseases = list() +var/global/list/machines = list() +var/global/list/processing_objects = list() +var/global/list/active_diseases = list() //items that ask to be called every cycle -var/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event +var/global/defer_powernet_rebuild = 0 // true if net rebuild will be called manually after an event + //list/global_map = null //Borked, do not touch. DMTG + //list/global_map = list(list(1,5),list(4,3))//an array of map Z levels. + //Resulting sector map looks like + //|_1_|_4_| + //|_5_|_3_| + // + //1 - SS13 + //4 - Derelict + //3 - AI satellite + //5 - empty space + + + ////////////// var/BLINDBLOCK = 0 var/DEAFBLOCK = 0 @@ -91,6 +104,10 @@ var/list/reg_dna = list( ) var/CELLRATE = 0.002 // multiplier for watts per tick <> cell storage (eg: .002 means if there is a load of 1000 watts, 20 units will be taken from a cell per second) var/CHARGELEVEL = 0.001 // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second) +var/shuttle_z = 2 //default +var/airtunnel_start = 68 // default +var/airtunnel_stop = 68 // default +var/airtunnel_bottom = 72 // default var/list/monkeystart = list() var/list/wizardstart = list() var/list/newplayer_start = list() diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 3dcc2ebc531..07b1a4ee1a3 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -10,6 +10,12 @@ //Players will be allowed to spawn in as jobs that are set to "Station" var/faction = "None" + //How many players can be this job + var/total_positions = 0 + + //How many players can spawn in as this job + var/spawn_positions = 0 + //How many players have this job var/current_positions = 0 diff --git a/code/game/json.dm b/code/game/json.dm index 31c90341a3d..fa237e675c0 100644 --- a/code/game/json.dm +++ b/code/game/json.dm @@ -40,7 +40,7 @@ proc/makejson() players += "[C.key];" F << "{\"mode\":\"[mode]\",\"players\" : \"[players]\",\"playercount\" : \"[playerscount]\",\"admin\" : \"[admins]\",\"time\" : \"[time2text(world.realtime,"MM/DD - hh:mm")]\"}" fcopy("info.json","[jsonpath]/info.json") -/* + /proc/switchmap(newmap,newpath) var/oldmap var/obj/mapinfo/M = locate() @@ -95,7 +95,6 @@ client/proc/ChangeMap(var/X as text) set name = "Change Map" set category = "Admin" switchmap(X,X) - */ proc/send2irc(msg,msg2) shell("python nudge.py [msg] [msg2]") proc/send2adminirc(channel,msg) diff --git a/code/game/landmarks.dm b/code/game/landmarks.dm index 67367bd8df4..31cd58b45ce 100644 --- a/code/game/landmarks.dm +++ b/code/game/landmarks.dm @@ -4,6 +4,19 @@ tag = text("landmark*[]", name) invisibility = 101 + if (name == "shuttle") + shuttle_z = z + del(src) + + if (name == "airtunnel_stop") + airtunnel_stop = x + + if (name == "airtunnel_start") + airtunnel_start = x + + if (name == "airtunnel_bottom") + airtunnel_bottom = y + if (name == "monkey") monkeystart += loc del(src) @@ -23,7 +36,8 @@ if (name == "prisonwarp") prisonwarp += loc del(src) - +// if (name == "mazewarp") +// mazewarp += loc if (name == "Holding Facility") holdingfacility += loc if (name == "tdome1") diff --git a/maps/map_editing/SwapMaps.dm b/code/modules/maps/SwapMaps.dm similarity index 100% rename from maps/map_editing/SwapMaps.dm rename to code/modules/maps/SwapMaps.dm diff --git a/maps/map_editing/dmm_suite.dm b/code/modules/maps/dmm_suite.dm similarity index 100% rename from maps/map_editing/dmm_suite.dm rename to code/modules/maps/dmm_suite.dm diff --git a/maps/map_editing/fromdmp.dm b/code/modules/maps/fromdmp.dm similarity index 100% rename from maps/map_editing/fromdmp.dm rename to code/modules/maps/fromdmp.dm diff --git a/maps/map_editing/randomZlevel.dm b/code/modules/maps/randomZlevel.dm similarity index 100% rename from maps/map_editing/randomZlevel.dm rename to code/modules/maps/randomZlevel.dm diff --git a/maps/map_editing/reader.dm b/code/modules/maps/reader.dm similarity index 100% rename from maps/map_editing/reader.dm rename to code/modules/maps/reader.dm diff --git a/maps/map_editing/writer.dm b/code/modules/maps/writer.dm similarity index 100% rename from maps/map_editing/writer.dm rename to code/modules/maps/writer.dm diff --git a/code/setup_3d.dm b/code/setup_3d.dm index 676579c6131..607e350f153 100644 --- a/code/setup_3d.dm +++ b/code/setup_3d.dm @@ -9,7 +9,7 @@ var/list/levels_3d = list(1,2) //To expediate calculations, just do "z in levels_3d" -var/list/global_adjacent_z_levels = list(list("up" = 2),list("down" = 1),null,null,null,null) //Example. 2 is above 1 +var/list/global_adjacent_z_levels = list("1" = list("up" = 2), "2" = list("down" = 1)) //Example. 2 is above 1 //Commented out ones are incomplete. //#include "TriDimension\Pipes.dm" //Example diff --git a/maps/map_storage/assistantChamber.dmm b/maps/RandomZLevels/assistantChamber.dmm similarity index 100% rename from maps/map_storage/assistantChamber.dmm rename to maps/RandomZLevels/assistantChamber.dmm diff --git a/maps/map_controller/map_controller.dm b/maps/map_controller/map_controller.dm deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/maps/map_controller/maps.dm b/maps/map_controller/maps.dm deleted file mode 100644 index 41c27a96b70..00000000000 --- a/maps/map_controller/maps.dm +++ /dev/null @@ -1,47 +0,0 @@ - ///////////////////////////////////////////////////////////////////////////// - //Contents: Map datums for use with runtime map loading, and voteable maps.// -///////////////////////////////////////////////////////////////////////////// - -map - var - name = "Default/Debug Map" - desc = "You should not see this, tell a coder." - is_playable = 1 - is_flotilla = 0 - relative_path = "maps/tgstation.2.0.8.dmm" //Path from the .dmb file to the map. Set to TG station in case of derp. - - x = 1 - y = 1 - z = 1 - - engsec_job_flags = 0 - list/engsec_spawn_positions = list() - list/engsec_total_positions = list() - - medsci_job_flags = 0 - list/medsci_spawn_positions = list() - list/medsci_total_positions = list() - - civilian_job_flags = 0 - list/civilian_spawn_positions = list() - list/civilian_total_positions = list() - - - -map/tg_station - name = "/TG/'s SS13 map, TGstation 2.0.8" - desc = "A large map featuring a space station, derelict, mining asteroid, and communication satelite." - relative_path = "maps/tgstation.2.0.8.dmm" - x = 255 - y = 255 - z = 6 - -//All possible jobs availible. - engsec_job_flags = CAPTAIN|HOS|WARDEN|DETECTIVE|OFFICER|CHIEF|ENGINEER|ATMOSTECH|ROBOTICIST|AI|CYBORG - engsec_spawn_positions = list("[CAPTAIN]" = 1, - - - medsci_job_flags = RD|SCIENTIST|CHEMIST|CMO|DOCTOR|GENETICIST - - - civilian_job_flags = HOP|BARTENDER|BOTANIST|CHEF|JANITOR|LIBRARIAN|QUARTERMASTER|CARGOTECH|MINER|LAWYER|CHAPLAIN|CLOWN|MIME|ASSISTANT \ No newline at end of file