in textworld/generator/text_generation.py [0:0]
def generate_text_from_grammar(game, grammar: Grammar):
# Assign a specific room type and name to our rooms
for room in game.world.rooms:
# First, generate a unique roomtype and name from the grammar
if game.infos[room.id].room_type is None and grammar.has_tag("#room_type#"):
game.infos[room.id].room_type = grammar.expand("#room_type#")
assign_name_to_object(room, grammar, game.infos)
# Next, assure objects contained in a room must have the same room type
for obj in game.world.get_all_objects_in(room):
if game.infos[obj.id].room_type is None:
game.infos[obj.id].room_type = game.infos[room.id].room_type
# Objects in inventory can be of any room type.
for obj in game.world.get_objects_in_inventory():
if game.infos[obj.id].room_type is None and grammar.has_tag("#room_type#"):
game.infos[obj.id].room_type = grammar.expand("#room_type#")
# Assign name and description to objects.
for obj in game.world.objects:
if obj.type in ["I", "P"]:
continue
assign_name_to_object(obj, grammar, game.infos)
assign_description_to_object(obj, grammar, game)
# Generate the room descriptions.
for room in game.world.rooms:
if game.infos[room.id].desc is None: # Skip rooms which already have a description.
game.infos[room.id].desc = assign_description_to_room(room, game, grammar)
# Generate the instructions.
for quest in game.quests:
if quest.desc is None:
quest.desc = assign_description_to_quest(quest, game, grammar)
return game