PDA

View Full Version : Bug Report 32-bit graphics are glitchy when used in gems for Coop/SP end of level screen


froducish
Aug 23, 2026, 01:03 PM
Mayhem happens if you use jjCOLORMAP instead of jjPIXELMAP. For smaller graphics (totem.png) it shows the wrong image with artifacts, for larger graphics (spyromalfunction.png) it crashes with an access violation (EIP always 0x0047C7CF, but the address it reads from varies each time).
Minimal example:

void onLevelLoad() {
jjCOLORMAP dummy("your_file_here.png");
jjAnimSets[ANIM::PICKUPS].load();
const uint animId = 35;
jjANIMFRAME@ frame = jjAnimFrames[jjAnimations[jjAnimSets[ANIM::PICKUPS].firstAnim + animId].firstFrame]; // (ANIM::PICKUPS, animId, 0)
dummy.save(frame);
}

Tested on JJ2+ 6.6g.

Violet CLM
Aug 23, 2026, 03:15 PM
Thanks for the report! It looks like this is a small place that still uses JJ2's original sprite-drawing code, rather than JJ2+'s. I know there's a 7.0 branch that does move the end-of-level screen into JJ2+ codespace, which will fix the problem; a faster fix could also be arranged if this (32-bit gem sprites in SP/Coop) is something people are interested in being able to do in the meantime.

The only other place in the codebase that has the same problem, from what I can tell, is the black death screen, if you try to have any 32-bit RABBIT::DIE sprites. I'm not sure offhand if there's any current branch that will fix that.