Пример #1
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
 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 ) )
Пример #3
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
Пример #4
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
Пример #5
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
Пример #6
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
Пример #7
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()
Пример #8
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."
                )
Пример #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
Пример #10
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
Пример #11
0
    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
Пример #12
0
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
Пример #13
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
Пример #14
0
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
Пример #15
0
    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
Пример #16
0
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
Пример #17
0
 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()