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.
Zero Tolerance for Disrespect

(PS2) Michigan: Report from Hell *.BIN

Featured Replies

Hi! after looking around on old Xentax posts I have found nothing would dump the .BIN files. I have never seen a LF header before I'm pretty sure its an archive header, also tried every importer I could find, Any help? Thanks!

Michigan Report from Hell BIN.7z

Edited by shorewake

  • shorewake changed the title to (PS2) Michigan: Report from Hell *.BIN
  • 3 weeks later...
  • Localization

Extracter in python: 

Spoiler
#Michigan: Report from Hell *.BIN
#extracter by setttsuya aka rzhumen88
import os
import struct

def extract(path):
    CHUNK = 0x800
    DIR = path[:3]
    with open(path, 'rb') as f:
        f = f.read()
        reader = 4
        fileid = 0
        if f[:2] != b'LF':
            print('Wrong header!')
            return 0
        if not os.path.isdir(DIR):
            os.mkdir(DIR)
        while reader < CHUNK:
            offset, length = struct.unpack('II', f[reader:reader+8])
            offset = offset * CHUNK
            reader += 8
            if offset > 0 and length > 0:
                with open(DIR+'/'+str(fileid), 'wb') as extracted:
                    extracted.write(f[offset:offset+length])
                    print(f'Extracted: {fileid}')
                fileid += 1

if __name__ == '__main__':
    usr_input = ''
    while True:
        print('Enter path to .BIN file')
        usr_input = input()
        if os.path.isfile(usr_input):
            extract(usr_input)
            input('Done!')
            break

 

However there's no filenames inside.

Edited by r88

  • 10 months later...
  • Localization

Added support for it in my extractor: https://github.com/smiRaphi/UniPyX (https://github.com/smiRaphi/UniPyX/commit/25ce35b41476f757f986ac27045e0e1e54d37cf4)

Improvements to the above script:

* Use the provided number in the header for the file count (which means support for archives with more than 255 files)

* File extension guessing

* Extract the sub format that's used for packing graphics (maybe other stuff as well, not 100% sure)

  • 2 months later...
  • Author

I have learned that Taiyou to Ame to (AKA Flower, Sun, and Rain) has the same "LF" magic bytes, user "snakemeat" wrote a script to de-compile these files in 2009 but still no file names inside, However there are GMDF model files which are .GMF, After I compared them with Samurai Champloo: Sidetracked they are 100% model files with a .TME texture embed, I hope that we can figure out how to extract these files with their proper file names.

2678_FlowerSunRainLFExt_20090831.7z

  • Localization
13 hours ago, shorewake said:

I have learned that Taiyou to Ame to (AKA Flower, Sun, and Rain) has the same "LF" magic bytes, user "snakemeat" wrote a script to de-compile these files in 2009 but still no file names inside, However there are GMDF model files which are .GMF, After I compared them with Samurai Champloo: Sidetracked they are 100% model files with a .TME texture embed, I hope that we can figure out how to extract these files with their proper file names.

2678_FlowerSunRainLFExt_20090831.7z 14.11 kB · 0 downloads

These archives don't contain filenames.

The archives also don't contain filename hashes, so there's nothing we can even compare to, to allow us to match filenames to the files in an archive.

There is no current way to get filenames for these games.

  • Author
49 minutes ago, wattostudios said:

These archives don't contain filenames.

The archives also don't contain filename hashes, so there's nothing we can even compare to, to allow us to match filenames to the files in an archive.

There is no current way to get filenames for these games.

I see.. Thank you for trying anyways. Hope someone will be able to find a way in the future.

  • Localization
3 hours ago, shorewake said:

I see.. Thank you for trying anyways. Hope someone will be able to find a way in the future.

Just for further reference, I compared these archive to the ones in Samurai Champloo: Sidetracked - they are a similar format, but not exactly the same. Fundamentally, the archives in Samurai Champloo: Sidetracked do contain a filename directory right at the start of the archives, however the game Michigan: Report from Hell certainly does not contain filenames.

 

The GMF files do seem to be similar in both games, and the TME textures are identical as well.

10 hours ago, shorewake said:

I see.. Thank you for trying anyways. Hope someone will be able to find a way in the future.

What is the file structure in the game, judging by the name: STAGE1.BIN - contents of the first GAME level
CHARA.BIN - contains the game's characters and everything related to them?

  • Author
25 minutes ago, hitropl said:

What is the file structure in the game, judging by the name: STAGE1.BIN - contents of the first GAME level
CHARA.BIN - contains the game's characters and everything related to them?

DATA\EFF\VIEW.BIN
DATA\HAYA\CHARA.BIN
DATA\HAYA\EFFECT.BIN
DATA\HAYA\EFFECTF.BIN
DATA\HAYA\EFFECTI.BIN
DATA\HAYA\EFFECTS.BIN
DATA\HAYA\EVENT.BIN
DATA\HAYA\HAYA.BIN
DATA\HAYA\MODEL.BIN
DATA\HAYA\MOTION.BIN
DATA\HAYA\SCRIPT.BIN
DATA\HAYA\SCRIPTEN.BIN
DATA\HAYA\SCRIPTFR.BIN
DATA\HAYA\SCRIPTIT.BIN
DATA\HAYA\SCRIPTSP.BIN
DATA\HAYA\STAGE1.BIN
DATA\HAYA\STAGE2.BIN
DATA\HAYA\STAGE3.BIN
DATA\HAYA\STAGE4.BIN
DATA\HAYA\STAGE5.BIN
DATA\HAYA\STAGE6.BIN
DATA\HAYA\STAGE7.BIN
DATA\HAYA\STAGE8.BIN
DATA\HAYA\STAGE9.BIN
DATA\HAYA\TSCRIPTE.BIN
DATA\HAYA\TSCRIPTF.BIN
DATA\HAYA\TSCRIPTI.BIN
DATA\HAYA\TSCRIPTS.BIN
DATA\MOVIE\MOVIE_E.BIN
DATA\MOVIE\MOVIE_F.BIN
DATA\MOVIE\MOVIE_I.BIN
DATA\MOVIE\MOVIE_S.BIN
DATA\NOGU\NOGMAIN.BIN
DATA\NOGU\nogSk.bin
DATA\NOGU\NOGSK_E.BIN
DATA\NOGU\NOGSK_F.BIN
DATA\NOGU\NOGSK_I.BIN
DATA\NOGU\NOGSK_S.BIN
DATA\SOUND\GVGDATAE.BIN
DATA\SOUND\SNDDATA.BIN
DATA\SYSTEM\SYSTEM.BIN
DATA\YOSHI\YOSHI_E.BIN
DATA\YOSHI\YOSHI_F.BIN
DATA\YOSHI\YOSHI_I.BIN
DATA\YOSHI\YOSHI_S.BIN

 

23 minutes ago, shorewake said:
DATA\EFF\VIEW.BIN
DATA\HAYA\CHARA.BIN
DATA\HAYA\EFFECT.BIN
DATA\HAYA\EFFECTF.BIN
DATA\HAYA\EFFECTI.BIN
DATA\HAYA\EFFECTS.BIN
DATA\HAYA\EVENT.BIN
DATA\HAYA\HAYA.BIN
DATA\HAYA\MODEL.BIN
DATA\HAYA\MOTION.BIN
DATA\HAYA\SCRIPT.BIN
DATA\HAYA\SCRIPTEN.BIN
DATA\HAYA\SCRIPTFR.BIN
DATA\HAYA\SCRIPTIT.BIN
DATA\HAYA\SCRIPTSP.BIN
DATA\HAYA\STAGE1.BIN
DATA\HAYA\STAGE2.BIN
DATA\HAYA\STAGE3.BIN
DATA\HAYA\STAGE4.BIN
DATA\HAYA\STAGE5.BIN
DATA\HAYA\STAGE6.BIN
DATA\HAYA\STAGE7.BIN
DATA\HAYA\STAGE8.BIN
DATA\HAYA\STAGE9.BIN
DATA\HAYA\TSCRIPTE.BIN
DATA\HAYA\TSCRIPTF.BIN
DATA\HAYA\TSCRIPTI.BIN
DATA\HAYA\TSCRIPTS.BIN
DATA\MOVIE\MOVIE_E.BIN
DATA\MOVIE\MOVIE_F.BIN
DATA\MOVIE\MOVIE_I.BIN
DATA\MOVIE\MOVIE_S.BIN
DATA\NOGU\NOGMAIN.BIN
DATA\NOGU\nogSk.bin
DATA\NOGU\NOGSK_E.BIN
DATA\NOGU\NOGSK_F.BIN
DATA\NOGU\NOGSK_I.BIN
DATA\NOGU\NOGSK_S.BIN
DATA\SOUND\GVGDATAE.BIN
DATA\SOUND\SNDDATA.BIN
DATA\SYSTEM\SYSTEM.BIN
DATA\YOSHI\YOSHI_E.BIN
DATA\YOSHI\YOSHI_F.BIN
DATA\YOSHI\YOSHI_I.BIN
DATA\YOSHI\YOSHI_S.BIN

 

image.png.6135d571c114c00ffba335c179c6a382.pngimage.png.df0c5ed055066887832c52c36a263e3a.pngimage.png.7c0a89aa7307c9ccdd3f1109f352aa2e.png
Judging by the contents of the STAGE1.bin file, it contains all the original resources for this level, including textures and monsters (I've attached screenshots for example), and the chara file contains the character/characters, geometry, bones, and so on, the most likely point is that the file sections do not have headers because they are not needed, the game engine jumps between sections of the binary file and understands what is in which according to pre-headered offsets, or the number of markers, reading, for example, the required quantity from a table (DWORD)

  • Author
13 minutes ago, hitropl said:

image.png.6135d571c114c00ffba335c179c6a382.pngimage.png.df0c5ed055066887832c52c36a263e3a.pngimage.png.7c0a89aa7307c9ccdd3f1109f352aa2e.png
Judging by the contents of the STAGE1.bin file, it contains all the original resources for this level, including textures and monsters (I've attached screenshots for example), and the chara file contains the character/characters, geometry, bones, and so on, the most likely point is that the file sections do not have headers because they are not needed, the game engine jumps between sections of the binary file and understands what is in which according to pre-headered offsets, or the number of markers, reading, for example, the required quantity from a table (DWORD)

I already figured out the TME textures from someone on Xentax, a noesis script for BLOOD+ One Night Kiss. All I did was fix some of the swizzling image.thumb.png.0cc9497b3a0b5f11c0168a4fdf156c3d.png

10 minutes ago, shorewake said:

I already figured out the TME textures from someone on Xentax, a noesis script for BLOOD+ One Night Kiss. All I did was fix some of the swizzling image.thumb.png.0cc9497b3a0b5f11c0168a4fdf156c3d.png

Nice!
It seems to me that the main difficulty will not be in replacing the 2D texture itself superimposed on the 3D model, but in adding a new one due to the limitation of a specific section of the game file

  • Author
1 hour ago, hitropl said:

Nice!
It seems to me that the main difficulty will not be in replacing the 2D texture itself superimposed on the 3D model, but in adding a new one due to the limitation of a specific section of the game file

Took me a bit to look through my files, My friend and I originally tried to make it a regular python script for easy extraction but ultimately decided into make a Noesis plugin. I hope this will be in some help

tex_GHM_PS2.py

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.