/* ============================================================================== WordUp Graphics Toolkit Version 5.0 Demonstration Program 57 This program uses the scrolling library to demonstrate some of the possible configurations of the scrolling windows. *** PROJECT *** This program requires the files WGT5_WC.LIB and WSCR_WC.LIB to be linked. *** DATA FILES *** TEST1-TEST4.SPR, TEST1-TEST4.WMP WATCOM C++ VERSION ============================================================================== */ #include #include #include /* Keyboard control codes */ #define LEFT 75 #define RIGHT 77 #define UP 72 #define DOWN 80 #define ESC 1 #define NUM_TILES 5 block tiles0[NUM_TILES+1]; /* 4 block array to hold our sets of tiles */ block tiles1[NUM_TILES+1]; block tiles2[NUM_TILES+1]; block tiles3[NUM_TILES+1]; short tiletypes0[256]; /* Tile types for each window */ short tiletypes1[256]; short tiletypes2[256]; short tiletypes3[256]; scrollsprite wobject[5]; /* No objects are used in this demo, but a scrollsprite structure is needed to load the map. */ short window_on[4]; block sprites[5]; wgtmap map0, map1, map2, map3; short setup; short oldmode; /* Previous graphics mode */ color pal[256]; /* A common palette for all sprites/tiles */ short xsize[4], ysize[4]; /* The size of the tiles in our map */ char c; int timer; short movex, movey; void loadsprites (void); void loadmaps (void); void find_tile_sizes (void); void start_scroll (void); void close_files (void); void timerctr (void) { timer++; } void main (void) { int frames = 0; oldmode = wgetmode (); printf ("WGT v5.0 Scrolling Possibilities Demo\n"); printf ("This demo is meant to show the versatility of WGT's scrolling\n"); printf ("library. It does not show all of the possible scrolling combinations\n"); printf ("but it gives you some setups that you can base a game around.\n\n"); printf ("The WGT v5.0 for Watcom system allows up to 50 maps used in any\n"); printf ("combination of normal and parallax layers. This demo does not\n"); printf ("make any attempt to illustrate these possibilities (or artwork :)\n\n"); printf ("Choose your scrolling setup:\n\n"); printf ("[0] 4 windows\n"); printf ("[1] 1 window, 1 scrolling level\n"); printf ("[2] 1 window, 2 scrolling levels\n"); printf ("[3] 1 window, 3 scrolling levels\n"); printf ("[4] 1 window, 4 scrolling levels\n"); printf ("[5] 2 windows, 1 scrolling level, vertical\n"); printf ("[6] 2 windows, 2 scrolling levels, vertical\n"); printf ("[7] 2 windows, 1 scrolling level, horizontal\n"); printf ("[8] 2 windows, 2 scrolling levels, horizontal\n"); printf ("[9] 2 windows, 1 with 3 levels, the other with 1 level\n"); printf ("Enter your setup:"); scanf ("%i", &setup); vga256 (); loadsprites (); find_tile_sizes (); start_scroll (); loadmaps (); installkbd (); timer = 0; winittimer (); wstarttimer (timerctr, TICKS(100)); do { movex = 0; movey = 0; if (kbdon[UP]) movey = -16; if (kbdon[DOWN]) movey = 16; if (kbdon[LEFT]) movex = -16; if (kbdon[RIGHT]) movex = 16; if (window_on[0]) wscrollwindow (0, movex * 1 / 4, movey * 1 / 4); if (window_on[1]) wscrollwindow (1, movex * 2 / 4, movey * 2 / 4); if (window_on[2]) wscrollwindow (2, movex * 3 / 4, movey * 3 / 4); if (window_on[3]) wscrollwindow (3, movex, movey); // wretrace (); switch (setup) { case 0: wputblock (0, 0, scrollblock[0], NORMAL); wputblock (128, 0, scrollblock[1], NORMAL); wputblock (0, 100, scrollblock[2], NORMAL); wputblock (128, 100, scrollblock[3], NORMAL); break; case 1: case 2: case 3: case 4: wputblock (0, 0, scrollblock[0], NORMAL); break; case 5: case 6: wputblock (0, 0, scrollblock[0], NORMAL); wputblock (128, 0, scrollblock[1], NORMAL); break; case 7: case 8: wputblock (0, 0, scrollblock[0], NORMAL); wputblock (0, 100, scrollblock[1], NORMAL); break; case 9: wputblock (0, 0, scrollblock[0], NORMAL); wputblock (128, 0, scrollblock[3], NORMAL); break; } frames++; } while (!kbdon[ESC]); /* Until ESC is hit */ wstoptimer (); wdonetimer (); uninstallkbd (); close_files (); wsetmode (oldmode); printf ("Number of Frames: %i\n", frames); printf ("Time elapsed: %7.2f seconds\n", (float)(timer) / 100.0); printf ("Frame Rate: %f\n", (float)frames / ((float)(timer) / 100.0)); } void loadsprites (void) { wloadsprites (pal, "test1.spr", tiles0, 1, NUM_TILES); wloadsprites (pal, "test2.spr", tiles1, 1, NUM_TILES); wloadsprites (pal, "test3.spr", tiles2, 1, NUM_TILES); wloadsprites (pal, "test4.spr", tiles3, 1, NUM_TILES); wsetpalette (0, 255, pal); } void loadmaps (void) { map0 = wloadmap (0, "test4.wmp", tiletypes0, wobject); map1 = wloadmap (1, "test3.wmp", tiletypes1, wobject); map2 = wloadmap (2, "test2.wmp", tiletypes2, wobject); map3 = wloadmap (3, "test1.wmp", tiletypes3, wobject); /* If the tilewidth is not 0, the window must have been initialized above, so start viewing it at the top left of the map. */ if (tilewidth[0] > 0) { wshowwindow (0, 0, 0); window_on[0] = 1; } if (tilewidth[1] > 0) { wshowwindow (1, 0, 0); window_on[1] = 1; } if (tilewidth[2] > 0) { wshowwindow (2, 0, 0); window_on[2] = 1; } if (tilewidth[3] > 0) { wshowwindow (3, 0, 0); window_on[3] = 1; } } void find_tile_sizes (void) { xsize[0] = wgetblockwidth (tiles0[1]); ysize[0] = wgetblockheight (tiles0[1]); xsize[1] = wgetblockwidth (tiles1[2]); ysize[1] = wgetblockheight (tiles1[2]); xsize[2] = wgetblockwidth (tiles2[1]); ysize[2] = wgetblockheight (tiles2[1]); xsize[3] = wgetblockwidth (tiles3[1]); ysize[3] = wgetblockheight (tiles3[1]); } void start_scroll (void) { switch (setup) { case 0: winitscroll (0, NORMAL, -1, 128 / xsize[2], 96 / ysize[2], tiles2); winitscroll (1, NORMAL, -1, 128 / xsize[1], 96 / ysize[1], tiles1); winitscroll (2, NORMAL, -1, 128 / xsize[2], 96 / ysize[2], tiles2); winitscroll (3, NORMAL, -1, 128 / xsize[3], 96 / ysize[3], tiles3); break; case 1: winitscroll (0, NORMAL, -1, 320 / xsize[3], 192 / ysize[3], tiles3); break; case 2: winitscroll (0, NORMAL, -1, 320 / xsize[3], 192 / ysize[3], tiles3); winitscroll (1, PARALLAX, 0, 320 / xsize[1], 192 / ysize[1], tiles1); break; case 3: winitscroll (0, NORMAL, -1, 256 / xsize[0], 192 / ysize[0], tiles0); winitscroll (1, PARALLAX, 0, 256 / xsize[1], 192 / ysize[1], tiles1); winitscroll (2, PARALLAX, 0, 256 / xsize[2], 192 / ysize[2], tiles2); break; case 4: winitscroll (0, NORMAL, -1, 256 / xsize[0], 192 / ysize[0], tiles0); winitscroll (1, PARALLAX, 0, 256 / xsize[2], 192 / ysize[2], tiles2); winitscroll (2, PARALLAX, 0, 256 / xsize[1], 192 / ysize[1], tiles1); winitscroll (3, PARALLAX, 0, 256 / xsize[3], 192 / ysize[3], tiles3); break; case 5: winitscroll (0, NORMAL, -1, 128 / xsize[0], 192 / ysize[0], tiles0); winitscroll (1, NORMAL, -1, 128 / xsize[1], 192 / ysize[1], tiles1); break; case 6: winitscroll (0, NORMAL, -1, 128 / xsize[0], 192 / ysize[0], tiles0); winitscroll (1, NORMAL, -1, 128 / xsize[1], 192 / ysize[1], tiles1); winitscroll (2, PARALLAX, 0, 128 / xsize[2], 192 / ysize[2], tiles2); winitscroll (3, PARALLAX, 1, 128 / xsize[3], 192 / ysize[3], tiles3); break; case 7: winitscroll (0, NORMAL, -1, 320 / xsize[2], 96 / ysize[2], tiles2); winitscroll (1, NORMAL, -1, 320 / xsize[1], 96 / ysize[1], tiles1); break; case 8: winitscroll (0, NORMAL, -1, 320 / xsize[2], 96 / ysize[2], tiles2); winitscroll (1, NORMAL, -1, 320 / xsize[1], 96 / ysize[1], tiles1); winitscroll (2, PARALLAX, 0, 320 / xsize[2], 96 / ysize[2], tiles2); winitscroll (3, PARALLAX, 1, 320 / xsize[3], 96 / ysize[3], tiles3); break; case 9: winitscroll (0, NORMAL, -1, 128 / xsize[2], 192 / ysize[2], tiles2); winitscroll (1, PARALLAX, 0, 128 / xsize[1], 192 / ysize[1], tiles1); winitscroll (2, PARALLAX, 0, 128 / xsize[3], 192 / ysize[3], tiles3); winitscroll (3, NORMAL, -1, 128 / xsize[3], 192 / ysize[3], tiles3); break; } } void close_files(void) { wfreemap (map0); wfreemap (map1); wfreemap (map2); wfreemap (map3); wendscroll (0); wendscroll (1); wendscroll (2); wendscroll (3); }