account for dpi issues on updated 3d battles
DramaticShape · 2026-07-31 ·
parent 775757b2d6
account for dpi issues on updated 3d battles
Changed files
CHANGELOG.md | 48 ++++++++++++++++++++++++++----------------------
main.lua | 2 +-
manifest.json | 2 +-
3 files changed, 28 insertions(+), 24 deletions(-)
Diff
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",