rendered paste bodyglobal mineRectangle = function(g, x, y, width, height)
{
for (cx = x; cx < x + width; cx = cx + 1)
{
for (cy = y; cy < y + height; cy = cy + 1)
{
symbol = g.mapGetTileSymbol(cx, cy);
designation = g.mapGetTileDesignation(cx, cy);
if ((designation & 0x80) == 0 && g.isSymbolMinable(symbol))
{
g.mapSetBlockActive(cx, cy, true);
g.mapSetTileDesignation(cx, cy, designation | 0x80);
}
}
}
};
global findLiquidEdge = function(g, sx, sy, height)
{
if (sx < 0 || sx >= g.mapWidth)
{
return -1;
}
for (y = sy; y < sy + height; y = y + 1)
{
symbol = g.mapGetTileSymbol(sx, y);
if (symbol == g.SYMBOL_FLUID)
{
return sx;
}
}
return findLiquidEdge(g, sx + 1, sy, height);
};
global findLiquidWall = function(g, sx, sy, height)
{
if (sx < 0 || sx >= g.mapWidth)
{
return -1;
}
for (y = sy; y < sy + height; y = y + 1)
{
symbol = g.mapGetTileSymbol(sx, y);
if (symbol != g.SYMBOL_FLUID)
{
return findLiquidWall(g, sx + 1, sy, height);
}
}
return sx;
};
global findMinableWall = function(g, sx, sy, height)
{
if (sx < 0 || sx >= g.mapWidth)
{
return -1;
}
for (y = sy; y < sy + height; y = y + 1)
{
symbol = g.mapGetTileSymbol(sx, y);
if (g.isSymbolMinable(symbol) == false)
{
return findMinableWall(g, sx - 1, sy, height);
}
}
return sx;
};
global modifyMap = function(g)
{
// This is how the game currently gets your 'gate' position.
entranceX = g.mapUndergroundX;
entranceY = (g.mapHeight / 2);
// Boink.
entranceY = entranceY + 10;
//edge = findRiverEdge(g, entranceX);
edge = findLiquidEdge(g, entranceX, entranceY - 2, 5);
if (edge == -1)
{
print("Failed to find river edge.\n");
return;
}
breach = findMinableWall(g, edge, entranceY - 2, 5);
breach = breach - 2; // Make sure we have at least 2 tiles of floor next to the river.
// Clip the cliff
mineRectangle(g, entranceX - 2, entranceY - 2, 2, 5);
// Outside door.
mineRectangle(g, entranceX, entranceY, 1, 1);
// Hallway
mineRectangle(g, entranceX + 1, entranceY - 2, breach - entranceX - 1, 5);
// River door
mineRectangle(g, breach, entranceY, 1, 1);
riverbed = findLiquidWall(g, breach + 1, entranceY - 2, 5);
// River area
mineRectangle(g, breach + 1, entranceY - 2, riverbed - breach, 5);
};
global main = function()
{
g = Game();
if (g.Open() == false)
{
print("Failed to open Dwarf Fortress!\n");
return -1;
}
if (g.Suspend() == false)
{
print("Failed to suspend Dwarf Fortress!\n");
g.Close();
return -1;
}
if (g.mapIsAvailable)
{
modifyMap(g);
}
else
{
print("Please enter Dwarf Fortress mode.\n");
}
if (g.Resume() == false)
{
print("Failed to resume Dwarf Fortress!\n");
}
g.Close();
return 0;
};
print("Rick's Tile Tool for Dwarf Fortress (v0.23.130.23a)\n\n");