#include #include #include #include #define XSIZ aa_imgwidth(context) #define YSIZ (aa_imgheight(context)-6) #define MAXTABLE (256*5) aa_context *context; aa_renderparams *params; aa_palette palette; static unsigned char *bitmap; static unsigned int table[MAXTABLE][4]; static int pal[] = { 0, 0, 0, 0, 0, 6, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 8, 0, 0, 9, 0, 0, 10, 2, 0, 10, 4, 0, 9, 6, 0, 9, 8, 0, 8, 10, 0, 7, 12, 0, 7, 14, 0, 6, 16, 0, 5, 18, 0, 5, 20, 0, 4, 22, 0, 4, 24, 0, 3, 26, 0, 2, 28, 0, 2, 30, 0, 1, 32, 0, 0, 32, 0, 0, 33, 0, 0, 34, 0, 0, 35, 0, 0, 36, 0, 0, 36, 0, 0, 37, 0, 0, 38, 0, 0, 39, 0, 0, 40, 0, 0, 40, 0, 0, 41, 0, 0, 42, 0, 0, 43, 0, 0, 44, 0, 0, 45, 0, 0, 46, 1, 0, 47, 1, 0, 48, 2, 0, 49, 2, 0, 50, 3, 0, 51, 3, 0, 52, 4, 0, 53, 4, 0, 54, 5, 0, 55, 5, 0, 56, 6, 0, 57, 6, 0, 58, 7, 0, 59, 7, 0, 60, 8, 0, 61, 8, 0, 63, 9, 0, 63, 9, 0, 63, 10, 0, 63, 10, 0, 63, 11, 0, 63, 11, 0, 63, 12, 0, 63, 12, 0, 63, 13, 0, 63, 13, 0, 63, 14, 0, 63, 14, 0, 63, 15, 0, 63, 15, 0, 63, 16, 0, 63, 16, 0, 63, 17, 0, 63, 17, 0, 63, 18, 0, 63, 18, 0, 63, 19, 0, 63, 19, 0, 63, 20, 0, 63, 20, 0, 63, 21, 0, 63, 21, 0, 63, 22, 0, 63, 22, 0, 63, 23, 0, 63, 24, 0, 63, 24, 0, 63, 25, 0, 63, 25, 0, 63, 26, 0, 63, 26, 0, 63, 27, 0, 63, 27, 0, 63, 28, 0, 63, 28, 0, 63, 29, 0, 63, 29, 0, 63, 30, 0, 63, 30, 0, 63, 31, 0, 63, 31, 0, 63, 32, 0, 63, 32, 0, 63, 33, 0, 63, 33, 0, 63, 34, 0, 63, 34, 0, 63, 35, 0, 63, 35, 0, 63, 36, 0, 63, 36, 0, 63, 37, 0, 63, 38, 0, 63, 38, 0, 63, 39, 0, 63, 39, 0, 63, 40, 0, 63, 40, 0, 63, 41, 0, 63, 41, 0, 63, 42, 0, 63, 42, 0, 63, 43, 0, 63, 43, 0, 63, 44, 0, 63, 44, 0, 63, 45, 0, 63, 45, 0, 63, 46, 0, 63, 46, 0, 63, 47, 0, 63, 47, 0, 63, 48, 0, 63, 48, 0, 63, 49, 0, 63, 49, 0, 63, 50, 0, 63, 50, 0, 63, 51, 0, 63, 52, 0, 63, 52, 0, 63, 52, 0, 63, 52, 0, 63, 52, 0, 63, 53, 0, 63, 53, 0, 63, 53, 0, 63, 53, 0, 63, 54, 0, 63, 54, 0, 63, 54, 0, 63, 54, 0, 63, 54, 0, 63, 55, 0, 63, 55, 0, 63, 55, 0, 63, 55, 0, 63, 56, 0, 63, 56, 0, 63, 56, 0, 63, 56, 0, 63, 57, 0, 63, 57, 0, 63, 57, 0, 63, 57, 0, 63, 57, 0, 63, 58, 0, 63, 58, 0, 63, 58, 0, 63, 58, 0, 63, 59, 0, 63, 59, 0, 63, 59, 0, 63, 59, 0, 63, 60, 0, 63, 60, 0, 63, 60, 0, 63, 60, 0, 63, 60, 0, 63, 61, 0, 63, 61, 0, 63, 61, 0, 63, 61, 0, 63, 62, 0, 63, 62, 0, 63, 62, 0, 63, 62, 0, 63, 63, 0, 63, 63, 1, 63, 63, 2, 63, 63, 3, 63, 63, 4, 63, 63, 5, 63, 63, 6, 63, 63, 7, 63, 63, 8, 63, 63, 9, 63, 63, 10, 63, 63, 10, 63, 63, 11, 63, 63, 12, 63, 63, 13, 63, 63, 14, 63, 63, 15, 63, 63, 16, 63, 63, 17, 63, 63, 18, 63, 63, 19, 63, 63, 20, 63, 63, 21, 63, 63, 21, 63, 63, 22, 63, 63, 23, 63, 63, 24, 63, 63, 25, 63, 63, 26, 63, 63, 27, 63, 63, 28, 63, 63, 29, 63, 63, 30, 63, 63, 31, 63, 63, 31, 63, 63, 32, 63, 63, 33, 63, 63, 34, 63, 63, 35, 63, 63, 36, 63, 63, 37, 63, 63, 38, 63, 63, 39, 63, 63, 40, 63, 63, 41, 63, 63, 42, 63, 63, 42, 63, 63, 43, 63, 63, 44, 63, 63, 45, 63, 63, 46, 63, 63, 47, 63, 63, 48, 63, 63, 49, 63, 63, 50, 63, 63, 51, 63, 63, 52, 63, 63, 52, 63, 63, 53, 63, 63, 54, 63, 63, 55, 63, 63, 56, 63, 63, 57, 63, 63, 58, 63, 63, 59, 63, 63, 60, 63, 63, 61, 63, 63, 62, 63, 63, 63}; static void initialize() { int i; context = aa_autoinit(&aa_defparams); if (context == NULL) return; params = aa_getrenderparams(); bitmap = context->imagebuffer; for (i = 0; i < 256; i++) aa_setpalette(palette, i, pal[i * 3] * 4, pal[i * 3 + 1] * 4, pal[i * 3 + 2] * 4); } static void uninitialize() { aa_close(context); exit(0); } static void gentable() { unsigned int i, p2; for (i = 0; i < MAXTABLE; i++) { if (i > 6) { p2 = (i - 6) / 5; table[i][3] = p2 * 256 * 256 * 256; table[i][2] = p2 * 256 * 256; table[i][1] = p2 * 256; table[i][0] = p2; } else table[i][0] = 0, table[i][1] = 0, table[i][2] = 0, table[i][3] = 0; } } #define MA 5 static void firemain() { register unsigned int last3, put, last2; register unsigned int i; unsigned char *p; last3 = 0; last2 = 0; i = 0; #define END (bitmap + XSIZ * YSIZ) for (p = bitmap + 4; p <= (unsigned char *) (END); p += 1) { put = table[(*(p + XSIZ - 1) + *(p + XSIZ + 1) + *(p + XSIZ))][0]; #if 0 i -= *(p - 2 + XSIZ * 2); i += *(p + 1 + XSIZ * 2); put = table[(i + *(p + 3 * XSIZ - 1) + *(p + 4 * XSIZ + 1))][0]; i -= *(p - 1 + XSIZ * 2); i += *(p + 2 + XSIZ * 2); put += table[(i + *(p + 3 * XSIZ + 0) + *(p + 4 * XSIZ + 2))][1]; i -= *(p - 0 + XSIZ * 2); i += *(p + 3 + XSIZ * 2); put += table[(i + *(p + 3 * XSIZ + 1) + *(p + 4 * XSIZ + 3))][2]; i -= *(p + 1 + XSIZ * 2); i += *(p + 4 + XSIZ * 2); put += table[(i + *(p + 3 * XSIZ + 2) + *(p + 4 * XSIZ + 4))][3]; *((unsigned long *) (p)) = put; #endif } } #define min(x,y) ((x)<(y)?(x):(y)) static void drawfire() { unsigned int i, last1, i1, i2; static int loop = 0, sloop = 0, height = 0; register unsigned char *p; height++; loop--; if (loop < 0) loop = rand() % 3, sloop++;; srand(sloop); i1 = 1; i2 = 4 * XSIZ + 1; for (p = (char *) bitmap + XSIZ * (YSIZ + 0); p < ((unsigned char *) bitmap + XSIZ * (YSIZ + 1)); p++, i1 += 4, i2 -= 4) { last1 = rand() % min(i1, min(i2, height)); i = rand() % 6; for (; p < (unsigned char *) bitmap + XSIZ * (YSIZ + 1) && i != 0; p++, i--, i1 += 4, i2 -= 4) *p = last1, last1 += rand() % 6 - 2, *(p + XSIZ) = last1, last1 += rand() % 6 - 2, *(p + 2 * XSIZ) = last1, last1 += rand() % 6 - 2, *(p + 3 * XSIZ) = last1, last1 += rand() % 6 - 2; } i = 0; firemain(); aa_renderpalette(context, palette, params, 0, 0, aa_scrwidth(context), aa_scrheight(context)); aa_flush(context); aa_getkey(context, 0); } static void game() { gentable(); while (1) { drawfire(); } } void main(int argc, char **argv) { initialize(); game(); uninitialize(); }