From 88109119dc48162af9fd67bac4ab7201c23a66ef Mon Sep 17 00:00:00 2001 From: Neerti Date: Sun, 26 Jul 2020 12:36:44 -0400 Subject: [PATCH] Finishes portals. --- .../objects/effects/map_effects/portal.dm | 149 ++++++++++++++++-- .../surface_submaps/mountains/mountains.dm | 8 + .../mountains/mountains_areas.dm | 4 + .../mountains/spatial_anomaly.dmm | 138 +++++++++------- polaris.dme | 3 +- 5 files changed, 229 insertions(+), 73 deletions(-) diff --git a/code/game/objects/effects/map_effects/portal.dm b/code/game/objects/effects/map_effects/portal.dm index a007a90cde..afada9ccc4 100644 --- a/code/game/objects/effects/map_effects/portal.dm +++ b/code/game/objects/effects/map_effects/portal.dm @@ -1,32 +1,71 @@ GLOBAL_LIST_EMPTY(all_portal_masters) -// Portal map effects allow a mapper to join two distant places together, while looking hopefully seamlessly connected. -// This can allow for very strange PoIs that twist and turn in what appear to be physically impossible ways. +/* + +Portal map effects allow a mapper to join two distant places together, while looking somewhat seamlessly connected. +This can allow for very strange PoIs that twist and turn in what appear to be physically impossible ways. + +Portals do have some specific requirements when mapping them in; + - There must by one, and only one `/obj/effect/map_effect/portal/master` for each side of a portal. + - Both sides need to have matching `portal_id`s in order to link to each other. + - Each side must face opposite directions, e.g. if side A faces SOUTH, side B must face NORTH. + - Each side must have the same orientation, e.g. horizontal on both sides, or vertical on both sides. + - Portals can be made to be longer than 1x1 with `/obj/effect/map_effect/portal/line`s, + but both sides must have the same length. + - If portal lines are added, they must form a straight line and be next to a portal master or another portal line. + - If portal lines are used, both portal masters should be in the same relative position among the lines. + E.g. both being on the left most side on a horizontal row. + +Portals also have some limitations to be aware of when mapping. Some of these are not an issue if you're trying to make an 'obvious' portal; + - The objects seen through portals are purely visual, which has many implications, + such as simple_mob AIs being blind to mobs on the other side of portals. + - Objects on the other side of a portal can be interacted with if the interaction has no range limitation, + or the distance between the two portal sides happens to be less than the interaction max range. Examine will probably work, + while picking up an item that appears to be next to you will fail. + - Sounds currently are not carried across portals. + - Mob speech and emotes currently are not seen across portals. + - Mismatched lighting between each portal end can make the portal look obvious. + - Portals look weird when observing as a ghost, or otherwise when able to see through walls. Meson vision will also spoil the illusion. + - Walls that change icons based on neightboring walls can give away that a portal is nearby if both sides don't have a similar transition. + - Projectiles that pass through portals will generally work as intended, however aiming and firing upon someone on the other side of a portal + will likely be weird due to the click targeting the real position of the thing clicked instead of the apparent position. + Thrown objects suffer a similar fate. + - The tiles that are visually shown across a portal are determined based on visibility at the time of portal initialization, + and currently don't update, meaning that opacity changes are not reflected, e.g. a wall is deconstructed, or an airlock is opened. + - There is currently a small but somewhat noticable pause in mob movement when moving across a portal, + as a result of the mob's glide animation being inturrupted by a teleport. + - Gas is not transferred through portals, and ZAS is oblivious to them. + +A lot of those limitations can potentially be solved with some more work. Otherwise, portals work best in static environments like Points of Interest, +when portals are shortly lived, or when portals are made to be obvious with special effects. +*/ /obj/effect/map_effect/portal name = "portal subtype" invisibility = 0 + opacity = TRUE plane = TURF_PLANE layer = ABOVE_TURF_LAYER + appearance_flags = PIXEL_SCALE|KEEP_TOGETHER // Removed TILE_BOUND so things not visible on the other side stay hidden from the viewer. + var/obj/effect/map_effect/portal/counterpart = null // The portal line or master that this is connected to, on the 'other side'. // Information used to apply `pixel_[x|y]` offsets so that the visuals line up. + // Set automatically by `calculate_dimensions()`. var/total_height = 0 // Measured in tiles. var/total_width = 0 var/portal_distance_x = 0 // How far the portal is from the left edge, in tiles. var/portal_distance_y = 0 // How far the portal is from the top edge. - - /obj/effect/map_effect/portal/Destroy() vis_contents = null if(counterpart) - counterpart.counterpart = null - counterpart = null + counterpart.counterpart = null // Disconnect our counterpart from us + counterpart = null // Now disconnect us from them. return ..() - +// Called when something touches the portal, and usually teleports them to the other side. /obj/effect/map_effect/portal/Crossed(atom/movable/AM) if(AM.is_incorporeal()) return @@ -38,9 +77,12 @@ GLOBAL_LIST_EMPTY(all_portal_masters) AM.forceMove(counterpart.get_focused_turf()) +// 'Focused turf' is the turf directly in front of a portal, +// and it is used both as the destination when crossing, as well as the PoV for visuals. /obj/effect/map_effect/portal/proc/get_focused_turf() return get_step(get_turf(src), dir) +// Determines the size of the block of turfs inside `vis_contents`, and where the portal is in relation to that. /obj/effect/map_effect/portal/proc/calculate_dimensions() var/highest_x = 0 var/lowest_x = 0 @@ -71,16 +113,17 @@ GLOBAL_LIST_EMPTY(all_portal_masters) total_width = (highest_x - lowest_x) + 1 total_height = (highest_y - lowest_y) + 1 + // Find how far the portal is from the edges. var/turf/focused_T = counterpart.get_focused_turf() portal_distance_x = lowest_x - focused_T.x portal_distance_y = lowest_y - focused_T.y - // Portal masters manage everything else involving portals. -// This is the base type. Use `/side_a` or `/side_b` for actual portals. +// This is the base type. Use `/side_a` or `/side_b` with matching IDs for actual portals. /obj/effect/map_effect/portal/master name = "portal master" + show_messages = TRUE // So portals can hear and see, and relay to the other side. var/portal_id = "test" // For a portal to be made, both the A and B sides need to share the same ID value. var/list/portal_lines = list() @@ -115,6 +158,7 @@ GLOBAL_LIST_EMPTY(all_portal_masters) else break +// Connects both sides of a portal together. /obj/effect/map_effect/portal/master/proc/find_counterparts() for(var/thing in GLOB.all_portal_masters) var/obj/effect/map_effect/portal/master/M = thing @@ -139,6 +183,7 @@ GLOBAL_LIST_EMPTY(all_portal_masters) var/list/observed_turfs = list() for(var/thing in portal_lines + src) var/obj/effect/map_effect/portal/P = thing + // P.name = null P.icon_state = null var/turf/T = P.counterpart.get_focused_turf() @@ -155,13 +200,93 @@ GLOBAL_LIST_EMPTY(all_portal_masters) P.calculate_dimensions() - +// Shifts the portal's pixels in order to line up properly, as BYOND offsets the sprite when it holds multiple turfs inside `vis_contents`. +// This undos the shift that BYOND did. /obj/effect/map_effect/portal/master/proc/apply_offset() for(var/thing in portal_lines + src) var/obj/effect/map_effect/portal/P = thing - P.pixel_x = 32 * P.portal_distance_x - P.pixel_y = 32 * P.portal_distance_y + P.pixel_x = WORLD_ICON_SIZE * P.portal_distance_x + P.pixel_y = WORLD_ICON_SIZE * P.portal_distance_y + +// Allows portals to transfer emotes. +// Only portal masters do this to avoid flooding the other side with duplicate messages. +/obj/effect/map_effect/portal/master/see_emote(mob/M, text) + if(!counterpart) + return + var/turf/T = counterpart.get_focused_turf() + var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) + var/list/mobs_to_relay = in_range["mobs"] + + for(var/thing in mobs_to_relay) + var/mob/mob = thing + var/rendered = "[text]" + mob.show_message(rendered) + + ..() + +// Allows portals to transfer visible messages. +/obj/effect/map_effect/portal/master/show_message(msg, type, alt, alt_type) + if(!counterpart) + return + var/rendered = "[msg]" + var/turf/T = counterpart.get_focused_turf() + var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) + var/list/mobs_to_relay = in_range["mobs"] + + for(var/thing in mobs_to_relay) + var/mob/mob = thing + mob.show_message(rendered) + + ..() + +// Allows portals to transfer speech. +/obj/effect/map_effect/portal/master/hear_talk(mob/M, list/message_pieces, verb) + if(!counterpart) + return + var/turf/T = counterpart.get_focused_turf() + var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) + var/list/mobs_to_relay = in_range["mobs"] + + for(var/thing in mobs_to_relay) + var/mob/mob = thing + var/message = mob.combine_message(message_pieces, verb, M) + var/name_used = M.GetVoice() + var/rendered = null + rendered = "[name_used] [message]" + mob.show_message(rendered, 2) + + ..() + +// Returns the position that an atom that's hopefully on the other side of the portal would be if it were really there. +// Z levels not taken into account. +/obj/effect/map_effect/portal/master/proc/get_apparent_position(atom/A) + if(!counterpart) + return null + + var/turf/true_turf = get_turf(A) + var/obj/effect/map_effect/portal/master/other_master = counterpart + + var/in_vis_contents = FALSE + for(var/thing in other_master.portal_lines + other_master) + var/obj/effect/map_effect/portal/P = thing + if(P in true_turf.vis_locs) + in_vis_contents = TRUE + break + + if(!in_vis_contents) + return null // Not in vision of the other portal. + + var/turf/their_focus = counterpart.get_focused_turf() + var/turf/our_focus = get_focused_turf() + + var/relative_x = (true_turf.x - our_focus.x) + relative_x += SIGN(relative_x) + var/relative_y = (true_turf.y - our_focus.y) + relative_y += SIGN(relative_y) + + return new /datum/position(their_focus.x + relative_x, their_focus.y + relative_y, our_focus.z) + /obj/effect/map_effect/portal/master/side_a name = "portal master A" diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm index 8e1b7446ed..0f184323ad 100644 --- a/maps/submaps/surface_submaps/mountains/mountains.dm +++ b/maps/submaps/surface_submaps/mountains/mountains.dm @@ -39,6 +39,7 @@ #include "Geyser3.dmm" #include "Cliff1.dmm" #include "excavation1.dmm" +#include "spatial_anomaly.dmm" #endif // The 'mountains' is the mining z-level, and has a lot of caves. @@ -345,3 +346,10 @@ desc = "An abandoned mining site." mappath = 'maps/submaps/surface_submaps/mountains/excavation1.dmm' cost = 20 + +/datum/map_template/surface/mountains/deep/lava_trench + name = "spatial anomaly" + desc = "A strange section of the caves that seems twist and turn in ways that shouldn't be physically possible." + mappath = 'maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm' + cost = 20 + fixed_orientation = TRUE \ No newline at end of file diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm index a6968fac98..04c8568513 100644 --- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm +++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm @@ -139,3 +139,7 @@ /area/submap/Excavation name = "POI - Excavation Site" ambience = AMBIENCE_FOREBODING + +/area/submap/spatial_anomaly + name = "POI - Spatial Anomaly" + ambience = AMBIENCE_FOREBODING diff --git a/maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm b/maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm index ac72275b5b..3f05b9ef41 100644 --- a/maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm +++ b/maps/submaps/surface_submaps/mountains/spatial_anomaly.dmm @@ -1,62 +1,82 @@ -"a" = (/turf/simulated/wall/dungeon,/area/space) -"b" = (/turf/space,/area/space) -"c" = (/obj/effect/map_effect/portal/line/side_a{icon_state = "portal_line_side_a"; dir = 8},/turf/space,/area/space) -"d" = (/obj/effect/map_effect/portal/line/side_a{icon_state = "portal_line_side_a"; dir = 4},/turf/simulated/floor/outdoors/rocks,/area/space) -"e" = (/turf/simulated/floor/tiled/old_tile/green,/area/space) -"f" = (/turf/simulated/floor/tiled/old_tile/gray,/area/template_noop) -"g" = (/turf/simulated/floor/lava/outdoors,/area/space) -"h" = (/turf/simulated/floor/tiled/old_tile/gray,/area/space) -"i" = (/turf/unsimulated/wall,/area/space) -"j" = (/turf/simulated/floor/outdoors/snow,/area/space) -"k" = (/obj/effect/map_effect/portal/line/side_b{icon_state = "portal_line_side_b"; dir = 8},/turf/simulated/floor/outdoors/grass/sif,/area/space) -"l" = (/turf/simulated/floor/outdoors/grass/sif,/area/space) -"m" = (/turf/simulated/floor/outdoors/rocks,/area/space) -"n" = (/turf/simulated/floor/outdoors/dirt,/area/space) -"o" = (/obj/effect/map_effect/portal/line/side_b{icon_state = "portal_line_side_b"; dir = 4},/turf/simulated/floor/tiled/old_tile/gray,/area/space) -"p" = (/turf/simulated/floor/outdoors/ice,/area/space) -"q" = (/obj/effect/map_effect/portal/master/side_a{icon_state = "portal_side_a"; dir = 4},/turf/simulated/floor/outdoors/rocks,/area/space) -"r" = (/turf/simulated/floor/tiled/old_tile/red,/area/space) -"s" = (/obj/effect/map_effect/portal/master/side_b{icon_state = "portal_side_b"; dir = 8},/turf/simulated/floor/outdoors/grass/sif,/area/space) +"a" = (/turf/simulated/wall/solidrock,/area/submap/spatial_anomaly) +"b" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"c" = (/obj/effect/map_effect/portal/master/side_a{dir = 4; icon_state = "portal_side_a"; portal_id = "spatial_anomaly_5"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"d" = (/obj/effect/map_effect/portal/master/side_b{dir = 8; icon_state = "portal_side_b"; portal_id = "spatial_anomaly_5"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"e" = (/obj/structure/barricade,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"f" = (/turf/template_noop,/area/template_noop) +"g" = (/obj/effect/map_effect/portal/master/side_b{portal_id = "spatial_anomaly_4"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"h" = (/obj/effect/map_effect/portal/line/side_a{icon_state = "portal_line_side_a"; dir = 4},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"i" = (/obj/effect/map_effect/portal/line/side_b{icon_state = "portal_line_side_b"; dir = 8},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"j" = (/turf/simulated/floor/lava,/area/submap/spatial_anomaly) +"k" = (/obj/item/weapon/disposable_teleporter/slime,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"l" = (/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"m" = (/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"n" = (/obj/effect/map_effect/portal/master/side_a{dir = 4; icon_state = "portal_side_a"; portal_id = "spatial_anomaly_3"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"o" = (/obj/effect/map_effect/portal/master/side_a{dir = 1; icon_state = "portal_side_a"; portal_id = "spatial_anomaly_4"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"p" = (/obj/effect/map_effect/portal/master/side_b{dir = 8; icon_state = "portal_side_b"; portal_id = "spatial_anomaly_3"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"q" = (/obj/effect/map_effect/portal/master/side_b{portal_id = "spatial_anomaly_2"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"r" = (/obj/effect/map_effect/portal/line/side_b,/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"s" = (/obj/machinery/crystal/lava,/turf/simulated/floor/lava,/area/submap/spatial_anomaly) +"t" = (/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"u" = (/obj/effect/map_effect/portal/master/side_a{portal_id = "spatial_anomaly_1"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"v" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"w" = (/obj/structure/table/steel_reinforced,/obj/item/device/xenoarch_multi_tool,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"x" = (/turf/simulated/wall/solidrock,/area/template_noop) +"y" = (/obj/random/technology_scanner,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"z" = (/obj/structure/table/steel_reinforced,/obj/random/unidentified_medicine/scientific,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"A" = (/obj/structure/table/steel_reinforced,/obj/random/tool/power,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"B" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/ore/diamond,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"C" = (/obj/structure/sign/warning/lava,/turf/simulated/wall,/area/submap/spatial_anomaly) +"D" = (/obj/effect/map_effect/portal/line/side_a,/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"E" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/jackhammer,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"F" = (/obj/effect/map_effect/portal/master/side_a{dir = 1; icon_state = "portal_side_a"; portal_id = "spatial_anomaly_2"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"G" = (/obj/effect/map_effect/portal/line/side_a{icon_state = "portal_line_side_a"; dir = 1},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"H" = (/turf/unsimulated/wall,/area/template_noop) +"I" = (/obj/effect/map_effect/portal/master/side_b{dir = 1; icon_state = "portal_side_b"; portal_id = "spatial_anomaly_1"},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"J" = (/obj/effect/map_effect/portal/line/side_b{icon_state = "portal_line_side_b"; dir = 1},/obj/effect/map_effect/perma_light/brighter{light_color = "#ff00ff"},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"K" = (/obj/item/weapon/mining_scanner,/obj/structure/table/rack,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"L" = (/obj/item/weapon/storage/belt/archaeology,/obj/effect/decal/remains/human,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"M" = (/obj/structure/bookcase/manuals/xenoarchaeology,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"N" = (/obj/item/weapon/pickaxe/brush,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"O" = (/obj/item/weapon/pickaxe/one_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"P" = (/obj/item/weapon/pickaxe/four_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"Q" = (/obj/effect/decal/remains/human,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) +"R" = (/obj/item/weapon/pickaxe/five_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"S" = (/obj/item/weapon/pickaxe/six_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"T" = (/obj/item/weapon/pickaxe/two_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"U" = (/obj/item/device/measuring_tape,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"X" = (/obj/item/weapon/pickaxe/three_pick,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/spatial_anomaly) +"Y" = (/obj/item/weapon/pickaxe/excavationdrill,/turf/simulated/floor/plating/external,/area/submap/spatial_anomaly) (1,1,1) = {" -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aggggggggggggggggggajjjjjjjjjjjjjjjjjjja -aggggggggggggggggggajjjnnnjnnjjjjjjjjjja -aggggggggggggggggggajnnnnnnnnjjjjjjjjjja -aggggggggggggggggggannppppnnjjjjjljjjjja -aggggggggggggggggggannpppppnjjllllljjjja -aggggmmggggggggggggannppnnnnllllllljjjja -aggggggiiiiigggggggajnnnniiiiilnnnjjjjja -aggggggidmmmgggggggajnnnnlllkillnnjjjjja -agggggmidmmmgggggggajjjjjlllkillnjjjjjja -aggggggiqmmmmggggggajjjjllllsiljjjjjjjja -aggggggiiiiimggggggajjjjliiiiilljjjjjjja -aggggggggmmgmmgggggajjjjjjjjjjlljjjjjjja -aggggmmgggggmmmggggajjjjjjjjjjjjjjjljjja -agggggmggggggmgggggajjjjjjjjjjjjjlllljja -agggggggggmggggggggajjjjllljjjjjjllljjja -aggggggggggggggggggajjlllljjjjjjjjljjjja -aggggggggggggggggggajjjjjjjjjjjjjjjjjjja -aggggggggggggggggggajjjjjjjjjjjjjjjjjjja -aggggggggggggggggggajjjjjjjjjjjjjjjjjjja -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -abbbbbbbbbbbbbbbbbbahhhhhhhhhhhhhhhhhhha -abbbbbbbbbbbbbbbbbbahhhhhhhhhhhhhhhhhhha -abbbbbbbbbbbbbbbbbbafffhhhhhhhhhhhhhhhha -abbbbbbbbbbbbbbbbbbafffhhhhhhhhhhhhhhhha -abbbbbbbbbbbbbbbbbbafffhhhhhhhhhhhhhhhha -abbbbbbiiiiiiiiiiiiaiiiiiiiiiiiihhhhhhha -abbbbbbihhhhhhhhhhiaihhhhhhhhhhihhhhhhha -abbbbbbihhhhhhhhhhiaihhhhhhhhhhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbcihhhhhiiihhiaihhihhhhhhhiohhhhhha -abbbbbbihhiiiiiihhiaihhiiiiiihhihhhhhhha -abbbbbbiiiiiiiiieeiairriiiiiiiiihhhhhhha -abbbbbbiiiiiiiiiiiiaiiiiiiiiiiiihhhhhhha -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +ffffffffffffffffffffffffffffff +fffffffffffffxxxxxxfffffffffff +fffffxxxxxxxxaaaaaaxxxxxffffff +ffffxaaaaaaaaaaaaaaaaaaaxfffff +ffffaataatcbbbbjjjsjkbdtaxffff +fffxaagaathbbbbbjjjjbbitaaffff +fffaaabaaaaaabCbbsaaaaaaaaffff +fffaaaObaaaabbNbbaaaaaaaaaxfff +ffxaaabbblbbbybbaabPbbblaaafff +ffaaaaaaaaabbbtmaabbaaabaaafff +ffaaaaaaaaatttttaabaaaabaaafff +ffaalbbbbbaatvtQaalaaaabaaafff +ffaabaaaabaaBwzAaabaaaabaaffff +ffaabaaaabaaaaaaaabatnbbaaHHHf +ffxabaaaaoaaaaaaabbaaaaaaaffHf +ffxabaaaataatttaabbaaaaaaaffHf +ffxabRbptaaaqrraabSaatttaaHHaf +ffxaaaaaaaaabbbaabbaauDDablbaf +fffaaaaaaaaabbbaablaabbbaeeaaf +fffaaaalbbbabbbaabbaabbbblbaaf +ffffaabbaabababbbbbaaUbbbEKaff +ffffaaTbbabXbabbLbYaabbbaaaaff +ffffaabbbabbbabbmttaaFGGaaafff +ffffaaIJJablbabtttMaatttaaffff +fffffatttaaaaaaaaaaaaaaaafffff +fffffaaaaaaaaaaaaaaaaaaaffffff +fffffaaaaffaaaaaaaafffffffffff +ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffff "} diff --git a/polaris.dme b/polaris.dme index 4538d3a118..11a6e37579 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2965,12 +2965,11 @@ #include "code\ZAS\Zone.dm" #include "interface\interface.dm" #include "interface\skin.dmf" -#include "maps\example\example.dm" +#include "maps\southern_cross\southern_cross.dm" #include "maps\submaps\_helpers.dm" #include "maps\submaps\space_submaps\space.dm" #include "maps\submaps\surface_submaps\mountains\mountains.dm" #include "maps\submaps\surface_submaps\mountains\mountains_areas.dm" -#include "maps\submaps\surface_submaps\mountains\spatial_anomaly.dmm" #include "maps\submaps\surface_submaps\plains\plains.dm" #include "maps\submaps\surface_submaps\plains\plains_areas.dm" #include "maps\submaps\surface_submaps\wilderness\wilderness.dm"