home · contact · privacy
Server: Make objects definable as "consumable" to gain n hitpoints.
authorChristian Heller <c.heller@plomlompom.de>
Tue, 25 Mar 2014 15:25:43 +0000 (16:25 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Tue, 25 Mar 2014 15:25:43 +0000 (16:25 +0100)
This replaces the previous "MAGIC MEAT" hardcoding.

README
TODO
confserver/defs
src/server/map_object_actions.c
src/server/map_object_actions.h
src/server/map_objects.c
src/server/map_objects.h

diff --git a/README b/README
index 7963f621e5c7c1728d70283b73c80b2f13d2fd29..99edb653af9e0cb71e50715d0375fb426d6074bc 100644 (file)
--- a/README
+++ b/README
@@ -93,10 +93,9 @@ this object decomposes to when it gets destroyed/killed, the third value is the
 ASCII character used to represent the object visually on the map, the fourth
 value is the number of hitpoints the object starts with (items are dead and
 start with zero hitpoints, anything else moves), the fifth is the string that
-names the object in the game log. Finally, the same delimiter as for the map
-object action definitions file follows. Note that the only valid item use so
-far, consuming "magic meat" to gain hitpoints, is so far hard-coded (this should
-change in the future).
+names the object in the game log, the sixth defines if the object is consumable
+(it is if it is non-zero) and how many hitpoints are gained if it is. Finally,
+the same delimiter as for the map object action definitions file follows.
 
 All source files are thoroughly documented to explain more details of
 plomrogue's internals. The ./roguelike-server executable can be run with a -v
diff --git a/TODO b/TODO
index 7586040fd1a274d21c8729a2ce994097929e7364..bc87d095f830bac174b90b2aa901821fa86e8ace 100644 (file)
--- a/TODO
+++ b/TODO
@@ -22,6 +22,8 @@ SERVER:
 - for game continuation, replace re-playing of whole record files with loading
   game state snapshots / save files
 
+- rename confserver/defs to confserver/map_objects
+
 CLIENT:
 
 - enable toggling of window borders
index 3eb9791a641a0242c0df622cfa095efb444a66e0..2ca0d5c19afd5c7daa30b87352897345090ca1a8 100644 (file)
@@ -1,42 +1,49 @@
 0
 5
 @
-5
+105
 HUMAN
+0
 %%
 1
 4
 a
 1
 ANT
+0
 %%
 2
 5
 z
 3
 ZOMBIE
+0
 %%
 3
 6
 S
 9
 SHOGGOTH
+0
 %%
 4
 4
 #
 0
 DIRT
+0
 %%
 5
 4
 %
 0
 SKELETON
+0
 %%
 6
 4
 m
 0
 MAGIC MEAT
+5
 %%
index 694300dccef5116acfb2a1031d001c034490d7ff..9feab55d6d0732d7da6851d9742f158f2dae0725 100644 (file)
@@ -405,7 +405,7 @@ extern void actor_use(struct MapObj * mo)
         struct MapObj * selected = mo->owns;
         for (; i != select; i++, selected = selected->next);
         struct MapObjDef * mod = get_map_object_def(selected->type);
-        if (!strcmp("MAGIC MEAT", mod->name))
+        if (mod->consumable)
         {
             wrong_object = 0;
             struct MapObj * next = selected->next;
@@ -421,7 +421,7 @@ extern void actor_use(struct MapObj * mo)
             {
                 mo->owns = next;
             }
-            mo->lifepoints++;
+            mo->lifepoints = mo->lifepoints + mod->consumable;
         }
     }
     if (mo == get_player())
index eec0087672a0eb90136b26bb78bd951677de4925..40535a510ad756e410a07a90d647370c9bc75ccd 100644 (file)
@@ -50,8 +50,7 @@ extern void actor_drop(struct MapObj * mo);
 extern void actor_pick(struct MapObj * mo);
 
 /* Actor "mo" tries to use inventory object indexed by number mo->args.
- * (Currently the only valid use is consuming an item named "MAGIC MEAT",
- * which increments the actors lifepoints.)
+ * (Currently the only valid use is consuming items defined as consumable.)
  */
 extern void actor_use(struct MapObj * mo);
 
index 97fbc323c736fa84e1070fefddb0570e12e1815d..f60cefeb3092b7df42c3b5c8c7a3ea7c78330a4c 100644 (file)
@@ -142,6 +142,9 @@ extern void init_map_object_defs()
         line[strlen(line) - 1] = '\0';
         mod->name = try_malloc(strlen(line) + 1, f_name);
         memcpy(mod->name, line, strlen(line) + 1);
+        err_try_fgets(line, linemax, file, context, "0nfi");
+        err_line(atoi(line) > UINT8_MAX, line, context, err_toolarge);
+        mod->consumable = atoi(line);
         * last_mod_ptr_ptr = mod;
         last_mod_ptr_ptr = &mod->next;
         err_try_fgets(line, linemax, file, context, "d");
index a73aa801bdd2e0777d007d2383164c2bfd23ef84..f30b016468f3dcc9d66a5d1775d58ae54b77cf2d 100644 (file)
@@ -33,6 +33,7 @@ struct MapObjDef
     uint8_t id;         /* map object definition identifier / sets .type */
     uint8_t corpse_id;  /* type to change map object into upon destruction */
     uint8_t lifepoints; /* default start value for map object's .lifepoints */
+    uint8_t consumable; /* can be eaten if !0, for so much hitpoint win */
 };