diff options
-rw-r--r-- | ffx-convert.cpp | 65 |
1 files changed, 61 insertions, 4 deletions
diff --git a/ffx-convert.cpp b/ffx-convert.cpp index f310b92..fc1cf69 100644 --- a/ffx-convert.cpp +++ b/ffx-convert.cpp @@ -10,12 +10,54 @@ int IMG_SX = 128, IMG_SY = 128, BLOC_SX = 128, BLOC_SY = 128; int do_swap = 0; +Uint8 * pixels; + CODE_BEGINS Color LookUp(char i) { return Color(i << 4, i << 4, i << 4, 255); } +void countdown(int o_x, int o_y, int size, int * counter, int * a_x, int * a_y) { + if (*counter) { + if (size != 1) { + int hs = size >> 1; + countdown(o_x, o_y, hs, counter, a_x, a_y); + if (!*counter) + return; + countdown(o_x, o_y + hs, hs, counter, a_x, a_y); + if (!*counter) + return; + countdown(o_x + hs, o_y, hs, counter, a_x, a_y); + if (!*counter) + return; + countdown(o_x + hs, o_y + hs, hs, counter, a_x, a_y); + } else { + *counter = *counter - 1; + *a_x = o_x; + *a_y = o_y; + } + } +} + +void putpixel(int x, int y, Color C) { + pixels[(y * IMG_SX * 2 + x) * 3 + 0] = C.R; + pixels[(y * IMG_SX * 2 + x) * 3 + 1] = C.G; + pixels[(y * IMG_SX * 2 + x) * 3 + 2] = C.B; +} + +void drawhline(int y, Color C) { + for (int i = 0; i < (IMG_SX << 1); i++) { + putpixel(i, y, C); + } +} + +void drawvline(int x, Color C) { + for (int i = 0; i < (IMG_SY << 1); i++) { + putpixel(x, i, C); + } +} + int transform(int x, int y) { int numero_bloc_x = x / BLOC_SX; @@ -23,6 +65,13 @@ int transform(int x, int y) { int numero_bloc = numero_bloc_y * (IMG_SX / BLOC_SX) + numero_bloc_x; + if (do_swap) { + if ((BLOC_SX == BLOC_SY) || ((BLOC_SX >> 1) == BLOC_SY)) { + countdown(0, 0, IMG_SY / BLOC_SY, &numero_bloc, &numero_bloc_x, &numero_bloc_y); + numero_bloc = numero_bloc_y * (IMG_SX / BLOC_SX) + numero_bloc_x; + } + } + int bx = x % BLOC_SX; int by = y % BLOC_SY; @@ -35,7 +84,7 @@ int transform(int x, int y) { virtual int startup() throw (GeneralException) { int c; - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0) { + if (SDL_Init(SDL_INIT_VIDEO) < 0) { printm(M_ERROR, "Couldn't initialise SDL: %s\n", SDL_GetError()); exit(-1); } @@ -89,14 +138,14 @@ virtual int startup() throw (GeneralException) { exit(-1); } + pixels = ((Uint8 *) screen->pixels); SDL_Event event; bool exitting = false; while (!exitting) { - Uint8 * pixels = ((Uint8 *) screen->pixels); - for (int y = 0; y < IMG_SX; y++) { - for (int x = 0; x < IMG_SY; x++) { + for (int y = 0; y < IMG_SY; y++) { + for (int x = 0; x < IMG_SX; x++) { Color c = LookUp(buffer[transform(x, y)]); pixels[((y * 2 + 0) * IMG_SX * 2 + (x * 2 + 0)) * 3 + 0] = c.R; pixels[((y * 2 + 0) * IMG_SX * 2 + (x * 2 + 0)) * 3 + 1] = c.G; @@ -117,6 +166,14 @@ virtual int startup() throw (GeneralException) { } } + for (int x = 0; x < IMG_SX; x += BLOC_SX) { + drawvline(x << 1, Color(255, 255, 0)); + } + + for (int y = 0; y < IMG_SY; y += BLOC_SY) { + drawhline(y << 1, Color(255, 255, 0)); + } + SDL_Flip(screen); SDL_WaitEvent(&event); |