コード例 #1
0
 def generate_encounter(self, current_player, enctype="creature"):
     if enctype == 'creature':
         self.gm_print('Give me a second to get this entry...')
         creature = Monster(
             self.data.table_fetch(f'Floor{self.dungeon_data["floor"]}'))
         self.gm_print(f'You encounter a {creature.name}!')
         # TODO: Add more options (charm, barter, negotiate, intimidate)
         self.run_combat(current_player, creature)
     elif enctype == 'trap':
         self.gm_print('You encounter a trap!')
         choice = rpgtools.generate_menu(
             ['Go around it', 'Disarm it', 'Just trip it'])
         if choice == 0:
             if current_player.check('DEX'):
                 self.gm_print('You go around the trap...')
             else:
                 self.gm_print('You go around the trap...')
                 self.gm_print('But it gets you at the last moment!')
                 current_player.hp -= rpgtools.roll('1d6')
         elif choice == 1:
             if current_player.check('INT'):
                 self.gm_print('You try to disarm the trap...')
             else:
                 self.gm_print('You try to disarm the trap...')
                 self.gm_print('But it gets you at the last moment!')
                 current_player.hp -= rpgtools.roll('1d6')
         elif choice == 2:
             self.gm_print('You boldly march straight into the trap!')
             current_player.hp -= rpgtools.roll('1d6')
コード例 #2
0
 def use_inventory_item(self, extra_targets=None):
     target = self
     if self.inventory:
         choice = self.inventory[rpgtools.generate_menu(self.inventory,
                                                        use_attr='name')]
         self.player_print(f"I'm gonna use {choice.name}.")
         if extra_targets:
             possible_targets = [self] + extra_targets
             self.player_print("Gotta pick a target.")
             target = possible_targets[rpgtools.generate_menu(
                 possible_targets, use_attr='name')]
         if choice.use_case == 'attack':
             self.player_print("Making an attack roll...")
             res = rpgtools.roll('1d20') + self.data['STR']
             if res > target.data['AC']:
                 self.player_print('Hit.')
                 choice.use(self, target)
             else:
                 self.player_print('Miss.')
         else:
             choice.use(self, target)
コード例 #3
0
def explore(dungeon):
    curr_layer = 0
    layer = dungeon.directory[curr_layer]
    curr_room = layer[0]
    while True:
        curr_room.visited = True
        dungeon.display_map(curr_layer, curr_room.x, curr_room.y)
        print(f'You are in a room of type {curr_room.kind}')
        ways_out = list(curr_room.exits.keys())
        c = coretools.generate_menu(ways_out + ['Back'])
        if c == len(ways_out + ['Back']) - 1:
            curr_room = curr_room.entrance
            if curr_room == 'EXIT':
                print('You left the dungeon')
                break
        else:
            curr_room = curr_room.exits[ways_out[c]]
コード例 #4
0
 def run_combat(self, player, enemy):
     order = [enemy, player]
     self.gm_print('Roll initiative...')
     if player.check('DEX'):
         order = [player, enemy]
     to_escape = False
     while True:
         for actor in order:
             if actor == player:
                 self.gm_print('Your turn.')
                 choice = rpgtools.generate_menu(['Use Item', 'Flee'])
                 if choice == 0:
                     player.use_inventory_item([enemy])
                 elif choice == 1:
                     self.gm_print('Give me an escape check.')
                     if player.check('DEX'):
                         self.gm_print('You successfully disengage!')
                         break
                     else:
                         self.gm_print(
                             'You will flee at the end of the combat turn!')
                         to_escape = True
             else:
                 self.gm_print(f'It\'s the {actor.name}\'s turn.')
                 for attacks in range(actor.data['#AT']):
                     if rpgtools.roll('1d20') > player.data['AC']:
                         damage = rpgtools.roll(actor.data['Dmg'])
                         player.data['HP'] -= damage
                         self.gm_print(
                             f'The {actor.name} hits you for {damage} damage!'
                         )
                     else:
                         self.gm_print(f'The {actor.name} misses!')
         if to_escape:
             self.gm_print('You flee!')
             break
         if player.data['HP'] <= 0:
             self.gm_print(f'You fall in battle!')
             player.is_alive = False
             break
         elif enemy.data['HP'] <= 0:
             self.gm_print(f'The {enemy.name} died!')
             player.xp += 10
             break
コード例 #5
0
    def encounter(self,
                  current_player):  # Overloaded Encounter Dice simulation
        v = self.data.table_fetch('Encounters')
        if v == 'Encounter':
            self.gm_print('An encounter!')
            self.generate_encounter(current_player)
        elif v == 'Nearby':
            self.gm_print('Something stirs in the darkness...')
            r = rpgtools.generate_menu(['Run', 'Hide', 'Face it'])
            if r == 0:
                if current_player.check('DEX'):
                    self.gm_print('You run away successfully.')
                else:
                    self.generate_encounter(current_player)
            elif r == 1:
                if current_player.check('INT'):
                    self.gm_print('You hide successfully.')
                else:
                    self.generate_encounter(current_player)
            elif r == 2:
                self.generate_encounter(current_player)
        elif v == 'Food':
            self.gm_print('You start to feel hungry...')
            if current_player.data['hunger'] <= 0:
                self.gm_print('You\'re starving!')
                current_player.data['HP'] -= 1
            else:
                current_player.data['hunger'] -= 1

        elif v == 'Trap':
            self.gm_print('A trap!')
            self.generate_encounter(current_player, enctype='trap')
        elif v == 'Light':
            self.gm_print('The lights flicker...')
            if current_player.data['light'] <= 0:
                self.gm_print('You\'re in the dark!')
            else:
                current_player.data['light'] -= 1

        elif not v:
            self.gm_print('Nothing happens. You\'re safe... for now.')
コード例 #6
0
 def dungeon_options(self, player):
     self.gm_print(self.data.table_fetch('RoomText'))
     choice = rpgtools.generate_menu(
         ['Go Deeper', 'Use Item', 'Rest', 'Exit Dungeon'])
     if choice == 0:
         self.gm_print('Awesome.')
         self.dungeon_data['room'] += 1
     elif choice == 1:
         if player.inventory:
             self.gm_print(
                 'Ok, look through your inventory and tell me what you want to use.'
             )
             player.use_inventory_item()
         else:
             self.gm_print('Hey, you don\'t have any items!')
     elif choice == 2:
         self.gm_print('You take a break.')
         player.data['HP'] = player.data['HPMax']
     elif choice == 3:
         self.gm_print(f'Well, that was fun!')
         return True