summaryrefslogtreecommitdiff
path: root/scripts/devel/find-offsets.lua
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/devel/find-offsets.lua')
-rw-r--r--scripts/devel/find-offsets.lua96
1 files changed, 96 insertions, 0 deletions
diff --git a/scripts/devel/find-offsets.lua b/scripts/devel/find-offsets.lua
index 6fc12735..07a05847 100644
--- a/scripts/devel/find-offsets.lua
+++ b/scripts/devel/find-offsets.lua
@@ -803,6 +803,19 @@ end
-- cur_year_tick
--
+function stop_autosave()
+ if is_known 'd_init' then
+ local f = df.global.d_init.flags4
+ if f.AUTOSAVE_SEASONAL or f.AUTOSAVE_YEARLY then
+ f.AUTOSAVE_SEASONAL = false
+ f.AUTOSAVE_YEARLY = false
+ print('Disabled seasonal and yearly autosave.')
+ end
+ else
+ dfhack.printerr('Could not disable autosave!')
+ end
+end
+
local function find_cur_year_tick()
local zone
if os_type == 'windows' then
@@ -815,6 +828,8 @@ local function find_cur_year_tick()
return
end
+ stop_autosave()
+
local addr = zone:find_counter([[
Searching for cur_year_tick. Please exit to main dwarfmode
menu, then do as instructed below:]],
@@ -825,6 +840,79 @@ menu, then do as instructed below:]],
end
--
+-- cur_season_tick
+--
+
+function step_n_frames(cnt)
+ local world = df.global.world
+ local ctick = world.frame_counter
+ local more = ''
+ while world.frame_counter-ctick < cnt do
+ print(" Please step the game "..(cnt-world.frame_counter+ctick)..more.." frames.")
+ more = ' more'
+ if not utils.prompt_yes_no(' Done?', true) then
+ return nil
+ end
+ end
+ return world.frame_counter-ctick
+end
+
+local function find_cur_season_tick()
+ if not (is_known 'cur_year_tick') then
+ dfhack.printerr('Cannot search for cur_season_tick - prerequisites missing.')
+ return
+ end
+
+ stop_autosave()
+
+ local addr = searcher:find_interactive([[
+Searching for cur_season_tick. Please exit to main dwarfmode
+menu, then do as instructed below:]],
+ 'int32_t',
+ function(ccursor)
+ if ccursor > 0 then
+ if not step_n_frames(10) then
+ return false
+ end
+ end
+ return true, math.floor(((df.global.cur_year_tick+10)%100800)/10)
+ end
+ )
+ ms.found_offset('cur_season_tick', addr)
+end
+
+--
+-- cur_season
+--
+
+local function find_cur_season()
+ if not (is_known 'cur_year_tick' and is_known 'cur_season_tick') then
+ dfhack.printerr('Cannot search for cur_season - prerequisites missing.')
+ return
+ end
+
+ stop_autosave()
+
+ local addr = searcher:find_interactive([[
+Searching for cur_season. Please exit to main dwarfmode
+menu, then do as instructed below:]],
+ 'int8_t',
+ function(ccursor)
+ if ccursor > 0 then
+ local cst = df.global.cur_season_tick
+ df.global.cur_season_tick = 10079
+ df.global.cur_year_tick = df.global.cur_year_tick + (10079-cst)*10
+ if not step_n_frames(10) then
+ return false
+ end
+ end
+ return true, math.floor((df.global.cur_year_tick+10)/100800)%4
+ end
+ )
+ ms.found_offset('cur_season', addr)
+end
+
+--
-- process_jobs
--
@@ -839,6 +927,8 @@ end
local function find_process_jobs()
local zone = get_process_zone() or searcher
+ stop_autosave()
+
local addr = zone:find_menu_cursor([[
Searching for process_jobs. Please do as instructed below:]],
'int8_t',
@@ -856,6 +946,8 @@ end
local function find_process_dig()
local zone = get_process_zone() or searcher
+ stop_autosave()
+
local addr = zone:find_menu_cursor([[
Searching for process_dig. Please do as instructed below:]],
'int8_t',
@@ -879,6 +971,8 @@ local function find_pause_state()
end
zone = zone or searcher
+ stop_autosave()
+
local addr = zone:find_menu_cursor([[
Searching for pause_state. Please do as instructed below:]],
'int8_t',
@@ -930,6 +1024,8 @@ print('\nUnpausing globals:\n')
exec_finder(find_cur_year, 'cur_year')
exec_finder(find_cur_year_tick, 'cur_year_tick')
+exec_finder(find_cur_season_tick, 'cur_season_tick')
+exec_finder(find_cur_season, 'cur_season')
exec_finder(find_process_jobs, 'process_jobs')
exec_finder(find_process_dig, 'process_dig')
exec_finder(find_pause_state, 'pause_state')