mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 07:00:51 +02:00
64 lines
2.3 KiB
Lua
64 lines
2.3 KiB
Lua
-- Driver: dump the exact pic textures a live 3D battle draws, per stage --
|
|
-- the sprite as loaded (raw) and what picImage hands the billboard after the
|
|
-- palette bake and BattlePics' paper fill (final). Diagnostic for pics that
|
|
-- render with holes: whichever stage the transparency first appears in is
|
|
-- the stage that made it.
|
|
--
|
|
-- SHOT_DIR=.scratchpad/pic_dump \
|
|
-- POKEPORT_DRIVER=mods/DramaticShapeVoxelMod/tests/pic_dump.lua love .
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or ".scratchpad/pic_dump"
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local BattleState = require("src.battle.BattleState")
|
|
|
|
local function save(img, path)
|
|
if not img then U.log("NIL image for " .. path) return end
|
|
local w, h = img:getDimensions()
|
|
local g = love.graphics
|
|
local prev = g.getCanvas()
|
|
local canvas = g.newCanvas(w, h, { dpiscale = 1 })
|
|
g.setCanvas(canvas)
|
|
g.clear(0, 0, 0, 0)
|
|
g.setBlendMode("replace", "premultiplied")
|
|
g.setColor(1, 1, 1, 1)
|
|
g.draw(img, 0, 0)
|
|
g.setCanvas(prev)
|
|
g.setBlendMode("alpha")
|
|
local f = assert(io.open(path, "wb"))
|
|
f:write(canvas:newImageData():encode("png"):getString())
|
|
f:close()
|
|
end
|
|
|
|
local SPECIES = os.getenv("PIC_SPECIES")
|
|
local list = {}
|
|
if SPECIES then
|
|
for id in SPECIES:gmatch("[^,%s]+") do list[#list + 1] = id:upper() end
|
|
else
|
|
list = { "PIKACHU", "SEEL", "BULBASAUR", "MEWTWO" }
|
|
end
|
|
|
|
for _, id in ipairs(list) do
|
|
game.save.party = { Pokemon.new(game.data, id, 50) }
|
|
U.teleport(game, "ROUTE_1", 5, 8, "down")
|
|
U.wait(30)
|
|
local battle = BattleState.newWild(game, id, 50)
|
|
battle.onFinish = function() end
|
|
game.overworld:pushBattle(battle)
|
|
U.wait(80)
|
|
local lo = id:lower()
|
|
save(battle.enemy.sprite, ("%s/%s_front_raw.png"):format(DIR, lo))
|
|
save(battle:picImage(battle.enemy.sprite), ("%s/%s_front_final.png"):format(DIR, lo))
|
|
save(battle.player.sprite, ("%s/%s_back_raw.png"):format(DIR, lo))
|
|
save(battle:picImage(battle.player.sprite), ("%s/%s_back_final.png"):format(DIR, lo))
|
|
U.log("dumped " .. id)
|
|
while game.stack:top() and game.stack:top() ~= game.overworld do
|
|
game.stack:pop()
|
|
end
|
|
U.wait(5)
|
|
end
|
|
|
|
U.log("done -- " .. DIR)
|
|
love.event.quit()
|
|
end
|