diff options
author | olpc user <olpc@xo-a7-50-46.localdomain> | 2010-11-05 21:03:58 (GMT) |
---|---|---|
committer | olpc user <olpc@xo-a7-50-46.localdomain> | 2010-11-05 21:03:58 (GMT) |
commit | 998c8b44819036ccfaa09ea9a36e803ae1e74c48 (patch) | |
tree | 19888ee2c7ba1e6dae6918bc8ed1f3e70d71169b /MAFH2/BattleEngine.py | |
parent | 239213cb02c1d2c426796c0099f51271c7ee341d (diff) |
committed files that were ignored during last commit (lose condition)
Diffstat (limited to 'MAFH2/BattleEngine.py')
-rw-r--r-- | MAFH2/BattleEngine.py | 899 |
1 files changed, 455 insertions, 444 deletions
diff --git a/MAFH2/BattleEngine.py b/MAFH2/BattleEngine.py index eb27f30..43d6fd1 100644 --- a/MAFH2/BattleEngine.py +++ b/MAFH2/BattleEngine.py @@ -1,444 +1,455 @@ -from fortuneengine.GameEngineElement import GameEngineElement -from Enemy import get_enemy -from BattleMenu import BattleMenuHolder -from MagicMenu import MagicMenuHolder -from Spritesheet import Spritesheet -from Items import get_item -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 - -from gettext import gettext as _ -import random - -PLAYER_WAIT = 1 -PLAYER_MULT = 2 -_dirtyList=[] - -class BattleEngine(GameEngineElement): - def __init__(self, dgn): - GameEngineElement.__init__(self, has_draw=True, has_event=True) - - self.dgn = dgn - self.current_room = dgn.get_current_room() - - self.font = pygame.font.SysFont("cmr10",18,False,False) - - self.enemy_list = [] - self.magic_list = [] - - self.spellType = 0 #0 = non, 1-4 are spells in order, 5 is special - self.isMagic = False - self.correct = False - 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 ) - - if e_index != '0': - curE = get_enemy( e_index ) - self.enemy_list.append( curE ) - self.add_to_scene([curE.get_sprite()]) - - # Preload images - self.__drawableObjects = {} - for i in ['arrow_select']: - self.__drawableObjects[i] = DrawableObject([pygame.image.load( HUD_PATH + i + ".gif" )], '') - self.add_to_scene([self.__drawableObjects[i]]) - - self.__drawableObjects['hp'] = DrawableObject(Spritesheet( HUD_PATH + "hp.gif" ).img_extract(11,1,100,100,[255,0,255]), '') - self.__drawableObjects['bt'] = DrawableObject(Spritesheet( HUD_PATH + "bt.gif" ).img_extract(1,11,100,25, [255,0,255]), '', True) - self.__drawableObjects['hp'].setColorKey((255,0,255)) - self.__drawableObjects['bt'].setColorKey((255,0,255)) - self.add_to_scene([self.__drawableObjects['hp']]) - self.add_to_scene([self.__drawableObjects['bt']]) - - self.add_to_engine() - self.game_engine.add_object('battlemenu', BattleMenuHolder( self.menu_callback ) ) - self.game_engine.get_object('battlemenu').show_menu('selection') - self.game_engine.get_object('mesg').add_line( _('Enemies present, prepare to fight!') ) - - def menu_callback(self, selection, menu): - if selection == 'attack_show': - menu.set_sec_disp('') - self.player_input = '' - self.isMagic = False - random.seed() - isCrit = random.randint(0,100) - if( isCrit > 90 ): - #Show problem - menu.show_menu('attack') - tempR1 = random.randint(0,10) - 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" - menu.show_menu('selection') - menu.set_sec_disp('') - self.__attack_phase(menu) - - - elif self.state == PLAYER_MULT: - self.isMagic = False - if selection == 'enter': - #figure out damage for crit attack - if self.player_input == '': - self.player_input = '0' - if int(self.player_input) == (self.critAns): - menu.set_disp('Correct!') - self.correct = True - else: - menu.set_disp('Incorrect') - self.correct = False - - menu.set_sec_disp('') - self.player_input = '' - self.__attack_phase(menu) - - elif selection == 'clear': - self.player_input = '' - menu.set_sec_disp('') - - else: - self.player_input = self.player_input + selection - menu.set_sec_disp( self.player_input ) - - elif selection == 'fire': - self.game_engine.add_object('magicmenu', MagicMenuHolder( self.menu_callback ) ) - self.game_engine.get_object('magicmenu').show_menu('fire') - 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 - self.__attack_phase(menu) - - elif selection == 'fire1': - if(0 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(0) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'fire2': - if(1 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(1) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'fire3': - if(2 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(2) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'fire4': - if(3 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(3) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'lig1': - if(0 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(0) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'lig2': - if(1 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(1) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'lig3': - if(2 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(2) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'lig4': - if(3 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(3) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'miss1': - if(0 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(0) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'miss2': - if(1 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(1) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'miss3': - if(2 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(2) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'miss4': - if(3 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(3) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'heal1': - if(0 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(0) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'heal2': - if(1 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(1) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'heal3': - if(2 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(2) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'heal4': - if(3 in self.magic_list): - self.__attack_phase(menu) - else: - self.magic_list.append(3) - if(len(self.magic_list) > 3): - self.magicWin = True - self.__attack_phase(menu) - elif selection == 'wrongchoice': - self.__attack_phase(menu) - - def __attack_phase(self, menu): - #do the correct damage to correct enemy - 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'] - bonus = 0 - if spellTypes[self.spellType] == weakness: - bonus = 60 - damage += bonus - if self.magicWin and not(self.spellType == 4): - damage += hero.attackPower(spellTypes[self.spellType]) - damage *= tbonus - self.enemy_list[curTarget].HP -= int(damage) - self.player_input = spellTypes[self.spellType] + ' cast!' - elif self.spellType == 4: - 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") - 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(int(damage)) + " damage" - - - #generate enemy attack - for enemy in self.enemy_list[:]: - if enemy.HP <= 0: - enemy.alive = False - self.enemy_list.remove(enemy) - enemy.get_sprite().makeTransparent(True) - self.active_target = 1 - if enemy.alive: - random.seed() - enemyAttack = random.randint(0,100) - if enemyAttack > 90: - hero.defendAttack(enemy.attackPower('special')) - elif enemyAttack < 6: - 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 - self.magic_list = [] - if (self.isMagic): - self.game_engine.get_object('magicmenu').remove_from_engine() - self.game_engine.remove_object('magicmenu') - else: - menu.show_menu('selection') - - self.game_engine.get_object('battlemenu').set_disp(self.player_input) - - #Are enemies dead? - if not self.enemy_list: - self.__end_battle(menu) - - def __end_battle(self, menu): - #Give items if any - room = self.game_engine.get_object('dungeon').get_current_room() - - for i in range( 0, 4 ): - item_key = room.get_item( i ) - # If visible, remove from room and place in players inventory - if item_key[0] != '0' and item_key[1] == 'b': - item = get_item( item_key[0] ) - self.game_engine.get_object('profile').give_item( item ) - room.remove_item( i ) - self.game_engine.get_object('mesg').add_line(_("%s dropped!")% item.name) - room.has_enemy = False - - #self terminate - #print 'end battle called' - self.remove_from_engine() - - 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: - - newKey=pygame.key.name(event.key) - - if newKey=='[4]' or newKey=='left': - self.active_target -= 1 - if self.active_target < 1: - self.active_target = len(self.enemy_list) - return True - elif newKey=='[6]' or newKey=='right': - self.active_target += 1 - if self.active_target > len(self.enemy_list): - self.active_target = 1 - return True - - elif newKey=='return': - self.enemy = self.active_target - return True - - - # We don't want to allow other things to run during battle - return True - - def draw(self): - x=250 - y=150 - i = 1 - - tick_time = pygame.time.get_ticks() - - # Draw Enemy and Item Selection - for enemy in self.enemy_list: - if enemy.alive and self.active_target == i: - self.__drawableObjects['arrow_select'].setPosition(x+(i*200),y-25) - enemy.get_sprite().setPosition(x+(i*200),y) - i = i+1 - - # Draw Hud - profile = self.game_engine.get_object('profile') - - # Player Health - health = 10 - profile.hero.healthLevel() - - self.__drawableObjects['hp'].goToFrame(health) - self.__drawableObjects['hp'].setPosition(25,25) - - #Battle Timer - if(self.battleTimer > 0): - self.__drawableObjects['bt'].makeTransparent(False) - self.__drawableObjects['bt'].setPosition(25,130) - tIndex = int(time.time() - self.battleTimer) - if tIndex > 10: - tIndex = 10 - self.__drawableObjects['bt'].goToFrame(tIndex) - else: - self.__drawableObjects['bt'].makeTransparent(True) +from fortuneengine.GameEngineElement import GameEngineElement
+from Enemy import get_enemy
+from BattleMenu import BattleMenuHolder
+from MagicMenu import MagicMenuHolder
+from Spritesheet import Spritesheet
+from Items import get_item
+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
+
+from gettext import gettext as _
+import random
+
+PLAYER_WAIT = 1
+PLAYER_MULT = 2
+_dirtyList=[]
+
+class BattleEngine(GameEngineElement):
+ def __init__(self, dgn):
+ GameEngineElement.__init__(self, has_draw=True, has_event=True)
+
+ self.dgn = dgn
+ self.current_room = dgn.get_current_room()
+
+ self.font = pygame.font.SysFont("cmr10",18,False,False)
+
+ self.enemy_list = []
+ self.magic_list = []
+
+ self.spellType = 0 #0 = non, 1-4 are spells in order, 5 is special
+ self.isMagic = False
+ self.correct = False
+ 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 )
+
+ if e_index != '0':
+ curE = get_enemy( e_index )
+ self.enemy_list.append( curE )
+ self.add_to_scene([curE.get_sprite()])
+
+ # Preload images
+ self.__drawableObjects = {}
+ for i in ['arrow_select']:
+ self.__drawableObjects[i] = DrawableObject([pygame.image.load( HUD_PATH + i + ".gif" )], '')
+ self.add_to_scene([self.__drawableObjects[i]])
+
+ self.__drawableObjects['hp'] = DrawableObject(Spritesheet( HUD_PATH + "hp.gif" ).img_extract(11,1,100,100,[255,0,255]), '')
+ self.__drawableObjects['bt'] = DrawableObject(Spritesheet( HUD_PATH + "bt.gif" ).img_extract(1,11,100,25, [255,0,255]), '', True)
+ self.__drawableObjects['hp'].setColorKey((255,0,255))
+ self.__drawableObjects['bt'].setColorKey((255,0,255))
+ self.add_to_scene([self.__drawableObjects['hp']])
+ self.add_to_scene([self.__drawableObjects['bt']])
+
+ self.add_to_engine()
+ self.game_engine.add_object('battlemenu', BattleMenuHolder( self.menu_callback ) )
+ self.game_engine.get_object('battlemenu').show_menu('selection')
+ self.game_engine.get_object('mesg').add_line( _('Enemies present, prepare to fight!') )
+
+ def menu_callback(self, selection, menu):
+ if selection == 'attack_show':
+ menu.set_sec_disp('')
+ self.player_input = ''
+ self.isMagic = False
+ random.seed()
+ isCrit = random.randint(0,100)
+ if( isCrit > 90 ):
+ #Show problem
+ menu.show_menu('attack')
+ tempR1 = random.randint(0,10)
+ 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"
+ menu.show_menu('selection')
+ menu.set_sec_disp('')
+ self.__attack_phase(menu)
+
+
+ elif self.state == PLAYER_MULT:
+ self.isMagic = False
+ if selection == 'enter':
+ #figure out damage for crit attack
+ if self.player_input == '':
+ self.player_input = '0'
+ if int(self.player_input) == (self.critAns):
+ menu.set_disp('Correct!')
+ self.correct = True
+ else:
+ menu.set_disp('Incorrect')
+ self.correct = False
+
+ menu.set_sec_disp('')
+ self.player_input = ''
+ self.__attack_phase(menu)
+
+ elif selection == 'clear':
+ self.player_input = ''
+ menu.set_sec_disp('')
+
+ else:
+ self.player_input = self.player_input + selection
+ menu.set_sec_disp( self.player_input )
+
+ elif selection == 'fire':
+ self.game_engine.add_object('magicmenu', MagicMenuHolder( self.menu_callback ) )
+ self.game_engine.get_object('magicmenu').show_menu('fire')
+ 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
+ self.__attack_phase(menu)
+
+ elif selection == 'fire1':
+ if(0 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(0)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'fire2':
+ if(1 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(1)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'fire3':
+ if(2 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(2)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'fire4':
+ if(3 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(3)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'lig1':
+ if(0 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(0)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'lig2':
+ if(1 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(1)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'lig3':
+ if(2 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(2)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'lig4':
+ if(3 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(3)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'miss1':
+ if(0 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(0)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'miss2':
+ if(1 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(1)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'miss3':
+ if(2 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(2)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'miss4':
+ if(3 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(3)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'heal1':
+ if(0 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(0)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'heal2':
+ if(1 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(1)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'heal3':
+ if(2 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(2)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'heal4':
+ if(3 in self.magic_list):
+ self.__attack_phase(menu)
+ else:
+ self.magic_list.append(3)
+ if(len(self.magic_list) > 3):
+ self.magicWin = True
+ self.__attack_phase(menu)
+ elif selection == 'wrongchoice':
+ self.__attack_phase(menu)
+
+ def __attack_phase(self, menu):
+ #do the correct damage to correct enemy
+ 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']
+ bonus = 0
+ if spellTypes[self.spellType] == weakness:
+ bonus = 60
+ damage += bonus
+ if self.magicWin and not(self.spellType == 4):
+ damage += hero.attackPower(spellTypes[self.spellType])
+ damage *= tbonus
+ self.enemy_list[curTarget].HP -= int(damage)
+ self.player_input = spellTypes[self.spellType] + ' cast!'
+ elif self.spellType == 4:
+ 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")
+ 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(int(damage)) + " damage"
+
+
+ #generate enemy attack
+ for enemy in self.enemy_list[:]:
+ if enemy.HP <= 0:
+ enemy.alive = False
+ self.enemy_list.remove(enemy)
+ enemy.get_sprite().makeTransparent(True)
+ self.active_target = 1
+ if enemy.alive:
+ random.seed()
+ enemyAttack = random.randint(0,100)
+ if enemyAttack > 90:
+ hero.defendAttack(enemy.attackPower('special'))
+ elif enemyAttack < 6:
+ hero.defendAttack(enemy.attackPower('critical'))
+ else:
+ hero.defendAttack(enemy.attackPower('basic'))
+ if hero.healthPoints() <= 0:
+ self.__youDied()
+ return
+
+ self.game_engine.get_object('profile').hero = hero
+ self.state = PLAYER_WAIT
+ self.magic_list = []
+ if (self.isMagic):
+ self.game_engine.get_object('magicmenu').remove_from_engine()
+ self.game_engine.remove_object('magicmenu')
+ else:
+ menu.show_menu('selection')
+
+ self.game_engine.get_object('battlemenu').set_disp(self.player_input)
+
+ #Are enemies dead?
+ if not self.enemy_list:
+ self.__end_battle(menu)
+
+ def __end_battle(self, menu):
+ #Give items if any
+ room = self.game_engine.get_object('dungeon').get_current_room()
+
+ for i in range( 0, 4 ):
+ item_key = room.get_item( i )
+ # If visible, remove from room and place in players inventory
+ if item_key[0] != '0' and item_key[1] == 'b':
+ item = get_item( item_key[0] )
+ self.game_engine.get_object('profile').give_item( item )
+ room.remove_item( i )
+ self.game_engine.get_object('mesg').add_line(_("%s dropped!")% item.name)
+ room.has_enemy = False
+
+ #self terminate
+ #print 'end battle called'
+ self.remove_from_engine()
+
+ self.game_engine.get_object('battlemenu').remove_from_engine()
+ self.game_engine.remove_object('battlemenu')
+ 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.remove_object('battlemenu')
+ self.game_engine.remove_object('battle')
+
+ self.game_engine.get_object('profile').reload_dungeon( )
+
+ self.game_engine.get_object('mesg').add_line(
+ _("You have been defeated in battle and resurrected."))
+
+ #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
+
+ def event_handler(self, event):
+ if event.type == pygame.KEYDOWN:
+
+ newKey=pygame.key.name(event.key)
+
+ if newKey=='[4]' or newKey=='left':
+ self.active_target -= 1
+ if self.active_target < 1:
+ self.active_target = len(self.enemy_list)
+ return True
+ elif newKey=='[6]' or newKey=='right':
+ self.active_target += 1
+ if self.active_target > len(self.enemy_list):
+ self.active_target = 1
+ return True
+
+ elif newKey=='return':
+ self.enemy = self.active_target
+ return True
+
+
+ # We don't want to allow other things to run during battle
+ return True
+
+ def draw(self):
+ x=250
+ y=150
+ i = 1
+
+ tick_time = pygame.time.get_ticks()
+
+ # Draw Enemy and Item Selection
+ for enemy in self.enemy_list:
+ if enemy.alive and self.active_target == i:
+ self.__drawableObjects['arrow_select'].setPosition(x+(i*200),y-25)
+ enemy.get_sprite().setPosition(x+(i*200),y)
+ i = i+1
+
+ # Draw Hud
+ profile = self.game_engine.get_object('profile')
+
+ # Player Health
+ health = 10 - profile.hero.healthLevel()
+
+ self.__drawableObjects['hp'].goToFrame(health)
+ self.__drawableObjects['hp'].setPosition(25,25)
+
+ #Battle Timer
+ if(self.battleTimer > 0):
+ self.__drawableObjects['bt'].makeTransparent(False)
+ self.__drawableObjects['bt'].setPosition(25,130)
+ tIndex = int(time.time() - self.battleTimer)
+ if tIndex > 10:
+ tIndex = 10
+ self.__drawableObjects['bt'].goToFrame(tIndex)
+ else:
+ self.__drawableObjects['bt'].makeTransparent(True)
|