def getMusicList():
    return [(settingsManager.createPath('music/Laszlo - Fall To Light.ogg'), 2,
             "Laszlo - Fall To Light (NCS Release)"),
            (settingsManager.createPath('music/No Turning Back.ogg'), 2,
             "No Turning Back"),
            (settingsManager.createPath('music/True Arena.ogg'), 1,
             "No Turning Back (Chiptune ver.)")]
def main():
    print('Downloading Update from HEAD...')
    #Need the cert to access github
    os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem")
    
    #Get the Zipfile from Github
    base_url='https://github.com/digiholic/universalSmashSystem/archive/master.zip'
    page = urllib.urlopen(base_url)
    
    #Download the zipfile
    downloader = urllib.URLopener()
    downloader.retrieve(page.geturl(), settingsManager.createPath('update.zip'))
    
    #Extract it
    updatezip = zipfile.ZipFile(settingsManager.createPath('update.zip'))
    updatezip.extractall('tmp')
    
    print('Copying files into game directory...')
    #Copy the files upward, then remove the tmp files
    tmp_path = settingsManager.createPath('tmp'+os.sep+'universalSmashSystem-master'+os.sep)
    recursive_overwrite(tmp_path, settingsManager.createPath(''))
    shutil.rmtree(tmp_path)
    os.remove(settingsManager.createPath('update.zip'))
    
    print('Done!')
 def __init__(self,_playerNum):
     self.fighters = []
     
     # Load all files.
     directory = settingsManager.createPath("fighters")
     fighter_count = 0
     for subdir in next(os.walk(directory))[1]:
         if(subdir == '__pycache__'):
             continue
         fighter_py = settingsManager.importFromURI(directory, os.path.join(directory,subdir,"fighter.py"),_suffix=str(fighter_count))
         #try:
         if fighter_py:
             fighter = fighter_py.getFighter(os.path.join(directory,subdir),_playerNum)
         else:
             fighter = abstractFighter.AbstractFighter(os.path.join(directory,subdir),_playerNum)
         if (fighter == None):
             print("No fighter found at " + os.path.join(directory,subdir,"fighter.py"))
         else:
             fighter_count += 1
             self.fighters.append(fighter)      
     
     self.current_index = 0
     self.current_fighter = self.fighters[0]
     self.wheel_size = 9
     self.visible_sprites = [None for _ in range(self.wheel_size)]
     self.animateWheel()
     self.wheel_shadow = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","cssbar_shadow.png")))
     self.fill_color='#000000'
Example #4
0
 def __init__(self,_playerNum):
     self.fighters = []
     
     # Load all files.
     directory = settingsManager.createPath("fighters")
     fighter_count = 0
     for subdir in next(os.walk(directory))[1]:
         if(subdir == '__pycache__'):
             continue
         fighter_py = settingsManager.importFromURI(directory, os.path.join(directory,subdir,"fighter.py"),_suffix=str(fighter_count))
         #try:
         if fighter_py:
             fighter = fighter_py.getFighter(os.path.join(directory,subdir),_playerNum)
         else:
             fighter = abstractFighter.AbstractFighter(os.path.join(directory,subdir),_playerNum)
         if (fighter == None):
             print("No fighter found at " + os.path.join(directory,subdir,"fighter.py"))
         else:
             fighter_count += 1
             self.fighters.append(fighter)      
     
     self.current_index = 0
     self.current_fighter = self.fighters[0]
     self.wheel_size = 9
     self.visible_sprites = [None for _ in range(self.wheel_size)]
     self.animateWheel()
     self.wheel_shadow = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","cssbar_shadow.png")))
     self.fill_color='#000000'
Example #5
0
def main():
    print('Downloading Update from HEAD...')
    #Need the cert to access github
    os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem")
    
    #Get the Zipfile from Github
    base_url='https://github.com/digiholic/universalSmashSystem/archive/master.zip'
    page = urllib.urlopen(base_url)
    
    #Download the zipfile
    downloader = urllib.URLopener()
    downloader.retrieve(page.geturl(), settingsManager.createPath('update.zip'))
    
    #Extract it
    updatezip = zipfile.ZipFile(settingsManager.createPath('update.zip'))
    updatezip.extractall('tmp')
    
    print('Copying files into game directory...')
    #Copy the files upward, then remove the tmp files
    tmp_path = settingsManager.createPath('tmp'+os.sep+'universalSmashSystem-master'+os.sep)
    recursive_overwrite(tmp_path, settingsManager.createPath(''))
    shutil.rmtree(tmp_path)
    os.remove(settingsManager.createPath('update.zip'))
    
    print('Done!')
 def __init__(self,_root,_subaction):
     dataSelector.__init__(self, _root,_subaction.getDisplayName())
     
     self.subaction = _subaction
     
     self.delete_image = PhotoImage(file=settingsManager.createPath('sprites/icons/red-x.gif'))
     self.confirm_button = PhotoImage(file=settingsManager.createPath('sprites/icons/green-check.gif'))
     self.delete_button = Button(self,image=self.delete_image,command=self.deleteSubaction)
     
     self.delete_button.pack(side=RIGHT)
 def pickFile(self,_resultVar, _filetype='file', _extensions=[]):
     if _filetype == 'file':
         loaded_file = askopenfile(mode="r",
                            initialdir=settingsManager.createPath('fighters'),
                            filetypes=_extensions)
         loaded_name = loaded_file.name
     elif _filetype == 'dir':
         loaded_name = askdirectory(initialdir=settingsManager.createPath(''))
     res = os.path.relpath(loaded_name,os.path.dirname(self.root.root.fighter_file.name))
     _resultVar.set(res)
 def __init__(self,_root,_data):
     Selector.__init__(self, _root)
     
     self.data = _data
     self.display_name.set(self.data.getDisplayName())
     
     self.delete_image = PhotoImage(file=settingsManager.createPath('sprites/icons/red-x.gif'))
     self.confirm_button = PhotoImage(file=settingsManager.createPath('sprites/icons/green-check.gif'))
     self.delete_button = Button(self,image=self.delete_image,command=self.deleteSubaction)
     
     self.property_frame = _data.getPropertiesPanel(self.root.parent.subaction_property_panel)
     self.delete_button.pack(side=RIGHT)
Example #9
0
 def pickFile(self, _resultVar, _filetype='file', _extensions=[]):
     if _filetype == 'file':
         loaded_file = askopenfile(
             mode="r",
             initialdir=settingsManager.createPath('fighters'),
             filetypes=_extensions)
         loaded_name = loaded_file.name
     elif _filetype == 'dir':
         loaded_name = askdirectory(
             initialdir=settingsManager.createPath(''))
     res = os.path.relpath(
         loaded_name, os.path.dirname(self.root.root.fighter_file.name))
     _resultVar.set(res)
Example #10
0
    def __init__(self, _fighter):
        spriteManager.Sprite.__init__(self)
        self.fighter = _fighter
        self.percent = int(_fighter.damage)

        self.bg_sprite = _fighter.franchise_icon
        self.bg_sprite.recolor(
            self.bg_sprite.image, pygame.Color('#cccccc'),
            pygame.Color(
                settingsManager.getSetting('playerColor' +
                                           str(_fighter.player_num))))
        self.bg_sprite.alpha(128)

        self.image = self.bg_sprite.image
        self.rect = self.bg_sprite.image.get_rect()

        #Until I can figure out the percentage sprites
        self.percent_sprites = spriteManager.SheetSprite(
            settingsManager.createPath('sprites/guisheet.png'), 64)
        self.kerning_values = [
            49, 33, 44, 47, 48, 43, 43, 44, 49, 43, 48
        ]  #This is the width of each sprite, for kerning purposes

        self.percent_sprite = spriteManager.Sprite()
        self.percent_sprite.image = pygame.Surface((196, 64), pygame.SRCALPHA,
                                                   32).convert_alpha()
        self.redness = 0

        self.updateDamage()
        self.percent_sprite.rect = self.percent_sprite.image.get_rect()
        self.percent_sprite.rect.center = self.rect.center
    def __init__(self, _owner, _origin, _scale=1, _angle=0, _speed=0, _resistance=0, _colorBase = None):
        Article.__init__(self, settingsManager.createPath('sprites/hit_particle.png'), _owner, _origin, 256, -1)
        self.scale = _scale*.25
        self.rect.center = _origin
        self.angle = _angle
        self.speed = _speed
        self.resistance = _resistance

        if _colorBase is None:
            base_color = [127, 127, 127]
        else:
            base_color = pygame.Color(_colorBase)
        for i in range(0, 31):
            random_displacement = random.choice(self.color_change_array)
            if base_color[0] + random_displacement[0] < 0:
                base_color[0] = 0
            elif base_color[0] + random_displacement[0] > 255:
                base_color[0] = 255
            else:
                base_color[0] += random_displacement[0]
            if base_color[1] + random_displacement[1] < 0:
                base_color[1] = 0
            elif base_color[1] + random_displacement[1] > 255:
                base_color[1] = 255
            else:
                base_color[1] += random_displacement[1]
            if base_color[2] + random_displacement[2] < 0:
                base_color[2] = 0
            elif base_color[2] + random_displacement[2] > 255:
                base_color[2] = 255
            else:
                base_color[2] += random_displacement[2]
        
        self.recolor(self.image, (0,0,0), base_color)
        self.alpha(128)
Example #12
0
 def __init__(self,
              _surface,
              _parent=None,
              _width=20,
              _height=1,
              corner=(0, 0),
              _font="unifont-9.0.02",
              _size=16):
     self.surface = _surface
     self.parent = _parent
     self.corner = _corner
     if _parent is not None:
         _parent.children.append(self)
         bgcolor = _parent.bgcolor - pygame.Color(16, 16, 16)
     else:
         bgcolor = pygame.Color(255, 255, 255)
     pygcurse.PygcurseSurface.__init__(
         self,
         _width,
         _height,
         font=pygame.font.Font(settingsManager.createPath(_font + ".ttf"),
                               _size),
         fgcolor=pygame.Color(0, 0, 0),
         bgcolor=bgcolor)
     self.children = []
     self.focused = None
Example #13
0
    def __init__(self, _playerNum):
        pygame.Surface.__init__(
            self, (settingsManager.getSetting('windowWidth') // 2,
                   settingsManager.getSetting('windowHeight') // 2))

        self.keys = settingsManager.getControls(_playerNum)
        self.player_num = _playerNum
        self.wheel = FighterWheel(_playerNum)
        self.active = False
        self.ready = False
        self.active_object = self.wheel
        self.chosen_fighter = None
        self.myBots = []

        self.wheel_increment = 0
        self.hold_time = 0
        self.hold_distance = 0
        self.wheel_offset = [(self.get_width() - 256) // 2,
                             (self.get_height() - 32)]
        self.bg_surface = None
        self.current_color = _playerNum
        self.current_costume = 0

        self.icon = spriteManager.ImageSprite(
            settingsManager.createPath('sprites/default_franchise_icon.png'))
        self.icon.rect.center = self.get_rect().center
        self.icon_color = pygame.Color('#cccccc')

        self.fill_color = '#000000'
        self.wheel.setFillColor(self.fill_color)

        self.recolorIcon()
def test():
    musicManager = MusicManager("music")
    musicManager.createSongData(
        settingsManager.createPath("music\\The Void - Lost Language (Original Edit).ogg"),
        "The Void - Lost Language (NCS Release)",
        100,
    )
    song = musicManager.loadSongData("The Void - Lost Language (NCS Release)")
    pygame.init()
    pygame.mixer.init()

    song.play()

    screen = pygame.display.set_mode([640, 480])
    pygame.display.set_caption("USS Sprite Viewer")

    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return -1
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    song.stop()

        screen.fill([100, 100, 100])
        pygame.display.flip()
Example #15
0
 def __init__(self,_playerNum):
     pygame.Surface.__init__(self,(settingsManager.getSetting('windowWidth')//2,
                             settingsManager.getSetting('windowHeight')//2))
     
     self.keys = settingsManager.getControls(_playerNum)
     self.player_num = _playerNum
     self.wheel = FighterWheel(_playerNum)
     self.active = False
     self.ready = False
     self.active_object = self.wheel
     self.chosen_fighter = None
     self.myBots = []
     
     self.wheel_increment = 0
     self.hold_time = 0
     self.hold_distance = 0
     self.wheel_offset = [(self.get_width() - 256) // 2,
                         (self.get_height() - 32)]
     self.bg_surface = None
     self.current_color = _playerNum
     self.current_costume = 0
     
     self.icon = spriteManager.ImageSprite(settingsManager.createPath('sprites/default_franchise_icon.png'))
     self.icon.rect.center = self.get_rect().center
     self.icon_color = pygame.Color('#cccccc')
     
     self.fill_color = '#000000'
     self.wheel.setFillColor(self.fill_color)
     
     self.recolorIcon()
 def getStagePortrait(self, _stage):
     portrait = _stage.getStageIcon()
     if portrait == None:
         portrait = spriteManager.ImageSprite(
             settingsManager.createPath(
                 os.path.join("sprites", "icon_blank.png")))
     return portrait
    def drawScreen(self, _screen):
        top_pos = 0
        left_pos = 0

        for row in range(0, len(self.stage_grid)):
            for stage in range(0, len(self.stage_grid[row])):
                if self.getStageAt(stage, row) == 'random':
                    sprite = spriteManager.ImageSprite(
                        settingsManager.createPath(
                            os.path.join("sprites", "icon_unknown.png")))
                else:
                    sprite = self.getStagePortrait(self.getStageAt(stage, row))
                if self.isStageStruckAt(stage, row):
                    sprite.alpha(48)
                    if self.getStageAt(stage, row) == self.getSelectedStage():
                        sprite.alpha(64)
                elif self.getStageAt(stage, row) == self.getSelectedStage():
                    sprite.alpha(255)
                else:
                    sprite.alpha(128)
                sprite.draw(_screen, (left_pos, top_pos), 1)
                left_pos += 32

            left_pos = 0
            top_pos += 32
    def submit(self):
        path = settingsManager.createPath("fighters/" + self.folder_name_var.get())

        if os.path.exists(path):
            print("path exists")
            self.destroy()
        else:
            os.makedirs(path)
            new_fighter = engine.abstractFighter.AbstractFighter(path, 0)
            # create sprite dir
            sprite_path = os.path.join(path, "sprites")
            os.makedirs(sprite_path)
            copyfile(
                settingsManager.createPath("sprites/sandbag_idle.png"), os.path.join(sprite_path, "sandbag_idle.png")
            )
            copyfile(
                settingsManager.createPath("sprites/default_franchise_icon.png"),
                os.path.join(sprite_path, "franchise_icon.png"),
            )
            copyfile(
                settingsManager.createPath("sprites/icon_unknown.png"), os.path.join(sprite_path, "icon_unknown.png")
            )

            # create __init__.py
            init_py = open(os.path.join(path, "__init__.py"), "w+")
            init_py.close()

            # check for and create actions files
            if self.generate_action_xml_var.get():
                action_xml = open(os.path.join(path, self.folder_name_var.get() + "_actions.xml"), "w+")
                action_xml.write("<actionList />")
                new_fighter.action_file = self.folder_name_var.get() + "_actions.xml"
                action_xml.close()
            if self.generate_action_py_var.get():
                action_py = open(os.path.join(path, self.folder_name_var.get() + "_actions.py"), "w+")
                new_fighter.action_file = self.folder_name_var.get() + "_actions.py"
                action_py.close()

            # copy over icons?
            new_fighter.saveFighter()
            self.destroy()

        fighter_file = open(os.path.join(path, "fighter.xml"), "r")
        self.root.fighter_file = fighter_file
        self.root.fighter_properties = fighter_file.read()
        self.root.fighter_string.set(fighter_file.name)
        self.parent.entryconfig("Action", state=NORMAL)
 def endBattle(self,_exitStatus):
     if not (_exitStatus == 1 or _exitStatus == 2 or _exitStatus == 3):
         print("An error occured that caused TUSSLE to stop working. If you can replicate this error, please file a bug report so the relevant developers can fix it. Post-mortem debugging coming soon. ")
     result_sprites = []
     width = settingsManager.getSetting('windowWidth')
     height = settingsManager.getSetting('windowHeight')
     for i in range(0,len(self.players)):
         print(self.players)
         print("player"+str(i))
         fighter = self.players[i]
         result_sprite = spriteManager.RectSprite(pygame.Rect((width / 4) * i,0,(width / 4),height), pygame.Color(settingsManager.getSetting('playerColor'+str(i))))
         result_sprite.image.set_alpha(255)
         name_sprite = spriteManager.TextSprite(fighter.name,_size=24)
         name_sprite.rect.midtop = (result_sprite.rect.width / 2,0)
         result_sprite.image.blit(name_sprite.image,name_sprite.rect.topleft)
         
         score = fighter.data_log.getData('KOs') - fighter.data_log.getData('Falls')
         text = spriteManager.TextSprite('Score: ' + str(score))
         result_sprite.image.blit(text.image,(0,32))
             
         dist = 48
         
         print(fighter.data_log.data)
         for item,val in fighter.data_log.data.items():
             text = spriteManager.TextSprite(str(item) + ': ' + str(val))
             result_sprite.image.blit(text.image,(0,dist))
             dist += 16
         result_sprites.append(result_sprite)
         confirmed_list = [False] * len(result_sprites) #This pythonic hacking will make a list of falses equal to the result panels
    
     while 1:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 os._exit(1)
                 return -1
             for i in range(0,len(self.players)):
                 controls = settingsManager.getControls(i)
                 k = controls.getInputs(event)
                 if k == 'attack':
                     result_sprites[i].image.set_alpha(0)
                     confirmed_list[i] = True
                 elif k == 'special':
                     result_sprites[i].image.set_alpha(255)
                     confirmed_list[i] = False
             if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_RETURN:
                     print("Saving screenshot")
                     pygame.image.save(self.screen,settingsManager.createPath('screenshot.jpg'))
                 if event.key == pygame.K_ESCAPE:
                     return
                         
         self.screen.fill((0,0,0))
         for sprite in result_sprites:
             sprite.draw(self.screen, sprite.rect.topleft, 1.0)
         
         if all(confirmed_list):
             return
         pygame.display.flip()
     return
Example #20
0
    def __init__(self, _root, _data):
        Selector.__init__(self, _root)

        self.data = _data
        self.display_name.set(self.data.getDisplayName())

        self.delete_image = PhotoImage(
            file=settingsManager.createPath('sprites/icons/red-x.gif'))
        self.confirm_button = PhotoImage(
            file=settingsManager.createPath('sprites/icons/green-check.gif'))
        self.delete_button = Button(self,
                                    image=self.delete_image,
                                    command=self.deleteSubaction)

        self.property_frame = _data.getPropertiesPanel(
            self.root.parent.subaction_property_panel)
        self.delete_button.pack(side=RIGHT)
Example #21
0
 def __init__(self,_owner):
     width, height = (86, 22) #to edit these easier if (when) we change the sprite
     scaled_width = _owner.sprite.rect.width
     #self.scale_ratio = float(scaled_width) / float(width)
     self.sprite.scale = 1
     scaled_height = math.floor(height * self.scale_ratio)
     AnimatedArticle.__init__(self, settingsManager.createPath('sprites/halfcirclepuff.png'), _owner, _owner.sprite.rect.midbottom, 86, 6)
     self.sprite.rect.y -= scaled_height / 2
 def __init__(self,_owner):
     width, height = (86, 22) #to edit these easier if (when) we change the sprite
     scaled_width = _owner.sprite.rect.width
     #self.scale_ratio = float(scaled_width) / float(width)
     self.sprite.scale = 1
     scaled_height = math.floor(height * self.scale_ratio)
     AnimatedArticle.__init__(self, settingsManager.createPath('sprites/halfcirclepuff.png'), _owner, _owner.sprite.rect.midbottom, 86, 6)
     self.sprite.rect.y -= scaled_height / 2
 def __init__(self,_position):
     spriteManager.Sprite.__init__(self)
     self.joystick_sprite = spriteManager.ImageSprite(settingsManager.createPath('sprites/joyTest.png'))
     self.j_loc_sprite = spriteManager.RectSprite(pygame.Rect(0,0,10,10),[255,255,255])
     self.j_status = spriteManager.TextSprite('No Input','Orbitron Medium')
     
     self.j_status.rect.midtop = self.joystick_sprite.rect.midbottom
     
     self.rect = pygame.Rect(_position,0,self.j_loc_sprite.rect.height + self.j_status.rect.height, self.j_loc_sprite.rect.width)
 def __init__(self,_text,_font="Orbitron Medium",_size=12,_color=[0,0,0]):
     Sprite.__init__(self)
     self.font = pygame.font.Font(settingsManager.createPath(_font+".ttf"),_size)
         
     self.image = self.font.render(_text,False,_color).convert_alpha()
     self.rect = self.image.get_rect()
     
     self.text = _text
     self.color = _color
 def loadFighter(self):
     fighter_file = askopenfile(
         mode="r",
         initialdir=settingsManager.createPath("fighters"),
         filetypes=[("TUSSLE Fighters", "*.xml"), ("Advanced Fighters", "*.py")],
     )
     self.root.fighter_file = fighter_file
     self.root.fighter_properties = fighter_file.read()
     self.root.fighter_string.set(fighter_file.name)
     self.entryconfig("Action", state=NORMAL)
 def __init__(self, _surface, _gameEnv, _font="unifont-9.0.02", _size=16, _height=24):
     self.game_env = _gameEnv
     text_dims = pygame.font.Font(settingsManager.createPath(_font+".ttf"),_size).size(" ") #Used to determine how much space is available
     self.text_width = int(_surface.get_width()/text_dims[0])
     self.render_corner = [0, _surface.get_height()-text_dims[1]*_height]
     self.pyg_surface = pygcurse.PygcurseSurface(self.text_width, _height, pygame.font.Font(settingsManager.createPath(_font+".ttf"),_size))
     self.pyg_surface.setscreencolors(fgcolor=None, bgcolor=None, clear=True)
     pdb.Pdb.__init__(self, stdin=self, stdout=self.pyg_surface) #Yay for duck typing
     self.use_rawinput = False
     self.prompt = "> "
Example #27
0
 def getStages(self):
     # Load all files.
     directory = settingsManager.createPath("stages")
     stagecount = 0
     for subdir in next(os.walk(directory))[1]:
         stage = settingsManager.importFromURI(directory, os.path.join(directory,subdir,"stage.py"),suffix=str(stagecount))
         print(stage)
         if (stage == None):
             raise ValueError("No stages found at " + os.path.join(directory,subdir,"stage.py"))
         stagecount += 1
         self.stages.append(stage)
Example #28
0
 def __init__(self):
     self.fighters = []
     
     # Load all files.
     directory = settingsManager.createPath("fighters")
     fightercount = 0
     for subdir in next(os.walk(directory))[1]:
         fighter = settingsManager.importFromURI(directory, os.path.join(directory,subdir,"fighter.py"),suffix=str(fightercount))
         print(fighter)
         if (fighter == None):
             raise ValueError("No fighter found at " + os.path.join(directory,subdir,"fighter.py"))
         fightercount += 1
         self.fighters.append(fighter)      
     
     self.currentIndex = 0
     self.currentFighter = self.fighters[0]
     self.wheelSize = 9
     self.visibleSprites = [None for _ in range(self.wheelSize)]
     self.animateWheel()
     self.wheelShadow = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","cssbar_shadow.png")))
 def __init__(self,text,font="monospace",size=12,color=[0,0,0]):
     Sprite.__init__(self)
     try:
         self.font = pygame.font.Font(settingsManager.createPath(font+".ttf"),size)
     except Exception as e:
         self.font = pygame.font.SysFont(font, size)
         
     self.image = self.font.render(text,False,color).convert_alpha()
     self.rect = self.image.get_rect()
     
     self.text = text
     self.color = color
    def __init__(self, _position):
        spriteManager.Sprite.__init__(self)
        self.joystick_sprite = spriteManager.ImageSprite(
            settingsManager.createPath('sprites/joyTest.png'))
        self.j_loc_sprite = spriteManager.RectSprite(pygame.Rect(0, 0, 10, 10),
                                                     [255, 255, 255])
        self.j_status = spriteManager.TextSprite('No Input', 'Orbitron Medium')

        self.j_status.rect.midtop = self.joystick_sprite.rect.midbottom

        self.rect = pygame.Rect(
            _position, 0,
            self.j_loc_sprite.rect.height + self.j_status.rect.height,
            self.j_loc_sprite.rect.width)
    def __init__(self,
                 _text,
                 _font="Orbitron Medium",
                 _size=12,
                 _color=[0, 0, 0]):
        Sprite.__init__(self)
        self.font = pygame.font.Font(
            settingsManager.createPath(_font + ".ttf"), _size)

        self.image = self.font.render(_text, False, _color).convert_alpha()
        self.rect = self.image.get_rect()

        self.text = _text
        self.color = _color
 def __init__(self,_owner):
     width, height = (256,69)
     scaled_width = _owner.rect.width * 1.5
     scale_ratio = float(scaled_width) / float(width)
     
     Article.__init__(self, settingsManager.createPath('sprites/platform.png'), _owner, _owner.rect.midbottom, 120, _draw_depth = -1)
     
     w,h = int(width * scale_ratio),int(height * scale_ratio)
     self.image = pygame.transform.smoothscale(self.image, (w,h))
     
     self.rect = self.image.get_rect()
     
     self.rect.center = _owner.rect.midbottom
     self.rect.bottom += self.rect.height / 4
    def __init__(self):
        Tk.__init__(self)
        # Window Properties
        self.width = 640
        self.height = 480
        self.wm_title("Legacy Editor")
        # program_directory=sys.path[0]
        # self.iconphoto(True, PhotoImage(file=settingsManager.createPath('editor-0.png')))
        # self.iconbitmap(settingsManager.createPath('editor.ico'))
        if "nt" == os.name:
            self.iconbitmap(settingsManager.createPath("sprites/editor.ico"))
        else:
            self.iconbitmap("@" + settingsManager.createPath("sprites/editor.xbm"))
        self.geometry("640x480")

        # Variable Declaration
        self.fighter_file = None  # The python or XML fighter file
        self.fighter_properties = None  # The contents of fighter_file
        self.fighter_string = StringVar(self)
        self.action_string = StringVar(self)
        self.frame = IntVar(self)

        # Create and place subpanels
        self.config(menu=MenuBar(self))
        self.viewer_pane = LeftPane(self, self)
        self.action_pane = RightPane(self, self)
        self.viewer_pane.grid(row=0, column=0, sticky=N + S + E + W)
        self.action_pane.grid(row=0, column=1, sticky=N + S + E + W)
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=3, uniform="column")
        self.grid_columnconfigure(1, weight=2, uniform="column")
        self.fighter_string.trace("w", self.changeFighter)
        self.action_string.trace("w", self.changeAction)
        self.frame.trace("w", self.changeFrame)

        self.mainloop()
Example #34
0
    def __init__(self,
                 _owner,
                 _origin,
                 _scale=1,
                 _angle=0,
                 _speed=0,
                 _resistance=0,
                 _colorBase=None):
        Article.__init__(
            self, settingsManager.createPath('sprites/hit_particle.png'),
            _owner, _origin, 256, -1)
        self.sprite.scale = _scale * .25
        self.posx, self.posy = _origin
        self.sprite.rect.center = _origin
        self.angle = _angle
        self.sprite.angle = _angle
        self.speed = _speed
        self.resistance = _resistance

        if _colorBase is None:
            base_color = [127, 127, 127]
        else:
            base_color = pygame.Color(_colorBase)
        for i in range(0, 31):
            random_displacement = random.choice(self.color_change_array)
            if base_color[0] + random_displacement[0] < 0:
                base_color[0] = 0
            elif base_color[0] + random_displacement[0] > 255:
                base_color[0] = 255
            else:
                base_color[0] += random_displacement[0]
            if base_color[1] + random_displacement[1] < 0:
                base_color[1] = 0
            elif base_color[1] + random_displacement[1] > 255:
                base_color[1] = 255
            else:
                base_color[1] += random_displacement[1]
            if base_color[2] + random_displacement[2] < 0:
                base_color[2] = 0
            elif base_color[2] + random_displacement[2] > 255:
                base_color[2] = 255
            else:
                base_color[2] += random_displacement[2]

        self.sprite.recolor(self.sprite.image, (0, 0, 0), base_color)
        self.sprite.alpha(128)
Example #35
0
 def __init__(self,_owner):
     width, height = (256,69)
     scaled_width = _owner.sprite.rect.width * 1.5
     scaled_height = _owner.sprite.rect.height * 1.5
     scale_ratio = float(scaled_width) / float(width)
     
     Article.__init__(self, settingsManager.createPath('sprites/platform.png'), _owner, _owner.sprite.rect.midbottom, 120, _draw_depth = -1)
     
     w,h = int(width * scale_ratio),int(height * scale_ratio)
     self.sprite.image = pygame.transform.smoothscale(self.sprite.image, (w,h))
     
     self.sprite.rect = self.sprite.image.get_rect()
     
     self.sprite.rect.center = _owner.sprite.rect.midbottom
     self.posx, self.posy = _owner.sprite.rect.midbottom
     self.sprite.rect.bottom += scaled_height // 4
     self.posy += scaled_height // 4
 def getStages(self):
     # Load all files.
     directory = settingsManager.createPath("stages")
     stage_count = 0
     for subdir in next(os.walk(directory))[1]:
         if (subdir == '__pycache__'):
             continue
         stage = settingsManager.importFromURI(directory,
                                               os.path.join(
                                                   directory, subdir,
                                                   "stage.py"),
                                               _suffix=str(stage_count))
         if (stage == None):
             raise ValueError("No stages found at " +
                              os.path.join(directory, subdir, "stage.py"))
         stage_count += 1
         self.stages.append(stage)
    def __init__(self, _fighter):
        spriteManager.Sprite.__init__(self)
        self.fighter = _fighter
        self.percent = int(_fighter.damage)

        self.bg_sprite = _fighter.franchise_icon
        self.bg_sprite.recolor(
            self.bg_sprite.image,
            pygame.Color("#cccccc"),
            pygame.Color(settingsManager.getSetting("playerColor" + str(_fighter.player_num))),
        )
        self.bg_sprite.alpha(128)

        self.image = self.bg_sprite.image
        self.rect = self.bg_sprite.image.get_rect()

        # Until I can figure out the percentage sprites
        self.percent_sprites = spriteManager.SheetSprite(settingsManager.createPath("sprites/guisheet.png"), 64)
        self.kerning_values = [
            49,
            33,
            44,
            47,
            48,
            43,
            43,
            44,
            49,
            43,
            48,
        ]  # This is the width of each sprite, for kerning purposes

        self.percent_sprite = spriteManager.Sprite()
        self.percent_sprite.image = pygame.Surface((196, 64), pygame.SRCALPHA, 32).convert_alpha()
        self.redness = 0

        self.updateDamage()
        self.percent_sprite.rect = self.percent_sprite.image.get_rect()
        self.percent_sprite.rect.center = self.rect.center
Example #38
0
 def drawScreen(self,screen):
     top_pos = 0
     left_pos = 0
     
     for row in range(0,len(self.stageGrid)):
         for stage in range(0,row+3):
             if self.getStageAt(stage,row) == 'random':
                 sprite = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","icon_unknown.png")))
             else:
                 sprite = self.getStagePortrait(self.getStageAt(stage,row))
             if self.isStageStruckAt(stage,row):
                 sprite.alpha(48)
                 if self.getStageAt(stage,row) == self.getSelectedStage():
                     sprite.alpha(64)
             elif self.getStageAt(stage,row) == self.getSelectedStage():
                 sprite.alpha(255)
             else:
                 sprite.alpha(128)
             sprite.draw(screen,(left_pos,top_pos),1)
             left_pos += 32
             
         left_pos = 0
         top_pos += 32
 def startBattle(self,screen):
     
     # Fill background
     background = pygame.Surface(screen.get_size())
     background = background.convert()
     background.fill((128, 128, 128))
     current_stage = self.stage
     active_hitboxes = pygame.sprite.Group()
 
     #gameObjects
     currentFighters = self.players
     gameObjects = []
     gameObjects.extend(currentFighters)
     
     trackStocks = True
     trackTime = True
     if self.rules.stocks == 0:
         trackStocks = False
     if self.rules.time == 0:
         trackTime = False
         
     for fighter in currentFighters:
         fighter.rect.midbottom = current_stage.spawnLocations[fighter.playerNum]
         fighter.gameState = current_stage
         current_stage.follows.append(fighter.rect)
         if trackStocks: fighter.stocks = self.rules.stocks
     
     current_stage.initializeCamera()
         
     clock = pygame.time.Clock()
     
     clockTime = self.rules.time * 60
         
     """
     ExitStatus breaks us out of the loop. The battle loop can end in many ways, which is reflected here.
     In general, ExitStatus positive means that the game was supposed to end, while a negative value indicates an error.
     
     ExitStatus == 1: Battle ended early by user. No Contest.
     ExitStatus == 2: Battle ended by time or stock, decide winner, show victory screen
     ExitStatus == -1: Battle ended in error.
     """
     exitStatus = 0
     if trackTime:
         pygame.time.set_timer(pygame.USEREVENT+2, 1000)
         countdownSprite = spriteManager.TextSprite('5','full Pack 2025',128,[0,0,0])
         countdownSprite.rect.center = screen.get_rect().center
         countAlpha = 0
         countdownSprite.alpha(countAlpha)
         
     while exitStatus == 0:
         for event in pygame.event.get():
             if event.type == pygame.QUIT:
                 sys.exit()
                 return -1
             if event.type == pygame.KEYDOWN:
                 if event.key == pygame.K_RETURN:
                     print("saving screenshot")
                     pygame.image.save(screen,settingsManager.createPath('screenshot.jpg'))
                 
                 for fight in currentFighters:
                     fight.keyPressed(event.key)
             if event.type == pygame.KEYUP:
                 if event.key == pygame.K_ESCAPE:
                     exitStatus = 1
                 for fight in currentFighters:
                     fight.keyReleased(event.key)
             if event.type == pygame.JOYAXISMOTION:
                 for fight in currentFighters:
                     fight.joyAxisMotion(event.joy, event.axis)
             if event.type == pygame.JOYBUTTONDOWN:
                 for fight in currentFighters:
                     fight.joyButtonPressed(event.joy, event.button)
             if event.type == pygame.JOYBUTTONUP:
                 for fight in currentFighters:
                     fight.joyButtonReleased(event.joy, event.button)
             if event.type == pygame.USEREVENT+2:
                 pygame.time.set_timer(pygame.USEREVENT+2, 1000)
                 clockTime -= 1
                 print(clockTime)
                 if clockTime <= 5 and clockTime > 0:
                     countdownSprite.changeText(str(clockTime))
                     countAlpha = 255
                 if clockTime == 0:
                     exitStatus = 2
         # End pygame event loop
                                
         screen.fill([100, 100, 100])
         
         current_stage.update()
         current_stage.cameraUpdate()
         current_stage.drawBG(screen)
         for obj in gameObjects:
             obj.update()
             if hasattr(obj,'active_hitboxes'):
                 active_hitboxes.add(obj.active_hitboxes)
             
             offset = current_stage.stageToScreen(obj.rect)
             scale =  current_stage.getScale()
             obj.draw(screen,offset,scale)
             if hasattr(obj, 'hurtbox'):
                 if (self.settings['showHurtboxes']): 
                     offset = current_stage.stageToScreen(obj.hurtbox.rect)
                     obj.hurtbox.draw(screen,offset,scale)
                 
                 hitbox_collisions = pygame.sprite.spritecollide(obj.hurtbox, active_hitboxes, False)
                 for hbox in hitbox_collisions:
                     if hbox.owner != obj:
                         hbox.onCollision(obj)
             if (self.settings['showHitboxes']):
                 for hbox in active_hitboxes:
                     hbox.draw(screen,current_stage.stageToScreen(hbox.rect),scale)
         for fight in currentFighters:
             if fight.rect.right < current_stage.blast_line.left or fight.rect.left > current_stage.blast_line.right or fight.rect.top > current_stage.blast_line.bottom or fight.rect.bottom < current_stage.blast_line.top:
                 if not trackStocks:
                     # Get score
                     fight.die()
                 else:
                     fight.stocks -= 1
                     print fight.stocks
                     if fight.stocks == 0:
                         fight.die(False)
                         currentFighters.remove(fight)
                         #If someon's eliminated and there's 1 or fewer people left
                         if len(currentFighters) < 2:
                             exitStatus = 2 #Game set
                     else: fight.die()
         
         if trackTime and clockTime <= 5:
             countdownSprite.draw(screen, countdownSprite.rect.topleft, 1)
             countAlpha = max(0,countAlpha - 5)
             countdownSprite.alpha(countAlpha)
             
         # End object updates
         
         current_stage.drawFG(screen)    
         clock.tick(60)  
         pygame.display.flip()
     # End while loop
     
     if exitStatus == 1:
         print("NO CONTEST")
     elif exitStatus == 2:
         musicManager.getMusicManager().stopMusic()
         frameHold = 0
         gameSprite = spriteManager.TextSprite('GAME!','full Pack 2025',128,[0,0,0])
         gameSprite.rect.center = screen.get_rect().center
         while frameHold < 150:
             gameSprite.draw(screen, gameSprite.rect.topleft, 1)
             clock.tick(60)
             pygame.display.flip()
             frameHold += 1
         print("GAME SET")
     elif exitStatus == -1:
         print("ERROR!")
         
     return exitStatus # This'll pop us back to the character select screen.
Example #40
0
    def gameEventLoop(self):
        for cont in self.controllers:
            cont.passInputs()
        rawEvents = pygame.event.get()
        #process events through network.
        events = self.network.processEvents(rawEvents)
        for event in events:
            if event.type == pygame.QUIT:
                os._exit(1)
                return -1

            for cont in self.controllers:
                cont.getInputs(event)

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_F2:
                    print("saving screenshot")
                    pygame.image.save(
                        self.screen,
                        settingsManager.createPath('screenshot.jpg'))
                elif (event.key == pygame.K_LSHIFT
                      or event.key == pygame.K_RSHIFT):
                    self.debug_mode = not self.debug_mode
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_ESCAPE:
                    self.exit_status = 1

            if event.type == pygame.USEREVENT + 2:
                pygame.time.set_timer(pygame.USEREVENT + 2, 1000)
                self.clock_sprite.changeText(
                    str(self.clock_time / 60) + ':' +
                    str(self.clock_time % 60).zfill(2))
                self.clock_time -= 1
                if self.clock_time <= 5 and self.clock_time > 0:
                    self.countdown_sprite.changeText(str(self.clock_time))
                    self.count_alpha = 255
                if self.clock_time == 0:
                    self.exit_status = 2
        # End pygame event loop

        self.stage.update()
        self.stage.cameraUpdate()
        self.active_hitboxes.add(self.stage.active_hitboxes)
        self.active_hurtboxes.add(self.stage.active_hurtboxes)

        for obj in self.game_objects:
            obj.update()
            if hasattr(obj, 'active_hitboxes'):
                self.active_hitboxes.add(obj.active_hitboxes)
            if hasattr(obj, 'active_hurtboxes'):
                self.active_hurtboxes.add(obj.active_hurtboxes)
        self.checkHitboxClanks()
        self.checkHitboxHits()
        self.network.processFighters(self.current_fighters)
        for fight in self.current_fighters:
            if fight.ecb.current_ecb.rect.right < self.stage.blast_line.left or fight.ecb.current_ecb.rect.left > self.stage.blast_line.right or fight.ecb.current_ecb.rect.top > self.stage.blast_line.bottom or fight.ecb.current_ecb.rect.bottom < self.stage.blast_line.top:
                if not self.track_stocks:
                    # Get score
                    fight.die()
                else:
                    fight.stocks -= 1

                    self.stage.follows.remove(fight.ecb.tracking_rect)
                    print(fight.stocks)
                    if fight.stocks == 0:
                        fight.die(False)
                        self.current_fighters.remove(fight)
                        #If someone's eliminated and there's 1 or fewer people left
                        if len(self.current_fighters) < 2:
                            self.exit_status = 2  #Game set
                    else:
                        fight.die()
                        self.stage.follows.append(fight.ecb.tracking_rect)
        # End object updates
        self.draw()
        pygame.display.update()
        if self.debug_mode:
            print(
                "Paused, press shift key again to continue, press tab to drop into the debugger console"
            )
            self.cameraX = 0
            self.cameraY = 0
            self.zoomVal = 0
            while self.debug_mode:
                self.debugLoop()
Example #41
0
def getMusicList():
    return [(settingsManager.createPath('music/Laszlo - Fall To Light.ogg'), 1,
             "Laszlo - Fall To Light (NCS Release)"),
            (settingsManager.createPath('music/Autumn Warriors.ogg'), 1,
             "Autumn Warriors")]
 def __init__(self,
              playerNum,
              sprite,
              name,
              var):
     self.name = name
     self.var = var
     self.playerNum = playerNum
     self.franchise_icon = spriteManager.ImageSprite(settingsManager.createPath("sprites/default_franchise_icon.png"))
     
     # dataLog holds information for the post-game results screen
     self.dataLog = None
     
     # Whenever a fighter is hit, they are 'tagged' by that player, if they die while tagged, that player gets a point
     self.hitTagged = None
     
     #Initialize engine variables
     self.keyBindings = settingsManager.getSetting('controls_' + str(playerNum))
     self.currentKeys = []
     self.inputBuffer = InputBuffer()
     self.keysHeld = []
     
     self.sprite = sprite
     self.mask = None
     self.ecb = ECB(self)
     
     self.active_hitboxes = pygame.sprite.Group()
     self.articles = pygame.sprite.Group()
     
     self.shield = False
     self.shieldIntegrity = 100
     
     # HitboxLock is a list of hitboxes that will not hit the fighter again for a given amount of time.
     # Each entry in the list is in the form of (frames remaining, owner, hitbox ID)
     self.hitboxLock = []
     
     # When a fighter lets go of a ledge, he can't grab another one until he gets out of the area.
     self.ledgeLock = False
     
     #initialize the action
     self.current_action = None
     self.hurtbox = spriteManager.RectSprite(self.sprite.boundingRect,[255,255,0])
     
     #state variables and flags
     self.angle = 0
     self.grounded = False
     self.rect = self.sprite.rect
     self.jumps = self.var['jumps']
     self.damage = 0
     self.landingLag = 6
     
     self.change_x = 0
     self.change_y = 0
     self.preferred_xspeed = 0
     self.preferred_yspeed = 0
     
     #facing right = 1, left = -1
     self.facing = 1
     
     #list of all of the other things to worry about
     self.gameState = None
 def startShield(self):
     self.articles.add(article.ShieldArticle(settingsManager.createPath("sprites/melee_shield.png"),self))
 def __init__(self, directory):
     self.myMusic = []
     self.directory = settingsManager.createPath(directory)
Example #45
0
    def endBattle(self, _exitStatus):
        if not (_exitStatus == 1 or _exitStatus == 2 or _exitStatus == 3):
            print(
                "An error occured that caused TUSSLE to stop working. If you can replicate this error, please file a bug report so the relevant developers can fix it. Post-mortem debugging coming soon. "
            )
        result_sprites = []
        width = settingsManager.getSetting('windowWidth')
        height = settingsManager.getSetting('windowHeight')
        for i in range(0, len(self.players)):
            print(self.players)
            print("player" + str(i))
            fighter = self.players[i]
            result_sprite = spriteManager.RectSprite(
                pygame.Rect((width / 4) * i, 0, (width / 4), height),
                pygame.Color(settingsManager.getSetting('playerColor' +
                                                        str(i))))
            result_sprite.image.set_alpha(255)
            name_sprite = spriteManager.TextSprite(fighter.name, _size=24)
            name_sprite.rect.midtop = (result_sprite.rect.width / 2, 0)
            result_sprite.image.blit(name_sprite.image,
                                     name_sprite.rect.topleft)

            score = fighter.data_log.getData('KOs') - fighter.data_log.getData(
                'Falls')
            text = spriteManager.TextSprite('Score: ' + str(score))
            result_sprite.image.blit(text.image, (0, 32))

            dist = 48

            print(fighter.data_log.data)
            for item, val in fighter.data_log.data.items():
                text = spriteManager.TextSprite(str(item) + ': ' + str(val))
                result_sprite.image.blit(text.image, (0, dist))
                dist += 16
            result_sprites.append(result_sprite)
            confirmed_list = [False] * len(
                result_sprites
            )  #This pythonic hacking will make a list of falses equal to the result panels

        while 1:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    os._exit(1)
                    return -1
                for i in range(0, len(self.players)):
                    controls = settingsManager.getControls(i)
                    k = controls.getInputs(event)
                    if k == 'attack':
                        result_sprites[i].image.set_alpha(0)
                        confirmed_list[i] = True
                    elif k == 'special':
                        result_sprites[i].image.set_alpha(255)
                        confirmed_list[i] = False
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RETURN:
                        print("Saving screenshot")
                        pygame.image.save(
                            self.screen,
                            settingsManager.createPath('screenshot.jpg'))
                    if event.key == pygame.K_ESCAPE:
                        return

            self.screen.fill((0, 0, 0))
            for sprite in result_sprites:
                sprite.draw(self.screen, sprite.rect.topleft, 1.0)

            if all(confirmed_list):
                return
            pygame.display.flip()
        return
 def __init__(self, _surface, _parent=None, _width=20, _height=1, corner=(0, 0), _font="unifont-9.0.02", _size=16):
     self.surface = _surface
     self.parent = _parent
     self.corner = _corner
     if _parent is not None:
         _parent.children.append(self)
         bgcolor = _parent.bgcolor-pygame.Color(16, 16, 16)
     else:
         bgcolor = pygame.Color(255, 255, 255)
     pygcurse.PygcurseSurface.__init__(self, _width, _height, font=pygame.font.Font(settingsManager.createPath(_font+".ttf"),_size), fgcolor=pygame.Color(0, 0, 0), bgcolor=bgcolor)
     self.children = []
     self.focused = None
def getMusicList():
    return [(settingsManager.createPath('music/Laszlo - Fall To Light.ogg'),2,"Laszlo - Fall To Light (NCS Release)"),
            (settingsManager.createPath('music/No Turning Back.ogg'),2,"No Turning Back"),
            (settingsManager.createPath('music/True Arena.ogg'),1,"No Turning Back (Chiptune ver.)")]
Example #48
0
 def getStagePortrait(self,stage):
     portrait = stage.getStageIcon()
     if portrait == None:
         portrait = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","icon_blank.png")))
     return portrait
Example #49
0
 def getFighterPortrait(self,fighter):
     portrait = fighter.cssIcon()
     if portrait == None:
         portrait = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","icon_unknown.png")))
     return portrait