diff options
-rw-r--r-- | MAFH2/BattleEngine.py | 54 | ||||
-rw-r--r-- | MAFH2/Dungeon.py | 33 | ||||
-rw-r--r-- | MAFH2/Profile.py | 22 | ||||
-rw-r--r-- | MAFH2/fortuneengine/GameEngine.py | 1 |
4 files changed, 85 insertions, 25 deletions
diff --git a/MAFH2/BattleEngine.py b/MAFH2/BattleEngine.py index b3d38b0..e9ae66e 100644 --- a/MAFH2/BattleEngine.py +++ b/MAFH2/BattleEngine.py @@ -8,6 +8,7 @@ from fortuneengine.DrawableObject import DrawableObject from fortuneengine.DynamicDrawableObject import DynamicDrawableObject from fortuneengine.Scene import Scene import pygame +import time from constants import CHAR_PATH, HUD_PATH @@ -36,6 +37,7 @@ class BattleEngine(GameEngineElement): self.state = PLAYER_WAIT self.player_input = '0' self.active_target = 1 + self.battleTimer = -1.0 for i in range(0,4): e_index = self.current_room.get_enemy( i ) @@ -69,7 +71,6 @@ class BattleEngine(GameEngineElement): self.isMagic = False random.seed() isCrit = random.randint(0,100) - if( isCrit > 90 ): #Show problem menu.show_menu('attack') @@ -77,10 +78,11 @@ class BattleEngine(GameEngineElement): tempR2 = random.randint(0,10) self.critAns = tempR1 * tempR2 menu.set_disp('%d x %d' %(tempR1, tempR2)) + self.battleTimer = time.time() self.state = PLAYER_MULT else: #Do Attack - print "Non Crit" + #print "Non Crit" menu.show_menu('selection') menu.set_sec_disp('') self.__attack_phase(menu) @@ -117,25 +119,28 @@ class BattleEngine(GameEngineElement): self.spellType = 1 self.isMagic = True self.magicWin = False + self.battleTimer = time.time() elif selection == 'lightning': self.game_engine.add_object('magicmenu', MagicMenuHolder( self.menu_callback ) ) self.game_engine.get_object('magicmenu').show_menu('lightning') self.spellType = 2 self.isMagic = True self.magicWin = False + self.battleTimer = time.time() elif selection == 'missile': self.game_engine.add_object('magicmenu', MagicMenuHolder( self.menu_callback ) ) self.game_engine.get_object('magicmenu').show_menu('missile') self.spellType = 3 self.isMagic = True self.magicWin = False + self.battleTimer = time.time() elif selection == 'heal': self.game_engine.add_object('magicmenu', MagicMenuHolder( self.menu_callback ) ) self.game_engine.get_object('magicmenu').show_menu('heal') self.spellType = 4 self.isMagic = True self.magicWin = False - + self.battleTimer = time.time() elif selection == 'scan': menu.set_disp('Enemy Scanned!') self.isMagic = False @@ -277,6 +282,14 @@ class BattleEngine(GameEngineElement): hero = self.game_engine.get_object('profile').hero damage = 0 curTarget = self.active_target - 1 + timeRatio = time.time() - self.battleTimer + self.battleTimer = -1.0 + if timeRatio < 10: + timeRatio = timeRatio / 10.0 + else: + timeRatio = 1.0 + tbonus = 1.0 - timeRatio + tbonus += 1.3 if self.isMagic: weakness = self.enemy_list[curTarget] spellTypes = ['none', 'fire', 'lightning', 'missile', 'heal', 'special'] @@ -286,21 +299,23 @@ class BattleEngine(GameEngineElement): damage += bonus if self.magicWin and not(self.spellType == 4): damage += hero.attackPower(spellTypes[self.spellType]) - self.enemy_list[curTarget].HP -= damage + damage *= tbonus + self.enemy_list[curTarget].HP -= int(damage) self.player_input = spellTypes[self.spellType] + ' cast!' elif self.spellType == 4: - hero.giveHealth(hero.attackPower('heal')) + hero.giveHealth(int(hero.attackPower('heal') * tbonus)) else: self.player_input = 'Spell fizzles' elif self.state == PLAYER_MULT: if self.correct: damage = hero.attackPower("critical") - self.enemy_list[curTarget].HP -= damage - self.player_input = "Your attack crits for " + str(damage) + " damage" + damage = damage * tbonus + self.enemy_list[curTarget].HP -= int(damage) + self.player_input = "Your attack crits for " + str(int(damage)) + " damage" else: damage = hero.attackPower('basic') self.enemy_list[curTarget].HP -= damage - self.player_input = "You attack for " + str(damage) + " damage" + self.player_input = "You attack for " + str(int(damage)) + " damage" #generate enemy attack @@ -319,7 +334,8 @@ class BattleEngine(GameEngineElement): hero.defendAttack(enemy.attackPower('critical')) else: hero.defendAttack(enemy.attackPower('basic')) - + if hero.healthPoints() <= 0: + self.__youDied() self.game_engine.get_object('profile').hero = hero self.state = PLAYER_WAIT @@ -359,6 +375,17 @@ class BattleEngine(GameEngineElement): self.game_engine.get_object('battlemenu').remove_from_engine() self.game_engine.remove_object('battle') + def __youDied(self): + #self.remove_from_engine() + #self.game_engine.get_object('battlemenu').remove_from_engine() + #self.game_engine.get_object('battle').remove_from_engine() + #self.game_engine.get_object('dungeon').remove_from_engine() + #self.game_engine.get_object('manager').remove_from_engine() + #self.game_engine.get_object('mesg').remove_from_engine() + #self.game_engine.get_object('map').remove_from_engine() + #self.game_engine.get_object('term + pass + def event_handler(self, event): if event.type == pygame.KEYDOWN: @@ -402,6 +429,13 @@ class BattleEngine(GameEngineElement): # Player Health health = 10 - profile.hero.healthLevel() + self.__drawableObjects['hp'].goToFrame(health) self.__drawableObjects['hp'].setPosition(25,25) - + + #Battle Timer + if(self.battleTimer > 0): + tIndex = int(time.time() - self.battleTimer) + if tIndex > 10: + tIndex = 10 + #screen.blit(self.__images['bt'][tIndex], (25,130)) diff --git a/MAFH2/Dungeon.py b/MAFH2/Dungeon.py index f3bc983..8791157 100644 --- a/MAFH2/Dungeon.py +++ b/MAFH2/Dungeon.py @@ -134,10 +134,12 @@ class Dungeon(GameEngineElement): for item in self.game_engine.get_object('profile').inventory: # Search for small key (ID: 'q') if item.id == 'q': - self.game_engine.get_object('mesg').add_line(_("You use a SMALL KEY")) + self.game_engine.get_object('mesg').add_line( + _("You use a SMALL KEY")) return True - self.game_engine.get_object('mesg').add_line(_("This door is locked, you need a SMALL KEY")) + self.game_engine.get_object('mesg').add_line( + _("This door is locked, you need a SMALL KEY")) return False elif door_type == PUZZLE_DOOR or door_type == LOCKED_PUZZLE_DOOR: @@ -145,7 +147,8 @@ class Dungeon(GameEngineElement): return False elif door_type == ENTRANCE_DOOR: - self.game_engine.get_object('mesg').add_line(_("There is no turning back now")) + self.game_engine.get_object('mesg').add_line( + _("There is no turning back now")) return False elif door_type == EXIT_DOOR: @@ -153,11 +156,13 @@ class Dungeon(GameEngineElement): for item in self.game_engine.get_object('profile').inventory: # Search for big key (ID: 'r') if item.id == 'r': - self.game_engine.get_object('mesg').add_line(_("You use the BIG KEY, and the door slams behind you!")) + self.game_engine.get_object('mesg').add_line( + _("You use the BIG KEY, and the door slams behind you!")) return True - self.game_engine.get_object('mesg').add_line(_("This door is locked, you need a BIG KEY")) + self.game_engine.get_object('mesg').add_line( + _("This door is locked, you need a BIG KEY")) return False return False @@ -187,20 +192,22 @@ class Dungeon(GameEngineElement): dY = y dc = 'W' - if self.rooms.has_key( (dX, dY) ): - door_flag = self.rooms[profile.position].get_door( dc ) + + + door_flag = self.rooms[profile.position].get_door( dc ) + if door_flag == EXIT_DOOR or door_flag == ENTRANCE_DOOR: + if self.move_permissions( door_flag ): + self.game_engine.get_object('profile').next_dungeon() + + elif self.rooms.has_key( (dX, dY) ): if self.move_permissions( door_flag ): self.game_engine.get_object('mesg').add_line(_("You enter room at %i,%i")%(dX, dY)) profile.move_to( dX, dY ) self.game_engine.get_object('map').update_macro() self.check_for_enemies() else: - #Entrance or exit may be on a border of the grid - door_flag = self.rooms[profile.position].get_door( dc ) - if door_flag == EXIT_DOOR or door_flag == ENTRANCE_DOOR: - if self.move_permissions( door_flag ): - # TODO: Next Dungeon - pass + #On a border of the grid + pass def check_for_enemies(self): current_room = self.get_current_room() diff --git a/MAFH2/Profile.py b/MAFH2/Profile.py index c2af1c7..0680118 100644 --- a/MAFH2/Profile.py +++ b/MAFH2/Profile.py @@ -5,7 +5,8 @@ from fortuneengine.DrawableFontObject import DrawableFontObject from fortuneengine.DrawableObject import DrawableObject from constants import MENU_PATH, NORTH, RIGHT, LEFT from Hero import Hero - +from Dungeon import Dungeon +from Items import Key from gettext import gettext as _ class Profile(GameEngineElement): @@ -60,6 +61,17 @@ class Profile(GameEngineElement): self.name_cb = name_entry_cb self.add_to_engine() + def next_dungeon(self): + self.position = (-1, -1) + self.playerFacin = NORTH + + d = self.game_engine.get_object('dungeon') + self.dungeon_id = d.next + d.remove_from_engine() + self.game_engine.remove_object('dungeon') + self.game_engine.add_object('dungeon', Dungeon( self.dungeon_id )) + self.remove_keys() + def load_from_json_string( self, recall_string ): print "TO BE IMPLEMENTED" @@ -89,6 +101,14 @@ class Profile(GameEngineElement): def give_item(self, item): self.inventory.append(item) + def remove_keys(self): + i = 0 + new_inv = [] + for item in self.inventory: + if not isinstance(item, Key): + new_inv.append(item) + self.inventory = new_inv + def add_to_engine(self): super( Profile, self).add_to_engine() diff --git a/MAFH2/fortuneengine/GameEngine.py b/MAFH2/fortuneengine/GameEngine.py index 2560612..1832089 100644 --- a/MAFH2/fortuneengine/GameEngine.py +++ b/MAFH2/fortuneengine/GameEngine.py @@ -236,7 +236,6 @@ class GameEngine(object): # Handle Game Quit Message if event.type == pygame.QUIT: self.__run_event = False - self.__run_draw = False # No-Op sent, draw if set to always draw elif event.type == pygame.NOEVENT: |