dfhack/scripts/embark.lua

53 lines
1.4 KiB
Lua

-- lets you embark anywhere.
helpstring=[[ embark [-t|-d|-e|-h]
-t test if the patch can be applied
-d disable the patch if enabled
-e enable the patch if disabled
-h shows help
]]
args={...}
if args[1]=="-h" then
print(helpstring)
return
end
local ms=require("memscan")
local dfu=require("plugins.dfusion")
local patch
function embark() --windows only?
local seg=ms.get_code_segment()
local idx,off
local patch=dfu.patches.embark_anywhere
if patch~=nil then
return patch
else
idx,off=seg.uint8_t:find_one{0x66, 0x83, 0x7F ,0x1A ,0xFF,0x74,0x04}
if idx then
patch=dfu.BinaryPatch{name="embark_anywhere",pre_data={0x74,0x04},data={0x90,0x90},address=off+5}
return patch
else
qerror("Offset for embark patch not found!")
end
end
end
patch=embark()
if args[1]=="-t" then
if patch:test() and not patch.is_applied then
print("all okay, patch can be applied")
elseif patch.is_applied then
print("patch is currently applied, can be removed")
else
qerror("patch can't be applied")
end
elseif args[1]=="-d" then
if patch.is_applied then
patch:remove()
print("patch removed")
end
elseif args[1]=="-e" then
if not patch.is_applied then
patch:apply()
print("patch applied")
end
else
print(helpstring)
end