import pygame, time, random
# time is for the timer.
# random is for random numbers.

sprites = [] # List of sprites
    
class Stage():
    def __init__(self):
        self.costumes = {}
        self.costumeNumber = 0
        self.currentCostume = False
        self.bgColor = (255, 255, 255)

    # Stage-specific functions
    def setColor(self, r, g, b):
        self.bgColor = (r, g, b)

    # Functions shared by sprites
    def addCostume(self, costumePath, costumeName):
        costume = pygame.image.load(costumePath)
        self.costumes[costumeName] = costume

    def setCostumeByName(self, name):
        if name in self.costumes:
            self.currentCostume = self.costumes[name]
            self.costumeNumber = self.costumes.keys().index(name)

    def setCostumeByNumber(self, number):
        if number < len(self.costumes.keys()):
            costumeName = self.costumes.keys()[number]
            self.setCostumeByName(costumeName)


hissStage = Stage()

class Sprite(Stage):
    def __init__(self, name="Default Name"):
        Stage.__init__(self)
        self.name = name # Why is this here?
        self.xpos = 0
        self.ypos = 0
        self.direction = 0 # Default is 0, not 90 - it makes more sense
        self.showing = True
        self.scale = 1 # How much to multiply it by in the scale
        sprites.append(self)
        
    def show(self):
        self.showing = True
        
    def hide(self):
        self.showing = False

    def changeXBy(self, amount):
        self.xpos += amount

    def changeYBy(self, amount):
        self.ypos += amount

    def goTo(self, xpos, ypos):
        self.xpos = xpos
        self.ypos = ypos

    def setXTo(self, xpos):
        self.xpos = xpos

    def setYTo(self, ypos):
        self.ypos = ypos

    def changeScaleBy(self, amount):
        self.scale += amount

    def setScaleTo(self, scale):
        self.scale = scale

    def isVisible(self):
        '''Check if the object is visible, not just showing.'''
        return self.showing and self.scale > 0

pygame.init()
screen = pygame.display.set_mode((800, 600)) # Add customizable dimensions later on?
caption = pygame.display.set_caption("Hiss Project")
time.clock()

def blit():
    screen.fill(hissStage.bgColor)
    
    for obj in sprites:
        if obj.isVisible():
            # Now that we know the object's showing, do calculations and stuff
            image = obj.currentCostume # So we can modify it
            if not obj.scale == 1: # Don't do anything if it's a scale of 1
                imageSize = image.get_size()
                image = pygame.transform.scale(image, (int(imageSize[0] * obj.scale), int(imageSize[1] * obj.scale)))
            screen.blit(image, (obj.xpos, obj.ypos))

    pygame.display.flip()
    

@@ -208,24 +208,54 @@
 eNumber = 0%0A
+        self.costumeName = %22%22%0A
         self
@@ -597,16 +597,396 @@
 ostume%0A%0A
+    def deleteCostumeByName(self, name):%0A        self.costumes.pop(name, None)%0A        setCostumeByName(self.costumeName) # Make sure we recalculate the costume number!%0A%0A    def deleteCostumeByNumber(self, number)%0A        if number %3C len(self.costumes.keys()):%0A            costumeName = self.costumes.keys()%5Bnumber%5D%0A            self.deleteCostumeByName(costumeName)%0A            %0A%0A
     def 
@@ -1103,16 +1103,52 @@
 s%5Bname%5D%0A
+            self.costumeName = name%0A
         

Delete costumes You can now delete costumes (for more of #2), although I don't see why you'd need to. Anyways, this about wraps up the changes I need to make for #3. I'll double-check now.