type_id = world_db["Things"][id]["T_TYPE"]
name = world_db["ThingTypes"][type_id]["TT_NAME"]
inventory = inventory + name + "\n"
- ## 7DRL additions: GOD_MOOD, GOD_FAVOR
- string = str(world_db["GOD_MOOD"]) + "\n" + \
+ # # 7DRL additions: GOD_MOOD, GOD_FAVOR
+ string = str(world_db["TURN"]) + "\n" + \
+ str(world_db["GOD_MOOD"]) + "\n" + \
str(world_db["GOD_FAVOR"]) + "\n" + \
- str(world_db["TURN"]) + "\n" + \
str(world_db["Things"][0]["T_LIFEPOINTS"]) + "\n" + \
str(world_db["Things"][0]["T_SATIATION"]) + "\n" + \
inventory + "%\n" + \
def update_map_memory(t, age_map=True):
"""Update t's T_MEMMAP with what's in its FOV now,age its T_MEMMEPTHMAP."""
def age_some_memdepthmap_on_nonfov_cells():
- # OUTSOURCED TO libplomrogue.so:
+ # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
+ # ord_v = ord("v")
+ # ord_0 = ord("0")
+ # ord_9 = ord("9")
# for pos in [pos for pos in range(world_db["MAP_LENGTH"] ** 2)
# if not ord_v == t["fovmap"][pos]
# if ord_0 <= t["T_MEMDEPTHMAP"][pos]
if age_map:
age_some_memdepthmap_on_nonfov_cells()
for mt in [mt for mt in t["T_MEMTHING"]
- if "v" == chr(t["fovmap"][(mt[1] * world_db["MAP_LENGTH"])
- + mt[2]])]:
+ if ord_v == t["fovmap"][(mt[1] * world_db["MAP_LENGTH"])
+ + mt[2]]]:
t["T_MEMTHING"].remove(mt)
for id in [id for id in world_db["Things"]
if not world_db["Things"][id]["carried"]]:
if not world_db["ThingTypes"][type]["TT_LIFEPOINTS"]:
y = world_db["Things"][id]["T_POSY"]
x = world_db["Things"][id]["T_POSX"]
- if "v" == chr(t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]):
+ if ord_v == t["fovmap"][(y * world_db["MAP_LENGTH"]) + x]:
t["T_MEMTHING"].append((type, y, x))
"""Return val_string if possible integer >= min and <= max, else None."""
try:
val = int(val_string)
- if val < min or (if max is not None and val > max):
+ if val < min or (max is not None and val > max):
raise ValueError
return val
except ValueError:
If t is the player avatar, only blank its fovmap, so that the client may
still display memory data. On non-player things, erase fovmap and memory.
"""
+ # # 7DRL: also decrements God's mood; deaths heavily so
t["T_LIFEPOINTS"] -= 1
+ world_db["GOD_MOOD"] -= 1 # #
if 0 == t["T_LIFEPOINTS"]:
+ world_db["GOD_MOOD"] -= 9 # #
t["T_TYPE"] = world_db["ThingTypes"][t["T_TYPE"]]["TT_CORPSE_ID"]
if world_db["Things"][0] == t:
t["fovmap"] = bytearray(b' ' * (world_db["MAP_LENGTH"] ** 2))
t["T_MEMMAP"] = False
t["T_MEMDEPTHMAP"] = False
t["T_MEMTHING"] = []
- strong_write(io_db["file_out"], "LOG It dies.\n")
def mv_yx_in_dir_legal(dir, y, x):
if world_db["Things"][id]["T_POSX"] == move_result[2]]
if len(hitted):
hit_id = hitted[0]
- hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
- hitter = "You" if t == world_db["Things"][0] else hitter_name
- hitted_type = world_db["Things"][hit_id]["T_TYPE"]
- hitted_name = world_db["ThingTypes"][hitted_type]["TT_NAME"]
- hitted = "you" if hit_id == 0 else hitted_name
- verb = " wound " if hitter == "You" else " wounds "
- strong_write(io_db["file_out"], "LOG " + hitter + verb + hitted +
- ".\n")
+ if t == world_db["Things"][0]:
+ hitted_type = world_db["Things"][hit_id]["T_TYPE"]
+ hitted_name = world_db["ThingTypes"][hitted_type]["TT_NAME"]
+ strong_write(io_db["file_out"], "LOG You wound " + hitted +
+ ".\n")
+ elif 0 == hit_id:
+ hitter_name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
+ strong_write(io_db["file_out"], "LOG " + hitter_name +
+ " wounds you.\n")
decrement_lifepoints(world_db["Things"][hit_id])
return
dir = [dir for dir in directions_db
def actor_pick_up(t):
"""Make t pick up (topmost?) Thing from ground into inventory."""
# Topmostness is actually not defined so far. Picks Thing with highest ID.
- ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
- if not world_db["Things"][id]["carried"]
- if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
- if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
- if len(ids):
- highest_id = 0
- for id in ids:
- if id > highest_id:
- highest_id = id
- world_db["Things"][highest_id]["carried"] = True
- t["T_CARRIES"].append(highest_id)
- if t == world_db["Things"][0]:
- strong_write(io_db["file_out"], "LOG You pick up an object.\n")
- elif t == world_db["Things"][0]:
- err = "You try to pick up an object, but there is none."
- strong_write(io_db["file_out"], "LOG " + err + "\n")
+ used_slots = len(t["T_CARRIES"]) # #
+ if used_slots < world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"]: # #
+ ids = [id for id in world_db["Things"] if world_db["Things"][id] != t
+ if not world_db["Things"][id]["carried"]
+ if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
+ if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
+ if len(ids):
+ highest_id = 0
+ for id in ids:
+ if id > highest_id:
+ highest_id = id
+ world_db["Things"][highest_id]["carried"] = True
+ t["T_CARRIES"].append(highest_id)
+ if t == world_db["Things"][0]:
+ strong_write(io_db["file_out"], "LOG You pick up an object.\n")
+ elif t == world_db["Things"][0]:
+ err = "You try to pick up an object, but there is none."
+ strong_write(io_db["file_out"], "LOG " + err + "\n")
+ elif t == world_db["Things"][0]: # #
+ strong_write(io_db["file_out"], "LOG Can't pick up object: " + # #
+ "No storage room to carry more.\n") # #
def actor_drop(t):
animate, any other animate Thing. If there are several map cell candidates,
one is selected randomly.
"""
+ # # 7DRL: success increments God's mood
def test_cell(t, y, x):
if "." == chr(world_db["MAP"][(y * world_db["MAP_LENGTH"]) + x]):
for id in [id for id in world_db["Things"]
id = id_setter(-1, "Things")
newT = new_Thing(t["T_TYPE"], (candidates[i][0], candidates[i][1]))
world_db["Things"][id] = newT
+ world_db["GOD_MOOD"] += 1 # #
def try_healing(t):
On success, decrease satiation score by 32.
"""
+ # # 7DRL: Successful heals increment God's mood.
if t["T_SATIATION"] > 0 \
and t["T_LIFEPOINTS"] < \
world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"] \
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")
- else:
- name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
- strong_write(io_db["file_out"], "LOG " + name + "heals.\n")
def hunger(t):
if int(int(testbase / stomach) / ((rand.next() % stomach) + 1)):
if t == world_db["Things"][0]:
strong_write(io_db["file_out"], "LOG You suffer from hunger.\n")
- else:
- name = world_db["ThingTypes"][t["T_TYPE"]]["TT_NAME"]
- strong_write(io_db["file_out"], "LOG " + name +
- " suffers from hunger.\n")
decrement_lifepoints(t)
"""
def zero_score_map_where_char_on_memdepthmap(c):
- # OUTSOURCED TO libpomrogue.so:
+ # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
# for i in [i for i in range(world_db["MAP_LENGTH"] ** 2)
# if t["T_MEMDEPTHMAP"][i] == mem_depth_c[0]]:
# set_map_score(i, 0)
return False
def set_cells_passable_on_memmap_to_65534_on_scoremap():
- # OUTSOURCED TO libplomrogue.so:
+ # OUTSOURCED FOR PERFORMANCE REASONS TO libplomrogue.so:
+ # ord_dot = ord(".")
# memmap = t["T_MEMMAP"]
# for i in [i for i in range(world_db["MAP_LENGTH"] ** 2)
# if ord_dot == memmap[i]]:
test = libpr.init_score_map()
if test:
raise RuntimeError("Malloc error in init_score_map().")
- ord_dot = ord(".")
ord_v = ord("v")
ord_blank = ord(" ")
set_cells_passable_on_memmap_to_65534_on_scoremap()
none, they will explore parts of the map unseen since ever or for at least
one turn; if there is nothing to explore, they will simply wait.
"""
+ # # 7DRL add: Don't pick up or search things when inventory is full.
t["T_COMMAND"] = [id for id in world_db["ThingActions"]
if world_db["ThingActions"][id]["TA_NAME"] == "wait"][0]
if not get_dir_to_target(t, "f"):
if world_db["ThingActions"][id]["TA_NAME"]
== "use"][0]
t["T_ARGUMENT"] = sel
- elif standing_on_consumable(t):
+ elif standing_on_consumable(t) \
+ and (len(t["T_CARRIES"]) < # #
+ world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"]): # #
t["T_COMMAND"] = [id for id in world_db["ThingActions"]
if world_db["ThingActions"][id]["TA_NAME"]
== "pick_up"][0]
- elif (not get_dir_to_target(t, "c")) and \
+ elif (not
+ (len(t["T_CARRIES"]) < # #
+ world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"] # #
+ and get_dir_to_target(t, "c"))) and \
(not get_dir_to_target(t, "a")):
get_dir_to_target(t, "s")
"TT_LIFEPOINTS": 0,
"TT_PROLIFERATE": 0,
"TT_START_NUMBER": 0,
+ "TT_STORAGE": 0, # #
"TT_SYMBOL": "?",
"TT_CORPSE_ID": id
}
"TT_PROLIFERATE": (1, False, setter("ThingType", "TT_PROLIFERATE",
0, 255)),
"TT_LIFEPOINTS": (1, False, setter("ThingType", "TT_LIFEPOINTS", 0, 255)),
+ "TT_STORAGE": (1, False, setter("ThingType", "TT_STORAGE", 0, 255)), # #
"T_ID": (1, False, command_tid),
"T_ARGUMENT": (1, False, setter("Thing", "T_ARGUMENT", 0, 255)),
"T_PROGRESS": (1, False, setter("Thing", "T_PROGRESS", 0, 255)),