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
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
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)
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)
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)
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)
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')
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
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
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, ))
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
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()
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
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)
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
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()
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)
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')
def show_directions_history(): global rpg_game for d in rpg_game.player.directions_history: say(d)
def whereami(): global rpg_game room = rpg_game.current_room say("You are in " + room.name)
def alias(name, cmd): # Method is handled before. So that line is not executed say("Creating alias " + name + " equal to " + cmd)
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')
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())
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)
def get_description(self): self.description.add_tag("target", "its target") say(e.description)