mirror of
https://github.com/Dadido3/noita-mapcap.git
synced 2024-11-22 21:17:33 +00:00
86 lines
2.4 KiB
Lua
86 lines
2.4 KiB
Lua
-- Copyright (c) 2019 David Vogel
|
|
--
|
|
-- This software is released under the MIT License.
|
|
-- https://opensource.org/licenses/MIT
|
|
|
|
local CAPTURE_PIXEL_SIZE = 2 -- in FullHD an ingame pixel is expected to be 2 real pixels
|
|
local CAPTURE_GRID_SIZE = 256 -- in ingame pixels. There will be 6 to 12 images overlapping
|
|
local CAPTURE_DELAY = 15 -- in frames
|
|
local CAPTURE_FORCE_HP = 4 -- * 25HP
|
|
|
|
local function preparePlayer()
|
|
local playerEntity = getPlayer()
|
|
addEffectToEntity(playerEntity, "PROTECTION_ALL")
|
|
|
|
addPerkToPlayer("BREATH_UNDERWATER")
|
|
addPerkToPlayer("INVISIBILITY")
|
|
addPerkToPlayer("REMOVE_FOG_OF_WAR")
|
|
addPerkToPlayer("REPELLING_CAPE")
|
|
addPerkToPlayer("WORM_DETRACTOR")
|
|
|
|
setPlayerHP(CAPTURE_FORCE_HP)
|
|
end
|
|
|
|
local function resetPlayer()
|
|
setPlayerHP(CAPTURE_FORCE_HP)
|
|
end
|
|
|
|
function startCapturing()
|
|
local ox, oy = getPlayerPos()
|
|
ox, oy = math.floor(ox / CAPTURE_GRID_SIZE) * CAPTURE_GRID_SIZE, math.floor(oy / CAPTURE_GRID_SIZE) * CAPTURE_GRID_SIZE
|
|
local x, y = ox, oy
|
|
|
|
preparePlayer()
|
|
|
|
GameSetCameraFree(true)
|
|
|
|
-- Coroutine to calculate next coordinate, and trigger screenshots
|
|
local i = 1
|
|
async_loop(
|
|
function()
|
|
-- +x
|
|
for i = 1, i, 1 do
|
|
local rx, ry = x * CAPTURE_PIXEL_SIZE, y * CAPTURE_PIXEL_SIZE
|
|
if not fileExists(string.format("mods/noita-mapcap/output/%d,%d.png", rx, ry)) then
|
|
GameSetCameraPos(x, y)
|
|
wait(CAPTURE_DELAY)
|
|
TriggerCapture(rx, ry)
|
|
end
|
|
x, y = x + CAPTURE_GRID_SIZE, y
|
|
end
|
|
-- +y
|
|
for i = 1, i, 1 do
|
|
local rx, ry = x * CAPTURE_PIXEL_SIZE, y * CAPTURE_PIXEL_SIZE
|
|
if not fileExists(string.format("mods/noita-mapcap/output/%d,%d.png", rx, ry)) then
|
|
GameSetCameraPos(x, y)
|
|
wait(CAPTURE_DELAY)
|
|
TriggerCapture(rx, ry)
|
|
end
|
|
x, y = x, y + CAPTURE_GRID_SIZE
|
|
end
|
|
i = i + 1
|
|
-- -x
|
|
for i = 1, i, 1 do
|
|
local rx, ry = x * CAPTURE_PIXEL_SIZE, y * CAPTURE_PIXEL_SIZE
|
|
if not fileExists(string.format("mods/noita-mapcap/output/%d,%d.png", rx, ry)) then
|
|
GameSetCameraPos(x, y)
|
|
wait(CAPTURE_DELAY)
|
|
TriggerCapture(rx, ry)
|
|
end
|
|
x, y = x - CAPTURE_GRID_SIZE, y
|
|
end
|
|
-- -y
|
|
for i = 1, i, 1 do
|
|
local rx, ry = x * CAPTURE_PIXEL_SIZE, y * CAPTURE_PIXEL_SIZE
|
|
if not fileExists(string.format("mods/noita-mapcap/output/%d,%d.png", rx, ry)) then
|
|
GameSetCameraPos(x, y)
|
|
wait(CAPTURE_DELAY)
|
|
TriggerCapture(rx, ry)
|
|
end
|
|
x, y = x, y - CAPTURE_GRID_SIZE
|
|
end
|
|
i = i + 1
|
|
end
|
|
)
|
|
end
|