home · contact · privacy
Player earns a score by killing enemies.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 27 Aug 2013 03:32:32 +0000 (05:32 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 27 Aug 2013 03:32:32 +0000 (05:32 +0200)
README
src/draw_wins.c
src/main.c
src/main.h
src/map_object_actions.c
src/misc.c

diff --git a/README b/README
index 0e556395732f792b55cf9ad2bcffffe78ed03a2b..09cff46122f22cc8afd142e2577075ddda7d4d3a 100644 (file)
--- a/README
+++ b/README
@@ -3,12 +3,18 @@ plomrogue
 
 plomlompom tries to build his own roguelike. Currently, it doesn't do
 much interesting, apart from managing some ncurses windows in a bizarre
-fashion. You can move around a player and meet a number of different
-enemies. They move randomly and will only accidentally hit you. You have
-5 hitpoints to lose before death; they have either 1, 3 or 9. The map
-get generated randomly, too. There is only one save file (named
-"savefile"), and it gets overwritten each new turn. To start over with
-a new world, delete it.
+fashion.
+
+You can move around a player and meet a number of different enemies.
+They move randomly and will only accidentally hit you. You have 5
+hitpoints to lose before death; they have either 1, 3 or 9. Your score
+grows by killing enemies, to the amount of hitpoints each killed enemy
+started with.
+
+The map get generated randomly, too.
+
+There is only one save file (named "savefile"), and it gets overwritten
+each new turn. To start over with a new world, delete it.
 
 Install/run
 -----------
index a72978cee1003393859ea7a3f4dc76936113e069..7747757b82d957de7ae54d2ab26126636210f3bf 100644 (file)
@@ -209,7 +209,8 @@ extern void draw_info_win(struct Win * win)
     struct World * world = (struct World *) win->data;
     char text[100];
     snprintf(text, 100,
-             "Turn: %d\nHitpoints: %d", world->turn, world->player->hitpoints);
+             "Turn: %d\nHitpoints: %d\nScore: %d",
+             world->turn, world->player->hitpoints, world->score);
     draw_with_linebreaks(win, text, 0);
 }
 
index 7caef902be0f9dad534f8d1c758f5af149d28a37..f8118674616aed8195a50e6502749b4ed107e11b 100644 (file)
@@ -106,6 +106,7 @@ int main(int argc, char *argv[])
         exit_err(0 == file, &world, err_o);
         if (   read_uint32_bigendian(file, &world.seed)
             || read_uint32_bigendian(file, &world.turn)
+            || read_uint16_bigendian(file, &world.score)
             || read_uint16_bigendian(file, &player.pos.y)
             || read_uint16_bigendian(file, &player.pos.x)
             || read_uint8(file, &player.hitpoints)
@@ -140,6 +141,7 @@ int main(int argc, char *argv[])
         else
         {
             world.seed = time(NULL);
+            world.score = 0;
 
             err_o        = "Trouble recording new seed (fopen() in main()) / "
                            "opening 'record_tmp' file for writing.";
@@ -192,7 +194,7 @@ int main(int argc, char *argv[])
     struct Win win_keys = init_win(&win_meta, "Keys",
                                    0, 29, &world, draw_keys_win);
     struct Win win_info = init_win(&win_meta, "Info",
-                                   2, 20, &world, draw_info_win);
+                                   3, 20, &world, draw_info_win);
     uint16_t height_logwin = win_meta.padframe.size.y
                              - (2 + win_info.frame.size.y);
     struct Win win_log = init_win(&win_meta, "Log",
index fc9bbc377dbec6f3f8cd41e76a4cee0d444006d2..5eec3901a9398610a61234749e62851d7da06e44 100644 (file)
@@ -26,6 +26,7 @@ struct World
     struct KeysWinData * keyswindata; /* Pointer to key edit window metadata. */
     uint32_t seed;                    /* Randomness seed. */
     uint32_t turn;                    /* Current game turn. */
+    uint16_t score;                   /* Player's score. */
     char * log;                       /* Pointer to the game log string. */
     struct Map * map;                 /* Pointer to the game map cells. */
     struct ItemDef * item_def;        /* Pointer to the item definitions. */
index 53253bca1f096cdcb9bd95642d759ddc533034fe..bc6e4730715f12cb9c5fdd9ec5bf06243fac7bea 100644 (file)
@@ -101,6 +101,8 @@ static void player_hits_monster(struct World * world, struct Monster * monster)
                 m_prev->map_obj.next = monster->map_obj.next;
             }
         }
+        uint8_t score = md->hitpoints_start;
+        world->score = world->score + score;
         free(monster);
     }
 }
index 8a782732a1621adbbd56f253b29b3a370a475cd8..8eda126ccdfcf2621ec950c3b99f5a857980ac70 100644 (file)
@@ -167,6 +167,7 @@ extern void save_game(struct World * world)
     exit_err(0 == file, world, err_open);
     if (   write_uint32_bigendian(world->seed, file)
         || write_uint32_bigendian(world->turn, file)
+        || write_uint16_bigendian(world->score, file)
         || write_uint16_bigendian(world->player->pos.y + 1, file)
         || write_uint16_bigendian(world->player->pos.x + 1, file)
         || write_uint8(world->player->hitpoints, file)