+++ /dev/null
-#define ROADS_H\r
-\r
-/* GENERIC TILING DEFINITIONS */\r
-\r
-#define WORLD_WIDTH 105 /* IN TILES, WIDTH OF "PLAYFIELD" */\r
-#define WORLD_HEIGHT 100 /* IN TILES, HEIGHT OF "PLAYFIELD" */\r
-#define WORLD_TILES_TOTAL 10500 /* (WORLD_WIDTH*WORLD_HEIGHT) */\r
-\r
-#define TILE_WIDTH 16 /* IN PIXELS, WIDTH OF TILE */\r
-#define TILE_HEIGHT 16 /* IN PIXELS, HEIGHT OF TILE */\r
-#define VIEW_WIDTH 20 /* (SCREEN_WIDTH/TILE_WIDTH) */\r
-#define VIEW_HEIGHT 15 /* (SCREEN_HEIGHT/TILE_HEIGHT) */\r
-#define VIEW_TILES_TOTAL 300 /* (VIEW_WIDTH*VIEW_HEIGHT) */\r
-#define MIXING_TILE 299 /* (VIEW_TILES_TOTAL-1) */\r
-#define EMPTY_TILE -1 /* STANDARD INDEX FOR A SEE-THROUGH TILE */\r
-#define ERROR_TILE -2 /* STANDARD INDEX FOR ERRORS! */\r
-\r
-/* PROTOTYPES */\r
-\r
-void create_roads (void);\r
-int roadexit (int road, int direction);\r
-int makeintersection (int road, int ramp);\r
-void init_foreground (void);\r
-void init_background (void);\r
-void add_dirt_edges (void);\r
-void init_world(void);\r
-int redraw (int draw_type);\r
-void init_video (void);\r
-void init_data (void);\r
-void program_shutdown (char *msg, int errcode);\r
-void place_tile_block (int x1, int y1, int x2, int y2);\r
-void init_anim (void);\r
-void animate (void);\r
-void update_tile (int tile);\r
-void gogofrog (void);\r
-\r
-/* VIDEO MODE DEFINITIONS */\r
-#define VMODE 22\r
-#define VPAGES 3\r
-#define SCREEN_WIDTH 320\r
-#define SCREEN_HEIGHT 240\r
-#define IMAGES "roads.gif" /* IMAGE CONTAINING TILES */\r
-\r
-/* VIDEO PAGE DEFINITIONS */\r
-#define VIEWPAGE1 0\r
-#define VIEWPAGE2 1\r
-#define TILEPAGE 2\r
-\r
-/* STANDARD DEFINITIONS */\r
-#define FALSE 0\r
-#define TRUE 1\r
-\r
-/* CHECKS IF A TILE IS A ROAD OR NOT */\r
-#define isroad(r) (r>=FIRST_ROAD_TILE && r<=LAST_ROAD_TILE)\r
-\r
-#define REFRESH 0\r
-#define SCROLL_UP 1\r
-#define SCROLL_DOWN 2\r
-#define SCROLL_LEFT 3\r
-#define SCROLL_RIGHT 4\r
-#define SCROLL_UR 5\r
-#define SCROLL_DR 6\r
-#define SCROLL_DL 7\r
-#define SCROLL_UL 8\r
-#define NONFLIP_SCROLL_UP 11\r
-#define NONFLIP_SCROLL_DOWN 12\r
-#define NONFLIP_SCROLL_LEFT 13\r
-#define NONFLIP_SCROLL_RIGHT 14\r
-#define NONFLIP_REFRESH 15\r
-\r
-#define MAX_FAILS 50 /* MAXIMUM NUMBER OF ATTEMPTS TO PLACE TILES */\r
-\r
-/*\r
- *\r
- * MACROS TO CONVERT TILES FROM "ROW/COLUMN" FORMAT TO "INDEX" FORMAT\r
- *\r
- */\r
-\r
- /* WORLD SPACE CONVERSIONS */\r
-#define WORLD_TILE(x,y) ((x)+(y)*WORLD_WIDTH) /* CONVERTS DUAL X,Y TO SINGLE */\r
-#define WORLD_TILE_X(z) ((z)%WORLD_WIDTH) /* CONVERTS SINGLE TO DUAL X */\r
-#define WORLD_TILE_Y(z) ((z)/WORLD_WIDTH) /* CONVERTS SINGLE TO DUAL Y */\r
-\r
- /* VIEW SPACE CONVERSIONS */\r
-#define VIEW_TILE(x,y) ((x)+(y)*VIEW_WIDTH) /* CONVERTS DUAL X,Y TO SINGLE */\r
-#define VIEW_TILE_X(z) ((z)%VIEW_WIDTH) /* CONVERTS SINGLE TO DUAL X */\r
-#define VIEW_TILE_Y(z) ((z)/VIEW_WIDTH) /* CONVERTS SINGLE TO DUAL Y */\r
-\r
-/* RETURNS 1 IF A SINGLE WORLD TILE INDEX IS WITHIN THE VIEWING SCREEN */\r
-#define is_viewable(x) (WORLD_TILE_X(x)>=view_x && \\r
- WORLD_TILE_X(x)<view_x+VIEW_WIDTH && \\r
- WORLD_TILE_Y(x)>=view_y && \\r
- WORLD_TILE_Y(x)<view_y+VIEW_HEIGHT) \\r
-\r
-/* CONVERTS A WORLD INDEX INTO A VIEW INDEX -- USE IS_VIEWABLE TO MAKE */\r
-/* SURE THE WORLD INDEX IS WITHIN THE VIEWING AREA! */\r
-#define WORLD_TO_VIEW(x) VIEW_TILE(WORLD_TILE_X((x))-view_x,WORLD_TILE_Y((x))-view_y)\r
-\r
-#define DONS_VIEW_TO_WORLD(x) (WORLD_TILE (view_x, view_y) + (VIEW_TILE_Y (x) * WORLD_WIDTH) + VIEW_TILE_X (x) /* CONVERT VIEW SINGLE TO WORLD SINGLE */\r
-#define VIEW_TO_WORLD(x) (WORLD_TILE (VIEW_TILE_X (x) + view_x, VIEW_TILE_Y (x) + view_y)) /* CONVERT VIEW SINGLE TO WORLD SINGLE */\r
-\r
-/*\r
- *\r
- * MACROS TO EASE COPYING OF TILES BETWEEN AND AMONG PAGES\r
- *\r
- */\r
-\r
- /* INTENRAL MACRO USED IN COPY TILE MACROS -- USER, DO NOT CALL! */\r
-#define COPY_TILE_CORE(from,to,spage,dpage) \\r
- ((from)%VIEW_WIDTH)*TILE_WIDTH, \\r
- (((from)%VIEW_WIDTH)+1)*TILE_WIDTH-1, \\r
- ((from)/VIEW_WIDTH)*TILE_HEIGHT, \\r
- (((from)/VIEW_WIDTH)+1)*TILE_WIDTH-1, \\r
- ((to)%VIEW_WIDTH)*TILE_WIDTH, \\r
- (((to)/VIEW_WIDTH)+1)*TILE_HEIGHT-1, \\r
- spage, dpage\r
-\r
- /* TRANSPARENT TILE COPY FROM HIDDEN PAGE TO ACTIVE PAGE */\r
-#define copy_tile_tr(from_tile,to_tile) \\r
- fg_tcxfer (COPY_TILE_CORE(from_tile,to_tile,TILEPAGE,VIEWPAGE))\r
-\r
- /* OPAQUE TILE COPY FROM HIDDEN PAGE TO ACTIVE PAGE */\r
-#define copy_tile_op(from_tile,to_tile) \\r
- fg_transfer (COPY_TILE_CORE(from_tile,to_tile,TILEPAGE,VIEWPAGE))\r
-\r
- /* TRANSPARENT TILE COPY */\r
-#define pagecopy_tile_tr(from_tile,to_tile,sourcepage,destpage) \\r
- fg_tcxfer (COPY_TILE_CORE(from_tile,to_tile,sourcepage,destpage))\r
-\r
- /* OPAQUE TILE COPY FROM */\r
-#define pagecopy_tile_op(from_tile,to_tile,sourcepage,destpage) \\r
- fg_transfer (COPY_TILE_CORE(from_tile,to_tile,sourcepage,destpage))\r
-\r
-struct ANIMATION\r
-{\r
- int anm; /* NUMBER USED TO ENCODE ANIMATION IN WORLD */\r
- int total; /* TOTAL NUMBER OF TILES USED IN ANIMATION */\r
- int first; /* FIRST TILE NO. IN ANIMATION */\r
- int current; /* TILE CURRENTLY BEING SHOWN IN ANIMATION */\r
- int delay; /* DELAY BETWEEN TILES IN CLOCK TICKS */\r
- long next; /* TIME OF NEXT UPDATE */\r
-};\r
-\r