Merge remote-tracking branch 'upstream/master' into second-autotransfer

This commit is contained in:
Eli
2023-05-01 17:32:43 +10:00
116 changed files with 129392 additions and 888 deletions
-11
View File
@@ -1,11 +0,0 @@
/*
Toggle this var to 1 to compile using runtime station instead.
Useful if you're constantly having to recompile to debug something.
*/
#define RUNTIME_STATION 0
#if RUNTIME_STATION
#include "modular_chomp/maps/runtime/runtime_station_defines.dm"
#include "modular_chomp/maps/runtime/runtime_station.dmm"
#define USING_MAP_DATUM /datum/map/runtime_station
#endif
+11
View File
@@ -0,0 +1,11 @@
//different types of atom colorations
///only used by rare effects like greentext coloring mobs and when admins varedit color
#define ADMIN_COLOUR_PRIORITY 1
///e.g. purple effect of the revenant on a mob, black effect when mob electrocuted
#define TEMPORARY_COLOUR_PRIORITY 2
///color splashed onto an atom (e.g. paint on turf)
#define WASHABLE_COLOUR_PRIORITY 3
///color inherent to the atom (e.g. blob color)
#define FIXED_COLOUR_PRIORITY 4
///how many priority levels there are.
#define COLOUR_PRIORITY_AMOUNT 4
+4
View File
@@ -0,0 +1,4 @@
//Luma coefficients suggested for HDTVs. If you change these, make sure they add up to 1.
#define LUMA_R 0.213
#define LUMA_G 0.715
#define LUMA_B 0.072
+2
View File
@@ -14,3 +14,5 @@
#define MAT_CARPET_PINK "pink carpet"
#define MAT_CARPET_PURPLE "purple carpet"
#define MAT_CARPET_ORANGE "orange carpet"
#define PHASE_SHIELDED 16 // Prevents shadekin phasing in/out in this area
+18 -1
View File
@@ -962,15 +962,32 @@ var/global/list/selectable_speech_bubbles = list(
"cyber",
"ghost",
"slime_green",
"slime_yellow",
"slime_red",
"slime_blue",
"dark",
"plant",
"clown",
"fox",
"latte_fox",
"blue_fox",
"maus",
"wolf",
"red_panda",
"blue_panda",
"tentacles",
"heart",
"textbox",
"posessed",
"square")
"square",
"medical",
"medical_square",
"cardiogram",
"security",
"notepad",
"science",
"engineering",
"cargo")
+2 -2
View File
@@ -80,8 +80,8 @@
Blend(M, ICON_ADD)
/proc/BlendRGB(rgb1, rgb2, amount)
var/list/RGB1 = rgb2num(rgb1)
var/list/RGB2 = rgb2num(rgb2)
var/list/RGB1 = ReadRGB(rgb1) //CHOMPEdit - Better rgb blend
var/list/RGB2 = ReadRGB(rgb2)
// add missing alpha if needed
if(RGB1.len < RGB2.len) RGB1 += 255
+661
View File
@@ -0,0 +1,661 @@
/*
IconProcs README
A BYOND library for manipulating icons and colors
by Lummox JR
version 1.0
The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation
routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners.
CHANGING ICONS
Several new procs have been added to the /icon datum to simplify working with icons. To use them,
remember you first need to setup an /icon var like so:
GLOBAL_DATUM_INIT(my_icon, /icon, new('iconfile.dmi'))
icon/ChangeOpacity(amount = 1)
A very common operation in DM is to try to make an icon more or less transparent. Making an icon more
transparent is usually much easier than making it less so, however. This proc basically is a frontend
for MapColors() which can change opacity any way you like, in much the same way that SetIntensity()
can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half.
If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque.
icon/GrayScale()
Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact.
icon/ColorTone(tone)
Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an
RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect.
See also the global ColorTone() proc.
icon/MinColors(icon)
The icon is blended with a second icon where the minimum of each RGB pixel is the result.
Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon.
icon/MaxColors(icon)
The icon is blended with a second icon where the maximum of each RGB pixel is the result.
Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon.
icon/Opaque(background = "#000000")
All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify.
icon/BecomeAlphaMask()
You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc.
The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white.
icon/AddAlphaMask(mask)
The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque,
the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent.
Where the mask is translucent, the current icon becomes more transparent.
icon/UseAlphaMask(mask, mode)
Sometimes you may want to take the alpha values from one icon and use them on a different icon.
This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change
so it has the same colors as before but uses the mask for opacity.
COLOR MANAGEMENT AND HSV
RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value.
* The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to
cyan to blue to magenta and back to red.
* The saturation of a color is how much color is in it. A color with low saturation will be more gray,
and with no saturation at all it is a shade of gray.
* The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark,
and no value at all is black.
Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three
hex digits because it ranges from 0 to 0x5FF.
* 0 to 0xFF - red to yellow
* 0x100 to 0x1FF - yellow to green
* 0x200 to 0x2FF - green to cyan
* 0x300 to 0x3FF - cyan to blue
* 0x400 to 0x4FF - blue to magenta
* 0x500 to 0x5FF - magenta to red
Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible),
value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff".
More than one HSV color can match the same RGB color.
Here are some procs you can use for color management:
ReadRGB(rgb)
Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used
that includes alpha, the list will have a fourth item for the alpha value.
hsv(hue, sat, val, apha)
Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa"
format. Alpha is not included in the result if null.
ReadHSV(rgb)
Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that
includes alpha, the list will have a fourth item for the alpha value.
RGBtoHSV(rgb)
Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff".
HSVtoRGB(hsv)
Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa".
BlendRGB(rgb1, rgb2, amount)
Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result;
if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
The returned value is an RGB or RGBA color.
BlendHSV(hsv1, hsv2, amount)
Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB
blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1,
the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well.
The returned value is an HSV or HSVA color.
BlendRGBasHSV(rgb1, rgb2, amount)
Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form.
HueToAngle(hue)
Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue.
AngleToHue(hue)
Converts an angle to a hue in the valid range.
RotateHue(hsv, angle)
Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360.
(Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value
as the original, but a different hue.
GrayScale(rgb)
Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string.
ColorTone(rgb, tone)
Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of
using strict shades of gray. The tone value is an RGB color; any alpha value is ignored.
*/
/*
Get Flat Icon DEMO by DarkCampainger
This is a test for the get flat icon proc, modified approprietly for icons and their states.
Probably not a good idea to run this unless you want to see how the proc works in detail.
mob
icon = 'old_or_unused.dmi'
icon_state = "green"
Login()
// Testing image underlays
underlays += image(icon='old_or_unused.dmi',icon_state="red")
underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32)
underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32)
// Testing image overlays
add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32))
add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32))
add_overlay(image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32))
// Testing icon file overlays (defaults to mob's state)
add_overlay('_flat_demoIcons2.dmi')
// Testing icon_state overlays (defaults to mob's icon)
add_overlay("white")
// Testing dynamic icon overlays
var/icon/I = icon('old_or_unused.dmi', icon_state="aqua")
I.Shift(NORTH,16,1)
add_overlay(I)
// Testing dynamic image overlays
I=image(icon=I,pixel_x = -32, pixel_y = 32)
add_overlay(I)
// Testing object types (and layers)
add_overlay(/obj/effect/overlayTest)
loc = locate (10,10,1)
verb
Browse_Icon()
set name = "1. Browse Icon"
// Give it a name for the cache
var/iconName = "[ckey(src.name)]_flattened.dmi"
// Send the icon to src's local cache
src<<browse_rsc(get_flat_icon(src), iconName)
// Display the icon in their browser
src<<browse("<body bgcolor='#000000'><p><img src='[iconName]'></p></body>")
Output_Icon()
set name = "2. Output Icon"
to_chat(src, "Icon is: [icon2base64html(get_flat_icon(src))]")
Label_Icon()
set name = "3. Label Icon"
// Give it a name for the cache
var/iconName = "[ckey(src.name)]_flattened.dmi"
// Copy the file to the rsc manually
var/icon/I = fcopy_rsc(get_flat_icon(src))
// Send the icon to src's local cache
src<<browse_rsc(I, iconName)
// Update the label to show it
winset(src,"imageLabel","image='[REF(I)]'");
Add_Overlay()
set name = "4. Add Overlay"
add_overlay(image(icon='old_or_unused.dmi',icon_state="yellow",pixel_x = rand(-64,32), pixel_y = rand(-64,32))
Stress_Test()
set name = "5. Stress Test"
for(var/i = 0 to 1000)
// The third parameter forces it to generate a new one, even if it's already cached
get_flat_icon(src,0,2)
if(prob(5))
Add_Overlay()
Browse_Icon()
Cache_Test()
set name = "6. Cache Test"
for(var/i = 0 to 1000)
get_flat_icon(src)
Browse_Icon()
/obj/effect/overlayTest
icon = 'old_or_unused.dmi'
icon_state = "blue"
pixel_x = -24
pixel_y = 24
layer = TURF_LAYER // Should appear below the rest of the overlays
world
view = "7x7"
maxx = 20
maxy = 20
maxz = 1
*/
/*
HSV format is represented as "#hhhssvv" or "#hhhssvvaa"
Hue ranges from 0 to 0x5ff (1535)
0x000 = red
0x100 = yellow
0x200 = green
0x300 = cyan
0x400 = blue
0x500 = magenta
Saturation is from 0 to 0xff (255)
More saturation = more color
Less saturation = more gray
Value ranges from 0 to 0xff (255)
Higher value means brighter color
*/
/**
* reads RGB or RGBA values to list
* @return list(r, g, b) or list(r, g, b, a), values 0 to 255.
*/
/proc/ReadRGB(rgb)
if(!rgb)
return
// interpret the HSV or HSVA value
var/i=1,start=1
if(text2ascii(rgb) == 35) ++start // skip opening #
var/ch,which=0,r=0,g=0,b=0,alpha=0,usealpha
var/digits=0
for(i=start, i<=length(rgb), ++i)
ch = text2ascii(rgb, i)
if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102)
break
++digits
if(digits == 8)
break
var/single = digits < 6
if(digits != 3 && digits != 4 && digits != 6 && digits != 8)
return
if(digits == 4 || digits == 8)
usealpha = 1
for(i=start, digits>0, ++i)
ch = text2ascii(rgb, i)
if(ch >= 48 && ch <= 57)
ch -= 48
else if(ch >= 65 && ch <= 70)
ch -= 55
else if(ch >= 97 && ch <= 102)
ch -= 87
else
break
--digits
switch(which)
if(0)
r = (r << 4) | ch
if(single)
r |= r << 4
++which
else if(!(digits & 1))
++which
if(1)
g = (g << 4) | ch
if(single)
g |= g << 4
++which
else if(!(digits & 1))
++which
if(2)
b = (b << 4) | ch
if(single)
b |= b << 4
++which
else if(!(digits & 1))
++which
if(3)
alpha = (alpha << 4) | ch
if(single)
alpha |= alpha << 4
. = list(r, g, b)
if(usealpha)
. += alpha
/proc/ReadHSV(hsv)
if(!hsv)
return
// interpret the HSV or HSVA value
var/i=1,start=1
if(text2ascii(hsv) == 35)
++start // skip opening #
var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha
var/digits=0
for(i=start, i<=length(hsv), ++i)
ch = text2ascii(hsv, i)
if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102)
break
++digits
if(digits == 9)
break
if(digits > 7)
usealpha = 1
if(digits <= 4)
++which
if(digits <= 2)
++which
for(i=start, digits>0, ++i)
ch = text2ascii(hsv, i)
if(ch >= 48 && ch <= 57)
ch -= 48
else if(ch >= 65 && ch <= 70)
ch -= 55
else if(ch >= 97 && ch <= 102)
ch -= 87
else
break
--digits
switch(which)
if(0)
hue = (hue << 4) | ch
if(digits == (usealpha ? 6 : 4))
++which
if(1)
sat = (sat << 4) | ch
if(digits == (usealpha ? 4 : 2))
++which
if(2)
val = (val << 4) | ch
if(digits == (usealpha ? 2 : 0))
++which
if(3)
alpha = (alpha << 4) | ch
. = list(hue, sat, val)
if(usealpha)
. += alpha
/proc/HSVtoRGB(hsv)
if(!hsv)
return "#000000"
var/list/HSV = ReadHSV(hsv)
if(!HSV)
return "#000000"
var/hue = HSV[1]
var/sat = HSV[2]
var/val = HSV[3]
// Compress hue into easier-to-manage range
hue -= hue >> 8
if(hue >= 0x5fa)
hue -= 0x5fa
var/hi,mid,lo,r,g,b
hi = val
lo = round((255 - sat) * val / 255, 1)
mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1)
if(hue >= 765)
if(hue >= 1275) {r=hi; g=lo; b=mid}
else if(hue >= 1020) {r=mid; g=lo; b=hi }
else {r=lo; g=mid; b=hi }
else
if(hue >= 510) {r=lo; g=hi; b=mid}
else if(hue >= 255) {r=mid; g=hi; b=lo }
else {r=hi; g=mid; b=lo }
return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b)
/proc/RGBtoHSV(rgb)
if(!rgb)
return "#0000000"
var/list/RGB = ReadRGB(rgb)
if(!RGB)
return "#0000000"
var/r = RGB[1]
var/g = RGB[2]
var/b = RGB[3]
var/hi = max(r,g,b)
var/lo = min(r,g,b)
var/val = hi
var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0
var/hue = 0
if(sat)
var/dir
var/mid
if(hi == r)
if(lo == b) {hue=0; dir=1; mid=g}
else {hue=1535; dir=-1; mid=b}
else if(hi == g)
if(lo == r) {hue=512; dir=1; mid=b}
else {hue=511; dir=-1; mid=r}
else if(hi == b)
if(lo == g) {hue=1024; dir=1; mid=r}
else {hue=1023; dir=-1; mid=g}
hue += dir * round((mid-lo) * 255 / (hi-lo), 1)
return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null))
/proc/hsv(hue, sat, val, alpha)
if(hue < 0 || hue >= 1536)
hue %= 1536
if(hue < 0)
hue += 1536
if((hue & 0xFF) == 0xFF)
++hue
if(hue >= 1536)
hue = 0
if(sat < 0)
sat = 0
if(sat > 255)
sat = 255
if(val < 0)
val = 0
if(val > 255)
val = 255
. = "#"
. += TO_HEX_DIGIT(hue >> 8)
. += TO_HEX_DIGIT(hue >> 4)
. += TO_HEX_DIGIT(hue)
. += TO_HEX_DIGIT(sat >> 4)
. += TO_HEX_DIGIT(sat)
. += TO_HEX_DIGIT(val >> 4)
. += TO_HEX_DIGIT(val)
if(!isnull(alpha))
if(alpha < 0)
alpha = 0
if(alpha > 255)
alpha = 255
. += TO_HEX_DIGIT(alpha >> 4)
. += TO_HEX_DIGIT(alpha)
/*
Smooth blend between HSV colors
amount=0 is the first color
amount=1 is the second color
amount=0.5 is directly between the two colors
amount<0 or amount>1 are allowed
*/
/proc/BlendHSV(hsv1, hsv2, amount)
var/list/HSV1 = ReadHSV(hsv1)
var/list/HSV2 = ReadHSV(hsv2)
// add missing alpha if needed
if(HSV1.len < HSV2.len)
HSV1 += 255
else if(HSV2.len < HSV1.len)
HSV2 += 255
var/usealpha = HSV1.len > 3
// normalize hsv values in case anything is screwy
if(HSV1[1] > 1536)
HSV1[1] %= 1536
if(HSV2[1] > 1536)
HSV2[1] %= 1536
if(HSV1[1] < 0)
HSV1[1] += 1536
if(HSV2[1] < 0)
HSV2[1] += 1536
if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0}
if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0}
// no value for one color means don't change saturation
if(!HSV1[3])
HSV1[2] = HSV2[2]
if(!HSV2[3])
HSV2[2] = HSV1[2]
// no saturation for one color means don't change hues
if(!HSV1[2])
HSV1[1] = HSV2[1]
if(!HSV2[2])
HSV2[1] = HSV1[1]
// Compress hues into easier-to-manage range
HSV1[1] -= HSV1[1] >> 8
HSV2[1] -= HSV2[1] >> 8
var/hue_diff = HSV2[1] - HSV1[1]
if(hue_diff > 765)
hue_diff -= 1530
else if(hue_diff <= -765)
hue_diff += 1530
var/hue = round(HSV1[1] + hue_diff * amount, 1)
var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1)
var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1)
var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null
// normalize hue
if(hue < 0 || hue >= 1530)
hue %= 1530
if(hue < 0)
hue += 1530
// decompress hue
hue += round(hue / 255)
return hsv(hue, sat, val, alpha)
/proc/BlendRGBasHSV(rgb1, rgb2, amount)
return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount)
/proc/HueToAngle(hue)
// normalize hsv in case anything is screwy
if(hue < 0 || hue >= 1536)
hue %= 1536
if(hue < 0)
hue += 1536
// Compress hue into easier-to-manage range
hue -= hue >> 8
return hue / (1530/360)
/proc/AngleToHue(angle)
// normalize hsv in case anything is screwy
if(angle < 0 || angle >= 360)
angle -= 360 * round(angle / 360)
var/hue = angle * (1530/360)
// Decompress hue
hue += round(hue / 255)
return hue
// positive angle rotates forward through red->green->blue
/proc/RotateHue(hsv, angle)
var/list/HSV = ReadHSV(hsv)
// normalize hsv in case anything is screwy
if(HSV[1] >= 1536)
HSV[1] %= 1536
if(HSV[1] < 0)
HSV[1] += 1536
// Compress hue into easier-to-manage range
HSV[1] -= HSV[1] >> 8
if(angle < 0 || angle >= 360)
angle -= 360 * round(angle / 360)
HSV[1] = round(HSV[1] + angle * (1530/360), 1)
// normalize hue
if(HSV[1] < 0 || HSV[1] >= 1530)
HSV[1] %= 1530
if(HSV[1] < 0)
HSV[1] += 1530
// decompress hue
HSV[1] += round(HSV[1] / 255)
return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null))
// Convert an rgb color to grayscale
/proc/GrayScale(rgb)
var/list/RGB = ReadRGB(rgb)
var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11
return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray)
// Change grayscale color to black->tone->white range
/proc/ColorTone(rgb, tone)
var/list/RGB = ReadRGB(rgb)
var/list/TONE = ReadRGB(tone)
var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11
var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11
if(gray <= tone_gray)
return BlendRGB("#000000", tone, gray/(tone_gray || 1))
else
return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1))
//Used in the OLD chem colour mixing algorithm
/proc/GetColors(hex)
hex = uppertext(hex)
// No alpha set? Default to full alpha.
if(length(hex) == 7)
hex += "FF"
var/hi1 = text2ascii(hex, 2) // R
var/lo1 = text2ascii(hex, 3) // R
var/hi2 = text2ascii(hex, 4) // G
var/lo2 = text2ascii(hex, 5) // G
var/hi3 = text2ascii(hex, 6) // B
var/lo3 = text2ascii(hex, 7) // B
var/hi4 = text2ascii(hex, 8) // A
var/lo4 = text2ascii(hex, 9) // A
return list(((hi1>= 65 ? hi1-55 : hi1-48)<<4) | (lo1 >= 65 ? lo1-55 : lo1-48),
((hi2 >= 65 ? hi2-55 : hi2-48)<<4) | (lo2 >= 65 ? lo2-55 : lo2-48),
((hi3 >= 65 ? hi3-55 : hi3-48)<<4) | (lo3 >= 65 ? lo3-55 : lo3-48),
((hi4 >= 65 ? hi4-55 : hi4-48)<<4) | (lo4 >= 65 ? lo4-55 : lo4-48))
//Interface for using DrawBox() to draw 1 pixel on a coordinate.
//Returns the same icon specifed in the argument, but with the pixel drawn
/proc/DrawPixel(icon/I,colour,drawX,drawY)
if(!I)
return 0
var/Iwidth = I.Width()
var/Iheight = I.Height()
if(drawX > Iwidth || drawX <= 0)
return 0
if(drawY > Iheight || drawY <= 0)
return 0
I.DrawBox(colour,drawX, drawY)
return I
//Interface for easy drawing of one pixel on an atom.
/atom/proc/DrawPixelOn(colour, drawX, drawY)
var/icon/I = new(icon)
var/icon/J = DrawPixel(I, colour, drawX, drawY)
if(J) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square.
icon = J
return J
return 0
//Hook, override to run code on- wait this is images
//Images have dir without being an atom, so they get their own definition.
//Lame.
/image/proc/setDir(newdir)
dir = newdir
/* Gives the result RGB of a RGB string after a matrix transformation. No alpha.
* Input: rr, rg, rb, gr, gg, gb, br, bg, bb, cr, cg, cb
* Output: RGB string
*/
/proc/RGBMatrixTransform(list/color, list/cm)
ASSERT(cm.len >= 9)
if(cm.len < 12) // fill in the rest
for(var/i in 1 to (12 - cm.len))
cm += 0
if(!islist(color))
color = ReadRGB(color)
color[1] = color[1] * cm[1] + color[2] * cm[2] + color[3] * cm[3] + cm[10] * 255
color[2] = color[1] * cm[4] + color[2] * cm[5] + color[3] * cm[6] + cm[11] * 255
color[3] = color[1] * cm[7] + color[2] * cm[8] + color[3] * cm[9] + cm[12] * 255
return rgb(color[1], color[2], color[3])
-1
View File
@@ -1823,7 +1823,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "\improper Vault"
icon_state = "nuke_storage"
ambience = AMBIENCE_HIGHSEC
limit_shadekin_phasing = TRUE // CHOMPEdit
/area/security/checkpoint
name = "\improper Security Checkpoint"
@@ -126,3 +126,6 @@
limit_dark_respite = TRUE
ambience = AMBIENCE_OTHERWORLDLY
flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT | BLUE_SHIELDED
/area/security/nuke_storage
flags = PHASE_SHIELDED
-1
View File
@@ -1,3 +1,2 @@
/area
var/limit_shadekin_phasing = FALSE //Allows setting areas where shadekin cannot phase in/out
var/limit_dark_respite = FALSE // Shadekin will die normally in an area where this is set to true
+2 -1
View File
@@ -98,7 +98,7 @@
/datum/job/emergency_responder/get_access()
return get_all_accesses().Copy()
/* CHOMPEDIT: Removing Clown/Mime job from being initialized at all (These are alt titles of Entertainer on our codebase)
/datum/job/clown
title = "Clown"
flag = CLOWN
@@ -157,3 +157,4 @@
return list(access_maint_tunnels, access_entertainment, access_tomfoolery, access_mime)
else
return list(access_entertainment, access_tomfoolery, access_mime)
*/ //CHOMPEDIT: END remove Mime/clown defines (These are alt titles of Entertainer on our codebase)
+3
View File
@@ -1,3 +1,5 @@
/* CHOMPStation edit - File overidden. See modular_chomp/code/game/machinery/colormate.dm
// I'm honestly pretty sure that short of stuffing five million things into this
// there's absolutely no way it could ever have any performance impact
// Given that all it does is set the color var
@@ -115,3 +117,4 @@
. = TRUE
update_icon()
/*
+32 -1
View File
@@ -64,4 +64,35 @@
/obj/item/trash/ratpackturkey
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
icon_state = "altevian_pack_turkey-trash"
icon_state = "altevian_pack_turkey-trash"
/obj/item/trash/ratpackramen
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
icon_state = "altevian_pack_ramen_standard-trash"
/obj/item/trash/ratpackramen/standard
icon_state = "altevian_pack_ramen_standard-trash"
/obj/item/trash/ratpackramen/lacquer1
icon_state = "altevian_pack_ramen_lacquer1-trash"
/obj/item/trash/ratpackramen/lacquer2
icon_state = "altevian_pack_ramen_lacquer2-trash"
/obj/item/trash/ratpackramen/lacquer3
icon_state = "altevian_pack_ramen_lacquer3-trash"
/obj/item/trash/ratpackramen/fleet
icon_state = "altevian_pack_ramen_fleet-trash"
/obj/item/trash/ratpackramen/trans
icon_state = "altevian_pack_ramen_trans-trash"
/obj/item/trash/ratpackramen/ace
icon_state = "altevian_pack_ramen_ace-trash"
/obj/item/trash/ratpacktaco
name = "\improper Prepackaged Meal Tray"
icon = 'icons/obj/trash_vr.dmi'
icon_state = "altevian_pack_taco-trash"
@@ -30,7 +30,7 @@
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
src.access |= I.access
if(player_is_antag(user.mind))
if(player_is_antag(user.mind) || registered_user == user)
to_chat(user, "<span class='notice'>The microscanner activates as you pass it over the ID, copying its access.</span>")
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
@@ -40,7 +40,14 @@
/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
if(valid_colors && !(metadata in valid_colors))
return
I.color = metadata
//CHOMPEdit start
if(!metadata || (metadata == "#ffffff"))
return
if(istype(I))
I.add_atom_colour(metadata, FIXED_COLOUR_PRIORITY)
else
I.color = metadata // fuck off underwear
//CHOMPEdit end
/*
* Path adjustment
@@ -264,7 +264,7 @@ var/list/gear_datums = list()
if(!description)
var/obj/O = path
description = initial(O.desc)
gear_tweaks = list(gear_tweak_free_name, gear_tweak_free_desc, gear_tweak_item_tf_spawn) //CHOMPEdit - Item TF spawnpoints
gear_tweaks = list(gear_tweak_free_name, gear_tweak_free_desc, gear_tweak_item_tf_spawn, GLOB.gear_tweak_free_matrix_recolor) //CHOMPEdit - Item TF spawnpoints
/datum/gear_data
var/path
@@ -98,3 +98,9 @@ Talon hats
/datum/gear/head/beret/talon
display_name = "beret, Talon"
path = /obj/item/clothing/head/beret
// tiny tophat
/datum/gear/head/tiny_tophat
display_name = "tiny tophat"
path = /obj/item/clothing/head/tinytophat
@@ -369,4 +369,10 @@ Talon jumpsuit
"jumper skirt"=/obj/item/clothing/under/skirt/colorable/jumper,
"jumper dress"=/obj/item/clothing/under/skirt/colorable/jumperdress
)
gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
// gwen beedells clown clothes
/datum/gear/uniform/stripeddungarees
display_name = "striped dungarees"
path = /obj/item/clothing/under/stripeddungarees
+9
View File
@@ -163,3 +163,12 @@
sprite_sheets = list(
SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi'
)
// tiny tophat
/obj/item/clothing/head/tinytophat
name = "tiny tophat"
desc = "A tophat that is far too small to properly sit on someone's head!"
icon = 'icons/inventory/head/item_vr.dmi'
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
icon_state = "tiny_tophat"
@@ -19,24 +19,29 @@
name = "Altevian Hegemony Security Pants"
icon_state = "altevian-pants-sec"
worn_state = "altevian-pants-sec"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/security)
/obj/item/clothing/under/pants/altevian/engineering
name = "Altevian Hegemony Engineering Pants"
icon_state = "altevian-pants-eng"
worn_state = "altevian-pants-eng"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/engineering)
/obj/item/clothing/under/pants/altevian/medical
name = "Altevian Hegemony Medical Pants"
icon_state = "altevian-pants-med"
worn_state = "altevian-pants-med"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/medical)
/obj/item/clothing/under/pants/altevian/science
name = "Altevian Hegemony Science Pants"
icon_state = "altevian-pants-sci"
worn_state = "altevian-pants-sci"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
starting_accessories = list(/obj/item/clothing/accessory/jacket/altevian/science)
/obj/item/clothing/under/pants/altevian/cargo
@@ -56,20 +61,25 @@
/obj/item/clothing/under/altevian/sci
name = "Altevian Science Duty Jumpsuit"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
icon_state = "altevian-specialist-sci"
worn_state = "altevian-specialist-sci"
/obj/item/clothing/under/altevian/med
name = "Altevian Medical Duty Jumpsuit"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
icon_state = "altevian-specialist-med"
worn_state = "altevian-specialist-med"
/obj/item/clothing/under/altevian/sec
name = "Altevian Security Duty Jumpsuit"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
icon_state = "altevian-specialist-sec"
worn_state = "altevian-specialist-sec"
/obj/item/clothing/under/altevian/eng
name = "Altevian Engineering Duty Jumpsuit"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
icon_state = "altevian-specialist-eng"
worn_state = "altevian-specialist-eng"
@@ -586,4 +586,13 @@
desc = "A dress held up by suspenders. Not quite a skirt anymore."
icon_state = "skirt_jumperdress"
item_state = "skirt_jumperdress"
worn_state = "skirt_jumperdress"
worn_state = "skirt_jumperdress"
// Gwen Beedell's clown outfit
/obj/item/clothing/under/stripeddungarees
name = "striped dungarees"
desc = "A colourful set of striped dungarees, pretty funny lookin'."
icon = 'icons/inventory/uniform/item_vr.dmi'
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
icon_state = "striped_clown_uniform"
+15 -14
View File
@@ -34,20 +34,21 @@
SSradiation.z_radiate(locate(1, 1, z), radiation_level, 1)
for(var/mob/living/carbon/C in living_mob_list)
var/area/A = get_area(C)
if(!A)
continue
if(A.flags & RAD_SHIELDED)
continue
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(prob(5))
if (prob(75))
randmutb(H) // Applies bad mutation
domutcheck(H,null,MUTCHK_FORCED)
else
randmutg(H) // Applies good mutation
domutcheck(H,null,MUTCHK_FORCED)
if((C.z in using_map.station_levels) && !C.isSynthetic()) //CHOMPEdit
var/area/A = get_area(C)
if(!A)
continue
if(A.flags & RAD_SHIELDED)
continue
if(istype(C,/mob/living/carbon/human))
var/mob/living/carbon/human/H = C
if(prob(5))
if (prob(75))
randmutb(H) // Applies bad mutation
domutcheck(H,null,MUTCHK_FORCED)
else
randmutg(H) // Applies good mutation
domutcheck(H,null,MUTCHK_FORCED)
/datum/event/radiation_storm/end()
revoke_maint_all_access()
+41 -1
View File
@@ -864,7 +864,7 @@
/obj/item/weapon/reagent_containers/food/snacks/ratpackturkey
name = "Compact Holiday Special Bird"
desc = "A great gift for holidays for assorted species. This contains a full freshly cooked turkey. Open and enjoy. Courtesy of altevian packaging"
desc = "A great gift for holidays for assorted species. This contains a full freshly cooked turkey. Open and enjoy. Courtesy of altevian packaging."
icon = 'icons/obj/food_vr.dmi'
icon_state = "altevian_pack_turkey"
package_open_state = "altevian_pack_turkey-open"
@@ -873,3 +873,43 @@
trash = /obj/item/trash/ratpackturkey
nutriment_amt = 18
nutriment_desc = list("high-quality poultry" = 4)
/obj/item/weapon/reagent_containers/food/snacks/ratpackramen
name = "Big Noodle Package"
desc = "A pack containing fully cooked ramen meal, alongside some seafood-and-rice based sides. Utensils included. For those who prefer more traditional meals."
icon = 'icons/obj/food_vr.dmi'
icon_state = "altevian_pack_ramen"
package_open_state = "altevian_pack_ramen_standard-open"
package_opening_state = "altevian_pack_ramen_standard-opening"
package = TRUE
trash = /obj/item/trash/ratpackramen/standard
nutriment_amt = 2
nutriment_desc = list("savory noodles" = 4)
var/list/bowl_color_options = list("standard" = 6,
"lacquer1" = 2,
"lacquer2" = 2,
"lacquer3" = 2,
"fleet" = 6,
"trans" = 3,
"ace" = 3)
var/randomize_bowl_color = TRUE
/obj/item/weapon/reagent_containers/food/snacks/ratpackramen/Initialize()
. = ..()
if(randomize_bowl_color)
var/bowl_color = pickweight(bowl_color_options)
package_open_state = "altevian_pack_ramen_[bowl_color]-open"
package_opening_state = "altevian_pack_ramen_[bowl_color]-opening"
trash = text2path("/obj/item/trash/ratpackramen/[bowl_color]")
/obj/item/weapon/reagent_containers/food/snacks/ratpacktaco
name = "Triple Taco Tuck"
desc = "Three mini-tacos, minituarized further via altevian mad science into a convenient container. It comes with a salsa sauce!"
icon = 'icons/obj/food_vr.dmi'
icon_state = "altevian_pack_taco"
package_open_state = "altevian_pack_taco-open"
package_opening_state = "altevian_pack_taco-opening"
package = TRUE
trash = /obj/item/trash/ratpacktaco
nutriment_amt = 2
nutriment_desc = list("salsa sauce" = 2, "meat chunks" = 4, "cheese" = 3)
@@ -228,6 +228,7 @@
H.adjustBruteLoss((-0.25))
H.adjustToxLoss((-0.25))
H.heal_organ_damage(3, 0)
H.add_chemical_effect(CE_ANTIBIOTIC, ANTIBIO_NORM)
for(var/obj/item/organ/I in H.internal_organs)
if(I.robotic >= ORGAN_ROBOT)
continue
@@ -38,6 +38,9 @@
if(!T)
to_chat(src,"<span class='warning'>You can't use that here!</span>")
return FALSE
if((get_area(src).flags & PHASE_SHIELDED)) //CHOMPAdd - Mapping tools to control phasing
to_chat(src,"<span class='warning'>This area is preventing you from phasing!</span>")
return FALSE
var/brightness = T.get_lumcount() //Brightness in 0.0 to 1.0
darkness = 1-brightness //Invert
@@ -98,13 +101,6 @@
to_chat(src, "<span class='warning'>Not enough energy for that ability!</span>")
return FALSE
//CHOMPEdit begin - restricting areas where you can phase shift
var/area/A = T.loc
if(A?.limit_shadekin_phasing)
to_chat(src, "<span class='warning'>You can't use that here!</span>")
return FALSE
//CHOMPEdit end
if(!(ability_flags & AB_PHASE_SHIFTED))
shadekin_adjust_energy(-ability_cost)
playsound(src, 'sound/effects/stealthoff.ogg', 75, 1)
@@ -171,9 +167,9 @@
var/destroy_lights = 0
//CHOMPEdit start - Add back light destruction
if(SK.get_shadekin_eyecolor() == RED_EYES)
if(SK.get_shadekin_eyecolor(src) == RED_EYES)
destroy_lights = 80
else if(SK.get_shadekin_eyecolor() == PURPLE_EYES)
else if(SK.get_shadekin_eyecolor(src) == PURPLE_EYES)
destroy_lights = 25
//CHOMPEdit end
@@ -199,3 +199,21 @@
speak = list("Squeek!","SQUEEK!","Squeek?")
emote_hear = list("squeeks","squeaks","squiks")
emote_see = list("runs in a circle", "shakes", "scritches at something")
// CHOMPAdd - Verb for mice colour changing
/mob/living/simple_mob/animal/passive/mouse/verb/set_mouse_colour()
set name = "Set Mouse Colour"
set category = "Abilities"
set desc = "Set the colour of your mouse."
var/new_mouse_colour = tgui_input_list(usr, "Set Mouse Colour", "Pick a colour", list("brown","gray","white","black"))
if(!new_mouse_colour) return
icon_state = resting ? "mouse_[new_mouse_colour]_sleep" : "mouse_[new_mouse_colour]"
item_state = "mouse_[new_mouse_colour]"
icon_living = "mouse_[new_mouse_colour]"
icon_dead = "mouse_[new_mouse_colour]_dead"
icon_rest = "mouse_[new_mouse_colour]_sleep"
desc = "A small [new_mouse_colour] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
holder_type = text2path("/obj/item/weapon/holder/mouse/[new_mouse_colour]")
to_chat(src, SPAN_NOTICE("You are now a [new_mouse_colour] mouse!"))
verbs -= /mob/living/simple_mob/animal/passive/mouse/verb/set_mouse_colour
// CHOMPAdd End
@@ -8,6 +8,10 @@
to_chat(src,"<span class='warning'>You can't use that here!</span>")
return FALSE
if((get_area(src).flags & PHASE_SHIELDED)) //CHOMPAdd - Mapping tools to control phasing
to_chat(src,"<span class='warning'>This area is preventing you from phasing!</span>")
return FALSE
if(shift_state && shift_state == AB_SHIFT_ACTIVE)
to_chat(src,"<span class='warning'>You can't do a shift while actively shifting!</span>")
return FALSE
@@ -4,6 +4,9 @@
if(!T.CanPass(src,T) || loc != T)
to_chat(src,"<span class='warning'>You can't use that here!</span>")
return FALSE
if((get_area(src).flags & PHASE_SHIELDED))
to_chat(src,"<span class='warning'>This area is preventing you from phasing!</span>")
return FALSE
forceMove(T)
var/original_canmove = canmove
+2 -2
View File
@@ -85,10 +85,10 @@
/proc/is_admin(var/mob/user)
return check_rights(R_ADMIN|R_EVENT, 0, user) != 0
/* CHOMPEdit - See modular_chomp/code/_HELPERS/type2type/color.dm
/proc/hsl2rgb(h, s, l)
return //TODO: Implement
*/
/*
Miss Chance
*/
+8 -4
View File
@@ -273,10 +273,14 @@
if(!is_authenticated(usr))
return
call_shuttle_proc(usr)
if(emergency_shuttle.online())
post_status(src, "shuttle", user = usr)
setMenuState(usr, COMM_SCREEN_MAIN)
//CHOMPEdit Start - Add confirmation message
var/response = tgui_alert(usr, "OOC: You are required to Ahelp first before calling the shuttle. Please obtain confirmation from staff before calling the shuttle. \n\n Are you sure you want to call the shuttle?", "Confirm", list("Yes", "No"))
if(response == "Yes") //CHOMPEdit End
call_shuttle_proc(usr)
if(emergency_shuttle.online())
post_status(src, "shuttle", user = usr)
setMenuState(usr, COMM_SCREEN_MAIN)
if("cancelshuttle")
if(isAI(usr) || isrobot(usr))
+9
View File
@@ -472,3 +472,12 @@
for(var/A in contents)
if(isliving(A))
vore_fx(A,1)
/obj/belly/deserialize(var/list/data)
..()
STOP_PROCESSING(SSbellies, src)
STOP_PROCESSING(SSobj, src)
if(speedy_mob_processing)
START_PROCESSING(SSobj, src)
else
START_PROCESSING(SSbellies, src)
+13 -8
View File
@@ -55,6 +55,7 @@
var/emote_active = TRUE // Are we even giving emotes out at all or not?
var/next_emote = 0 // When we're supposed to print our next emote, as a world.time
var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to?
var/is_feedable = TRUE // If this belly shows up in belly selections for others. //CHOMPAdd
// Generally just used by AI
var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
@@ -292,7 +293,8 @@
"slow_brutal",
"sound_volume",
"speedy_mob_processing",
"egg_name", //CHOMP end of variables from CHOMP
"egg_name",
"is_feedable", //CHOMP end of variables from CHOMP
"egg_type",
"save_digest_mode"
)
@@ -328,6 +330,9 @@
// Called whenever an atom enters this belly
/obj/belly/Entered(atom/movable/thing, atom/OldLoc)
. = ..() //CHOMPEdit Start
if(!owner)
thing.forceMove(get_turf(src))
return
if(owner && istype(owner.loc,/turf/simulated) && !cycle_sloshed && reagents.total_volume > 0)
var/turf/simulated/T = owner.loc
var/S = pick(T.vorefootstep_sounds["human"])
@@ -485,7 +490,7 @@
I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume)
F.add_overlay(I)
F.update_for_view(owner.client.view)
F.update_for_view(L.client.view)
else
var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, severity) //preserving save data
F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi")
@@ -504,7 +509,7 @@
I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume)
F.add_overlay(I)
F.update_for_view(owner.client.view)
F.update_for_view(L.client.view)
//CHOMPEdit End
else
L.clear_fullscreen("belly")
@@ -519,7 +524,6 @@
return
if(!L.client)
return
if(belly_fullscreen)
if(colorization_enabled)
var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, reagents.total_volume) //CHOMPedit Start: preserving save data
@@ -550,7 +554,7 @@
I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume)
F.add_overlay(I)
F.update_for_view(owner.client.view)
F.update_for_view(L.client.view)
else
var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, reagents.total_volume) //preserving save data
F.cut_overlays()
@@ -568,7 +572,7 @@
I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha)
I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume)
F.add_overlay(I)
F.update_for_view(owner.client.view)//CHOMPEdit End
F.update_for_view(L.client.view)//CHOMPEdit End
else
L.clear_fullscreen("belly")
@@ -1013,7 +1017,7 @@
else
qdel(M)
if(isanimal(owner))
owner.update_transform()
owner.update_icon()
//CHOMPEdit End
// Handle a mob being absorbed
@@ -1519,7 +1523,8 @@
dupe.slow_digestion = slow_digestion
dupe.slow_brutal = slow_brutal
dupe.sound_volume = sound_volume
dupe.egg_name = egg_name //CHOMP end of variables from CHOMP
dupe.egg_name = egg_name
dupe.is_feedable = is_feedable //CHOMP end of variables from CHOMP
dupe.belly_fullscreen = belly_fullscreen
dupe.disable_hud = disable_hud
+2 -2
View File
@@ -354,8 +354,8 @@
if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains)
handle_remains_leaving(M)
digestion_death(M)
if(!ishuman(owner))
owner.update_icons()
//if(!ishuman(owner)) CHOMPremoval. Bad.
// owner.update_icons()
if(isrobot(owner))
var/mob/living/silicon/robot/R = owner
if(reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMPedit: digestion producing reagents
+13 -3
View File
@@ -578,6 +578,16 @@
//
// Eating procs depending on who clicked what
//
//CHOMPAdd Start
/mob/living/proc/feedable_bellies()
var/list/bellies = list()
for(var/obj/belly/Y in src.vore_organs)
if(Y.is_feedable)
bellies += Y
return bellies
//CHOMPAdd End
/mob/living/proc/feed_grabbed_to_self(mob/living/user, mob/living/prey)
var/belly = user.vore_selected
return perform_the_nom(user, prey, user, belly)
@@ -585,17 +595,17 @@
/mob/living/proc/eat_held_mob(mob/living/user, mob/living/prey, mob/living/pred)
var/belly
if(user != pred)
belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.vore_organs)
belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
else
belly = pred.vore_selected
return perform_the_nom(user, prey, pred, belly)
/mob/living/proc/feed_self_to_grabbed(mob/living/user, mob/living/pred)
var/belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.vore_organs)
var/belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
return perform_the_nom(user, user, pred, belly)
/mob/living/proc/feed_grabbed_to_other(mob/living/user, mob/living/prey, mob/living/pred)
var/belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.vore_organs)
var/belly = tgui_input_list(usr, "Choose Belly", "Belly Choice", pred.feedable_bellies()) //CHOMPEdit
return perform_the_nom(user, prey, pred, belly)
//
+4
View File
@@ -180,6 +180,7 @@
"release_sound" = selected.release_sound,
// "messages" // TODO
"can_taste" = selected.can_taste,
"is_feedable" = selected.is_feedable, //CHOMPAdd
"egg_type" = selected.egg_type,
"egg_name" = selected.egg_name, //CHOMPAdd
"nutrition_percent" = selected.nutrition_percent,
@@ -1492,6 +1493,9 @@
if("b_tastes")
host.vore_selected.can_taste = !host.vore_selected.can_taste
. = TRUE
if("b_feedable") //CHOMPAdd
host.vore_selected.is_feedable = !host.vore_selected.is_feedable
. = TRUE
if("b_bulge_size")
var/new_bulge = tgui_input_number(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.", max_value = 200, min_value = 0)
if(new_bulge == null)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

+16
View File
@@ -0,0 +1,16 @@
//Toggle this file if you want to compile and run an instance quicker for faster testing of non-map related things
#if !defined(USING_MAP_DATUM)
#include "runtime_station_defines.dm"
#include "runtime_station.dmm"
//Include these if you need them
// #include "southern_cross/southern_cross_jobs.dm"
// #include "southern_cross/loadout/loadout_accessories.dm"
// #include "southern_cross/datums/supplypacks/munitions.dm"
// #include "southern_cross/job/outfits.dm"
#define USING_MAP_DATUM /datum/map/runtime_station
#elif !defined(MAP_OVERRIDE)
#warn A map has already been included, ignoring Southern Cross
#endif
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -8,6 +8,9 @@
[b]Notice[/b]: The Vir government welcomes you to this world."}
map_z = list(Z_LEVEL_SURFACE, Z_LEVEL_SURFACE_MINE, Z_LEVEL_SURFACE_WILD, Z_LEVEL_SURFACE_SKYLANDS)
map_z = list(Z_LEVEL_SURFACE, Z_LEVEL_SURFACE_MINE, Z_LEVEL_SURFACE_WILD, Z_LEVEL_SURFACE_SKYLANDS, Z_LEVEL_SURFACE_VALLEY)
in_space = 0
start_x = 10
start_y = 10
@@ -49,7 +52,9 @@
start_x = 10
start_y = 10
known = 1 // lets Sectors appear on shuttle navigation for easy finding.
extra_z_levels = list(Z_LEVEL_TRANSIT, Z_LEVEL_MISC,Z_LEVEL_SURFACE, Z_LEVEL_SURFACE_MINE, Z_LEVEL_SURFACE_WILD, Z_LEVEL_SURFACE_SKYLANDS) //This should allow for comms to reach people from the station. Basically this defines all the areas of Southern Cross and the Sif local system on the overmap.
extra_z_levels = list(Z_LEVEL_TRANSIT, Z_LEVEL_MISC,Z_LEVEL_SURFACE, Z_LEVEL_SURFACE_MINE, Z_LEVEL_SURFACE_WILD, Z_LEVEL_SURFACE_SKYLANDS, Z_LEVEL_SURFACE_VALLEY) //This should allow for comms to reach people from the station. Basically this defines all the areas of Southern Cross and the Sif local system on the overmap.
initial_generic_waypoints = list(
"d1_aux_a",
"d1_aux_b",
+8 -20
View File
@@ -2975,9 +2975,7 @@
/obj/structure/bed/chair{
dir = 1
},
/obj/machinery/vending/wallmed1{
layer = 3.3;
name = "Emergency NanoMed";
/obj/structure/closet/walllocker/medical{
pixel_x = -28
},
/obj/item/device/radio/intercom{
@@ -3048,9 +3046,7 @@
/obj/structure/bed/chair{
dir = 1
},
/obj/machinery/vending/wallmed1{
layer = 3.3;
name = "Emergency NanoMed";
/obj/structure/closet/walllocker/medical{
pixel_x = -28
},
/obj/item/device/radio/intercom{
@@ -9417,8 +9413,7 @@
/obj/structure/bed/chair{
dir = 8
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = -30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod3/station,
@@ -18030,9 +18025,7 @@
/obj/structure/bed/chair{
dir = 1
},
/obj/machinery/vending/wallmed1{
layer = 3.3;
name = "Emergency NanoMed";
/obj/structure/closet/walllocker/medical{
pixel_x = -28
},
/turf/simulated/shuttle/floor/white,
@@ -18614,8 +18607,7 @@
/obj/structure/bed/chair{
dir = 4
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = 30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod5/station,
@@ -23570,9 +23562,7 @@
/area/maintenance/firstdeck/forestarboard)
"poW" = (
/obj/structure/bed/chair,
/obj/machinery/vending/wallmed1{
layer = 3.3;
name = "Emergency NanoMed";
/obj/structure/closet/walllocker/medical{
pixel_x = 28
},
/turf/simulated/shuttle/floor/white,
@@ -27873,8 +27863,7 @@
/obj/structure/bed/chair{
dir = 8
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = -30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod4/station,
@@ -28347,8 +28336,7 @@
/obj/structure/bed/chair{
dir = 4
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = 30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod6/station,
+107 -50
View File
@@ -32,9 +32,6 @@
/obj/effect/zone_divider,
/turf/simulated/mineral/sif,
/area/surface/outside/wilderness/mountains)
"al" = (
/turf/simulated/wall/solidrock,
/area/surface/outside/river/svartan)
"am" = (
/turf/simulated/floor/water,
/area/surface/outside/river/svartan)
@@ -553,6 +550,9 @@
},
/turf/simulated/floor/plating,
/area/surface/outpost/shelter/utilityroom)
"kh" = (
/turf/simulated/wall/solidrock,
/area/surface/outside/wilderness/normal)
"kZ" = (
/obj/effect/zone_divider,
/obj/effect/zone_divider,
@@ -630,6 +630,10 @@
/obj/effect/zone_divider,
/turf/simulated/floor/outdoors/dirt/sif/planetuse,
/area/surface/outside/path/wilderness)
"sC" = (
/obj/structure/railing,
/turf/simulated/floor/water/deep,
/area/surface/outside/river/svartan)
"td" = (
/obj/structure/curtain/medical{
name = "medical curtain"
@@ -693,6 +697,12 @@
/obj/effect/zone_divider,
/turf/simulated/floor/outdoors/dirt,
/area/surface/outside/path/wilderness)
"xx" = (
/obj/effect/map_effect/portal/master/side_a/wilderness_to_valley{
dir = 4
},
/turf/simulated/floor/wood,
/area/surface/outside/river/svartan)
"xA" = (
/obj/machinery/light/bigfloorlamp,
/turf/simulated/floor/outdoors/grass/sif/planetuse,
@@ -714,10 +724,22 @@
},
/turf/simulated/floor/outdoors/dirt/sif/planetuse,
/area/surface/outpost/shelter/exterior)
"As" = (
/turf/simulated/floor/wood,
/area/surface/outside/river/svartan)
"AB" = (
/obj/effect/zone_divider,
/turf/simulated/floor/outdoors/rocks/sif/planetuse,
/area/surface/outside/wilderness/normal)
"AX" = (
/obj/effect/map_effect/portal/line/side_a{
dir = 4
},
/obj/structure/railing{
dir = 1
},
/turf/simulated/floor/water/deep,
/area/surface/outside/river/svartan)
"AZ" = (
/obj/structure/simple_door/sifwood,
/obj/machinery/door/blast/shutters{
@@ -728,6 +750,12 @@
},
/turf/simulated/floor/plating,
/area/surface/outpost/shelter/utilityroom)
"BF" = (
/obj/effect/map_effect/portal/line/side_a{
dir = 4
},
/turf/simulated/floor/wood,
/area/surface/outside/river/svartan)
"Dk" = (
/obj/structure/sign/department/medbay{
name = "FIRST AID"
@@ -746,6 +774,9 @@
},
/turf/simulated/floor/tiled/white,
/area/surface/outpost/shelter)
"IZ" = (
/turf/simulated/mineral/sif,
/area/surface/outside/wilderness/normal)
"Jk" = (
/obj/item/device/geiger/wall/north,
/obj/structure/reagent_dispensers/watertank,
@@ -773,6 +804,20 @@
/obj/effect/zone_divider,
/turf/simulated/floor/water/deep,
/area/surface/outside/river/svartan)
"LI" = (
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/water,
/area/surface/outside/river/svartan)
"Mg" = (
/obj/effect/map_effect/portal/line/side_a{
dir = 4
},
/obj/structure/railing,
/turf/simulated/floor/water/deep,
/area/surface/outside/river/svartan)
"Mk" = (
/obj/structure/table/rack,
/obj/item/weapon/circuitboard/machine/rtg/advanced,
@@ -816,6 +861,12 @@
},
/turf/simulated/floor/tiled/white,
/area/surface/outpost/shelter)
"Qz" = (
/obj/structure/railing{
dir = 1
},
/turf/simulated/floor/water/deep,
/area/surface/outside/river/svartan)
"Rc" = (
/obj/machinery/light/small{
dir = 4
@@ -907,6 +958,9 @@
},
/turf/simulated/floor/tiled/white,
/area/surface/outpost/shelter)
"XD" = (
/turf/simulated/wall/solidrock,
/area/surface/outside/wilderness/deep)
"Yq" = (
/obj/machinery/power/thermoregulator/southerncross{
pixel_x = 1;
@@ -946,6 +1000,9 @@
"YL" = (
/turf/simulated/mineral/sif,
/area/surface/outpost/wall/checkpoint)
"Za" = (
/turf/simulated/mineral/sif,
/area/surface/outside/wilderness/deep)
"ZG" = (
/obj/structure/showcase/sign{
desc = "This appears to be a sign warning people that the other side is extremely hazardous.";
@@ -1087,16 +1144,16 @@ ab
ab
ad
ab
ab
ab
al
al
al
al
al
al
ab
ab
XD
XD
BF
BF
AX
Mg
BF
xx
kh
kh
ab
ab
ab
@@ -1345,16 +1402,16 @@ ac
ac
ak
ac
ac
ac
am
am
an
an
am
am
ac
ac
Za
Za
As
As
Qz
sC
As
As
IZ
IZ
ac
ac
ac
@@ -1602,19 +1659,19 @@ ac
ac
ac
ak
ac
ac
ac
am
am
an
an
am
am
ac
ac
ac
ac
ah
ah
ah
As
As
Qz
sC
As
As
ap
ap
ap
ap
ac
ac
ac
@@ -1861,18 +1918,18 @@ ah
ah
aw
ah
ac
ah
am
am
an
an
am
am
ah
As
As
Qz
sC
As
As
ap
ap
ap
ap
ac
ac
ac
ac
ac
ac
@@ -2121,12 +2178,12 @@ aw
ah
ah
ah
am
am
LI
LI
an
an
am
am
LI
LI
am
ap
ap
File diff suppressed because it is too large Load Diff
+3 -19
View File
@@ -8983,8 +8983,7 @@
/obj/structure/bed/chair{
dir = 4
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = 30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod8/station,
@@ -10597,8 +10596,7 @@
/obj/structure/bed/chair{
dir = 8
},
/obj/machinery/vending/wallmed1{
name = "NanoMed Wall";
/obj/structure/closet/walllocker/medical{
pixel_y = -30
},
/obj/effect/shuttle_landmark/southern_cross/escape_pod7/station,
@@ -21529,20 +21527,6 @@
},
/turf/simulated/floor/tiled/freezer,
/area/crew_quarters/toilet)
"tIP" = (
/obj/structure/toilet,
/obj/structure/toilet,
/obj/machinery/light/small{
dir = 1
},
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 8
},
/obj/effect/floor_decal/steeldecal/steel_decals4{
dir = 5
},
/turf/simulated/floor/tiled/freezer,
/area/crew_quarters/toilet)
"tJG" = (
/obj/effect/floor_decal/spline/fancy/wood{
dir = 10
@@ -64447,7 +64431,7 @@ sJA
hCK
hCK
tpf
tIP
wwo
uiC
uFP
uNJ
+2
View File
@@ -52,6 +52,7 @@
#include "southern_cross-9.dmm" //Transit z8
#include "southern_cross-10.dmm" //Sif wilds z9
#include "southern_cross-12.dmm" //Skylands z10
#include "southern_cross-13.dmm" //Valley z11 seemingly. For stranger critters and POIs.
#endif
// #include "southern_cross-casino.dmm" //CHOMPedit: Disabled to save resources and loaded in during events - Jack
@@ -59,6 +60,7 @@
//PLANETS, installations, sectors, ships, etc for the overmap, I want put here. Add new comments and includes when you make new planets
#include "overmap/shuttles.dm"
//SIF - Planet
#include "overmap/sectors.dm" //This is actually the sector for Sif. This also includes places like the main station and the surface
//KARA - Planet
@@ -187,6 +187,28 @@
name = "Wilderness Shelter Utility Room"
icon_state = "substation"
//Valley stuffs, chomps Edit by Jasper, for wilds but stranger.
/area/surface/outpost/unfinished
name = "Unfinished"
icon_state = "red"
/area/surface/outside/valley/inner
name = "Valley Inner"
icon_state = "yellow"
/area/surface/outside/valley/walls
name = "Valley Walls"
icon_state = "yellow"
outdoors = OUTDOORS_NO
/area/surface/outside/valley/edge
name = "Valley Edge"
icon_state = "yellow"
/area/surface/outside/valley/river
name = "Valley River"
icon_state = "yellow"
// Main mining outpost
/area/surface/outpost/mining_main
name = "North Mining Outpost"
+23 -6
View File
@@ -17,11 +17,12 @@ but they don't actually change anything about the load order
#define Z_LEVEL_TRANSIT 8
#define Z_LEVEL_SURFACE_WILD 9
#define Z_LEVEL_SURFACE_SKYLANDS 10
#define Z_LEVEL_VR_REALM 11
#define Z_LEVEL_FUELDEPOT 12
#define Z_LEVEL_AEROSTAT 13
#define Z_LEVEL_NS_MINE 14
#define Z_LEVEL_GATEWAY 15
#define Z_LEVEL_SURFACE_VALLEY 11
#define Z_LEVEL_VR_REALM 12
#define Z_LEVEL_FUELDEPOT 13
#define Z_LEVEL_AEROSTAT 14
#define Z_LEVEL_NS_MINE 15
#define Z_LEVEL_GATEWAY 16
//#define Z_LEVEL_SURFACE_CASINO xx //CHOMPedit - KSC = So there is weather on the casino. //Raz - When you do casino again, launch it in a test server, note what z-level it is on, and then replace xx with that z-level you noted. Revert back to xx and comment out when done.
//#define Z_LEVEL_EMPTY_SPACE xx //CHOMPedit: Disabling empty space as now the overmap generates empty space on demand.
@@ -167,6 +168,8 @@ but they don't actually change anything about the load order
// Wilderness is next.
seed_submaps(list(Z_LEVEL_SURFACE_WILD), 240, /area/surface/outside/wilderness/normal, /datum/map_template/surface/wilderness/normal) //CHOMPEdit bumped up from 60 to 150
seed_submaps(list(Z_LEVEL_SURFACE_WILD), 240, /area/surface/outside/wilderness/deep, /datum/map_template/surface/wilderness/deep) //CHOMPEdit bumped up from 60 to 150
seed_submaps(list(Z_LEVEL_SURFACE_VALLEY), 200, /area/surface/outside/valley/walls, /datum/map_template/surface/valley/walls)
seed_submaps(list(Z_LEVEL_SURFACE_VALLEY), 200, /area/surface/outside/valley/inner, /datum/map_template/surface/valley/inner)
// If Space submaps are made, add a line to make them here as well.
// Now for the tunnels. (This decides the load order of ore generation and cave generation. Check Random_Map to see % )
@@ -245,6 +248,12 @@ but they don't actually change anything about the load order
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_CONSOLES
base_turf = /turf/simulated/open
/datum/map_z_level/southern_cross/surface_valley
z = Z_LEVEL_SURFACE_VALLEY
name = "Valley"
flags = MAP_LEVEL_PLAYER|MAP_LEVEL_SEALED|MAP_LEVEL_CONTACT|MAP_LEVEL_CONSOLES
base_turf = /turf/simulated/floor/outdoors/rocks
//CHOMPedit - KSC = So Christmas Casino has weather.
/*/datum/map_z_level/southern_cross/surface_casino
z = Z_LEVEL_SURFACE_CASINO
@@ -304,7 +313,8 @@ but they don't actually change anything about the load order
Z_LEVEL_SURFACE,
Z_LEVEL_SURFACE_MINE,
Z_LEVEL_SURFACE_WILD,
Z_LEVEL_SURFACE_SKYLANDS
Z_LEVEL_SURFACE_SKYLANDS,
Z_LEVEL_SURFACE_VALLEY
)
//Z_LEVEL_SURFACE_CASINO //CHOMPedit - KSC = So there is weather on the Casino. //Move this into /datum/planet/sif and remember to add a coma for the new entry, for when you need the casino again
@@ -371,6 +381,13 @@ but they don't actually change anything about the load order
/obj/effect/map_effect/portal/master/side_b/wilderness_to_caves/river
portal_id = "caves_wilderness-river"
/obj/effect/map_effect/portal/master/side_a/wilderness_to_valley
portal_id = "wilderness_valley"
/obj/effect/map_effect/portal/master/side_b/wilderness_to_valley
portal_id = "wilderness_valley"
/*
//CHOMPEdit this is very much necessary for us otherwise weather sounds play on other levels
/datum/planet/sif
@@ -77,6 +77,11 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp
listening_level = Z_LEVEL_SURFACE_SKYLANDS
autolinkers = list("sky_relay")
/obj/machinery/telecomms/relay/preset/southerncross/valley
id = "Valley Relay"
listening_level = Z_LEVEL_SURFACE_VALLEY
autolinkers = list("valley_relay")
//Temp Removal TFF 15/2/20
/*
/obj/machinery/telecomms/relay/preset/belt_outpost // CHOMPedit: Tcomms relay for Belt Outpost
@@ -95,8 +100,8 @@ var/const/NETWORK_CARRIER = "Exploration Carrier" //CHOMPedit: Exploration outp
id = "Hub"
network = "tcommsat"
autolinkers = list("hub",
"d1_relay", "d2_relay", "d3_relay", "pnt_relay", "cve_relay", "wld_relay", "tns_relay", "cnt_relay", "explorer", "exp_relay", "sky_relay",
//"belt_relay", // Chompstation edit - adds belt outpost to relays. Temp Removal of Belt Relay TFF 15/2/20,
"d1_relay", "d2_relay", "d3_relay", "pnt_relay", "cve_relay", "wld_relay", "tns_relay", "cnt_relay", "explorer", "exp_relay", "sky_relay", "valley_relay",
//"belt_relay", // Chompstation edit - adds belt outpost to relays. Temp Removal of Belt Relay TFF 15/2/20, Added Valley comn stuff 2/14/2023
"science", "medical", "supply", "service", "common", "command", "engineering", "security", "unused",
"hb_relay", "receiverA", "broadcasterA"
) //CHOMPedit: Adds "exp_relay"
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,956 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"ak" = (
/turf/simulated/wall/titanium,
/area/submap/blobden)
"aH" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"aQ" = (
/obj/structure/blob/core/random_hard,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"bC" = (
/obj/effect/floor_decal/corner/red/border{
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"cq" = (
/obj/effect/floor_decal/corner/orange/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"dt" = (
/obj/effect/floor_decal/corner/blue/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"dS" = (
/obj/effect/floor_decal/corner/green/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"eL" = (
/obj/effect/floor_decal/corner/red/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"eY" = (
/obj/structure/table/borosilicate,
/obj/item/rig_module/rad_shield/advanced,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"fb" = (
/obj/effect/floor_decal/corner/orange/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"gk" = (
/obj/effect/floor_decal/corner/green/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"ig" = (
/obj/structure/table/borosilicate,
/obj/item/rig_module/mounted/egun,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"iN" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/storage/firstaid/bonemed,
/obj/random/medical,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"kY" = (
/obj/effect/floor_decal/corner/purple/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"ls" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"lt" = (
/turf/simulated/mineral/light,
/area/template_noop)
"lO" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"nB" = (
/obj/effect/floor_decal/corner/green/bordercorner{
dir = 1
},
/obj/effect/floor_decal/corner/orange/bordercorner,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"pr" = (
/obj/effect/floor_decal/corner/green/bordercorner,
/obj/effect/floor_decal/corner/orange/bordercorner{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"pU" = (
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"qc" = (
/obj/machinery/door/airlock/centcom{
name = "Special Operations";
req_access = list(103)
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"qz" = (
/obj/effect/floor_decal/corner/green/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"qW" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"ry" = (
/obj/effect/floor_decal/corner/red/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"sJ" = (
/obj/effect/floor_decal/corner/green/border{
dir = 10
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"uj" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"uA" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"wD" = (
/obj/effect/floor_decal/corner/red/border{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"wX" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"xW" = (
/obj/effect/floor_decal/corner/orange/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"yW" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"zE" = (
/obj/effect/floor_decal/corner/green/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Ac" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"AJ" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/cell/device/weapon/recharge,
/obj/item/weapon/cell/device/weapon/recharge,
/obj/item/weapon/cell/device/weapon/recharge,
/obj/item/weapon/cell/device/weapon/recharge,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Bc" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 10
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Bw" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Db" = (
/obj/structure/table/borosilicate,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"DR" = (
/obj/effect/floor_decal/corner/green/border{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Fe" = (
/obj/structure/table/borosilicate,
/obj/item/rig_module/chem_dispenser/combat,
/obj/random/medical,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"FA" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"FC" = (
/obj/effect/floor_decal/corner/green/bordercorner{
dir = 4
},
/obj/effect/floor_decal/corner/orange/bordercorner{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"FL" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Gy" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 10
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Ha" = (
/obj/structure/table/borosilicate,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Hs" = (
/obj/structure/table/borosilicate,
/obj/random/maintenance/engineering,
/obj/random/maintenance/engineering,
/obj/random/maintenance/engineering,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"HQ" = (
/obj/structure/table/borosilicate,
/obj/random/energy/sec,
/obj/item/rig_module/stealth_field,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Iv" = (
/obj/effect/floor_decal/corner/green/border{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"IC" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 1
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Kc" = (
/obj/effect/floor_decal/corner/red/border{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"La" = (
/obj/effect/floor_decal/corner/yellow/border,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"NS" = (
/obj/structure/table/borosilicate,
/obj/random/maintenance/medical,
/obj/random/maintenance/medical,
/obj/random/maintenance/medical,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"OA" = (
/obj/structure/table/borosilicate,
/obj/random/energy/highend,
/obj/item/rig_module/voice,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"PM" = (
/obj/effect/floor_decal/corner/green/border{
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Qg" = (
/obj/structure/table/borosilicate,
/obj/item/rig_module/grenade_launcher/metalfoam,
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Qp" = (
/obj/effect/floor_decal/corner/red/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"RM" = (
/obj/effect/floor_decal/corner/orange/border{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"SR" = (
/obj/effect/floor_decal/corner/purple/border{
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Tq" = (
/obj/effect/floor_decal/corner/blue/border{
dir = 5
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"TK" = (
/obj/effect/floor_decal/corner/red/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Uv" = (
/obj/effect/floor_decal/corner/green/bordercorner{
dir = 8
},
/obj/effect/floor_decal/corner/orange/bordercorner{
dir = 4
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Vm" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 6
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"WE" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"WG" = (
/obj/effect/floor_decal/corner/red/border{
dir = 10
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
"Yd" = (
/obj/effect/floor_decal/corner/yellow/border{
dir = 10
},
/turf/simulated/floor/tiled/white,
/area/submap/blobden)
(1,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(2,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(3,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(4,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(5,1,1) = {"
lt
lt
lt
lt
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
lt
lt
lt
lt
"}
(6,1,1) = {"
lt
lt
lt
lt
ak
FA
Ac
Ac
Gy
ak
PM
dS
sJ
ak
SR
qW
qW
Bc
ak
lt
lt
lt
lt
"}
(7,1,1) = {"
lt
lt
lt
lt
ak
IC
iN
NS
dt
ak
zE
pU
qz
ak
yW
Ha
OA
kY
ak
lt
lt
lt
lt
"}
(8,1,1) = {"
lt
lt
lt
lt
ak
IC
NS
Fe
dt
ak
zE
pU
qz
ak
yW
Qg
Ha
kY
ak
lt
lt
lt
lt
"}
(9,1,1) = {"
lt
lt
lt
lt
ak
Tq
ls
ls
aH
qc
zE
pU
qz
qc
uA
uj
uj
wX
ak
lt
lt
lt
lt
"}
(10,1,1) = {"
lt
lt
lt
lt
ak
ak
ak
ak
qc
ak
zE
pU
qz
ak
qc
ak
ak
ak
ak
lt
lt
lt
lt
"}
(11,1,1) = {"
lt
lt
lt
lt
ak
PM
dS
dS
dS
dS
nB
RM
Uv
dS
dS
dS
dS
sJ
ak
lt
lt
lt
lt
"}
(12,1,1) = {"
lt
lt
lt
lt
ak
zE
pU
pU
pU
pU
fb
aQ
xW
pU
pU
pU
pU
qz
ak
lt
lt
lt
lt
"}
(13,1,1) = {"
lt
lt
lt
lt
ak
Iv
gk
gk
gk
gk
FC
cq
pr
gk
gk
gk
gk
DR
ak
lt
lt
lt
lt
"}
(14,1,1) = {"
lt
lt
lt
lt
ak
ak
ak
ak
qc
ak
zE
pU
qz
ak
qc
ak
ak
ak
ak
lt
lt
lt
lt
"}
(15,1,1) = {"
lt
lt
lt
lt
ak
aa
WE
WE
Yd
qc
zE
pU
qz
qc
bC
TK
TK
WG
ak
lt
lt
lt
lt
"}
(16,1,1) = {"
lt
lt
lt
lt
ak
Bw
Hs
eY
La
ak
zE
pU
qz
ak
ry
ig
Db
eL
ak
lt
lt
lt
lt
"}
(17,1,1) = {"
lt
lt
lt
lt
ak
Bw
AJ
Hs
La
ak
zE
pU
qz
ak
ry
Db
HQ
eL
ak
lt
lt
lt
lt
"}
(18,1,1) = {"
lt
lt
lt
lt
ak
FL
lO
lO
Vm
ak
Iv
gk
DR
ak
wD
Qp
Qp
Kc
ak
lt
lt
lt
lt
"}
(19,1,1) = {"
lt
lt
lt
lt
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
ak
lt
lt
lt
lt
"}
(20,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(21,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(22,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
(23,1,1) = {"
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
lt
"}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,786 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/catwalk,
/turf/simulated/floor/lava,
/area/submap/clockwork)
"b" = (
/obj/structure/cliff/automatic{
dir = 9
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"d" = (
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/lava,
/area/submap/clockwork)
"h" = (
/obj/structure/cliff/automatic{
dir = 2
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"k" = (
/mob/living/simple_mob/mechanical/wahlem{
faction = "malf_drone"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"m" = (
/obj/structure/railing,
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
"n" = (
/obj/structure/cliff/automatic{
dir = 8
},
/obj/structure/railing{
dir = 1
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"o" = (
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
"p" = (
/obj/effect/landmark/loot_spawn/low,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"q" = (
/obj/structure/cliff/automatic/corner{
dir = 10
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"t" = (
/obj/structure/cliff/automatic,
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"u" = (
/obj/structure/cliff/automatic/corner{
dir = 6
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"v" = (
/obj/structure/cliff/automatic{
dir = 4
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"y" = (
/obj/structure/railing,
/turf/simulated/floor/lava,
/area/submap/clockwork)
"z" = (
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"A" = (
/obj/structure/cliff/automatic{
dir = 2
},
/obj/structure/railing{
dir = 4;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"C" = (
/obj/structure/cliff/automatic,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"D" = (
/obj/structure/cliff/automatic{
dir = 2
},
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"E" = (
/obj/structure/cliff/automatic{
dir = 8
},
/obj/structure/railing,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"F" = (
/turf/template_noop,
/area/template_noop)
"G" = (
/obj/structure/railing{
dir = 1
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
"H" = (
/obj/structure/cliff/automatic,
/obj/structure/railing{
dir = 4;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"I" = (
/obj/structure/cliff/automatic{
dir = 10;
icon_state = "cliffbuilder"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"J" = (
/obj/structure/cliff/automatic/corner{
dir = 9
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"K" = (
/obj/structure/cliff/automatic{
dir = 6;
icon_state = "cliffbuilder"
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"M" = (
/turf/simulated/floor/lava,
/area/submap/clockwork)
"N" = (
/obj/structure/cliff/automatic/corner,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"Q" = (
/obj/structure/catwalk,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"R" = (
/obj/structure/cliff/automatic{
dir = 5
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"S" = (
/obj/structure/closet/grave,
/obj/item/weapon/rig/ch/clockwork,
/obj/item/weapon/gun/energy/clockwork,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"T" = (
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
"U" = (
/obj/structure/cliff/automatic{
dir = 8
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/clockwork)
"V" = (
/obj/structure/railing{
dir = 4;
icon_state = "railing0"
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
"W" = (
/mob/living/simple_mob/mechanical/mining_drone,
/turf/simulated/floor/lava,
/area/submap/clockwork)
"Z" = (
/obj/structure/railing{
dir = 1
},
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/lava,
/area/submap/clockwork)
(1,1,1) = {"
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
"}
(2,1,1) = {"
F
F
p
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
p
F
F
"}
(3,1,1) = {"
F
p
z
z
b
U
E
Q
n
U
U
U
U
U
E
Q
n
U
I
z
z
p
F
"}
(4,1,1) = {"
F
z
z
b
J
M
y
a
G
M
M
M
M
M
y
a
G
M
q
I
z
z
F
"}
(5,1,1) = {"
F
z
b
J
M
W
y
a
G
M
M
M
M
M
y
a
G
W
M
q
I
z
F
"}
(6,1,1) = {"
F
z
C
M
M
M
y
a
G
M
M
M
M
M
y
a
G
M
M
M
h
z
F
"}
(7,1,1) = {"
F
z
H
V
V
V
z
z
z
M
M
M
M
M
z
z
z
V
V
V
A
z
F
"}
(8,1,1) = {"
F
z
Q
a
a
a
z
z
z
M
M
W
M
M
z
z
z
a
a
a
Q
z
F
"}
(9,1,1) = {"
F
z
t
o
o
o
z
z
z
M
M
M
M
M
z
z
z
o
o
o
D
z
F
"}
(10,1,1) = {"
F
z
C
M
M
M
y
a
G
M
M
M
M
M
y
a
G
M
M
M
h
z
F
"}
(11,1,1) = {"
F
z
C
M
M
M
y
a
G
M
z
z
z
M
y
a
G
M
M
M
h
z
F
"}
(12,1,1) = {"
F
z
C
M
W
M
y
a
G
M
S
k
S
M
y
a
G
M
W
M
h
z
F
"}
(13,1,1) = {"
F
z
C
M
M
M
y
a
G
M
z
z
z
M
y
a
G
M
M
M
h
z
F
"}
(14,1,1) = {"
F
z
C
M
M
M
y
a
G
M
y
a
G
M
y
a
G
M
M
M
h
z
F
"}
(15,1,1) = {"
F
z
C
M
M
M
z
z
z
T
m
d
Z
T
z
z
z
M
M
M
h
z
F
"}
(16,1,1) = {"
F
z
C
M
M
M
z
z
z
a
d
M
d
a
z
z
z
M
M
M
h
z
F
"}
(17,1,1) = {"
F
z
C
M
M
M
z
z
z
o
o
o
o
o
z
z
z
M
M
M
h
z
F
"}
(18,1,1) = {"
F
z
C
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
M
h
z
F
"}
(19,1,1) = {"
F
z
R
N
M
M
M
M
M
M
M
W
M
M
M
M
M
M
M
u
K
z
F
"}
(20,1,1) = {"
F
z
z
R
N
M
M
M
M
M
M
M
M
M
M
M
M
M
u
K
z
z
F
"}
(21,1,1) = {"
F
p
z
z
R
v
v
v
v
v
v
v
v
v
v
v
v
v
K
z
z
p
F
"}
(22,1,1) = {"
F
F
p
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
z
p
F
F
"}
(23,1,1) = {"
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
F
"}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,800 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor/lava/harmless,
/area/submap/fallenportal)
"b" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/spellbook/oneuse/charge,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"c" = (
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt,
/turf/simulated/floor/cult{
oxygen = 20.7263
},
/area/submap/fallenportal)
"e" = (
/obj/structure/table/borosilicate,
/obj/random/handgun,
/turf/simulated/floor/cult{
oxygen = 20.7263
},
/area/submap/fallenportal)
"f" = (
/obj/structure/simple_door/cult,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"h" = (
/mob/living/simple_mob/construct/artificer/caster,
/turf/simulated/floor/gorefloor2,
/area/submap/fallenportal)
"k" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/flame/candle/everburn,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"l" = (
/turf/template_noop,
/area/submap/fallenportal)
"m" = (
/obj/fire,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"n" = (
/obj/structure/closet/crate,
/obj/item/clothing/suit/space/cult,
/obj/item/clothing/head/helmet/space/cult,
/obj/item/clothing/shoes/cult,
/obj/item/weapon/storage/backpack/cultpack,
/obj/item/weapon/melee/cultblade,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/turf/simulated/floor/gorefloor2,
/area/submap/fallenportal)
"o" = (
/obj/structure/closet/crate,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/weapon/material/knife/ritual,
/obj/item/weapon/storage/backpack/cultpack,
/obj/item/clothing/suit/space/cult,
/obj/item/clothing/shoes/cult,
/obj/item/clothing/head/helmet/space/cult,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"p" = (
/obj/structure/closet/crate/secure/loot,
/obj/item/weapon/twohanded/fireaxe/fluff/mjollnir,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"q" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/flame/candle/candelabra/everburn,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"r" = (
/obj/fire,
/turf/simulated/floor/gorefloor,
/area/submap/fallenportal)
"t" = (
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"u" = (
/obj/item/weapon/deadringer,
/obj/item/weapon/vampiric,
/obj/item/clothing/suit/armor/pcarrier/bulletproof/full,
/turf/simulated/floor/gorefloor2,
/area/submap/fallenportal)
"v" = (
/turf/simulated/floor/cult{
oxygen = 20.7263
},
/area/submap/fallenportal)
"w" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/telecube/randomized,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"x" = (
/mob/living/simple_mob/construct/artificer/caster,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"y" = (
/mob/living/simple_mob/vore/demonAI/wendigo{
faction = "cult"
},
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"z" = (
/obj/structure/closet/crate,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/weapon/material/knife/ritual,
/obj/item/weapon/material/knife/ritual,
/obj/item/weapon/storage/backpack/cultpack,
/obj/item/clothing/suit/space/cult,
/obj/item/clothing/shoes/cult,
/obj/item/clothing/head/helmet/space/cult,
/obj/item/weapon/storage/belt/bandolier,
/obj/item/weapon/storage/pill_bottle/dice_nerd,
/obj/item/weapon/shield/riot/tele,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"A" = (
/obj/structure/simple_door/sandstone,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"C" = (
/mob/living/simple_mob/humanoid/cultist/hunter,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"D" = (
/turf/simulated/floor/gorefloor2,
/area/submap/fallenportal)
"E" = (
/mob/living/simple_mob/vore/demonAI{
faction = "cult"
},
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"F" = (
/obj/structure/table/borosilicate,
/obj/random/weapon/guarenteed,
/turf/simulated/floor/cult{
oxygen = 20.7263
},
/area/submap/fallenportal)
"G" = (
/turf/simulated/wall/sandstone,
/area/submap/fallenportal)
"H" = (
/turf/simulated/floor/gorefloor,
/area/submap/fallenportal)
"I" = (
/mob/living/simple_mob/construct/wraith,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"J" = (
/turf/simulated/wall/cult,
/area/submap/fallenportal)
"K" = (
/obj/structure/table/borosilicate,
/obj/item/weapon/melee/cultblade,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"L" = (
/obj/structure/closet/crate/secure/loot,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"M" = (
/obj/structure/closet/crate,
/obj/item/clothing/suit/space/cult,
/obj/item/clothing/head/helmet/space/cult,
/obj/item/clothing/shoes/cult,
/obj/item/weapon/storage/backpack/cultpack,
/obj/item/weapon/melee/cultblade,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/turf/simulated/floor/gorefloor,
/area/submap/fallenportal)
"O" = (
/turf/template_noop,
/area/template_noop)
"P" = (
/mob/living/simple_mob/humanoid/cultist/human/bloodjaunt/fireball,
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"R" = (
/obj/effect/landmark/loot_spawn,
/turf/template_noop,
/area/submap/fallenportal)
"S" = (
/mob/living/simple_mob/humanoid/cultist/lizard,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"T" = (
/obj/structure/closet/crate,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/device/soulstone,
/obj/item/weapon/material/knife/ritual,
/obj/item/weapon/material/knife/ritual,
/obj/item/weapon/storage/backpack/cultpack,
/obj/item/clothing/suit/space/cult,
/obj/item/clothing/shoes/cult,
/obj/item/clothing/head/helmet/space/cult,
/obj/item/weapon/storage/bagoplanets,
/obj/item/weapon/storage/pill_bottle/peridaxon,
/obj/item/weapon/shield/primitive,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"U" = (
/mob/living/simple_mob/humanoid/cultist/castertesh,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"V" = (
/mob/living/simple_mob/humanoid/cultist/tesh,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
"X" = (
/turf/simulated/floor/cult,
/area/submap/fallenportal)
"Z" = (
/mob/living/simple_mob/humanoid/cultist/noodle,
/turf/simulated/floor/tiled/asteroid_steel,
/area/submap/fallenportal)
(1,1,1) = {"
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
"}
(2,1,1) = {"
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
l
l
l
l
l
l
l
l
l
l
"}
(3,1,1) = {"
O
O
O
l
l
l
l
l
l
l
O
O
O
O
O
H
G
G
G
G
G
G
G
G
l
"}
(4,1,1) = {"
O
O
l
l
J
J
J
J
J
R
l
l
l
l
O
l
G
k
t
t
G
T
L
G
l
"}
(5,1,1) = {"
O
l
l
J
J
m
h
X
J
J
X
E
X
l
l
y
G
F
c
v
A
t
t
G
l
"}
(6,1,1) = {"
l
l
J
J
m
m
X
X
o
J
D
l
X
X
X
X
G
K
t
t
G
k
t
G
l
"}
(7,1,1) = {"
l
J
J
n
m
X
H
X
X
f
H
l
l
l
l
l
G
k
t
V
G
S
t
G
l
"}
(8,1,1) = {"
l
J
m
X
m
X
m
m
m
J
J
l
l
X
X
X
G
G
A
G
G
G
G
G
l
"}
(9,1,1) = {"
l
J
r
m
a
m
m
X
X
x
J
X
X
P
l
D
G
v
v
v
U
t
t
G
l
"}
(10,1,1) = {"
l
J
X
a
a
a
D
X
m
m
J
l
l
l
l
l
G
t
t
t
t
b
t
G
l
"}
(11,1,1) = {"
l
J
I
a
u
a
m
m
m
p
J
R
l
l
H
l
A
t
t
t
t
q
Z
G
l
"}
(12,1,1) = {"
l
J
X
a
a
a
X
X
m
r
J
H
l
l
l
l
G
t
t
t
t
w
t
G
l
"}
(13,1,1) = {"
l
J
m
m
a
m
m
D
X
x
J
X
X
P
l
l
G
v
v
v
U
t
t
G
l
"}
(14,1,1) = {"
l
J
m
X
m
X
m
m
m
J
J
l
l
X
X
X
G
G
A
G
G
G
G
G
l
"}
(15,1,1) = {"
l
J
J
M
m
X
X
X
X
f
l
l
l
l
l
D
G
k
t
V
G
C
t
G
l
"}
(16,1,1) = {"
l
l
J
J
m
m
X
X
o
J
l
H
X
X
X
X
G
K
t
t
G
k
t
G
l
"}
(17,1,1) = {"
O
l
l
J
J
m
x
H
J
J
X
y
X
l
l
E
G
e
c
v
A
t
t
G
l
"}
(18,1,1) = {"
O
O
l
l
J
J
J
J
J
R
l
l
l
l
O
l
G
k
t
t
G
z
L
G
l
"}
(19,1,1) = {"
O
O
O
l
l
l
l
l
l
l
O
O
O
O
O
l
G
G
G
G
G
G
G
G
l
"}
(20,1,1) = {"
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
l
l
l
l
l
l
l
l
l
l
"}
(21,1,1) = {"
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
O
"}
@@ -0,0 +1,844 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/machinery/crystal/ice,
/turf/simulated/floor/outdoors/ice/dark_smooth,
/area/submap/frostlake)
"d" = (
/turf/template_noop,
/area/template_noop)
"i" = (
/turf/simulated/floor/outdoors/ice/dark_smooth,
/area/submap/frostlake)
"n" = (
/obj/random/medical/lite,
/turf/simulated/floor/outdoors/ice/dark_smooth,
/area/submap/frostlake)
"o" = (
/turf/simulated/floor/snow{
oxygen = 20.7263
},
/area/submap/frostlake)
"s" = (
/turf/simulated/mineral/icey,
/area/submap/frostlake)
"v" = (
/obj/machinery/crystal/ice,
/turf/simulated/floor/snow{
oxygen = 20.7263
},
/area/submap/frostlake)
"A" = (
/obj/structure/loot_pile/surface/bones,
/turf/simulated/floor/snow{
oxygen = 20.7263
},
/area/submap/frostlake)
"D" = (
/mob/living/simple_mob/animal/sif/frostfly,
/turf/simulated/floor/snow{
oxygen = 20.7263
},
/area/submap/frostlake)
"J" = (
/obj/random/gun/random,
/turf/simulated/floor/snow{
oxygen = 20.7263
},
/area/submap/frostlake)
"K" = (
/obj/effect/map_effect/interval/effect_emitter/smoke/frost,
/obj/item/weapon/telecube/randomized/mated,
/turf/simulated/floor/water/hotspring,
/area/submap/frostlake)
"L" = (
/obj/effect/map_effect/interval/effect_emitter/smoke/frost,
/turf/simulated/floor/water/hotspring,
/area/submap/frostlake)
"O" = (
/obj/random/medical/pillbottle,
/turf/simulated/floor/outdoors/ice/dark_smooth,
/area/submap/frostlake)
(1,1,1) = {"
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
"}
(2,1,1) = {"
d
d
d
d
d
d
d
s
s
s
s
d
d
d
d
s
s
s
d
d
d
d
d
d
d
d
d
"}
(3,1,1) = {"
d
d
d
d
d
d
s
s
i
i
s
s
s
s
s
s
i
s
s
s
s
s
s
d
d
d
d
"}
(4,1,1) = {"
d
d
d
d
d
s
s
i
i
i
i
i
i
i
i
i
a
i
i
i
i
i
s
s
d
d
d
"}
(5,1,1) = {"
d
d
d
d
s
s
i
i
i
i
a
i
i
i
i
i
i
i
i
i
a
i
i
s
d
d
d
"}
(6,1,1) = {"
d
d
d
s
s
i
i
i
i
i
n
i
i
i
a
i
i
L
i
i
i
i
s
s
d
d
d
"}
(7,1,1) = {"
d
d
s
s
i
i
L
i
a
i
i
a
i
i
i
i
i
i
i
i
i
i
s
d
d
d
d
"}
(8,1,1) = {"
d
d
s
i
i
i
i
i
i
i
i
D
i
i
O
i
i
i
a
i
i
i
s
d
d
d
d
"}
(9,1,1) = {"
d
d
s
i
i
a
i
i
i
n
A
o
o
i
i
a
i
D
J
i
a
i
s
d
d
d
d
"}
(10,1,1) = {"
d
d
s
i
i
i
O
i
i
a
o
o
o
i
i
i
o
o
A
o
i
i
s
d
d
d
d
"}
(11,1,1) = {"
d
d
s
s
i
i
i
i
o
o
o
J
o
a
i
i
o
o
o
o
O
i
s
d
d
d
d
"}
(12,1,1) = {"
d
d
d
s
s
i
i
i
D
A
o
o
i
i
i
i
o
o
o
D
i
i
s
s
d
d
d
"}
(13,1,1) = {"
d
d
d
d
s
i
i
a
i
o
o
i
i
i
i
i
a
A
o
a
i
i
i
s
s
d
d
"}
(14,1,1) = {"
d
d
d
d
s
i
i
i
i
i
a
i
i
K
i
A
o
i
i
i
i
i
i
i
s
d
d
"}
(15,1,1) = {"
d
d
d
d
s
i
L
i
i
o
o
o
i
i
D
o
o
o
i
i
i
a
i
i
s
s
d
"}
(16,1,1) = {"
d
d
d
d
s
s
i
i
D
o
o
A
o
i
o
o
J
o
a
i
i
i
i
i
i
s
d
"}
(17,1,1) = {"
d
d
d
d
d
s
i
i
v
J
o
o
v
i
o
o
A
o
D
i
i
i
i
i
i
s
d
"}
(18,1,1) = {"
d
d
d
d
d
s
i
i
o
o
o
o
o
O
a
o
o
o
o
i
i
i
n
a
i
s
d
"}
(19,1,1) = {"
d
d
d
d
s
s
i
a
i
A
o
D
i
i
i
i
o
o
i
i
i
i
L
i
i
s
d
"}
(20,1,1) = {"
d
d
d
d
s
i
i
i
i
a
i
i
i
i
i
i
i
i
i
i
a
i
i
i
i
s
d
"}
(21,1,1) = {"
d
d
d
d
s
i
i
i
i
i
i
i
a
i
i
i
a
i
O
i
i
i
i
i
s
s
d
"}
(22,1,1) = {"
d
d
d
d
s
i
i
a
i
i
i
i
i
i
n
i
i
i
i
i
i
i
i
s
s
d
d
"}
(23,1,1) = {"
d
d
d
d
s
i
i
i
i
L
i
i
i
i
a
i
i
i
i
i
s
s
s
s
d
d
d
"}
(24,1,1) = {"
d
d
d
d
s
i
i
O
i
i
i
i
i
i
i
i
i
i
s
s
s
d
d
d
d
d
d
"}
(25,1,1) = {"
d
d
d
d
s
s
s
i
i
i
s
s
s
s
s
s
s
s
s
d
d
d
d
d
d
d
d
"}
(26,1,1) = {"
d
d
d
d
d
d
s
s
s
s
s
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
"}
(27,1,1) = {"
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
d
"}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,603 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"n" = (
/turf/template_noop,
/area/submap/leechpond)
"u" = (
/turf/simulated/floor/outdoors/mud,
/area/submap/leechpond)
"y" = (
/turf/simulated/floor/wood/sif,
/area/submap/leechpond)
"C" = (
/turf/simulated/floor/water,
/area/submap/leechpond)
"G" = (
/turf/simulated/wall/log_sif,
/area/submap/leechpond)
"T" = (
/mob/living/simple_mob/faithless/strong,
/turf/simulated/floor/water,
/area/submap/leechpond)
"U" = (
/obj/effect/landmark/loot_spawn,
/turf/simulated/floor/wood/sif,
/area/submap/leechpond)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
u
u
u
u
u
u
u
u
u
u
u
u
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
a
u
u
C
C
C
C
C
C
C
C
C
C
u
u
u
u
a
a
a
a
a
"}
(4,1,1) = {"
a
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
u
a
a
a
"}
(5,1,1) = {"
a
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
a
a
"}
(6,1,1) = {"
a
u
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
a
"}
(7,1,1) = {"
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
a
"}
(8,1,1) = {"
a
u
C
C
C
C
C
C
C
T
C
C
G
G
C
C
C
C
C
C
C
u
a
"}
(9,1,1) = {"
a
u
u
C
C
C
C
C
G
y
C
C
U
G
C
C
C
C
C
C
C
u
a
"}
(10,1,1) = {"
a
a
u
u
C
C
C
C
G
C
C
C
C
C
C
C
C
C
C
C
C
u
a
"}
(11,1,1) = {"
a
a
a
u
u
C
C
C
C
C
C
y
C
T
C
C
C
C
C
C
u
u
a
"}
(12,1,1) = {"
a
a
a
n
u
C
C
C
C
C
C
y
y
C
C
C
C
C
C
C
u
a
a
"}
(13,1,1) = {"
a
a
u
u
u
C
C
C
G
y
T
C
C
G
C
C
C
C
C
C
u
a
a
"}
(14,1,1) = {"
a
a
u
C
C
C
C
C
G
U
C
C
U
C
C
C
C
C
C
C
u
u
a
"}
(15,1,1) = {"
a
u
u
C
C
C
C
C
G
G
G
C
G
C
C
C
C
C
C
C
C
u
a
"}
(16,1,1) = {"
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
a
"}
(17,1,1) = {"
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
a
a
"}
(18,1,1) = {"
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
u
u
u
a
a
"}
(19,1,1) = {"
a
u
C
C
C
C
C
C
C
C
C
C
C
C
C
u
u
a
a
a
a
a
a
"}
(20,1,1) = {"
a
u
u
C
C
C
C
C
u
u
u
u
C
C
C
u
a
a
a
a
a
a
a
"}
(21,1,1) = {"
a
a
u
u
C
C
C
u
u
a
a
u
u
C
C
u
a
a
a
a
a
a
a
"}
(22,1,1) = {"
a
a
a
u
u
u
u
u
a
a
a
a
u
u
u
u
a
a
a
a
a
a
a
"}
(23,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
@@ -0,0 +1,643 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"b" = (
/obj/structure/table/gold,
/obj/random/energy/highend,
/obj/random/meat,
/obj/random/meat,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"d" = (
/mob/living/simple_mob/vore/lamia/random,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"r" = (
/obj/structure/table/gold,
/obj/random/contraband/nofail,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"s" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
/obj/item/seeds/random,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"t" = (
/mob/living/simple_mob/vore/leopardmander/exotic,
/turf/simulated/floor/water/ocean{
outdoors = 0
},
/area/submap/leppy)
"z" = (
/turf/simulated/mineral/ignore_mapgen,
/area/submap/leppy)
"A" = (
/turf/template_noop,
/area/template_noop)
"D" = (
/obj/structure/table/gold,
/obj/random/medical/pillbottle,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"F" = (
/obj/structure/table/gold,
/obj/random/meat,
/obj/random/meat,
/obj/random/meat,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"J" = (
/obj/structure/table/gold,
/obj/random/maintenance/misc,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
"K" = (
/turf/simulated/wall/sandstone,
/area/submap/leppy)
"L" = (
/turf/simulated/floor/water/ocean{
outdoors = 0
},
/area/submap/leppy)
"Z" = (
/obj/machinery/portable_atmospherics/hydroponics/soil,
/obj/item/seeds/ambrosiavulgarisseed,
/turf/simulated/mineral/floor/cave,
/area/submap/leppy)
(1,1,1) = {"
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
"}
(2,1,1) = {"
A
A
A
A
A
K
K
K
K
K
K
K
K
A
A
A
A
A
A
A
A
A
A
"}
(3,1,1) = {"
A
A
A
A
A
K
r
a
a
a
a
r
K
A
A
A
A
A
A
A
A
A
A
"}
(4,1,1) = {"
A
A
A
A
A
K
D
d
a
a
a
J
K
A
z
z
z
A
A
A
A
A
A
"}
(5,1,1) = {"
A
A
A
A
A
K
r
a
a
a
a
r
K
z
z
a
z
z
z
A
A
A
A
"}
(6,1,1) = {"
A
A
A
z
z
K
K
K
a
a
K
K
K
a
a
a
a
a
z
z
A
A
A
"}
(7,1,1) = {"
A
A
A
z
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
z
A
A
A
"}
(8,1,1) = {"
A
A
A
z
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
z
z
A
A
"}
(9,1,1) = {"
A
A
z
z
a
a
a
L
L
L
L
a
a
a
L
L
a
a
a
a
z
A
A
"}
(10,1,1) = {"
A
A
z
a
a
a
a
L
L
L
L
L
L
L
L
L
L
a
a
a
z
A
A
"}
(11,1,1) = {"
A
A
z
a
a
a
L
L
L
L
L
L
L
L
L
L
L
a
a
a
z
A
A
"}
(12,1,1) = {"
A
A
z
a
a
a
L
L
L
L
L
L
L
L
L
L
L
a
a
a
z
A
A
"}
(13,1,1) = {"
A
A
z
a
a
a
L
L
L
L
L
t
L
L
L
L
L
a
a
z
z
A
A
"}
(14,1,1) = {"
A
A
z
z
a
a
L
L
L
L
L
L
L
L
L
L
a
a
a
z
z
A
A
"}
(15,1,1) = {"
A
A
A
z
z
a
a
a
L
L
L
L
L
L
L
L
a
K
K
K
K
K
A
"}
(16,1,1) = {"
A
A
A
A
z
z
a
a
a
a
L
L
L
L
L
a
a
a
a
a
Z
K
A
"}
(17,1,1) = {"
A
A
A
K
K
K
a
a
K
a
a
L
L
L
a
a
a
a
a
a
a
K
A
"}
(18,1,1) = {"
A
A
A
K
F
a
a
a
K
a
a
a
a
a
a
a
a
K
s
a
Z
K
A
"}
(19,1,1) = {"
A
A
A
K
F
d
a
a
K
a
a
a
a
a
a
a
a
K
a
d
a
K
A
"}
(20,1,1) = {"
A
A
A
K
b
a
a
a
K
z
z
z
a
a
a
a
z
K
s
a
Z
K
A
"}
(21,1,1) = {"
A
A
A
K
K
K
K
K
K
A
A
z
z
z
z
z
z
K
K
K
K
K
A
"}
(22,1,1) = {"
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
"}
(23,1,1) = {"
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
A
"}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,997 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/simulated/floor/dungeon,
/area/submap/metroidmaze)
"p" = (
/turf/simulated/wall/gold{
can_open = 1
},
/area/submap/metroidmaze)
"s" = (
/turf/simulated/wall/dungeon{
can_open = 1
},
/area/submap/metroidmaze)
"w" = (
/mob/living/simple_mob/metroid/juvenile/omega,
/turf/simulated/floor/dungeon,
/area/submap/metroidmaze)
"D" = (
/turf/template_noop,
/area/template_noop)
"E" = (
/mob/living/simple_mob/metroid/juvenile/alpha,
/turf/simulated/floor/dungeon,
/area/submap/metroidmaze)
"F" = (
/obj/structure/table/standard,
/obj/random/projectile/random,
/obj/random/energy/highend,
/obj/random/firstaid,
/obj/random/medical/pillbottle,
/turf/simulated/floor/dungeon,
/area/submap/metroidmaze)
"Z" = (
/turf/simulated/wall/dungeon,
/area/submap/metroidmaze)
(1,1,1) = {"
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
"}
(2,1,1) = {"
D
Z
Z
a
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
D
"}
(3,1,1) = {"
D
Z
Z
a
Z
Z
Z
Z
Z
Z
Z
Z
a
a
a
a
a
a
a
a
a
a
a
Z
Z
Z
a
Z
Z
D
"}
(4,1,1) = {"
D
Z
Z
a
a
a
a
a
a
a
Z
Z
a
Z
Z
Z
a
Z
Z
a
Z
Z
a
Z
Z
Z
a
Z
Z
D
"}
(5,1,1) = {"
D
Z
Z
a
Z
Z
Z
a
Z
Z
Z
Z
a
Z
Z
Z
a
Z
Z
a
Z
Z
a
Z
Z
Z
a
Z
Z
D
"}
(6,1,1) = {"
D
Z
Z
Z
Z
Z
Z
a
a
a
a
a
a
a
Z
Z
a
Z
Z
a
Z
Z
a
a
a
a
a
a
Z
D
"}
(7,1,1) = {"
D
Z
a
a
a
a
a
a
Z
Z
Z
Z
Z
a
Z
Z
a
Z
Z
a
a
a
a
Z
Z
Z
Z
a
Z
D
"}
(8,1,1) = {"
D
Z
a
Z
Z
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
Z
Z
a
Z
D
"}
(9,1,1) = {"
D
Z
a
Z
Z
Z
Z
a
Z
Z
Z
Z
Z
a
a
a
E
p
a
Z
Z
Z
a
Z
Z
Z
Z
a
Z
D
"}
(10,1,1) = {"
D
Z
a
Z
a
a
a
a
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
E
Z
Z
Z
Z
a
Z
D
"}
(11,1,1) = {"
D
Z
a
Z
a
Z
Z
a
a
a
a
a
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
p
Z
Z
a
a
a
a
D
"}
(12,1,1) = {"
D
Z
a
a
a
Z
Z
Z
Z
a
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
a
a
Z
Z
a
Z
Z
Z
D
"}
(13,1,1) = {"
D
Z
Z
Z
a
Z
Z
Z
Z
a
Z
Z
F
a
a
F
Z
Z
a
Z
Z
a
Z
Z
Z
a
Z
Z
Z
D
"}
(14,1,1) = {"
D
Z
Z
Z
a
Z
Z
Z
Z
a
Z
Z
a
a
a
a
Z
Z
a
a
a
a
Z
Z
Z
a
Z
Z
Z
D
"}
(15,1,1) = {"
D
Z
Z
Z
a
a
a
a
a
a
Z
Z
a
w
a
a
a
a
a
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
D
"}
(16,1,1) = {"
D
Z
Z
a
a
Z
Z
Z
Z
a
Z
Z
a
a
a
a
Z
Z
a
Z
Z
Z
a
a
a
a
Z
Z
Z
D
"}
(17,1,1) = {"
D
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
F
a
a
F
Z
Z
a
Z
Z
Z
a
Z
Z
a
Z
Z
Z
D
"}
(18,1,1) = {"
D
Z
Z
a
Z
a
a
a
a
a
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
a
Z
Z
a
a
a
Z
D
"}
(19,1,1) = {"
D
Z
Z
a
Z
a
Z
Z
Z
a
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
a
Z
Z
Z
Z
a
Z
D
"}
(20,1,1) = {"
D
Z
Z
a
Z
a
Z
Z
Z
a
a
a
a
Z
Z
a
a
a
a
Z
Z
Z
a
Z
Z
Z
Z
a
Z
D
"}
(21,1,1) = {"
D
Z
Z
a
Z
a
Z
Z
Z
Z
Z
Z
a
Z
Z
a
Z
Z
Z
s
a
a
a
a
a
a
a
a
Z
D
"}
(22,1,1) = {"
D
a
a
a
a
a
a
a
Z
Z
Z
Z
a
Z
Z
a
Z
Z
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(23,1,1) = {"
D
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
Z
a
Z
Z
a
Z
Z
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(24,1,1) = {"
D
Z
Z
Z
Z
Z
Z
a
Z
Z
Z
Z
a
Z
Z
a
Z
a
a
a
a
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(25,1,1) = {"
D
Z
Z
a
Z
Z
Z
a
a
a
a
a
a
a
E
p
Z
a
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(26,1,1) = {"
D
Z
Z
a
Z
Z
Z
a
Z
a
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
a
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(27,1,1) = {"
D
Z
Z
a
a
a
a
a
Z
a
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
a
a
a
a
a
a
a
Z
Z
D
"}
(28,1,1) = {"
D
Z
Z
Z
Z
Z
Z
Z
Z
a
a
a
a
a
a
a
a
a
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(29,1,1) = {"
D
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
a
Z
Z
D
"}
(30,1,1) = {"
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
D
"}
@@ -0,0 +1,833 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/machinery/atmospherics/unary/engine{
dir = 1
},
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"c" = (
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"d" = (
/obj/machinery/door/blast/shutters,
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"i" = (
/obj/structure/table/rack,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/random/rigsuit/chancetofail,
/obj/item/rig_module/mounted/phase,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"j" = (
/turf/simulated/wall/gold,
/area/submap/mouseattack)
"l" = (
/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire/manned,
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"o" = (
/obj/structure/table/rack,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/random/rigsuit/chancetofail,
/obj/item/rig_module/voice,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"q" = (
/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned,
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"s" = (
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"t" = (
/obj/structure/shuttle/engine/heater,
/turf/simulated/wall/gold,
/area/submap/mouseattack)
"u" = (
/mob/living/simple_mob/animal/space/mouse_army/ammo,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"v" = (
/obj/structure/table/rack,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/rig_module/chem_dispenser/injector/advanced,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"w" = (
/obj/structure/table/rack,
/obj/item/rig_module/device/defib,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"y" = (
/turf/template_noop,
/area/submap/mouseattack)
"z" = (
/obj/machinery/door/blast/shutters,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
"B" = (
/mob/living/simple_mob/animal/space/mouse_army/operative,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"C" = (
/obj/structure/table/rack,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/random/rigsuit/chancetofail,
/obj/item/rig_module/rad_shield,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"D" = (
/mob/living/simple_mob/mechanical/mecha/mouse_tank/eraticator/manned,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"J" = (
/mob/living/simple_mob/mechanical/mecha/mouse_tank/livewire/manned,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"N" = (
/obj/structure/table/rack,
/obj/random/rigsuit/chancetofail,
/obj/item/rig_module/fabricator,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/item/weapon/archaeological_find,
/obj/random/maintenance/research,
/obj/random/maintenance/research,
/obj/random/maintenance/security,
/obj/random/maintenance/security,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"S" = (
/obj/machinery/door/airlock/gold,
/turf/simulated/floor/tiled/yellow,
/area/submap/mouseattack)
"X" = (
/turf/simulated/wall/r_wall,
/area/submap/mouseattack)
"Y" = (
/mob/living/simple_mob/mechanical/mecha/mouse_tank/manned,
/obj/effect/floor_decal/corner/grey/diagonal,
/turf/simulated/floor/tiled/dark,
/area/submap/mouseattack)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(3,1,1) = {"
a
a
d
s
s
s
s
s
s
s
s
s
s
s
s
s
q
s
X
a
"}
(4,1,1) = {"
a
a
d
s
Y
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(5,1,1) = {"
a
a
d
s
s
s
s
j
c
c
B
c
c
c
t
b
s
s
X
a
"}
(6,1,1) = {"
a
a
d
s
s
s
s
j
J
c
N
w
c
J
t
b
s
s
X
a
"}
(7,1,1) = {"
a
a
d
s
s
s
s
j
c
c
c
B
c
c
t
b
s
s
X
a
"}
(8,1,1) = {"
a
a
d
s
Y
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(9,1,1) = {"
a
a
d
s
s
s
s
s
s
s
s
s
s
s
s
s
q
s
X
a
"}
(10,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(11,1,1) = {"
a
a
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
a
"}
(12,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(13,1,1) = {"
a
a
z
s
s
s
s
s
s
s
s
s
s
s
s
s
Y
s
X
a
"}
(14,1,1) = {"
a
a
z
s
l
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(15,1,1) = {"
a
a
z
s
s
s
s
j
c
c
c
u
c
c
t
b
s
s
X
a
"}
(16,1,1) = {"
a
a
z
s
s
s
s
j
D
c
v
o
c
D
t
b
s
s
X
a
"}
(17,1,1) = {"
a
a
z
s
s
s
s
j
c
c
c
u
c
c
t
b
s
s
X
a
"}
(18,1,1) = {"
a
a
z
s
l
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(19,1,1) = {"
a
a
z
s
s
s
s
s
s
s
s
s
s
s
s
s
Y
s
X
a
"}
(20,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(21,1,1) = {"
a
a
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
y
a
"}
(22,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(23,1,1) = {"
a
a
z
s
s
s
s
s
s
s
s
s
s
s
s
s
Y
s
X
a
"}
(24,1,1) = {"
a
a
z
s
q
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(25,1,1) = {"
a
a
z
s
s
s
s
j
c
c
c
u
c
c
t
b
s
s
X
a
"}
(26,1,1) = {"
a
a
z
s
s
s
s
j
J
c
i
C
c
J
t
b
s
s
X
a
"}
(27,1,1) = {"
a
a
z
s
s
s
s
j
c
c
B
c
c
c
t
b
s
s
X
a
"}
(28,1,1) = {"
a
a
z
s
l
s
s
j
j
S
j
j
S
j
t
b
s
s
X
a
"}
(29,1,1) = {"
a
a
z
s
s
s
s
s
s
s
s
s
s
s
s
s
q
s
X
a
"}
(30,1,1) = {"
a
a
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
a
"}
(31,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,853 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/item/stack/material/phoron{
amount = 10
},
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"c" = (
/turf/simulated/floor/water,
/area/submap/phorondragon)
"d" = (
/obj/item/weapon/cell/hyper,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"i" = (
/mob/living/simple_mob/vore/aggressive/dragon/virgo3b,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"j" = (
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"k" = (
/turf/simulated/floor/water/deep,
/area/submap/phorondragon)
"n" = (
/obj/item/slime_extract/purple,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"s" = (
/obj/structure/outcrop/phoron,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"u" = (
/obj/item/toy/plushie/carp/nebula,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"x" = (
/turf/template_noop,
/area/template_noop)
"A" = (
/obj/item/slime_extract/dark_purple,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"E" = (
/obj/item/mecha_parts/mecha_equipment/weapon/phoron_bore,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"H" = (
/turf/simulated/wall/phoron,
/area/submap/phorondragon)
"J" = (
/turf/simulated/mineral,
/area/submap/phorondragon)
"P" = (
/obj/item/weapon/gun/magnetic/matfed/phoronbore,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"S" = (
/obj/effect/landmark/loot_spawn,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
"U" = (
/obj/structure/prop/statue/phoron,
/turf/simulated/floor/water/deep,
/area/submap/phorondragon)
"W" = (
/obj/effect/landmark/loot_spawn/low,
/turf/simulated/floor/outdoors/rocks/caves,
/area/submap/phorondragon)
(1,1,1) = {"
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
"}
(2,1,1) = {"
x
x
x
x
x
x
x
x
x
x
x
x
x
x
c
c
c
c
c
c
x
x
x
x
x
x
x
"}
(3,1,1) = {"
x
x
x
x
x
x
x
x
x
x
x
x
x
c
c
c
c
c
c
c
c
x
x
x
x
x
x
"}
(4,1,1) = {"
x
x
x
x
x
x
x
x
x
x
x
x
c
c
c
c
c
c
c
c
c
c
c
x
x
x
x
"}
(5,1,1) = {"
x
x
x
x
x
x
x
x
x
x
J
c
c
c
c
k
k
k
k
U
c
c
c
c
c
x
x
"}
(6,1,1) = {"
x
x
x
x
x
x
x
x
x
J
J
c
c
c
k
k
k
k
k
k
k
c
c
c
c
c
x
"}
(7,1,1) = {"
x
x
x
x
x
x
x
J
J
j
j
c
c
c
U
k
k
k
k
k
k
k
c
c
c
c
x
"}
(8,1,1) = {"
x
x
x
x
x
J
J
S
j
j
j
c
c
c
k
k
k
k
k
k
k
k
k
c
c
c
x
"}
(9,1,1) = {"
x
x
x
x
J
J
j
j
j
j
j
c
c
c
k
k
k
k
k
k
k
k
k
k
c
c
x
"}
(10,1,1) = {"
x
x
x
J
J
s
j
j
j
j
j
j
c
c
k
k
k
k
k
k
k
k
k
U
c
c
x
"}
(11,1,1) = {"
x
x
J
J
j
j
a
j
s
W
j
j
c
c
k
k
k
k
k
k
k
k
k
c
c
c
x
"}
(12,1,1) = {"
x
x
J
S
j
j
j
j
j
j
j
j
c
c
c
k
k
k
k
k
k
k
k
c
c
c
x
"}
(13,1,1) = {"
x
x
J
j
j
j
i
j
j
j
j
j
c
c
c
k
k
k
k
k
k
k
c
c
c
x
x
"}
(14,1,1) = {"
x
J
J
j
n
j
j
j
a
j
j
j
c
c
c
c
k
U
k
k
k
c
c
c
c
x
x
"}
(15,1,1) = {"
x
J
j
s
j
j
j
j
j
j
j
j
s
c
c
c
c
c
c
c
c
c
c
c
c
x
x
"}
(16,1,1) = {"
x
J
j
W
j
j
W
s
j
j
j
j
j
j
c
c
c
c
c
c
c
c
c
c
x
x
x
"}
(17,1,1) = {"
x
J
j
j
a
j
j
j
j
j
j
W
j
j
j
j
j
c
c
c
c
c
c
c
x
x
x
"}
(18,1,1) = {"
x
J
j
j
H
j
j
j
j
j
j
s
j
j
a
j
j
j
j
j
j
j
s
J
x
x
x
"}
(19,1,1) = {"
x
J
s
H
j
a
j
j
i
j
j
A
j
j
j
j
j
j
j
j
j
J
J
J
x
x
x
"}
(20,1,1) = {"
x
J
J
E
j
s
d
j
j
j
j
j
j
j
j
j
W
s
j
j
j
J
x
x
x
x
x
"}
(21,1,1) = {"
x
x
J
j
j
P
j
j
j
j
j
a
j
j
i
j
j
j
j
j
J
J
x
x
x
x
x
"}
(22,1,1) = {"
x
x
J
J
u
a
H
j
j
s
W
j
j
j
j
j
a
j
j
J
x
x
x
x
x
x
x
"}
(23,1,1) = {"
x
x
x
J
J
H
a
j
j
j
j
j
j
j
s
j
j
S
J
J
x
x
x
x
x
x
x
"}
(24,1,1) = {"
x
x
x
x
J
s
j
j
j
j
j
a
j
j
j
j
J
J
x
x
x
x
x
x
x
x
x
"}
(25,1,1) = {"
x
x
x
x
J
J
J
j
j
j
j
j
j
j
S
J
J
x
x
x
x
x
x
x
x
x
x
"}
(26,1,1) = {"
x
x
x
x
x
x
J
J
J
S
J
J
J
J
J
J
x
x
x
x
x
x
x
x
x
x
x
"}
(27,1,1) = {"
x
x
x
x
x
x
x
x
J
J
J
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
"}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,568 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
/area/template_noop)
"b" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced,
/turf/simulated/floor,
/area/submap/solarmoff)
"c" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4;
health = 1e+006
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced,
/turf/simulated/floor,
/area/submap/solarmoff)
"d" = (
/obj/item/weapon/melee/energy/sword/imperial,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"g" = (
/obj/effect/decal/cleanable/ash,
/obj/random/energy/highend,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"i" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced,
/turf/simulated/floor,
/area/submap/solarmoff)
"m" = (
/obj/item/weapon/storage/secure/briefcase/fuelrod,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"n" = (
/turf/simulated/floor/water,
/area/submap/solarmoff)
"p" = (
/obj/item/rig_module/ai_container,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"s" = (
/obj/item/rig_module/vision/thermal,
/obj/effect/decal/cleanable/ash,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"u" = (
/turf/simulated/wall/r_wall,
/area/submap/solarmoff)
"v" = (
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/water,
/area/submap/solarmoff)
"B" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4;
health = 1e+006
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 1
},
/turf/simulated/floor,
/area/submap/solarmoff)
"C" = (
/obj/effect/decal/cleanable/ash,
/obj/item/rig_module/atmos_shield,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"E" = (
/mob/living/simple_mob/animal/space/carp/large,
/turf/simulated/floor/water,
/area/submap/solarmoff)
"F" = (
/obj/random/energy/highend,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"G" = (
/turf/simulated/mineral/crystal_shiny,
/area/submap/solarmoff)
"I" = (
/obj/effect/decal/cleanable/ash,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"J" = (
/turf/simulated/floor,
/area/submap/solarmoff)
"K" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4;
health = 1e+006
},
/obj/structure/window/reinforced{
dir = 8
},
/turf/simulated/floor,
/area/submap/solarmoff)
"L" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced{
dir = 1
},
/obj/structure/window/reinforced,
/turf/simulated/floor,
/area/submap/solarmoff)
"M" = (
/obj/structure/flora/ausbushes/reedbush,
/turf/simulated/floor/water,
/area/submap/solarmoff)
"N" = (
/obj/structure/flora/ausbushes/reedbush,
/obj/effect/decal/cleanable/ash,
/turf/simulated/floor/water,
/area/submap/solarmoff)
"P" = (
/obj/structure/grille,
/obj/structure/window/reinforced{
dir = 4;
health = 1e+006
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/structure/window/reinforced,
/turf/simulated/floor,
/area/submap/solarmoff)
"R" = (
/obj/structure/flora/lily2,
/turf/simulated/floor/water,
/area/submap/solarmoff)
"T" = (
/obj/effect/decal/cleanable/ash,
/obj/item/rig_module/rescue_pharm,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"U" = (
/mob/living/simple_mob/vore/solarmoth,
/obj/item/rig_module/device/stamp,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"V" = (
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/solarmoff)
"W" = (
/obj/machinery/door/airlock/highsecurity,
/turf/simulated/floor,
/area/submap/solarmoff)
(1,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(2,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
(3,1,1) = {"
a
a
a
a
u
B
K
K
K
K
K
K
K
P
u
a
a
a
a
"}
(4,1,1) = {"
a
a
a
u
u
n
M
n
R
n
n
n
n
M
u
u
a
a
a
"}
(5,1,1) = {"
a
a
u
u
n
n
R
n
n
E
n
n
R
n
n
u
u
a
a
"}
(6,1,1) = {"
a
a
L
n
n
E
n
n
n
n
M
n
n
E
n
n
L
a
a
"}
(7,1,1) = {"
a
a
b
M
n
n
M
v
G
G
G
n
n
n
n
M
b
a
a
"}
(8,1,1) = {"
a
a
b
n
R
n
n
G
G
s
G
G
M
R
n
n
b
a
a
"}
(9,1,1) = {"
a
a
b
n
n
n
G
G
p
I
F
G
G
n
n
n
b
a
a
"}
(10,1,1) = {"
a
a
b
n
E
M
G
T
V
U
I
m
G
n
E
n
b
a
a
"}
(11,1,1) = {"
a
a
b
n
n
R
G
G
g
I
d
G
G
n
R
n
b
a
a
"}
(12,1,1) = {"
a
a
b
M
n
n
n
G
G
C
G
G
N
n
n
M
b
a
a
"}
(13,1,1) = {"
a
a
b
n
n
M
n
n
G
G
G
n
R
n
n
n
b
a
a
"}
(14,1,1) = {"
a
a
c
n
n
E
n
n
M
n
n
n
n
E
n
n
i
a
a
"}
(15,1,1) = {"
a
a
u
u
n
n
R
n
n
E
n
R
n
n
n
u
u
a
a
"}
(16,1,1) = {"
a
a
a
u
u
n
M
n
n
n
n
n
n
M
u
u
a
a
a
"}
(17,1,1) = {"
a
a
a
a
u
B
K
P
u
W
u
B
K
P
u
a
a
a
a
"}
(18,1,1) = {"
a
a
a
a
a
a
a
a
u
J
u
a
a
a
a
a
a
a
a
"}
(19,1,1) = {"
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
a
"}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,455 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/structure/railing,
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"b" = (
/obj/structure/railing{
dir = 4
},
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"c" = (
/obj/structure/railing,
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"g" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/outdoors/dirt,
/area/template_noop)
"h" = (
/obj/random/energy/highend,
/obj/item/weapon/material/knife/machete/hatchet/unathiknife,
/obj/structure/closet/crate,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"i" = (
/obj/effect/decal/cleanable/blood/oil/streak,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"j" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"k" = (
/turf/simulated/wall/wood,
/area/submap/teppifarm)
"l" = (
/turf/simulated/floor/outdoors/dirt,
/area/template_noop)
"m" = (
/obj/structure/table/standard,
/obj/item/weapon/material/minihoe,
/obj/item/weapon/reagent_containers/glass/beaker/large,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"p" = (
/obj/structure/table/standard,
/obj/item/weapon/material/knife/machete/hatchet,
/obj/item/weapon/reagent_containers/glass/bucket,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"q" = (
/obj/machinery/portable_atmospherics/hydroponics,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"r" = (
/obj/structure/table/woodentable,
/obj/random/contraband/nofail,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"s" = (
/obj/structure/table/woodentable,
/obj/item/weapon/flame/candle/candelabra,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"t" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/outdoors/dirt,
/area/template_noop)
"u" = (
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"x" = (
/obj/structure/window/basic,
/obj/structure/curtain/black,
/obj/structure/table/standard,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"y" = (
/obj/effect/decal/cleanable/blood/oil/streak,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"z" = (
/obj/structure/window/basic,
/obj/effect/landmark/loot_spawn,
/obj/structure/curtain/black,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"A" = (
/obj/structure/table/rack,
/obj/item/weapon/melee/umbrella/random,
/obj/item/weapon/gun/energy/taser/xeno,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"B" = (
/obj/structure/simple_door/wood,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"C" = (
/obj/structure/railing{
dir = 8;
icon_state = "railing0"
},
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"D" = (
/turf/simulated/floor/water,
/area/submap/teppifarm)
"E" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/landmark/loot_spawn,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"G" = (
/obj/structure/simple_door/wood,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"H" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/loot_pile/surface/bones,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"I" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/crate/hydroponics/exotic,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"L" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/outdoors/dirt,
/area/template_noop)
"M" = (
/obj/structure/simple_door/wood,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"O" = (
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"P" = (
/obj/item/weapon/material/shard,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"Q" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"S" = (
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"U" = (
/mob/living/simple_mob/vore/alienanimals/teppi,
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"V" = (
/obj/effect/decal/cleanable/blood/oil/streak,
/obj/structure/table/rack,
/obj/item/weapon/melee/umbrella/random,
/obj/item/weapon/gun/energy/taser/xeno,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"W" = (
/obj/structure/railing{
dir = 4
},
/obj/structure/railing,
/turf/simulated/floor/outdoors/grass/sif,
/area/submap/teppifarm)
"X" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"Y" = (
/obj/structure/bed/padded,
/obj/item/weapon/bedsheet/blue,
/turf/simulated/floor/wood/alt,
/area/submap/teppifarm)
"Z" = (
/turf/template_noop,
/area/template_noop)
(1,1,1) = {"
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
"}
(2,1,1) = {"
Z
k
k
k
k
k
k
k
k
C
C
C
C
c
Z
"}
(3,1,1) = {"
Z
k
Y
O
k
s
E
V
k
u
u
U
u
a
Z
"}
(4,1,1) = {"
Z
k
r
Q
k
Q
H
Q
P
j
u
u
u
a
Z
"}
(5,1,1) = {"
Z
k
s
O
k
i
Q
Q
O
u
u
u
u
a
Z
"}
(6,1,1) = {"
Z
k
h
O
k
s
Q
A
k
u
u
u
D
a
Z
"}
(7,1,1) = {"
Z
k
k
G
k
k
B
k
k
b
b
b
b
W
Z
"}
(8,1,1) = {"
Z
k
s
O
O
X
O
B
L
t
g
g
l
l
Z
"}
(9,1,1) = {"
Z
k
s
O
X
y
O
M
L
L
g
g
l
Z
Z
"}
(10,1,1) = {"
Z
k
k
M
k
k
k
k
g
g
t
l
l
Z
Z
"}
(11,1,1) = {"
Z
k
I
O
Q
X
O
z
t
l
l
Z
Z
Z
Z
"}
(12,1,1) = {"
Z
k
S
O
O
O
Q
z
g
l
Z
Z
Z
Z
Z
"}
(13,1,1) = {"
Z
k
q
q
q
p
m
x
l
Z
Z
Z
Z
Z
Z
"}
(14,1,1) = {"
Z
k
k
k
k
k
k
k
l
Z
Z
Z
Z
Z
Z
"}
(15,1,1) = {"
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
"}
@@ -0,0 +1,280 @@
// This causes PoI maps to get 'checked' and compiled, when undergoing a unit test.
// This is so CI can validate PoIs, and ensure future changes don't break PoIs, as PoIs are loaded at runtime and the compiler can't catch errors.
// When adding a new PoI, please add it to this list.
#if MAP_TEST
#include "begderg.dmm"
#include "blobden.dmm"
#include "bloodchurch.dmm"
#include "clockwork.dmm"
#include "cove.dmm"
#include "crashedexplo.dmm"
#include "demonranch.dmm"
#include "dronelord.dmm"
#include "fallenportal.dmm"
#include "frostlake.dmm"
#include "leechpond.dmm"
#include "leppy.dmm"
#include "mausarmy.dmm"
#include "metroidmaze.dmm"
#include "phorondragon.dmm"
#include "piratefortress.dmm"
#include "piratevessel.dmm"
#include "piratevox.dmm"
#include "plontden.dmm"
#include "Redshuttledown.dmm"
#include "solarmoff.dmm"
#include "spooderchurch.dmm"
#include "teppifarm.dmm"
#include "vault.dmm"
#include "xenobio.dmm"
#endif
/datum/map_template/surface/valley
name = "Surface Content - Valley"
desc = "Used to make a place of strange terror."
//For POIs in the valley walls.
/datum/map_template/surface/valley/walls
//For POIs in the center.
/dataum/map_template/surface/valley/inner
/datum/map_template/surface/valley/walls/begderg
name = "Dragon Den"
desc = "A rocky den for a big dragon rematch"
mappath = 'maps/submaps/surface_submaps/valley/begderg.dmm'
cost = 25
/datum/map_template/surface/valley/walls/blobden
name = "Blob Den"
desc = "An large supply drop with an unfortante guest"
mappath = 'maps/submaps/surface_submaps/valley/blobden.dmm'
cost = 25
/datum/map_template/surface/valley/inner/bloodchurch
name = "Blood Church"
desc = "A chorus of carnage sung from high above."
mappath = 'maps/submaps/surface_submaps/valley/bloodchurch.dmm'
cost = 25
/datum/map_template/surface/valley/walls/carriershuttle
name = "Carrier Shuttle"
desc = "A parked merc shuttle with a mini zoo"
mappath = 'maps/submaps/surface_submaps/valley/carriershuttle.dmm'
cost = 25
/datum/map_template/surface/valley/inner/cliffmanor
name = "Cliff Manor"
desc = "A small shack surronded by jellyfish and a moat"
mappath = 'maps/submaps/surface_submaps/valley/cliffmanor.dmm'
cost = 25
/datum/map_template/surface/valley/walls/clockwork
name = "Clockwork Den"
desc = "A firey pit with what remains of a nigh fallen church"
mappath = 'maps/submaps/surface_submaps/valley/clockwork.dmm'
cost = 25
/datum/map_template/surface/valley/walls/cove
name = "Pirate Cove"
desc = "A cove full of pirates. And a brawl outside."
mappath = 'maps/submaps/surface_submaps/valley/cove.dmm'
cost = 25
/datum/map_template/surface/valley/inner/crashedexplo
name = "Spider Explo"
desc = "Oh look, some spider explorers"
mappath = 'maps/submaps/surface_submaps/valley/crashedexplo.dmm'
cost = 25
/datum/map_template/surface/valley/inner/demonranch
name = "Demon Ranch"
desc = "A farm made in an attempt to reduced demon summoning costs."
mappath = 'maps/submaps/surface_submaps/valley/demonranch.dmm'
cost = 25
/datum/map_template/surface/valley/walls/dronelord
name = "Drone Overlords"
desc = "A duo of bounty hunters utlizing drones"
mappath = 'maps/submaps/surface_submaps/valley/dronelord.dmm'
cost = 25
/datum/map_template/surface/valley/inner/eclipseaqua
name = "Eclipse Base Aqua"
desc = "An island base making a certian chem"
mappath = 'maps/submaps/surface_submaps/valley/eclipseaqua.dmm'
cost = 25
/datum/map_template/surface/valley/walls/eclipsedigsight
name = "Eclipse Base Dig"
desc = "A large scale xenoarch digsite."
mappath = 'maps/submaps/surface_submaps/valley/eclipsedigsight.dmm'
cost = 25
/datum/map_template/surface/valley/walls/eclipselava
name = "Eclipse Base Molten"
desc = "A well defended base guarding a strange expirement"
mappath = 'maps/submaps/surface_submaps/valley/eclipselava.dmm'
cost = 25
/datum/map_template/surface/valley/inner/eclipsemountain
name = "Eclipse Base Mountain"
desc = "A telecomns base"
mappath = 'maps/submaps/surface_submaps/valley/eclipsemountain.dmm'
cost = 25
/datum/map_template/surface/valley/walls/fallenlab
name = "Fallen Lab"
desc = "A lab created to expirment with nanites, long since forgotten"
mappath = 'maps/submaps/surface_submaps/valley/fallenlab.dmm'
cost = 25
/datum/map_template/surface/valley/inner/fallenportal
name = "Failed Portal"
desc = "Someone attemted to create a portal to redspace. Forgot the BSA"
mappath = 'maps/submaps/surface_submaps/valley/fallenportal.dmm'
cost = 25
/datum/map_template/surface/valley/walls/frostlake
name = "Frost Lake"
desc = "Ice Puzzle, now with death"
mappath = 'maps/submaps/surface_submaps/valley/frostlake.dmm'
cost = 25
/datum/map_template/surface/valley/walls/hydroxeno
name = "Aquatic Xenos"
desc = "Xenomoprhs in a squish cave"
mappath = 'maps/submaps/surface_submaps/valley/hydroxeno.dmm'
cost = 25
/datum/map_template/surface/valley/inner/leechpond
name = "Leech Pond"
desc = "A strange lake reborn."
mappath = 'maps/submaps/surface_submaps/valley/leechpond.dmm'
cost = 25
/datum/map_template/surface/valley/walls/leppy
name = "Leppy Den"
desc = "A rare leppy with some rare friends."
mappath = 'maps/submaps/surface_submaps/valley/leppy.dmm'
cost = 25
/datum/map_template/surface/valley/inner/mausarmy
name = "Mouse Takeover"
desc = "Mice trying to take over a warehouse"
mappath = 'maps/submaps/surface_submaps/valley/mausarmy.dmm'
cost = 25
/datum/map_template/surface/valley/walls/metroidmaze
name = "Maze"
desc = "A strange maze with several metroids"
mappath = 'maps/submaps/surface_submaps/valley/metroidmaze.dmm'
cost = 25
/datum/map_template/surface/valley/inner/mouseattack
name = "Assualt Base"
desc = "A base with many mice ready for attack"
mappath = 'maps/submaps/surface_submaps/valley/mouseattack.dmm'
cost = 25
/datum/map_template/surface/valley/walls/mousehq
name = "Maus HQ"
desc = "An HQ that holds many deadly mice"
mappath = 'maps/submaps/surface_submaps/valley/mousehq.dmm'
cost = 25
/datum/map_template/surface/valley/walls/phorondragon
name = "Phoron Den"
desc = "A den of several phoron dragons"
mappath = 'maps/submaps/surface_submaps/valley/phorondragon.dmm'
cost = 25
/datum/map_template/surface/valley/inner/piratefortress
name = "Pirate Fort"
desc = "A goodie and pirate filled base with a moat"
mappath = 'maps/submaps/surface_submaps/valley/piratefortress.dmm'
cost = 25
/datum/map_template/surface/valley/inner/piratevessel
name = "Pirate Vessel"
desc = "A vessel meant for short jaunts and raids"
mappath = 'maps/submaps/surface_submaps/valley/piratevessel.dmm'
cost = 25
/datum/map_template/surface/valley/inner/piratevpx
name = "Vox Pirates"
desc = "A mercanry vessel having some vox raiders attack"
mappath = 'maps/submaps/surface_submaps/valley/piratevox.dmm'
cost = 25
/datum/map_template/surface/valley/walls/plontden
name = "Plant Den"
desc = "A familiar looking plant set up"
mappath = 'maps/submaps/surface_submaps/valley/plontden.dmm'
cost = 25
/datum/map_template/surface/valley/walls/puzzledungeon
name = "Puzzle Dungeon"
desc = "No threats just puzzles"
mappath = 'maps/submaps/surface_submaps/valley/puzzledungeon.dmm'
cost = 25
/datum/map_template/surface/valley/inner/redshuttledown
name = "Red Shuttle Down"
desc = "The mercanry bringing out some of their best to scout Sif"
mappath = 'maps/submaps/surface_submaps/valley/Redshuttledown.dmm'
cost = 25
/datum/map_template/surface/valley/inner/settlement
name = "Settlement"
desc = "An abaondened settlement."
mappath = 'maps/submaps/surface_submaps/valley/settlement.dmm'
cost = 25
/datum/map_template/surface/valley/inner/siegepoint
name = "Siege Point"
desc = "A friendly merc base under the assualt of pirates"
mappath = 'maps/submaps/surface_submaps/valley/siegepoint.dmm'
cost = 25
/datum/map_template/surface/valley/walls/solarmoff
name = "Solar Pond"
desc = "A pond with fesh and a small sun"
mappath = 'maps/submaps/surface_submaps/valley/solarmoff.dmm'
cost = 25
/datum/map_template/surface/valley/inner/spooderchurch
name = "Spider Church"
desc = "Trust us, it's a cult about spiders, ignore the mercs"
mappath = 'maps/submaps/surface_submaps/valley/spooderchurch.dmm'
cost = 25
/datum/map_template/surface/valley/inner/teppifarm
name = "Teppi Farm"
desc = "Cute a teppi"
mappath = 'maps/submaps/surface_submaps/valley/teppifarm.dmm'
cost = 25
/datum/map_template/surface/valley/walls/vault
name = "Vault"
desc = "The vault holds many secerts"
mappath = 'maps/submaps/surface_submaps/valley/vault.dmm'
cost = 25
/datum/map_template/surface/valley/inner/xenobio
name = "Xenobio Lab"
desc = "A ruined xenobio"
mappath = 'maps/submaps/surface_submaps/valley/xenobio.dmm'
cost = 25
@@ -0,0 +1,171 @@
/area/submap/begderg
name = "Poi Valley Wall - Rock Dragon"
ambience = AMBIENCE_RUINS
/area/submap/blobden
name = "Poi Valley Wall - Blob Den"
ambience = AMBIENCE_RUINS
/area/submap/bloodchurch
name = "Poi Valley - Blood Church"
ambience = AMBIENCE_UNHOLY
/area/submap/carriershuttle
name = "Poi Valley Wall - Carrier Shuttle"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/cliffmanor
name = "Poi Valley Wall - Cliff Manor"
ambience = AMBIENCE_RUINS
/area/submap/clockwork
name = "Poi Valley Wall - Clockwork"
ambience = AMBIENCE_RUINS
/area/submap/cove
name = "Poi Valley Wall - Cove"
ambience = AMBIENCE_RUINS
/area/submap/crashedexplo
name = "Poi Valley - Spooder Explorers"
ambience = AMBIENCE_RUINS
/area/submap/demonranch
name = "Poi Valley - Demon Ranch"
ambience = AMBIENCE_UNHOLY
/area/submap/dronelord
name = "Poi Valley Wall - Drone Overlords"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/eclipseaqua
name = "Poi Valley Wall - Eclipse Aqua"
requires_power = FALSE
ambience = AMBIENCE_TECH_RUINS
/area/submap/eclipsedigsight
name = "Poi Valley Wall - Eclipse Dig"
requires_power = FALSE
ambience = AMBIENCE_TECH_RUINS
/area/submap/eclipselava
name = "Poi Valley Wall - Eclipse Lava"
requires_power = FALSE
ambience = AMBIENCE_TECH_RUINS
/area/submap/eclipsemountain
name = "Poi Valley Wall - Eclipse Mountain"
requires_power = FALSE
ambience = AMBIENCE_TECH_RUINS
/area/submap/fallenlab
name = "Poi Valley Wall - Fallen Lab"
ambience = AMBIENCE_RUINS
/area/submap/fallenportal
name = "Poi Valley - Failed Portal"
ambience = AMBIENCE_RUINS
/area/submap/hydroxeno
name = "Poi Valley Wall - Hydro Xeno"
ambience = AMBIENCE_RUINS
/area/submap/frostlake
name = "Poi Valley Wall - Frost Lake"
ambience = AMBIENCE_RUINS
/area/submap/leechpond
name = "Poi Valley - Leech Pond"
ambience = AMBIENCE_RUINS
/area/submap/leppy
name = "Poi Valley Wall - Leppy"
ambience = AMBIENCE_RUINS
/area/submap/mausarmy
name = "Poi Valley - Maus Army"
ambience = AMBIENCE_RUINS
/area/submap/metroidmaze
name = "Poi Valley Walls - Maze"
ambience = AMBIENCE_RUINS
/area/submap/mouseattack
name = "Poi Valley Wall - Mouse Attack"
ambience = AMBIENCE_RUINS
/area/submap/mousehq
name = "Poi Valley Wall - Mouse HQ"
ambience = AMBIENCE_RUINS
/area/submap/phorondragon
name = "Poi Valley Walls - Phoron Pack"
ambience = AMBIENCE_RUINS
/area/submap/piratefortress
name = "Poi Valley - Doom Pirates"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/piratevessel
name = "Poi Valley - Shuttle Pirates"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/piratevox
name = "Poi Valley - Vox Raiders"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/plontden
name = "Poi Valley Walls - Plont"
ambience = AMBIENCE_RUINS
/area/submap/puzzledungeon
name = "Poi Valley Walls - Puzzle Dungeon"
ambience = AMBIENCE_RUINS
/area/submap/redshuttledown
name = "Poi Valley - Red Shuttle"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/settlement
name = "Poi Valley Walls - Settlement"
ambience = AMBIENCE_RUINS
/area/submap/siegepoint
name = "Poi Valley Walls - Siegepoint"
ambience = AMBIENCE_RUINS
/area/submap/solarmoff
name = "Poi Valley Walls - Solar Moth"
ambience = AMBIENCE_RUINS
/area/submap/spooderchurch
name = "Poi Valley - Fake Cult"
ambience = AMBIENCE_UNHOLY
/area/submap/teppifarm
name = "Poi Valley - Teppi Farm"
ambience = AMBIENCE_RUINS
/area/submap/vault
name = "Poi Valley Walls - Vault"
requires_power = FALSE
ambience = AMBIENCE_RUINS
/area/submap/xenobio
name = "Poi Valley - Xenobio"
ambience = AMBIENCE_RUINS
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,268 @@
//? File contains functions to generate flat /icon's from things.
//? This is obviously expensive. Very, very expensive.
//? new get_flat_icon is faster, but, really, don't use these unless you need to.
//? Chances are unless you are:
//? - sending to html/browser (for non character preview purposes)
//? - taking photos
//? - doing complex icon operations that can't be done with filters/overlays
//? you probably don't need to use these.
/**
* Generates an icon with all 4 directions of something.
*
* @params
* - A - appearancelike object.
* - no_anim - flatten out animations
*/
/proc/get_compound_icon(atom/A, no_anim)
var/mutable_appearance/N = new
N.appearance = A
N.dir = NORTH
var/icon/north = get_flat_icon(N, NORTH, no_anim = no_anim)
N.dir = SOUTH
var/icon/south = get_flat_icon(N, SOUTH, no_anim = no_anim)
N.dir = EAST
var/icon/east = get_flat_icon(N, EAST, no_anim = no_anim)
N.dir = WEST
var/icon/west = get_flat_icon(N, WEST, no_anim = no_anim)
qdel(N)
//Starts with a blank icon because of byond bugs.
var/icon/full = icon('modular_chomp/icons/system/blank_32x32.dmi', "")
full.Insert(north, dir = NORTH)
full.Insert(south, dir = SOUTH)
full.Insert(east, dir = EAST)
full.Insert(west, dir = WEST)
qdel(north)
qdel(south)
qdel(east)
qdel(west)
return full
/proc/get_flat_icon(appearance/appearancelike, dir, no_anim)
if(!dir && isloc(appearancelike))
dir = appearancelike.dir
return _get_flat_icon(appearancelike, dir, no_anim, null, TRUE)
/proc/_get_flat_icon(image/A, defdir, no_anim, deficon, start)
// start with blank image
var/static/icon/template = icon('modular_chomp/icons/system/blank_32x32.dmi', "")
#define BLANK icon(template)
#define INDEX_X_LOW 1
#define INDEX_X_HIGH 2
#define INDEX_Y_LOW 3
#define INDEX_Y_HIGH 4
#define flatX1 flat_size[INDEX_X_LOW]
#define flatX2 flat_size[INDEX_X_HIGH]
#define flatY1 flat_size[INDEX_Y_LOW]
#define flatY2 flat_size[INDEX_Y_HIGH]
#define addX1 add_size[INDEX_X_LOW]
#define addX2 add_size[INDEX_X_HIGH]
#define addY1 add_size[INDEX_Y_LOW]
#define addY2 add_size[INDEX_Y_HIGH]
// invis? skip.
if(!A || A.alpha <= 0)
return BLANK
// detect if state exists
var/icon/icon = A.icon || deficon
var/state = A.icon_state
var/none = !icon
if(!none)
var/list/states = icon_states(icon)
if(!(state in states))
if(!("" in states))
none = TRUE
else
state = ""
// determine if there's directionals
// propagate forced direcitons down if and only if A has a direction
// todo: this results in a mismatch if someone is facing east but their overlays are facing south.
var/dir
if(start || !A.dir)
dir = defdir
else
dir = A.dir
var/ourdir = dir
if(!none && ourdir != SOUTH)
if(length(icon_states(icon(icon, state, NORTH))))
else if(length(icon_states(icon(icon, state, EAST))))
else if(length(icon_states(icon(icon, state, WEST))))
else
ourdir = SOUTH
// start generating
if(!A.overlays.len && !A.underlays.len)
// we don't even have ourselves!
if(none)
return BLANK
// no overlays/underlays, we're done, just mix in ourselves
var/icon/self_icon = icon(icon(icon, state, ourdir), "", SOUTH, no_anim? 1 : null)
if(A.alpha < 255)
self_icon.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
if(A.color)
if(islist(A.color))
self_icon.MapColors(arglist(A.color))
else
self_icon.Blend(A.color, ICON_MULTIPLY)
return self_icon
// safety/performance check
if((A.overlays.len + A.underlays.len) > 80)
// we use fucking insertion check
// > 80 = death.
CRASH("get_flat_icon tried to process more than 80 layers")
// otherwise, we have to blend in all overlays/underlays.
var/icon/flat = BLANK
var/list/appearance/gathered = list()
var/appearance/copying
var/appearance/comparing
var/i
var/appearance/self
var/current_layer
if(!none)
// add the atom itself
self = image(icon = icon, icon_state = state, layer = A.layer, dir = ourdir)
self.color = A.color
self.alpha = A.alpha
self.blend_mode = A.blend_mode
gathered[self] = A.layer
// gather
for(copying as anything in A.overlays)
// todo: better handling
if(copying.plane != FLOAT_PLANE && copying.plane != A.plane)
// we don't care probably HUD or something lol
continue
current_layer = copying.layer
// if it's float layer, shove it right above atom.
if(current_layer < 0)
if(current_layer < -1000)
CRASH("who the hell is using -1000 or below on float layers?")
current_layer = A.layer + (1000 + current_layer) / 1000
// else, add 1 so it doesn't potentially collide on float
else
++current_layer
// inject with insertion sort
for(i in 1 to gathered.len)
comparing = gathered[i]
if(current_layer < gathered[comparing])
gathered.Insert(i, copying)
// associate
gathered[copying] = current_layer
for(copying as anything in A.underlays)
// todo: better handling
if(copying.plane != FLOAT_PLANE && copying.plane != A.plane)
// we don't care probably HUD or something lol
continue
current_layer = copying.layer
// if it's float layer, shove it right below atom.
if(current_layer < 0)
if(current_layer < -1000)
CRASH("who the hell is using -1000 or below on float layers?")
current_layer = A.layer - (1000 + current_layer) / 1000
// else, subtract 1 so it doesn't potentially collide on float
else
--current_layer
// inject with insertion sort
for(i in 1 to gathered.len)
comparing = gathered[i]
if(current_layer < gathered[comparing])
gathered.Insert(i, copying)
// associate
gathered[copying] = current_layer
// adding icon we're mixing in
var/icon/adding
// current dimensions
var/list/flat_size = list(1, flat.Width(), 1, flat.Height())
// adding dimensions
var/list/add_size[4]
// blend mode
var/blend_mode
// blend in layers
for(copying as anything in gathered)
// if invis, skip
if(copying.alpha == 0)
continue
// detect if it's literally ourselves
if(copying == self)
// blend in normally (no sense doing otherwise unless we're on map)
// we can't assume we're on map.
blend_mode = BLEND_OVERLAY
adding = icon(icon, state, ourdir)
else
// use full get_flat_icon
blend_mode = copying.blend_mode
adding = _get_flat_icon(copying, defdir, no_anim, icon)
// if we got nothing, skip
if(!adding)
continue
// detect adding size, taking into account copying overlay's pixel offsets
add_size[INDEX_X_LOW] = min(flatX1, copying.pixel_x + 1)
add_size[INDEX_X_HIGH] = max(flatX2, copying.pixel_x + adding.Width())
add_size[INDEX_Y_LOW] = min(flatY1, copying.pixel_y + 1)
add_size[INDEX_Y_HIGH] = max(flatY2, copying.pixel_y + adding.Height())
// resize flat to fit if necessary
if(flat_size ~! add_size)
flat.Crop(
addX1 - flatX1 + 1,
addY1 - flatY1 + 1,
addX2 - flatX1 + 1,
addY2 - flatY1 + 1
)
flat_size = add_size.Copy()
// blend the overlay/underlay in
flat.Blend(adding, blendMode2iconMode(blend_mode), copying.pixel_x + 2 - flatX1, copying.pixel_y + 2 - flatY1)
// apply colors
if(A.color)
if(islist(A.color))
flat.MapColors(arglist(A.color))
else
flat.Blend(A.color, ICON_MULTIPLY)
// apply alpha
if(A.alpha < 255)
flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
// finalize
if(no_anim)
// clean up frames
var/icon/cleaned = icon()
cleaned.Insert(flat, "", SOUTH, 1, 0)
return cleaned
else
// just return flat as SOUTH
return icon(flat, "", SOUTH)
#undef flatX1
#undef flatX2
#undef flatY1
#undef flatY2
#undef addX1
#undef addX2
#undef addY1
#undef addY2
#undef INDEX_X_LOW
#undef INDEX_X_HIGH
#undef INDEX_Y_LOW
#undef INDEX_Y_HIGH
#undef BLANK
@@ -0,0 +1,172 @@
/**
* Convert RBG to HSL
*/
/proc/rgb2hsl(red, green, blue)
red /= 255
green /= 255
blue /= 255
var/max = max(red, green, blue)
var/min = min(red, green, blue)
var/range = max - min
var/hue = 0
var/saturation = 0
var/lightness = 0
lightness = (max + min) / 2
if(range != 0)
if(lightness < 0.5)
saturation = range / (max + min)
else
saturation = range / (2 - max - min)
var/dred = ((max - red) / (6 * max)) + 0.5
var/dgreen = ((max - green) / (6 * max)) + 0.5
var/dblue = ((max - blue) / (6 * max)) + 0.5
if(max == red)
hue = dblue - dgreen
else if(max == green)
hue = dred - dblue + (1 / 3)
else
hue = dgreen - dred + (2 / 3)
if(hue < 0)
hue++
else if(hue > 1)
hue--
return list(hue, saturation, lightness)
/**
* Convert HSL to RGB
*/
/proc/hsl2rgb(hue, saturation, lightness)
var/red
var/green
var/blue
if(saturation == 0)
red = lightness * 255
green = red
blue = red
else
var/a;var/b;
if(lightness < 0.5)
b = lightness * (1 + saturation)
else
b = (lightness + saturation) - (saturation * lightness)
a = 2 * lightness - b
red = round(255 * hue2rgb(a, b, hue + (1/3)), 1)
green = round(255 * hue2rgb(a, b, hue), 1)
blue = round(255 * hue2rgb(a, b, hue - (1/3)), 1)
return list(red, green, blue)
/**
* Convert hue to RGB
*/
/proc/hue2rgb(a, b, hue)
if(hue < 0)
hue++
else if(hue > 1)
hue--
if(6*hue < 1)
return (a + (b - a) * 6 * hue)
if(2*hue < 1)
return b
if(3*hue < 2)
return (a + (b - a) * ((2 / 3) - hue) * 6)
return a
/**
* Convert Kelvin to RGB
*
* Adapted from http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
*/
/proc/heat2colour(temp)
return rgb(
heat2colour_r(temp),
heat2colour_g(temp),
heat2colour_b(temp),
)
/**
* Convert Kelvin for the Red channel
*/
/proc/heat2colour_r(temp)
temp /= 100
if(temp <= 66)
. = 255
else
. = max(0, min(255, 329.698727446 * (temp - 60) ** -0.1332047592))
/**
* Convert Kelvin for the Green channel
*/
/proc/heat2colour_g(temp)
temp /= 100
if(temp <= 66)
. = max(0, min(255, 99.4708025861 * log(temp) - 161.1195681661))
else
. = max(0, min(255, 288.1221685293 * ((temp - 60) ** -0.075148492)))
/**
* Convert Kelvin for the Blue channel
*/
/proc/heat2colour_b(temp)
temp /= 100
if(temp >= 66)
. = 255
else
if(temp <= 16)
. = 0
else
. = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307))
/**
* Assumes format #RRGGBB #rrggbb
*/
/proc/color_hex2num(A)
if(!A || length(A) != length_char(A))
return 0
var/R = hex2num(copytext(A, 2, 4))
var/G = hex2num(copytext(A, 4, 6))
var/B = hex2num(copytext(A, 6, 8))
return R+G+B
/**
*! Word of warning:
* Using a matrix like this as a color value will simplify it back to a string after being set.
*/
/proc/color_hex2color_matrix(string)
var/length = length(string)
if((length != 7 && length != 9) || length != length_char(string))
return color_matrix_identity()
var/r = hex2num(copytext(string, 2, 4)) / 255
var/g = hex2num(copytext(string, 4, 6)) / 255
var/b = hex2num(copytext(string, 6, 8)) / 255
var/a = 1
if(length == 9)
a = hex2num(copytext(string, 8, 10)) / 255
if(!isnum(r) || !isnum(g) || !isnum(b) || !isnum(a))
return color_matrix_identity()
return list(
r,0,0,0,0,
g,0,0,0,0,
b,0,0,0,0,
a,0,0,0,0,
)
/**
* Will drop all values not on the diagonal.
*/
/proc/color_matrix2color_hex(list/the_matrix)
if(!istype(the_matrix) || the_matrix.len != 20)
return "#ffffffff"
return rgb(
the_matrix[1] * 255, // R
the_matrix[6] * 255, // G
the_matrix[11] * 255, // B
the_matrix[16] * 255, // A
)
@@ -0,0 +1,84 @@
/datum/browser/modal/color_matrix_picker
var/color_matrix
/datum/browser/modal/color_matrix_picker/New(mob/user, message, title, button1 = "Ok", button2, button3, stealfocus = TRUE, timeout = 0, list/values)
if(!user)
return
if(!values)
values = list(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
if(values.len < 12)
values.len = 12
var/list/output = list()
output += "<form><input type='hidden' name='src' value='[REF(src)]'>"
output += "[message]"
#define MATRIX_FIELD(field, default) "<b><label for='[##field]'>[##field]</label></b> <input type='number' step='0.001' name='[field]' value='[default]'>"
output += "<br><br>"
output += MATRIX_FIELD("rr", values[1])
output += MATRIX_FIELD("gr", values[4])
output += MATRIX_FIELD("br", values[7])
output += "<br><br>"
output += MATRIX_FIELD("rg", values[2])
output += MATRIX_FIELD("gg", values[5])
output += MATRIX_FIELD("bg", values[8])
output += "<br><br>"
output += MATRIX_FIELD("rb", values[3])
output += MATRIX_FIELD("gb", values[6])
output += MATRIX_FIELD("bb", values[9])
output += "<br><br>"
output += MATRIX_FIELD("cr", values[10])
output += MATRIX_FIELD("cg", values[11])
output += MATRIX_FIELD("cb", values[12])
output += "<br><br>"
#undef MATRIX_FIELD
output += {"</ul><div style="text-align:center">
<button type="submit" name="button" value="1" style="font-size:large;float:[( button2 ? "left" : "right" )]">[button1]</button>"}
if (button2)
output += {"<button type="submit" name="button" value="2" style="font-size:large;[( button3 ? "" : "float:right" )]">[button2]</button>"}
if (button3)
output += {"<button type="submit" name="button" value="3" style="font-size:large;float:right">[button3]</button>"}
output += {"</form></div>"}
..(user, ckey("[user]-[message]-[title]-[world.time]-[rand(1,10000)]"), title, 800, 400, src, stealfocus, timeout)
set_content(output.Join(""))
/datum/browser/modal/color_matrix_picker/Topic(href, list/href_list)
if(href_list["close"] || !user)
opentime = 0
return
if(href_list["button"])
var/button = text2num(href_list["button"])
if(ISINRANGE(button, 1, 3))
selectedbutton = button
var/list/cm = rgb_construct_color_matrix(
text2num(href_list["rr"]),
text2num(href_list["rg"]),
text2num(href_list["rb"]),
text2num(href_list["gr"]),
text2num(href_list["gg"]),
text2num(href_list["gb"]),
text2num(href_list["br"]),
text2num(href_list["bg"]),
text2num(href_list["bb"]),
text2num(href_list["cr"]),
text2num(href_list["cg"]),
text2num(href_list["cb"])
)
if(cm)
color_matrix = cm
opentime = 0
close()
/proc/color_matrix_picker(mob/user, message, title, button1 = "Ok", button2, button3, stealfocus, timeout = 10 MINUTES, list/values)
if(!istype(user))
if(istype(user, /client))
var/client/C = user
user = C.mob
else
return
var/datum/browser/modal/color_matrix_picker/B = new(user, message, title, button1, button2, button3, stealfocus, timeout, values)
B.open()
B.wait()
return list("button" = B.selectedbutton, "matrix" = B.color_matrix)
@@ -0,0 +1,143 @@
/**
* hey, remember mutable appearance?
*
* only:
* - this isn't a real object rather than a struct
* - i'm making a cast for it so we can VV it
* - this is also used to cast procs that operate on appearance-like things.
*
* Sue me, I need to debug things somehow
*
* DO NOT USE THESE UNLESS YOU KNOW WHAT YOU ARE DOING.
*/
/appearance
var/alpha
var/appearance_flags
var/blend_mode
var/color
var/desc
var/dir
var/gender
var/icon
var/icon_state
var/invisibility
var/infra_luminosity
var/list/filters
var/layer
var/luminosity
var/maptext
var/maptext_width
var/maptext_height
var/maptext_x
var/maptext_y
var/mouse_over_pointer
var/mouse_drag_pointer
var/mouse_drop_pointer
var/mouse_drop_zone
var/mouse_opacity
var/name
var/opacity
var/list/overlays
var/override
var/pixel_x
var/pixel_y
var/pixel_w
var/pixel_z
var/plane
var/render_source
var/render_target
var/suffix
var/text
var/transform
var/list/underlays
// var/vis_flags
//! vis_flags missing even though byond ref says it's there, fuck off why is this possible
GLOBAL_REAL_VAR(_appearance_var_list) = list(
"alpha",
"appearance_flags",
"blend_mode",
"color",
"desc",
"dir",
"gender",
"icon",
"icon_state",
"invisibility",
"infra_luminosity",
"filters",
"layer",
"luminosity",
"maptext",
"maptext_width",
"maptext_height",
"maptext_x",
"maptext_y",
"mouse_over_pointer",
"mouse_drag_pointer",
"mouse_drop_pointer",
"mouse_drop_zone",
"mouse_opacity",
"name",
"opacity",
"overlays",
"override",
"pixel_x",
"pixel_y",
"pixel_w",
"pixel_z",
"plane",
"render_source",
"render_target",
"suffix",
"text",
"transform",
"underlays"
// "vis_flags"
)
/proc/__appearance_v_debug(appearance/A, name)
switch(name)
#define DEBUG_APPEARANCE_VAR(n) if(#n) return debug_variable(name, A.n, 0, null)
DEBUG_APPEARANCE_VAR(alpha)
DEBUG_APPEARANCE_VAR(appearance_flags)
DEBUG_APPEARANCE_VAR(blend_mode)
DEBUG_APPEARANCE_VAR(color)
DEBUG_APPEARANCE_VAR(desc)
DEBUG_APPEARANCE_VAR(dir)
DEBUG_APPEARANCE_VAR(gender)
DEBUG_APPEARANCE_VAR(icon)
DEBUG_APPEARANCE_VAR(icon_state)
DEBUG_APPEARANCE_VAR(invisibility)
DEBUG_APPEARANCE_VAR(infra_luminosity)
DEBUG_APPEARANCE_VAR(filters)
DEBUG_APPEARANCE_VAR(layer)
DEBUG_APPEARANCE_VAR(luminosity)
DEBUG_APPEARANCE_VAR(maptext)
DEBUG_APPEARANCE_VAR(maptext_width)
DEBUG_APPEARANCE_VAR(maptext_height)
DEBUG_APPEARANCE_VAR(maptext_x)
DEBUG_APPEARANCE_VAR(maptext_y)
DEBUG_APPEARANCE_VAR(mouse_over_pointer)
DEBUG_APPEARANCE_VAR(mouse_drag_pointer)
DEBUG_APPEARANCE_VAR(mouse_drop_pointer)
DEBUG_APPEARANCE_VAR(mouse_drop_zone)
DEBUG_APPEARANCE_VAR(mouse_opacity)
DEBUG_APPEARANCE_VAR(name)
DEBUG_APPEARANCE_VAR(opacity)
DEBUG_APPEARANCE_VAR(overlays)
DEBUG_APPEARANCE_VAR(override)
DEBUG_APPEARANCE_VAR(pixel_x)
DEBUG_APPEARANCE_VAR(pixel_y)
DEBUG_APPEARANCE_VAR(pixel_w)
DEBUG_APPEARANCE_VAR(pixel_z)
DEBUG_APPEARANCE_VAR(plane)
DEBUG_APPEARANCE_VAR(render_source)
DEBUG_APPEARANCE_VAR(render_target)
DEBUG_APPEARANCE_VAR(suffix)
DEBUG_APPEARANCE_VAR(text)
DEBUG_APPEARANCE_VAR(transform)
DEBUG_APPEARANCE_VAR(underlays)
// DEBUG_APPEARANCE_VAR(vis_flags)
#undef DEBUG_APPEARANCE_VAR
+55
View File
@@ -0,0 +1,55 @@
/atom
//! Colors
/**
* used to store the different colors on an atom
*
* its inherent color, the colored paint applied on it, special color effect etc...
*/
var/list/atom_colours
//! ## Atom Colour Priority System
/**
* A System that gives finer control over which atom colour to colour the atom with.
* The "highest priority" one is always displayed as opposed to the default of
* "whichever was set last is displayed"
*/
/// Adds an instance of colour_type to the atom's atom_colours list
/atom/proc/add_atom_colour(coloration, colour_priority)
if(!atom_colours || !atom_colours.len)
atom_colours = list()
atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently.
if(!coloration)
return
if(colour_priority > atom_colours.len)
return
atom_colours[colour_priority] = coloration
update_atom_colour()
/// Removes an instance of colour_type from the atom's atom_colours list
/atom/proc/remove_atom_colour(colour_priority, coloration)
if(!atom_colours)
atom_colours = list()
atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently.
if(colour_priority > atom_colours.len)
return
if(coloration && atom_colours[colour_priority] != coloration)
return //if we don't have the expected color (for a specific priority) to remove, do nothing
atom_colours[colour_priority] = null
update_atom_colour()
/// Resets the atom's color to null, and then sets it to the highest priority colour available
/atom/proc/update_atom_colour()
if(!atom_colours)
atom_colours = list()
atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently.
color = null
for(var/C in atom_colours)
if(islist(C))
var/list/L = C
if(L.len)
color = L
return
else if(C)
color = C
return

Some files were not shown because too many files have changed in this diff Show More