def __init__(self, name, pos, sprite, hp, defense, res, strength, attack_kind, classes, equipments, strategy, lvl, skills, race, gold, interaction, compl_sprite=None): Movable.__init__( self, name, pos, sprite, hp, defense, res, Character.races_data[race]['move'] + Character.classes_data[classes[0]]['move'], strength, attack_kind, strategy, lvl, skills, compl_sprite) self.equipments = equipments self.classes = classes self.race = race self.gold = gold self.interaction = interaction self.join_team = False self.reach_ = [1] self.constitution = Character.races_data[race]['constitution'] + \ Character.classes_data[classes[0]]['constitution']
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, classes, equipments, strategy, lvl, race, gold, talk, compl_sprite=None): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, strategy, lvl, compl_sprite) self.equipments = equipments self.classes = classes self.race = race self.gold = gold self.dialog = talk
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, classes, equipments, strategy, lvl, race, gold, talk, compl_sprite=None): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, strategy, lvl, compl_sprite) self.equipments = equipments self.classes = classes self.race = race self.gold = gold self.dialog = talk self.constitution = Character.races_data[race]['constitution'] + \ Character.classes_data[classes[0]]['constitution']
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, xp_gain, strategy, lvl=1): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, strategy, lvl) '''Possible states : - 0 : Have to act - 1 : On move - 2 : Have to attack - 3 : Turn finished ''' self.xp_gain = int(xp_gain * ((1.1) ** (lvl - 1))) self.attack_kind = attack_kind
def attacked(self, ent, damages, kind): for eq in self.equipments: if kind == PHYSICAL: damages -= eq.get_def() elif kind == SPIRITUAL: damages -= eq.get_res() return Movable.attacked(self, ent, damages, kind)
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, xp_gain, strategy, lvl=1): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, strategy, lvl) self.xp_gain = int(xp_gain * (1.1**(lvl - 1)))
def save(self, tree_name): tree = Movable.save(self, tree_name) # Save class (if possible) if len(self.classes) > 0: class_el = etree.SubElement(tree, 'class') class_el.text = self.classes[ 0] # Currently, only first class is saved if any # Save race race = etree.SubElement(tree, 'race') race.text = self.race # Save gold gold = etree.SubElement(tree, 'gold') gold.text = str(self.gold) # Save inventory inv = etree.SubElement(tree, 'inventory') for it in self.items: it_el = etree.SubElement(inv, 'item') it_el.text = it.name # Save equipment equip = etree.SubElement(tree, 'equipment') for eq in self.equipments: eq_el = etree.SubElement(equip, eq.body_part) eq_el.text = eq.name return tree
def attacked(self, ent, damages, kind): for eq in self.equipments: if kind is DamageKind.PHYSICAL: damages -= eq.defense elif kind == DamageKind.SPIRITUAL: damages -= eq.res return Movable.attacked(self, ent, damages, kind)
def save(self): tree = Movable.save(self) # Save gold gold = etree.SubElement(tree, 'gold') gold.text = str(self.gold) return tree
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, classes, equipments, strategy, lvl, race, gold, talk, compl_sprite=None): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, strategy, lvl, compl_sprite) '''Possible states : - 0 : Have to act - 1 : On move - 2 : Have to attack - 3 : Turn finished ''' self.equipments = equipments self.classes = classes self.race = race self.gold = gold self.dialog = talk self.attack_kind = attack_kind
def get_stat_change(self, stat): malus = 0 if stat == 'speed': # Check if character as a malus to his movement due to equipment total weight exceeding constitution total_weight = sum([eq.weight for eq in self.equipments]) diff = total_weight - self.constitution malus = 0 if diff < 0 else -math.ceil(diff / 2) return malus + Movable.get_stat_change(self, stat)
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, strategy, reach, xp_gain, loot, lvl=1): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, attack_kind, strategy, lvl) self.reach = reach self.xp_gain = int(xp_gain * (1.1**(lvl - 1))) self.potential_loot = loot
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, xp_gain, lvl=1): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, lvl) '''Possible states : - 0 : Have to act - 1 : On move - 2 : Have to attack - 3 : Turn finished ''' self.state = 0 self.xp_gain = xp_gain
def save(self, tree_name): tree = Movable.save(self, tree_name) # Save class (if possible) if len(self.classes) > 0: class_el = etree.SubElement(tree, 'class') class_el.text = self.classes[0] # Currently, only first class is saved if any # Save race race = etree.SubElement(tree, 'race') race.text = self.race # Save gold gold = etree.SubElement(tree, 'gold') gold.text = str(self.gold) return tree
def save(self, tree_name): tree = Movable.save(self, tree_name) # Save loot loot = etree.SubElement(tree, "loot") for (item, probability) in self.potential_loot: if isinstance(item, Item): it_el = etree.SubElement(loot, 'item') it_name = etree.SubElement(it_el, 'name') else: # We assume item is gold it_el = etree.SubElement(loot, 'gold') it_name = etree.SubElement(it_el, 'amount') it_name.text = str(item) it_probability = etree.SubElement(it_el, 'probability') it_probability.text = str(probability) return tree
def move(self): Movable.move(self) if not self.on_move: self.state = 2
def set_move(self, pos): Movable.set_move(self, pos) self.state = 1
def __init__(self, name, pos, sprite, hp, defense, res, max_move, strength, classes, equipments, lvl): Movable.__init__(self, name, pos, sprite, hp, defense, res, max_move, strength, lvl) self.equipments = equipments self.classes = classes
def display(self, screen): Movable.display(self, screen) for eq in self.equipments: eq.display(screen, self.pos, True)
def random_movable_entity(min_hp=10, max_defense=10, max_res=10): attrs = random_movable_attributes(min_hp, max_defense, max_res) return Movable(attrs['name'], attrs['pos'], attrs['sprite'], attrs['hp'], attrs['defense'], attrs['res'], attrs['max_moves'], attrs['strength'], attrs['attack_kind'], attrs['strategy'])
def get_reach(self): reach = Movable.get_reach(self) w = self.get_weapon() if w is not None: reach = w.reach return reach
def lvl_up(self): Movable.lvl_up(self) self.stats_up()
from src.StartScreen import StartScreen from src import LoadFromXMLManager as Loader pg.init() # Load fonts fonts.init_fonts() # Window parameters pg.display.set_caption("In the name of the Five Cats") screen = pg.display.set_mode((MAIN_WIN_WIDTH, MAIN_WIN_HEIGHT)) # Load constant sprites Destroyable.init_constant_sprites() Breakable.init_constant_sprites() Movable.init_constant_sprites() Sidebar.init_constant_sprites() Level.init_constant_sprites() # Load some data races = Loader.load_races() classes = Loader.load_classes() Character.init_data(races, classes) clock = pg.time.Clock() start_screen = StartScreen(screen) quit_game = False while not quit_game: for e in pg.event.get():