home · contact · privacy
Server: Remove .stomach thing type attribute, derive from .lifepoints.
authorChristian Heller <c.heller@plomlompom.de>
Sun, 8 Feb 2015 15:49:49 +0000 (16:49 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 8 Feb 2015 15:49:49 +0000 (16:49 +0100)
SERVER_COMMANDS
confserver/world
src/server/god_commands.c
src/server/hardcoded_strings.c
src/server/hardcoded_strings.h
src/server/io.c
src/server/thing_actions.c
src/server/thing_actions.h
src/server/things.h

index ef52922e6b9e8f042ca18fbcf43d7847db52a9fa..3036c0478471262732bcc93a1ddfbc4fc46f665e 100644 (file)
@@ -200,7 +200,14 @@ MAKE_WORLD command to argument.
 
 TT_LIFEPOINTS [0-255]
 Set selected thing type's initial lifepoints value to argument. Things of 0
-lifepoints are considered inanimate, otherwise animate.
+lifepoints are considered inanimate, otherwise animate. This value also sets the
+degree to which the selected type's things suffer from under- or over-satiation:
+If 0, not at all. Else, it defines a stomach size value of 32767 divided by it.
+Each turn a thing of the given tpe may then suffer a lifepoint decrement to the
+change of the rounded down quotient of its satiation score's absolute value by
+its stomach size value, then again divided by the latter. (This means that the
+change is always zero when the absolute value of the satiation score is lower
+than the stomach size value.)
 
 TT_SYMBOL [char]
 Set to argument symbol by which things of the selected type are represented on
@@ -219,11 +226,3 @@ If non-zero, there is a chance of 1 divided by the given value each turn for any
 thing of the selected type to emit an offspring to a random neighbor cell if one
 is available that is passable and not inhabited by a thing of the same same type
 or, if the proliferating thing is animate, any other animate thing.
-
-TT_STOMACH [0-32767]
-Set degree to which things of the selected type suffer from hunger or
-over-satiation: If 0, not at all. Else, each turn a thing of the given type may
-suffer a lifepoint decrement to the chance of the rounded down quotient of the
-satiation score's absolute value by the given value, then again divided by the
-latter. This means that the chance is always zero when the absolute value of the
-satiation score is lower than the given value.
index e8cb6a460c1dce038b5e0debd5fe4c9b5c004ed7..a0ff5e196c2781e35d499e526766afeb3f43a8a6 100644 (file)
@@ -23,35 +23,31 @@ TA_NAME use
 
 TT_ID 0
 TT_START_NUMBER 1
-TT_LIFEPOINTS 5
+TT_LIFEPOINTS 30
 TT_SYMBOL @
 TT_NAME HUMAN
 TT_CONSUMABLE 0
-TT_STOMACH 2048
 
 TT_ID 1
 TT_START_NUMBER 27
-TT_LIFEPOINTS 1
+TT_LIFEPOINTS 6
 TT_SYMBOL a
 TT_NAME ANT
 TT_CONSUMABLE 0
-TT_STOMACH 4096
 
 TT_ID 2
 TT_START_NUMBER 9
-TT_LIFEPOINTS 3
+TT_LIFEPOINTS 18
 TT_SYMBOL z
 TT_NAME ZOMBIE
 TT_CONSUMABLE 0
-TT_STOMACH 1024
 
 TT_ID 3
 TT_START_NUMBER 3
-TT_LIFEPOINTS 9
+TT_LIFEPOINTS 54
 TT_SYMBOL S
 TT_NAME SHOGGOTH
 TT_CONSUMABLE 0
-TT_STOMACH 512
 
 TT_ID 4
 TT_START_NUMBER 9
index f03dcf1caa07233350d649503a763a5b933f6e54..d91cea32d01e848d711401f2ff068ac5f1ae7d4b 100644 (file)
@@ -100,7 +100,6 @@ static uint8_t parse_thingtype_manipulation(char * tok0, char * tok1)
         || parse_val(tok0,tok1,s[S_CMD_TT_STARTN],'8',(char *) &tt->start_n)
         || parse_val(tok0,tok1,s[S_CMD_TT_SYMB],'c',(char *) &tt->char_on_map)
         || parse_val(tok0,tok1,s[S_CMD_TT_PROL],'8',(char *) &tt->proliferate)
-        || parse_val(tok0,tok1,s[S_CMD_TT_STOMACH], 'u', (char *) &tt->stomach)
         || parse_val(tok0,tok1,s[S_CMD_TT_NAME],'s',(char *) &tt->name))
     {
         ;
index fcb201110aa3d450b4a9ad43464342c76ef60cea..dfb30e1e549d7ad6ed3901d3fcd1e5d22a45cdec 100644 (file)
@@ -9,7 +9,7 @@
 
 
 
-char * s[45];
+char * s[44];
 
 
 
@@ -33,7 +33,6 @@ extern void init_strings()
     s[S_CMD_TT_NAME] = "TT_NAME";
     s[S_CMD_TT_CORPS] = "TT_CORPSE_ID";
     s[S_CMD_TT_PROL] = "TT_PROLIFERATE";
-    s[S_CMD_TT_STOMACH] = "TT_STOMACH";
     s[S_CMD_T_ID] = "T_ID";
     s[S_CMD_T_TYPE] = "T_TYPE";
     s[S_CMD_T_POSY] = "T_POSY";
index c9f720b4d736d0165d002ff076e777075b87b20a..4725bc2cf24ef97556a713e3acf3ac47a5cddbe4 100644 (file)
@@ -32,7 +32,6 @@ enum string_num
     S_CMD_TT_NAME,
     S_CMD_TT_CORPS,
     S_CMD_TT_PROL,
-    S_CMD_TT_STOMACH,
     S_CMD_T_ID,
     S_CMD_T_TYPE,
     S_CMD_T_POSY,
@@ -63,7 +62,7 @@ enum string_num
 
 extern void init_strings();
 
-extern char * s[45];
+extern char * s[44];
 
 
 
index 9e55b0114d436b6b5f096af6a27d9638cf83785d..b3b6f8a0d8a42e9fb71284ee265b203e7915d20e 100644 (file)
@@ -417,7 +417,6 @@ extern void save_world()
         write_key_space_string(file, s[S_CMD_TT_NAME], tt->name);
         write_key_space_uvalue(file, s[S_CMD_TT_CONSUM], tt->consumable);
         write_key_space_uvalue(file, s[S_CMD_TT_PROL], tt->proliferate);
-        write_key_space_uvalue(file, s[S_CMD_TT_STOMACH], tt->stomach);
         try_fputc('\n', file, __func__);
     }
     for (tt = world.thing_types; tt; tt = tt->next)
index a5c78ba55027a10cb094bfaffebe43ffc8356a47..dea23323bcf6b7a9f2b43974b5af180720d55faa 100644 (file)
@@ -7,11 +7,11 @@
 
 #include "thing_actions.h"
 #include <stddef.h> /* NULL */
-#include <stdint.h> /* uint8_t, INT16_MIN */
+#include <stdint.h> /* uint8_t, INT16_MIN, INT16_MAX */
 #include <stdio.h> /* sprintf() */
 #include <stdlib.h> /* free() */
 #include <string.h> /* strlen() */
-#include "../common/rexit.h" /* exit_trouble() */
+#include "../common/rexit.h" /* exit_err(), exit_trouble() */
 #include "../common/try_malloc.h" /* try_malloc() */
 #include "../common/yx_uint8.h" /* yx_uint8 */
 #include "field_of_view.h" /* build_fov_map() */
@@ -332,17 +332,14 @@ extern void actor_use(struct Thing * t)
 
 extern void hunger(struct Thing * t)
 {
-    struct ThingType * tt = get_thing_type(t->type);
-    if (!(tt->stomach))
-    {
-        return;
-    }
     if (t->satiation > INT16_MIN)
     {
         t->satiation--;
     }
+    struct ThingType * tt = get_thing_type(t->type);
     uint16_t testbase = t->satiation < 0 ? -(t->satiation) : t->satiation;
-    uint16_t endurance = tt->stomach;
+    exit_err(!(tt->lifepoints), "A thing that should not hunger is hungering.");
+    uint16_t endurance = INT16_MAX / tt->lifepoints;
     if ((testbase / endurance) / ((rrand() % endurance) + 1))
     {
         if (get_player() == t)
index 0f9b962401d63dffc1de74730505462419b67fa6..ebdd871f02724159368ab56f982b9560eeede0c7 100644 (file)
@@ -39,7 +39,7 @@ extern void actor_pick(struct Thing * t);
 extern void actor_use(struct Thing * t);
 
 /* Decrement "t"'s satiation and trigger a chance (dependent on over-/under-
- * satiation value) of lifepoint decrement, when its type's .stomach is >0.
+ * satiation value) of lifepoint decrement.
  */
 extern void hunger(struct Thing * t);
 
index 62ef90836257987f28603d9127670d7692e04ae4..33a07db1616b073e4253aebaa82de349ea9923ac 100644 (file)
@@ -47,7 +47,6 @@ struct ThingType
     uint8_t id;          /* thing type identifier / sets .type */
     char char_on_map;    /* thing symbol to appear on map */
     char * name;         /* string to describe thing in game log */
-    uint16_t stomach;    /* if >0, defines onset & chance of hunger suffering */
     uint16_t consumable; /* can be eaten if !0, for so much .satiation win */
     uint8_t corpse_id;   /* type to change thing into upon destruction */
     uint8_t lifepoints;  /* default start value for thing's .lifepoints */