#define ROADS_H /* GENERIC TILING DEFINITIONS */ #define WORLD_WIDTH 105 /* IN TILES, WIDTH OF "PLAYFIELD" */ #define WORLD_HEIGHT 100 /* IN TILES, HEIGHT OF "PLAYFIELD" */ #define WORLD_TILES_TOTAL 10500 /* (WORLD_WIDTH*WORLD_HEIGHT) */ #define TILE_WIDTH 16 /* IN PIXELS, WIDTH OF TILE */ #define TILE_HEIGHT 16 /* IN PIXELS, HEIGHT OF TILE */ #define VIEW_WIDTH 20 /* (SCREEN_WIDTH/TILE_WIDTH) */ #define VIEW_HEIGHT 15 /* (SCREEN_HEIGHT/TILE_HEIGHT) */ #define VIEW_TILES_TOTAL 300 /* (VIEW_WIDTH*VIEW_HEIGHT) */ #define MIXING_TILE 299 /* (VIEW_TILES_TOTAL-1) */ #define EMPTY_TILE -1 /* STANDARD INDEX FOR A SEE-THROUGH TILE */ #define ERROR_TILE -2 /* STANDARD INDEX FOR ERRORS! */ /* PROTOTYPES */ void create_roads (void); int roadexit (int road, int direction); int makeintersection (int road, int ramp); void init_foreground (void); void init_background (void); void add_dirt_edges (void); void init_world(void); int redraw (int draw_type); void init_video (void); void init_data (void); void program_shutdown (char *msg, int errcode); void place_tile_block (int x1, int y1, int x2, int y2); void init_anim (void); void animate (void); void update_tile (int tile); void gogofrog (void); /* VIDEO MODE DEFINITIONS */ #define VMODE 22 #define VPAGES 3 #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 #define IMAGES "roads.gif" /* IMAGE CONTAINING TILES */ /* VIDEO PAGE DEFINITIONS */ #define VIEWPAGE1 0 #define VIEWPAGE2 1 #define TILEPAGE 2 /* STANDARD DEFINITIONS */ #define FALSE 0 #define TRUE 1 /* CHECKS IF A TILE IS A ROAD OR NOT */ #define isroad(r) (r>=FIRST_ROAD_TILE && r<=LAST_ROAD_TILE) #define REFRESH 0 #define SCROLL_UP 1 #define SCROLL_DOWN 2 #define SCROLL_LEFT 3 #define SCROLL_RIGHT 4 #define SCROLL_UR 5 #define SCROLL_DR 6 #define SCROLL_DL 7 #define SCROLL_UL 8 #define NONFLIP_SCROLL_UP 11 #define NONFLIP_SCROLL_DOWN 12 #define NONFLIP_SCROLL_LEFT 13 #define NONFLIP_SCROLL_RIGHT 14 #define NONFLIP_REFRESH 15 #define MAX_FAILS 50 /* MAXIMUM NUMBER OF ATTEMPTS TO PLACE TILES */ /* * * MACROS TO CONVERT TILES FROM "ROW/COLUMN" FORMAT TO "INDEX" FORMAT * */ /* WORLD SPACE CONVERSIONS */ #define WORLD_TILE(x,y) ((x)+(y)*WORLD_WIDTH) /* CONVERTS DUAL X,Y TO SINGLE */ #define WORLD_TILE_X(z) ((z)%WORLD_WIDTH) /* CONVERTS SINGLE TO DUAL X */ #define WORLD_TILE_Y(z) ((z)/WORLD_WIDTH) /* CONVERTS SINGLE TO DUAL Y */ /* VIEW SPACE CONVERSIONS */ #define VIEW_TILE(x,y) ((x)+(y)*VIEW_WIDTH) /* CONVERTS DUAL X,Y TO SINGLE */ #define VIEW_TILE_X(z) ((z)%VIEW_WIDTH) /* CONVERTS SINGLE TO DUAL X */ #define VIEW_TILE_Y(z) ((z)/VIEW_WIDTH) /* CONVERTS SINGLE TO DUAL Y */ /* RETURNS 1 IF A SINGLE WORLD TILE INDEX IS WITHIN THE VIEWING SCREEN */ #define is_viewable(x) (WORLD_TILE_X(x)>=view_x && \ WORLD_TILE_X(x)=view_y && \ WORLD_TILE_Y(x)