+++ /dev/null
-#define ROADS_C\r
-\r
-#include <fastgraf.h>\r
-#include <stdlib.h>\r
-#include <stdio.h>\r
-#include <time.h> /* FOR RANDOM */\r
-#include "roads.h"\r
-#include "tiles.h" /* DUE TO R AND C CHEATS */\r
-#include "fx.h" /* FOR FADING STUFF */\r
-#include "version.h" /* INFO ON THIS VERSION */\r
-#include "keys.h" /* KEY AND SCANCODE DEFINITIONS */\r
-\r
-extern int far *topography; /* BACKGROUND TILE LIST (ARRAY) */\r
-extern int far *terrain; /* FOREGROUND TILE LIST (ARRAY) */\r
-extern int view_x, view_y; /* VIEW AREA (UPPER LEFT CORNER) */\r
-extern int viewpage; /* CURRENTLY VIEWED PAGE */\r
-extern int world_type; /* TENDENCY TO GRASS */\r
-\r
-extern int edgemode; /* BLOCKY GRASS/DIRT OR EDGED? */\r
-extern int animatemode;\r
-extern int frogmode;\r
-extern int frogwatchmode;\r
-\r
-int keyboardmode=0;\r
-\r
-/* PROTOTYPES FOR INTERNAL FUNCTIONS */\r
-void time_test (void);\r
-void cheat (int type);\r
-void toggle_mode (int type);\r
-void make_world (int type);\r
-void view_tile_page (void);\r
-void move_view (void);\r
-int keycheck (void);\r
-void init_all (void);\r
-void gogofrog (void);\r
-\r
-#pragma argsused\r
-void main (int argc, char *argv[])\r
-{\r
- char quitting_time=0; /* QUIT PROGRAM LOOP */\r
-\r
- printf (HEADER);\r
-\r
- if (argc>1)\r
- {\r
- printf (KEY_HELP);\r
- exit (2);\r
- }\r
-\r
- printf ("Loading ... [Escape quits] ... [Type ROADS /? for more keys!]\n");\r
- init_all(); /* INITIALIZE ALL SYSTEMS */\r
-\r
- while (!quitting_time) /* LOOP FOREVER */\r
- {\r
- quitting_time=keycheck(); /* CHECK FOR REGULAR KEYS */\r
- if (animatemode) animate(); /* PERFORM ALL ANIMATIONS */\r
- }\r
-\r
- program_shutdown("Thank you for running ROADS!", 0);\r
-}\r
-\r
-#define TIMETEST_LENGTH 10 /* TIME TEST LENGTH IN SECONDS */\r
-\r
-/*\r
- *\r
- * Performs time testing to try and guess a FPS.\r
- *\r
- */\r
-void time_test (void)\r
-{\r
- int x, dir;\r
- long end_time;\r
- int frames_shown[2];\r
-\r
- for (x=0; x<2; x++) /* TEST TWICE, ONCE WITH ANIMATION */\r
- {\r
- while (redraw(SCROLL_UL)); /* SCROLL UPPER LEFT TO START */\r
- fg_music ("L64FAC.AE.B$");\r
- frames_shown[x]=0; dir=0;\r
- end_time=TIMETEST_LENGTH*182/10;\r
- end_time+=fg_getclock();\r
-\r
- while (fg_getclock()<end_time)\r
- {\r
- frames_shown[x]++;\r
-\r
- switch (dir)\r
- {\r
- case 0: if (!redraw (SCROLL_DR )) dir++; break;\r
- case 1: if (!redraw (SCROLL_UP )) dir++; break;\r
- case 2: if (!redraw (SCROLL_DL )) dir++; break;\r
- case 3: if (!redraw (SCROLL_RIGHT)) dir++; break;\r
- case 4: if (!redraw (SCROLL_UL )) dir++; break;\r
- case 5: if (!redraw (SCROLL_DOWN )) dir++; break;\r
- case 6: if (!redraw (SCROLL_UR )) dir++; break;\r
- case 7: if (!redraw (SCROLL_LEFT )) dir=0; break;\r
- }\r
-\r
- if (x==0) animate(); /* ANIMATION ON FIRST TEST ONLY */\r
- }\r
- }\r
-\r
- program_shutdown ("",-1); /* DON'T EXIT YET */\r
- printf ("%d Frames in %i seconds (%i FPS) with animation\n",\r
- frames_shown[0], TIMETEST_LENGTH, frames_shown[0]/TIMETEST_LENGTH);\r
- printf ("%d Frames in %i seconds (%i FPS) without animation\n",\r
- frames_shown[1], TIMETEST_LENGTH, frames_shown[1]/TIMETEST_LENGTH);\r
- exit (0);\r
-}\r
-\r
-/*\r
- *\r
- * Turns on cheats (fills screen with anims for testing)\r
- *\r
- */\r
-void cheat (int type)\r
-{\r
- register int x;\r
-\r
- if (type==0)\r
- {\r
- fade_out_all();\r
- for (x=0; x<WORLD_TILES_TOTAL; x++)\r
- terrain[x]=ANM_FIRE;\r
- redraw(REFRESH);\r
- animatewhilefading=0;\r
- fade_in_all();\r
- animatewhilefading=1;\r
- }\r
-\r
- else if (type==1)\r
- {\r
- fade_out_all();\r
- for (x=0; x<WORLD_TILES_TOTAL; x++)\r
- if (!isroad(terrain[x])) terrain[x]=ANM_FIRE;\r
- redraw(REFRESH);\r
- animatewhilefading=0; /* DON'T ANIMATE IN FADES -- TOO MANY ANIMS! */\r
- fade_in_all();\r
- animatewhilefading=1;\r
- }\r
-}\r
-\r
-/*\r
- *\r
- * Toggles modes on and off (animation, edging, etc.)\r
- *\r
- */\r
-void toggle_mode (int type)\r
-{\r
- if (type==0)\r
- {\r
- animatemode=!animatemode;\r
- fg_music ("L64G.AG.A$");\r
- }\r
-\r
- else if (type==1)\r
- {\r
- edgemode=!edgemode;\r
- fg_music ("S1L20B..G..F..$");\r
- if (edgemode)\r
- {\r
- add_dirt_edges();\r
- redraw(REFRESH);\r
- }\r
- }\r
- else if (type==2)\r
- {\r
- keyboardmode=!keyboardmode;\r
- fg_music ("L40BABAGFG.$");\r
- }\r
- else if (type==3)\r
- {\r
- frogwatchmode=!frogwatchmode;\r
- fg_music ("O1L30D.ED.A$");\r
- }\r
-}\r
-\r
-/*\r
- *\r
- * Initializes the world, foreground and/or background.\r
- *\r
- */\r
-void make_world (int type)\r
-{\r
- if (type==0)\r
- {\r
- fade_out_all();\r
- init_world();\r
- redraw(REFRESH);\r
- fade_in_all();\r
- }\r
-\r
- else if (type==1)\r
- {\r
- init_background();\r
- redraw(REFRESH);\r
- }\r
-\r
- else if (type==2)\r
- {\r
- init_foreground();\r
- redraw(REFRESH);\r
- }\r
-}\r
-\r
-/*\r
- *\r
- * Shows the contents of the tile page. Hit any key to fade back.\r
- *\r
- */\r
-void view_tile_page (void)\r
-{\r
- char key1, key2;\r
-\r
- fade_out_all();\r
- fg_setvpage (TILEPAGE);\r
- fade_in_all();\r
-\r
- fg_kbinit(0);\r
-\r
- do {\r
- fg_intkey (&key1, &key2);\r
- animate();\r
- } while (!(key1+key2)); /* DO LOOP WHILE KEYS ARE NOT HIT */\r
-\r
- fg_kbinit(1);\r
-\r
- fade_out_all();\r
- fg_setvpage (viewpage);\r
- fade_in_all();\r
-}\r
-\r
-/*\r
- *\r
- * Scans for arrow keys and scrolls the view area in reaction to them.\r
- *\r
- */\r
-void move_view (void)\r
-{\r
- static char left=0, right=0, up=0, down=0; /* KEYBOARD VARS */\r
-\r
- /* CHECK FOR ARROWS BEING PRESSED */\r
- if (fg_kbtest(SCAN_RIGHT)) right++; else right=0;\r
- if (fg_kbtest(SCAN_LEFT)) left++; else left=0;\r
- if (fg_kbtest(SCAN_UP)) up++; else up=0;\r
- if (fg_kbtest(SCAN_DOWN)) down++; else down=0;\r
-\r
- /* MAKE SURE COUNTERS DON'T GO TOO HIGH */\r
- if (right>100) right=100;\r
- if (left>100) left=100;\r
- if (up>100) up=100;\r
- if (down>100) down=100;\r
-\r
- /* IF "TAP" KEYBOARD MODE IS ON, DON'T MOVE UNTIL KEYS RELEASED */\r
- if (keyboardmode && (right>1 || left>1 || up>1 || down>1)) return;\r
-\r
- /* MOVE, CHECKING FOR DIAGONAL MOVEMENT FIRST */\r
- if (up && right) redraw (SCROLL_UR);\r
- else if (down && left) redraw (SCROLL_DL);\r
- else if (up && left) redraw (SCROLL_UL);\r
- else if (down && right) redraw (SCROLL_DR);\r
- else if (right) redraw (SCROLL_RIGHT);\r
- else if (left) redraw (SCROLL_LEFT);\r
- else if (up) redraw (SCROLL_UP);\r
- else if (down) redraw (SCROLL_DOWN);\r
-}\r
-\r
-/*\r
- *\r
- * Initializes all systems and brings display up.\r
- *\r
- */\r
-void init_all (void)\r
-{\r
- fg_kbinit(1); /* LATCH LOW-LEVEL KEYBOARD HANDLER */\r
- randomize(); /* ALLOW RANDOMIZATIONS */\r
-\r
- init_anim(); /* CALL BEFORE WORLD CREATION */\r
- init_data(); /* CALL BEFORE WORLD CREATION */\r
- init_world(); /* RANDOMIZE THE WORLD */\r
- init_video(); /* SET OUR VIDEO MODE ETC. */\r
-\r
- fade_init(); /* ALLOW FADING */\r
- fade_blackout(); /* SET ALL COLORS TO BLACK */\r
- redraw(REFRESH); /* DRAW THE SCREEN (UNSEEN) */\r
- fade_in_all(); /* FADE IN SCREEN */\r
-}\r
-\r
-/*\r
- *\r
- * Keycheck checks all keys and reacts upon them.\r
- * Returns 1 if a key has indicated the user has requested to quit.\r
- *\r
- */\r
-int keycheck (void)\r
-{\r
- if (fg_kbtest(SCAN_T)) time_test();\r
- if (fg_kbtest(SCAN_C)) cheat (0);\r
- if (fg_kbtest(SCAN_R)) cheat (1);\r
- if (fg_kbtest(SCAN_A)) toggle_mode(0);\r
- if (fg_kbtest(SCAN_E)) toggle_mode(1);\r
- if (fg_kbtest(SCAN_K)) toggle_mode(2);\r
- if (fg_kbtest(SCAN_W)) toggle_mode(3);\r
- if (fg_kbtest(SCAN_F))\r
- {\r
- fg_music ("L50O4BAFDEF.$");\r
- switch (frogmode)\r
- {\r
- case 1: frogmode=2; break;\r
- case 3: frogmode=0; break;\r
- }\r
- }\r
- if (fg_kbtest(SCAN_G)) /* RERANDOMIZE GRASS/DIRT TENDENCY */\r
- {\r
- world_type=random(100);\r
- fg_music ("S1L20C..B..A..$");\r
- }\r
- if (fg_kbtest(SCAN_SPACE)) make_world (0);\r
- if (fg_kbtest(SCAN_B)) make_world (1);\r
- if (fg_kbtest(SCAN_ENTER)) make_world (2);\r
- if (fg_kbtest(SCAN_S)) view_tile_page();\r
-\r
- move_view(); /* RESPOND TO ARROW KEYS MOVING VIEW */\r
-\r
- if (fg_kbtest(SCAN_ESC) || fg_kbtest(SCAN_Q)) /* ESCAPE TO QUIT */\r
- return 1;\r
-\r
- return 0;\r
-}\r
-\r