]> 4ch.mooo.com Git - 16.git/blobdiff - 16/roads/INITW.C
compy4 sync
[16.git] / 16 / roads / INITW.C
diff --git a/16/roads/INITW.C b/16/roads/INITW.C
new file mode 100644 (file)
index 0000000..9501d47
--- /dev/null
@@ -0,0 +1,153 @@
+#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