Exemplo n.º 1
0
def list_creatures():
    global rpg_game
    i = 0
    for c in rpg_game.player.creatures:
        say(str(i) + ': ' + c.name)
        i = i + 1
    rpg_game.should_update_turn = False
Exemplo n.º 2
0
def list_magic():
    global rpg_game
    i = 0
    for m in rpg_game.player.learned_spells:
        say(str(i) + ': ' + m.name)
        i = i + 1
    rpg_game.should_update_turn = False
Exemplo n.º 3
0
    def update_action(self, game_description):
        if self.state == CreatureState.Idle:
            # Verify enemies in current room
            for e in self.current_room.enemies:
                if not e.is_dead():
                    self.attack_target = e
                    self.attack_target_name = e.name
                    say(self.name + ' is going to attack ' +
                        self.attack_target_name)
                    self.state = CreatureState.Attack
                    break
            else:
                # No enemies. Should move? Random move!
                dir = Dice.parse('1d4')
                if not self.go(self.directions[dir - 1]):
                    say(utils.capitalize(self.name) + ' is wandering loosely')
        elif self.state == CreatureState.Attack:
            if self.attack_target.is_dead():
                self.state = CreatureState.Idle
            else:
                say(self.name + " is attacking " + self.attack_target_name)
                # print('UpdateAction - Attack')
                if self.is_attack_successful():
                    damage = self.get_attack_damage()
                    self.attack_target.receive_damage(damage, self)
                    if self.attack_target.is_dead():
                        self.state = CreatureState.Idle
                else:
                    say(self.attack_target_name + " dodges attack")

        self.cast_time = self.cast_time - 1
        if self.cast_time <= 0:
            say(self.name + "'s invocation finished.")
            game_description.player.creatures.remove(self)
Exemplo n.º 4
0
def consume(item):
    global rpg_game
    obj = rpg_game.player.inventory.take(item)
    if obj and obj.is_consumable:
        say('You pick up the %s.' % obj)
        obj.consume(rpg_game)
    else:
        say('There is no %s here.' % item)
Exemplo n.º 5
0
def take(item):
    global rpg_game
    obj = rpg_game.current_room.items.take(item)
    if obj:
        say('You pick up the %s.' % obj)
        rpg_game.player.inventory.add(obj)
    else:
        say('There is no %s here.' % item)
Exemplo n.º 6
0
def drop(thing):
    global rpg_game
    obj = rpg_game.player.inventory.take(thing)
    if not obj:
        say('You do not have a %s.' % thing)
    else:
        say('You drop the %s.' % obj)
        rpg_game.current_room.items.add(obj)
Exemplo n.º 7
0
 def invoke(self, game_description, params):
     params = params.strip()
     wparams = params.strip().split()
     if game_description.player.use_MP(self.MP_cost):
         new_creature = self.clone()
         new_creature.state = CreatureState.Idle
         new_creature.current_room = game_description.current_room
         game_description.player.creatures.append(new_creature)
         say(self.name + ' was invoked')
Exemplo n.º 8
0
    def go(self, direction):
        room = self.current_room.exit(direction)
        if room:
            last_room = self.current_room
            self.current_room = room
            say(self.name + ' went %s.' % direction)

            return True
            # look()
            # if room != last_room:
            #     room.on_player_enter()
        return False
Exemplo n.º 9
0
 def receive_damage(self, damage, source):
     say(self.name + " received " + str(damage) + " points of damage")
     self.current_HP = self.current_HP - damage
     if self.current_HP <= 0:
         say(self.name + " is dead.")
         self.state = CreatureState.Dead
     elif self.state == CreatureState.Idle or ( \
          self.attack_target != source   \
         ):
         # Creature should attack whatever attack him
         self.state = CreatureState.Attack
         self.attack_target = source
         self.attack_target_name = source.name
Exemplo n.º 10
0
def show_inventory():
    say('You have:')
    global rpg_game
    for thing in rpg_game.player.inventory:
        say(thing)
    rpg_game.should_update_turn = False
    say("")
    say("Coins: %s" % (rpg_game.player.coins, ))
Exemplo n.º 11
0
def invoke(creature):
    global rpg_game
    if creature == None:
        say("Which creature you would like to invoke?")
        return
    i = 0
    wc = creature.strip().split()
    for c in rpg_game.player.learned_invokable_creatures:
        creature_name_size = len(c.name)
        if (utils.is_int(wc[0]) and int(wc[0]) == i) or (\
            len(creature) >= creature_name_size and \
            creature[:creature_name_size].lower() == c.name.lower()):
            # print(magic)
            c.invoke(rpg_game, creature[creature_name_size:])
            break
        i = i + 1
Exemplo n.º 12
0
def go(direction):
    global rpg_game
    room = rpg_game.current_room.exit(direction)
    if room is None:
        say("You can't go " + direction)
    else:
        rpg_game.player.add_direction(direction)
        rpg_game.current_room.add_known_direction(direction)
        # if direction == 'north':
        #     room.add_known_direction('south')

        last_room = rpg_game.current_room
        rpg_game.current_room = room
        say('You go %s.' % direction)
        look()
        if room is not last_room:
            room.on_player_enter()
Exemplo n.º 13
0
def show_creature_status(creature):
    global rpg_game
    if creature == None:
        say("Which creature you would like to invoke?")
        return
    i = 0
    wc = creature.strip().split()
    for c in rpg_game.player.creatures:
        creature_name_size = len(c.name)
        if (utils.is_int(wc[0]) and int(wc[0]) == i) or (\
            len(creature) >= creature_name_size and \
            creature[:creature_name_size].lower() == c.name.lower()):
            # print(magic)
            c.show_status()
            break
        i = i + 1
    rpg_game.should_update_turn = False
Exemplo n.º 14
0
def available_directions():
    global rpg_game
    directions = rpg_game.current_room.known_directions
    if len(directions) == 0:
        say("You don't know any direction from this place")
    else:
        str_directions = 'You have already gone to '
        for i in range(0, len(directions)):
            d = directions[i]
            if len(directions) > 1 and i == len(directions) - 1:
                str_directions = str_directions + ' and ' + d
            elif i == len(directions) - 1:
                str_directions = str_directions + d
            elif len(directions) > 0 and i > 0:
                str_directions = str_directions + ', ' + d
            else:
                str_directions = str_directions + d
        say(str_directions)
Exemplo n.º 15
0
def cast(magic):
    global rpg_game
    if magic == None:
        say("Which magic you would like to spell?")
        return
    i = 0
    wm = magic.strip().split()
    for m in rpg_game.player.learned_spells:
        magic_name_size = len(m.name)
        if (utils.is_int(wm[0]) and int(wm[0]) == i):
            m.cast(rpg_game.player, rpg_game, magic[len(wm[0]):])
            break
        elif len(magic) >= magic_name_size and \
            magic[:magic_name_size].lower() == m.name.lower():
            # print(magic)
            m.cast(rpg_game.player, rpg_game, magic[magic_name_size:])
            break
        i = i + 1
Exemplo n.º 16
0
 def receive_damage(self, damage, source):
     say("Wizard Owl received " + str(damage) + " points of damage")
     self.current_HP = self.current_HP - damage
     if self.is_dead():
         say("Wizard Owl was slaughtered by " + source.name)
         say("Game Over")
         sys.exit()
Exemplo n.º 17
0
 def get_victory_from(self, enemy, loot=None):
     self.add_XP(enemy.granted_xp)
     say("Player received %s points of experience." % ( enemy.granted_xp,) )
     if not loot is None:
         if 'coins' in loot:
             say('Player received %s coins' % (loot['coins'],))
             self.coins = self.coins + loot['coins']
         if 'items' in loot:
             for t in loot['items']:
                 say('Player received %s' % (t.name,))
                 self.inventory.add(t)
Exemplo n.º 18
0
 def cast(self, caster, game_description, params):
     # print(params)
     say('Casting spell "' + self.name + '"')
     params = params.strip()
     wparams = params.strip().split()
     if game_description.player.use_MP(self.MP_cost):
         if self.spell_type == SpellType.Attack:
             for e in game_description.current_room.enemies:
                 enemy_name_size = len(e.name)
                 if self.target_number == -1 or ( \
                     len(params) >= enemy_name_size and \
                     params[:enemy_name_size].lower() == e.name.lower()):
                     self.description.add_tag("target", [e.name])
                     say(self.description)
                     damage = Dice.parse(self.damage_dice)
                     e.receive_damage(damage, caster)
                     if self.target_number > 1:
                         params = params[enemy_name_size:].strip()
                         self.target_number = self.target_number - 1
                     elif self.target_number != -1:
                         break
             else:
                 if self.target_number != -1:
                     say('No target identified')
Exemplo n.º 19
0
def show_directions_history():
    global rpg_game
    for d in rpg_game.player.directions_history:
        say(d)
Exemplo n.º 20
0
def whereami():
    global rpg_game
    room = rpg_game.current_room
    say("You are in " + room.name)
Exemplo n.º 21
0
def alias(name, cmd):
    # Method is handled before. So that line is not executed
    say("Creating alias " + name + " equal to " + cmd)
Exemplo n.º 22
0
 def show_status(self):
     say(self.name + ' HP ' + str(self.current_HP) + '/' + str(self.max_HP))
     say('Time to invoke to finish: ' + str(self.cast_time) + ' turns')
Exemplo n.º 23
0
 def status(self):
     say("Wizard Owl Lv " + str(self.level) + " (XP " +
         str(self.experience_points) + "/" + str(self.get_exp_for_next_level()) + ')')
     say("HP " + self.get_health_str())
     say("MP " + self.get_mana_str())
Exemplo n.º 24
0
def look():
    global rpg_game
    say(rpg_game.current_room)
    if rpg_game.current_room.items:
        for i in rpg_game.current_room.items:
            say('A %s is here.' % i)
Exemplo n.º 25
0
 def get_description(self):
     self.description.add_tag("target", "its target")
     say(e.description)