|
|
|
@ -465,6 +465,22 @@ end
|
|
|
|
|
-- enabler
|
|
|
|
|
--
|
|
|
|
|
|
|
|
|
|
local function lookup_colors()
|
|
|
|
|
local f = io.open('data/init/colors.txt', 'r') or error('failed to open file')
|
|
|
|
|
local text = f:read('*all')
|
|
|
|
|
f:close()
|
|
|
|
|
local colors = {}
|
|
|
|
|
for _, color in pairs({'BLACK', 'BLUE', 'GREEN', 'CYAN', 'RED', 'MAGENTA',
|
|
|
|
|
'BROWN', 'LGRAY', 'DGRAY', 'LBLUE', 'LGREEN', 'LCYAN', 'LRED',
|
|
|
|
|
'LMAGENTA', 'YELLOW', 'WHITE'}) do
|
|
|
|
|
for _, part in pairs({'R', 'G', 'B'}) do
|
|
|
|
|
local opt = color .. '_' .. part
|
|
|
|
|
table.insert(colors, tonumber(text:match(opt .. ':(%d+)') or error('missing from colors.txt: ' .. opt)))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return colors
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function is_valid_enabler(e)
|
|
|
|
|
if not ms.is_valid_vector(e.textures.raws, 4)
|
|
|
|
|
or not ms.is_valid_vector(e.text_system, 4)
|
|
|
|
@ -478,7 +494,7 @@ end
|
|
|
|
|
|
|
|
|
|
local function find_enabler()
|
|
|
|
|
-- Data from data/init/colors.txt
|
|
|
|
|
local colors = {
|
|
|
|
|
local default_colors = {
|
|
|
|
|
0, 0, 0, 0, 0, 128, 0, 128, 0,
|
|
|
|
|
0, 128, 128, 128, 0, 0, 128, 0, 128,
|
|
|
|
|
128, 128, 0, 192, 192, 192, 128, 128, 128,
|
|
|
|
@ -486,10 +502,21 @@ local function find_enabler()
|
|
|
|
|
255, 0, 0, 255, 0, 255, 255, 255, 0,
|
|
|
|
|
255, 255, 255
|
|
|
|
|
}
|
|
|
|
|
local colors
|
|
|
|
|
local ok, ret = pcall(lookup_colors)
|
|
|
|
|
if not ok then
|
|
|
|
|
dfhack.printerr('Failed to look up colors, using defaults: \n' .. ret)
|
|
|
|
|
colors = default_colors
|
|
|
|
|
else
|
|
|
|
|
colors = ret
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i = 1,#colors do colors[i] = colors[i]/255 end
|
|
|
|
|
|
|
|
|
|
local idx, addr = data.float:find_one(colors)
|
|
|
|
|
if not idx then
|
|
|
|
|
idx, addr = data.float:find_one(default_colors)
|
|
|
|
|
end
|
|
|
|
|
if idx then
|
|
|
|
|
validate_offset('enabler', is_valid_enabler, addr, df.enabler, 'ccolor')
|
|
|
|
|
return
|
|
|
|
|