def resurrection(self, explo): charsheets = dict() for pc in explo.camp.party: charsheets[pc] = charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp) for pc in explo.camp.graveyard: charsheets[pc] = charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp) psr = charsheet.PartySelectRedrawer(predraw=explo.view, charsheets=charsheets, screen=explo.screen, caption="Resurrection") while True: rpm = charsheet.RightMenu(explo.screen, predraw=psr, add_desc=False) psr.menu = rpm for pc in explo.camp.party: if not pc.is_alright(): rpm.add_item( "{0} - {1}gp".format(str(pc), self.resurrection_cost(pc)), pc) for pc in explo.camp.graveyard: rpm.add_item( "{0} - {1}gp".format(str(pc), self.resurrection_cost(pc)), pc) rpm.sort() rpm.add_alpha_keys() rpm.add_item("Exit", None) pc = rpm.query() if pc: if explo.camp.gold >= self.resurrection_cost(pc): pos = self.get_return_pos(explo) explo.camp.gold -= self.resurrection_cost(pc) pc.hp_damage = 0 pc.mp_damage = 0 del pc.condition[:] pc.holy_signs_used = 0 psr.caption = "{0} has returned!".format(str(pc)) if len(explo.camp.party ) < 4 and pc in explo.camp.graveyard: explo.camp.graveyard.remove(pc) explo.camp.party.append(pc) if pc in explo.camp.party: pc.place(explo.scene, pos) else: explo.camp.graveyard.remove(pc) pc.save() else: psr.caption = "You can't afford it!" else: break
def do_level_training( self, student ): myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(student, screen=self.screen, camp=self.camp), screen=self.screen, predraw=self.view, caption="Advance Rank" ) mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) mymenu.add_item( "Advance {0}".format( student.mr_level.name ) , student.mr_level.__class__ ) for j in student.levels: if j is not student.mr_level: mymenu.add_item( "Change to {0}".format( j.name ) , j.__class__ ) jobs = set() for pc in self.camp.party: for j in pc.levels: jobs.add( j.__class__ ) for j in student.levels: jobs.remove( j.__class__ ) for j in jobs: if j.can_take_level( student ): mymenu.add_item( "Learn {0}".format( j.name ) , j ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Cancel", False ) myredraw.menu = mymenu it = mymenu.query() if it: improved_stat = student.advance( it ) if improved_stat: self.alert( "{0} gains a rank in {1} \n and +1 {2}.".format( student, it.name, improved_stat ) ) else: self.alert( "{0} gains a rank in {1}.".format( student, it.name ) )
def remove_curse( self, explo ): ''' Lifts curse on all pc for gold ''' charsheets = dict() for pc in explo.camp.party: charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp ) psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=charsheets, screen=explo.screen, caption="Remove Curse" ) while True: rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in explo.camp.party: if pc.is_alright() and pc.condition.has_enchantment_of_type( enchantments.CURSE ): rpm.add_item( "{0} - {1}gp".format( str( pc ), self.remove_curse_cost( pc ) ) , pc ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Exit", None ) pc = rpm.query() if pc: if explo.camp.gold >= self.remove_curse_cost( pc ): explo.camp.gold -= self.remove_curse_cost( pc ) pc.condition.tidy( enchantments.CURSE ) psr.caption = "{0} has been freed!".format( str(pc) ) else: psr.caption = "You can't afford it!" else: break
def restoration( self, explo ): ''' Heals all players for gold ''' charsheets = dict() for pc in explo.camp.party: charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp ) psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=charsheets, screen=explo.screen, caption="Restoration" ) while True: rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in explo.camp.party: if pc.is_alright() and pc.stat_damage: rpm.add_item( "{0} - {1}gp".format( str( pc ), self.restoration_cost( pc ) ) , pc ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Exit", None ) pc = rpm.query() if pc: if explo.camp.gold >= self.restoration_cost( pc ): explo.camp.gold -= self.restoration_cost( pc ) pc.stat_damage.clear() psr.caption = "{0} has been healed!".format( str(pc) ) else: psr.caption = "You can't afford it!" else: break
def __call__( self, explo ): self.charsheets = dict() for pc in explo.camp.party: self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp ) psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to learn a new job?" ) keep_going = True self.pc = explo.camp.first_living_pc() while keep_going: rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in explo.camp.party: if self.can_take_at_least_one_job( pc ) and pc.xp >= pc.xp_for_next_level(): rpm.add_item( str( pc ), pc ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Exit", None ) rpm.set_item_by_value( self.pc ) pc = rpm.query() if pc: self.pc = pc self.choose_job( explo ) else: keep_going = False del self.charsheets
def __call__( self, explo ): if explo.camp.day > self.last_updated: self.update_wares( explo ) self.last_updated = explo.camp.day self.charsheets = dict() for pc in explo.camp.party: self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp ) psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to buy something?" ) rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in explo.camp.party: rpm.add_item( str( pc ), pc ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Exit", None ) keep_going = True self.pc = explo.camp.first_living_pc() while keep_going: rpm.set_item_by_value( self.pc ) pc = rpm.query() if pc: self.pc = pc self.enter_shop( explo ) else: keep_going = False del self.charsheets
def browse_pcs(screen): ''' Look at the previously created characters. Start by loading all characters from disk. ''' file_list = glob.glob(util.user_dir("c_*.sav")) pc_list = [] charsheets = dict() for fname in file_list: with open(fname, "rb") as f: pc = cPickle.load(f) if pc: pc_list.append(pc) charsheets[pc] = charsheet.CharacterSheet(pc, screen=screen) if pc_list: # adds party members to charsheet psr = charsheet.PartySelectRedrawer(charsheets=charsheets, screen=screen, caption="Browse Characters") rpm = charsheet.RightMenu(screen, predraw=psr, add_desc=False) psr.menu = rpm for pc in pc_list: rpm.add_item(str(pc), pc) rpm.sort() pc = rpm.query()
def __call__(self, explo): pc = explo.camp.party_spokesperson() myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp), screen=explo.screen, predraw=explo.view, caption=self.caption) rpm = charsheet.RightMenu(explo.screen, predraw=myredraw) mydesc = "It will cost {0}gp to stay the night.".format( self.cost_per_night) rpm.add_item("Stay the night.", True, mydesc) rpm.add_item("Not right now.", False, mydesc) rpm.add_alpha_keys() stay = rpm.query() if stay: if explo.camp.gold >= self.cost_per_night: explo.camp.gold -= self.cost_per_night explo.camp.rest() explo.alert( "You rest the night and wake up perfectly refreshed.") else: explo.alert( "You can't afford to stay here! Come back when you've earned some money." )
def __call__( self, explo ): self.charsheets = dict() for pc in explo.camp.party: self.charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=explo.screen, camp=explo.camp ) psr = charsheet.PartySelectRedrawer( predraw=explo.view, charsheets=self.charsheets, screen=explo.screen, caption="Who needs to change spells?" ) rpm = charsheet.RightMenu( explo.screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in explo.camp.party: rpm.add_item( str( pc ), pc ) rpm.sort() rpm.add_alpha_keys() rpm.add_item( "Browse Spells", 1 ) rpm.add_item( "Exit", None ) keep_going = True self.pc = explo.camp.first_living_pc() while keep_going: rpm.set_item_by_value( self.pc ) pc = rpm.query() if pc == 1: self.browse_spells( explo ) elif pc: self.pc = pc self.enter_library( explo ) else: keep_going = False del self.charsheets
def view_party( self, n, can_switch=True ): if n >= len( self.camp.party ): n = 0 pc = self.camp.party[ n ] keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp), screen=self.screen, predraw=self.view, caption="View Party" ) while keep_going: mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) pc.contents.tidy() for i in pc.contents: if i.equipped: mymenu.add_item( "*" + str( i ) , i ) elif i.slot != items.NOSLOT and not pc.can_equip( i ): mymenu.add_item( "#" + str( i ) , i ) else: mymenu.add_item( str( i ) , i ) if pc.xp > pc.xp_for_next_level(): mymenu.add_item( "!!!Advance Rank!!!", 999 ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu if can_switch: mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it is -1: n = ( n + len( self.camp.party ) - 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it is 1: n = ( n + 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it is 999: self.do_level_training( pc ) keep_going = False elif it: # An item was selected. Deal with it. if not self.equip_or_whatevs( it, pc, myredraw ): keep_going = False else: keep_going = False
def cast_explo_spell( self, n, can_switch=True ): if n >= len( self.camp.party ): n = 0 pc = self.camp.party[ n ] keep_going = True myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp), screen=self.screen, predraw=self.view, caption="Spells & Techniques" ) while keep_going: mymenu = charsheet.RightMenu( self.screen, predraw = myredraw ) self.add_spells_for_pc( pc, mymenu ) mymenu.sort() mymenu.add_alpha_keys() mymenu.add_item( "Exit", False ) myredraw.menu = mymenu if can_switch: mymenu.quick_keys[ pygame.K_LEFT ] = -1 mymenu.quick_keys[ pygame.K_RIGHT ] = 1 it = mymenu.query() if it is -1: n = ( n + len( self.camp.party ) - 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it is 1: n = ( n + 1 ) % len( self.camp.party ) pc = self.camp.party[n] myredraw.csheet = charsheet.CharacterSheet(pc, screen=self.screen, camp=self.camp) elif it: # A spell was selected. Deal with it. if pc.is_alright() and it.can_be_invoked( pc ): self.pc_use_technique( pc, it, it.exp_tar ) else: self.alert( "That technique cannot be used right now." ) keep_going = False else: keep_going = False
def make_character( screen ): """Generate and return a new player character.""" # We're gonna use the same redrawer for this entire process. redraw = charsheet.MenuRedrawer( screen = screen ) # Get gender. gender = choose_gender( screen , redraw ) if gender is False: return None # Get species. species = choose_species( screen , redraw ) if not species: return None pc = characters.Character( species = species(), gender = gender ) redraw.charsheet = charsheet.CharacterSheet( pc , screen = screen ) # Roll stats and pick a class. level = choose_level( screen, redraw, pc ) if not level: return None pc.levels.append( level(1,pc) ) give_starting_equipment( pc ) redraw.charsheet.regenerate_avatar() # Customize appearance. choose_appearance( screen, redraw, pc ) # Choose a name. redraw.caption = "Done!" name = pygwrap.input_string( screen, redrawer=redraw, prompt="Enter character name" ) if name: pc.name = name pc.choose_random_spells() return pc else: return None
def __call__(self, explo): pc = explo.camp.party_spokesperson() myredraw = charsheet.CharacterViewRedrawer( csheet=charsheet.CharacterSheet(pc, screen=explo.screen, camp=explo.camp), screen=explo.screen, predraw=explo.view, caption=self.caption) while True: rpm = charsheet.RightMenu(explo.screen, predraw=myredraw) if any(not pc.is_alright() for pc in explo.camp.party) or explo.camp.graveyard: rpm.add_item("Resurrection", self.resurrection, self.desc) if any((pc.is_alright() and pc.stat_damage) for pc in explo.camp.party): rpm.add_item("Restoration", self.restoration, self.desc) if any( (pc.is_alright() and pc.condition.has_enchantment_of_type(enchantments.POISON)) for pc in explo.camp.party): rpm.add_item("Cure Poison", self.cure_poison, self.desc) if any( (pc.is_alright() and pc.condition.has_enchantment_of_type(enchantments.CURSE)) for pc in explo.camp.party): rpm.add_item("Remove Curse", self.remove_curse, self.desc) rpm.add_item("Exit {0}".format(self.caption), False, self.desc) rpm.add_alpha_keys() it = rpm.query() if it: it(explo) else: break
def load_characters(party, screen, predraw=None, delete_file=True, max_party_size=4): file_list = glob.glob(util.user_dir("c_*.sav")) pc_list = [] charsheets = dict() for fname in file_list: f = open(fname, "rb") pc = cPickle.load(f) f.close() if pc: pc_list.append(pc) charsheets[pc] = charsheet.CharacterSheet(pc, screen=screen) psr = charsheet.PartySelectRedrawer(charsheets=charsheets, predraw=predraw, screen=screen, caption="Select Party Members") while len(party) < max_party_size: rpm = charsheet.RightMenu(screen, predraw=psr, add_desc=False) psr.menu = rpm for pc in pc_list: rpm.add_item(str(pc), pc) rpm.sort() rpm.add_alpha_keys() pc = rpm.query() if pc: pc_list.remove(pc) party.append(pc) if delete_file: pc.backup() os.remove(util.user_dir("c_{}.sav".format(pc.name))) else: break return party
def remove_members( self, camp, screen, predraw ): charsheets = dict() for pc in camp.party: charsheets[ pc ] = charsheet.CharacterSheet( pc , screen=screen ) psr = charsheet.PartySelectRedrawer( charsheets=charsheets, predraw=predraw, screen=screen, caption="Remove Party Members" ) while camp.party: rpm = charsheet.RightMenu( screen, predraw=psr, add_desc=False ) psr.menu = rpm for pc in camp.party: rpm.add_item( str( pc ), pc ) rpm.sort() rpm.add_alpha_keys() pc = rpm.query() if pc: camp.party.remove( pc ) camp.scene.contents.remove( pc ) if pc.is_alright(): pc.save() else: camp.graveyard.append( pc ) else: break
def make_character(screen): """Generate and return a new player character.""" # We're gonna use the same redrawer for this entire process. redraw = charsheet.MenuRedrawer(screen=screen) rpm = charsheet.RightMenu(screen, predraw=redraw) # rpm.query() # Get gender. gender = choose_gender(screen, redraw) if gender is False: return None redraw.caption = "Select this character's Race" # Get species. species = choose_species(screen, redraw) while species is 0: gender = choose_gender(screen, redraw) redraw.caption = "Select this character's Race" species = choose_species(screen, redraw) if not species or not gender: return None if not species: return None #displays the character sprite based on the gender and race selection pc = characters.Character(species=species(), gender=gender) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) # Roll stats and pick a class. level = choose_level(screen, redraw, pc) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) redraw.charsheet.regenerate_avatar() if not level: return None while level == 'change': temp = choose_species(screen, redraw) while temp is 0: gender = choose_gender(screen, redraw) pc = characters.Character(species=species(), gender=gender) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) temp = choose_species(screen, redraw) species = temp pc = characters.Character(species=species(), gender=gender) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) level = choose_level(screen, redraw, pc) redraw.charsheet.regenerate_avatar() # Customize appearance. d = choose_appearance(screen, redraw, pc) done = 1 while done != 0: done = final_looks(screen, redraw, pc) if done == 1: gender = choose_gender(screen, redraw) pc = characters.Character(species=species(), gender=gender) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) redraw.charsheet.regenerate_avatar() if done == 2: species = choose_species(screen, redraw) pc = characters.Character(species=species(), gender=gender) redraw.charsheet = charsheet.CharacterSheet(pc, screen=screen) redraw.charsheet.regenerate_avatar() level = choose_level(screen, redraw, pc) if not level: return None if done == 3: level = choose_level(screen, redraw, pc) if not level: return None if done == 4: d = choose_appearance(screen, redraw, pc) pc.levels.append(level(1, pc)) give_starting_equipment(pc) redraw.charsheet.regenerate_avatar() # Choose a name. redraw.caption = "Done!" name = pygwrap.input_string(screen, redrawer=redraw, prompt="Enter character name") if name: pc.name = name pc.choose_random_spells() return pc else: return None
def probe( self, target ): csheet = charsheet.CharacterSheet( target, screen=self.screen ) myredraw = charsheet.CharacterViewRedrawer( csheet=csheet, screen=self.screen, caption="Probe", predraw=self.view) mymenu = charsheet.RightMenu( self.screen, predraw=myredraw ) mymenu.add_item( "Close" , -1 ) mymenu.query()