From 8728783b22428e91f85ac89803754431dd33e706 Mon Sep 17 00:00:00 2001 From: DramaticShape Date: Fri, 31 Jul 2026 14:18:02 -0400 Subject: [PATCH] account for dpi issues on updated 3d battles --- CHANGELOG.md | 48 ++++++++++++++++++++++++++---------------------- main.lua | 2 +- manifest.json | 2 +- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb6d286..eed2d45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Changelog +## 1.3.1 + +### Fixed + +- **A staged battle on a phone stood some Pokémon three times the size of the + square they were on.** A Pidgey towered over the arena while the mon beside + it was the right size, which reads as a bug in one species and is not one. + + Putting the paper back inside a battle pic (BattlePics, 1.3.0) needs the + pic's pixels, and a LOVE Image does not hand them back -- so the pic is drawn + into a canvas of its own size and the canvas is read. `newCanvas` takes the + SURFACE's dpi scale when it is not told otherwise, `conf.lua` turns highdpi + on for Android and iOS, and Android's display density is routinely 2.75. So + `newCanvas(56, 56)` allocated a 154x154 texture there, the pic was magnified + into it, and the readback came back at the magnified size. The rebuilt pic + was 2.75x the artwork, the engine's pics layer drew it 1:1 because it trusts + `getWidth()`, and the mon stood on its tile nearly three times too big. + + Only a pic with an enclosed hole in it is rebuilt at all -- the rest are + handed straight back untouched -- which is why it hit some species and not + others, and why it never showed on desktop, where the dpi scale is already 1. + The readback now asks for one texel per pic pixel, the way the engine's own + `PixelCanvas` does for the same reason. The animated-tile atlas readback took + the same fix: on a phone it would have come back magnified too, and every + tile coordinate in it counts in eights from the top-left. + ## 1.3.0 ### Added @@ -32,28 +58,6 @@ ### Fixed -- **A staged battle on a phone stood some Pokémon three times the size of the - square they were on.** A Pidgey towered over the arena while the mon beside - it was the right size, which reads as a bug in one species and is not one. - - Putting the paper back inside a battle pic (BattlePics, below) needs the - pic's pixels, and a LOVE Image does not hand them back -- so the pic is drawn - into a canvas of its own size and the canvas is read. `newCanvas` takes the - SURFACE's dpi scale when it is not told otherwise, `conf.lua` turns highdpi - on for Android and iOS, and Android's display density is routinely 2.75. So - `newCanvas(56, 56)` allocated a 154x154 texture there, the pic was magnified - into it, and the readback came back at the magnified size. The rebuilt pic - was 2.75x the artwork, the engine's pics layer drew it 1:1 because it trusts - `getWidth()`, and the mon stood on its tile nearly three times too big. - - Only a pic with an enclosed hole in it is rebuilt at all -- the rest are - handed straight back untouched -- which is why it hit some species and not - others, and why it never showed on desktop, where the dpi scale is already 1. - The readback now asks for one texel per pic pixel, the way the engine's own - `PixelCanvas` does for the same reason. The animated-tile atlas readback took - the same fix: on a phone it would have come back magnified too, and every - tile coordinate in it counts in eights from the top-left. - - **Battle pics were see-through, and it took a back sprite on a tiled floor to make it obvious.** Gen 1 pics are two-bit art whose lightest shade is white, and the decoded PNGs key that shade to alpha 0 -- which cost nothing diff --git a/main.lua b/main.lua index 0ba9fb0..ccef967 100644 --- a/main.lua +++ b/main.lua @@ -848,7 +848,7 @@ mod.hooks:wrap("world.tod", function(next, tod, ctx) return DayNight.tod() end) -mod.exports.version = "1.3.0" +mod.exports.version = "1.3.1" -- exposed so a companion mod can pin its own tiles' shapes or read the -- camera without reaching into this mod's file layout mod.exports.lib = V diff --git a/manifest.json b/manifest.json index be71b75..ef2c15c 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "DRAMATIC_SHAPE", "name": "Dramatic Shape Voxel Mod", - "version": "1.3.0", + "version": "1.3.1", "api": 2, "entry": "main.lua", "profile": "content",