diff options
| author | Colin Noga <Tempus@chronometry.ca> | 2012-02-17 03:27:27 -0600 | 
|---|---|---|
| committer | Colin Noga <Tempus@chronometry.ca> | 2012-02-17 03:27:27 -0600 | 
| commit | 41d8073ac1b00409827968308689c6844bdf7ab8 (patch) | |
| tree | b8a2d650d64c1090f31f09ddda314ea7bc15a404 | |
| parent | d686ee1250bf148e600830642ed44f7d85357dd3 (diff) | |
| download | koopatlas-41d8073ac1b00409827968308689c6844bdf7ab8.tar.gz koopatlas-41d8073ac1b00409827968308689c6844bdf7ab8.zip | |
Fixed tileset shit
Diffstat (limited to '')
| -rwxr-xr-x | Koopuzzle/Koopuzzle.py | 2546 | ||||
| -rw-r--r-- | Tilesets/Test3.arc | bin | 1053536 -> 0 bytes | |||
| -rw-r--r-- | src/tileset.py | 16 | 
3 files changed, 1279 insertions, 1283 deletions
| diff --git a/Koopuzzle/Koopuzzle.py b/Koopuzzle/Koopuzzle.py index 73ced82..9c136d3 100755 --- a/Koopuzzle/Koopuzzle.py +++ b/Koopuzzle/Koopuzzle.py @@ -31,167 +31,167 @@ Tileset = None  ########################## Tileset Class and Tile/Object Subclasses #########################  class TilesetClass(): -    '''Contains Tileset data. Inits itself to a blank tileset. -    Methods: addTile, removeTile, addObject, removeObject, clear''' - -    class Tile(): -        def __init__(self, image): -            '''Tile Constructor''' -                         -            self.image = image - - -    class Object(): -     -        def __init__(self, tilelist, height, width, wrapmode): -            '''Tile Constructor''' -             -            self.height = height -            self.width = width -             -            self.tiles = tilelist - -            self.wrap = wrapmode - -                # --- Wrapmodes --- -                # 'Repeat' -                # 'Stretch Center' -                # 'Stretch X' -                # 'Stretch Y' -                # 'Repeat Bottom' -                # 'Repeat Top' -                # 'Repeat Left' -                # 'Repeat Right' -                # 'Upward slope' (LL to UR) -                # 'Downward slope' (UL to LR) -                         - -    def __init__(self): -        '''Constructor''' -         -        self.tiles = [] -        self.objects = [] -         -        self.slot = 0 - - -    def addTile(self, image): -        '''Adds an tile class to the tile list with the passed image or parameters''' - -        self.tiles.append(self.Tile(image)) -         - -    def addObject(self, tilelist = [[0xFFFF]], height = 1, width = 1, wrapmode = 0): -        '''Adds a new object''' -         -        global Tileset - -        # Initialize trusim power! This is required to work, due to python's single default parameter initialization -        if tilelist == [[0xFFFF]]: -            tilelist = [[0xFFFF]] -             -        self.objects.append(self.Object(tilelist, height, width, wrapmode)) -         -         -    def removeObject(self, index): -        '''Removes an Object by Index number. Don't use this much, because we want objects to preserve their ID.''' -         -        self.objects.pop(index) -        -     -    def clear(self): -        '''Clears the tileset for a new file''' -         -        self.tiles = [] -        self.objects = [] -         -         -    def clearObjects(self): -        '''Clears the object data''' -         -        self.objects = [] -                  +	'''Contains Tileset data. Inits itself to a blank tileset. +	Methods: addTile, removeTile, addObject, removeObject, clear''' + +	class Tile(): +		def __init__(self, image): +			'''Tile Constructor''' +						 +			self.image = image + + +	class Object(): +	 +		def __init__(self, tilelist, height, width, wrapmode): +			'''Tile Constructor''' +			 +			self.height = height +			self.width = width +			 +			self.tiles = tilelist + +			self.wrap = wrapmode + +				# --- Wrapmodes --- +				# 'Repeat' +				# 'Stretch Center' +				# 'Stretch X' +				# 'Stretch Y' +				# 'Repeat Bottom' +				# 'Repeat Top' +				# 'Repeat Left' +				# 'Repeat Right' +				# 'Upward slope' (LL to UR) +				# 'Downward slope' (UL to LR) +						 + +	def __init__(self): +		'''Constructor''' +		 +		self.tiles = [] +		self.objects = [] +		 +		self.slot = 0 + + +	def addTile(self, image): +		'''Adds an tile class to the tile list with the passed image or parameters''' + +		self.tiles.append(self.Tile(image)) +		 + +	def addObject(self, tilelist = [[0xFFFF]], height = 1, width = 1, wrapmode = 0): +		'''Adds a new object''' +		 +		global Tileset + +		# Initialize trusim power! This is required to work, due to python's single default parameter initialization +		if tilelist == [[0xFFFF]]: +			tilelist = [[0xFFFF]] +			 +		self.objects.append(self.Object(tilelist, height, width, wrapmode)) +		 +		 +	def removeObject(self, index): +		'''Removes an Object by Index number. Don't use this much, because we want objects to preserve their ID.''' +		 +		self.objects.pop(index) +	    +	 +	def clear(self): +		'''Clears the tileset for a new file''' +		 +		self.tiles = [] +		self.objects = [] +		 +		 +	def clearObjects(self): +		'''Clears the object data''' +		 +		self.objects = [] +				   #############################################################################################  ##################### Object List Widget and Model Setup with Painter #######################  class objectList(QtGui.QListView): -         -    def __init__(self, parent=None): -        super(objectList, self).__init__(parent) +		 +	def __init__(self, parent=None): +		super(objectList, self).__init__(parent) -        self.setFlow(QtGui.QListView.TopToBottom) -        # self.setViewMode(QtGui.QListView.ListMode) -        self.setIconSize(QtCore.QSize(96,96)) -        self.setGridSize(QtCore.QSize(100,100)) -        self.setMovement(QtGui.QListView.Static) -        self.setBackgroundRole(QtGui.QPalette.BrightText) -        self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) -        self.setWrapping(False) +		self.setFlow(QtGui.QListView.TopToBottom) +		# self.setViewMode(QtGui.QListView.ListMode) +		self.setIconSize(QtCore.QSize(96,96)) +		self.setGridSize(QtCore.QSize(100,100)) +		self.setMovement(QtGui.QListView.Static) +		self.setBackgroundRole(QtGui.QPalette.BrightText) +		self.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) +		self.setWrapping(False) -         +		  def SetupObjectModel(self, objects, tiles, treecko, group): -    global Tileset -    self.clear() -     -    count = 0 -    for object in objects: -        tex = QtGui.QPixmap(object.width * 24, object.height * 24) -        tex.fill(QtCore.Qt.transparent) -        painter = QtGui.QPainter(tex) -         -        Xoffset = 0 -        Yoffset = 0 -         -        for i in range(len(object.tiles)): -            for tile in object.tiles[i]: -                if (tile != 0xFFFF): -                    painter.drawPixmap(Xoffset, Yoffset, tiles[tile].image) -                Xoffset += 24 -            Xoffset = 0 -            Yoffset += 24 -                         -        painter.end() - -        self.appendRow(QtGui.QStandardItem(QtGui.QIcon(tex), 'Object {0}'.format(count))) -     -        count += 1 - -    if group != None: -        grovyle = cPickle.loads(group) -        makeTree(grovyle, treecko) +	global Tileset +	self.clear() +	 +	count = 0 +	for object in objects: +		tex = QtGui.QPixmap(object.width * 24, object.height * 24) +		tex.fill(QtCore.Qt.transparent) +		painter = QtGui.QPainter(tex) +		 +		Xoffset = 0 +		Yoffset = 0 +		 +		for i in range(len(object.tiles)): +			for tile in object.tiles[i]: +				if (tile != 0xFFFF): +					painter.drawPixmap(Xoffset, Yoffset, tiles[tile].image) +				Xoffset += 24 +			Xoffset = 0 +			Yoffset += 24 +						 +		painter.end() + +		self.appendRow(QtGui.QStandardItem(QtGui.QIcon(tex), 'Object {0}'.format(count))) +	 +		count += 1 + +	if group != None: +		grovyle = cPickle.loads(group) +		makeTree(grovyle, treecko)  def makeTree(grovyle, treecko): -         -    for razorLeaf in grovyle: +		 +	for razorLeaf in grovyle: -        if (type(razorLeaf) is str) and (razorLeaf[:6] == "Object"): +		if (type(razorLeaf) is str) and (razorLeaf[:6] == "Object"): -            pix = QtGui.QPixmap(24, 24) -            pix.fill(QtCore.Qt.transparent) -            painter = QtGui.QPainter(pix) -            painter.drawPixmap(0, 0, pix) -            painter.end() +			pix = QtGui.QPixmap(24, 24) +			pix.fill(QtCore.Qt.transparent) +			painter = QtGui.QPainter(pix) +			painter.drawPixmap(0, 0, pix) +			painter.end() -            a = QtGui.QTreeWidgetItem(treecko) -            a.setText(0, razorLeaf) -            a.setFlags(QtCore.Qt.ItemFlags(0x25)) -            a.setIcon(1, QtGui.QIcon(pix)) +			a = QtGui.QTreeWidgetItem(treecko) +			a.setText(0, razorLeaf) +			a.setFlags(QtCore.Qt.ItemFlags(0x25)) +			a.setIcon(1, QtGui.QIcon(pix)) -        else: +		else: -            a = QtGui.QTreeWidgetItem(treecko) -            a.setText(0, razorLeaf[0]) -            a.setFlags(QtCore.Qt.ItemFlags(0x2F)) -            a.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator) -            a.setExpanded(True) +			a = QtGui.QTreeWidgetItem(treecko) +			a.setText(0, razorLeaf[0]) +			a.setFlags(QtCore.Qt.ItemFlags(0x2F)) +			a.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator) +			a.setExpanded(True) -            makeTree(razorLeaf[1], a) +			makeTree(razorLeaf[1], a) @@ -199,15 +199,15 @@ def makeTree(grovyle, treecko):  @QtCore.pyqtSlot(QtGui.QTreeWidgetItem, int)  def connectToTileWidget(tree, column): -    row = tree.text(0) -    if row[:7] == "Object ": +	row = tree.text(0) +	if row[:7] == "Object ": -        newrow = int(row[7:]) -        index = window.objmodel.index(newrow, 0) -         -        window.objectList.setCurrentIndex(index)  +		newrow = int(row[7:]) +		index = window.objmodel.index(newrow, 0) +		 +		window.objectList.setCurrentIndex(index)  -        window.tileWidget.setObject(index) +		window.tileWidget.setObject(index) @@ -216,550 +216,550 @@ def connectToTileWidget(tree, column):  class displayWidget(QtGui.QListView): -         -    def __init__(self, parent=None): -        super(displayWidget, self).__init__(parent) - -        self.setMinimumWidth(828) -        self.setMaximumWidth(828) -        self.setMinimumHeight(404) -        self.setMaximumHeight(404) -        self.setDragEnabled(True) -        self.setViewMode(QtGui.QListView.IconMode) -        self.setIconSize(QtCore.QSize(24,24)) -        self.setGridSize(QtCore.QSize(25,25)) -        self.setMovement(QtGui.QListView.Static) -        self.setAcceptDrops(False) -        self.setDropIndicatorShown(True) -        self.setResizeMode(QtGui.QListView.Adjust) -        self.setUniformItemSizes(True) -        self.setBackgroundRole(QtGui.QPalette.BrightText) -        self.setMouseTracking(True) -        self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) - -        self.setItemDelegate(self.TileItemDelegate()) - -                 -                 -    class TileItemDelegate(QtGui.QAbstractItemDelegate): -        """Handles tiles and their rendering""" -         -        def __init__(self): -            """Initialises the delegate""" -            QtGui.QAbstractItemDelegate.__init__(self) -         -        def paint(self, painter, option, index): -            """Paints an object""" - -            global Tileset -            p = index.model().data(index, QtCore.Qt.DecorationRole) -            painter.drawPixmap(option.rect.x(), option.rect.y(), p.pixmap(24,24)) - -            x = option.rect.x() -            y = option.rect.y() -             - -            # Highlight stuff.  -            colour = QtGui.QColor(option.palette.highlight()) -            colour.setAlpha(80) - -            if option.state & QtGui.QStyle.State_Selected: -                painter.fillRect(option.rect, colour) -             -         -        def sizeHint(self, option, index): -            """Returns the size for the object""" -            return QtCore.QSize(24,24) -         -         -         +		 +	def __init__(self, parent=None): +		super(displayWidget, self).__init__(parent) + +		self.setMinimumWidth(828) +		self.setMaximumWidth(828) +		self.setMinimumHeight(404) +		self.setMaximumHeight(404) +		self.setDragEnabled(True) +		self.setViewMode(QtGui.QListView.IconMode) +		self.setIconSize(QtCore.QSize(24,24)) +		self.setGridSize(QtCore.QSize(25,25)) +		self.setMovement(QtGui.QListView.Static) +		self.setAcceptDrops(False) +		self.setDropIndicatorShown(True) +		self.setResizeMode(QtGui.QListView.Adjust) +		self.setUniformItemSizes(True) +		self.setBackgroundRole(QtGui.QPalette.BrightText) +		self.setMouseTracking(True) +		self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) + +		self.setItemDelegate(self.TileItemDelegate()) + +				 +				 +	class TileItemDelegate(QtGui.QAbstractItemDelegate): +		"""Handles tiles and their rendering""" +		 +		def __init__(self): +			"""Initialises the delegate""" +			QtGui.QAbstractItemDelegate.__init__(self) +		 +		def paint(self, painter, option, index): +			"""Paints an object""" + +			global Tileset +			p = index.model().data(index, QtCore.Qt.DecorationRole) +			painter.drawPixmap(option.rect.x(), option.rect.y(), p.pixmap(24,24)) + +			x = option.rect.x() +			y = option.rect.y() +			 + +			# Highlight stuff.  +			colour = QtGui.QColor(option.palette.highlight()) +			colour.setAlpha(80) + +			if option.state & QtGui.QStyle.State_Selected: +				painter.fillRect(option.rect, colour) +			 +		 +		def sizeHint(self, option, index): +			"""Returns the size for the object""" +			return QtCore.QSize(24,24) +		 +		 +		  #############################################################################################  ############################ Tile widget for drag n'drop Objects ############################  class tileOverlord(QtGui.QWidget): -    def __init__(self): -        super(tileOverlord, self).__init__() - -        # Setup Widgets -        self.tiles = tileWidget() - -        self.addObject = QtGui.QPushButton('Add') -        self.removeObject = QtGui.QPushButton('Remove') - -        self.addRow = QtGui.QPushButton('+') -        self.removeRow = QtGui.QPushButton('-') -     -        self.addColumn = QtGui.QPushButton('+') -        self.removeColumn = QtGui.QPushButton('-') - -        self.tilingMethod = QtGui.QComboBox() - -        self.tilingMethod.addItems(['Repeat',  -                                    'Stretch Center', -                                    'Stretch X', -                                    'Stretch Y', -                                    'Repeat Bottom', -                                    'Repeat Top', -                                    'Repeat Left', -                                    'Repeat Right', -                                    'Upward slope', -                                    'Downward slope']) - - -        # Connections -        self.addObject.released.connect(self.addObj) -        self.removeObject.released.connect(self.removeObj) -        self.addRow.released.connect(self.tiles.addRow) -        self.removeRow.released.connect(self.tiles.removeRow) -        self.addColumn.released.connect(self.tiles.addColumn) -        self.removeColumn.released.connect(self.tiles.removeColumn) - -        self.tilingMethod.activated.connect(self.setTiling) - - -        # Layout -        layout = QtGui.QGridLayout()         -         -        layout.addWidget(self.tilingMethod, 0, 0, 1, 3) - -        layout.addWidget(self.addObject, 0, 6, 1, 1) -        layout.addWidget(self.removeObject, 0, 7, 1, 1) -         -        layout.setRowMinimumHeight(1, 40) -         -        layout.setRowStretch(1, 1) -        layout.setRowStretch(2, 5) -        layout.setRowStretch(5, 5) -        layout.addWidget(self.tiles, 2, 1, 4, 6) -         -        layout.addWidget(self.addColumn, 3, 7, 1, 1) -        layout.addWidget(self.removeColumn, 4, 7, 1, 1) -        layout.addWidget(self.addRow, 6, 3, 1, 1) -        layout.addWidget(self.removeRow, 6, 4, 1, 1) -         -        self.setLayout(layout) -        - -    def addObj(self): -        global Tileset -         -        Tileset.addObject() -         -        pix = QtGui.QPixmap(24, 24) -        pix.fill(QtCore.Qt.transparent) -        painter = QtGui.QPainter(pix) -        painter.drawPixmap(0, 0, pix) -        painter.end() -                     -        count = len(Tileset.objects) -        window.objmodel.appendRow(QtGui.QStandardItem(QtGui.QIcon(pix), 'Object {0}'.format(count-1))) -        a = QtGui.QTreeWidgetItem(window.treeki) -        a.setText(0, 'Object {0}'.format(count-1)) -        a.setFlags(QtCore.Qt.ItemFlags(0x25)) -        a.setIcon(1, QtGui.QIcon(pix)) - -        index = window.objectList.currentIndex() -        window.objectList.setCurrentIndex(index) -        self.setObject(index) - -        window.objectList.update() -        self.update() -         - -    def removeObj(self): -        global Tileset - -        index = window.objectList.currentIndex() - -        Tileset.removeObject(index.row()) -        window.objmodel.removeRow(index.row()) -        self.tiles.clear() - -        matchList = window.treeki.findItems("Object {0}".format(index.row()), QtCore.Qt.MatchExactly | QtCore.Qt.MatchRecursive | QtCore.Qt.MatchWrap) -        for x in matchList: -            index = window.treeki.indexFromItem(x, 0) -            realx = index.row() -            if x.parent(): -                y = x.parent().takeChild(realx) -                del y -            else: -                y =window.treeki.takeTopLevelItem(realx) -                del y - - -        window.objectList.update() -        self.update() - - -    def setObject(self, index): -        global Tileset -        object = Tileset.objects[index.row()] -      -        self.tilingMethod.setCurrentIndex(object.wrap)            -                 -        self.tiles.setObject(object) - -     -    @QtCore.pyqtSlot(int) -    def setTiling(self, listindex): -        global Tileset -         -        index = window.objectList.currentIndex() -        object = Tileset.objects[index.row()] -         -        object.wrap = listindex -             -        self.tiles.update() -        +	def __init__(self): +		super(tileOverlord, self).__init__() + +		# Setup Widgets +		self.tiles = tileWidget() + +		self.addObject = QtGui.QPushButton('Add') +		self.removeObject = QtGui.QPushButton('Remove') + +		self.addRow = QtGui.QPushButton('+') +		self.removeRow = QtGui.QPushButton('-') +	 +		self.addColumn = QtGui.QPushButton('+') +		self.removeColumn = QtGui.QPushButton('-') + +		self.tilingMethod = QtGui.QComboBox() + +		self.tilingMethod.addItems(['Repeat',  +									'Stretch Center', +									'Stretch X', +									'Stretch Y', +									'Repeat Bottom', +									'Repeat Top', +									'Repeat Left', +									'Repeat Right', +									'Upward slope', +									'Downward slope']) + + +		# Connections +		self.addObject.released.connect(self.addObj) +		self.removeObject.released.connect(self.removeObj) +		self.addRow.released.connect(self.tiles.addRow) +		self.removeRow.released.connect(self.tiles.removeRow) +		self.addColumn.released.connect(self.tiles.addColumn) +		self.removeColumn.released.connect(self.tiles.removeColumn) + +		self.tilingMethod.activated.connect(self.setTiling) + + +		# Layout +		layout = QtGui.QGridLayout()         +		 +		layout.addWidget(self.tilingMethod, 0, 0, 1, 3) + +		layout.addWidget(self.addObject, 0, 6, 1, 1) +		layout.addWidget(self.removeObject, 0, 7, 1, 1) +		 +		layout.setRowMinimumHeight(1, 40) +		 +		layout.setRowStretch(1, 1) +		layout.setRowStretch(2, 5) +		layout.setRowStretch(5, 5) +		layout.addWidget(self.tiles, 2, 1, 4, 6) +		 +		layout.addWidget(self.addColumn, 3, 7, 1, 1) +		layout.addWidget(self.removeColumn, 4, 7, 1, 1) +		layout.addWidget(self.addRow, 6, 3, 1, 1) +		layout.addWidget(self.removeRow, 6, 4, 1, 1) +		 +		self.setLayout(layout) +	    + +	def addObj(self): +		global Tileset +		 +		Tileset.addObject() +		 +		pix = QtGui.QPixmap(24, 24) +		pix.fill(QtCore.Qt.transparent) +		painter = QtGui.QPainter(pix) +		painter.drawPixmap(0, 0, pix) +		painter.end() +					 +		count = len(Tileset.objects) +		window.objmodel.appendRow(QtGui.QStandardItem(QtGui.QIcon(pix), 'Object {0}'.format(count-1))) +		a = QtGui.QTreeWidgetItem(window.treeki) +		a.setText(0, 'Object {0}'.format(count-1)) +		a.setFlags(QtCore.Qt.ItemFlags(0x25)) +		a.setIcon(1, QtGui.QIcon(pix)) + +		index = window.objectList.currentIndex() +		window.objectList.setCurrentIndex(index) +		self.setObject(index) + +		window.objectList.update() +		self.update() +		 + +	def removeObj(self): +		global Tileset + +		index = window.objectList.currentIndex() + +		Tileset.removeObject(index.row()) +		window.objmodel.removeRow(index.row()) +		self.tiles.clear() + +		matchList = window.treeki.findItems("Object {0}".format(index.row()), QtCore.Qt.MatchExactly | QtCore.Qt.MatchRecursive | QtCore.Qt.MatchWrap) +		for x in matchList: +			index = window.treeki.indexFromItem(x, 0) +			realx = index.row() +			if x.parent(): +				y = x.parent().takeChild(realx) +				del y +			else: +				y =window.treeki.takeTopLevelItem(realx) +				del y + + +		window.objectList.update() +		self.update() + + +	def setObject(self, index): +		global Tileset +		object = Tileset.objects[index.row()] +	  +		self.tilingMethod.setCurrentIndex(object.wrap)            +				 +		self.tiles.setObject(object) + +	 +	@QtCore.pyqtSlot(int) +	def setTiling(self, listindex): +		global Tileset +		 +		index = window.objectList.currentIndex() +		object = Tileset.objects[index.row()] +		 +		object.wrap = listindex +			 +		self.tiles.update() +	     class tileWidget(QtGui.QWidget): -     -    def __init__(self): -        super(tileWidget, self).__init__() +	 +	def __init__(self): +		super(tileWidget, self).__init__() -        self.tiles = [] +		self.tiles = [] -        self.size = [1, 1] -        self.setMinimumSize(120, 120) +		self.size = [1, 1] +		self.setMinimumSize(120, 120) -        self.slope = 0 +		self.slope = 0 -        self.highlightedRect = QtCore.QRect() +		self.highlightedRect = QtCore.QRect() -        self.setAcceptDrops(True) -        self.object = 0 +		self.setAcceptDrops(True) +		self.object = 0 -    def clear(self): -        self.tiles = [] -        self.size = [1, 1] # [width, height] -         -        self.slope = 0 -        self.highlightedRect = QtCore.QRect() +	def clear(self): +		self.tiles = [] +		self.size = [1, 1] # [width, height] +		 +		self.slope = 0 +		self.highlightedRect = QtCore.QRect() -        self.update() +		self.update() -        return +		return -    def addColumn(self): -        global Tileset -         -        if self.size[0] >= 24: -            return -             -        if len(Tileset.objects) == 0: -            window.tileWidget.addObj() +	def addColumn(self): +		global Tileset +		 +		if self.size[0] >= 24: +			return +			 +		if len(Tileset.objects) == 0: +			window.tileWidget.addObj() -        self.size[0] += 1 -        self.setMinimumSize(self.size[0]*24, self.size[1]*24) +		self.size[0] += 1 +		self.setMinimumSize(self.size[0]*24, self.size[1]*24) -        pix = QtGui.QPixmap(24,24) -        pix.fill(QtGui.QColor(205, 205, 255)) +		pix = QtGui.QPixmap(24,24) +		pix.fill(QtGui.QColor(205, 205, 255)) -        for y in xrange(self.size[1]): -            self.tiles.insert(((y+1) * self.size[0]) -1, [self.size[0]-1, y, pix]) +		for y in xrange(self.size[1]): +			self.tiles.insert(((y+1) * self.size[0]) -1, [self.size[0]-1, y, pix]) -        curObj = Tileset.objects[self.object] -        curObj.width += 1 +		curObj = Tileset.objects[self.object] +		curObj.width += 1 -        for row in curObj.tiles: -            row.append(0xFFFF) -             -        self.update() -        self.updateList() +		for row in curObj.tiles: +			row.append(0xFFFF) +			 +		self.update() +		self.updateList() -    def removeColumn(self): -        global Tileset +	def removeColumn(self): +		global Tileset -        if self.size[0] == 1: -            return +		if self.size[0] == 1: +			return -        if len(Tileset.objects) == 0: -            window.tileWidget.addObj() +		if len(Tileset.objects) == 0: +			window.tileWidget.addObj() -        for y in xrange(self.size[1]): -            self.tiles.pop(((y+1) * self.size[0])-(y+1)) +		for y in xrange(self.size[1]): +			self.tiles.pop(((y+1) * self.size[0])-(y+1)) -        self.size[0] = self.size[0] - 1 -        self.setMinimumSize(self.size[0]*24, self.size[1]*24) +		self.size[0] = self.size[0] - 1 +		self.setMinimumSize(self.size[0]*24, self.size[1]*24) -        curObj = Tileset.objects[self.object] -        curObj.width -= 1 +		curObj = Tileset.objects[self.object] +		curObj.width -= 1 -        for row in curObj.tiles: -            row.pop() +		for row in curObj.tiles: +			row.pop() -        self.update() -        self.updateList() +		self.update() +		self.updateList() -    def addRow(self): -        global Tileset +	def addRow(self): +		global Tileset -        if len(Tileset.objects) == 0: -            window.tileWidget.addObj() +		if len(Tileset.objects) == 0: +			window.tileWidget.addObj() -        if self.size[1] >= 24: -            return -         -        self.size[1] += 1 -        self.setMinimumSize(self.size[0]*24, self.size[1]*24) +		if self.size[1] >= 24: +			return +		 +		self.size[1] += 1 +		self.setMinimumSize(self.size[0]*24, self.size[1]*24) -        pix = QtGui.QPixmap(24,24) -        pix.fill(QtGui.QColor(205, 205, 255)) +		pix = QtGui.QPixmap(24,24) +		pix.fill(QtGui.QColor(205, 205, 255)) -        for x in xrange(self.size[0]): -            self.tiles.append([x, self.size[1]-1, pix]) +		for x in xrange(self.size[0]): +			self.tiles.append([x, self.size[1]-1, pix]) -        curObj = Tileset.objects[self.object] -        curObj.height += 1 +		curObj = Tileset.objects[self.object] +		curObj.height += 1 -        curObj.tiles.append([]) -        for i in xrange(0, curObj.width): -            curObj.tiles[len(curObj.tiles)-1].append(0xFFFF) - -        self.update() -        self.updateList() - -     -    def removeRow(self): -        global Tileset - -        if self.size[1] == 1: -            return - -        if len(Tileset.objects) == 0: -            window.tileWidget.addObj() - -        for x in xrange(self.size[0]): -            self.tiles.pop() -         -        self.size[1] -= 1 -        self.setMinimumSize(self.size[0]*24, self.size[1]*24) - -        curObj = Tileset.objects[self.object] -        curObj.height -= 1 - -        curObj.tiles.pop() - -        self.update() -        self.updateList() - - -    def setObject(self, object): -        self.clear() -             -        global Tileset -             -        self.size = [object.width, object.height] -         -        if object.wrap > 7: -            if (object.wrap == 8) or (object.wrap == 10): -                self.slope = 1 -            else: -                self.slope = -1 - -        x = 0 -        y = 0 -        for row in object.tiles: -            for tile in row: - -                if (tile == 0xFFFF): -                    pix = QtGui.QPixmap(24,24) -                    pix.fill(QtGui.QColor(205, 205, 255)) -                    self.tiles.append([x, y, pix]) -                else: -                    self.tiles.append([x, y, Tileset.tiles[tile].image]) - -                x += 1 -            y += 1 -            x = 0 -            -            -        self.object = window.objectList.currentIndex().row()     -        self.update() -        self.updateList() -                - -    def contextMenuEvent(self, event): -     -        TileMenu = QtGui.QMenu(self) -        self.contX = event.x() -        self.contY = event.y() -         -        TileMenu.addAction('Set tile...', self.setTile) - -        TileMenu.exec_(event.globalPos()) - - -    def mousePressEvent(self, event): -        global Tileset - -        if event.button() == 2: -            return - -        if window.tileDisplay.selectedIndexes() == []: -            return - -        currentSelected = window.tileDisplay.selectedIndexes() -         -        ix = 0 -        iy = 0 -        for modelItem in currentSelected: -            # Update yourself! -            centerPoint = self.contentsRect().center() -     -            tile = modelItem.row() -            upperLeftX = centerPoint.x() - self.size[0]*12 -            upperLeftY = centerPoint.y() - self.size[1]*12 -     -            lowerRightX = centerPoint.x() + self.size[0]*12 -            lowerRightY = centerPoint.y() + self.size[1]*12 -     -     -            x = (event.x() - upperLeftX)/24 + ix -            y = (event.y() - upperLeftY)/24 + iy -     -            if event.x() < upperLeftX or event.y() < upperLeftY or event.x() > lowerRightX or event.y() > lowerRightY: -                return -                     -            self.tiles[(y * self.size[0]) + x][2] = Tileset.tiles[tile].image -                     -            Tileset.objects[self.object].tiles[y][x] = (tile) - -            ix += 1 -            if self.size[0]-1 < ix: -                ix = 0 -                iy += 1 -            if iy > self.size[1]-1: -                break -             -             -        self.update() -         -        self.updateList() -         - -    def updateList(self):         -        # Update the list >.> -        object = window.objmodel.itemFromIndex(window.objectList.currentIndex()) -        matchList = window.treeki.findItems("Object {0}".format(window.objectList.currentIndex().row()), QtCore.Qt.MatchExactly | QtCore.Qt.MatchRecursive | QtCore.Qt.MatchWrap) -         - -        tex = QtGui.QPixmap(self.size[0] * 24, self.size[1] * 24) -        tex.fill(QtCore.Qt.transparent) -        painter = QtGui.QPainter(tex) -         -        Xoffset = 0 -        Yoffset = 0 -         -        for tile in self.tiles: -            painter.drawPixmap(tile[0]*24, tile[1]*24, tile[2]) -                         -        painter.end() - -        try: -            object.setIcon(QtGui.QIcon(tex)) -            matchList[0].setIcon(1, QtGui.QIcon(tex)) -        except: -            pass - -        window.objectList.update() -     -             -         -    def setTile(self): -        global Tileset -         -        dlg = self.setTileDialog() -        if dlg.exec_() == QtGui.QDialog.Accepted: -            # Do stuff -            centerPoint = self.contentsRect().center() - -            upperLeftX = centerPoint.x() - self.size[0]*12 -            upperLeftY = centerPoint.y() - self.size[1]*12 - -            tile = dlg.tile.value() -     -            x = (self.contX - upperLeftX)/24 -            y = (self.contY - upperLeftY)/24 - - -            Tileset.objects[self.object].tiles[y][x] = tile -             -            self.update() -            self.updateList() - - -    class setTileDialog(QtGui.QDialog): -     -        def __init__(self): -            QtGui.QDialog.__init__(self) -         -            self.setWindowTitle('Set tiles') -                 -            self.tile = QtGui.QSpinBox()                 -            self.tile.setRange(0, 512)              -             -            self.buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) -            self.buttons.accepted.connect(self.accept) -            self.buttons.rejected.connect(self.reject) -             -            self.layout = QtGui.QGridLayout() -            self.layout.addWidget(QtGui.QLabel('Tile:'), 0,3,1,1, QtCore.Qt.AlignLeft) -            self.layout.addWidget(self.tile, 1, 3, 1, 3) -            self.layout.addWidget(self.buttons, 2, 3) -            self.setLayout(self.layout) - -                            - -    def paintEvent(self, event): -        painter = QtGui.QPainter() -        painter.begin(self) -         -        centerPoint = self.contentsRect().center() -        upperLeftX = centerPoint.x() - self.size[0]*12 -        lowerRightX = centerPoint.x() + self.size[0]*12 - -        upperLeftY = centerPoint.y() - self.size[1]*12 -        lowerRightY = centerPoint.y() + self.size[1]*12 - - -        painter.fillRect(upperLeftX, upperLeftY, self.size[0] * 24, self.size[1]*24, QtGui.QColor(205, 205, 255)) - -        for x, y, pix in self.tiles: -            painter.drawPixmap(upperLeftX + (x * 24), upperLeftY + (y * 24), pix) - -        if not self.slope == 0: -            pen = QtGui.QPen() -            # pen.setStyle(QtCore.Qt.QDashLine) -            pen.setWidth(1) -            pen.setColor(QtCore.Qt.blue) -            painter.setPen(QtGui.QPen(pen)) -            painter.drawLine(upperLeftX, upperLeftY + (abs(self.slope) * 24), lowerRightX, upperLeftY + (abs(self.slope) * 24)) -             -            if self.slope > 0: -                main = 'Main' -                sub = 'Sub' -            elif self.slope < 0: -                main = 'Sub' -                sub = 'Main' - -            font = painter.font() -            font.setPixelSize(8) -            font.setFamily('Monaco') -            painter.setFont(font) - -            painter.drawText(upperLeftX+1, upperLeftY+10, main) -            painter.drawText(upperLeftX+1, upperLeftY + (abs(self.slope) * 24) + 9, sub) - -        painter.end() +		curObj.tiles.append([]) +		for i in xrange(0, curObj.width): +			curObj.tiles[len(curObj.tiles)-1].append(0xFFFF) + +		self.update() +		self.updateList() + +	 +	def removeRow(self): +		global Tileset + +		if self.size[1] == 1: +			return + +		if len(Tileset.objects) == 0: +			window.tileWidget.addObj() + +		for x in xrange(self.size[0]): +			self.tiles.pop() +		 +		self.size[1] -= 1 +		self.setMinimumSize(self.size[0]*24, self.size[1]*24) + +		curObj = Tileset.objects[self.object] +		curObj.height -= 1 + +		curObj.tiles.pop() + +		self.update() +		self.updateList() + + +	def setObject(self, object): +		self.clear() +			 +		global Tileset +			 +		self.size = [object.width, object.height] +		 +		if object.wrap > 7: +			if (object.wrap == 8) or (object.wrap == 10): +				self.slope = 1 +			else: +				self.slope = -1 + +		x = 0 +		y = 0 +		for row in object.tiles: +			for tile in row: + +				if (tile == 0xFFFF): +					pix = QtGui.QPixmap(24,24) +					pix.fill(QtGui.QColor(205, 205, 255)) +					self.tiles.append([x, y, pix]) +				else: +					self.tiles.append([x, y, Tileset.tiles[tile].image]) + +				x += 1 +			y += 1 +			x = 0 +		    +		    +		self.object = window.objectList.currentIndex().row()     +		self.update() +		self.updateList() +			    + +	def contextMenuEvent(self, event): +	 +		TileMenu = QtGui.QMenu(self) +		self.contX = event.x() +		self.contY = event.y() +		 +		TileMenu.addAction('Set tile...', self.setTile) + +		TileMenu.exec_(event.globalPos()) + + +	def mousePressEvent(self, event): +		global Tileset + +		if event.button() == 2: +			return + +		if window.tileDisplay.selectedIndexes() == []: +			return + +		currentSelected = window.tileDisplay.selectedIndexes() +		 +		ix = 0 +		iy = 0 +		for modelItem in currentSelected: +			# Update yourself! +			centerPoint = self.contentsRect().center() +	 +			tile = modelItem.row() +			upperLeftX = centerPoint.x() - self.size[0]*12 +			upperLeftY = centerPoint.y() - self.size[1]*12 +	 +			lowerRightX = centerPoint.x() + self.size[0]*12 +			lowerRightY = centerPoint.y() + self.size[1]*12 +	 +	 +			x = (event.x() - upperLeftX)/24 + ix +			y = (event.y() - upperLeftY)/24 + iy +	 +			if event.x() < upperLeftX or event.y() < upperLeftY or event.x() > lowerRightX or event.y() > lowerRightY: +				return +					 +			self.tiles[(y * self.size[0]) + x][2] = Tileset.tiles[tile].image +					 +			Tileset.objects[self.object].tiles[y][x] = (tile) + +			ix += 1 +			if self.size[0]-1 < ix: +				ix = 0 +				iy += 1 +			if iy > self.size[1]-1: +				break +			 +			 +		self.update() +		 +		self.updateList() +		 + +	def updateList(self):         +		# Update the list >.> +		object = window.objmodel.itemFromIndex(window.objectList.currentIndex()) +		matchList = window.treeki.findItems("Object {0}".format(window.objectList.currentIndex().row()), QtCore.Qt.MatchExactly | QtCore.Qt.MatchRecursive | QtCore.Qt.MatchWrap) +		 + +		tex = QtGui.QPixmap(self.size[0] * 24, self.size[1] * 24) +		tex.fill(QtCore.Qt.transparent) +		painter = QtGui.QPainter(tex) +		 +		Xoffset = 0 +		Yoffset = 0 +		 +		for tile in self.tiles: +			painter.drawPixmap(tile[0]*24, tile[1]*24, tile[2]) +						 +		painter.end() + +		try: +			object.setIcon(QtGui.QIcon(tex)) +			matchList[0].setIcon(1, QtGui.QIcon(tex)) +		except: +			pass + +		window.objectList.update() +	 +			 +		 +	def setTile(self): +		global Tileset +		 +		dlg = self.setTileDialog() +		if dlg.exec_() == QtGui.QDialog.Accepted: +			# Do stuff +			centerPoint = self.contentsRect().center() + +			upperLeftX = centerPoint.x() - self.size[0]*12 +			upperLeftY = centerPoint.y() - self.size[1]*12 + +			tile = dlg.tile.value() +	 +			x = (self.contX - upperLeftX)/24 +			y = (self.contY - upperLeftY)/24 + + +			Tileset.objects[self.object].tiles[y][x] = tile +			 +			self.update() +			self.updateList() + + +	class setTileDialog(QtGui.QDialog): +	 +		def __init__(self): +			QtGui.QDialog.__init__(self) +		 +			self.setWindowTitle('Set tiles') +				 +			self.tile = QtGui.QSpinBox()                 +			self.tile.setRange(0, 512)              +			 +			self.buttons = QtGui.QDialogButtonBox(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel) +			self.buttons.accepted.connect(self.accept) +			self.buttons.rejected.connect(self.reject) +			 +			self.layout = QtGui.QGridLayout() +			self.layout.addWidget(QtGui.QLabel('Tile:'), 0,3,1,1, QtCore.Qt.AlignLeft) +			self.layout.addWidget(self.tile, 1, 3, 1, 3) +			self.layout.addWidget(self.buttons, 2, 3) +			self.setLayout(self.layout) + +						    + +	def paintEvent(self, event): +		painter = QtGui.QPainter() +		painter.begin(self) +		 +		centerPoint = self.contentsRect().center() +		upperLeftX = centerPoint.x() - self.size[0]*12 +		lowerRightX = centerPoint.x() + self.size[0]*12 + +		upperLeftY = centerPoint.y() - self.size[1]*12 +		lowerRightY = centerPoint.y() + self.size[1]*12 + + +		painter.fillRect(upperLeftX, upperLeftY, self.size[0] * 24, self.size[1]*24, QtGui.QColor(205, 205, 255)) + +		for x, y, pix in self.tiles: +			painter.drawPixmap(upperLeftX + (x * 24), upperLeftY + (y * 24), pix) + +		if not self.slope == 0: +			pen = QtGui.QPen() +			# pen.setStyle(QtCore.Qt.QDashLine) +			pen.setWidth(1) +			pen.setColor(QtCore.Qt.blue) +			painter.setPen(QtGui.QPen(pen)) +			painter.drawLine(upperLeftX, upperLeftY + (abs(self.slope) * 24), lowerRightX, upperLeftY + (abs(self.slope) * 24)) +			 +			if self.slope > 0: +				main = 'Main' +				sub = 'Sub' +			elif self.slope < 0: +				main = 'Sub' +				sub = 'Main' + +			font = painter.font() +			font.setPixelSize(8) +			font.setFamily('Monaco') +			painter.setFont(font) + +			painter.drawText(upperLeftX+1, upperLeftY+10, main) +			painter.drawText(upperLeftX+1, upperLeftY + (abs(self.slope) * 24) + 9, sub) + +		painter.end() @@ -768,69 +768,69 @@ class tileWidget(QtGui.QWidget):  class PiecesModel(QtCore.QAbstractListModel): -    def __init__(self, parent=None): -        super(PiecesModel, self).__init__(parent) +	def __init__(self, parent=None): +		super(PiecesModel, self).__init__(parent) -        self.pixmaps = [] -        self.setSupportedDragActions(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction | QtCore.Qt.LinkAction) +		self.pixmaps = [] +		self.setSupportedDragActions(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction | QtCore.Qt.LinkAction) -    def data(self, index, role=QtCore.Qt.DisplayRole): -        if not index.isValid(): -            return None +	def data(self, index, role=QtCore.Qt.DisplayRole): +		if not index.isValid(): +			return None -        if role == QtCore.Qt.DecorationRole: -            return QtGui.QIcon(self.pixmaps[index.row()]) +		if role == QtCore.Qt.DecorationRole: +			return QtGui.QIcon(self.pixmaps[index.row()]) -        if role == QtCore.Qt.UserRole: -            return self.pixmaps[index.row()] +		if role == QtCore.Qt.UserRole: +			return self.pixmaps[index.row()] -        return None +		return None -    def addPieces(self, pixmap): -        row = len(self.pixmaps) +	def addPieces(self, pixmap): +		row = len(self.pixmaps) -        self.beginInsertRows(QtCore.QModelIndex(), row, row) -        self.pixmaps.insert(row, pixmap) -        self.endInsertRows() -         -    def flags(self,index): -        if index.isValid(): -            return (QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | -                    QtCore.Qt.ItemIsDragEnabled) +		self.beginInsertRows(QtCore.QModelIndex(), row, row) +		self.pixmaps.insert(row, pixmap) +		self.endInsertRows() +		 +	def flags(self,index): +		if index.isValid(): +			return (QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable | +					QtCore.Qt.ItemIsDragEnabled) -    def clear(self): -        row = len(self.pixmaps) +	def clear(self): +		row = len(self.pixmaps) -        del self.pixmaps[:] +		del self.pixmaps[:] -    def mimeTypes(self): -        return ['image/x-tile-piece'] +	def mimeTypes(self): +		return ['image/x-tile-piece'] -    def mimeData(self, indexes): -        mimeData = QtCore.QMimeData() -        encodedData = QtCore.QByteArray() +	def mimeData(self, indexes): +		mimeData = QtCore.QMimeData() +		encodedData = QtCore.QByteArray() -        stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.WriteOnly) +		stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.WriteOnly) -        for index in indexes: -            if index.isValid(): -                pixmap = QtGui.QPixmap(self.data(index, QtCore.Qt.UserRole)) -                stream << pixmap +		for index in indexes: +			if index.isValid(): +				pixmap = QtGui.QPixmap(self.data(index, QtCore.Qt.UserRole)) +				stream << pixmap -        mimeData.setData('image/x-tile-piece', encodedData) -        return mimeData +		mimeData.setData('image/x-tile-piece', encodedData) +		return mimeData -    def rowCount(self, parent): -        if parent.isValid(): -            return 0 -        else: -            return len(self.pixmaps) +	def rowCount(self, parent): +		if parent.isValid(): +			return 0 +		else: +			return len(self.pixmaps) -    def supportedDragActions(self): -        return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction +	def supportedDragActions(self): +		return QtCore.Qt.CopyAction | QtCore.Qt.MoveAction @@ -839,80 +839,84 @@ class PiecesModel(QtCore.QAbstractListModel):  def RGB4A3Decode(tex): -    dest = QtGui.QImage(1024,512,QtGui.QImage.Format_ARGB32) -    dest.fill(QtCore.Qt.transparent) -     -    i = 0 -    for ytile in xrange(0, 512, 4): -    	for xtile in xrange(0, 1024, 4): -    		for ypixel in xrange(ytile, ytile + 4): -    			for xpixel in xrange(xtile, xtile + 4): -    				 -    				if(xpixel >= 1024 or ypixel >= 512): -    					continue - -    				newpixel = struct.unpack_from('>H', tex, i)[0] -    				# newpixel = (int(tex[i]) << 8) | int(tex[i+1]) -    				 -     -    				if(newpixel >= 0x8000): # Check if it's RGB555 -    					red = ((newpixel >> 10) & 0x1F) * 255 / 0x1F -    					green = ((newpixel >> 5) & 0x1F) * 255 / 0x1F -    					blue = (newpixel & 0x1F) * 255 / 0x1F -    					alpha = 0xFF -     -    				else: # If not, it's RGB4A3 -    					alpha = ((newpixel & 0x7000) >> 12) * 255 / 0x7 -    					blue = ((newpixel & 0xF00) >> 8) * 255 / 0xF -    					green = ((newpixel & 0xF0) >> 4) * 255 / 0xF -    					red = (newpixel & 0xF) * 255 / 0xF -     -    				argb = (blue) | (green << 8) | (red << 16) | (alpha << 24) -    				dest.setPixel(xpixel, ypixel, argb) -    				i += 2 -    return dest +	dest = QtGui.QImage(1024,512,QtGui.QImage.Format_ARGB32) +	dest.fill(QtCore.Qt.transparent) +	 +	i = 0 +	for ytile in xrange(0, 512, 4): +		for xtile in xrange(0, 1024, 4): +			for ypixel in xrange(ytile, ytile + 4): +				for xpixel in xrange(xtile, xtile + 4): +					 +					if(xpixel >= 1024 or ypixel >= 512): +						continue + +					newpixel = struct.unpack_from('>H', tex, i)[0] +					# newpixel = (int(tex[i]) << 8) | int(tex[i+1]) +					 +	 +					# if(newpixel >= 0x8000): # Check if it's RGB555 +					# 	red = ((newpixel >> 10) & 0x1F) * 255 / 0x1F +					# 	green = ((newpixel >> 5) & 0x1F) * 255 / 0x1F +					# 	blue = (newpixel & 0x1F) * 255 / 0x1F +					# 	alpha = 0xFF +	 +					# else: # If not, it's RGB4A3 + +					# IT'S ALWAYS FUCKING RGB4A3 - who makes a tileset without alpha?! +					alpha = ((newpixel & 0x7000) >> 12) * 255 / 0x7 +					red = ((newpixel & 0xF00) >> 8) * 255 / 0xF +					green = ((newpixel & 0xF0) >> 4) * 255 / 0xF +					blue = (newpixel & 0xF) * 255 / 0xF +	 +					argb = (blue) | (green << 8) | (red << 16) | (alpha << 24) +					dest.setPixel(xpixel, ypixel, argb) +					i += 2 +	return dest  def RGB4A3Encode(tex): -    destBuffer = create_string_buffer(1024*512*2) - -    shortstruct = struct.Struct('>H') -    offset = 0 - -    for ytile in xrange(0, 512, 4): -        for xtile in xrange(0, 1024, 4): -            for ypixel in xrange(ytile, ytile + 4): -                for xpixel in xrange(xtile, xtile + 4): -    				 -                    if(xpixel >= 1024 or ypixel >= 512): -                    	continue -                     -                    pixel = tex.pixel(xpixel, ypixel) -                     -                    a = pixel >> 24 -                    r = (pixel >> 16) & 0xFF -                    g = (pixel >> 8) & 0xFF -                    b = pixel & 0xFF -                     -                    if a < 245: #RGB4A3 -                        alpha = a/32 -                        red = r/16 -                        green = g/16 -                        blue = b/16 - -                        rgbDAT = (blue) | (green << 4) | (red << 8) | (alpha << 12) -                 -                    else: # RGB555 -                        red = r/8 -                        green = g/8 -                        blue = b/8 -                         -                        rgbDAT = (blue) | (green << 5) | (red << 10) | (0x8000) # 0rrrrrgggggbbbbb -                                                                                                             -                    shortstruct.pack_into(destBuffer, offset, rgbDAT) -                    offset += 2 -                     -    return destBuffer.raw +	destBuffer = create_string_buffer(1024*512*2) + +	shortstruct = struct.Struct('>H') +	offset = 0 + +	for ytile in xrange(0, 512, 4): +		for xtile in xrange(0, 1024, 4): +			for ypixel in xrange(ytile, ytile + 4): +				for xpixel in xrange(xtile, xtile + 4): +					 +					if(xpixel >= 1024 or ypixel >= 512): +						continue +					 +					pixel = tex.pixel(xpixel, ypixel) +					 +					a = pixel >> 24 +					r = (pixel >> 16) & 0xFF +					g = (pixel >> 8) & 0xFF +					b = pixel & 0xFF +					 +					# if a < 245: #RGB4A3 + +					# IT'S ALWAYS FUCKING RGB4A3 - who makes a tileset without alpha?! +					alpha = a/32 +					red = r/16 +					green = g/16 +					blue = b/16 + +					rgbDAT = (blue) | (green << 4) | (red << 8) | (alpha << 12) +				 +					# else: # RGB555 +					#     red = r/8 +					#     green = g/8 +					#     blue = b/8 +						 +					#     rgbDAT = (blue) | (green << 5) | (red << 10) | (0x8000) # 0rrrrrgggggbbbbb +																											 +					shortstruct.pack_into(destBuffer, offset, rgbDAT) +					offset += 2 +					 +	return destBuffer.raw  ############################################################################################# @@ -920,552 +924,552 @@ def RGB4A3Encode(tex):  class MainWindow(QtGui.QMainWindow): -    def __init__(self, parent=None): -        super(MainWindow, self).__init__(parent) - -        self.tileImage = QtGui.QPixmap() -        self.alpha = True -         -        global Tileset -        Tileset = TilesetClass() - -        self.name = '' - -        self.setupMenus() -        self.setupWidgets() - -        self.setuptile() - -        self.newTileset() - -        self.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, -                QtGui.QSizePolicy.Fixed)) -        self.setWindowTitle("New Tileset") - - -    def setuptile(self): -        self.tileWidget.tiles.clear() -        self.model.clear() - -        if self.alpha == True: -            for tile in Tileset.tiles: -                self.model.addPieces(tile.image) -        else: -            for tile in Tileset.tiles: -                self.model.addPieces(tile.noalpha) - - -    def newTileset(self): -        '''Creates a new, blank tileset''' -         -        global Tileset -        Tileset.clear() -        self.treeki.clear() -        self.objmodel.clear() - -        Tileset = TilesetClass() -         -        EmptyPix = QtGui.QPixmap(24, 24) -        EmptyPix.fill(QtCore.Qt.black) -         -        for i in range(512): -            Tileset.addTile(EmptyPix) - -        self.setuptile() -        self.setWindowTitle('New Tileset') -         -         -    def openTileset(self): -        '''Opens a Koopatlas tileset arc and parses the heck out of it.''' -         -        global Tileset - -        path = str(QtGui.QFileDialog.getOpenFileName(self, "Open Koopatlas Tileset", '', -                    "Image Files (*.arc)")) -                     -        if path: -            self.setWindowTitle(os.path.basename(path)) -            Tileset.clear() -            self.treeki.clear() -            self.objmodel.clear() - -            name = path[str(path).rfind('/')+1:-4] -         -            file = open(path,'rb') -            data = file.read() -            file.close() -             -            arc = archive.U8() -            arc._load(data) -             -            Image = None -            behaviourdata = None -            objstrings = None -            metadata = None -             -            for key, value in arc.files: -                if value == None: -                    pass -                if key.startswith('BG_tex/') and key.endswith('_tex.bin'): -                    Image = arc[key] -                if key.startswith('BG_grp/') and key.endswith('_grp.bin'): -                    group = arc[key] -                if key.startswith('BG_unt/'): -                    if key.endswith('_hd.bin'): -                        metadata = arc[key] -                    elif key.endswith('.bin'): -                        objstrings = arc[key] - -            if (Image == None) or (group == None) or (objstrings == None) or (metadata == None): -                QtGui.QMessageBox.warning(None, 'Error',  'Error - the necessary files were not found.\n\nNot a valid Koopatlas tileset, sadly.') -                return -             -            dest = RGB4A3Decode(Image) -             -            self.tileImage = QtGui.QPixmap.fromImage(dest) -             -            # Makes us some nice Tile Classes! -            Xoffset = 4 -            Yoffset = 4 -            for i in range(512): -                Tileset.addTile(self.tileImage.copy(Xoffset,Yoffset,24,24)) -                Xoffset += 32 -                if Xoffset >= 1024: -                    Xoffset = 4 -                    Yoffset += 32                     -             -            # Load Objects -             -            meta = [] -            for i in xrange(len(metadata)/5): -                meta.append(struct.unpack_from('>H3B', metadata, i * 5))                                     -                 -            tilelist = [] -            rowlist = [] -             -            for entry in meta:   -                offset = entry[0] -                row = 0 -                 -                for tiles in xrange(entry[2]): -                    for tiles in xrange(entry[1]): -                        untile = struct.unpack_from('>H', objstrings, offset)[0] - -                        rowlist.append(untile) -                        offset += 2 - -                    tilelist.append(rowlist) -                    rowlist = [] - -                Tileset.addObject(tilelist, entry[2], entry[1], entry[3]) - -                tilelist = [] - -            self.setuptile() -            SetupObjectModel(self.objmodel, Tileset.objects, Tileset.tiles, self.treeki, group) - -            self.tileWidget.tiles.updateList() - -        self.name = path - - -    def openImage(self): -        '''Opens an Image from png, and creates a new tileset from it.''' - -        path = QtGui.QFileDialog.getOpenFileName(self, "Open Image", '', -                    "Image Files (*.png)") -                     -        if path: -            newImage = QtGui.QPixmap() -            self.tileImage = newImage - -            if not newImage.load(path): -                QtGui.QMessageBox.warning(self, "Open Image", -                        "The image file could not be loaded.", -                        QtGui.QMessageBox.Cancel) -                return - -            if ((newImage.width() == 768) & (newImage.height() == 384)): -                x = 0 -                y = 0 -                for i in range(512): -                    Tileset.tiles[i].image = self.tileImage.copy(x*24,y*24,24,24) -                    x += 1 -                    if (x * 24) >= 768: -                        y += 1 -                        x = 0 - -            else:  -                QtGui.QMessageBox.warning(self, "Open Image", -                        "The image was not the proper dimensions." -                        "Please resize the image to 768x384 pixels.", -                        QtGui.QMessageBox.Cancel) -                return - - -            self.setuptile() - - -    def saveImage(self): -             -        fn = QtGui.QFileDialog.getSaveFileName(self, 'Choose a new filename', '', '.png (*.png)') -        if fn == '': return -         -        tex = QtGui.QPixmap(768, 384) -        tex.fill(QtCore.Qt.transparent) -        painter = QtGui.QPainter(tex) -         -        Xoffset = 0 -        Yoffset = 0 -         -        for tile in Tileset.tiles: -            painter.drawPixmap(Xoffset, Yoffset, tile.image) -            Xoffset += 24 -            if Xoffset >= 768: -                Xoffset = 0 -                Yoffset += 24 -                         -        painter.end() - -        tex.save(fn) -                -    def saveTileset(self): -        if self.name == '': -            self.saveTilesetAs() -            return -             -         -        outdata = self.saving(os.path.basename(unicode(self.name))[:-4]) -         -        fn = unicode(self.name) -        f = open(fn, 'wb') -        f.write(outdata) -        f.close() -                 -        reply = QtGui.QMessageBox.information(self, "Save Complete", "Tileset saved as {0}.".format(os.path.basename(unicode(self.name))[:-4])) -        -    def saveTilesetAs(self): -         -        fn = QtGui.QFileDialog.getSaveFileName(self, 'Choose a new filename', '', '.arc (*.arc)') -        if fn == '': return - -        self.name = fn -        self.setWindowTitle(os.path.basename(unicode(fn))) -         -        outdata = self.saving(os.path.basename(unicode(fn))[:-4]) -        f = open(fn, 'wb') -        f.write(outdata) -        f.close() - -        reply = QtGui.QMessageBox.information(self, "Save Complete", "Tileset saved as {0}.".format(os.path.basename(unicode(self.name))[:-4])) - - -    def saving(self, name): - -        # Prepare tiles, objects, object metadata, and textures and stuff into buffers. - -        textureBuffer = self.PackTexture() -        objectBuffers = self.PackObjects() -        objectBuffer = objectBuffers[0] -        objectMetaBuffer = objectBuffers[1] -        groupBuffer = self.PackGroups() - -                 -        # Make an arc and pack up the files! -        arc = archive.U8() -        arc['BG_tex'] = None -        arc['BG_tex/{0}_tex.bin'.format(name)] = textureBuffer - -        arc['BG_unt'] = None -        arc['BG_unt/{0}.bin'.format(name)] = objectBuffer -        arc['BG_unt/{0}_hd.bin'.format(name)] = objectMetaBuffer -         -        arc['BG_grp'] = None -        arc['BG_grp/{0}_grp.bin'.format(name)] = groupBuffer - -        return arc._dump() - - -    def PackTexture(self): - -        tex = QtGui.QImage(1024, 512, QtGui.QImage.Format_ARGB32) -        tex.fill(QtCore.Qt.transparent) -        painter = QtGui.QPainter(tex) -         -        Xoffset = 0 -        Yoffset = 0 - -        for tile in Tileset.tiles: -            minitex = QtGui.QImage(32, 32, QtGui.QImage.Format_ARGB32) -            minitex.fill(QtCore.Qt.transparent) -            minipainter = QtGui.QPainter(minitex) -             -            minipainter.drawPixmap(4, 4, tile.image) -            minipainter.end() -             -            # Read colours and DESTROY THEM (or copy them to the edges, w/e) -            for i in xrange(4,28): -                 -                # Top Clamp -                colour = minitex.pixel(i, 4) -                for p in xrange(0,4): -                    minitex.setPixel(i, p, colour) -                 -                # Left Clamp -                colour = minitex.pixel(4, i) -                for p in xrange(0,4): -                    minitex.setPixel(p, i, colour) -                 -                # Right Clamp -                colour = minitex.pixel(i, 27) -                for p in xrange(27,31): -                    minitex.setPixel(i, p, colour) -                 -                # Bottom Clamp -                colour = minitex.pixel(27, i) -                for p in xrange(27,31): -                    minitex.setPixel(p, i, colour) - -            # UpperLeft Corner Clamp -            colour = minitex.pixel(4, 4) -            for x in xrange(0,4): -                for y in xrange(0,4): -                    minitex.setPixel(x, y, colour) - -            # UpperRight Corner Clamp -            colour = minitex.pixel(27, 4) -            for x in xrange(27,31): -                for y in xrange(0,4): -                    minitex.setPixel(x, y, colour) - -            # LowerLeft Corner Clamp -            colour = minitex.pixel(4, 27) -            for x in xrange(0,4): -                for y in xrange(27,31): -                    minitex.setPixel(x, y, colour) - -            # LowerRight Corner Clamp -            colour = minitex.pixel(27, 27) -            for x in xrange(27,31): -                for y in xrange(27,31): -                    minitex.setPixel(x, y, colour) - -                     -            painter.drawImage(Xoffset, Yoffset, minitex) -             -            Xoffset += 32 -             -            if Xoffset >= 1024: -                Xoffset = 0 -                Yoffset += 32 -                                     -        painter.end() - -        dest = RGB4A3Encode(tex) -                 -        return dest - - - -    def PackObjects(self): -        objectStrings = [] -         -        o = 0 -        for object in Tileset.objects: -                  -            a = '' -             -            for tilerow in object.tiles: -                for tile in tilerow: -                    a = a + struct.pack('>H', tile) - -                    print tile -                                 -            a = a + '\xff' -             -            objectStrings.append(a) -             -            o += 1 -             -        Objbuffer = '' -        Metabuffer = '' -        i = 0 -        for a in objectStrings: -            Metabuffer = Metabuffer + struct.pack('>H3B', len(Objbuffer), Tileset.objects[i].width, Tileset.objects[i].height, Tileset.objects[i].wrap) -            Objbuffer = Objbuffer + a -             -            i += 1 -         -        return (Objbuffer, Metabuffer) - - -     -    def PackGroups(self): - -        groupList = [] - -        # Walk through all top level items -        for kiddy in xrange(self.treeki.topLevelItemCount()): -            groupList.append(self.walkTree(self.treeki.topLevelItem(kiddy))) - -        return cPickle.dumps(groupList) - - -    def walkTree(self, treeItem): -         -        # If item has kids, walk through each kid. If not, just add the string. - -        name = str(treeItem.text(0)) - -        alist = [] - -        if treeItem.childCount() > 0: - -            for kiddy in xrange(treeItem.childCount()): -                alist.append(self.walkTree(treeItem.child(kiddy))) +	def __init__(self, parent=None): +		super(MainWindow, self).__init__(parent) + +		self.tileImage = QtGui.QPixmap() +		self.alpha = True +		 +		global Tileset +		Tileset = TilesetClass() + +		self.name = '' + +		self.setupMenus() +		self.setupWidgets() + +		self.setuptile() + +		self.newTileset() + +		self.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, +				QtGui.QSizePolicy.Fixed)) +		self.setWindowTitle("New Tileset") + + +	def setuptile(self): +		self.tileWidget.tiles.clear() +		self.model.clear() + +		if self.alpha == True: +			for tile in Tileset.tiles: +				self.model.addPieces(tile.image) +		else: +			for tile in Tileset.tiles: +				self.model.addPieces(tile.noalpha) + + +	def newTileset(self): +		'''Creates a new, blank tileset''' +		 +		global Tileset +		Tileset.clear() +		self.treeki.clear() +		self.objmodel.clear() + +		Tileset = TilesetClass() +		 +		EmptyPix = QtGui.QPixmap(24, 24) +		EmptyPix.fill(QtCore.Qt.black) +		 +		for i in range(512): +			Tileset.addTile(EmptyPix) + +		self.setuptile() +		self.setWindowTitle('New Tileset') +		 +		 +	def openTileset(self): +		'''Opens a Koopatlas tileset arc and parses the heck out of it.''' +		 +		global Tileset + +		path = str(QtGui.QFileDialog.getOpenFileName(self, "Open Koopatlas Tileset", '', +					"Image Files (*.arc)")) +					 +		if path: +			self.setWindowTitle(os.path.basename(path)) +			Tileset.clear() +			self.treeki.clear() +			self.objmodel.clear() + +			name = path[str(path).rfind('/')+1:-4] +		 +			file = open(path,'rb') +			data = file.read() +			file.close() +			 +			arc = archive.U8() +			arc._load(data) +			 +			Image = None +			behaviourdata = None +			objstrings = None +			metadata = None +			 +			for key, value in arc.files: +				if value == None: +					pass +				if key.startswith('BG_tex/') and key.endswith('_tex.bin'): +					Image = arc[key] +				if key.startswith('BG_grp/') and key.endswith('_grp.bin'): +					group = arc[key] +				if key.startswith('BG_unt/'): +					if key.endswith('_hd.bin'): +						metadata = arc[key] +					elif key.endswith('.bin'): +						objstrings = arc[key] + +			if (Image == None) or (group == None) or (objstrings == None) or (metadata == None): +				QtGui.QMessageBox.warning(None, 'Error',  'Error - the necessary files were not found.\n\nNot a valid Koopatlas tileset, sadly.') +				return +			 +			dest = RGB4A3Decode(Image) +			 +			self.tileImage = QtGui.QPixmap.fromImage(dest) +			 +			# Makes us some nice Tile Classes! +			Xoffset = 4 +			Yoffset = 4 +			for i in range(512): +				Tileset.addTile(self.tileImage.copy(Xoffset,Yoffset,24,24)) +				Xoffset += 32 +				if Xoffset >= 1024: +					Xoffset = 4 +					Yoffset += 32                     +			 +			# Load Objects +			 +			meta = [] +			for i in xrange(len(metadata)/5): +				meta.append(struct.unpack_from('>H3B', metadata, i * 5))                                     +				 +			tilelist = [] +			rowlist = [] +			 +			for entry in meta:   +				offset = entry[0] +				row = 0 +				 +				for tiles in xrange(entry[2]): +					for tiles in xrange(entry[1]): +						untile = struct.unpack_from('>H', objstrings, offset)[0] + +						rowlist.append(untile) +						offset += 2 + +					tilelist.append(rowlist) +					rowlist = [] + +				Tileset.addObject(tilelist, entry[2], entry[1], entry[3]) + +				tilelist = [] + +			self.setuptile() +			SetupObjectModel(self.objmodel, Tileset.objects, Tileset.tiles, self.treeki, group) + +			self.tileWidget.tiles.updateList() + +		self.name = path + + +	def openImage(self): +		'''Opens an Image from png, and creates a new tileset from it.''' + +		path = QtGui.QFileDialog.getOpenFileName(self, "Open Image", '', +					"Image Files (*.png)") +					 +		if path: +			newImage = QtGui.QPixmap() +			self.tileImage = newImage + +			if not newImage.load(path): +				QtGui.QMessageBox.warning(self, "Open Image", +						"The image file could not be loaded.", +						QtGui.QMessageBox.Cancel) +				return + +			if ((newImage.width() == 768) & (newImage.height() == 384)): +				x = 0 +				y = 0 +				for i in range(512): +					Tileset.tiles[i].image = self.tileImage.copy(x*24,y*24,24,24) +					x += 1 +					if (x * 24) >= 768: +						y += 1 +						x = 0 + +			else:  +				QtGui.QMessageBox.warning(self, "Open Image", +						"The image was not the proper dimensions." +						"Please resize the image to 768x384 pixels.", +						QtGui.QMessageBox.Cancel) +				return + + +			self.setuptile() + + +	def saveImage(self): +			 +		fn = QtGui.QFileDialog.getSaveFileName(self, 'Choose a new filename', '', '.png (*.png)') +		if fn == '': return +		 +		tex = QtGui.QPixmap(768, 384) +		tex.fill(QtCore.Qt.transparent) +		painter = QtGui.QPainter(tex) +		 +		Xoffset = 0 +		Yoffset = 0 +		 +		for tile in Tileset.tiles: +			painter.drawPixmap(Xoffset, Yoffset, tile.image) +			Xoffset += 24 +			if Xoffset >= 768: +				Xoffset = 0 +				Yoffset += 24 +						 +		painter.end() + +		tex.save(fn) +			    +	def saveTileset(self): +		if self.name == '': +			self.saveTilesetAs() +			return +			 +		 +		outdata = self.saving(os.path.basename(unicode(self.name))[:-4]) +		 +		fn = unicode(self.name) +		f = open(fn, 'wb') +		f.write(outdata) +		f.close() +				 +		reply = QtGui.QMessageBox.information(self, "Save Complete", "Tileset saved as {0}.".format(os.path.basename(unicode(self.name))[:-4])) +	    +	def saveTilesetAs(self): +		 +		fn = QtGui.QFileDialog.getSaveFileName(self, 'Choose a new filename', '', '.arc (*.arc)') +		if fn == '': return + +		self.name = fn +		self.setWindowTitle(os.path.basename(unicode(fn))) +		 +		outdata = self.saving(os.path.basename(unicode(fn))[:-4]) +		f = open(fn, 'wb') +		f.write(outdata) +		f.close() + +		reply = QtGui.QMessageBox.information(self, "Save Complete", "Tileset saved as {0}.".format(os.path.basename(unicode(self.name))[:-4])) + + +	def saving(self, name): + +		# Prepare tiles, objects, object metadata, and textures and stuff into buffers. + +		textureBuffer = self.PackTexture() +		objectBuffers = self.PackObjects() +		objectBuffer = objectBuffers[0] +		objectMetaBuffer = objectBuffers[1] +		groupBuffer = self.PackGroups() + +				 +		# Make an arc and pack up the files! +		arc = archive.U8() +		arc['BG_tex'] = None +		arc['BG_tex/{0}_tex.bin'.format(name)] = textureBuffer + +		arc['BG_unt'] = None +		arc['BG_unt/{0}.bin'.format(name)] = objectBuffer +		arc['BG_unt/{0}_hd.bin'.format(name)] = objectMetaBuffer +		 +		arc['BG_grp'] = None +		arc['BG_grp/{0}_grp.bin'.format(name)] = groupBuffer + +		return arc._dump() + + +	def PackTexture(self): + +		tex = QtGui.QImage(1024, 512, QtGui.QImage.Format_ARGB32) +		tex.fill(QtCore.Qt.transparent) +		painter = QtGui.QPainter(tex) +		 +		Xoffset = 0 +		Yoffset = 0 + +		for tile in Tileset.tiles: +			minitex = QtGui.QImage(32, 32, QtGui.QImage.Format_ARGB32) +			minitex.fill(QtCore.Qt.transparent) +			minipainter = QtGui.QPainter(minitex) +			 +			minipainter.drawPixmap(4, 4, tile.image) +			minipainter.end() +			 +			# Read colours and DESTROY THEM (or copy them to the edges, w/e) +			for i in xrange(4,28): +				 +				# Top Clamp +				colour = minitex.pixel(i, 4) +				for p in xrange(0,4): +					minitex.setPixel(i, p, colour) +				 +				# Left Clamp +				colour = minitex.pixel(4, i) +				for p in xrange(0,4): +					minitex.setPixel(p, i, colour) +				 +				# Right Clamp +				colour = minitex.pixel(i, 27) +				for p in xrange(27,31): +					minitex.setPixel(i, p, colour) +				 +				# Bottom Clamp +				colour = minitex.pixel(27, i) +				for p in xrange(27,31): +					minitex.setPixel(p, i, colour) + +			# UpperLeft Corner Clamp +			colour = minitex.pixel(4, 4) +			for x in xrange(0,4): +				for y in xrange(0,4): +					minitex.setPixel(x, y, colour) + +			# UpperRight Corner Clamp +			colour = minitex.pixel(27, 4) +			for x in xrange(27,31): +				for y in xrange(0,4): +					minitex.setPixel(x, y, colour) + +			# LowerLeft Corner Clamp +			colour = minitex.pixel(4, 27) +			for x in xrange(0,4): +				for y in xrange(27,31): +					minitex.setPixel(x, y, colour) + +			# LowerRight Corner Clamp +			colour = minitex.pixel(27, 27) +			for x in xrange(27,31): +				for y in xrange(27,31): +					minitex.setPixel(x, y, colour) + +					 +			painter.drawImage(Xoffset, Yoffset, minitex) +			 +			Xoffset += 32 +			 +			if Xoffset >= 1024: +				Xoffset = 0 +				Yoffset += 32 +									 +		painter.end() + +		dest = RGB4A3Encode(tex) +				 +		return dest + + + +	def PackObjects(self): +		objectStrings = [] +		 +		o = 0 +		for object in Tileset.objects: +				  +			a = '' +			 +			for tilerow in object.tiles: +				for tile in tilerow: +					a = a + struct.pack('>H', tile) + +					print tile +								 +			a = a + '\xff' +			 +			objectStrings.append(a) +			 +			o += 1 +			 +		Objbuffer = '' +		Metabuffer = '' +		i = 0 +		for a in objectStrings: +			Metabuffer = Metabuffer + struct.pack('>H3B', len(Objbuffer), Tileset.objects[i].width, Tileset.objects[i].height, Tileset.objects[i].wrap) +			Objbuffer = Objbuffer + a +			 +			i += 1 +		 +		return (Objbuffer, Metabuffer) + + +	 +	def PackGroups(self): + +		groupList = [] + +		# Walk through all top level items +		for kiddy in xrange(self.treeki.topLevelItemCount()): +			groupList.append(self.walkTree(self.treeki.topLevelItem(kiddy))) + +		return cPickle.dumps(groupList) + + +	def walkTree(self, treeItem): +		 +		# If item has kids, walk through each kid. If not, just add the string. + +		name = str(treeItem.text(0)) + +		alist = [] + +		if treeItem.childCount() > 0: + +			for kiddy in xrange(treeItem.childCount()): +				alist.append(self.walkTree(treeItem.child(kiddy))) -            return (name, alist) +			return (name, alist) -        else: -            return name +		else: +			return name -    def setupMenus(self): -        fileMenu = self.menuBar().addMenu("&File") +	def setupMenus(self): +		fileMenu = self.menuBar().addMenu("&File") -        pixmap = QtGui.QPixmap(60,60) -        pixmap.fill(QtCore.Qt.black) -        icon = QtGui.QIcon(pixmap) +		pixmap = QtGui.QPixmap(60,60) +		pixmap.fill(QtCore.Qt.black) +		icon = QtGui.QIcon(pixmap) -        self.action = fileMenu.addAction(icon, "New", self.newTileset, QtGui.QKeySequence.New) -        fileMenu.addAction("Open...", self.openTileset, QtGui.QKeySequence.Open) -        fileMenu.addAction("Import Image...", self.openImage, QtGui.QKeySequence('Ctrl+I')) -        fileMenu.addAction("Export Image...", self.saveImage, QtGui.QKeySequence('Ctrl+E')) -        fileMenu.addAction("Save", self.saveTileset, QtGui.QKeySequence.Save) -        fileMenu.addAction("Save as...", self.saveTilesetAs, QtGui.QKeySequence.SaveAs) -        fileMenu.addAction("Quit", self.close, QtGui.QKeySequence('Ctrl-Q')) +		self.action = fileMenu.addAction(icon, "New", self.newTileset, QtGui.QKeySequence.New) +		fileMenu.addAction("Open...", self.openTileset, QtGui.QKeySequence.Open) +		fileMenu.addAction("Import Image...", self.openImage, QtGui.QKeySequence('Ctrl+I')) +		fileMenu.addAction("Export Image...", self.saveImage, QtGui.QKeySequence('Ctrl+E')) +		fileMenu.addAction("Save", self.saveTileset, QtGui.QKeySequence.Save) +		fileMenu.addAction("Save as...", self.saveTilesetAs, QtGui.QKeySequence.SaveAs) +		fileMenu.addAction("Quit", self.close, QtGui.QKeySequence('Ctrl-Q')) -        taskMenu = self.menuBar().addMenu("&Tasks") +		taskMenu = self.menuBar().addMenu("&Tasks") -        taskMenu.addAction("Clear Object Data", Tileset.clearObjects, QtGui.QKeySequence('Ctrl+Alt+Backspace')) -         +		taskMenu.addAction("Clear Object Data", Tileset.clearObjects, QtGui.QKeySequence('Ctrl+Alt+Backspace')) +		 -    def TriggerNewGroup(self): +	def TriggerNewGroup(self): -        a = QtGui.QTreeWidgetItem(self.treeki) -        a.setText(0, 'Double Click to Rename') -        a.setFlags(QtCore.Qt.ItemFlags(0x2F)) -        a.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator) -        a.setExpanded(True) +		a = QtGui.QTreeWidgetItem(self.treeki) +		a.setText(0, 'Double Click to Rename') +		a.setFlags(QtCore.Qt.ItemFlags(0x2F)) +		a.setChildIndicatorPolicy(QtGui.QTreeWidgetItem.ShowIndicator) +		a.setExpanded(True) -    def TriggerDelGroup(self): -         -        treecko = self.treeki.currentItem() -        if str(treecko.text(0)).find("Object"): -            eggs = treecko.takeChildren() +	def TriggerDelGroup(self): +		 +		treecko = self.treeki.currentItem() +		if str(treecko.text(0)).find("Object"): +			eggs = treecko.takeChildren() -            self.treeki.addTopLevelItems(eggs) +			self.treeki.addTopLevelItems(eggs) -            index = window.treeki.indexFromItem(treecko, 0) -            realx = index.row() +			index = window.treeki.indexFromItem(treecko, 0) +			realx = index.row() -            if treecko.parent(): -                y = treecko.parent().takeChild(realx) -            else: -                y = self.treeki.takeTopLevelItem(realx) +			if treecko.parent(): +				y = treecko.parent().takeChild(realx) +			else: +				y = self.treeki.takeTopLevelItem(realx) -            del y +			del y -    def setupWidgets(self): -        frame = QtGui.QFrame() -        frameLayout = QtGui.QHBoxLayout(frame) +	def setupWidgets(self): +		frame = QtGui.QFrame() +		frameLayout = QtGui.QHBoxLayout(frame) -        # Displays the tiles -        self.tileDisplay = displayWidget() -                 -        # Sets up the model for the tile pieces -        self.model = PiecesModel(self) -        self.tileDisplay.setModel(self.model) +		# Displays the tiles +		self.tileDisplay = displayWidget() +				 +		# Sets up the model for the tile pieces +		self.model = PiecesModel(self) +		self.tileDisplay.setModel(self.model) -        # Object List -        self.objectList = objectList() -        self.objmodel = QtGui.QStandardItemModel() -        self.objectList.setModel(self.objmodel) +		# Object List +		self.objectList = objectList() +		self.objmodel = QtGui.QStandardItemModel() +		self.objectList.setModel(self.objmodel) -        self.tileWidget = tileOverlord() +		self.tileWidget = tileOverlord() -        # Vertical Container A -        self.container = QtGui.QWidget() -        layout = QtGui.QVBoxLayout() -        layout.addWidget(self.tileDisplay) -        layout.addWidget(self.tileWidget) -        self.container.setLayout(layout) +		# Vertical Container A +		self.container = QtGui.QWidget() +		layout = QtGui.QVBoxLayout() +		layout.addWidget(self.tileDisplay) +		layout.addWidget(self.tileWidget) +		self.container.setLayout(layout) -        # Create the Group Tree -        self.treeki = QtGui.QTreeWidget() -        self.treeki.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) -        self.treeki.setDragEnabled(True) -        self.treeki.setDragDropMode(QtGui.QAbstractItemView.InternalMove) -        self.treeki.setAcceptDrops(True) -        self.treeki.setDropIndicatorShown(True) -        self.treeki.setEditTriggers(QtGui.QAbstractItemView.DoubleClicked) -        self.treeki.setColumnCount(2) -        self.treeki.setColumnWidth(0, 200) +		# Create the Group Tree +		self.treeki = QtGui.QTreeWidget() +		self.treeki.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) +		self.treeki.setDragEnabled(True) +		self.treeki.setDragDropMode(QtGui.QAbstractItemView.InternalMove) +		self.treeki.setAcceptDrops(True) +		self.treeki.setDropIndicatorShown(True) +		self.treeki.setEditTriggers(QtGui.QAbstractItemView.DoubleClicked) +		self.treeki.setColumnCount(2) +		self.treeki.setColumnWidth(0, 200) -        self.treeki.setColumnWidth(1, 40) +		self.treeki.setColumnWidth(1, 40) -        # Vertical Container B -        self.treeBario = QtGui.QWidget() -        tlayout = QtGui.QVBoxLayout() -        tlayout.addWidget(self.treeki) +		# Vertical Container B +		self.treeBario = QtGui.QWidget() +		tlayout = QtGui.QVBoxLayout() +		tlayout.addWidget(self.treeki) -        self.groupbar = QtGui.QToolBar() +		self.groupbar = QtGui.QToolBar() -        self.newGroup = QtGui.QAction('New Group', self.groupbar) -        self.newGroup.triggered.connect(self.TriggerNewGroup) -        self.newGroup.setShortcut(QtGui.QKeySequence('Ctrl+Shift+N')) +		self.newGroup = QtGui.QAction('New Group', self.groupbar) +		self.newGroup.triggered.connect(self.TriggerNewGroup) +		self.newGroup.setShortcut(QtGui.QKeySequence('Ctrl+Shift+N')) -        self.delGroup = QtGui.QAction('Delete Group', self.groupbar) -        self.delGroup.triggered.connect(self.TriggerDelGroup) -        self.delGroup.setShortcut(QtGui.QKeySequence('Ctrl+Shift+Del')) +		self.delGroup = QtGui.QAction('Delete Group', self.groupbar) +		self.delGroup.triggered.connect(self.TriggerDelGroup) +		self.delGroup.setShortcut(QtGui.QKeySequence('Ctrl+Shift+Del')) -        self.groupbar.addAction(self.newGroup) -        self.groupbar.addAction(self.delGroup) +		self.groupbar.addAction(self.newGroup) +		self.groupbar.addAction(self.delGroup) -        self.groupbar.setFloatable(False) +		self.groupbar.setFloatable(False) -        tlayout.addWidget(self.groupbar) -        self.treeBario.setLayout(tlayout) +		tlayout.addWidget(self.groupbar) +		self.treeBario.setLayout(tlayout) -        # Creates the Tab Widget for behaviours and objects -        self.tabWidget = QtGui.QTabWidget() +		# Creates the Tab Widget for behaviours and objects +		self.tabWidget = QtGui.QTabWidget() -        # Sets the Tabs -        self.tabWidget.addTab(self.objectList, 'Object List') -        self.tabWidget.addTab(self.treeBario, 'Object Groups') -     +		# Sets the Tabs +		self.tabWidget.addTab(self.objectList, 'Object List') +		self.tabWidget.addTab(self.treeBario, 'Object Groups') +	 -        # Connections do things! -        self.objectList.clicked.connect(self.tileWidget.setObject) -        self.treeki.itemClicked.connect(connectToTileWidget) +		# Connections do things! +		self.objectList.clicked.connect(self.tileWidget.setObject) +		self.treeki.itemClicked.connect(connectToTileWidget) -        SetupObjectModel(self.objmodel, Tileset.objects, Tileset.tiles, self.treeki, None) +		SetupObjectModel(self.objmodel, Tileset.objects, Tileset.tiles, self.treeki, None) -        frameLayout.addWidget(self.container) -        frameLayout.addWidget(self.tabWidget) -         +		frameLayout.addWidget(self.container) +		frameLayout.addWidget(self.tabWidget) +		 -        self.setCentralWidget(frame) -                 +		self.setCentralWidget(frame) +				 @@ -1475,10 +1479,10 @@ class MainWindow(QtGui.QMainWindow):  if __name__ == '__main__': -    import sys +	import sys -    app = QtGui.QApplication(sys.argv) -    window = MainWindow() -    window.show() -    sys.exit(app.exec_()) -    app.deleteLater()
\ No newline at end of file +	app = QtGui.QApplication(sys.argv) +	window = MainWindow() +	window.show() +	sys.exit(app.exec_()) +	app.deleteLater()
\ No newline at end of file diff --git a/Tilesets/Test3.arc b/Tilesets/Test3.arcBinary files differ deleted file mode 100644 index f45d7e2..0000000 --- a/Tilesets/Test3.arc +++ /dev/null diff --git a/src/tileset.py b/src/tileset.py index a68f733..244cf8e 100644 --- a/src/tileset.py +++ b/src/tileset.py @@ -440,18 +440,10 @@ class KPTileset(object):  						newpixel = struct.unpack_from('>H', tex, i)[0]  						# newpixel = (int(tex[i]) << 8) | int(tex[i+1]) - -						if(newpixel >= 0x8000): # Check if it's RGB555 -							red = ((newpixel >> 10) & 0x1F) * 255 / 0x1F -							green = ((newpixel >> 5) & 0x1F) * 255 / 0x1F -							blue = (newpixel & 0x1F) * 255 / 0x1F -							alpha = 0xFF - -						else: # If not, it's RGB4A3 -							alpha = ((newpixel & 0x7000) >> 12) * 255 / 0x7 -							blue = ((newpixel & 0xF00) >> 8) * 255 / 0xF -							green = ((newpixel & 0xF0) >> 4) * 255 / 0xF -							red = (newpixel & 0xF) * 255 / 0xF +						alpha = ((newpixel & 0x7000) >> 12) * 255 / 0x7 +						red = ((newpixel & 0xF00) >> 8) * 255 / 0xF +						green = ((newpixel & 0xF0) >> 4) * 255 / 0xF +						blue = (newpixel & 0xF) * 255 / 0xF  						argb = (blue) | (green << 8) | (red << 16) | (alpha << 24)  						dest.setPixel(xpixel, ypixel, argb) | 
