Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Maki

Pages: [1]
1
Update:
Uh... Got zero response. Closing contest prematurely.  :'(

Hello everyone!
To push forward the global start of heavy development on new, upgraded version 2 of the demaster mod I'm making a contest to prepare a logo for the mod. The logo that will be finally used will award 50USD on PayPal/bank transfer/PaySafeCard code/whatever to not charge me additonal fees.

It's simple, just prepare a logo with "Demaster reborn" or "Demaster Reborn" or "DEMASTER REBORN" or whatever suits best for you. Logo can be both rasterized (.png/.tga/.dds/.PSD/.whatever with RGBA) or vector (.ai/.svg/anything that I'll be able to open with Adobe).

Requirements:
1. If vector art- the filename should be available to be opened by any of the Adobe tools
2. if it's 3D Art- yes, it's fine - I accept .blender and Autodesk 3DS Max/Maya, FBX and OBJ, just make sure to apply materials)
3. If it's rasterized, please provide decent resolution. I don't want to have it to be put on ESRGAN to make it bigger
4. Please take a note that i should have transparency/alpha channel, or minimum white+black background versions

Notes:
1. Please DO NOT use copyrighted materials like original art- original Griever design or for example the official logo. SE will be able to sue the art (I think?)
2. Please DO NOT use the official font used in the logo- it's copyrighted as well to SE. If you want, you can use similar one, custom one, but never the official or trayced from original one - actually it looks like the font is Microsoft licensed, therefore go on 😁
3. Remember about the transparency or white/black pre-rendered versions
4. If your art is not going to end up as official logo, I still might be interested to buy it from you for special needs or something
5. The art is going to end up in mod that is licensed as GNU GPL 3.0- which means that the art after I choose and buy it from you will be available globally for remixes and even commercial usage

Endtime:
11.08.2022 20:00 CET (DD/MM/YYYY)

So... let's your fantasy go on! Remember, every art posted is full all rights reserved to you until I'll buy/make you a winner and the rights be transfered for Demaster Reborn usage.

If any questions- go on! Let the tournament begin!

PS> Once again! If you do something cool not sticking to requirements I might be still interested to award you!
PS2> The price can change... but only up!  ;D


Here's the example I prepared with stock art from Envato:

This art is currently all-rights-reserved, please do not copy

2
Demaster is an injectable DLL that introduces many features: allows replacing monsters that didn't have HD textures, allows replacing fields with HD!!, allows replacing and modifying basically any texture, allows replacing battle stage textures, introduces auto UV patch, introduces direct reading of files instead of .zzz archives- basically Tonberry that works natively + several patches

Download now at:
https://github.com/MaKiPL/FF8_demastered/releases

INCLUDES 16 pages PDF with instructions step-by-step and features described

Battle stage HD:



It wasn't possible to replace T-rex with HD texture, now it's as easy as putting the files as in Remaster current HD textures are:



Fields are now in HD- you just drag and drop textures that are AI-enchanced:





demaster is configurable, adjustable, you can replace one texture or you can replace them all. Doesn't matter. Bigger, smaller- whatever

This is not final! More upgrades coming soon! Please report anything to make this cooler for you also report any wishes you want.

Upcoming:
* ??

Remember to check for updates via demaster_manager

3
So, the demastered edition introduced brand new archive- a ZZZ archive (which is badly designed with their ulong pointers and 32 bit reg to read it from- great job!). So I made the game code to read the unpacked files directly, so you don't need to repack the zzz archive again.



I recorded tutorial also to cover up non-techs:

https://www.youtube.com/watch?v=KGlPIt5vvjk&feature=youtu.be

anyway, the steps are:

1. Use available zzz unpackers to dump all files from main.zzz and other.zzz to catalogue of your choice.
2. Go here: https://pastebin.com/RWA4aXYR and copy the script, you can (even must) change the folder name at line 105 [or use existing, just call your folder the same]
3. Open Cheat Engine (https://www.cheatengine.org/)
4. Attack to FFVIII.exe and auto assemble the script from pastebin
5. Voila!

4

What?
OpenVIII is made in MonoGame and aims to recreate 1:1 experience of FFVIII

Why?
I don't know

Show it!
https://youtu.be/Fo5Q0qOCsU4
PS> I forgot to show FMV support, but it's there (just without audio  :x )

open-source, you say?
yes, https://github.com/MaKiPL/OpenVIII

OpenVIII not only is going to play VIII as vanilla, but also would leave an open doors for modders. It's going to be extremely easy to import own OBJ, FBX models into the game, uses 4K textures and whatever you want. I'll make sure to create a mod tool so you would just import your model from 3D modelling tool and that's all.

5
so I've been struggling for a day about playing audio.dat sound effects internally/ converting them without using 3rd party tools like Audacity or ffmpeg- tried asking some VIPs here but they didn't answer so I had to came up with it myself:

So, FF7 and FF8 use audio.dat + audio.fmt. It's called an Microsoft audio chunk system and was used in XAudio2. You can find the documentation here:
https://docs.microsoft.com/en-us/windows/desktop/xaudio2/adpcm-overview

There are several methods to start. First one is to do what Qhimm originally used thanks to publishing source code of FF8Audio. Before we do anything let's first read the FMT content. Sample code is:

Code: [Select]
private struct SoundEntry
        {
            public int Size;
            public int Offset;
            public byte[] UNK; //12
            public byte[] WAVFORMATEX; //18
            public ushort SamplesPerBlock;
            public ushort ADPCM;
            public byte[] ADPCMCoefSets; //28
        }

        private struct WAVEFORMATEX
            {
            public ushort wFormatTag;
            public ushort nChannels;
            public uint nSamplesPerSec;
            public uint nAvgBytesPerSec;
            public ushort nBlockAlign;
            public ushort wBitsPerSample;
            public ushort cbSize;
        }

        private static SoundEntry[] soundEntries;
        public static int soundEntriesCount;

internal static void DEBUG_SoundAudio()
        {
            string path = Path.Combine(Memory.FF8DIR, "..\\Sound\\audio.fmt");
            using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
            using (BinaryReader br = new BinaryReader(fs))
            {
                soundEntries = new SoundEntry[br.ReadUInt32()];
                fs.Seek(36, SeekOrigin.Current);
                for (int i = 0; i < soundEntries.Length-1; i++)
                {
                    int sz = br.ReadInt32();
                    if(sz == 0) {
                        fs.Seek(34, SeekOrigin.Current); continue; }

                    soundEntries[i] = new SoundEntry()
                    {
                        Size = sz,
                        Offset = br.ReadInt32(),
                        UNK = br.ReadBytes(12),
                        WAVFORMATEX = br.ReadBytes(18),
                        SamplesPerBlock = br.ReadUInt16(),
                        ADPCM = br.ReadUInt16(),
                        ADPCMCoefSets = br.ReadBytes(28)
                    };
                }
            }
            soundEntriesCount = soundEntries.Length;
        }


After grabbing the content of FMT into the array of struct we can work it here on many different ways:


1. Qhimm WAVE header building method: (if you want only to repair the header for 3rd party player)

ADPCM 4 bit is normally headerless and everything is saved into FMT, however that's still not enough for normal player to be able to play it. We need to build the WAVE/RIFF header:
Code: [Select]
                fs.Seek(soundEntries[soundID].Offset, SeekOrigin.Begin); //seek to raw buffer location in audio.dat thanks to audio.fmt pointer
                List<byte[]> sfxBufferList = new List<byte[]>(); //this will be used as an dynamic array, I'm just too lazy
                sfxBufferList.Add(Encoding.ASCII.GetBytes("RIFF")); //let's start with magic RIFF
                sfxBufferList.Add(BitConverter.GetBytes
                    (soundEntries[soundID].Size + 36)); //now the size read from FMT + 36
                sfxBufferList.Add(Encoding.ASCII.GetBytes("WAVEfmt ")); //now the WAVEfmt (there's a space, so it takes eight bytes)
                sfxBufferList.Add(BitConverter.GetBytes
                    (18 + 0)); //eighteen
                sfxBufferList.Add(soundEntries[soundID].WAVFORMATEX); //now encode full WAVEFORMATEX struct packed
                sfxBufferList.Add(Encoding.ASCII.GetBytes("data")); //now add 'data' in ascii
                sfxBufferList.Add(BitConverter.GetBytes(soundEntries[soundID].Size)); //now put the size again from FMT
                byte[] rawBuffer = br.ReadBytes(soundEntries[soundID].Size); //obviously read audio.dat
                sfxBufferList.Add(rawBuffer); //and add it on the bottom
                byte[] sfxBuffer = sfxBufferList.SelectMany(x => x).ToArray(); //now cast every byte in byte list to array

sfxBuffer now contains correct ADPCM WAVE file you can save and play in your favourite software.

2. My ADPCM->PCM + play method using NAudio: (for actually converting the file + playing in new thread)
I tested many different libraries, I mean it- Bass, CSCore, libZplay and some I even forgot about. None works with ADPCM, however NAudio does it. Grab NAudio release from github page (google it). This time it's super easy-
Code: [Select]
using NAudio;
using NAudio.Wave;

internal static void PlaySound(int soundID)
        {
            if (soundEntries == null)
                return;
            if (soundEntries[soundID].Size == 0) return;
            using (FileStream fs = new FileStream(Path.Combine(Memory.FF8DIR, "..\\Sound\\audio.dat"), FileMode.Open, FileAccess.Read))
            using (BinaryReader br = new BinaryReader(fs))
            {
                fs.Seek(soundEntries[soundID].Offset, SeekOrigin.Begin);
                GCHandle gc = GCHandle.Alloc(soundEntries[soundID].WAVFORMATEX, GCHandleType.Pinned); //it's not recommended way in C#, but I'm again- lazy
                WAVEFORMATEX format =  (WAVEFORMATEX)Marshal.PtrToStructure(gc.AddrOfPinnedObject(), typeof(WAVEFORMATEX));
                gc.Free();
                byte[] rawBuffer = br.ReadBytes(soundEntries[soundID].Size);

                //passing WAVEFORMATEX struct params makes playing all sounds possible
                RawSourceWaveStream raw = new RawSourceWaveStream(new MemoryStream(rawBuffer), new AdpcmWaveFormat((int)format.nSamplesPerSec, format.nChannels ));
                var a = WaveFormatConversionStream.CreatePcmStream(raw);
                WaveOut waveout = new WaveOut(); //you have to use new instance for EVERY sound played
                waveout.Init(a); //as said in documentation- init is supposed to be called once.
                waveout.Play();
            }
        }

3. Forcing playing with PCM codec
Totally not recommended- you'll get harsh and all the noise. However it requires no codec or libraries. I'll be using default sound effect player of MonoGame framework.
First get the default raw buffer without header as-is in audio.dat. See the code above to get byte[] rawBuffer. Now:
Code: [Select]
SoundEffect se = new SoundEffect(sfxBuffer, 22050, AudioChannels.Mono);
se.Play(1.0f, 0.0f, 0.0f);
22050Hz + mono are the only parameters that makes playing ADPCM forced sound as natural as possible

6
This is true act of bored person:
OpenVIII - the FF8 engine set:
https://www.dropbox.com/s/069wd7lcvopjf0h/FF8.7z?dl=0

Just two implementations of FF8 engine that works ONLY on real VIII files meaning you wouldn't even run it without Steam release of VIII or slight code change.

In the package you will find:
OpenVIII - This is Unity project, that provides:
  • real-time battle 3D rendering with textures
  • basic field rendering with camera setup
  • all LZSS, field archive and whole core

FF8 - This is Monogame project, that provides:
  • real-time battle 3D rendering with textures that renders face one-by-one considering the CLUT (closest to original fan-made battle stage rendering ever made)
  • basic field rendering
  • real DirectMidi support for direct DLS and SGT music
  • Movie player (unfortunately not Bink wrapping, but casual MPEG4 without sound)
  • all LZSS, field archive and whole core

Use it to learn, use it for your own projects, use it to listen to music or view 1:1 stages with FPS camera, whatever. I simply don't care.

Tutorial:
Before you proceed with anything make sure you have Final Fantasy VIII steam version installed (or 2000 PC version if you can do basic coding)


FF8 - XNA/MonoGame:

1. You may need to install MonoGame for VisualStudio. You can do it without any problems at: http://www.monogame.net/downloads/ ; Just make sure to download DEVELOPMENT build for Visual Studio instead of official releases (they are quite outdated)
2. After grabbing MonoGame you'll be able to open Visual Studio 2015 (minimum) project without any problems. Just open FF8.sln with Visual Studio
3. Open Game1.cs- this is entry-point class. You can uncomment line 26 at init_debugger_Audio.DEBUG(); to enable DirectMusic
4. Open Memory.cs and take a look at lines 37 and 38. You'll understand the drill. Set the path there to your lang-en catalogue of FF8 or change it to e.g. lang-fr, doesn't matter, files should be there. Make sure path ends with '\' (lazy programmer I am)
5. DONE! You'll enter automatically into field mode. Use F keys to change modes:
F2 - change module to battle and set to next stage
F3 - Next music
F4 - change module to field and set to next field
F5 - same as above but gets back to previous field ID
Battle stage:
Movement mouse; WSAD translation
Quitting:
ALT+F4 ;_;

7
Hello everyone! I'm trying to implement my own MIM+MAP algorithm, yet the wiki page is quiet chaotic. Myst6re's Deling source code helped a bit, yet I face some issues:

-When does exactly the stage is type 1 or type 2? Are there really two types? In Wiki and Deling source code we see that types are distinguishable by .MIM filesize, yet I wasn't really able to find 401408 bytes .MIM
Anyway, I treat every single field like a type2. However, there's something odd:
I took two different stages and tried to render it:


Please ignore black spots, I didn't implement blending.
Both the stages have EQUAL .MIM filesize; How do I know when to use palettes 0-8, or when 8-16?
What am I missing?

8
Hoarding again through the FF executables I found the .dotemu references. Quickly found out it's a game porting studio. Here's the interview:
https://squarebd1.wordpress.com/2016/01/27/my-interview-with-dotemu-the-studio-behind-many-recent-final-fantasy-ports/

From my personal experience working in commercial gamedev industry, porting game is usually hacking it on your own to make it working with current gen (in case of retro games there's almost never a source code, just an ISO). However, dotemu actually said the dev department of SE did in fact provide support for their game, which happens quite rare. We can't talk about source code for sure, but I think they actually remembered how things go and for example how to use AF3DN.P for memory injection and passed that info to dotemu.

9
Scripting and Reverse Engineering / .SGT audio
« on: 2018-06-24 11:59:50 »
I'm currently on hunt to implement .SGT playing. I got many needed information like how is RIFF container with DMSG built, like here: http://www.vgmpf.com/Wiki/index.php?title=SGT
It's part of DirectMusic that was a part of Dx8, yet I've seen the FMOD works with .SGT and .DLS media. I grabbed FMOD, made the wrappers working and tested with .MP3 and .MID files work flawless yet on .SGT it throws ERR_FORMAT like it doesn't know how to play .SGT (yet it loads .DLS bank properly). I browsed the web and found the FMUSIC of FMOD is capable of playing .SGT, but it's like 14 years ago and no such thing as FMUSIC exists anymore. Therefore- is any of you aware of any library that supports playing .SGT? Or converting to .MID or almost anything else I can use on good license and is capable of storing the data in memory only? I'm trying to implement an audio playing working on real files instead of re-converting them (or at least not leaving any trash behind). I'm working with Dx11, so I can't just grab the old DirectMusic from dx8

Working C# example in my last post!

Basically C# wrapper of C++ wrapper of Dx8 DirectMusic

10
Scripting and Reverse Engineering / [PC] Final Fantasy XV
« on: 2018-02-09 15:32:35 »
The benchmark is available on:
http://benchmark.finalfantasyxv.com/na/

Game engine that parses FFXV files. Uses EARC for archives, tool is available here.
PDB available on torrent site, due to PDB availibility let's all work on r1138403 debug build

Make sure for your comfort to rebase software to 140000000 (default 64 bit entry point) and disable ASLR (0x1EE & 0xBF)

EARC is known

XMB2 (.exml):
Code: [Select]
char[4] IDENTIFIER = "XMB2"
uint FileSize [yes, 4 byte, not qword]
ushort flags
ushort version
uint RootElementOffset <- this points to element root

11
Hello,
I'm slowly approaching breaking into MIPS assembly. On my example I'm trying to break PSOne FFVIII battle stage loader code that is hardcoded in files. Therefore after analysis with IDA I'm having a pretty good understanding of the code, however there are some portions I just can't happen to break which are: stack and arguments. Surely I see:

Code: [Select]
addiu   $sp, -0x18makes stack size of six, where
Code: [Select]
sw      $ra, 0x14($sp) is the return address, therefore five values on stack to reverse. There are some instructions that define loading stages based on arguments which I don't know what are.


Therefore my question is- Do you know of the best way to disassembly on-live PSOne MIPS code played on debugger? Mostly I want to break on as soon as the processor gets to the code to test the stack and etc. I used NO$PSX before, but it's not intuitive enough for locating code I need. What are your ways to hack PSOne games on MIPS level?



UPDATE:
Got it working with IDA. Used IDApsx with IDA 6.8 and PCSXR. Need to tweak plugins, but it's all working like a charm. Took me three hours to setup by the way. :-o

12
General Discussion / 8BPP TIM converter
« on: 2017-02-24 17:44:23 »
Does anyone know TIM editing software that is capable of taking care of CLUT palettes for me by converting bitmaps to TIM?
TIM Viewer can support only 16->24 and 24->16 conversion but I'm aiming to 8BPP

13
mobiusff_Data/mobius_data/Hash/...
Compressed Unity3D standalone files with MD5 hash names
Opeanable/decompressable with UnityEx 1.4.3
After decompressing, real package name is at: 0x40. Example name: CAB-b90836_android (terminated with /0)

About fileformats:
MUSIC:
example: music_saranotheme.txt is in AKB2 container. In order to make it working OGG delete 320 bytes from start, so the file starts with OggS header. Voila

Textures:
DXT

AES crypt
e.g. assetList_hash_win.dat is AES crypted
AES128
IV :
Code: [Select]
$MEVIUS-PROJECT#Key:
Code: [Select]
SQUARE-ENIX-BD1%CipherMode: CBC
PaddingMode: ISO10126


assetList_hash_win.dat
OffsetSizeDescription
0x0016 bytesAES IV - Treat as UTF8 bytes
0x16variesCompressed data

Deciphered:
OffsetSizeDescription
0x004 bytesProbably entries count
0x04EntryCount*48Entry

ENTRY:
OffsetSizeDescription
0x0040 bytesANSI file relative path
0x28unsigned intFile revision (uint)
0x2CintFile size


Example MD5 file names:

Text/CutScene/ev_0000_010/ev_0000_010TxtRes__jp

Full JP filelist:
http://cache.jp.mobiusfinalfantasy.com/asset/20170127_0007/mobius_data_middle/win/assetList_hash_win_JP.bin (unknown format, probably AES with default IV and key, too lazy to test UPDATE:Nope, doesn't work)
http://cache.jp.mobiusfinalfantasy.com/asset/20170217_1633/mobius_data_middle/win/managementList_hash_win_JP.txt
http://cache.jp.mobiusfinalfantasy.com/asset/20170217_1633/mobius_data_middle/win/datasheetList_hash_win_JP.txt

14


Rinoa's Toolset is a Final Fantasy VIII modding, ripping and analyzing software. Program has a built-in 3D renderer, support for many file formats, manual ripper and additional minor analyzing tools. Rinoa's toolset is currently the only program that can view full 3D textured geometry model for Battle Stages, World Map Vehicles, geometry for World map segments, geometry for G.Fs stages and items used in animation, also comes with train track visualizer. I'm happy to introduce you program in which I put all my skills and experience, that first github commit was dated in August 2015. I really wish this software would be handy and comfortable. Finally, I would like to thanks everyone that supported me, especially Halfer and Kaspar01. Have fun!


Full list of features
Features - 3D

    Battle Stages + original texture mixing to get texture 1:1 as in-game
    World Map vehicles
    World Map segments
    World Map train track visualizer
    World Map train track editor
    Guardian Forces environment objects
    MCH support (chara.one files) *only static T-pose!

Features - Other

    English dialogs decoding from raw files
    Searcher for development paths inside FF8
    Namedic.bin editor
    LZSS decompressor
    Archive extractor
    Wm2field editor
    Movie unpacker
    TIM support
    TEX support
    World map interactive region editor
    World map encounters editor
    World map draw points editor
    Magic+GFs texture support

Battle Stage support features

    View in real-time 3D any Battle Stage
    Hide and inspect segments
    View UV layout on texture!
    Directly modify vertices with real-time preview
    Convert segments to single OBJ file!
    Get final rendered texture as in game [mixing textures with original algorithm]
    Convert OBJ model to FFVIII ! [Alpha]


@Built-in renderer is powered with custom modified SharpGL

Download


github page: https://github.com/MaKiPL/FF8-Rinoa-s-Toolset
Binary release: https://github.com/MaKiPL/FF8-Rinoa-s-Toolset/releases/latest

Requires .NET Framework 4.0



At the end,
I wish to ask you for any donation. This will motivate me for further and more excessive work on FFVIII research and tools creation. I won't stop anyway.



Thank you kindly, feel free to contact me, ask me anything. Report bugs either here or on github and... Have a nice day!  :wink:

15
So... Anyone waiting?


Code: [Select]
        OS: Windows Vista or later
        CPU: 2.4GHz quad-core CPU
        Memory: 2 GB RAM
        GPU: NVIDIA Geforce GTX 450 / AMD Radeon HD 5750 with 512MB
        HDD: 40 GB

What do you think? Is it again Unity port and we will be able to snatch whole source code?
Is it UnrealEngine based? Is it rewritten to PC?
Any FFX fans out there? Personally I have retail version for PS3 and I really like the HD remaster. :3 Recently made 100% trophies.
Is someone here who is going to mod the PC release?

EDIT: FFIX unity port was prepared by Silicon Studio with probably Square Enix source support. It's hard to find any info, but is is possible the same studio prepared FFX-X2-HD-PC2016?

17
Scripting and Reverse Engineering / [FF9]2016 release
« on: 2016-04-15 17:56:50 »
So... They used Unity3D (LOL, sic!).

FFIX\StreamingAssets\ma\:
FMVXYZ.bytes files are pure OGG
mbgXYZ.bytes files are also pure OGG

FFIX\StreamingAssets\:
P0dataXYZ.bin are "Unity Web Player Scene (non compressed)":
Open with UnityEx 1.5

FFIX\x64\FF9_Data\
sharedassets files, open with UnityEx 1.5

Source notes:
By the way> This can help in reversing FF8 (and FF7 if there's something missing). The engine is similar, so...
So far the most interesting source files are (for related FF):
PSX_LIBGPU.cs (Contains many polygon infos, vertex etc.) [Names like TPage and etc.]
PSX_LIBGTE_EMU.cs - I've seen this huge array in FF8 pseudocode...
PSX.cs - Many definitions about colour, TIM width etc.
PsxCamera.cs - Contains debug dumper for Camera info (reverse engineering?) and ready camera class (Matrix translation etc.)
PSXTexture.cs - Generating texture from TIM? (Yeah, setting new bitmap, copying pixels according to data. Looks like TIM to Bitmap generator)

18
Completely Unrelated / April's Fools day
« on: 2016-04-01 10:10:50 »
So, what was your the best troll today?
I haven't done anything yet. :(

19
Completely Unrelated / Happy new 2016 year
« on: 2015-12-31 23:27:17 »
Dear friends,
I wish you luck, happiness, big income and all you wish secretely.
It's 2016 now (GMT+1), so Happy new Year!
To every reverser here, let 2016 be the year you success and your software will be 100% ready!

Cheers!
 :-*

20

Description:
This does just what you can see on image above. Fixes bad PC version UV mapping.

Compatibility: Works with all FF8 versions (2000+Steam) multilanguage + any currently available mods
                                 If you're having problems, please proceed with manual patching tutorial.
Requirements: .NET Framework 4 (for ready patcher) or DLPB's Tools 2.0 for manual patching

ASM hack source: http://pastebin.com/WnRA19mM

*Old patcher deleted due to the fact it corrupted the EXEs and overwrote backup. I'm so sorry for destroying your backups. Please, use manual patching for Steam or above for 2000 version.

STEAM 2013 Version:
MANUAL PATCHING TUTORIAL: (STEAM)
(Big thanks to Cities.Burn.Quick for writing this tutorial) :)
(Use this if above fails. This applies for English version only, however you can find FF8 2000 HEXT instructions at the bottom of this post)

 1. Backup the FF8_EN.exe file from your Final Fantasy VIII Steam directory (steamapps/common/FINAL FANTASY VIII/) just in case.

2. Download DLPB's Tools 2.0.

3. Unzip the file anywhere on your PC.

4. Open the "HextEdit" folder and move your FF8_EN.exe file from your Steam directory to the HexEdit root folder. The root folder contains another folder named HE_in, the HexEdit.exe, a Readme.rtf, and a test.file (which you should delete).

5. Open the HE_in folder and delete the example Hext instructions.

6. Create a new Notepad text document in the HE_in folder, name it "FF8_EN" or "FF8" and paste:

Code: [Select]
FF8_EN.exe
153CC0 = 00
153CCA = 00
153CD8 = 00
153CE2 = 00
153CF2 = 00
153CFC = 00
153D0C = 00
153D16 = 00
153D26 = 00
153D30 = 00
153D38 = 00
153D42 = 00


7. Save your FF8_EN.txt.

8. Go back to the HextEdit root and run the HextEdit.exe application, press enter when prompted.

9. Once HextEdit finishes it will create a HextEdit.txt. Open this file and insure it reads...
Code: [Select]
---------------------------
FF8_EN.txt (FF8_EN.exe)

Changed: 12
Replaced: 0

No errors.

___________________________


10. If newly created HextEdit.txt has the same output, it was patched successfully.

11. Move your FF8_EN.exe from the HextEdit root back to your Steam directory. Overwrite if need be.

12. Run game and enjoy your newly patched FF8 world map!


PC 2000 release version:
Download and run with launcher:
Downloadhttps://www.dropbox.com/s/zaq4gqquaop00kn/FF8_UVPatchLauncher.7z?dl=0

-=Alternative files (HEXT instructions for DLPB's tools)=-
FF8 2000 English: https://www.dropbox.com/s/zaq4gqquaop00kn/FF8_UVPatchLauncher.7z?dl=0
FF8 Steam English: http://pastebin.com/W72H6yep

Remastered:
UV patch is now built-in in demaster patch! No need to work with the code manually. Find more details here: http://forums.qhimm.com/index.php?topic=19432.0
If you are experienced user you can try manually patching the DLL:
Dotemu by compiling their new DLL they got the ASLR working by default- that renders above method with DLPB not working- the address in memory is changing every time you open the application. You can either disable ASLR with my script: https://github.com/MaKiPL/ASLR_disabler and then patch as in Steam 2013 with IMAGE_BASE of the dll or patch the DLL directly:
Code: [Select]
FFVIII_EFIGS.dll+8A2CB2 - add byte ptr [esi+08],00
FFVIII_EFIGS.dll+8A2CB8 - add byte ptr [esi+08],00
FFVIII_EFIGS.dll+8A2D17 - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2D1D - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2D6D - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2D73 - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2DC5 - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2DCB - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2E1B - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2E21 - add byte ptr [esi+0C],00
FFVIII_EFIGS.dll+8A2E6F - add byte ptr [esi+04],00
FFVIII_EFIGS.dll+8A2E75 - add byte ptr [esi+04],00
above are dynamic addresses to memory- so if you have a patcher that is capable of understanding above instructions (example is Cheat Engine) then you can jump right into the memory view and assemble as above. However if you want to update the EXE manually, then here are the codes (basically FFVIII_EFIGS.dll in above example is ~0x10000000):
Example in EXE at address 0x8A20B5 there should be 02, change that to 00
Code: [Select]
0x8A20B5 - 00
0x8A20BB - 00
0x8A211A - 00
0x8A2120 - 00
0x8A2170 - 00
0x8A2176 - 00
0x8A21C8 - 00
0x8A21CE - 00
0x8A221E - 00
0x8A2224 - 00
0x8A2272 - 00
0x8A2278 - 00

Nintendo Switch
Unfortunately you have to own jailbreaked(?) switch. You have to get the file GuardianEFIGS.nro and edit with your favourite HEX editor those addresses:
Example:: 0xE04E38 which is now E2 1B 1F 32 should be 1F 20 03 D5
Below are all the addresses which you should update:
Code: [Select]
0xE04E38 = 1F2003D5
0xE04E58 = 1F2003D5

0xE04E98 = 1F2003D5
0xE04EB8 = 1F2003D5

0xE04EFC = 1F2003D5
0xE04F1C = 1F2003D5

0xE04F5C = 1F2003D5
0xE04F7C = 1F2003D5

0xE04FC0 = 1F2003D5
0xE04FE0 = 1F2003D5

0xE05008 = 1F2003D5
0xE05028 = 1F2003D5

21
[obsolete, of course!] :3

This is the only leftovers undocumented that are in battle.fs, after that we would 100% finish battle.fs

=MAG files=
So... Let's say something about MAG files. Those are chaotically managed files, can contain various extension and has no normal formula... I found TIM texture in file like mag115_h.13 and also in mag161_a.dat (See? Extension is not important here). Just recently when I began to looking at files I found QUAD model in one file:
mag094_b.1s0 (Uses the same QUAD format as Battle stages- identical)

also 16B pattern in:
mag094_b.2e0 (starting at 0x298c). There's probably 4B padding before that.
There is 2 149 such triangle-like things. (0xbbe4 a next the same pattern starts)

mag094 is Siren G.F. attack.

I know Kaspar was looking at G.Fs.



=r0win.dat=
This file is responsible for whole winning sequence. I found AKAO frames in it, probably camera movement and whole logic. Game runs into infinite loop when you delete file and win battle. Hud disappears, you can't do anything. Nothing happens. Battle music plays. Nothing.

=b0wave.dat=
I don't know completely what this file is.
When deleted and enters battle, the enemy nor player is loaded and even no battle logic. The stage just plays anim and nothing happens. So, this may be the route:
1.Engine loads stage+music
2.Stage plays opening camera animation
3.b0wave.dat is loading battle core data
4.When you win, r0win.dat handles what comes next

=a9btlfnt.bft=
As above. Nothing happens when deleted.

Feel free to write any notes you have.

@update to MAG:
I deleted mag094_b.2e0 and the game gets into infinite loop after the sea sinks the enemy. The sea is flowing thru enemy, camera is fixed, nothing happens. This means, that the MAG files are sequenced. One part of file is loaded after it passes another part of sequence is loaded. This way programmers probably saved some memory.

22
Disclaimer!
See newest BS software: http://forums.qhimm.com/index.php?topic=17064.0

Born from here: http://forums.qhimm.com/index.php?topic=15906.0

FFVIII Battle stage .X to OBJ converter is intended to analyze, dump and convert data from FF8 .X battle stage files to OBJ with texture coordinates.

Current version: 1.1 (1.1)
Last updated: 25.03.2015


Features
  • GUI
  • Automatically searches for models in two modes: strict and extended (description below)
  • Shows model offset, vertices, triangles and quad count, shows offset for each one
  • Resolves TIM texture size + TPage'ing.
  • Converts model data to OBJ
  • Automatically creates MTL and OBJ needed info
  • And something more I forgot about. :*

List of changes in 1.1
  • Added Magic RIP Button (The most awaited :D)
  • Redone debug info. Shows now full path
  • Redesigned. Deleted unused progress bar and stuff
  • Software now checks if obj is already ripped, if so, overwrites it. No more endless stream.


List of changes in 1.0
  • Changed icon to the one made by LionHartGR. Thanks!
  • Fixed triangle UV. Thanks to Kaspar01 for providing screenshots. Correct order was ABC> BCA
  • Extremely optimized file. Now it's ~300 KB
  • Built with .NET Framework 4.5 instead of 4.5.1

List of changes in 0.9e
  • Added auto texture resolve
  • Added auto MTL generator
  • Injected quad/triangle algorithm as a one operation
  • Made it less ugly (deleted unused options and stuff)

INSTRUCTION
1.Load file by File>Open
2.Click on one of preferred search modes
3.Select model offset from list on left (or click Magic RIP button - rips all valid meshes)
4.Click RIP
5.Generated MTL and OBJ is in your directory where .X file was. Software generates files named by this: (stageFilename)_(offsetOfModel)_(t or q).obj

Modes
Strict mode - Is most stable option to search for models, but it mostly misses many models (segments). This mode takes the models from generic model set as I wrote on wiki (and it's probably not true [what I wrote on wiki], as we can see now there're models before generic object header [will edit this later])
Extended mode - It searches from beginning. This CAN produce offset of models, that ARE NOT a models itself. There's where my model checker comes in action. Before RIP button is going to be available, my validator checks it for conditions:
Triangle count < 10000
Quad count < 10000
Vertices count < 10000
Vertices != 0
However, it's not 100% of possibilities, so there's still 1% of chance, that the wrong model will pass thru my validator. Ripping bad model passing my validator shouldn't crash the software itself, however the mesh would be complete mess.

Download:

https://www.dropbox.com/s/n7vao6448jtse5v/VIII_x_to_obj_11.zip?dl=0

You will need .NET Framework 4.5 to run this.



FAQ

23
While thinking about VIII remake I tried to search for "the making of" to see some 3DS Max or some other 3D modelling software screens of map backgrounds to see if it's more 2D painting job, or real 3D render. After few minutes on google I found out, that Square DIDN'T made background by themself, but they passed the work to so called KUSANAGI Corp. (クサナギ), there I found many of their "showcase" works having at least 5 screens for every game they we're working on. From sketches, to never seen backgrounds. The most intriguing is:
http://www.kusanagi.co.jp/art/artgalleryfre-m/ff8/ff8.htm
the last one.

Chech more by going to:
http://www.kusanagi.co.jp/art.html
clicking on TVゲーム

There you can see sketches and renders that I totally didn't see. You can catch there sketches that you for sure wouldn't find in any "concept art" album. If it's well known, then sorry, but I really didn't see that anywhere. Enjoy!

Pages: [1]