def handle_keys(): global key if GameState.game_state == 'playing': #movement keys if GameState.key.vk == libtcod.KEY_UP or GameState.key.vk == libtcod.KEY_KP8: player_move_or_attack(0, -1) elif GameState.key.vk == libtcod.KEY_DOWN or GameState.key.vk == libtcod.KEY_KP2: player_move_or_attack(0, 1) elif GameState.key.vk == libtcod.KEY_LEFT or GameState.key.vk == libtcod.KEY_KP4: player_move_or_attack(-1, 0) elif GameState.key.vk == libtcod.KEY_RIGHT or GameState.key.vk == libtcod.KEY_KP6: player_move_or_attack(1, 0) elif GameState.key.vk == libtcod.KEY_HOME or GameState.key.vk == libtcod.KEY_KP7: player_move_or_attack(-1, -1) elif GameState.key.vk == libtcod.KEY_PAGEUP or GameState.key.vk == libtcod.KEY_KP9: player_move_or_attack(1, -1) elif GameState.key.vk == libtcod.KEY_END or GameState.key.vk == libtcod.KEY_KP1: player_move_or_attack(-1, 1) elif GameState.key.vk == libtcod.KEY_PAGEDOWN or GameState.key.vk == libtcod.KEY_KP3: player_move_or_attack(1, 1) elif GameState.key.vk == libtcod.KEY_KP5 or GameState.key.vk == '.': pass #do nothing ie wait for the monster to come to you else: #test for other keys key_char = chr(GameState.key.c) if key_char == 'g': #pick up an item for object in GameState.objects: #look for an item in the player's tile if object.x == GameState.player.x and object.y == GameState.player.y and GameState.player.floor == object.floor and object.item: GameState.player.entity.Pick_Up(object) break if key_char == 'f': #(F)ire your weapon. AttackingWeapons = [] DefendingArmor = [] AttackingTypes = [] DefendingResistances = [] x = BodyParts.Part() y = Equipment.RangedWeapon() for x in GameState.player.entity.parts: if (isinstance(x,BodyParts.Part)): y = x.currentItem if isinstance(y, Equipment.RangedWeapon): AttackingWeapons.append(x.currentItem) if len(AttackingWeapons) > 0: GUI.message("Select a target to attack.") target = target_monster(AttackingWeapons[0].weapon_Range) if target != None: GameState.player.entity.melee_attack_entity(target.entity) GameState.player.move(0, 0) GameState.fov_recompute = True else: GUI.message("Cancelled") if key_char == 'i': #show the inventory; if an item is selected, use it chosen_item = GUI.inventory_menu('Press the key next to an item to use it, or any other to cancel.\n') if chosen_item is not None: chosen_item.use() if key_char == 'd': #show the inventory; if an item is selected, drop it chosen_item = GUI.inventory_menu('Press the key next to an item to drop it, or any other to cancel.\n') if chosen_item is not None: chosen_item.drop() if key_char == 'c': #show character information level_up_xp = cfg.LEVEL_UP_BASE + GameState.player.level * cfg.LEVEL_UP_FACTOR msgbox('Character Information\n\nLevel: ' + str(player.level) + '\nExperience: ' + str(GameState.player.fighter.xp) + '\nExperience to level up: ' + str(level_up_xp) + '\n\nMaximum HP: ' + str(GameState.player.fighter.max_hp) + '\nAttack: ' + str(GameState.player.fighter.power) + '\nDefense: ' + str(GameState.player.fighter.defense), cfg.CHARACTER_SCREEN_WIDTH) if key_char == '<': #go down stairs, if the player is on them if GameState.stairs.x == GameState.player.x and GameState.stairs.y == GameState.player.y: next_level() return 'didnt-take-turn'