mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-17 11:11:10 +02:00
discord rich presence, and MORE COLORS, video options, shiddddd so much stuff
This commit is contained in:
+4
-1
@@ -37,8 +37,11 @@ end
|
||||
-- on the raw blocks, honoring the surf rule (water/shore passable only
|
||||
-- while surfing, same fallbacks as Map.new).
|
||||
function Map.defPassable(def, tilesetDef, cx, cy, surfing)
|
||||
-- Fail closed: a missing tileset used to return true and re-open the
|
||||
-- Pallet south-shore stranding (cross onto ROUTE_21 solids). No data
|
||||
-- means we cannot prove the landing is safe, so the step bumps.
|
||||
if not (def and tilesetDef and tilesetDef.blocks and tilesetDef.walkable) then
|
||||
return true -- no data to judge with: keep the old permissive behavior
|
||||
return false
|
||||
end
|
||||
local tx, ty = cx * 2, cy * 2 + 1
|
||||
local bx, by = math.floor(tx / 4), math.floor(ty / 4)
|
||||
|
||||
@@ -23,7 +23,7 @@ function MapLoader.load(data, mapId)
|
||||
-- warp tiles are stored per tileset macro name; the generated tilesets
|
||||
-- module carries them in the tileset entry itself
|
||||
local map = Map.new(def, tilesetDef)
|
||||
map.renderer = TileRenderer.new(map)
|
||||
map.renderer = TileRenderer.new(map, data)
|
||||
cache[mapId] = map
|
||||
return map
|
||||
end
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ function NPC.new(data, mapId, objDef)
|
||||
self.id = string.format("%s_obj_%d", mapId, objDef.index)
|
||||
local spriteDef = data.sprites[objDef.sprite]
|
||||
assert(spriteDef, "unknown sprite " .. tostring(objDef.sprite))
|
||||
self.sprite = SpriteRenderer.new(spriteDef)
|
||||
self.sprite = SpriteRenderer.new(spriteDef, self.id)
|
||||
-- object_event coordinates are already walk-grid cells
|
||||
self.cellX, self.cellY = objDef.x, objDef.y
|
||||
self.px, self.py = self.cellX * 16, self.cellY * 16
|
||||
|
||||
@@ -388,8 +388,25 @@ end
|
||||
-- which recolored the whole screen per map -- see the survey zoom
|
||||
-- entry in docs/known-differences.md). Border fill inherits the
|
||||
-- current map's palette.
|
||||
--
|
||||
-- RED++ true overworld coloring does NOT go through this zone/shader
|
||||
-- system at all: TileRenderer bakes real per-tile GBC colors straight into
|
||||
-- a recolored tileset atlas (see TileRenderer's gbcAtlas), and
|
||||
-- SpriteRenderer bakes sprites' OBP colors the same way, so the world
|
||||
-- canvas is already final RGB by the time this runs. Returning an EMPTY
|
||||
-- list here (when the current map has that baked atlas) skips the shader
|
||||
-- entirely -- Renderer:endFrame's blit sees zoneList[1] == nil and falls
|
||||
-- back to a plain, unshaded draw. Returning plain `nil` would NOT do this:
|
||||
-- endFrame treats a nil worldZones as "no world-specific zones, reuse the
|
||||
-- UI pass's zones" (sgbPalettes' whole-screen named-palette zone), which
|
||||
-- would re-run the DMG shade-remap over already-true-color pixels using
|
||||
-- an unrelated 4-color palette -- exactly the "colors are wrong" bug this
|
||||
-- fixes.
|
||||
function OverworldState:sgbWorldZones()
|
||||
local PaletteFX = require("src.render.PaletteFX")
|
||||
if PaletteFX.usesGbcPack() and self.map.renderer and self.map.renderer.gbcAtlas then
|
||||
return {}
|
||||
end
|
||||
local base = PaletteFX.pal(Game.data, self:paletteNameFor(self.map))
|
||||
if not base then return nil end
|
||||
local vw, vh = Game.renderer:worldViewSize()
|
||||
@@ -2023,6 +2040,8 @@ function OverworldState:engageTrainer(npc, onDone)
|
||||
end
|
||||
|
||||
-- Badges/items awarded after specific battles (data/scripts/victories.lua).
|
||||
-- `deactivate` retires unfought gym/dojo trainers the way the originals'
|
||||
-- SetEvent / SetEventRange do after the leader victory.
|
||||
function OverworldState:checkVictoryRewards(trainerClass, partyIndex)
|
||||
local victories = require("data.scripts.victories")
|
||||
local reward = victories[trainerClass .. "#" .. tostring(partyIndex or 1)]
|
||||
@@ -2031,6 +2050,11 @@ function OverworldState:checkVictoryRewards(trainerClass, partyIndex)
|
||||
if Game.save.flags[reward.flag] then return self:runVictoryHook() end
|
||||
Game.save.flags[reward.flag] = true
|
||||
end
|
||||
if reward.deactivate then
|
||||
for _, flag in ipairs(reward.deactivate) do
|
||||
Game.save.flags[flag] = true
|
||||
end
|
||||
end
|
||||
local lines = {}
|
||||
if reward.badge then
|
||||
Game.save.inventory[reward.badge] = 1
|
||||
|
||||
@@ -26,12 +26,12 @@ function Player.new(data, cx, cy, facing)
|
||||
local walkId = FieldDefaults.fieldValue(data, "playerSprites", "walk")
|
||||
local surfId = FieldDefaults.fieldValue(data, "playerSprites", "surf")
|
||||
local bikeId = FieldDefaults.fieldValue(data, "playerSprites", "bike")
|
||||
self.sprite = SpriteRenderer.new(data.sprites[walkId])
|
||||
self.sprite = SpriteRenderer.new(data.sprites[walkId], "player")
|
||||
if surfId and data.sprites[surfId] then
|
||||
self.surfSprite = SpriteRenderer.new(data.sprites[surfId])
|
||||
self.surfSprite = SpriteRenderer.new(data.sprites[surfId], "player")
|
||||
end
|
||||
if bikeId and data.sprites[bikeId] then
|
||||
self.bikeSprite = SpriteRenderer.new(data.sprites[bikeId])
|
||||
self.bikeSprite = SpriteRenderer.new(data.sprites[bikeId], "player")
|
||||
end
|
||||
-- the ledge-hop shadow quarter-tile (gfx/overworld/shadow.png,
|
||||
-- LedgeHoppingShadow, engine/overworld/ledges.asm)
|
||||
|
||||
Reference in New Issue
Block a user