- Joined
- Mar 5, 2006
- Messages
- 371
- Reaction score
- 131
TH iff-files
Hey!
Notice: After almost getting bitchslapped by a friend of mine for using int where it should be int im going to change the definitions, i dont have time right away tho so please use the ints ive posted as ints.
This is what ive found so far (notice that i start counting at 0 and U# are unknown values):
This seems to be the basic structure of the .iff-files. 144 bytes telling us: id, name, shopflags etc.
The above is true for all files except:
CadieMagicBox.iff
CadieMagicBoxRandom.iff
CutinInfomation.iff
Description.iff
FurnitureAbility.iff
Match.iff
OfflineShop.iff
TikiPointTable.iff
TikiRecipe.iff
TikiSpecialTable.iff
byte 4-7 is a bitmask with the following values (its just my guess):
byte 104 (called shopFlag above):
byte 105 (called moneyFlag above):
The data about start and end dates conform to this struct(
The following is the "extra" bytes apart from the ones above OR the whole structure if the file is found in the list above.
AuxPart.iff:
Remember that me myself has named the variables, its just my thought on what its for!
I will report back with the rest of the bytes for the rest of the files later today.
Hey!
Notice: After almost getting bitchslapped by a friend of mine for using int where it should be int im going to change the definitions, i dont have time right away tho so please use the ints ive posted as ints.
This is what ive found so far (notice that i start counting at 0 and U# are unknown values):
144 bytes IffCommon structure,
40 bytes model name,
2 byte for each stat modifier (only the high byte is used, 5 * 2 = 10 byte in total)
2 byte point marker
int isValid = 0; // 0-3
int ItemID = 0; // 4-7
String ItemName = ""; // 8-47
byte lvlReq = 0; // 48
String Icon = ""; // 49-88
byte U2 = 0; // 89
byte U3 = 0; // 90
byte U4 = 0; // 91
int ItemPrice = 0; // 92-95
int DiscountPrice = 0; // 96-99
int usedPrice = 0; // 100-103
byte shopFlag = 0; // 104
byte moneyFlag = 0; // 105
byte timeFlag = 0; // 106
byte timeByte = 0; // 107
int Point = 0; // 108-111
short fYear = 0; // 112-113
short fMonth = 0; // 114-115
short fDayOfWeek = 0; // 116-117
short fDay = 0; // 118-119
short fHour = 0; // 120-121
short fMinute = 0; // 122-123
short fSecond = 0; // 124-125
short fMSecond = 0; // 126-127
short tYear = 0; // 128-129
short tMonth = 0; // 130-131
short tDayOfWeek = 0; // 132-133
short tDay = 0; // 134-135
short tHour = 0; // 136-137
short tMinute = 0; // 138-139
short tSecond = 0; // 140-141
short tMSecond = 0; // 142-143
This seems to be the basic structure of the .iff-files. 144 bytes telling us: id, name, shopflags etc.
The above is true for all files except:
CadieMagicBox.iff
CadieMagicBoxRandom.iff
CutinInfomation.iff
Description.iff
FurnitureAbility.iff
Match.iff
OfflineShop.iff
TikiPointTable.iff
TikiRecipe.iff
TikiSpecialTable.iff
byte 4-7 is a bitmask with the following values (its just my guess):
I would print all 1's and 0's but it will take too much space.
Character ID: (itemID & 0x03fc0000) >> 18
Item Group: (itemID & 0xfc000000) >> 26
Item Type: (itemID & 0x001f0000) >> 16
Item Position: (itemID & 0x0003e000) >> 13
Item Serial: (itemID & 0x000000ff)
byte 104 (called shopFlag above):
Tiki Report Paper, total value: 2
bit-value 128: 0
bit-value 64: 0
bit-value 32: 0
bit-value 16: 0
bit-value 8: 0
bit-value 4: 0 // Coupon?
bit-value 2: 1 // Non-giftable?
bit-value 1: 0 // Giftable?
This item has bit-value 2 as 1, "Time Booster" does not. This item is non-giftable but buyable. "Time Booster" is giftable and buyable.
byte 105 (called moneyFlag above):
Tiki Report Paper - 19
bit-value 128: 0
bit-value 64: 0 // Banner: Special?
bit-value 32: 0 // Banner: Hot?
bit-value 16: 1 // Banner: New?
bit-value 8: 0
bit-value 4: 0 // Display only?
bit-value 2: 1 // Pang = 1, Cookie = 0?
bit-value 1: 1 // Show up in shop?
The data about start and end dates conform to this struct(
You must be registered to see links
):typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds
;} SYSTEMTIME, *PSYSTEMTIME;
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds
;} SYSTEMTIME, *PSYSTEMTIME;
The following is the "extra" bytes apart from the ones above OR the whole structure if the file is found in the list above.
AuxPart.iff:
Ball.iffshort U14 = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
short U42 = 0;
short U43 = 0;
short U44 = 0;
short U45 = 0;
short U46 = 0;
short U47 = 0;
Caddie.iffshort U14 = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
String GFX1 = "";
String GFX2 = "";
String GFX3 = "";
String GFX4 = "";
String GFX5 = "";
String GFX6 = "";
String GFX7 = "";
String GFX8 = "";
String GFX9 = "";
String GFX10 = "";
String GFX11 = "";
String GFX12 = "";
String GFX13 = "";
String GFX14 = "";
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
CaddieItem.iffint Salary = 0;
String Icon2 = "";
short Power = 0;
short Control = 0;
short Accuracy = 0;
short Spin = 0;
short Curve = 0;
short U39 = 0;
CadieMagicBox.iffString GFX1 = "";
String GFX2 = "";
short price1Day = 0;
short U33 = 0;
short price7Days = 0;
short price30Days = 0;
short Amount = 0;
short U37 = 0;
CadieMagicBoxRandom.iffint Index = 0;
int Valid = 0;
int showOnPage = 0;
int U4 = 0;
int levelReq = 0;
int prodItem = 0;
int numProdItem = 0;
int itemOne = 0;
int itemTwo = 0;
int itemThree = 0;
int itemFour = 0;
int numItemOne = 0;
int numItemTwo = 0;
int numItemThree = 0;
int numItemFour = 0;
int U16 = 0;
int U17 = 0;
int U18 = 0;
int U19 = 0;
int U20 = 0;
int U21 = 0;
int U22 = 0;
int U23 = 0;
int U24 = 0;
int U25 = 0;
int U26 = 0;
Card.iffint numItemOne = 0;
int itemOne = 0;
int numItemTwo = 0;
int itemTwo = 0;
Character.iffbyte U1;
string Sprite2Name;
short U14;
short U33;
short U34;
short U35;
short U36;
short U37;
short U38;
short U39;
String UString1;
String UString2;
String UString3;
short U40;
short U41;
short U42;
short U43;
Club.iffString Sprite2Name = "";
String GFX1 = "";
String GFX2 = "";
String GFX3 = "";
short firstPower = 0;
short firstControl = 0;
short firstAccuracy = 0;
short firstSpin = 0;
short firstCruve = 0;
byte U37 = 0;
byte U38 = 0;
byte U39 = 0;
byte U43 = 0;
byte U44 = 0;
byte U45 = 0;
int U46 = 0;
byte initPower = 0;
byte initControl = 0;
byte initAccuracy = 0;
byte initSpin = 0;
byte initCurve = 0;
int U52 = 0;
byte U53 = 0;
short U55 = 0;
short U56 = 0;
short U57 = 0;
short U58 = 0;
short U59 = 0;
short U60 = 0;
short U61 = 0;
short U62 = 0;
short U63 = 0;
short U64 = 0;
short U65 = 0;
short U66 = 0;
short U67 = 0;
short U68 = 0;
short U69 = 0;
short U70 = 0;
short U71 = 0;
short U72 = 0;
short U73 = 0;
short U74 = 0;
ClubSet.iffString Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
Course.iffint clubWood = 0;
int clubIron = 0;
int clubWedge = 0;
int clubPutter = 0;
short initPower = 0;
short initControl = 0;
short initAccuracy = 0;
short initSpin = 0;
short initCurve = 0;
short maxPower = 0;
short maxControl = 0;
short maxAccuracy = 0;
short maxSpin = 0;
short maxCurve = 0;
CutinInfomation.iffString enName = "";
String thName = "";
int bitFlag = 0;
short Amount = 0;
String xmlFile = "";
short U34 = 0;
short U35 = 0;
int U36 = 0;
String seqFile = "";
Description.iffint U1 = 0;
int U2 = 0;
int U3 = 0;
int U4 = 0;
int U5 = 0;
int U6 = 0;
int U7 = 0;
String picChar = "";
int U8 = 0;
String picBG = "";
int U9 = 0;
String picOverlay = "";
int U10 = 0;
String picUnknown = "";
int U11 = 0;
int U12 = 0;
Furniture.iffint itemID = 0;
String ItemName = "";
FurnitureAbility.iffString Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
short U42 = 0;
short U43 = 0;
short U44 = 0;
short U45 = 0;
short U46 = 0;
short U47 = 0;
short U48 = 0;
short U49 = 0;
short U50 = 0;
short U51 = 0;
short U52 = 0;
short U53 = 0;
short U54 = 0;
short U55 = 0;
short U56 = 0;
short U57 = 0;
short U58 = 0;
short U59 = 0;
HairStyle.iffint isValid = 0;
int itemID = 0;
int num1 = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
int num5 = 0;
short numYear = 0;
short numMonth = 0;
short numZero = 0;
short numDay = 0;
short numHour = 0;
short numMinute = 0;
short numSecond = 0;
short numMilliSecond = 0;
short num6 = 0;
short num7 = 0;
short num8 = 0;
short num9 = 0;
short num10 = 0;
short num11 = 0;
short num12 = 0;
short num13 = 0;
short num14 = 0;
short num15 = 0;
short num16 = 0;
short num17 = 0;
short num18 = 0;
short num19 = 0;
short num20 = 0;
short num21 = 0;
Item.iffString Sprite2Name = "";
short Amount = 0;
short colorID = 0;
short numChar = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
Mascot.iffString Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
Match.iffString Sprite2Name = "";
String Sprite3Name = "";
short price1Day = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
short U42 = 0;
short U43 = 0;
short U44 = 0;
short U45 = 0;
short U46 = 0;
short U47 = 0;
short U48 = 0;
short U49 = 0;
short U50 = 0;
short U51 = 0;
short U52 = 0;
OfflineShop.iffint isValid = 0;
int ItemID = 0;
String ItemName = "";
short lvlReq = 0;
String Icon = "";
String Icon2 = "";
String Icon3 = "";
String Icon4 = "";
String Icon5 = "";
String Icon6 = "";
String Icon7 = "";
String Icon8 = "";
Short U2 = 0;
Short U3 = 0;
Short U4 = 0;
Part.iffint numRef = 0;
int ref1 = 0;
int ref2 = 0;
int ref3 = 0;
int ref4 = 0;
int ref5 = 0;
int ref6 = 0;
int ref7 = 0;
int ref8 = 0;
int ref9 = 0;
int ref10 = 0;
int ref11 = 0;
int ref12 = 0;
int ref13 = 0;
QuestDrop.iffString Sprite2Name = "";
// The following bytes could be 6 shorts too
byte numStat1 = 0;
byte numStat2 = 0;
byte numStat3 = 0;
byte numStat4 = 0;
byte numStat5 = 0;
byte numStat6 = 0;
byte numStat7 = 0;
byte numStat8 = 0;
byte numStat9 = 0;
byte numStat10 = 0;
byte numStat11 = 0;
byte numStat12 = 0;
String Sprite3Name = "";
String Sprite4Name = "";
String Sprite5Name = "";
String Sprite6Name = "";
String Sprite7Name = "";
String Sprite8Name = "";
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
short U42 = 0;
String UString1 = "";
int equipWith1 = 0;
int equipWith2 = 0;
short U67 = 0;
short U68 = 0;
short U69 = 0;
short U70 = 0;
Skin.iffshort U20 = 0;
short U21 = 0;
short U22 = 0;
short U23 = 0;
short U24 = 0;
short U25 = 0;
short U26 = 0;
short U27 = 0;
short U28 = 0;
short U29 = 0;
short U30 = 0;
short U31 = 0;
short U32 = 0;
short U44 = 0;
short U45 = 0;
short U46 = 0;
String Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
short U38 = 0;
short U39 = 0;
short U40 = 0;
short U41 = 0;
short U42 = 0;
byte U43 = 0;
byte U47 = 0;
short U48 = 0;
short U49 = 0;
TikiPointTable.iffpublic String Sprite2Name = "";
short Amount = 0;
byte U33 = 0;
byte U34 = 0;
byte U35 = 0;
byte U36 = 0;
byte U37 = 0;
byte U38 = 0;
byte U39 = 0;
byte U40 = 0;
byte U41 = 0;
byte U42 = 0;
byte U43 = 0;
byte U44 = 0;
byte U45 = 0;
byte U46 = 0;
short U47 = 0;
short U48 = 0;
short U49 = 0;
short U50 = 0;
TikiRecipe.iffint ID = 0;
int ItemID = 0;
byte lvlReq = 0;
byte U2 = 0;
byte U3 = 0;
byte U4 = 0;
byte U5 = 0;
byte U6 = 0;
byte U7 = 0;
byte U8 = 0;
byte U9 = 0;
byte U10 = 0;
byte U11 = 0;
byte U12 = 0;
byte U13 = 0;
byte U14 = 0;
byte U15 = 0;
byte U16 = 0;
byte U17 = 0;
byte U18 = 0;
byte U19 = 0;
byte U20 = 0;
byte U21 = 0;
byte U22 = 0;
byte U23 = 0;
byte U24 = 0;
byte U25 = 0;
byte U26 = 0;
byte U27 = 0;
byte U28 = 0;
byte U29 = 0;
byte U30 = 0;
byte U31 = 0;
byte U32 = 0;
byte U33 = 0;
byte U34 = 0;
byte U35 = 0;
byte U36 = 0;
byte U37 = 0;
byte U38 = 0;
byte U39 = 0;
byte U40 = 0;
TikiSpecialTable.iffint ID = 0;
int ItemID = 0;
byte lvlReq = 0;
byte U2 = 0;
byte U3 = 0;
byte U4 = 0;
byte U5 = 0;
byte U6 = 0;
byte U7 = 0;
byte U8 = 0;
byte U9 = 0;
byte U10 = 0;
byte U11 = 0;
byte U12 = 0;
byte U13 = 0;
byte U14 = 0;
byte U15 = 0;
byte U16 = 0;
byte U17 = 0;
byte U18 = 0;
byte U19 = 0;
byte U20 = 0;
byte U21 = 0;
byte U22 = 0;
byte U23 = 0;
byte U24 = 0;
byte U25 = 0;
byte U26 = 0;
byte U27 = 0;
byte U28 = 0;
byte U29 = 0;
byte U30 = 0;
byte U31 = 0;
byte U32 = 0;
byte U33 = 0;
byte U34 = 0;
byte U35 = 0;
byte U36 = 0;
byte U37 = 0;
byte U38 = 0;
byte U39 = 0;
byte U40 = 0;
byte U41 = 0;
byte U42 = 0;
byte U43 = 0;
byte U44 = 0;
public int ID = 0;
int ItemID = 0;
byte lvlReq = 0;
byte U2 = 0;
byte U3 = 0;
byte U4 = 0;
byte U5 = 0;
byte U6 = 0;
byte U7 = 0;
byte U8 = 0;
byte U9 = 0;
byte U10 = 0;
byte U11 = 0;
byte U12 = 0;
byte U13 = 0;
byte U14 = 0;
byte U15 = 0;
byte U16 = 0;
byte U17 = 0;
byte U18 = 0;
byte U19 = 0;
byte U20 = 0;
byte U21 = 0;
byte U22 = 0;
byte U23 = 0;
byte U24 = 0;
byte U25 = 0;
byte U26 = 0;
byte U27 = 0;
byte U28 = 0;
byte U29 = 0;
byte U30 = 0;
byte U31 = 0;
byte U32 = 0;
byte U33 = 0;
byte U34 = 0;
byte U35 = 0;
byte U36 = 0;
byte U37 = 0;
byte U38 = 0;
byte U39 = 0;
byte U40 = 0;
byte U41 = 0;
byte U42 = 0;
byte U43 = 0;
byte U44 = 0;
byte U45 = 0;
byte U46 = 0;
byte U47 = 0;
byte U48 = 0;
byte U49 = 0;
byte U50 = 0;
byte U51 = 0;
byte U52 = 0;
Remember that me myself has named the variables, its just my thought on what its for!
I will report back with the rest of the bytes for the rest of the files later today.
Last edited: