Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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."
                )
Ejemplo n.º 4
0
    def equip_or_whatevs( self, it, pc, myredraw ):
        """Equip, trade, drop, or whatever this item."""
        mymenu = charsheet.RightMenu( self.screen, predraw = myredraw )
        if it.equipped:
            mymenu.add_item( "Unequip Item", self.unequip_item )
        elif pc.can_equip( it ):
            mymenu.add_item( "Equip Item", self.equip_item )
        if hasattr( it, "use" ):
            mymenu.add_item( "Use Item", self.use_item )
        if hasattr( it, "spell" ) and not self.camp.library_has_spell( it.spell ):
            mymenu.add_item( "Learn Spell", self.learn_spell_from_item )
        mymenu.add_item( "Trade Item", self.trade_item )
        mymenu.add_item( "Drop Item", self.drop_item )
        mymenu.add_item( "Exit", False )
        mymenu.add_alpha_keys()

        n = mymenu.query()

        if n:
            result = n( it, pc, myredraw )
            myredraw.csheet.regenerate_avatar()
            self.view.regenerate_avatars( self.camp.party )
            return result
        else:
            return True
Ejemplo n.º 5
0
    def learn_spell( self, explo ):
        ''' Learn spell chosen from menu, adds that spell to your pcs techniques'''
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Learn New Spell" )

        sl = self.spell_list or explo.camp.known_spells

        while keep_going:
            mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )

            for s in sl:
                if s.can_be_learned( self.pc ) and not any( s.name == t.name for t in self.pc.techniques ):
                    mymenu.add_item( str( s ), s )
            mymenu.sort()
            mymenu.add_alpha_keys()
            mymenu.add_item( "Exit", False )
            myredraw.menu = mymenu
            mymenu.quick_keys[ pygame.K_LEFT ] = -1
            mymenu.quick_keys[ pygame.K_RIGHT ] = 1

            it = mymenu.query()
            if it == -1:
                n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it == 1:
                n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it:
                # A spell was selected. Deal with it.
                self.pc.techniques.append( it )
            else:
                keep_going = False
Ejemplo n.º 6
0
    def discard_spell( self, explo ):
        ''' Removes spell/technique from pc from menu choice '''
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Discard Known Spell" )

        while keep_going:
            mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )
            for s in self.pc.techniques:
                if isinstance( s, spells.Spell ):
                    mymenu.add_item( str( s ), s )
            mymenu.sort()
            mymenu.add_alpha_keys()
            mymenu.add_item( "Exit", False )
            myredraw.menu = mymenu
            mymenu.quick_keys[ pygame.K_LEFT ] = -1
            mymenu.quick_keys[ pygame.K_RIGHT ] = 1

            it = mymenu.query()
            if it == -1:
                n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it == 1:
                n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it:
                # A spell was selected. Deal with it.
                self.pc.techniques.remove( it )
            else:
                keep_going = False
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    def browse_spells( self, explo ):
        '''Browse shops spells'''
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="Browse Library" )

        while keep_going:
            mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )
            for s in explo.camp.known_spells:
                mymenu.add_item( str( s ), s )
            mymenu.sort()
            mymenu.add_alpha_keys()
            mymenu.add_item( "Exit", False )
            myredraw.menu = mymenu
            mymenu.quick_keys[ pygame.K_LEFT ] = -1
            mymenu.quick_keys[ pygame.K_RIGHT ] = 1

            it = mymenu.query()
            if it == -1:
                n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it == 1:
                n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            else:
                keep_going = False
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
0
 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 ) )
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
    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
Ejemplo n.º 13
0
def choose_appearance( screen, redraw, pc ):
    """Alter the appearance of the character."""
    done = False
    redraw.caption = "Customize your appearance."
    rpm = charsheet.RightMenu( screen , predraw = redraw )

    rpm.add_item( "Change skin color" , 1 )

    if pc.species.HAS_HAIR:
        rpm.add_item( "Change hair" , 2 )
        if ( pc.gender != stats.FEMALE ) or isinstance( pc.species, characters.Dwarf ):
            rpm.add_item( "Change beard" , 3 )

    rpm.add_item( "Change hat" , 4 )

    rpm.add_item( "Finished" , False )

    while not done:
        l = rpm.query()

        if l is False:
            done = True
        elif l == 1:
            pc.species.alter_skin_color()
            redraw.charsheet.regenerate_avatar()
        elif l == 2:
            pc.alter_hair()
            redraw.charsheet.regenerate_avatar()
        elif l == 3:
            pc.alter_beard()
            redraw.charsheet.regenerate_avatar()
        elif l == 4:
            alter_hat( pc )
            redraw.charsheet.regenerate_avatar()
Ejemplo n.º 14
0
def choose_level( screen, predraw, pc ):
    """Roll stats, return the level chosen by the player."""
    level = None
    predraw.caption = "Roll your stats and choose a profession."
    redraw = ChooseLevelRedrawer( predraw=predraw )
    while not level:
        possible_levels = []
        while not possible_levels:
            pc.roll_stats()
            possible_levels = get_possible_levels( pc )

        rpm = charsheet.RightMenu( screen , predraw = redraw )
        redraw.menu = rpm
        for l in possible_levels:
            rpm.add_item( l.name, l )
        rpm.sort()
        rpm.add_alpha_keys()
        rpm.add_item( "Reroll Stats", -1 )
        rpm.set_item_by_value( -1 )

        l = rpm.query()

        if l is False:
            break
        elif l != -1:
            level = l

    return level
Ejemplo n.º 15
0
    def enter_library( self, explo ):
        '''Find out what the PC wants to do when entering library - shows menu'''
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption=self.caption )

        mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )
        mymenu.add_item( "Learn New Spell", self.learn_spell )
        mymenu.add_item( "Discard Known Spell", self.discard_spell )
        mymenu.add_item( "Exit", False )
        mymenu.add_alpha_keys()
        myredraw.menu = mymenu
        mymenu.quick_keys[ pygame.K_LEFT ] = -1
        mymenu.quick_keys[ pygame.K_RIGHT ] = 1

        while keep_going:
            it = mymenu.query()
            if it == -1:
                n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it == 1:
                n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[ self.pc ]
            elif it:
                # A method was selected. Deal with it.
                it( explo )
                myredraw.csheet = self.charsheets[ self.pc ]
            else:
                keep_going = False
Ejemplo n.º 16
0
    def enter_shop( self, explo ):
        '''Find out what the PC wants to do.'''
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[self.pc], screen=explo.screen, predraw=explo.view, caption=self.caption )

        mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )
        mymenu.add_item( "Buy Items", self.buy_items )
        mymenu.add_item( "Sell Items", self.sell_items )
        mymenu.add_item( "Identify Items", self.identify_items )
        mymenu.add_item( "Exit", False )
        mymenu.add_alpha_keys()
        myredraw.menu = mymenu
        mymenu.quick_keys[ pygame.K_LEFT ] = -1
        mymenu.quick_keys[ pygame.K_RIGHT ] = 1

        while keep_going:
            it = mymenu.query()
            if it == -1:
                n = ( explo.camp.party.index(self.pc) + len( explo.camp.party ) - 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it == 1:
                n = ( explo.camp.party.index(self.pc) + 1 ) % len( explo.camp.party )
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it:
                # A method was selected. Deal with it.
                it( explo )
                myredraw.csheet = self.charsheets[self.pc]
            else:
                keep_going = False
Ejemplo n.º 17
0
def choose_gender( screen, redraw ):
    """Return the gender chosen by the player."""
    rpm = charsheet.RightMenu( screen , predraw = redraw )
    for g in range( 3 ):
        rpm.add_item( stats.GENDER[g], g, "Gender has no effect on a character's abilities." )
    rpm.add_alpha_keys()
    redraw.caption = "Select this character's gender."
    return rpm.query()
Ejemplo n.º 18
0
    def sell_items(self, explo):
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer(
            csheet=self.charsheets[self.pc],
            screen=explo.screen,
            predraw=explo.view,
            caption="Sell Items")
        last_item = 1

        while keep_going:
            mymenu = charsheet.RightMenu(explo.screen, predraw=myredraw)

            self.pc.contents.tidy()
            for s in self.pc.contents:
                if s.equipped:
                    mymenu.add_item(
                        "*{0} ({1}gp)".format(s, self.sale_price(s)), s)
                elif s.slot != items.NOSLOT and not self.pc.can_equip(s):
                    mymenu.add_item(
                        "#{0} ({1}gp)".format(s, self.sale_price(s)), s)
                else:
                    mymenu.add_item(
                        "{0} ({1}gp)".format(s, self.sale_price(s)), s)
            mymenu.sort()
            mymenu.add_alpha_keys()
            mymenu.add_item("Exit", False)
            mymenu.set_item_by_position(last_item)
            myredraw.menu = mymenu
            mymenu.quick_keys[pygame.K_LEFT] = -1
            mymenu.quick_keys[pygame.K_RIGHT] = 1

            it = mymenu.query()
            last_item = mymenu.selected_item
            if it is -1:
                n = (explo.camp.party.index(self.pc) + len(explo.camp.party) -
                     1) % len(explo.camp.party)
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it is 1:
                n = (explo.camp.party.index(self.pc) + 1) % len(
                    explo.camp.party)
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it:
                # An item was selected. Deal with it.
                self.pc.contents.remove(it)
                explo.camp.gold += self.sale_price(it)
                self.improve_friendliness(explo, it, modifier=-20)
                if it.enhancement:
                    it.identified = True
                    self.wares.append(it)
                myredraw.caption = "You have sold {0}.".format(it)
                if it.equipped:
                    myredraw.csheet.regenerate_avatar()
                    explo.view.regenerate_avatars(explo.camp.party)

            else:
                keep_going = False
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
def final_looks(screen, redraw, pc):
    redraw.caption = "Final Looks"
    rpm = charsheet.RightMenu(screen, predraw=redraw)
    rpm.add_item("Change Gender", 1)
    rpm.add_item("Change Race/Class", 2)
    rpm.add_item("Change Appearance", 4)

    rpm.add_item("I'm Done", 0)

    return rpm.query()
Ejemplo n.º 21
0
def choose_species( screen, predraw ):
    """Return the species chosen by the player."""
    redraw = ChooseSpeciesRedrawer( predraw=predraw )
    rpm = charsheet.RightMenu( screen , predraw = redraw )
    redraw.menu = rpm
    for s in characters.PC_SPECIES:
        rpm.add_item( s.name, s )
    rpm.sort()
    rpm.add_alpha_keys()
    redraw.caption = "Select this character's species."
    return rpm.query()
Ejemplo n.º 22
0
    def identify_items(self, explo):
        keep_going = True
        myredraw = charsheet.CharacterViewRedrawer(
            csheet=self.charsheets[self.pc],
            screen=explo.screen,
            predraw=explo.view,
            caption="Identify Items")

        while keep_going:
            mymenu = charsheet.RightMenu(explo.screen, predraw=myredraw)

            for s in self.pc.contents:
                if not s.identified:
                    if s.equipped:
                        mymenu.add_item(
                            "*{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s)
                    elif s.slot != items.NOSLOT and not self.pc.can_equip(s):
                        mymenu.add_item(
                            "#{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s)
                    else:
                        mymenu.add_item(
                            "{0} ({1}gp)".format(s, self.IDENTIFY_PRICE), s)
            mymenu.sort()
            mymenu.add_alpha_keys()
            mymenu.add_item("Exit", False)
            myredraw.menu = mymenu
            mymenu.quick_keys[pygame.K_LEFT] = -1
            mymenu.quick_keys[pygame.K_RIGHT] = 1

            it = mymenu.query()
            if it is -1:
                n = (explo.camp.party.index(self.pc) + len(explo.camp.party) -
                     1) % len(explo.camp.party)
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it is 1:
                n = (explo.camp.party.index(self.pc) + 1) % len(
                    explo.camp.party)
                self.pc = explo.camp.party[n]
                myredraw.csheet = self.charsheets[self.pc]
            elif it:
                # An item was selected. Deal with it.
                if explo.camp.gold >= self.IDENTIFY_PRICE:
                    it.identified = True
                    explo.camp.gold -= self.IDENTIFY_PRICE
                    myredraw.caption = "It's a {0}!".format(it)
                else:
                    myredraw.caption = "You can't afford it."
            else:
                keep_going = False
Ejemplo n.º 23
0
def choose_species(screen, predraw):
    """Return the species chosen by the player."""
    redraw = ChooseSpeciesRedrawer(predraw=predraw)
    redraw.caption = "Select Species"
    rpm = charsheet.RightMenu(screen, predraw=redraw)
    redraw.menu = rpm
    for s in characters.PC_SPECIES:
        rpm.add_item(s.name, s)
    rpm.sort()
    rpm.add_alpha_keys()
    rpm.add_item("Back", 0)
    rpm.add_item("Cancel Creation", False)
    query = rpm.query()
    return query
Ejemplo n.º 24
0
    def choose_job( self, explo ):
        ''' Choose job. Simple check for your level / job level '''
        myredraw = charsheet.CharacterViewRedrawer( csheet=self.charsheets[ self.pc ], screen=explo.screen, predraw=explo.view, caption="What job will {0} learn?".format(self.pc) )
        mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw, add_desc=False )

        for j in self.jobs:
            if j.can_take_level( self.pc ):
                # if you can even take the job because of level
                mymenu.add_item( j.name, j )
        mymenu.sort()
        mymenu.add_alpha_keys()
        mymenu.add_item( "Exit", False )
        myredraw.menu = mymenu

        it = mymenu.query()
        if it:
            self.pc.advance( it )
Ejemplo n.º 25
0
    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
Ejemplo n.º 26
0
    def trade_item( self, it, pc, redraw ):
        """Trade this item to another character."""
        mymenu = charsheet.RightMenu( self.screen, predraw = redraw )
        for opc in self.camp.party:
            if opc != pc and opc.is_alright():
                mymenu.add_item( str( opc ) , opc )
        mymenu.add_item( "Cancel" , False )
        mymenu.add_alpha_keys()

        opc = mymenu.query()
        if opc:
            pc.contents.unequip( it )
            if not it.equipped:
                if opc.can_take_item( it ):
                    pc.contents.remove( it )
                    opc.contents.append( it )
                else:
                    self.alert( "{0} can't carry any more.".format( str( opc ) ) )
        return True
Ejemplo n.º 27
0
    def make_wares_menu( self, explo, myredraw ):
        '''Returns menu for display when making wares'''
        mymenu = charsheet.RightMenu( explo.screen, predraw = myredraw )

        for s in self.wares:
            sname = str( s )
            scost = str( self.calc_purchase_price( explo, s ) )
            if hasattr( s, "spell" ) and not any( s.spell.name == t.name for t in explo.camp.known_spells ):
                sname = "(New) {0}".format( sname )
            if s.slot != items.NOSLOT and not self.pc.can_equip(s):
                mymenu.add_item( "#{} ({}gp)".format( sname, scost ), s )
            else:
                mymenu.add_item( "{} ({}gp)".format( sname, scost ), s )
        mymenu.sort()
        mymenu.add_alpha_keys()
        mymenu.add_item( "Exit", False )
        myredraw.menu = mymenu
        mymenu.quick_keys[ pygame.K_LEFT ] = -1
        mymenu.quick_keys[ pygame.K_RIGHT ] = 1
        return mymenu
Ejemplo n.º 28
0
    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
Ejemplo n.º 29
0
    def open_menu( self, camp, screen, predraw=None ):
        # Save the most recently used adventurer's guild. If all characters die,
        # this is where the game restarts.
        camp.mru_advguild = (self.scene,self)
        mypartysheet = charsheet.PartySheet( camp.party , screen=screen, camp=camp )
        myredraw = charsheet.CharacterViewRedrawer( csheet=mypartysheet, screen=screen, predraw=predraw, caption=self.caption )

        while True:
            rpm = charsheet.RightMenu( screen, predraw=myredraw )

            rpm.add_item( "Add Members", self.add_members )
            rpm.add_item( "Remove Members", self.remove_members )
            rpm.add_item( "Exit {0}".format(self.caption), False, self.desc )
            rpm.add_alpha_keys()

            it = rpm.query()

            if it:
                it( camp, screen, predraw )
                mypartysheet.regenerate_avatars()
            else:
                break
        camp.save( screen )
Ejemplo n.º 30
0
    def reorder_party( self ):
        new_party_order = list()
        psheet = charsheet.PartySheet( new_party_order, screen=self.screen, camp=self.camp )
        myredraw = charsheet.CharacterViewRedrawer( csheet=psheet, screen=self.screen, predraw=self.view, caption="Reorder Party" )

        while self.camp.party:
            mymenu = charsheet.RightMenu( self.screen, predraw = myredraw )
            for pc in self.camp.party:
                mymenu.add_item( str( pc ), pc )
            mymenu.add_alpha_keys()
            mymenu.add_item( "Exit", False )
            myredraw.menu = mymenu

            it = mymenu.query()
            if it:
                self.camp.party.remove( it )
                new_party_order.append( it )
                psheet.regenerate_avatars()
            else:
                break
        if self.camp.party:
            new_party_order += self.camp.party
        self.camp.party = new_party_order