start building this partly asleep so its realy basic and badly designed
its a basic 3 layer sprite editor, not much else going on curently its set to 32x32 sprites looking into setting it up with dynamic sprite sizes
#include "Pokitto.h"
Pokitto::Core game;
const uint8_t Spritex = 32;
const uint8_t Spritey = 32;
uint8_t sprite[(Spritex/2)*Spritey+2];// = new uint8_t[(Spritex/2)*Spritey+2];
uint8_t layer1[(Spritex/2)*Spritey+2];// = new uint8_t[(Spritex/2)*Spritey+2];
uint8_t layer2[(Spritex/2)*Spritey+2];//= new uint8_t[(Spritex/2)*Spritey+2];
uint8_t layer3[(Spritex/2)*Spritey+2]; //= new uint8_t[(Spritex/2)*Spritey+2];
uint16_t pallet[16] ={
0x0,
0x194a,
0x792a,
0x42a,
0xaa86,
0x5aa9,
0xc618,
0xff9d,
0xf809,
0xfd00,
0xffe4,
0x72a,
0x2d7f,
0x83b3,
0xfbb5,
0xfe75
};
uint8_t selector =0;
uint8_t activelayer =1;
uint8_t pixelX = 10;
uint8_t pixelY = 10;
bool isMenu = false;
void setActiveLayer(){
switch (activelayer)
{
case 1:
game.display.setFrameBufferTo(layer1+2);
break;
case 2:
game.display.setFrameBufferTo(layer2+2);
break;
case 3:
game.display.setFrameBufferTo(layer3+2);
break;
default:
game.display.setFrameBufferTo(layer1+2);
break;
}
}
void drawSelector(uint16_t col){
game.display.directRectangle(selector*13+1,163,(selector*13)+12,163,col);
game.display.directRectangle(selector*13+1,176,(selector*13)+12,175,col);
game.display.directRectangle(selector*13,164,selector*13+1,174,col);
game.display.directRectangle((selector*13)+12,164,(selector*13)+13,174,col);
}
int main () {
game.begin();
game.display.load565Palette(pallet);
game.display.directcolor = 0xFFFF;
sprite[0] = Spritex;
sprite[1] = Spritey;
layer1[0] = Spritex;
layer1[1] = Spritey;
layer2[0] = Spritex;
layer2[1] = Spritey;
layer3[0] = Spritex;
layer3[1] = Spritey;
game.display.width = Spritex;
game.display.height = Spritey;
game.display.persistence = true;
game.display.setInvisibleColor(0);
//test
game.display.setFrameBufferTo(layer1+2);
game.display.setColor(9);
game.display.drawRectangle(1,1,15,15);
game.display.setColor(3);
game.display.drawCircle(1,1,4);
game.display.setFrameBufferTo(layer2+2);
game.display.setColor(6);
game.display.drawCircle(16,1,4);
game.display.setFrameBufferTo(layer3+2);
game.display.drawRectangle(2,2,15,15);
while (game.isRunning()) {
if (game.update(true)) {/*
game.display.print("Hello World!");
game.display.screenbuffer[53] = 110;
game.display.screenbuffer[54] = 87;
game.display.directBitmap(100,0,game.display.screenbuffer+53,4,0);
*/
// game.display.directRectangle(10,10,50,100,pallet[5]);
game.display.setInvisibleColor(0);
setActiveLayer();
//game.display.print("Hello World!");
game.display.setFrameBufferTo(sprite+2);
game.display.drawBitmap(0,0,layer1);
game.display.drawBitmap(0,0,layer2);
game.display.drawBitmap(1,1,layer3);
game.display.setInvisibleColor(17);
game.display.directBitmap(1,1,sprite,4,2);
game.display.setInvisibleColor(0);
game.display.directPixel(pixelX*2+1,pixelY*2,0xFFFF);
game.display.directPixel(pixelX*2+2,pixelY*2,0xFFFF);
game.display.directPixel(pixelX*2+1,pixelY*2+3,0xFFFF);
game.display.directPixel(pixelX*2+2,pixelY*2+3,0xFFFF);
game.display.directPixel(pixelX*2,pixelY*2+1,0xFFFF);
game.display.directPixel(pixelX*2,pixelY*2+2,0xFFFF);
game.display.directPixel(pixelX*2+3,pixelY*2+1,0xFFFF);
game.display.directPixel(pixelX*2+3,pixelY*2+2,0xFFFF);
if(activelayer == 1){
game.display.directRectangle(1,69,64,69,0xFFFF);
}else game.display.directRectangle(1,69,64,69,0);
game.display.directBitmap(1,70,layer1,4,2);
if(activelayer == 2){
game.display.directRectangle(65,69,65+64,69,0xFFFF);
}else game.display.directRectangle(65,69,65+64,69,0);
game.display.directBitmap(65,70,layer2,4,2);
if(activelayer == 3){
game.display.directRectangle(132,69,132+64,69,0xFFFF);
}else game.display.directRectangle(132,69,132+64,69,0);
game.display.directBitmap(132,70,layer3,4,2);
if (game.buttons.pressed(BTN_C)){
game.display.directRectangle((selector*13)+2,155,(selector*13)+12,163,0);
isMenu = !isMenu;
}
//game.display.directChar((selector*13)+1,150,54);
if(isMenu){
if (game.buttons.pressed(BTN_A)){
activelayer += 1;
activelayer = activelayer%3;
}
if (game.buttons.pressed(BTN_B)){
activelayer -=1;
activelayer = activelayer%3;
}
if (game.buttons.repeat(BTN_RIGHT,5)){
game.display.directRectangle((selector*13)+2,155,(selector*13)+12,163,0);
drawSelector(0);
selector += 1;
selector = selector%16;
}
if (game.buttons.repeat(BTN_LEFT,5)){
game.display.directRectangle((selector*13)+2,155,(selector*13)+12,163,0);
drawSelector(0);
selector -= 1;
selector = selector%16;
}
game.display.directChar((selector*13)+2,155,86);
}else{
if (game.buttons.repeat(BTN_RIGHT,5)){
pixelX++;
pixelX = pixelX%Spritex;
}
if (game.buttons.repeat(BTN_LEFT,5)){
pixelX--;
pixelX = pixelX%Spritex;
}
if (game.buttons.repeat(BTN_UP,5)){
pixelY --;
pixelY = pixelY%Spritey;
}
if (game.buttons.repeat(BTN_DOWN,5)){
pixelY ++;
pixelY = pixelY%Spritey;
}
if (game.buttons.pressed(BTN_A)){
setActiveLayer();
game.display.drawPixel(pixelX,pixelY,selector);
}
}
// pallet
for(int i = 0; i < 16; i++)game.display.directRectangle(i*13+1,164,(i*13)+12,174,pallet[i]);
drawSelector(0xFFFF);
}
}
}
overlay_test.bin (38.0 KB)