home
·
contact
·
privacy
projects
/
plomrogue
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
4f3d161
)
Simplify and optimizing Thing proliferation rules.
author
Christian Heller
<c.heller@plomlompom.de>
Mon, 31 Aug 2015 23:30:18 +0000
(
01:30
+0200)
committer
Christian Heller
<c.heller@plomlompom.de>
Mon, 31 Aug 2015 23:30:18 +0000
(
01:30
+0200)
roguelike-server
patch
|
blob
|
history
diff --git
a/roguelike-server
b/roguelike-server
index 56354d51e23b3b2a090a0f8fe8b39601c7a15da5..5b37324c0d5f203c4efdacf28a7989c333a1f797 100755
(executable)
--- a/
roguelike-server
+++ b/
roguelike-server
@@
-712,31
+712,21
@@
def actor_use(t):
"LOG You try to use an object, but you own none.\n")
"LOG You try to use an object, but you own none.\n")
-def thingproliferation(t):
- """To chance of 1/TT_PROLIFERATE, create t offspring in neighbor cell.
+def thingproliferation(t
, prol_map
):
+ """To chance of 1/TT_PROLIFERATE, create t offspring in
open
neighbor cell.
- Naturally only works with TT_PROLIFERATE > 0. The neighbor cell must be
- passable and not be inhabited by a Thing of the same type, or, if Thing is
- animate, any other animate Thing. If there are several map cell candidates,
- one is selected randomly.
+ Naturally only works with TT_PROLIFERATE > 0. The neighbor cell must be be
+ marked '.' in prol_map. If there are several map cell candidates, one is
+ selected randomly.
"""
"""
- 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"]
- if y == world_db["Things"][id]["T_POSY"]
- if x == world_db["Things"][id]["T_POSX"]
- if (t["T_TYPE"] == world_db["Things"][id]["T_TYPE"])
- or (t["T_LIFEPOINTS"] and
- world_db["Things"][id]["T_LIFEPOINTS"])]:
- return False
- return True
- return False
prolscore = world_db["ThingTypes"][t["T_TYPE"]]["TT_PROLIFERATE"]
if prolscore and (1 == prolscore or 1 == (rand.next() % prolscore)):
candidates = []
for dir in [directions_db[key] for key in directions_db]:
mv_result = mv_yx_in_dir_legal(dir, t["T_POSY"], t["T_POSX"])
prolscore = world_db["ThingTypes"][t["T_TYPE"]]["TT_PROLIFERATE"]
if prolscore and (1 == prolscore or 1 == (rand.next() % prolscore)):
candidates = []
for dir in [directions_db[key] for key in directions_db]:
mv_result = mv_yx_in_dir_legal(dir, t["T_POSY"], t["T_POSX"])
- if mv_result[0] and test_cell(t, mv_result[1], mv_result[2]):
+ if mv_result[0] and ord('.') == prol_map[mv_result[1]
+ * world_db["MAP_LENGTH"]
+ + mv_result[2]]:
candidates.append((mv_result[1], mv_result[2]))
if len(candidates):
i = rand.next() % len(candidates)
candidates.append((mv_result[1], mv_result[2]))
if len(candidates):
i = rand.next() % len(candidates)
@@
-1033,6
+1023,12
@@
def turn_over():
id = 0
whilebreaker = False
while world_db["Things"][0]["T_LIFEPOINTS"]:
id = 0
whilebreaker = False
while world_db["Things"][0]["T_LIFEPOINTS"]:
+ proliferable_map = world_db["MAP"][:]
+ for id in [id for id in world_db["Things"]
+ if not world_db["Things"][id]["carried"]]:
+ y = world_db["Things"][id]["T_POSY"]
+ x = world_db["Things"][id]["T_POSX"]
+ proliferable_map[y * world_db["MAP_LENGTH"] + x] = ord('X')
for id in [id for id in world_db["Things"]]: # Only what's from start!
if not id in world_db["Things"] or \
world_db["Things"][id]["carried"]: # May have been consumed or
for id in [id for id in world_db["Things"]]: # Only what's from start!
if not id in world_db["Things"] or \
world_db["Things"][id]["carried"]: # May have been consumed or
@@
-1055,7
+1051,7
@@
def turn_over():
Thing["T_COMMAND"] = 0
Thing["T_PROGRESS"] = 0
hunger(Thing)
Thing["T_COMMAND"] = 0
Thing["T_PROGRESS"] = 0
hunger(Thing)
- thingproliferation(Thing)
+ thingproliferation(Thing
, proliferable_map
)
if whilebreaker:
break
world_db["TURN"] += 1
if whilebreaker:
break
world_db["TURN"] += 1