home · contact · privacy
Always load seed file if it exists. Don't provide a default one.
[plomrogue] / roguelike.c
index 1dfa627f015b9f25775f1df80774cd272389d429..cba46ad44675453f749cf51d4a5f6acad68405fe 100644 (file)
@@ -12,7 +12,7 @@
 
 uint16_t rrand(char use_seed, uint32_t new_seed) {
 // Pseudo-random number generator (LGC algorithm). Use instead of rand() to ensure portable predictability.
-  static uint32_t seed = 0;
+  static uint32_t seed;
   if (0 != use_seed)
     seed = new_seed;
   seed = ((seed * 1103515245) + 12345) % 2147483648;   // Values as recommended by POSIX.1-2001 (see rand(3)).
@@ -69,10 +69,9 @@ void growshrink_active_window (struct WinMeta * win_meta, char change) {
 
 struct Map init_map (uint32_t seed) {
 // Initialize map with some experimental start values.
-  rrand(1, seed);
   struct Map map;
-  map.width = 96;
-  map.height = 32;
+  map.width = 64;
+  map.height = 64;
   map.offset_x = 0;
   map.offset_y = 0;
   map.cells = malloc(map.width * map.height);
@@ -105,8 +104,8 @@ void next_turn (struct World * world) {
 // Increment turn and move enemy.
   world->turn++;
   char d = rrand(0, 0) % 5;
-  char ty = world->monster->y;
-  char tx = world->monster->x;
+  uint16_t ty = world->monster->y;
+  uint16_t tx = world->monster->x;
   if (1 == d)
     ty++;
   else if (2 == d)
@@ -146,8 +145,8 @@ void move_player (struct World * world, char d) {
   static char prev = 0;
   char success = 0;
   char * dir;
-  char ty = world->player->y;
-  char tx = world->player->x;
+  uint16_t ty = world->player->y;
+  uint16_t tx = world->player->x;
   if ('s' == d) {
     dir = "south";
     ty++; }
@@ -188,15 +187,12 @@ void player_wait (struct World * world) {
   update_log (world, "\nYou wait."); }
 
 int main (int argc, char *argv[]) {
-  uint32_t seed = time(NULL);
-  int opt;
-  while ((opt = getopt(argc, argv, "l")) != -1) {
-    switch (opt) {
-      case 'l':
-       seed = load_seed();
-        break;
-      default:
-        exit(EXIT_FAILURE); } }
+  uint32_t seed;
+  if (0 == access("seed", F_OK))
+    seed = load_seed();
+  else
+    seed = time(NULL);
+  rrand(1, seed);
 
   struct World world;
   init_keybindings(&world);
@@ -206,12 +202,12 @@ int main (int argc, char *argv[]) {
   struct Map map = init_map(seed);
   world.map = ↦
   struct Player player;
-  player.y = 16;
-  player.x = 16;
+  player.y = 8;
+  player.x = 8;
   world.player = &player;
   struct Monster monster;
-  monster.y = 16;
-  monster.x = 80;
+  monster.y = 55;
+  monster.x = 55;
   world.monster = &monster;
 
   WINDOW * screen = initscr();