--- /dev/null
+#define INITW_C\r
+\r
+#include <stdlib.h>\r
+#include <time.h>\r
+#include "roads.h"\r
+#include "tiles.h"\r
+\r
+extern int view_x, view_y; /* VIEW AREA (UPPER LEFT CORNER) */\r
+extern int viewpage; /* CURRENTLY VIEWED PAGE */\r
+extern int startup_vmode; /* VIDEO MODE STARTUP SETTINGS, -1 IF NOT INIT */\r
+\r
+int far *topography; /* BACKGROUND TILE LIST (ARRAY) */\r
+int far *terrain; /* FOREGROUND TILE LIST (ARRAY) */\r
+int world_type=75; /* TENDENCY TO GRASS */\r
+int edgemode=1; /* BLOCKY GRASS/DIRT OR EDGED? */\r
+extern int frogmode;\r
+\r
+/*\r
+ *\r
+ * Loads the world foreground tile list with roads.\r
+ *\r
+ */\r
+void init_foreground(void)\r
+{\r
+ register int x, tile, fails;\r
+\r
+ /* INITIALIZE FOREGROUND */\r
+ for (x=0; x<WORLD_TILES_TOTAL; x++)\r
+ terrain[x]=EMPTY_TILE; /* FILL WITH EMPTY TILES */\r
+\r
+ create_roads (); /* LAY DOWN SOME ROADS */\r
+\r
+ /* ADD RANDOM TERRAIN */\r
+ for (x=0; x<random(MAX_TERRAIN-MIN_TERRAIN)+MIN_TERRAIN; x++)\r
+ {\r
+ fails=0;\r
+\r
+ /* ATTEMPT TO PLACE TERRAIN -- QUIT ON EXCESSIVE FAILURE */\r
+ do {\r
+ tile=random(WORLD_TILES_TOTAL);\r
+ fails++;\r
+ } while (terrain[tile]!=EMPTY_TILE && fails<MAX_FAILS);\r
+\r
+ if (fails<MAX_FAILS)\r
+ {\r
+ switch (random(12)+1)\r
+ {\r
+ case 1: terrain[tile]=OBJ_SIGN; break;\r
+ case 2: terrain[tile]=OBJ_FIRST_GEM+random(OBJ_TOTAL_GEM); break;\r
+ case 3: terrain[tile]=ANM_URANIUM; break;\r
+ case 4:\r
+ case 5: terrain[tile]=ANM_FIRE; break;\r
+ case 6: if (random(100)<50) terrain[tile]=ANM_WATER1;\r
+ else terrain[tile]=ANM_WATER2; break;\r
+ case 7: terrain[tile]=OBJ_ROCK1; break;\r
+ case 8: terrain[tile]=OBJ_ROCK2; break;\r
+ case 9: terrain[tile]=OBJ_ROCK3; break;\r
+ case 10:\r
+ case 11:\r
+ case 12: terrain[tile]=OBJ_BUSHES; break;\r
+ }\r
+ }\r
+\r
+ else break;\r
+ }\r
+\r
+ frogmode=3;\r
+}\r
+\r
+/*\r
+ *\r
+ * Loads the world background tile list with grassy tiles.\r
+ *\r
+ */\r
+void init_background(void)\r
+{\r
+ register int x, y, landtype_left, landtype_up, landtype_here;\r
+\r
+ /* INITIALIZE BACKGROUND BY RANDOMLY PICKING TILES */\r
+\r
+ /* DO FIRST TILE */\r
+ topography[0]=random(NUM_LAND_TILES)+FIRST_LAND_TILE;\r
+\r
+ /* DO FIRST ROW */\r
+ for (x=1; x<WORLD_WIDTH; x++)\r
+ {\r
+ landtype_left=isdirt(topography[x-1]);\r
+ landtype_here=landtype_left;\r
+ if (random(100)>=CHANCE_LAND_GROUPING) /* NO GROUPING */\r
+ {\r
+ if (random(100)>=world_type) landtype_here=1;\r
+ else landtype_here=0;\r
+ }\r
+\r
+ if (landtype_here==0) topography[x]=\r
+ random (NUM_GRASS_TILES)+FIRST_GRASS_TILE; /* GRASS */\r
+ else topography[x]=\r
+ random (NUM_DIRT_TILES)+FIRST_DIRT_TILE; /* DIRT */\r
+ }\r
+\r
+ /* DO FIRST COLUMN */\r
+ for (y=1; y<WORLD_HEIGHT; y++)\r
+ {\r
+ landtype_up=isdirt(topography[WORLD_TILE(0,y-1)]);\r
+ landtype_here=landtype_up;\r
+ if (random(100)>=CHANCE_LAND_GROUPING) /* NO GROUPING */\r
+ {\r
+ if (random(100)>=world_type) landtype_here=1;\r
+ else landtype_here=0;\r
+ }\r
+\r
+ if (landtype_here==0) topography[WORLD_TILE(0,y)]=\r
+ random (NUM_GRASS_TILES)+FIRST_GRASS_TILE; /* GRASS */\r
+ else topography[WORLD_TILE(0,y)]=\r
+ random (NUM_DIRT_TILES)+FIRST_DIRT_TILE; /* DIRT */\r
+ }\r
+\r
+ /* DO SUBSEQUENT ROWS */\r
+ for (y=1; y<WORLD_HEIGHT; y++)\r
+ for (x=1; x<WORLD_WIDTH; x++)\r
+ {\r
+ landtype_left=isdirt(topography[WORLD_TILE(x-1,y)]);\r
+ landtype_up=isdirt(topography[WORLD_TILE(x,y-1)]);\r
+ landtype_here=landtype_left;\r
+\r
+ if (random(100)>=CHANCE_LAND_GROUPING) /* UNGROUP */\r
+ {\r
+ if (random(100)>=world_type) landtype_here=1;\r
+ else landtype_here=0;\r
+ }\r
+ else if (random(2)) landtype_here=landtype_up;\r
+\r
+ if (landtype_here==0) topography[WORLD_TILE(x,y)]=\r
+ random (NUM_GRASS_TILES)+FIRST_GRASS_TILE; /* GRASS */\r
+ else topography[WORLD_TILE(x,y)]=\r
+ random (NUM_DIRT_TILES)+FIRST_DIRT_TILE; /* DIRT */\r
+ }\r
+\r
+ if (edgemode) add_dirt_edges ();\r
+}\r
+\r
+/*\r
+ *\r
+ * Initializes background and foreground tile lists.\r
+ *\r
+ */\r
+void init_world(void)\r
+{\r
+ init_background();\r
+ init_foreground();\r
+ view_x=random(WORLD_WIDTH-VIEW_WIDTH);\r
+ view_y=random(WORLD_HEIGHT-VIEW_HEIGHT);\r
+}\r