#include <nds.h>
#include <RotBackgrounds.h>
#include <TextBackgrounds.h>
#include <Multilayer.h>
#include <stdio.h>
#include <stdlib.h>
void HandMadeTiles(void);
void Text256x256(void);
void Text256x512(void);
void Text512x256(void);
void Text512x512(void);
void ExRot128x128(void);
void ExRot256x256(void);
void ExRot512x512(void);
void ExRot1024x1024(void);
void Rot128x128(void);
void Rot256x256(void);
void Rot512x512(void);
void Rot1024x1024(void);
void Bmp8_128x128(void);
void Bmp8_256x256(void);
void Bmp8_512x256(void);
void Bmp8_512x512(void);
void Bmp8_512x1024(void);
void Bmp8_1024x512(void);
void Bmp16_128x128(void);
void Bmp16_512x256(void);
void Bmp16_256x256(void);
void Bmp16_512x512(void);
void scrollText(void);
void scrollRotation(void);
void scrollVertical(void);
void scrollHorizontalText(void);
void scrollHorizontalExRotation(void);
void scroll4wayText(void);
void scroll4wayExRotation(void);
void advMosaic(void);
void advRotating(void);
void advScaling(void);
void advExtendedPalette(void);
void advMultipleLayers(void);
struct Demo
{
fp go;
const char* name;
const char* description;
};
struct Category
{
const char* name;
Demo *demos;
int count;
};
struct Demo basicExamples[] =
{
{HandMadeTiles, "Handmade Text 256x256", "Displays a handmade 256 x 256 Text background"},
{Text256x256, "Text 256x256", "Displays a 256 x 256 Text background"},
{Text256x512, "Text 256x512", "Displays a 256 x 512 Text background"},
{Text512x256, "Text 512x256", "Displays a 512 x 256 Text background"},
{Text512x512, "Text 512x512", "Displays a 512 x 512 Text background"},
{ExRot128x128, "Extended Rotation 128x128", "Displays a 128 x 128 Extended Rotation background"},
{ExRot256x256, "Extended Rotation 256x256", "Displays a 256 x 256 Extended Rotation background"},
{ExRot512x512, "Extended Rotation 512x512", "Displays a 512 x 512 Extended Rotation background"},
{ExRot1024x1024, "Extended Rotation 1024x1024", "Displays a 1024 x 1024 Extended Rotation background"},
{Rot128x128, "Rotation 128x128", "Displays a 256 x 256 Rotation background"},
{Rot256x256, "Rotation 256x256", "Displays a 256 x 256 Rotation background"},
{Rot512x512, "Rotation 512x512", "Displays a 512 x 512 Rotation background"},
{Rot1024x1024, "Rotation 1024x1024", "Displays a 1024 x 1024 Rotation background"},
};
struct Demo bitmapExamples[] =
{
{Bmp8_128x128, "256 color 128x128", "Displays a 128 x 128 Bitmap background"},
{Bmp8_256x256, "256 color 256x256", "Displays a 256 x 256 Bitmap background"},
{Bmp8_512x256, "256 color 512x256", "Displays a 512 x 256 Bitmap background"},
{Bmp8_512x512, "256 color 512x512", "Displays a 512 x 512 Bitmap background"},
{Bmp8_512x1024, "256 color 512x1024", "Displays a 512 x 1024 Bitmap background"},
{Bmp8_1024x512, "256 color 1024x512", "Displays a 1024 x 512 Bitmap background"},
{Bmp16_128x128, "16-bit color 128x128", "Displays a 128 x 128 Bitmap background"},
{Bmp16_256x256, "16-bit color 256x256", "Displays a 256 x 256 Bitmap background"},
{Bmp16_512x256, "16-bit color 512x256", "Displays a 512 x 256 Bitmap background"},
{Bmp16_512x512, "16-bit color 512x512", "Displays a 512 x 512 Bitmap background"},
};
struct Demo scrollingExamples[] =
{
{scrollText, "Text Backgrounds", "Hardware Scrolling of a Text background"},
{scrollRotation, "Rot Backgrounds", "Hardware Scrolling of a Rotation background"},
{scrollVertical, "Vertical Scrolling", "Scrolling a large map vertically"},
{scrollHorizontalText, "Horizontal Scrolling (Text)", "Scrolling a large map horzontally on a text background"},
{scrollHorizontalExRotation, "Horizontal Scrolling (ExRot)", "Scrolling a large map horzontally on an extended rotation background"},
{scroll4wayText, "4 Way Scrolling (Text)", "Scrolling a large map 4 ways on a text background"},
{scroll4wayExRotation, "4 Way Scrolling (Rotation)", "Scrolling a large map 4 ways on a ex rotation background"},
};
struct Demo advancedExamples[] =
{
{advMosaic, "Mosaic", "A demo of the Mosaic scaling"},
{advRotating, "Rotation", ""},
{advScaling, "Scaling", ""},
{advExtendedPalette, "Extended Palette", ""},
{advMultipleLayers, "Multiple Text Layers", ""},
};
struct Category categories[] =
{
{"Basic", basicExamples, sizeof(basicExamples) / sizeof(Demo)},
{"Bitmap", bitmapExamples, sizeof(bitmapExamples) / sizeof(Demo)},
{"Scrolling", scrollingExamples, sizeof(scrollingExamples) / sizeof(Demo)},
{"Advanced", advancedExamples, sizeof(advancedExamples) / sizeof(Demo)}
};
int main(void) {
int keys;
while(1) {
int selectedCategory = 0;
int selectedDemo = 0;
bool selected = false;
int catCount = sizeof(categories) / sizeof(Category);
int demoCount = 0;
videoSetModeSub(MODE_0_2D);
consoleDemoInit();
while(!selected) {
scanKeys();
keys = keysDown();
if(keys & KEY_UP) selectedCategory--;
if(keys & KEY_DOWN) selectedCategory++;
if(keys & KEY_A) selected = true;
if(selectedCategory < 0) selectedCategory = catCount - 1;
if(selectedCategory >= catCount) selectedCategory = 0;
swiWaitForVBlank();
consoleClear();
for(int ci = 0; ci < catCount; ci++) {
iprintf("%c%d: %s\n", ci == selectedCategory ? '*' : ' ', ci + 1, categories[ci].name);
}
}
selected = false;
demoCount = categories[selectedCategory].count;
while(!selected) {
scanKeys();
keys = keysDown();
if(keys & KEY_UP) selectedDemo--;
if(keys & KEY_DOWN) selectedDemo++;
if(keys & KEY_A) selected = true;
if(keys & KEY_B) break;
if(selectedDemo < 0) selectedDemo = demoCount - 1;
if(selectedDemo >= demoCount) selectedDemo = 0;
swiWaitForVBlank();
consoleClear();
for(int di = 0; di < demoCount; di++) {
iprintf("%c%d: %s\n", di == selectedDemo ? '*' : ' ', di + 1, categories[selectedCategory].demos[di].name);
}
}
if(selected) {
consoleClear();
iprintf("Use arrow keys to scroll\nPress 'B' to exit");
categories[selectedCategory].demos[selectedDemo].go();
}
}
}