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.


Messages - Maki

Pages: [1] 2 3 ... 22
1
Great job! I have merged the commits. Everything looks great. I'll make sure to add you as an collaborator soon

2
I've committed everything locally. I think I need permission on Github to submit to you. It should probably go in it's own branch to prevent messing anything you are working on.

You can fork the repository and create a pull request:
https://github.com/MaKiPL/OpenVIII/pulls

3
I got some audio playing in linux but it's all distorted for some reason.

It's expected behaviour- I am not converting ADPCM to PCM stream due to NAudio compatibility issues with Linux- instead I'm forcing to play compressed sound.
I'll be moving to FFMpeg soon- that will solve this problem

I am loading the entire ogg into a byte array to add to a sound effect.

Vorbis OGG is also a compression format, just like adpcm. They both need conversion to basic stream, which FFMpeg will be capable of this.

4
Troubleshooting / Re: FF 8 CRASHING WHILE ENTER IN A CITY
« on: 2019-03-12 19:02:05 »
Your post lacks so many details. What version you have? 2000 or Steam? What town you are trying to enter? Do you have a modded/downloaded save? Does it happen to specific town? Does the worldmap and Balamb works fine?

5
Unsure if Maki would like me to commit my code to github.

sure I do- feel free to commit any code you think is needed. This is in-dev prototype, so everything goes in. The code would be rewritten to support config like in original FF8, so don't worry about controls and/or gamepad support
I installed Roses and Wine W07 full with installer and it renamed dmusic to dmusic_backup so I guess just need to add a if statement to check both folders?
Yep, exactly.


EDIT: Ok uninstalling the music mod fixes all the issues
Phew!

6
Ok I've run the debugger theres 29 warnings but first thing that pops up is

Exception Unhandled: System.IO.DirectoryNotFoundException: 'Could not find a part of the path 'C:\media\griever\Data\SteamLibrary\steamapps\common\FINAL FANTASY VIII\Data\Music\dmusic'.'

I do have the music mod installed could that be the issue?

which system are you working one? Please make sure to pull the newest configuration, you'll be able to switch between Debug and DebugLinux, because you are using a Linux configuration for path. It should point to your FF8 installation folder. Make sure you typed correct path into Memory.cs at line ~65. I don't quite remember. It's in-dev build, so there's no easy config here, sorry!

7
So I downloaded everything changed the line in memory file and saved it, pressed 'build ff8', says it succeeded but when I click the exe nothing happens.

Is the memory line correct am I missing something?

public const string FF8DIR = @"D:\Program Files (x86)\Steam\steamapps\common\FINAL FANTASY VIII\Data\lang-en\"; //Work

This is weird, never heard of this issue. Normally you should see either some exception or program crash. Try to run debugging and see if there's something there, something that may help me locate the issue.

8
I have refactored the code and posted full guide for both Windows and Linux development. On Linux it's not possible to hear any music due to DirectX 6 DirectMusic component not natively supported by Linux.

https://github.com/MaKiPL/OpenVIII/blob/master/README.md#getting-started-windows
https://github.com/MaKiPL/OpenVIII/blob/master/README.md#getting-started-linuxmono-tested-on-ubuntu

9
(think I need some other stuff for video/audio).

all needed dll's are in root catalogue: AForge.Video.FFMPEG.dll; AForge.Video.dll; DirectMidiNet.dll and NAudio.dll

You should probably contact Square Enix and see how much money they're willing to give you for it.  Awesome job!

SE hates VIII for some reason

Anyway, I'm really afraid of animations- I haven't done any single type of skeletal animation directly from code other than vertex morphing. I have no single idea how I'm supposed to work with bones/skin and animation frames

10
so I wanted to show it on my birthday, but I've been struggling with both physical and mental issues, so two days later I'm finally ready to show it what I've been keeping in some sort of secret for months: an OpenVIII

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.

11
Scripting and Reverse Engineering / Re: FF8 Field Models
« on: 2019-02-17 15:10:20 »
sorry for digging up ten years old thread, but I was working with the MCH files on chara.one from world map. This is what I get:

like some geometry might be missing as you wrote but looks like there were no answer so far to this. Also what's the deal with the second vertices array? this:

Code: [Select]
  u16 verticies1[4]; //Edge data???

Is it normal? I'm also retriangulating quads with ABCD> ABD ACD (as in battle stages)
My guess is it's because of the animation and geometry is not in t-pose, what's your opinion?

12
New updates!

I wrote a python script to dump the pointers to cameras:
https://gist.github.com/MaKiPL/e0f2e36b5edb560ff047e12a33aba9be

Use it like shown here:


It requires python 2.7
also I updated the wiki page and uploaded the video:
https://www.youtube.com/watch?v=R9Y9PEhlMhs&t=2s

13
Misc. Tools / Re: [FFXV PC] Cindy, Text Editor
« on: 2019-01-02 19:51:59 »
Great job, as always!

14
Thanks but it seems some runtime library is needed? Because i got this


I have no single idea why this happens. I attached all needed libraries.
Does anyone know how to solve this? I'm Qt first timer...
Anyway, I uploaded the fields for you:
https://www.dropbox.com/s/y3l4tyu5byojfr5/backExport.7z?dl=0

15
Here it is:
https://www.dropbox.com/s/cpuqot7hno0jise/deling-modded.7z?dl=0

It's modified Deling by Myst6re. That Qt is weird, it's like C++, but not c++ O_o
Anyway, open field.fs and then click here:

it will ask you for a folder and then it will start exporting images (software may not response, but it's working):

16
to clarify everything- XMB2 format is binary-XML file that is in final PC release, right?

17
If you're still interested in batch background extraction, then I'm installing Qt now and will fire unofficial build of Deling with mass export

18
Damn, that's really great. There's no way to export all in one click, yet I'll try to do my best to do it asap.
New processed images:




19
Misc. Tools / Re: [FFXV PC] Hammerhead, EARC archiver
« on: 2018-12-03 08:26:30 »
Hi Colly. Sorry for replying after such a looong time. Do you know if Hammerhead 1.4 works with Ep. Duscae and Platinum Demo? I am currently modding those two demo. Are you in the FFXV hacking discord ?
You may want to take a look here:
https://github.com/Xeeynamo/ffxv

20
That upscale is extremely precise! I love it

21
Completely unrelated / Re: Final Fantasy VIII Mobius event
« on: 2018-12-01 12:39:56 »
DO YOU SEE IT?

it's fully 3D

22
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

23
>gaining funds for creating fan projects based on someone's IP
>knowing that SE always kills fan projects
>kickstarter having only description of what it's going to be
>title and Unreal Engine is what's all about the game
>no serious art, screenshots, promotion
>made by one person
>community manager as someone in charge of SE
>goal of thousands of dollars for project that can get cancelled so fast

EDIT: It indeed sounds brutal, but keep on progressing! We are all on the same boat which is FF addiction. I still wish you best, yet be prepared for what I tried to tell you

24
I'm being able to see the codes inside the places, how can I see the encounters in worldmap?

http://forums.qhimm.com/index.php?topic=17064.0
Open wmset>  edit encounters

25
Screens in Polish, name in English. 😱
Glad y'all sorted it out

Pages: [1] 2 3 ... 22