gbdev / gbdev/rgbds

[Feature request] Support non-tiled "streams" of PNG-to-1bpp/2bpp conversion

Open
#1,673 2 comments 0 reactions 0 assignees View on GitHub
enhancement rgbgfx
Dominant language
C++
Stars
1.6k
Forks
193
Avg merge
22h 17m
Merged PRs (30d)
26

Description

If an input image is 8px wide, *and* the only output is graphics data (no tilemap, attrmap, palmap, or palette), *and* there's no deduplication or mirroring, then it's not necessary to divide the image into tiles: RGBGFX can just process the graphic one pixel row at a time.

This would occasionally be useful, e.g. for this sprite in [pokered](https://github.com/pret/pokered/blob/master/engine/battle/animations.asm#L1744-L1753):

```asm
MinimizedMonSprite:
; 8x5 partial tile graphic
pusho b.X ; . = 0, X = 1
db %...XX...
db %..XXXX..
db %.XXXXXX.
db %..XXXX..
db %..X..X..
popo
MinimizedMonSpriteEnd:
```

It's been requested before in https://github.com/gbdev/rgbds/pull/234#issuecomment-366035943 (as noted in https://github.com/gbdev/rgbds/pull/981#issuecomment-1067202197), and semi-supported by 8fe52930776f8803c215c67e22ba558db5e360bb.

Contributor guide

Open the contributing guide

Research direction

Start by reviewing the prior discussion in pull request #234, the note in pull request #981, and commit 8fe52930776f8803c215c67e22ba558db5e360bb. Use the pokered MinimizedMonSprite example to verify the intended behavior: an 8px-wide graphics-only input is processed row by row when tilemaps, palettes, deduplication, and mirroring are absent.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
computer-graphics, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.