str(world_db["Things"][0]["T_POSX"]) + "\n" + \
str(world_db["MAP_LENGTH"]) + "\n"
length = world_db["MAP_LENGTH"]
+
fov = bytearray(b' ' * (length ** 2))
ord_v = ord("v")
for pos in [pos for pos in range(length ** 2)
if ord_v == world_db["Things"][0]["fovmap"][pos]]:
fov[pos] = world_db["MAP"][pos]
- length = world_db["MAP_LENGTH"]
for id in [id for tid in reversed(sorted(list(world_db["ThingTypes"])))
for id in world_db["Things"]
if not world_db["Things"][id]["carried"]
fov[world_db["Things"][id]["T_POSY"] * length
+ world_db["Things"][id]["T_POSX"]] = c
string = write_map(string, fov)
+
mem = world_db["Things"][0]["T_MEMMAP"][:]
for mt in [mt for tid in reversed(sorted(list(world_db["ThingTypes"])))
for mt in world_db["Things"][0]["T_MEMTHING"]
c = world_db["ThingTypes"][mt[0]]["TT_SYMBOL"]
mem[(mt[1] * length) + mt[2]] = ord(c)
string = write_map(string, mem)
+
+ 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 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 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": {}