1 # This file is part of PlomRogue. PlomRogue is licensed under the GPL version 3
2 # or any later version. For details on its copyright, license, and warranties,
3 # see the file NOTICE in the root directory of the PlomRogue source package.
6 from server.io import log, strong_write
7 from server.config.world_data import world_db, directions_db
8 from server.utils import mv_yx_in_dir_legal, rand, id_setter
9 from server.config.io import io_db
11 def pos_test(type, y, x):
12 pos = y * world_db["MAP_LENGTH"] + x;
13 plant = world_db["ThingTypes"][type]["TT_PROLIFERATE"]
14 return (not plant or ":" == chr(world_db["MAP"][pos]))
17 from server.world_makable import world_makable
18 playertype = world_makable()
19 for name in world_db["specials"]:
20 if world_db[name] not in world_db["ThingTypes"]:
21 print("Ignoring: No valid " + name + " set.")
26 from server.make_map import make_map, is_neighbor, new_pos
29 length = world_db["MAP_LENGTH"]
30 n_colons = int((length ** 2) / 16)
32 while (i_colons <= n_colons):
33 single_allowed = rand.next() % 256
35 if ("." == chr(world_db["MAP"][pos])
36 and ((not single_allowed) or is_neighbor((y, x), ":"))):
37 world_db["MAP"][pos] = ord(":")
40 while not altar_placed:
42 if (("." == chr(world_db["MAP"][pos]
43 or ":" == chr(world_db["MAP"][pos]))
44 and not is_neighbor((y, x), "X"))):
45 world_db["MAP"][pos] = ord("_")
46 world_db["altar"] = (y, x)
49 def field_spreadable(c, t):
50 return ":" == c or (world_db["ThingTypes"][t["T_TYPE"]]["TT_LIFEPOINTS"]
53 def thingprol_plugin_conditions(t):
54 tt = world_db["ThingTypes"][t["T_TYPE"]]
55 return (tt["TT_LIFEPOINTS"] == 0 or \
56 t["T_LIFEPOINTS"] >= 0.9 * tt["TT_LIFEPOINTS"])
58 def thingprol_plugin_post_create_hook(t):
59 tt = world_db["ThingTypes"][t["T_TYPE"]]
60 if (world_db["FAVOR_STAGE"] > 0 and t["T_TYPE"] == world_db["PLANT_0"]):
61 world_db["GOD_FAVOR"] += 5
62 elif t["T_TYPE"] == world_db["PLANT_1"]:
63 world_db["GOD_FAVOR"] += 25
64 elif world_db["FAVOR_STAGE"] >= 4 and t["T_TYPE"] == world_db["ANIMAL_1"]:
65 log("The Island God SMILES upon a new-born bear baby.")
66 world_db["GOD_FAVOR"] += 750
68 def ai_hook_pickup_test(t):
69 return len(t["T_CARRIES"]) < \
70 world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"]
73 used_slots = len(t["T_CARRIES"])
74 if used_slots < world_db["ThingTypes"][t["T_TYPE"]]["TT_STORAGE"]:
75 from server.actions import actor_pickup
76 t_picked = actor_pickup(t)
78 ty = world_db["ThingTypes"][t_picked["T_TYPE"]]
79 if t != world_db["Things"][0] and t_picked["T_PLAYERDROP"] \
80 and ty["TT_TOOL"] == "food":
81 score = int(ty["TT_TOOLPOWER"] / 32)
82 world_db["GOD_FAVOR"] += score
83 t_picked["T_PLAYERDROP"] = 0
84 elif t == world_db["Things"][0]:
85 log("CAN'T pick up object: No storage room to carry more.")
87 def actor_pickup_test_hook(t, tid):
88 from server.ai import eat_vs_hunger_threshold
89 tt = world_db["ThingTypes"][tid]
90 return not (t != world_db["Things"][0] and (tt["TT_TOOL"] != "food" or
91 (tt["TT_TOOLPOWER"] <= eat_vs_hunger_threshold(t["T_TYPE"]))))
94 from server.actions import actor_drop
95 dropped = actor_drop(t)
97 dropped["T_PLAYERDROP"] = 1
99 def actor_use_attempts_hook(t, ty):
100 if ty == world_db["SLIPPERS"]:
101 if t == world_db["Things"][0]:
102 log("You use the " + world_db["ThingTypes"][ty]["TT_NAME"] + ". " \
103 "It glows in wondrous colors, and emits a sound as if from a d"
104 "ying cat. The Island God laughs.\n")
105 t["T_LIFEPOINTS"] = 1
106 from server.config.misc import decrement_lifepoints
107 decrement_lifepoints(t)
108 elif (world_db["ThingTypes"][ty]["TT_TOOL"] == "carpentry"):
109 pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
110 if (world_db["MAP"][pos] == ord("X")
111 or world_db["MAP"][pos] == ord("|")):
113 for t_id in [t_id for t_id in world_db["Things"]
114 if not world_db["Things"][t_id] == t
115 if not world_db["Things"][t_id]["carried"]
116 if world_db["Things"][t_id]["T_POSY"] == t["T_POSY"]
117 if world_db["Things"][t_id]["T_POSX"] == t["T_POSX"]]:
120 for t_id in t["T_CARRIES"]:
121 type_material = world_db["Things"][t_id]["T_TYPE"]
122 if (world_db["ThingTypes"][type_material]["TT_TOOL"] == "wood"):
126 t["T_CARRIES"].remove(wood_id)
127 del world_db["Things"][wood_id]
128 world_db["MAP"][pos] = ord("|")
129 log("With your " + world_db["ThingTypes"][ty]["TT_NAME"] + " you" \
130 " build a WOODEN BARRIER from your "
131 + world_db["ThingTypes"][type_material]["TT_NAME"] + ".")
132 elif world_db["ThingTypes"][ty]["TT_TOOL"] == "fertilizer":
133 pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
134 if world_db["MAP"][pos] == ord("."):
135 log("You create SOIL.")
136 world_db["MAP"][pos] = ord(":")
140 def altar_msg_wait(limit):
141 log("The Island God will talk again when it favors you to >=" +
142 str(limit) + " points.")
144 altar_msg_0 = "The Island God speaks to you: \"I don't trust you. You in" \
145 "trude on the island's affairs. I think you're a nuisance at best, and a" \
146 " danger to my children at worst. I will give you a chance to lighten my" \
147 " mood, however: For a while now, I've been trying to spread the plant " \
148 + world_db["ThingTypes"][world_db["PLANT_0"]]["TT_NAME"] + " (\"" + \
149 world_db["ThingTypes"][world_db["PLANT_0"]]["TT_SYMBOL"] + "\"). I have " \
150 "not been very successful so far. Maybe you can make yourself useful the" \
151 "re. I will count each further " + \
152 world_db["ThingTypes"][world_db["PLANT_0"]]["TT_NAME"] + " that grows to" \
155 altar_msg_1 = "The Island God speaks to you: \"You could have done worse" \
156 " so far. Maybe you are not the worst to happen to this island since the" \
157 " metal birds threw the great lightning ball. Maybe you can help me spre" \
158 "ad another plant. It multiplies faster,and it is highly nutritious: " + \
159 world_db["ThingTypes"][world_db["PLANT_1"]]["TT_NAME"] + " (\"" + \
160 world_db["ThingTypes"][world_db["PLANT_1"]]["TT_SYMBOL"] + "\"). It is n" \
161 "ew. I give you the only example. Be very careful with it! I also give y" \
162 "ou another tool that may be helpful.\""
164 altar_msg_2 = "The Island God speaks to you: \"I am greatly disappointed" \
165 " that you lost all " + \
166 world_db["ThingTypes"][world_db["PLANT_1"]]["TT_NAME"] + " this island h" \
167 "ad. Here is another one. It cost me great work. Be more careful this ti" \
168 "me when planting it.\""
170 altar_msg_3 = "The Island God speaks to you: \"The " + \
171 world_db["ThingTypes"][world_db["ANIMAL_0"]]["TT_NAME"] + " has lately b" \
172 "ecome a pest. These creatures do not please me as much as they used to " \
173 "do. Exterminate them all. I will count each kill to your favor. To help" \
174 " you with the hunting, I grant you the empathy and knowledge to read an" \
177 altar_msg_4 = "You will now see animals' health bars, and activities (\"" \
178 "m\": moving (maybe for an attack), \"u\": eating, \"p\": picking someth" \
179 "ing up; no letter: waiting)."
181 altar_msg_5 = "The Island God speaks to you: \"You know what animal I fi" \
182 "nd the cutest? The " + \
183 world_db["ThingTypes"][world_db["ANIMAL_1"]]["TT_NAME"] + "! I think wha" \
184 "t this islands clearly needs more of is " + \
185 world_db["ThingTypes"][world_db["ANIMAL_1"]]["TT_NAME"] + "s. Why don't " \
186 "you help? Support them. Make sure they are well, and they will multiply" \
187 " faster. From now on, I will count each new-born " + \
188 world_db["ThingTypes"][world_db["ANIMAL_1"]]["TT_NAME"] + \
189 " (not spawned by me due to undo an extinction event) greatly to your fa" \
190 "vor. To help you with the feeding, here is something to make the ground" \
191 " bear more consumables."
193 altar_msg_6 = "The Island God speaks to you: \"You have proven yourself " \
194 "worthy of my respect. You were a good citizen to the island, and someti" \
195 "mes a better steward to its inhabitants than me. The island shall miss " \
196 "you when you leave. But you have earned the right to do so. Take this" + \
197 world_db["ThingTypes"][world_db["SLIPPERS"]]["TT_NAME"] + " and USE it w" \
198 "hen you please. It will take you to where you came from. (But do feel f" \
199 "ree to stay here as long as you like.)\""
202 from server.new_thing import new_Thing
203 if world_db["FAVOR_STAGE"] > 9000:
204 log("You step on a soul-less slab of stone.")
206 log("YOU ENTER SACRED GROUND.")
207 if world_db["FAVOR_STAGE"] == 0:
208 world_db["FAVOR_STAGE"] = 1
210 elif world_db["FAVOR_STAGE"] == 1 and world_db["GOD_FAVOR"] < 100:
212 elif world_db["FAVOR_STAGE"] == 1 and world_db["GOD_FAVOR"] >= 100:
213 world_db["FAVOR_STAGE"] = 2
215 id = id_setter(-1, "Things")
216 world_db["Things"][id] = new_Thing(world_db["PLANT_1"],
218 id = id_setter(-1, "Things")
219 world_db["Things"][id] = new_Thing(world_db["TOOL_0"],
221 elif world_db["FAVOR_STAGE"] == 2 and \
222 0 == len([id for id in world_db["Things"]
223 if world_db["Things"][id]["T_TYPE"]
224 == world_db["PLANT_1"]]):
226 id = id_setter(-1, "Things")
227 world_db["Things"][id] = new_Thing(world_db["PLANT_1"],
229 world_db["GOD_FAVOR"] -= 250
230 elif world_db["FAVOR_STAGE"] == 2 and world_db["GOD_FAVOR"] < 500:
232 elif world_db["FAVOR_STAGE"] == 2 and world_db["GOD_FAVOR"] >= 500:
233 world_db["FAVOR_STAGE"] = 3
236 world_db["EMPATHY"] = 1
237 elif world_db["FAVOR_STAGE"] == 3 and world_db["GOD_FAVOR"] < 5000:
239 elif world_db["FAVOR_STAGE"] == 3 and world_db["GOD_FAVOR"] >= 5000:
240 world_db["FAVOR_STAGE"] = 4
242 id = id_setter(-1, "Things")
243 world_db["Things"][id] = new_Thing(world_db["TOOL_1"],
245 elif world_db["GOD_FAVOR"] < 20000:
246 altar_msg_wait(20000)
247 elif world_db["GOD_FAVOR"] > 20000:
248 world_db["FAVOR_STAGE"] = 9001
250 id = id_setter(-1, "Things")
251 world_db["Things"][id] = new_Thing(world_db["SLIPPERS"],
254 from server.actions import actor_move
258 if world_db["FAVOR_STAGE"] >= 3 and \
259 test[1] == world_db["ANIMAL_0"]:
260 world_db["GOD_FAVOR"] += 125
261 elif t == world_db["Things"][0]:
262 world_db["GOD_FAVOR"] -= 2 * test[1]
263 elif t == world_db["Things"][0]:
264 world_db["GOD_FAVOR"] -= 1
266 if (t == world_db["Things"][0] and
267 test[1] == world_db["altar"][0] and
268 test[2] == world_db["altar"][1]):
271 def actor_move_attempts_hook(t, move_result, pos):
272 if (ord("X") == world_db["MAP"][pos] or ord("|") == world_db["MAP"][pos]):
273 for tid in t["T_CARRIES"]:
274 ty = world_db["Things"][tid]["T_TYPE"]
275 if world_db["ThingTypes"][ty]["TT_TOOL"] == "axe":
276 axe_name = world_db["ThingTypes"][ty]["TT_NAME"]
277 if t == world_db["Things"][0]:
278 log("With your " + axe_name + ", you chop!")
279 if ord("X") == world_db["MAP"][pos]:
280 world_db["GOD_FAVOR"] -= 1
281 chop_power = world_db["ThingTypes"][ty]["TT_TOOLPOWER"]
282 case_X = world_db["MAP"][pos] == ord("X")
283 if (chop_power > 0 and
284 ((case_X and 0 == int(rand.next() / chop_power))
286 0 == int(rand.next() / (3 * chop_power))))):
287 if t == world_db["Things"][0]:
288 log("You chop it DOWN.")
289 if ord("X") == world_db["MAP"][pos]:
290 world_db["GOD_FAVOR"] -= 10
291 world_db["MAP"][pos] = ord(".")
292 i = 3 if case_X else 1
294 tid = id_setter(-1, "Things")
295 world_db["Things"][tid] = \
296 new_Thing(world_db["LUMBER"],
297 (move_result[1], move_result[2]))
302 def decrement_lifepoints(t):
303 from server.decrement_lifepoints import decrement_lifepoints
304 live_tid = t["T_TYPE"]
305 test = decrement_lifepoints(t)
306 if test > 0 and t != world_db["Things"][0]:
307 n_species = len([tid for tid in world_db["Things"]
308 if world_db["Things"][tid]["T_TYPE"] == live_tid])
310 from server.new_thing import new_Thing
311 if world_db["FAVOR_STAGE"] >= 3 and \
312 live_tid == world_db["ANIMAL_0"]:
313 world_db["GOD_FAVOR"] += 3000
314 log("CONGRATULATIONS! The "
315 + world_db["ThingTypes"][live_tid]["TT_NAME"]
316 + " species has died out. The Island God is pleased.")
318 tid = id_setter(-1, "Things")
319 world_db["Things"][tid] = new_Thing(live_tid,
321 log("The " + world_db["ThingTypes"][live_tid]["TT_NAME"] + " s"
322 "pecies has temporarily died out. One new-born is spawned "
326 def command_worldactive(worldactive_string):
327 val = integer_test(worldactive_string, 0, 1)
329 if 0 != world_db["WORLD_ACTIVE"]:
333 print("World already active.")
334 elif 0 == world_db["WORLD_ACTIVE"]:
335 for ThingAction in world_db["ThingActions"]:
336 if "wait" == world_db["ThingActions"][ThingAction]["TA_NAME"]:
339 print("Ignored: No wait action defined for world to activate.")
341 for Thing in world_db["Things"]:
345 print("Ignored: No player defined for world to activate.")
348 pos = world_db["MAP"].find(b'_')
350 y = int(pos / world_db["MAP_LENGTH"])
351 x = pos % world_db["MAP_LENGTH"]
352 world_db["altar"] = (y, x)
354 print("Ignored: No altar defined for world to activate.")
357 print("Ignored: No map defined for world to activate.")
359 for name in world_db["specials"]:
360 if world_db[name] not in world_db["ThingTypes"]:
361 print("Ignored: Not all specials set for world to "
364 for id in world_db["Things"]:
365 if world_db["Things"][id]["T_LIFEPOINTS"]:
366 build_fov_map(world_db["Things"][id])
368 update_map_memory(world_db["Things"][id], False)
369 if not world_db["Things"][0]["T_LIFEPOINTS"]:
370 empty_fovmap = bytearray(b" " * world_db["MAP_LENGTH"] ** 2)
371 world_db["Things"][0]["fovmap"] = empty_fovmap
372 world_db["WORLD_ACTIVE"] = 1
374 def play_move(str_arg):
375 if action_exists("move"):
376 from server.config.world_data import directions_db, symbols_passable
377 t = world_db["Things"][0]
378 if not str_arg in directions_db:
379 print("Illegal move direction string.")
381 dir = ord(directions_db[str_arg])
382 global mv_yx_in_dir_legal
383 move_result = mv_yx_in_dir_legal(chr(dir), t["T_POSY"], t["T_POSX"])
384 if 1 == move_result[0]:
385 pos = (move_result[1] * world_db["MAP_LENGTH"]) + move_result[2]
386 if ord("~") == world_db["MAP"][pos]:
387 log("You can't SWIM.")
389 if (ord("X") == world_db["MAP"][pos]
390 or ord("|") == world_db["MAP"][pos]):
392 for id in t["T_CARRIES"]:
393 type = world_db["Things"][id]["T_TYPE"]
394 if world_db["ThingTypes"][type]["TT_TOOL"] == "axe":
395 world_db["Things"][0]["T_ARGUMENT"] = dir
398 if chr(world_db["MAP"][pos]) in symbols_passable:
399 world_db["Things"][0]["T_ARGUMENT"] = dir
402 log("You CAN'T move there.")
404 def play_use(str_arg):
405 if action_exists("use"):
406 t = world_db["Things"][0]
407 if 0 == len(t["T_CARRIES"]):
408 log("You have NOTHING to use in your inventory.")
410 val = integer_test(str_arg, 0, 255)
411 if None != val and val < len(t["T_CARRIES"]):
412 id = t["T_CARRIES"][val]
413 type = world_db["Things"][id]["T_TYPE"]
414 if (world_db["ThingTypes"][type]["TT_TOOL"] == "axe"
415 and t == world_db["Things"][0]):
416 log("To use this item for chopping, move towards a tree "
417 "while carrying it in your inventory.")
419 elif (world_db["ThingTypes"][type]["TT_TOOL"] == "carpentry"):
420 pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
421 if (world_db["MAP"][pos] == ord("X")
422 or world_db["MAP"][pos] == ord("|")):
423 log("CAN'T build when standing on barrier.")
425 for id in [id for id in world_db["Things"]
426 if not world_db["Things"][id] == t
427 if not world_db["Things"][id]["carried"]
428 if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
429 if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]:
430 log("CAN'T build when standing objects.")
433 for id in t["T_CARRIES"]:
434 type_material = world_db["Things"][id]["T_TYPE"]
435 if (world_db["ThingTypes"][type_material]["TT_TOOL"]
440 log("You CAN'T use a "
441 + world_db["ThingTypes"][type]["TT_NAME"]
442 + " without some wood in your inventory.")
444 elif world_db["ThingTypes"][type]["TT_TOOL"] == "fertilizer":
445 pos = t["T_POSY"] * world_db["MAP_LENGTH"] + t["T_POSX"]
446 if not world_db["MAP"][pos] == ord("."):
447 log("Can only make soil out of NON-SOIL earth.")
449 elif world_db["ThingTypes"][type]["TT_TOOL"] == "wood":
450 log("To use wood, you NEED a carpentry tool.")
452 elif type != world_db["SLIPPERS"] and not \
453 world_db["ThingTypes"][type]["TT_TOOL"] == "food":
454 log("You CAN'T consume this thing.")
456 world_db["Things"][0]["T_ARGUMENT"] = val
459 print("Illegal inventory index.")
461 def specialtypesetter(name):
463 val = integer_test(str_int, 0)
466 if world_db["WORLD_ACTIVE"] \
467 and world_db[name] not in world_db["ThingTypes"]:
468 world_db["WORLD_ACTIVE"] = 0
469 print(name + " fits no known ThingType, deactivating world.")
472 def write_metamap_A():
473 from server.worldstate_write_helpers import write_map
475 length = world_db["MAP_LENGTH"]
476 metamapA = bytearray(b'0' * (length ** 2))
477 for id in [id for id in world_db["Things"]
478 if not world_db["Things"][id]["carried"]
479 if world_db["Things"][id]["T_LIFEPOINTS"]
480 if world_db["Things"][0]["fovmap"][
481 world_db["Things"][id]["T_POSY"] * length
482 + world_db["Things"][id]["T_POSX"]] == ord_v]:
483 pos = (world_db["Things"][id]["T_POSY"] * length
484 + world_db["Things"][id]["T_POSX"])
485 if id == 0 or world_db["EMPATHY"]:
486 type = world_db["Things"][id]["T_TYPE"]
487 max_hp = world_db["ThingTypes"][type]["TT_LIFEPOINTS"]
488 third_of_hp = max_hp / 3
489 hp = world_db["Things"][id]["T_LIFEPOINTS"]
491 if hp > 2 * third_of_hp:
493 elif hp > third_of_hp:
495 metamapA[pos] = ord('a') + add
497 metamapA[pos] = ord('X')
498 for mt in world_db["Things"][0]["T_MEMTHING"]:
499 pos = mt[1] * length + mt[2]
500 if metamapA[pos] < ord('2'):
502 return write_map(metamapA, length)
504 def write_metamap_B():
505 from server.worldstate_write_helpers import write_map
507 length = world_db["MAP_LENGTH"]
508 metamapB = bytearray(b' ' * (length ** 2))
509 for id in [id for id in world_db["Things"]
510 if not world_db["Things"][id]["carried"]
511 if world_db["Things"][id]["T_LIFEPOINTS"]
512 if world_db["Things"][0]["fovmap"][
513 world_db["Things"][id]["T_POSY"] * length
514 + world_db["Things"][id]["T_POSX"]] == ord_v]:
515 pos = (world_db["Things"][id]["T_POSY"] * length
516 + world_db["Things"][id]["T_POSX"])
517 if id == 0 or world_db["EMPATHY"]:
518 action = world_db["Things"][id]["T_COMMAND"]
520 name = world_db["ThingActions"][action]["TA_NAME"]
523 metamapB[pos] = ord(name[0])
524 return write_map(metamapB, length)
526 def calc_effort(thing_action, thing):
527 from math import sqrt
528 effort = thing_action["TA_EFFORT"]
529 if thing_action["TA_NAME"] == "move":
530 typ = thing["T_TYPE"]
531 max_hp = (world_db["ThingTypes"][typ]["TT_LIFEPOINTS"])
532 effort = int(effort / sqrt(max_hp))
533 effort = 1 if effort == 0 else effort
537 """Try "pickup" as player's T_COMMAND"."""
538 if action_exists("pickup"):
539 t = world_db["Things"][0]
540 ids = [id for id in world_db["Things"] if id
541 if not world_db["Things"][id]["carried"]
542 if world_db["Things"][id]["T_POSY"] == t["T_POSY"]
543 if world_db["Things"][id]["T_POSX"] == t["T_POSX"]]
545 log("NOTHING to pick up.")
546 elif len(t["T_CARRIES"]) >= world_db["ThingTypes"][t["T_TYPE"]] \
548 log("CAN'T pick up: No storage room to carry anything more.")
550 set_command("pickup")
552 strong_write(io_db["file_out"], "PLUGIN PleaseTheIslandGod\n")
554 def set_zero_if_undefined(key):
555 if not key in world_db:
558 set_zero_if_undefined("GOD_FAVOR")
559 set_zero_if_undefined("FAVOR_STAGE")
560 set_zero_if_undefined("EMPATHY")
561 world_db["specials"] = ["SLIPPERS", "PLANT_0", "PLANT_1", "TOOL_0", "TOOL_1",
562 "LUMBER", "ANIMAL_0", "ANIMAL_1"]
563 for key in world_db["specials"]:
564 set_zero_if_undefined(key)
566 world_db["terrain_names"][":"] = "SOIL"
567 world_db["terrain_names"]["|"] = "WALL"
568 world_db["terrain_names"]["_"] = "ALTAR"
569 io_db["worldstate_write_order"] += [["GOD_FAVOR", "world_int"]]
570 io_db["worldstate_write_order"] += [[write_metamap_A, "func"]]
571 io_db["worldstate_write_order"] += [[write_metamap_B, "func"]]
573 import server.config.world_data
574 server.config.world_data.symbols_passable += ":_"
576 from server.config.world_data import thing_defaults, thingtype_defaults
577 thing_defaults["T_PLAYERDROP"] = 0
578 thingtype_defaults["TT_STORAGE"] = 0
580 import server.config.actions
581 server.config.actions.action_db["actor_move"] = actor_move
582 server.config.actions.action_db["actor_pickup"] = actor_pickup
583 server.config.actions.action_db["actor_drop"] = actor_drop
584 server.config.actions.actor_pickup_test_hook = actor_pickup_test_hook
585 server.config.actions.actor_use_attempts_hook = actor_use_attempts_hook
586 server.config.actions.actor_move_attempts_hook = actor_move_attempts_hook
588 from server.config.commands import commands_db
589 commands_db["GOD_FAVOR"] = (1, False, setter(None, "GOD_FAVOR", -32768, 32767))
590 commands_db["TT_STORAGE"] = (1, False, setter("ThingType", "TT_STORAGE", 0, 255))
591 commands_db["T_PLAYERDROP"] = (1, False, setter("Thing", "T_PLAYERDROP", 0, 1))
592 commands_db["WORLD_ACTIVE"] = (1, False, command_worldactive)
593 commands_db["FAVOR_STAGE"] = (1, False, setter(None, "FAVOR_STAGE", 0, 1))
594 commands_db["SLIPPERS"] = (1, False, specialtypesetter("SLIPPERS"))
595 commands_db["TOOL_0"] = (1, False, specialtypesetter("TOOL_0"))
596 commands_db["TOOL_1"] = (1, False, specialtypesetter("TOOL_1"))
597 commands_db["ANIMAL_0"] = (1, False, specialtypesetter("ANIMAL_0"))
598 commands_db["ANIMAL_1"] = (1, False, specialtypesetter("ANIMAL_1"))
599 commands_db["PLANT_0"] = (1, False, specialtypesetter("PLANT_0"))
600 commands_db["PLANT_1"] = (1, False, specialtypesetter("PLANT_1"))
601 commands_db["LUMBER"] = (1, False, specialtypesetter("LUMBER"))
602 commands_db["EMPATHY"] = (1, False, setter(None, "EMPATHY", 0, 1))
603 commands_db["use"] = (1, False, play_use)
604 commands_db["move"] = (1, False, play_move)
605 commands_db["pickup"] = (0, False, play_pickup)
607 import server.config.misc
608 server.config.misc.make_map_func = make_map
609 server.config.misc.decrement_lifepoints = decrement_lifepoints
610 server.config.misc.calc_effort_func = calc_effort
612 import server.config.make_world_helpers
613 server.config.make_world_helpers.pos_test_func = pos_test
614 server.config.make_world_helpers.world_makable_func = world_makable
615 server.config.make_world_helpers.make_map_func = make_map
617 import server.config.thingproliferation
618 server.config.thingproliferation.field_spreadable = field_spreadable
619 server.config.thingproliferation.thingprol_plugin_conditions = \
620 thingprol_plugin_conditions
621 server.config.thingproliferation.thingprol_plugin_post_create_hook = \
622 thingprol_plugin_post_create_hook
624 import server.config.ai
625 server.config.ai.ai_hook_pickup = ai_hook_pickup_test