iff-files

Page 1 of 4 1234 LastLast
Results 1 to 15 of 46
  1. #1
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Support 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):


    Quote Originally Posted by Tsukasa View Post
    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(SYSTEMTIME structure):
    Spoiler:


    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:
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    String GFX1 = "";
    String GFX2 = "";
    short price1Day = 0;
    short U33 = 0;
    short price7Days = 0;
    short price30Days = 0;
    short Amount = 0;
    short U37 = 0;
    CadieMagicBox.iff
    Spoiler:

    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
    Spoiler:

    int numItemOne = 0;
    int itemOne = 0;
    int numItemTwo = 0;
    int itemTwo = 0;
    Card.iff
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    String Sprite2Name = "";
    short Amount = 0;
    short U33 = 0;
    short U34 = 0;
    short U35 = 0;
    short U36 = 0;
    short U37 = 0;
    ClubSet.iff
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    int itemID = 0;
    String ItemName = "";
    Furniture.iff
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    String Sprite2Name = "";
    short Amount = 0;
    short colorID = 0;
    short numChar = 0;
    short U35 = 0;
    short U36 = 0;
    short U37 = 0;
    Item.iff
    Spoiler:

    String Sprite2Name = "";
    short Amount = 0;
    short U33 = 0;
    short U34 = 0;
    short U35 = 0;
    short U36 = 0;
    short U37 = 0;
    Mascot.iff
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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
    Spoiler:

    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 by chreadie; 15-07-13 at 09:37 PM. Reason: More details, not finished


  2. #2
    Account Upgraded | Title Enabled! mrNickname is offline
    MemberRank
    May 2005 Join Date
    Isolated TowerLocation
    270Posts

    Re: iff-files

    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

  3. #3
    Deny everything. Tsukasa is offline
    MemberRank
    Jun 2005 Join Date
    Net SlumLocation
    558Posts

    Re: iff-files

    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 by Tsukasa; 15-01-11 at 03:34 PM.

  4. #4
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    so basically 1 items is 190 bytes in Item.iff?

    Im gonna look at some other iff-files and see what i can find.

  5. #5
    Deny everything. Tsukasa is offline
    MemberRank
    Jun 2005 Join Date
    Net SlumLocation
    558Posts

    Re: iff-files

    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.

  6. #6
    Deny everything. Tsukasa is offline
    MemberRank
    Jun 2005 Join Date
    Net SlumLocation
    558Posts

    Re: iff-files

    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 by Tsukasa; 15-01-11 at 04:47 PM.

  7. #7
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    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 ----------

    Quote Originally Posted by chreadie View Post
    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 by chreadie; 15-01-11 at 05:26 PM.

  8. #8
    Deny everything. Tsukasa is offline
    MemberRank
    Jun 2005 Join Date
    Net SlumLocation
    558Posts

    Re: iff-files

    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.

  9. #9
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    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 by chreadie; 18-01-11 at 06:57 AM.

  10. #10
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    Does anyone know anything about byte 106 and 107?
    Caddies seem to have values here, wonder why!

  11. #11
    Apprentice sky0165 is offline
    MemberRank
    Dec 2008 Join Date
    6Posts

    Re: iff-files

    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

  12. #12
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    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!

  13. #13
    Apprentice burningchr0me is offline
    MemberRank
    Dec 2010 Join Date
    11Posts

    Re: iff-files

    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:
    Spoiler:

    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:
    Spoiler:
    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:
    Spoiler:


    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 by burningchr0me; 24-01-11 at 02:56 AM. Reason: Trying to spoiler image

  14. #14
    Creator of Code chreadie is offline
    MemberRank
    Mar 2006 Join Date
    SwedenLocation
    603Posts

    Re: iff-files

    Nice explanation but i would rather have which bytes are concerned then the "pair".

    Nice program!

  15. #15
    Apprentice burningchr0me is offline
    MemberRank
    Dec 2010 Join Date
    11Posts

    Re: iff-files

    Quote Originally Posted by chreadie View Post
    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.



Page 1 of 4 1234 LastLast

Advertisement