Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAFH2/BattleEngine.py54
-rw-r--r--MAFH2/Dungeon.py33
-rw-r--r--MAFH2/Profile.py22
-rw-r--r--MAFH2/fortuneengine/GameEngine.py1
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: