Пример #1
0
 def save_surf(self, surf):
     image_name = ''.join([
         self.klass,
         str(self.gender), '_', self.name, '_', self.pose, '_',
         str(self.counter), '.png'
     ])
     Engine.save_surface(surf, image_name)
     self.counter += 1
     return image_name
Пример #2
0
def run(gameStateObj, metaDataObj):
    gameStateObj.message.append(Dialogue.Dialogue_Scene('Data/fight_quote_info.txt', event_flag=False, if_flag=True))
    gameStateObj.stateMachine.changeState('dialogue')
    counter = 0
    while gameStateObj.message:
        Engine.update_time()
        counter += 1
        if not counter%50:
            pyautogui.press('x')
        eventList = Engine.build_event_list()
        mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
        while repeat:
            mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
        GC.DISPLAYSURF.blit(mapSurf, (0, 0))
        pygame.display.update()
Пример #3
0
    def __init__(self, klass, gender, name, item):
        self.unit = None  # Dummy unit object since we probably don't need it
        if item and item.TYPE:
            magic = any([t in item.TYPE for t in ('Anima', 'Dark', 'Light')])
        else:
            magic = False
        anim = GC.ANIMDICT.partake(klass, gender, item, magic)
        if anim:
            # Build animation
            script = anim['script']
            frame_dir = anim['images'][name]
            anim = BattleAnimation.BattleAnimation(self.unit, frame_dir, script, name, item)
            anim.awake(owner=self, parent=None, partner=None, right=True, at_range=False) # Stand
        self.anim = anim
        self.anim_offset = 120

        # For darken backgrounds and drawing
        self.darken_background = 0
        self.target_dark = 0
        self.darken_ui_background = 0
        self.foreground = MenuFunctions.Foreground()
        self.combat_surf = Engine.create_surface((GC.WINWIDTH, GC.WINHEIGHT), transparent=True)

        self.counter = 1
        self.timer = 0

        self.klass, self.gender, self.name, self.item = klass, gender, name, item
        self.pose = 'Stand'
        self.outcom = 0
        self.def_damag = 0
def run(gameStateObj, metaDataObj, fp):
    if os.path.exists(fp):
        print(fp)
        gameStateObj.message.append(Dialogue.Dialogue_Scene(fp, unit=gameStateObj.allunits[0], if_flag=True))
        gameStateObj.stateMachine.changeState('dialogue')
        counter = 0
        while gameStateObj.message:
            Engine.update_time()
            counter += 1
            if not counter%50:
                pyautogui.press('x')
            eventList = Engine.build_event_list()
            mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
            while repeat:
                mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
            GC.DISPLAYSURF.blit(mapSurf, (0, 0))
            pygame.display.update()
Пример #5
0
def run(gameStateObj, metaDataObj):
    my_list = gameStateObj.stateMachine.state[-5:]
    while True:
        if cf.OPTIONS['debug']:
            my_new_list = gameStateObj.stateMachine.state[-5:]
            if my_new_list != my_list:
                logger.debug('Current states %s', [state.name for state in gameStateObj.stateMachine.state])
                my_list = my_new_list
                # logger.debug('Active Menu %s', gameStateObj.activeMenu)
        Engine.update_time()

        # Get events
        eventList = Engine.build_event_list()

        # === UPDATE USER STATES ===
        mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
        while repeat:
            # We don't need to process the eventList more than once I think
            mapSurf, repeat = gameStateObj.stateMachine.update([], gameStateObj, metaDataObj)
        # Update global sprite counters
        GC.PASSIVESPRITECOUNTER.update()
        GC.ACTIVESPRITECOUNTER.update()
        GC.CURSORSPRITECOUNTER.update()
        # Update global music thread
        Engine.music_thread.update(eventList)

        new_size = (GC.WINWIDTH * cf.OPTIONS['Screen Size'], GC.WINHEIGHT * cf.OPTIONS['Screen Size'])
        Engine.push_display(mapSurf, new_size, GC.DISPLAYSURF)
        # Keep gameloop (update, renders, etc) ticking
        Engine.update_display()
        gameStateObj.playtime += GC.FPSCLOCK.tick(GC.FPS)
Пример #6
0
def run(gameStateObj, metaDataObj, unit):
    print(unit.name)
    unit.isDying = True
    gameStateObj.stateMachine.changeState('dying')
    gameStateObj.message.append(Dialogue.Dialogue_Scene(metaDataObj['death_quotes'], unit, event_flag=False))
    gameStateObj.stateMachine.changeState('dialogue')
    counter = 0
    while gameStateObj.message:
        Engine.update_time()
        counter += 1
        if not counter%50:
            pyautogui.press('x')
        eventList = Engine.build_event_list()
        mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
        while repeat:
            mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
        GC.DISPLAYSURF.blit(mapSurf, (0, 0))
        pygame.display.update()
Пример #7
0
    def __init__(self, pos):
        self.x = pos[0]
        self.y = pos[1]
        rng = random.randint(0, 2)
        self.sprite = EditorUtilities.create_image(
            Engine.subsurface(GC.IMAGESDICT['Snow'], (0, rng * 8, 8, 8)))
        self.speed = random.choice([1.0, 1.5, 2.0, 2.5, 3.0])
        self.remove_me = False

        self.floor = False
Пример #8
0
def run(gameStateObj, metaDataObj):
    while True:
        Engine.update_time()

        # Get events
        eventList = Engine.build_event_list()

        # Update global music thread
        Engine.music_thread.update(eventList)

        # === UPDATE USER STATES ===
        mapSurf, repeat = gameStateObj.stateMachine.update(
            eventList, gameStateObj, metaDataObj)

        while repeat:
            # We don't need to process the eventList more than once I think
            mapSurf, repeat = gameStateObj.stateMachine.update([],
                                                               gameStateObj,
                                                               metaDataObj)

        # Update global sprite counters
        GC.PASSIVESPRITECOUNTER.update()
        GC.ACTIVESPRITECOUNTER.update()
        GC.CURSORSPRITECOUNTER.update()

        #new_size = (cf.OPTIONS['Screen Width'], cf.OPTIONS['Screen Height'])

        draw_rect = GC.TEMPCANVASRECT

        Engine.push_display(mapSurf, (draw_rect[2], draw_rect[3]),
                            GC.TEMPCANVAS)

        GC.DISPLAYSURF.blit(GC.TEMPCANVAS, draw_rect)
        #Engine.push_display(mapSurf, new_size, GC.DISPLAYSURF)

        # Check for taking screenshot
        for event in eventList:
            if event.type == Engine.KEYDOWN and event.key == Engine.key_map[
                    '`']:
                current_time = str(datetime.now()).replace(' ', '_').replace(
                    ':', '.')
                Engine.save_surface(mapSurf,
                                    "Lex_Talionis_%s.png" % current_time)
        # Keep gameloop (update, renders, etc) ticking

        Engine.update_display()

        gameStateObj.playtime += GC.FPSCLOCK.tick(GC.FPS)
Пример #9
0
 def __init__(self, pos):
     self.x = pos[0]
     self.y = pos[1]
     self.full_sprite = GC.IMAGESDICT['FireParticle']
     self.sprites = [
         EditorUtilities.create_image(
             Engine.subsurface(self.full_sprite, (0, i * 2, 3, 2)))
         for i in range(6)
     ]
     self.speed = random.randint(1, 4)
     self.remove_me = False
     self.sprite = self.sprites[-1]
Пример #10
0
    def draw(self):
        surf = Engine.create_surface((GC.WINWIDTH, GC.WINHEIGHT),
                                     transparent=True)
        Engine.fill(surf, (128, 160, 128))
        if self.darken_background or self.target_dark:
            bg = Image_Modification.flickerImageTranslucent(
                GC.IMAGESDICT['BlackBackground'],
                100 - abs(int(self.darken_background * 12.5)))
            surf.blit(bg, (0, 0))
            if self.target_dark > self.darken_background:
                self.darken_background += 1
            elif self.target_dark < self.darken_background:
                self.darken_background -= 1

        # Make combat surf
        combat_surf = Engine.copy_surface(self.combat_surf)

        if self.darken_ui_background:
            self.darken_ui_background = min(self.darken_ui_background, 4)
            # bg = Image_Modification.flickerImageTranslucent(GC.IMAGESDICT['BlackBackground'], 100 - abs(int(self.darken_ui_background*11.5)))
            color = 255 - abs(self.darken_ui_background * 24)
            Engine.fill(combat_surf, (color, color, color), None,
                        Engine.BLEND_RGB_MULT)
            # combat_surf.blit(bg, (0, 0))
            self.darken_ui_background += 1

        surf.blit(combat_surf, (0, 0))

        self.anim.draw_under(surf, (0, 0))
        self.anim.draw(surf, (0, 0))
        self.anim.draw_over(surf, (0, 0))

        self.foreground.draw(surf)

        return surf
Пример #11
0
    def disp_unit(self, unit):
        self.current_unit = unit

        # Face
        self.smile()  # Check these
        self.talk()
        unit.portrait.create_image()
        pixmap = create_pixmap(
            Engine.transform_scale(unit.portrait.image.convert_alpha(),
                                   (96 * 2, 80 * 2)), self.window)
        self.portrait.setPixmap(pixmap)
        self.portrait_pos_boxes[0].setValue(unit.portrait.blink_position[0])
        self.portrait_pos_boxes[1].setValue(unit.portrait.blink_position[1])
        self.portrait_pos_boxes[2].setValue(unit.portrait.mouth_position[0])
        self.portrait_pos_boxes[3].setValue(unit.portrait.mouth_position[1])

        # Char data
        self.name.setText(unit.name)
        # self.team.setCurrentIndex(self.teams.index(unit.team))
        self.gender.setValue(unit.gender)
        self.level.setValue(unit.level)
        self.faction.setText(unit.faction)
        self.lord.setChecked('Lord' in unit.tags)
        self.boss.setChecked('Boss' in unit.tags)
        self.desc.setText(unit.desc)
        self.klass.setCurrentIndex([k['name']
                                    for k in class_data].index(unit.klass))

        for index, (stat_name, stat) in enumerate(unit.stats.iteritems()):
            self.stat_bases[index].setValue(stat.base_stat)
            self.stat_growths[index].setValue(unit.growths[index])

        for index, wexp in enumerate(unit.wexp):
            self.wexp[index].setValue(wexp)

        self.clear_items()
        for index, item in enumerate(unit.items):
            self.add_item()
            item_box, drop_box, event_box = self.items[index]
            drop_box.setChecked(item.droppable)
            event_box.setChecked(item.event_combat)
            item_box.setCurrentIndex([i.name
                                      for i in item_data].index(item.name))

        self.clear_skills()
        for index, skill in enumerate(unit.skills):
            self.add_skill()
            skill_box = self.skills[index]
            skill_box.setCurrentIndex([s.id
                                       for s in skill_data].index(skill.id))
Пример #12
0
class DefaultUnit(object):
    portrait = Engine.subsurface(GC.UNITDICT['GenericPortrait'],
                                 (0, 0, 96, 80)).convert_alpha()
    chibi = Engine.subsurface(GC.UNITDICT['GenericPortrait'],
                              (96, 16, 32, 32)).convert_alpha()

    def __init__(self):
        self.id = 0
        self.name = ''
        self.level = 1
        self.gender = 0
        self.faction = ''
        self.klass = 'Citizen'
        self.tags = set()
        self.desc = ''
        self.stats = SaveLoad.build_stat_dict(class_dict[self.klass]['bases'])
        self.growths = [0 for n in xrange(cf.CONSTANTS['num_stats'])]
        self.items = []
        self.skills = []
        self.wexp = [
            0 for n in xrange(len(CustomObjects.WEAPON_TRIANGLE.types))
        ]
        self.team = 'player'
Пример #13
0
    def tick(self):
        # Update global sprite counters
        current_time = self.elapsed_timer.elapsed()

        if GC.PASSIVESPRITECOUNTER.update(current_time):
            for index, klass in enumerate(class_data):
                klass['icon'] = create_icon(
                    klass['images'][GC.PASSIVESPRITECOUNTER.count], window)
                self.klass.setItemIcon(index, klass['icon'])

        if self.current_unit:
            self.current_unit.portrait.update(current_time)
            self.current_unit.portrait.create_image()
            pixmap = create_pixmap(
                Engine.transform_scale(
                    self.current_unit.portrait.image.convert_alpha(),
                    (96 * 2, 80 * 2)), self.window)
            self.portrait.setPixmap(pixmap)
Пример #14
0
    def __init__(self, info, portrait_data):
        self.id = info['id']
        self.name = info['name']

        self.level = int(info['level'])
        self.gender = int(info['gender'])
        self.faction = info['faction']
        self.klass = info['klass']
        self.tags = info['tags']
        self.desc = info['desc']

        self.stats = info['stats']
        self.growths = info['growths']

        self.wexp = info['wexp']

        self.items = info['items']

        self.skills = info['skills']

        self.team = 'player'

        blink_pos = (0, 0)
        mouth_pos = (0, 0)
        try:
            # Ex: HectorPortrait
            if self.name in portrait_data:
                blink_pos = portrait_data[self.name]['blink']
                mouth_pos = portrait_data[self.name]['mouth']
            self.portrait = UnitPortrait(self.name, blink_pos, mouth_pos,
                                         (0, 0))
            self.chibi = Engine.subsurface(GC.UNITDICT[self.name + 'Portrait'],
                                           (96, 16, 32, 32)).convert_alpha()
        except KeyError:
            self.portrait = UnitPortrait('Generic', blink_pos, mouth_pos,
                                         (0, 0))
            self.chibi = GC.UNITDICT[self.faction + 'Emblem'].convert_alpha()
Пример #15
0
    def __init__(self, view, window=None):
        super(TileInfoMenu, self).__init__(window)
        self.grid = QGridLayout()
        self.setLayout(self.grid)
        self.window = window

        self.view = view

        self.list = SignalList(self)
        self.list.setMinimumSize(128, 320)
        self.list.uniformItemSizes = True
        self.list.setIconSize(QSize(32, 32))

        # Ingest Data
        self.info = sorted(kinds.values(), key=lambda x: x.num)
        for info in self.info:
            image = Engine.transform_scale(info.image, (32, 32))
            pixmap = EditorUtilities.create_pixmap(image)

            item = QListWidgetItem(info.name)
            item.setIcon(QIcon(pixmap))
            self.list.addItem(item)

        self.grid.addWidget(self.list, 0, 0)
Пример #16
0
 def __init__(self, num, name, kind):
     self.num = num
     self.name = name
     self.kind = kind
     self.image = Engine.subsurface(GC.ICONDICT['TileInfoIcons'],
                                    (0, num * 16, 16, 16))
Пример #17
0
    print('Or send the file "Saves/debug.log.1" to rainlash!')
    print('Thank you!')
    print("=== === === === === === \n")


# ____________________________________________________________________________#
# === START === START === START  === START ===  START === START === START === #
if __name__ == '__main__':
    #import logging, traceback
    #import trackeback
    #logging.logThreads = 0
    #logging.logProcesses = 0
    #logger = logging.getLogger(__name__)
    try:
        handle_debug_logs()
    except WindowsError:
        print(
            "Error! Debug logs in use -- Another instance of this is already running!"
        )
        Engine.terminate()
    #if cf.OPTIONS['debug']:
    #    my_level = logging.DEBUG
    #else:
    #    my_level = logging.WARNING
    #logging.basicConfig(handlers=[logging.FileHandler('./Saves/debug.log.1', 'w', 'utf-8')],
    #                    level=my_level, format='%(relativeCreated)d %(levelname)7s:%(module)16s: %(message)s')
    print('*** Lex Talionis Engine Version %s ***' % GC.version)
    main()

# === END === END === END === END === END === END === END === END === END === #
Пример #18
0
    print('Damn. Another bug :(')
    print("Quick! Copy this error log and send it to rainlash!")
    print('Or send the file "Saves/debug.log.1" to rainlash!')
    print('Thank you!')
    print("=== === === === === === \n")

# ____________________________________________________________________________#
# === START === START === START  === START ===  START === START === START === #
if __name__ == '__main__':
    import logging, traceback
    logger = logging.getLogger(__name__)
    try:
        handle_debug_logs()
    except WindowsError:
        print("Error! Debug logs in use -- Another instance of this is already running!")
        Engine.terminate()
    if cf.OPTIONS['debug']:
        my_level = logging.DEBUG
    else:
        my_level = logging.WARNING
    logging.basicConfig(filename='./Saves/debug.log.1', filemode='w',
                        level=my_level, disable_existing_loggers=False,
                        format='%(levelname)8s:%(module)20s: %(message)s')
    try:
        main()
    except Exception as e:
        logger.exception(e)
        inform_error()
        print('Main Crash {0}'.format(str(e)))
        # Now print exception to screen
        import time
Пример #19
0
        h = surface.get_height()
        self.data = surface.get_buffer().raw
        self.image = QtGui.QImage(self.data, w, h, QtGui.QImage.Format_RGB32)

    def paintEvent(self, event):
        qp = QtGui.QPainter()
        qp.begin(self)
        qp.drawImage(0, 0, self.image)
        qp.end()

class MainWindow(QtGui.QMainWindow):
    def __init__(self, surface, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setCentralWidget(ImageWidget(surface))

Engine.simple_init()
# Display creation is necessary to use convert and convert alpha
surf = Engine.build_display((240, 160))
IMAGESDICT, UNITDICT, ICONDICT, ITEMDICT, ANIMDICT = images.getImages(home='../')
Engine.remove_display()

surf = Engine.create_surface((640, 480))
Engine.fill(surf, (64, 128, 192, 224))
Engine.blit(surf, IMAGESDICT['Clearing'], (0, 0))

app = QtGui.QApplication(sys.argv)
window = MainWindow(surf)

def b1_clicked():
    print("Button 1 clicked")
Пример #20
0
def create_chibi(name):
    return Engine.subsurface(GC.UNITDICT[name + 'Portrait'],
                             (96, 16, 32, 32)).convert_alpha()
Пример #21
0
def create_cursor():
    sprite = GC.IMAGESDICT['Cursor']
    # Sprites are in 64 x 64 boxes
    activesprite = Engine.subsurface(sprite, (0, 64, 32, 32)).convert_alpha()
    return create_image(activesprite)
Пример #22
0
    print('Damn. Another bug :(')
    print("Quick! Copy this error log and send it to rainlash!")
    print('Or send the file "Saves/debug.log.1" to rainlash!')
    print('Thank you!')
    print("=== === === === === === \n")

# ____________________________________________________________________________#
# === START === START === START  === START ===  START === START === START === #
if __name__ == '__main__':
    import logging, traceback
    logger = logging.getLogger(__name__)
    try:
        handle_debug_logs()
    except WindowsError:
        print("Error! Debug logs in use -- Another instance of this is already running!")
        Engine.terminate()
    if cf.OPTIONS['debug']:
        my_level = logging.DEBUG
    else:
        my_level = logging.WARNING
    logging.basicConfig(filename='./Saves/debug.log.1', filemode='w',
                        level=my_level, disable_existing_loggers=False,
                        format='%(levelname)8s:%(module)20s: %(message)s')
    try:
        main()
    except Exception as e:
        logger.exception(e)
        inform_error()
        print('Main Crash {0}'.format(str(e)))
        # Now print exception to screen
        import time
Пример #23
0
def main():
    gameStateObj = GameStateObj.GameStateObj()
    metaDataObj = {}
    gameStateObj.build_new()
    done = False
    for num in range(0, 12):
        if hasattr(gameStateObj, 'saving_thread'):
            gameStateObj.saving_thread.join()
        gameStateObj.save_slots = Transitions.load_saves()
        print('Level: %s' % num)
        gameStateObj.build_new() # Make the gameStateObj ready for a new game
        gameStateObj.set_generic_mode()
        gameStateObj.save_slot = 0
        levelfolder = 'Assets/Lex-Talionis/Data/Level' + str(num)
        # Create a save for the first game
        gameStateObj.stateMachine.clear()
        gameStateObj.stateMachine.changeState('turn_change')
        SaveLoad.suspendGame(gameStateObj, "Start", slot=gameStateObj.save_slot)
        # Load the first level
        SaveLoad.load_level(levelfolder, gameStateObj, metaDataObj)
        # Set Casual Mode
        gameStateObj.mode['death'] = 0
        # Run
        counter = 0
        suspended_yet, dead_yet = False, False
        while not done:
            Engine.update_time()
            current_state = gameStateObj.stateMachine.getState()
            if current_state == 'free':
                units = [unit for unit in gameStateObj.allunits if unit.team == 'player' and
                         not unit.dead and unit.name not in {'Sam', 'Ophie', 'Prim', 'Renae'}]
                if not dead_yet and units:
                    unit = units[0]
                    print(unit.name)
                    unit.isDying = True
                    gameStateObj.stateMachine.changeState('dying')
                    gameStateObj.message.append(Dialogue.Dialogue_Scene(metaDataObj['death_quotes'], unit=unit))
                    gameStateObj.stateMachine.changeState('dialogue')
                    dead_yet = True
                elif suspended_yet:
                    gameStateObj.statedict['levelIsComplete'] = 'win'
                    gameStateObj.message.append(Dialogue.Dialogue_Scene('Assets/Lex-Talionis/Data/seizeScript.txt'))
                    gameStateObj.stateMachine.changeState('dialogue')
                    suspended_yet = False
                else:
                    SaveLoad.suspendGame(gameStateObj, 'Suspend', hard_loc='Suspend')
                    gameStateObj.save_slots = None # Reset save slots
                    gameStateObj.stateMachine.clear()
                    gameStateObj.stateMachine.changeState('start_start')
                    suspended_yet = True
            elif current_state == 'start_save' or current_state == 'start_start' or current_state == 'start_option':
                pyautogui.press('x')
                if current_state == 'start_save':
                    dead_yet = False
            elif current_state == 'move':
                pyautogui.press('z')
            counter += 1
            if not counter%20:
                pyautogui.press('s')
            eventList = Engine.build_event_list()
            mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
            while repeat:
                mapSurf, repeat = gameStateObj.stateMachine.update(eventList, gameStateObj, metaDataObj)
            GC.DISPLAYSURF.blit(mapSurf, (0, 0))
            pygame.display.update()
            gameStateObj.playtime += GC.FPSCLOCK.tick(GC.FPS)