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'
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)
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, _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)
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 __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()
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
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)
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 = "> "
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)
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()
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)
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
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.
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()
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)
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.)")]
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 getFighterPortrait(self,fighter): portrait = fighter.cssIcon() if portrait == None: portrait = spriteManager.ImageSprite(settingsManager.createPath(os.path.join("sprites","icon_unknown.png"))) return portrait