(no commit message)
[asgard.git] / fighter.py
blob4602a70d6e739eda866994ab509e3d54f30d05bb
1 ########################################################
2 #Copyright (c) 2006 Russ Adams, Sean Eubanks, Asgard Contributors
3 #This file is part of Asgard.
5 #Asgard is free software; you can redistribute it and/or modify
6 #it under the terms of the GNU General Public License as published by
7 #the Free Software Foundation; either version 2 of the License, or
8 #(at your option) any later version.
10 #Asgard is distributed in the hope that it will be useful,
11 #but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 #GNU General Public License for more details.
15 #You should have received a copy of the GNU General Public License
16 #along with Asgard; if not, write to the Free Software
17 #Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 ########################################################
19 from random import *
20 from equiption import *
21 from event import *
22 class Fighter:
23 def __init__(self,name,level,exp,exptnl,hp,str,speed,dex,agility,wisdom,will,tom,plyble,equip,job):
24 """Constructor."""
25 self.__name = name
26 self.__level = level
27 self.__exp = exp
29 # this should probably be changed to expNextLevel
30 self.__expTillNextLevel = exp
32 self.__hp = hp
33 self.__strength = str
34 self.__speed = speed
35 self.__dexterity = dex
36 self.__agility = agility
37 self.__wisdom = wisdom
38 self.__will = will
39 self.__timeOfMove = tom
40 self.__playable = plyble
41 self.__equiption = equip
42 self.__job = job
44 def getName(self):
45 """Get fighter's name."""
46 return self.__name
48 def setName(self, n):
49 """Change fighter's name."""
50 self.__name = n
52 def getLevel(self):
53 """Get fighter's level """
54 return self.__level
56 def setLevel(self, level):
57 """Set fighter's level """
58 self.__level = level
60 def getExp(self):
61 """Get fighter's experience """
62 return self.__exp
64 def setExp(self, exp):
65 """Set fighter's experience """
66 self.__exp = exp
68 def getExpTillNextLevel(self):
69 """Get the amount of experience the fighter
70 needs to attain to get to the next level """
71 return self.__expTillNextLevel
73 def setExpTillNextLevel(self, exptnl):
74 """Set the amount of experience the fighter
75 needs to attain to get to the next level """
76 self.__expTillNextLevel = exptnl
78 def getHp(self):
79 """Get fighter's hp."""
80 return self.__hp
82 def setHp(self, h):
83 """Change fighter's hp."""
84 self.__hp = h
86 def getStrength(self):
87 """Get fighter's strength."""
88 return self.__strength
90 def setStrength(self, s):
91 """Change fighter's strength."""
92 self.__strength = s
94 def getSpeed(self):
95 """Get the fighter's speed (frequency of moves) """
96 return self.__speed
98 def setSpeed(self, speed):
99 """Set the fighter's speed (frequency of moves) """
100 self.__speed = speed
102 def getDexterity(self):
103 """Get fighter's dexterity. (who gets to go first among ready fighters)"""
104 return self.__dexterity
106 def setDexterity(self, d):
107 """Change figther's dexterity. (who gets to go first among ready fighters)"""
108 self.__dexterity = d
110 def getAgility(self):
111 """Get the fighter's agility. (how often they are missed when attacked """
112 return self.__agility
114 def setAgility(self, agility):
115 """Set the fighter's agility. (how often they are missed when attacked """
116 self.__agility = agility
118 def getWisdom(self):
119 """Get white magic effectiveness """
120 return self.__wisdom
122 def setWisdom(self, wisdom):
123 """Set white magic effectiveness """
124 self.__wisdom = wisdom
126 def getWill(self):
127 """Get black magic effectiveness """
128 return self.__will
130 def setWill(self, will):
131 """Set black magic effectiveness """
132 self.__will = will
134 def getTimeOfMove(self):
135 """Get fighter's time of move."""
136 return self.__timeOfMove
138 def setTimeOfMove(self, tMv):
139 """Change fighter's time of move."""
140 self.__timeOfMove = tMv
142 def getEquiption(self):
143 """Get equiption for fighter."""
145 return self.__equiption
147 def setEquiption(self, eq):
148 """Set equiption for fighter."""
150 self.__equiption = eq
152 def getPlayable(self):
153 """Is fighter playable?"""
154 return self.__playable
156 def setPlayable(self, plyble):
157 """Set fighter's playability."""
158 self.__playable = plyble
160 def getAttack(self):
161 """Compute value of attack."""
162 return self.__strength + self.__equiption.computeAtkMod()
164 def getDefense(self):
165 """Compute value of defense."""
166 return self.__equiption.computeDefMod()
168 def getEvade(self):
169 """Compute value of evade."""
170 return self.__agility + self.__equiption.computeEvaMod()
173 def makeEvent(self, eparty, currentTime, cont):
174 """ Check if ready to make move.
176 If so, select random fighter from enemy party and return.
179 if not self.isAlive():
180 return None
182 if self.__timeOfMove != currentTime:
183 return None
185 # Playable fighters have battle menu
186 if self.getPlayable():
187 # Show battle menu and choose event from battle menu
188 command = cont.getCommand(eparty,self)
189 d = command[0]
190 t = command[1]
192 # Nonplayable fighters
193 elif currentTime >= self.__timeOfMove:
194 x = randint(0,eparty.sizeOfParty()-1)
195 while not eparty.getFighter(x).isAlive():
196 x = randint(0,eparty.sizeOfParty()-1)
198 d = eparty.getFighter(x)
199 t = "Attack"
201 self.__timeOfMove += round((1/float(self.__speed))*100)
202 return Event(self,d,t)
204 def isAlive(self):
205 """If hp is greater than 0... return true"""
206 return (self.__hp > 0)
208 def getEventTypes(self):
209 """Return list of events available to fighter."""
210 return ["Attack"]
212 def getJob(self):
213 return self.__job
215 def setJob(self,job):
216 self.__job = job
218 def receiveExp(self,exp):
219 """Fighter receives experience for leveling up."""
220 # Add on exp
221 self.__exp += exp
223 # Tax off exp from expTillNextLevel
224 self.__expTillNextLevel -= exp
226 # Level up?
227 if self.__expTillNextLevel <= 0:
228 # Increase level number
229 self.__level += 1
231 ## Increase stats...
232 x = randint(1,100)
233 # Increase hp?
234 if x <= self.__job.getHpChance() * 100:
235 self.__hp += self.__job.getHpPlus()
237 x = randint(1,100)
238 # Increase strength?
239 if x <= self.__job.getStrChance() * 100:
240 self.__strength += self.__job.getStrPlus()
242 x = randint(1,100)
243 # Increase speed?
244 if x <= self.__job.getSpeedChance() * 100:
245 self.__speed += self.__job.getSpeedPlus()
247 x = randint(1,100)
248 # Increase dexterity?
249 if x <= self.__job.getDexChance() * 100:
250 self.__dexterity += self.__job.getDexPlus()
252 x = randint(1,100)
253 # Increase agility?
254 if x <= self.__job.getAgilityChance() * 100:
255 self.__agility += self.__job.getAgilityPlus()
257 x = randint(1,100)
258 # Increase wisdom?
259 if x <= self.__job.getWisdomChance() * 100:
260 self.__wisdom += self.__job.getWisdomPlus()
262 x = randint(1,100)
263 # Increase will?
264 if x <= self.__job.getWillChance() * 100:
265 self.__will += self.__job.getWillPlus()
267 # Set exp till next level
269 else:
270 # Set exp till next level
271 pass