All 747 imported PNGs were imported losslessly (compress/mode=0) without
mipmaps. Lossless textures are decompressed to raw RGBA8 in GPU memory,
so the big gameplay assets were extremely expensive: the 4100x2448
bush_curtain alone used ~40 MB of VRAM, and the 6400x8001 minigame
spritesheets ~205 MB each. Summed over the affected files, the
worst-case footprint was ~2.4 GB of texture memory for a game that
targets low-end 1-2 GB tablets with the gl_compatibility renderer. The
absence of mipmaps also caused shimmering and wasted bandwidth whenever
these textures were drawn below their native size, which is almost
always the case with the 2560x1800 canvas_items stretch.
- Switch the 119 textures with a dimension >= 512 px to VRAM
compression (compress/mode=2) with generated mipmaps. The project
already enables etc2_astc import, so mobile gets ETC2/ASTC and
desktop gets S3TC/BPTC. The total footprint for these textures drops
from ~2.4 GB raw RGBA8 to ~770 MB including mipmaps (~3x smaller
resident set, plus faster texture uploads).
- Keep small UI textures (< 512 px, 626 files) lossless: their VRAM
cost is negligible and block-compression artifacts would be most
visible on small crisp UI art.
- Set the default 2D texture filter to Linear Mipmap so the generated
mipmaps are actually sampled by canvas items (without this, mipmap
generation would only add memory).
- Remove viewport/hdr_2d=true: HDR 2D allocates RGBA16F framebuffers,
doubling framebuffer memory and bandwidth at 2560x1800 on exactly the
GPUs that can least afford it. No scene uses glow or HDR values (no
WorldEnvironment anywhere), so this was pure cost. As false is the
default value, Godot drops the line entirely.
Texture quality should be eyeballed in the editor on the largest
illustrations; any texture where compression artifacts are noticeable
can be switched back to lossless individually.
Verified with the GUT test suite (62/62 passing).
- Add 8 garden plant assets (garden_plant_01 to 08) from victory assets
- Remove entire old flower system (FlowerSizes enum, flower generation,
flower VFX transitions, flower_controls, flowers_visible, flowers_sizes)
- Remove Flower class from GardenLayout
- Plants are created programmatically in Garden._create_plants() at fixed
positions matching the Explanation.png mockup layout
- All plants hidden by default, revealed progressively based on completed
minigames ratio: 0 completed = 0 visible, all completed = all 8 visible
- Add lowercase file naming rule to CLAUDE.md
- Fix current_garden lookup to use _get_garden_index_for_lesson instead
of removed flower_info system
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace rectangular garden backgrounds with circular Garden_01.png asset,
arrange lesson buttons in a circular pattern instead of sine-wave layout,
and introduce three visual states for buttons (locked/unlocked/completed)
using the new lesson_circle.png texture. Add jellyfish mascot to gardens.
- Add new assets: Garden_01.png, lesson_circle.png, jellyfish.png
- Update garden background to use keep_aspect_centered circular display
- Implement circular lesson positioning with configurable radius
- Simplify position validation to circle-distance check
- Add layout cache versioning to invalidate old layouts
- Update boss_button.tscn to match new button design
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The four checkbox PNGs were incorrectly identified as unused.
They are referenced at lines 6, 9, 10, and 12 of
resources/themes/kalulu_theme.tres, which is the globally applied
custom theme (project.godot). Restoring them to avoid broken
checkbox icons and theme load failures.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>