Skip to content

Commit

Permalink
Merge pull request #1292 from Bumber64/position_lua
Browse files Browse the repository at this point in the history
Position.lua: site/adv world coords
  • Loading branch information
myk002 authored Sep 6, 2024
2 parents 7efe418 + fc7efa3 commit f99a7fd
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 19 deletions.
8 changes: 3 additions & 5 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@ Template for new versions:
## New Features

## Fixes
- `gui/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing."
Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.
- `modtools/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing"s.
Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.

## Misc Improvements

Expand Down Expand Up @@ -48,12 +44,14 @@ Items will now spawn correctly, and will be of the creature type and creature ca
- `gui/design`: don't overcount "affected tiles" for Line & Freeform drawing tools
- `deep-embark`: fix error when embarking where there is no land to stand on (e.g. when embarking in the ocean with `gui/embark-anywhere`
- `deep-embark`: fix failure to transport units and items when embarking where there is no room to spawn the starting wagon
- `gui/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing." Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.
- `modtools/create-item`: fix items of type "VERMIN", "PET", "REMANS", "FISH", "RAW FISH", and "EGG" no longer spawn creature item "nothing"s. Items will now spawn correctly, and will be of the creature type and creature caste that selected by the user. Items of these types will also stack correctly when needed.

## Misc Improvements
- `gui/sitemap`: show whether a unit is friendly, hostile, or wild
- `gui/sitemap`: show whether a unit is caged
- `gui/control-panel`: include option for turning off dumping of old clothes for `tailor`, for players who have magma pit dumps and want to save old clothes from being dumped into the magma
- `position`: report current historical era (e.g., "Age of Myth")
- `position`: report current historical era (e.g., "Age of Myth"), site/adventurer world coords, and mouse map tile coords

## Documentation
- `gui/embark-anywhere`: add information about how the game determines world tile pathability and instructions for bridging two landmasses
Expand Down
6 changes: 4 additions & 2 deletions docs/position.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ position

.. dfhack-tool::
:summary: Report cursor and mouse position, along with other info.
:tags: fort inspection map
:tags: adventure fort inspection map

This tool reports the current date, clock time, month, season, and historical
era. It also reports the keyboard cursor position (or just the z-level if no
active cursor), window size, and mouse location on the screen.
active cursor), window size, and mouse location on the screen. If a site is
loaded, it prints the world coordinates of the site. If not, it prints the world
coordinates of the adventurer (if applicable).

Can also be used to copy the current keyboard cursor position for later use.

Expand Down
59 changes: 47 additions & 12 deletions position.lua
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@ local months = {
--Adventurer mode counts 86400 ticks to a day and 29030400 ticks per year
--Twelve months per year, 28 days to every month, 336 days per year

local julian_day = math.floor(df.global.cur_year_tick / 1200) + 1
local month = math.floor(julian_day / 28) + 1 --days and months are 1-indexed
local julian_day = df.global.cur_year_tick // 1200 + 1
local month = julian_day // 28 + 1 --days and months are 1-indexed
local day = julian_day % 28

local time_of_day = math.floor(df.global.cur_year_tick_advmode / 336)
local time_of_day = df.global.cur_year_tick_advmode // 336
local second = time_of_day % 60
local minute = math.floor(time_of_day / 60) % 60
local hour = math.floor(time_of_day / 3600) % 24
local minute = time_of_day // 60 % 60
local hour = time_of_day // 3600 % 24

print('Time:')
print(' The time is '..string.format('%02d:%02d:%02d', hour, minute, second))
print(' The date is '..string.format('%05d-%02d-%02d', df.global.cur_year, month, day))
print((' The time is %02d:%02d:%02d'):format(hour, minute, second))
print((' The date is %03d-%02d-%02d'):format(df.global.cur_year, month, day))
print(' It is the month of '..months[month])

local eras = df.global.world.history.eras
Expand All @@ -54,8 +54,43 @@ end

print('Place:')
print(' The z-level is z='..df.global.window_z)
print(' The cursor is at x='..cursor.x..', y='..cursor.y)
print(' The window is '..df.global.gps.dimx..' tiles wide and '..df.global.gps.dimy..' tiles high')
if df.global.gps.mouse_x == -1 then print(' The mouse is not in the DF window') else
print(' The mouse is at x='..df.global.gps.mouse_x..', y='..df.global.gps.mouse_y..' within the window') end
--TODO: print(' The fortress is at '..x, y..' on the world map ('..worldsize..' square)')

if cursor.x < 0 then
print(' The keyboard cursor is inactive.')
else
print(' The keyboard cursor is at x='..cursor.x..', y='..cursor.y)
end

local x, y = dfhack.screen.getWindowSize()
print(' The window is '..x..' tiles wide and '..y..' tiles high.')

x, y = dfhack.screen.getMousePos()
if x then
print(' The mouse is at x='..x..', y='..y..' within the window.')
local pos = dfhack.gui.getMousePos()
if pos then
print(' The mouse is over map tile x='..pos.x..', y='..pos.y)
end
else
print(' The mouse is not in the DF window.')
end

local wd = df.global.world.world_data
local site = dfhack.world.getCurrentSite()
if site then
print((' The current site is at x=%d, y=%d on the %dx%d world map.'):
format(site.pos.x, site.pos.y, wd.world_width, wd.world_height))
elseif dfhack.world.isAdventureMode() then
x, y = -1, -1
for _,army in ipairs(df.global.world.armies.all) do
if army.flags.player then
x, y = army.pos.x // 48, army.pos.y // 48
break
end
end
if x < 0 then
x, y = wd.midmap_data.adv_region_x, wd.midmap_data.adv_region_y
end
print((' The adventurer is at x=%d, y=%d on the %dx%d world map.'):
format(x, y, wd.world_width, wd.world_height))
end

0 comments on commit f99a7fd

Please sign in to comment.