mem[(mt[1] * length) + mt[2]] = ord(c)
string = write_map(string, mem)
- stacksmap = bytearray(b'0' * (length ** 2)) # #
+ metamapA = bytearray(b'0' * (length ** 2)) # #
for id in [id for id in world_db["Things"] # #
if not world_db["Things"][id]["carried"] # #
+ if world_db["Things"][id]["T_LIFEPOINTS"] # #
if world_db["Things"][0]["fovmap"][ # #
world_db["Things"][id]["T_POSY"] * length # #
+ world_db["Things"][id]["T_POSX"]] == ord_v]: # #
pos = (world_db["Things"][id]["T_POSY"] * length # #
+ world_db["Things"][id]["T_POSX"]) # #
- if stacksmap[pos] < ord('2'): # #
- stacksmap[pos] += 1 # #
+ if id == 0 or world_db["EMPATHY"]: # #
+ type = world_db["Things"][id]["T_TYPE"] # #
+ max_hp = world_db["ThingTypes"][type]["TT_LIFEPOINTS"] # #
+ third_of_hp = max_hp / 3 # #
+ hp = world_db["Things"][id]["T_LIFEPOINTS"] # #
+ add = 0 # #
+ if hp > 2 * third_of_hp: # #
+ add = 2 # #
+ elif hp > third_of_hp: # #
+ add = 1 # #
+ metamapA[pos] = ord('a') + add # #
+ else: # #
+ metamapA[pos] = ord('X') # #
for mt in world_db["Things"][0]["T_MEMTHING"]: # #
pos = mt[1] * length + mt[2] # #
- if stacksmap[pos] < ord('2'): # #
- stacksmap[pos] += 1 # #
- string = write_map(string, stacksmap) # #
+ if metamapA[pos] < ord('2'): # #
+ metamapA[pos] += 1 # #
+ string = write_map(string, metamapA) # #
+ metamapB = bytearray(b' ' * (length ** 2)) # #
+ for id in [id for id in world_db["Things"] # #
+ if not world_db["Things"][id]["carried"] # #
+ if world_db["Things"][id]["T_LIFEPOINTS"] # #
+ if world_db["Things"][0]["fovmap"][ # #
+ world_db["Things"][id]["T_POSY"] * length # #
+ + world_db["Things"][id]["T_POSX"]] == ord_v]: # #
+ pos = (world_db["Things"][id]["T_POSY"] * length # #
+ + world_db["Things"][id]["T_POSX"]) # #
+ if id == 0 or world_db["EMPATHY"]: # #
+ action = world_db["Things"][id]["T_COMMAND"] # #
+ if 0 != action: # #
+ name = world_db["ThingActions"][action]["TA_NAME"] # #
+ else: # #
+ name = " " # #
+ metamapB[pos] = ord(name[0]) # #
+ string = write_map(string, metamapB) # #
+
atomic_write(io_db["path_worldstate"], string, delete=False)
strong_write(io_db["file_out"], "WORLD_UPDATED\n")
io_db["worldstate_updateable"] = False
def try_healing(t):
- """Grow t's HP to a 1/32 chance if < HP max, satiation > 0, and waiting.
-
- On success, decrease satiation score by 32.
- """
+ """If t's HP < max, increment them if well-nourished, maybe waiting."""
# 7DRL: Successful heals increment God's mood.
- if t["T_SATIATION"] > 0 \
- and t["T_LIFEPOINTS"] < \
- world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"] \
- and 0 == (rand.next() % 31) \
- and t["T_COMMAND"] == [id for id in world_db["ThingActions"]
- if world_db["ThingActions"][id]["TA_NAME"] ==
- "wait"][0]:
- t["T_LIFEPOINTS"] += 1
- world_db["GOD_MOOD"] += 1 # #
- t["T_SATIATION"] -= 32
- if t == world_db["Things"][0]:
- strong_write(io_db["file_out"], "LOG You heal.\n")
+ if t["T_LIFEPOINTS"] < \
+ world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]:
+ wait_id = [id for id in world_db["ThingActions"]
+ if world_db["ThingActions"][id]["TA_NAME"] == "wait"][0]
+ wait_divider = 8 if t["T_COMMAND"] == wait_id else 1
+ testval = int(abs(t["T_SATIATION"]) / wait_divider)
+ if (testval <= 1 or 1 == (rand.next() % testval)):
+ t["T_LIFEPOINTS"] += 1
+ if t != world_db["Things"][0]: # #
+ world_db["GOD_MOOD"] += 1 # #
+ if t == world_db["Things"][0]:
+ strong_write(io_db["file_out"], "LOG You heal.\n")
def hunger(t):
"""Decrement t's satiation,dependent on it trigger lifepoint dec chance."""
if t["T_SATIATION"] > -32768:
- t["T_SATIATION"] -= 1
- testbase = t["T_SATIATION"] if t["T_SATIATION"] >= 0 else -t["T_SATIATION"]
- if not world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]:
- raise RuntimeError("A thing that should not hunger is hungering.")
- stomach = int(32767 / world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"])
- if int(int(testbase / stomach) / ((rand.next() % stomach) + 1)):
+ max_hp = world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]
+ t["T_SATIATION"] -= int(math.sqrt(max_hp))
+ if 0 != t["T_SATIATION"] and 0 == int(rand.next() / abs(t["T_SATIATION"])):
if t == world_db["Things"][0]:
- strong_write(io_db["file_out"], "LOG You suffer from hunger.\n")
+ if t["T_SATIATION"] < 0:
+ strong_write(io_db["file_out"], "LOG You suffer from hunger.\n")
+ else:
+ strong_write(io_db["file_out"],
+ "LOG You suffer from over-eating.\n")
decrement_lifepoints(t)
"PLANT_1": (1, False, specialtypesetter("PLANT_1")), # #
"LUMBER": (1, False, specialtypesetter("LUMBER")), # #
"TOOL_0": (1, False, specialtypesetter("TOOL_0")), # #
+ "EMPATHY": (1, False, setter(None, "EMPATHY", 0, 1)), # #
"TA_ID": (1, False, command_taid),
"TA_EFFORT": (1, False, setter("ThingAction", "TA_EFFORT", 0, 255)),
"TA_NAME": (1, False, command_taname),
"PLANT_1": 0, # #
"LUMBER": 0, # #
"TOOL_0": 0, # #
+ "EMPATHY": 1, # #
"ThingActions": {},
"ThingTypes": {},
"Things": {}