Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

iff-files

Creator of Code
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):


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( ):
typedef struct _SYSTEMTIME {
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:
short 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;
Ball.iff
short 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;
Caddie.iff
int Salary = 0;
String Icon2 = "";
short Power = 0;
short Control = 0;
short Accuracy = 0;
short Spin = 0;
short Curve = 0;
short U39 = 0;
CaddieItem.iff
String GFX1 = "";
String GFX2 = "";
short price1Day = 0;
short U33 = 0;
short price7Days = 0;
short price30Days = 0;
short Amount = 0;
short U37 = 0;
CadieMagicBox.iff
int 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;
CadieMagicBoxRandom.iff
int numItemOne = 0;
int itemOne = 0;
int numItemTwo = 0;
int itemTwo = 0;
Card.iff
byte 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;
Character.iff
String 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;
Club.iff
String Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
ClubSet.iff
int 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;
Course.iff
String enName = "";
String thName = "";
int bitFlag = 0;
short Amount = 0;
String xmlFile = "";
short U34 = 0;
short U35 = 0;
int U36 = 0;
String seqFile = "";
CutinInfomation.iff
int 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;
Description.iff
int itemID = 0;
String ItemName = "";
Furniture.iff
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;
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;
FurnitureAbility.iff
int 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;
HairStyle.iff
String Sprite2Name = "";
short Amount = 0;
short colorID = 0;
short numChar = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
Item.iff
String Sprite2Name = "";
short Amount = 0;
short U33 = 0;
short U34 = 0;
short U35 = 0;
short U36 = 0;
short U37 = 0;
Mascot.iff
String 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;
Match.iff
int 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;
OfflineShop.iff
int 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;
Part.iff
String 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;
QuestDrop.iff
short 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;
Skin.iff
public 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;
TikiPointTable.iff
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;
TikiRecipe.iff
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;
TikiSpecialTable.iff
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:
Experienced Elementalist
Joined
May 28, 2005
Messages
260
Reaction score
11
I'm not sure how you look into it, but from my hex i see Item Name, zero-bytes until to the dataset.

Then about 35 or 36 zero-bytes down to the price then 10 more to shop tags. There are some additional data in between sometimes but i don't know what are those really for, can only assume as a mark for other purpose.

Anyway i'm new to the hex edit so i might said something in the wrong term maybe :p
 
Deny everything.
Joined
Jun 17, 2005
Messages
488
Reaction score
110
First off, there are repeating structures within the Iff files (hereby refered to as IffCommon struct). This file has them too, so it doesn't sport it's own record header and the structure comes down to:

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

No empty or reserved bytes in it, so it's pretty straight forward to edit.

mrNickname, comments like "I can only assume as a mark for other purpose" doesn't help anyone. It's like saying "oh there's data, it's probably there for a reason". Please do your homework and get your facts straight or refrain from posting such comments. It's simply not helpful if you don't have the facts to back up your statements for this sort of development.
 
Last edited:
Deny everything.
Joined
Jun 17, 2005
Messages
488
Reaction score
110
Where did you get that from? Adding up the numbers gets you to 196 bytes.

You can easily check the length of each record in the IFF files simply by calculating ((filesize - 8) / counter value at the beginning of a file). That'll show you the length of 1 record within that file.
 
Deny everything.
Joined
Jun 17, 2005
Messages
488
Reaction score
110
Good call chreadie :)

Strings are usually 40 bytes long (like names, textures or models).
Please note that this is only true for TH and US IFF files. Haven't worked with KR files but JP has more space allocated for those values.
Initially one is probably tempted to think that the last byte for a string has to be 0x00 but this doesn't seem to be the case.

The stats (and actually the stat-specific slots on clubs and clothing as well) are all 2 byte long. There are 5 stat modifiers (Power, Control, Impact, Spin and Curve - exactly in that order). In the item.iff you won't find this but for instance when dealing with the part.iff you'll notice that following the 5 stat modifiers for the initial value there are 5 values for the maximum value. Depending on the file you edit those are either the amount of upgrade points you can spend on this (i.e. 3) or the max value of the item in it's most upgraded state (i.e. 13).

As I stated earlier those values are 2 bytes long, only the first byte is being used though (therefore the max value being 255), the second byte is always 0x00.
 
Last edited:
Creator of Code
Joined
Mar 5, 2006
Messages
371
Reaction score
131
Looking at item.iff, bytes 112 to 115 is my guess of itemtype.

Can someone confirm itemtype of 1 = can be bought for cookies, itemtype of 770 = can be bought for pang?

---------- Post added at 05:30 PM ---------- Previous post was at 05:24 PM ----------

Looking at item.iff, bytes 112 to 115 is my guess of itemtype.

Can someone confirm itemtype of 1 = can be bought for cookies, itemtype of 770 = can be bought for pang?

oh i got the bytes wrong! it should be 104 to 107!

Better guess would be that byte 104 would be in shop or out of shop and 105 pang or cookies.
 
Last edited:
Deny everything.
Joined
Jun 17, 2005
Messages
488
Reaction score
110
Your edit is absolutely right, although backwards.

Offset 104 is the money byte.
It's one of those dirty little things ntreev uses; the value has to be treated as a bitmask. The lower 4 bits of the byte indicate whether the item has to be paid with cookies or pang, the upper 4 bits of the byte manage whether the item is salable.

As for 105, it's the value mrNickname already mentioned - the shop tag. This, too, is a bitmask, so the values 11 and 21 that you read about in other threads are nothing more than an incomplete representation of possible combinations of options.
 
Creator of Code
Joined
Mar 5, 2006
Messages
371
Reaction score
131
I think i have an idea about byte 104 and 105!

After checking some items i found:

Byte 104:

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:

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?

I would love feedback in this!

Also, if you need to edit this in the .iff-files:
Add the numbers of the bit-value and it should be alright.

So playing with this:

I want an item that shows up in shop and costs pang and has the "New" banner would give me an item with byte 105 of value 19!
 
Last edited:
Newbie Spellweaver
Joined
Dec 28, 2008
Messages
6
Reaction score
0
Ok , my iff explanation.

The Syntax has 512 bytes (part.iff)

The 1st byte it's just to know where it begin , normaly 01 , but when it's 00 , the game read it like a "hide" item.

The 5th byte = the value position of the item , like , we have 3 clothes , the yellow red and blue. y=00 r=01 and b=02. If we want add Green to it , we must add there 03 and it will be ok.

the 6th , 7th , and 8th = i never be interested about them

the 9th to 47th = the name of the item.

the 49th byte = the level , 00 = Rookie F 01 = Rookie E 02 = Rookie D

the 50th to 91st = the item image - TGA Image

the 93rd , 94th and 95 = the Price of the item

the 105th and 106th = if the item will be Points/Cookies pang or Hide

the 145th to 186th = the name of the MPET

the 188th , 189th and maybe the 190 = the sommation of the default items. like , if we will add a Dress , the dress uses the TS and PV , TS = 04 (ficticious) and pv = 02 , then the value will be 06 , becuz if we put just 04 , we can use a PV item , it will be weird.

the 197th = the name of the image (JPG not TGA) of the 3D material.

237th = when a 3D model is very complex , they use sometimes 2 image material , and there is the place where you put the second image material.

317th = the name of the first image material in flow. like , if we will add e_ts_27_05.jpg , we will put this thing in the 197th byte and we will put e_ts_27_01.jpg (the first image material in flow) here.

357th = the name of the second image material in flow.we will add something here if the model has 2 image material.

the byte of atribute , and the qty i don't know on season 4

the 505th = if i remember , this is where you set if the item will be tradeable or not. 02 00 01 = non-tradeable 01 00 01 = tradeable .-.

if someone have questions , just ask.

---------- Post added at 01:01 AM ---------- Previous post was at 12:15 AM ----------

my caddie.iff explanation

the 1st byte = as i explain , the initial byte , 01 = unhide 00 = hide

the 5th byte = like tiki , her value = 06 , if we want to add a new caddie , it will be 07

the 6th byte = the name of the cadie

the 49th byte = the level required to purchase , as i said , 00 = rookie F 01 = Rookie E 02 = Rookie D

the 50th byte = the caddie image (TGA)

the 93rd byte = the caddie price

the 106th byte = if the caddie will be cookies/points , pangs or hided

the 145th byte = the value of re-employment , when the caddie is on "vacancy" there will be the price of re-buy it

the 149th byte = the name of the caddie's .PET

the 189th byte = there you set the amout of POWER the caddie will add for you

the 191st byte = there you set the amout of CONTROL the caddie will add for you

the 193rd byte = there you set the amout of ACURRACY the caddie will add for you

the 195th byte = there you set the amout of SPIN the caddie will add for you

the 197th byte = there you set the amout of CURVE the caddie will add for you

the 199th byte = there you set the amout of CONTROL the caddie will add for you
 
Creator of Code
Joined
Mar 5, 2006
Messages
371
Reaction score
131
As Tsukasa stated earlier the first 140ish bytes are the same thru all iff files (except Desc.iff and maybe 2-3 more), just a thought.

Thanks for the ideas about the files, ill compare it to what i have and see what i can figure out!
 
Newbie Spellweaver
Joined
Dec 31, 2010
Messages
11
Reaction score
1
Here's what I've found so far... I've only really concentrated on the bits that make an item show up in the shop. I've successfuly imported all the US stuff that wasn't in the TH .iff, clothes, caddies, clubs, aztecs...

US and TH part.iff files:
When I say x # out of 4474 have this, it's based upon the part.iff I was looking at at the time, which had 4474 lines in it.
Pair01-04: Dunno, almost always 00
Pair05: Valid Item? This is one that needs to be on for the item to show in the shop
Pair06-08: All 00
Pair09-12: Item Number - Reverse these numbers and convert from Hex to Decimal to get item ID (1D080008 -> 0800081D = 134219805)
Pair13-52: Item Name
Pair53: User Rank
Pair54-93: Shop Icon (filename without extension)
Pair:94-96: All 00 (combined it with the shop icon in my database)
Pair97-100: Price
Pair101-108: Dunno, only 165 lines out of 4474 have anything set here and most of those only in Pairs 101 and 102
Pair109: Points (01) or Pang (02)
Pair110: Enabled In Shop (01 & 03 - Normal, 10 & 11 - New, 21 & 22 - Hot!, There's more, but I don't know what they do)
Pair111: Dunno, only 4 items have this set
Pair112: Dunno, only 2 items have this set
Pair113-116: Nothing, all 00
Pair117-148: Dunno, but ~300 items have this set. I think it's a time limited setting, because items won't show up in the shop unless you set these to all 00
Pair149-188: MPET file (without extension)
Pair189-200: Dunno, can't see a clear pattern
Pair201-240: Texture File 1
Pair241-280: Texture File 2
Pair281-320: Texture File 3
Pair321-360: Texture File 4
Pair361-400: Texture File 5
Pair401-440: Texture File 6
Pair441: Power Boost
Pair442: Dummy
Pair443: Control Boost
Pair444: Dummy
Pair445: Impact Boost
Pair446: Dummy
Pair447: Spin Boost
Pair448: Dummy
Pair449: Curve Boost
Pair450: Dummy
Pair451: Power Slot
Pair452: Dummy
Pair453: Control Slot
Pair454: Dummy
Pair455: Impact Slot
Pair456: Dummy
Pair457: Spin Slot
Pair458: Dummy
Pair459: Curve Slot
Pair460: Dummy
Pair461-463: Dunno, it's either 302E30 (~1000items) or it's 000000 (the rest) can't see a pattern
Pair464-500: Dummy (all 00)
Pair501-504: some sort of serial number? only 319 items have these pairs set
Pair505-508: follows a similar pattern to the previous, but only 9 items have this set
Pair509: # of Character Card Slots
Pair510: Dummy
Pair511: # of Caddie Card Slots
Pair512: Dummy
There's 4 places you have to concern yourself to make the items show in the shop. The 5th pair, which seems to be like Valid Item or something; Pair 133, which is the Pang or Points bit; Pair 134, which is the Enabled In Shop bit; and Pair 135-176, which seems to be something related to a "Time Restricted" bit, or maybe it's a frequency of rare thing... dunno. I could make the items show in the shop by setting all 00 in that range.

JP part.iff file:
Pair01-04: Dunno, varies in JP file
Pair05: Valid Item? This is one that needs to be on for the item to show in the shop
Pair06-08: All 00
Pair09-12: Item Number - Reverse these numbers and convert from Hex to Decimal to get item ID (1D080008 -> 0800081D = 134219805)
Pair13-76: Item Name (Double-byte characters of Japanese requires more space)
Pair77: User Rank
Pair78-118: Shop Icon (filename without extension)
Pair:119-120: All 00 (combined it with the shop icon in my database)
Pair121-124: Price
Pair125-132: Dunno
Pair133: Enabled In Shop (01 & 03 - Normal, 10 & 11 - New, 21 & 22 - Hot!, There's more, but I don't know what they do)
Pair134: Points (01) or Pang (02)
Pair135-176: Dunno, but I think it's a time limited setting
Pair177-216: MPET file (without extension)
Pair217: Dunno, but most have this set (only 900 do not)
Pair218-220: Dummy, all 00
Pair221-223: Dunno, can't see a clear pattern
Pair224: Dunno
Pair225-227: Dunno
Pair228: Dummy
Pair229-268: Texture File 1
Pair269-308: Texture File 2
Pair309-348: Texture File 3
Pair349-388: Texture File 4
Pair389-428: Texture File 5
Pair429-468: Texture File 6
Pair469: Power Boost
Pair470: Dummy
Pair471: Control Boost
Pair472: Dummy
Pair473: Impact Boost
Pair474: Dummy
Pair475: Spin Boost
Pair476: Dummy
Pair477: Curve Boost
Pair478: Dummy
Pair479: Power Slot
Pair480: Dummy
Pair481: Control Slot
Pair482: Dummy
Pair483: Impact Slot
Pair484: Dummy
Pair485: Spin Slot
Pair486: Dummy
Pair487: Curve Slot
Pair488: Dummy
Pair489-498: Dunno, it's hex that spells out in katakana "ワンピース(One Piece)"
Pair499-528: Dummy (all 00)
Pair529-532: some sort of serial number? only 319 items have these pairs set
Pair533-536: follows a similar pattern to the previous, but only 11 items have this set

I didn't spend much time on the japanese stuff yet, though I did import the Hatsune Miku outfit from it (before getting around to the US one, which also had it, and in the right format of the TH .iff file).

I created an access database that I can import a hexdump of the iff file, and then it converts the hex to string and numbers for me. It's helped me figure out what some of the stuff is:
chreadie - iff-files - RaGEZONE Forums

Don't forget that the first 4 pairs in the file are the number of items in the file, and the last 4 pairs are just 00. Look at an existing one, and you'll see how the first part goes.
 
Last edited:
Newbie Spellweaver
Joined
Dec 31, 2010
Messages
11
Reaction score
1
Nice explanation but i would rather have which bytes are concerned then the "pair".

Nice program!

I think what I'm calling a pair may actually be called a byte... I'm just learning this stuff, and those are notes I've been keeping from the beginning.
 
Newbie Spellweaver
Joined
Oct 31, 2008
Messages
53
Reaction score
4
JP part.iff file:
Pair133: Enabled In Shop (01 & 03 - Normal, 10 & 11 - New, 21 & 22 - Hot!, There's more, but I don't know what they do)
Pair134: Points (01) or Pang (02)

JP is not like Thai.
Thai have a unique code difference, i work with .iff's since season 3 on KR,JP,US... So, when i touched to thai, i had to learn the new codes.

On JP:
"Pair133" is how it'll be showed and bought on shop.
01 is gacha rare, 02 is papel shop rare (to allow mail and lounge stuff, but don't show on shop)
22 is tradeable + sold by pang on shop, 20 is not tradeable + sold by pang on shop.
21 is points.

"Pair134" is the tags (new, hot, etc...)

An image to explain better the JP & other: [IMG]https://forum.ragezone.com/ima... numbers used to identify pang or rare stuff.
 
Last edited:
Creator of Code
Joined
Mar 5, 2006
Messages
371
Reaction score
131
JP is not like Thai.
Thai have a unique code difference, i work with .iff's since season 3 on KR,JP,US... So, when i touched to thai, i had to learn the new codes.

On JP:
"Pair133" is how it'll be showed and bought on shop.
01 is gacha rare, 02 is papel shop rare (to allow mail and lounge stuff, but don't show on shop)
22 is tradeable + sold by pang on shop, 20 is not tradeable + sold by pang on shop.
21 is points.

"Pair134" is the tags (new, hot, etc...)

An image to explain better the JP & other: [IMG]https://forum.ragezone.com/ima....com/f512/iff-files-719889/#post6115036"]here
 
Junior Spellweaver
Joined
Nov 12, 2010
Messages
169
Reaction score
69
The Syntax has 512 bytes (part.iff)

The 1st byte it's just to know where it begin , normaly 01 , but when it's 00 , the game read it like a "hide" item.

The 5th byte = the value position of the item , like , we have 3 clothes , the yellow red and blue. y=00 r=01 and b=02. If we want add Green to it , we must add there 03 and it will be ok.

the 6th , 7th , and 8th = i never be interested about them

1st byte is 01 for "active" or 00 for "hidden". This part is ok


Bytes 5-6-7-8 are the ItemID! Nothing to do with colors:lol:
 
Junior Spellweaver
Joined
Oct 31, 2007
Messages
192
Reaction score
59
great thanks chreadie. I am still looking into this, and if it's ready, I will release my little iff editor (will be a reader at first :))
 
Back
Top