From e284eb2ba7cc448ff7c23d43e1dd9e3a9ae557c7 Mon Sep 17 00:00:00 2001 From: Endaris Date: Sat, 22 Nov 2025 00:49:00 +0100 Subject: [PATCH] change garbage render to use face as the reference sprite add garbageReference image to docs --- client/src/mods/Character.lua | 8 ++++---- docs/characters.md | 8 ++++++-- docs/images/garbageReference.png | Bin 0 -> 44011 bytes 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 docs/images/garbageReference.png diff --git a/client/src/mods/Character.lua b/client/src/mods/Character.lua index 00b4a644..1b3c68a8 100644 --- a/client/src/mods/Character.lua +++ b/client/src/mods/Character.lua @@ -586,14 +586,14 @@ end ---@param height integer height in panels ---@return love.Texture function Character:createGarbageTexture(width, height) - -- pop and flash are verifiably "panel sized", technically filler and face should work too - local relativeScale = self.images.pop:getWidth() / 16 + -- filler and face are the "panel sized" counterparts in the garbage so they are valid sprites to determine relative size + local relativeScale = self.images.face:getWidth() / 16 -- create all canvases as if we were working with the 360x240 resolution but use the canvas dpi scale to use the real resolution -- that makes it easy to scale later as everything can be treated the same while love handles the dpi scale resolution for us - local dpiscale = self.images.pop:getDPIScale() * relativeScale + local dpiscale = self.images.face:getDPIScale() * relativeScale -- Use the same filter as the garbage images so that upscaling looks right for pixel art - local filterMin, filterMag = self.images.pop:getFilter() + local filterMin, filterMag = self.images.face:getFilter() local image = GraphicsUtil.renderToTexture( width * 16, diff --git a/docs/characters.md b/docs/characters.md index d3f3b56a..15e8db53 100644 --- a/docs/characters.md +++ b/docs/characters.md @@ -331,7 +331,11 @@ You can use the Ctrl+Shift+Alt+C shortcut to reload character graphics in the ga ### Garbage assets -See https://cdn.discordapp.com/attachments/417706389813592068/874106744392007680/garbage_ref.png for an arrangement overview. +Before creating garbage, take a look at the arrangement overview for the garbage files. + +![Arrangement overview](./images/garbageReference.png) + +These 10 sprites build a unit. Using different sizes and resolutions within these 10 sprites may lead to unexpected results. It is generally recommended to provide the full set and not make use of the built-in fallback textures. #### Filler sprites @@ -358,7 +362,7 @@ This will get drawn on top of the filler sprites. ##### face -Sprite for the center of garbage pieces of odd-numbered height (1, 3, ...) +Sprite for the center of garbage pieces of odd-numbered height (1, 3, ...), or all of them if face2 is not provided Aspect ratio: 1:1 (square) Recommended size: 96x96px diff --git a/docs/images/garbageReference.png b/docs/images/garbageReference.png new file mode 100644 index 0000000000000000000000000000000000000000..9f28f06e7114c85d3cab3b860d92e12fce9adfc1 GIT binary patch literal 44011 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 Ze7ZtbaPTD={_ny2ANt2V_x=3E{~sg9AT|I1 literal 0 HcmV?d00001