mirror of
https://github.com/DramaticShape/DramaticShapeVoxelMod.git
synced 2026-08-12 13:50:50 +02:00
110 lines
3.9 KiB
Lua
110 lines
3.9 KiB
Lua
-- Driver: screenshot the day/night cycle.
|
|
--
|
|
-- One vantage (Pallet Town, VOXEL 75) through every pinned phase, two
|
|
-- mid-blend moments of the running cycle, a battle staged under the night
|
|
-- sky, and a room at midnight -- which must look exactly like a room at
|
|
-- noon, because indoors the clock does not reach.
|
|
--
|
|
-- SHOT_DIR=.scratchpad/daynightcycle POKEPORT_DRIVER=mods/DramaticShapeVoxelMod/tests/daynight_shots.lua love .
|
|
return function(game)
|
|
local U = dofile("tests/drivers/util.lua")
|
|
local DIR = os.getenv("SHOT_DIR") or ".scratchpad/daynightcycle"
|
|
local Pokemon = require("src.pokemon.Pokemon")
|
|
local BattleState = require("src.battle.BattleState")
|
|
|
|
local exports = game.mods and game.mods.exports
|
|
local lib = exports and exports.DRAMATIC_SHAPE and exports.DRAMATIC_SHAPE.lib
|
|
if not lib then
|
|
U.log("DRAMATIC_SHAPE is not loaded -- enable it and run again")
|
|
return
|
|
end
|
|
local DayNight = lib.require("DayNight")
|
|
|
|
local function setTime(value, clock)
|
|
DayNight.setting:sync(value)
|
|
if clock then DayNight.clock = clock end
|
|
DayNight.update(0)
|
|
end
|
|
|
|
U.teleport(game, "PALLET_TOWN", 12, 10, "up")
|
|
-- straight to the top rung, whatever the persisted options say: pressing
|
|
-- the key would walk the ladder RELATIVE to wherever a previous run left it
|
|
local Pipelines = require("src.render.Pipelines")
|
|
Pipelines.setLevel("voxel", 5)
|
|
U.wait(150) -- let the camera ease over and the meshes land
|
|
|
|
-- ------- the four pins, one vantage
|
|
for _, phase in ipairs({ "day", "dawn", "dusk", "night" }) do
|
|
setTime(phase)
|
|
U.wait(30) -- a couple of rig steps + palette settle
|
|
U.shot(game, ("%s/10_pin_%s.png"):format(DIR, phase))
|
|
end
|
|
|
|
-- ------- the running cycle, mid-blend
|
|
setTime("cycle", 560) -- day leaning into dusk
|
|
U.wait(10)
|
|
U.shot(game, DIR .. "/20_cycle_day_into_dusk.png")
|
|
setTime("cycle", 645) -- dusk falling into night
|
|
U.wait(10)
|
|
U.shot(game, DIR .. "/21_cycle_dusk_into_night.png")
|
|
|
|
-- ------- golden hour on open ground, long shadows
|
|
U.teleport(game, "ROUTE_1", 8, 12, "up")
|
|
U.wait(120)
|
|
setTime("cycle", 555) -- low western sun, shadows long and eastward
|
|
U.wait(30)
|
|
U.shot(game, DIR .. "/30_route1_low_sun.png")
|
|
|
|
-- ------- a fight staged under the night sky
|
|
setTime("night")
|
|
game.save.party = game.save.party or {}
|
|
if #game.save.party == 0 then
|
|
game.save.party[1] = Pokemon.new(game.data, "CHARIZARD", 45)
|
|
end
|
|
-- any real trainer class: the dataset's ids vary by merge, so take the
|
|
-- first one in stable order rather than guessing a name
|
|
local classes = {}
|
|
for id, rec in pairs(game.data.trainers) do
|
|
if type(id) == "string" and id:sub(1, 1) ~= "_"
|
|
and type(rec) == "table" and rec.parties and rec.parties[1] then
|
|
classes[#classes + 1] = id
|
|
end
|
|
end
|
|
table.sort(classes)
|
|
local battle = classes[1] and BattleState.newTrainer(game, classes[1], 1)
|
|
if battle then
|
|
battle.onFinish = function() end
|
|
game.overworld:pushBattle(battle)
|
|
U.wait(70)
|
|
for _ = 1, 14 do U.tap(game, "a"); U.wait(8) end
|
|
U.shot(game, DIR .. "/40_night_battle.png")
|
|
while game.stack:top() and game.stack:top() ~= game.overworld do
|
|
game.stack:pop()
|
|
end
|
|
U.wait(10)
|
|
end
|
|
|
|
-- ------- and a room, where midnight must change nothing
|
|
setTime("night")
|
|
if game.data.maps.REDS_HOUSE_1F then
|
|
U.teleport(game, "REDS_HOUSE_1F", 4, 4, "down")
|
|
U.wait(90)
|
|
U.shot(game, DIR .. "/50_indoor_at_night.png")
|
|
end
|
|
|
|
-- ------- the forest, where only the TINT of it reaches: night falls
|
|
-- through the canopy, but there is no sky and the noon light stays put
|
|
setTime("night")
|
|
if game.data.maps.VIRIDIAN_FOREST then
|
|
U.teleport(game, "VIRIDIAN_FOREST", 17, 20, "up")
|
|
U.wait(120)
|
|
U.shot(game, DIR .. "/51_forest_night.png")
|
|
setTime("day")
|
|
U.wait(30)
|
|
U.shot(game, DIR .. "/52_forest_day.png")
|
|
end
|
|
|
|
setTime("day")
|
|
U.log("done -- " .. DIR)
|
|
end
|