Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

Project IGI .iff

Featured Replies

  • Localization

What is .iff from Project IGI and can someone make an IFF plugin for Blender or Noesis, and do IFFs contain skeletons or animations?

I've asked NEWME0 (Artiom Rotari) on GitHub but he won't create a 3D model or skeleton viewer: https://github.com/NEWME0/Project-IGI/issues/21

I tried Artiom's binary template for IGI 1 IFF but it failed: https://github.com/Jones-HM/project-igi-research-data/blob/f9bd5c32e239465305e3add1cc1d760368ba89a6/Templates/IGI1/IGI1_IFF.bt

000iff.rar

Edited by mrmaller1905

  • mrmaller1905 changed the title to Project IGI .iff
  • 6 months later...
  • Author
  • Localization

In case who are interested in parsing and converting bones and animations from IGI 1 .iff files, here is the 010 Editor binary template.

 

IFF.bt

Edited by mrmaller1905

  • Supporter

You were told to check for the models first and I found that wasn't finished.

Now seems you're trying to do the second step before the first one and I fear that won't work.

edit: since I don't have the 010 editor I used the pfp py project and got this skeleton with 33 bones:

                                subChunk[2] = struct {
                                        fourcc     = Char[4] ('TLST')
                                        size       = UInt(396 [0000018c])
                                        bone_pos   = struct[33]
                                            bone_pos[0] = struct {
                                                    px         = Float(0.0)
                                                    py         = Float(0.0)
                                                    pz         = Float(0.0)
                                                }
                                            bone_pos[1] = struct {
                                                    px         = Float(-0.5138922929763794)
                                                    py         = Float(183.35211181640625)
                                                    pz         = Float(553.5579833984375)
                                                }
                                            bone_pos[2] = struct {
                                                    px         = Float(0.1523585021495819)
                                                    py         = Float(-377.4803771972656)
                                                    pz         = Float(1280.41357421875)
                                                }
                                            bone_pos[3] = struct {
                                                    px         = Float(0.07410892099142075)
                                                    py         = Float(96.04873657226562)
                                                    pz         = Float(631.0419921875)
                                                }
                                            bone_pos[4] = struct {
                                                    px         = Float(-3.967119118897244e-05)
                                                    py         = Float(103.25892639160156)
                                                    pz         = Float(352.92730712890625)
                                                }
                                            bone_pos[5] = struct {
                                                    px         = Float(-1.018150806427002)
                                                    py         = Float(97.74694061279297)
                                                    pz         = Float(891.6131591796875)
                                                }
                                            bone_pos[6] = struct {
                                                    px         = Float(-0.11346861720085144)
                                                    py         = Float(76.36090850830078)
                                                    pz         = Float(121.43697357177734)
                                                }
                                            bone_pos[7] = struct {
                                                    px         = Float(3.710103192133829e-05)
                                                    py         = Float(454.25048828125)
                                                    pz         = Float(-358.7002258300781)
                                                }
                                            bone_pos[8] = struct {
                                                    px         = Float(-873.77099609375)
                                                    py         = Float(180.32762145996094)
                                                    pz         = Float(-380.1419677734375)
                                                }
                                            bone_pos[9] = struct {
                                                    px         = Float(-498.6019592285156)
                                                    py         = Float(-220.04612731933594)
                                                    pz         = Float(-1074.8599853515625)
                                                }
                                            bone_pos[10] = struct {
                                                    px         = Float(-476.04119873046875)
                                                    py         = Float(213.7456512451172)
                                                    pz         = Float(-980.4103393554688)
                                                }
                                            bone_pos[11] = struct {
                                                    px         = Float(-231.91920471191406)
                                                    py         = Float(-0.0029697269201278687)
                                                    pz         = Float(-439.615478515625)
                                                }
                                            bone_pos[12] = struct {
                                                    px         = Float(-11.216732025146484)
                                                    py         = Float(0.00010558709618635476)
                                                    pz         = Float(-200.45413208007812)
                                                }
                                            bone_pos[13] = struct {
                                                    px         = Float(-15.135907173156738)
                                                    py         = Float(-5.449031596072018e-05)
                                                    pz         = Float(-306.6474304199219)
                                                }
                                            bone_pos[14] = struct {
                                                    px         = Float(877.7891235351562)
                                                    py         = Float(180.32720947265625)
                                                    pz         = Float(-380.14031982421875)
                                                }
                                            bone_pos[15] = struct {
                                                    px         = Float(494.1496276855469)
                                                    py         = Float(-220.12353515625)
                                                    pz         = Float(-1074.810791015625)
                                                }
                                            bone_pos[16] = struct {
                                                    px         = Float(468.0498962402344)
                                                    py         = Float(213.82183837890625)
                                                    pz         = Float(-985.9440307617188)
                                                }
                                            bone_pos[17] = struct {
                                                    px         = Float(232.67367553710938)
                                                    py         = Float(-0.00010443734936416149)
                                                    pz         = Float(-433.71722412109375)
                                                }
                                            bone_pos[18] = struct {
                                                    px         = Float(13.601054191589355)
                                                    py         = Float(0.0003244699619244784)
                                                    pz         = Float(-200.13710021972656)
                                                }
                                            bone_pos[19] = struct {
                                                    px         = Float(2.6307296752929688)
                                                    py         = Float(-0.00010907361138379201)
                                                    pz         = Float(-307.5419921875)
                                                }
                                            bone_pos[20] = struct {
                                                    px         = Float(5.440348148345947)
                                                    py         = Float(725.950439453125)
                                                    pz         = Float(-228.98277282714844)
                                                }
                                            bone_pos[21] = struct {
                                                    px         = Float(9.466634219279513e-05)
                                                    py         = Float(2103.57861328125)
                                                    pz         = Float(392.4938659667969)
                                                }
                                            bone_pos[22] = struct {
                                                    px         = Float(8.082063141046092e-05)
                                                    py         = Float(1614.331787109375)
                                                    pz         = Float(1297.79296875)
                                                }
                                            bone_pos[23] = struct {
                                                    px         = Float(-430.3789978027344)
                                                    py         = Float(94.9665756225586)
                                                    pz         = Float(-44.37565231323242)
                                                }
                                            bone_pos[24] = struct {
                                                    px         = Float(-0.8461065888404846)
                                                    py         = Float(208.38644409179688)
                                                    pz         = Float(-1737.64599609375)
                                                }
                                            bone_pos[25] = struct {
                                                    px         = Float(79.94613647460938)
                                                    py         = Float(-363.0055236816406)
                                                    pz         = Float(-1827.7457275390625)
                                                }
                                            bone_pos[26] = struct {
                                                    px         = Float(-23.128799438476562)
                                                    py         = Float(390.8931579589844)
                                                    pz         = Float(-163.42630004882812)
                                                }
                                            bone_pos[27] = struct {
                                                    px         = Float(-30.827518463134766)
                                                    py         = Float(738.0623168945312)
                                                    pz         = Float(-258.8499755859375)
                                                }
                                            bone_pos[28] = struct {
                                                    px         = Float(435.3146667480469)
                                                    py         = Float(94.96534729003906)
                                                    pz         = Float(-44.37565231323242)
                                                }
                                            bone_pos[29] = struct {
                                                    px         = Float(3.454439401626587)
                                                    py         = Float(208.38644409179688)
                                                    pz         = Float(-1737.650146484375)
                                                }
                                            bone_pos[30] = struct {
                                                    px         = Float(-79.11219024658203)
                                                    py         = Float(-363.0055236816406)
                                                    pz         = Float(-1827.7415771484375)
                                                }
                                            bone_pos[31] = struct {
                                                    px         = Float(16.629308700561523)
                                                    py         = Float(390.8931579589844)
                                                    pz         = Float(-163.42630004882812)
                                                }
                                            bone_pos[32] = struct {
                                                    px         = Float(10.211040496826172)
                                                    py         = Float(738.0623168945312)
                                                    pz         = Float(-258.8499755859375)
                                                }
                                        _skipped   = Char[0] ('')
                                    }

I see frames with translation data but have no idea how to connect them to the bones:

subChunk[2] = struct {
                                                    fourcc     = Char[4] ('BOTD')
                                                    size       = UInt(200 [000000c8])
                                                    translationData = struct[5]
                                                        translationData[0] = struct {
                                                                px         = Float(7.546019554138184)
                                                                py         = Float(3.9196670055389404)
                                                                pz         = Float(3812.746337890625)
                                                                time       = Float(0.0)
                                                                unk        = Float[6]
                                                            }
                                                        translationData[1] = struct {
                                                                px         = Float(7.546060562133789)
                                                                py         = Float(1915.4722900390625)
                                                                pz         = Float(3615.44873046875)
                                                                time       = Float(640.0)
                                                                unk        = Float[6]
                                                            }
                                                        translationData[2] = struct {
                                                                px         = Float(7.5461015701293945)
                                                                py         = Float(5260.68994140625)
                                                                pz         = Float(3812.746826171875)
                                                                time       = Float(1760.0)
                                                                unk        = Float[6]
                                                            }
                                                        translationData[3] = struct {
                                                                px         = Float(7.546142578125)
                                                                py         = Float(7172.2421875)
                                                                pz         = Float(3615.448974609375)
                                                                time       = Float(2400.0)
                                                                unk        = Float[6]
                                                            }
                                                        translationData[4] = struct {
                                                                px         = Float(7.5461835861206055)
                                                                py         = Float(10039.5712890625)
                                                                pz         = Float(3812.746826171875)
                                                                time       = Float(3520.0)
                                                                unk        = Float[6]
                                                            }
                                                    _skipped   = Char[0] ('')
                                                }

For all reading here randomly, concerning an animation viewer for iff files

this is the answer from DotCube1 on Apr 15, 2024

Quote

No cause there are 2 major problems
IFF can't be converted straight to animation. Either you can convert it into .BEF file to view it in plain format or convert it in .XAF file to import it into 3DS Max.

Second problem is that till you don't convert the models to load them into a 3d editor animations are no use so I suggest you to work on models

 

Edited by shak-otay

  • 3 months later...
  • Supporter

Well, 4 months later it's too hard for me to focus on this again, sorry.

(My 'job' here is basically to help people help themselves.)

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.