mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-18 11:44:42 +02:00
intro api upgrade (#294)
* intro api upgrade * api updates * fix tests * updated templates
This commit is contained in:
@@ -452,6 +452,35 @@ end
|
||||
|
||||
-- name -> name so the map.palette chain has a vanilla link to wrap
|
||||
local function samePalette(name) return name end
|
||||
local function sameTod(tod) return tod end
|
||||
|
||||
-- world.tod default: always DAY. A day/night mod returns "NIGHT",
|
||||
-- "MORNING", etc.; the result is cached on the overworld and handed to
|
||||
-- map.palette as ctx.tod so palette swaps can key off the period.
|
||||
function OverworldState:timeOfDay()
|
||||
local tod = self.tod or "DAY"
|
||||
if not Runtime.wantsHook("world.tod") then return tod end
|
||||
local map = self.map
|
||||
local nextTod = Runtime.call("world.tod", sameTod, tod, {
|
||||
map = map,
|
||||
mapId = map and map.id,
|
||||
x = self.player and self.player.cellX,
|
||||
y = self.player and self.player.cellY,
|
||||
steps = self.todSteps or 0,
|
||||
})
|
||||
if type(nextTod) ~= "string" or nextTod == "" then nextTod = tod end
|
||||
if nextTod ~= tod then
|
||||
self.tod = nextTod
|
||||
if Runtime.wants("world.tod_changed") then
|
||||
Runtime.emit("world.tod_changed", {
|
||||
tod = nextTod, previous = tod, mapId = map and map.id,
|
||||
})
|
||||
end
|
||||
else
|
||||
self.tod = nextTod
|
||||
end
|
||||
return self.tod
|
||||
end
|
||||
|
||||
function OverworldState:paletteNameFor(map)
|
||||
local palettes = FieldDefaults.field(Game.data, "palettes")
|
||||
@@ -470,8 +499,9 @@ function OverworldState:paletteNameFor(map)
|
||||
name = (last and paletteLookup(palettes, last, lastDef and lastDef.tileset))
|
||||
or palettes.default
|
||||
end
|
||||
local tod = self:timeOfDay()
|
||||
if not Runtime.wantsHook("map.palette") then return name end
|
||||
return Runtime.call("map.palette", samePalette, name, map)
|
||||
return Runtime.call("map.palette", samePalette, name, map, { tod = tod })
|
||||
end
|
||||
|
||||
-- UI-pass palette (text boxes and menus tint with the current map). OG RED
|
||||
@@ -2781,11 +2811,18 @@ end
|
||||
|
||||
function OverworldState:onStepComplete()
|
||||
local p = self.player
|
||||
self.todSteps = (self.todSteps or 0) + 1
|
||||
-- re-evaluate day/night so a step-based clock can fire world.tod_changed;
|
||||
-- paletteNameFor reads self.tod on the next paint
|
||||
if Runtime.wantsHook("world.tod") then
|
||||
self:timeOfDay()
|
||||
end
|
||||
|
||||
-- hot path: the payload is only built when something is listening
|
||||
if Runtime.wants("world.stepped") then
|
||||
Runtime.emit("world.stepped", { mapId = self.map.id, x = p.cellX, y = p.cellY,
|
||||
tile = self.map:cellTile(p.cellX, p.cellY) })
|
||||
tile = self.map:cellTile(p.cellX, p.cellY),
|
||||
tod = self.tod })
|
||||
end
|
||||
|
||||
-- dismounting a surf: landing on a walkable cell ends it
|
||||
|
||||
+17
-4
@@ -4,6 +4,7 @@
|
||||
|
||||
local Collision = require("src.world.Collision")
|
||||
local FieldDefaults = require("src.world.FieldDefaults")
|
||||
local Runtime = require("src.mods.Runtime")
|
||||
local SpriteRenderer = require("src.render.SpriteRenderer")
|
||||
|
||||
local Player = {}
|
||||
@@ -82,10 +83,22 @@ function Player:tryMove(dir, map, entities)
|
||||
self.moving = true
|
||||
self.bumpFrames = nil -- a real step supersedes any in-place bonk
|
||||
self.progress = 0
|
||||
-- the bicycle doubles walking speed (8 frames per step)
|
||||
local save = require("src.core.Game").save
|
||||
self.stepFramesCur = (save and save.onBike) and self.bikeStepFrames
|
||||
or self.stepFrames or STEP_FRAMES
|
||||
-- the bicycle doubles walking speed (8 frames per step); movement.speed
|
||||
-- lets a mod multiply or replace that (running shoes, dash, etc.)
|
||||
local Game = require("src.core.Game")
|
||||
local save = Game.save
|
||||
local frames = (save and save.onBike) and self.bikeStepFrames
|
||||
or self.stepFrames or STEP_FRAMES
|
||||
if Runtime.wantsHook("movement.speed") then
|
||||
frames = Runtime.call("movement.speed", function(f) return f end, frames, {
|
||||
onBike = save and save.onBike or false,
|
||||
surfing = self.surfing and true or false,
|
||||
player = self,
|
||||
input = Game.input,
|
||||
save = save,
|
||||
})
|
||||
end
|
||||
self.stepFramesCur = math.max(1, math.floor(tonumber(frames) or STEP_FRAMES))
|
||||
return "moved"
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user