Warm stone is a pain to deal with. Either you put up with having to redo your designations every few tiles, or you manually reveal all the tiles with tiletypes (which is a pain with uneven designations). There used to be a utility to patch DF to prevent it from cancelling designations in the first place, but that hasn't been up-to-date in ages.
Today I got sick of dealing with it and wrote a script to reveal all designated tiles on the current layer (or a few layers up).
Usage is fairly straightforward: Designate the area you want to dig out, run revealdesignated on the same z-level, and those tiles will be revealed. Provide a numerical argument to reveal tiles in multiple layers (e.g. revealdesignated 2 would reveal tiles in the current layer and the layer above it). If you make a mistake, run unrevealdesignated with the same arguments to reverse it.
Let me know if you find this helpful!
revealdesignated.lua
-- Reveal all designated tiles on the current layer
-- Modified by gameboy17 from drain-aquifer
--[====[
revealdesignated
=============
Reveal all designated tiles on the current layer.
Intended to prevent digging cancellations due to warm/damp stone.
If an argument is given, reveals designated tiles that many layers up. Defaults to 1.
Give a negative number to reveal that many layers down.
Reverse with unrevealdesignated [height].
]====]
if ... then height = tonumber(...) else height = 1 end
local function reveal(height)
local startlayer
local endlayer
if height >= 0 then
startlayer = df.global.window_z
endlayer = startlayer + height
else
endlayer = df.global.window_z
startlayer = endlayer + height
height = height * -1
end
print("Revealing designated tiles in "..height.." layer"..((height ~= 1) and "s" or "")..".")
local tile_count = 0
for k, block in ipairs(df.global.world.map.map_blocks) do
if block.map_pos.z >= startlayer and block.map_pos.z < endlayer then
for x, row in ipairs(block.designation) do
for y, tile in ipairs(row) do
if tile.dig > 0 and tile.hidden then
tile_count = tile_count+1
tile.hidden = false
end
end
end
end
end
print("Revealed "..tile_count.." designated tile"..((tile_count ~= 1) and "s" or "")..".")
end
reveal(height)
unrevealdesignated.lua
-- Unreveal all designated tiles on the current layer
-- Modified by gameboy17 from drain-aquifer
--[====[
revealdesignated
=============
Unreveal all designated tiles on the current layer.
Intended to reverse accidents with revealdesignated.
If an argument is given, reveals designated tiles that many layers up. Defaults to 1.
Give a negative number to reveal that many layers down.
]====]
if ... then height = tonumber(...) else height = 1 end
local function unreveal(height)
local startlayer
local endlayer
if height >= 0 then
startlayer = df.global.window_z
endlayer = startlayer + height
else
endlayer = df.global.window_z
startlayer = endlayer + height
height = height * -1
end
print("Unrevealing designated tiles in "..height.." layer"..((height ~= 1) and "s" or "")..".")
local tile_count = 0
for k, block in ipairs(df.global.world.map.map_blocks) do
if block.map_pos.z >= startlayer and block.map_pos.z < endlayer then
for x, row in ipairs(block.designation) do
for y, tile in ipairs(row) do
if tile.dig > 0 and not tile.hidden then
tile_count = tile_count+1
tile.hidden = true
end
end
end
end
end
print("Unrevealed "..tile_count.." designated tile"..((tile_count ~= 1) and "s" or "")..".")
end
unreveal(height)