(short) (data[4 + (j * 4)] - (sib.height * 6));
(short) (data[4 + (j * 4)] - (sib.height * 8) + 8);
        public static int loadSpriteData(AbstractRom rom, int areaNum)        {        	int spPtrsAddress =         		HackModule.toRegPointer(rom.readMulti(spAsmPointer,3)),				ptr = rom.readMulti(spPtrsAddress + (areaNum * 2), 2),				errorsNum = 0;        	spData[areaNum] = new ArrayList();       		if (ptr > 0)       		{            	int[] data = rom.read(            			spDataBase + ptr,            			(rom.read(spDataBase + ptr)            					* 4) + 2);           		for (int j = 0; j < data[0]; j++)           		{           			short tpt =            				(short) (data[2 + (j * 4)] +           						(data[3 + (j * 4)] 									  * 0x100));           			TPTEditor.TPTEntry tptEntry;           			try						{           				tptEntry = TPTEditor.tptEntries[tpt];						}           			catch (java.lang.ArrayIndexOutOfBoundsException e)						{           				errors.add(           						new ErrorRecord(ErrorRecord.SPRITE_ERROR,           								"Sprite entry #" + j + " of area #" + areaNum 		           							+ " has a bad tpt value (0x" + Integer.toHexString(tpt) + ")"));           				tpt = -1;           				tptEntry = null;           				errorsNum++;						}                	           			if (tpt >= 0)           			{           				SpriteEditor.SpriteInfoBlock sib =           					SpriteEditor.sib[tptEntry.getSprite()];           				short spriteX =            					(short) (data[5 + (j * 4)] - (sib.width * 4));           				short spriteY =           					(short) (data[4 + (j * 4)] - (sib.height * 6));           				spData[areaNum].add(new SpriteLocation(           					tpt, spriteX, spriteY));           			}           		}       		}       		       		return errorsNum;       	}