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

Pages: [1]
1
So, I was rather inspired by DLPB's soundtrack mods for FF7, and FF8, by this old thread nobody really replied to, by FinalFanTim's remixes, by OCRemix Balanche & Ruin, and by documentation of the MSU-1, to attempt a mod to replace the audio of FF6 with higher fidelity/remixed versions.
So without further ado...
PLEASE NOTE THIS FIRST POST NEEDS UPDATING
What is this?

Dancing Mad is an Open Beta mod to enhance the audio of the SNES game Final Fantasy 6 (3 in the US). Put simply, it replaces the SPC (SNES sound chip) based audio of FF6/FF3 with the official OST, or optionally, a number of other sources of remixed/remastered FF6 music.

Why?

Two reasons, really. For one, I have been feeling lately like I want to give myself challenging projects that involve areas outside of my comfort zone. I've not done much ROM hacking (at least, without tools) before, and my experience with ASM is mostly 6502 and a smattering of x86. So this is new territory, and that's exciting and promising. It's my belief that you should always endeavor to learn new things.

The second is that there are a fairly large number of really good remixes, arrangements, etc of the Final Fantasy VI soundtrack that fit well with the game but sound better than the original SPCs, and I wanted to see these as part of the game itself and give the game a little modern color and flavor.

off course, in terms of the OSV, the difference is admittedly somewhat minor. As far as I can tell, the OSV tracks were essentially rendered *from* the SPCs in a way. The difference in quality is there, mostly coming from slightly cleaner samples, better resampling and a samplerate of 44100Hz instead of 32000Hz, but it's quite hard to notice.

Where can I download it?

THE OPEN BETA IS NOW AVAILABLE HERE
Development occurs on my GitHub, which is here

What Songs?

This mod will contain audio from at least these 6 sources, converted to MSU-1 PCM format.

1. FLACs of the official FF6 OST.
2. MP3s of FinalFanTim's "Unreleased Tracks" FFVI Remaster project.
3. FLACs of the OCRemix Balance & Ruin remix album.
4. FLACs of Sean Schafianski's Final Fantasy VI Remastered project. (Buy it! It's on iTunes and Loudr and it is glorious)
5. MP3s of Final Fantasy Acoustic Rendition
6. MP3s of ChrystalChameleon's FF6 remasters.

You will be able to choose which specific audio files you want to install, or you can choose one of 8 predefined selections:

1. The FF6 OST itself
2. The FinalFanTim MP3s plus the OST
3. The OCRemix Album, plus the OST for Grand Finale?, What?, and Celes.
4. Alternate loops of the OCRemix album provided by qwertymodo
5. The Sean Schafianski Remaster plus the OST
6. The Final Fantasy Acoustic Rendition plus the OST
7. ChrystalChameleon's FF6 remixes plus the OST
8. My own selection of a mix of the four, based on what I feel best captures Nobuo Uematsu's original intent. Entirely subjective here, don't like my selections, don't use them.

In addition, other tracks are included for you to select from that don't fit any of the above. This includes Opera music by the Tokyo Symphony Orchestra (currently disabled due to coding difficulties :( ) as well as music contributed by fans and other contributors to the project.
I may also include some misceallaneous tracks if I find good ones, such as OCRemix tracks that aren't bart of Balance & Ruin, or orchestral/piano tracks, etc.

What will I need?

You'll need a copy of FF3us to start with, I plan on supporting FF6j later. Patched versions should work, unless they touch the audio code or move things around addresswise. (No translations that extend script size!)

As far as playing this, you will need either bsnes/higan (I plan on targetting bsnes v075 as a baseline as people seem to have had the most success with this version as far as MSU-1), or the actual SNES hardware and an SD2SNES flash cart. (I do not by any means have the money to purchase one of these for myself, so I'm going to need people's help testing this.)

How?

This project will use the MSU-1 "addon" developed by Byuu. This addon is much like the SuperFX, S-DD1, or SA-1 chips in released SNES games, except that, other than in the case of the SD2SNES, there is no physical hardware implementation. This addon allows me to stream data, in this case audio, at 2.68Mbit/s from a data file seperate to the ROM itself. This add-on is essentially intended to be everything the SNES CD was supposed to be, and more. Other people have added remastered BGM to other games before (See A Link To The Past for one of the few publically released versions... I have no idea why people are so guarded with their MSU-1 hacks.), and a few have even added FMVs to SNES games. (I may eventually try to port the PSX FMVs, but that would be a seperate, compatible mod.)

I will point out that I admittedly have little to no grasp of SNES ASM beyond basic SPC routines, the MSU-1 documentation, and my knowledge of how ASM works in general. So the patching part of this project is expected to be slow going, initially buggy, and potentially arduous. But, from what I've seen the MSU routines are relatively simple, and I don't plan on giving up, as I would personally love to see FF6 modded with better music.

This project has been completed before by someone by the handle of Drakon (see YouTube) but he refuses to release his IPS file, sources, documentation, or literally anything that would actually allow you to play his efforts, so in the spirit of the Open Source community, I'm going to redo it and release it to everyone.

This project is going to end up being one of two things on the user end. 1. A rather large download or 2. A rather long install, as either I'm going to have to pack in the uncompressed raw PCM files or a script to manually decode and convert them on the fly.

How Can I Help?

Testers, *especially* SD2SNES testers, of the Open Beta are wanted. Specifically, I'd like people to pay special attention to the Opera scenes and make sure those are functioning properly.
In addition, people with experience dealing with SNES assembly, NMI routines, and most helpfully, editing FF6's specific NMI routine without causing issues, are critically needed to help with the fading issue. See the github issue HERE. Please fork and make pull requests!

Current Status?

2015-04-25
We have liftoff! The project is working, we have officially succeeded in getting FF6 to play our songs! See the video section.

2015-09-28
We have a private alpha! Complete with a convenient installer (with dynamic track downloader), readme (with credits), and all the files necessary for playing the game besides the ROM itself (please supply your own unheadered FF3 US V1.0 ROM). See this post for details.

2016-06-03
We have an Open Beta! See links above.

2017-09-17
After a long hiatus, work is proceeding on fixing some issues with the installer, as well as fixing some project organization issues. Work has moved from BitBucket to GitHub.

2019-01-06
Dancing Mad is currently working and mostly feature-complete on Japanese, and US V1.0 and V1.1 ROMs. madsiur is still working on fading code.


This is taking too long! When is it going to be done?

When it's done. Any replies to this effect will be ignored, summarily. I encourage moderators and admins to discourage such talk in general. This is a project I definitely want to do, as an educational project for myself if nothing else, but I have other projects, other obligations in life in general, a fiancee, contract work, StreamStatus, game development, and other things I also work on. So progress may at times be slow, or may halt altogether. Be assured, I'm not going to give up on it.

Progress Videos!

Very Old Alpha
https://www.youtube.com/watch?v=4WHT98HBgpE

First working proof of concept
https://www.youtube.com/watch?v=vKgSqG2Tbfc

2
FF7 Tools / [PC] "StreamStatus" Streaming Companion.
« on: 2015-04-18 15:42:51 »
Hi everyone. I'm a long time lurker, recently rather suddenly active member of the community. With the help of the people on IRC, in particular and in no particular order, Aali, Covarr, and DLPB, I've created a piece of software that allows you to create an automatically updating overlay to be used when streaming Final Fantasy 7 on various game streaming websites. In the future, I plan to expand this software to other games.

I have been using this to augment and supplement my streamed playthrough of a heavily modded FF7, which is live at various times of the day (usually late afternoon or evening CST, though there have been times where I streamed in the morning as well) here.

The software, in its current FF7 only form is available with full source code here. Or if you want a direct download link without going to the project page, here

If you don't need the source code, feel free to remove the GUISrc folder.

There are a number of requirements in order to make use of this. I will list these below:

Requirements:

1. A PC copy of FF7. This has only been tested with the 1998 version (or, specifically, a 2012 copy converted to the 1998 version, though any 1998 version should work.)

2. A local Apache webserver with PHP. For this, I recommend XAMPP, available here. For your security, especially if you're unfamiliar with running a network server, I recommend setting the server to listen only on 127.0.0.1, making it accessible only to your local computer and not to the rest of the network or the internet. This is especially important if you're using a laptop and plan on travelling with it.

3. The latest .NET Framework. The GUI portion of this program was coded using the latest version of Visual Basic .NET, so an up to date framework is a must.

4. Streaming software capable of using a web page as a source. I use Open Broadcaster Software with the CLR Browser Plugin

5. Patience. This takes a bit to set up, and your mileage may, can, and will vary.


Here are a couple sample videos of the overlay in action:

Basic Demonstration Video! Watch the party list on the right as I change the layout of the party via PHS. Also note how closely the game timer follows the timer shown on the menu.

One of my latest streams. Unfortunately portions of the audio have been muted due to copyright claims... against the BGM. *facepalms.* I have appealed these claims.



Instructions:

1. Unpack the archive to a place on your webserver. If this is XAMPP installed using default settings, my suggested location is C:\xampp\htdocs\streamstatus (create the streamstatus folder yourself).

2. Place a font in the font folder and a background in the base folder. Covarr provided me with the background I'm using. I'm not willing however to just assume that this is available to be reused, so I'm not packing it in. The background should be a 320x720 PNG with alpha channel (transparency) named background.png. You can grab fonts from your Windows installation by going to your Fonts folder (C:\Windows\Fonts, or just enter Fonts in the run dialog) and copying them. The PHP file is currently coded to use Microsoft's Verdana font (verdana.ttf). I could not pack this in with the archive for copyright reasons, but it ships with any recent version of windows.

3. Third, set FF7 to use a resolution of 960x720. (This isn't strictly necessary, but as the overlay is currently keyed to a 320x720 image, it looks best

4. Start up your streaming software and set it to use the overlay. For Open Broadcaster Software, this means having a base resolution of 1280x720, adding Final Fantasy 7 as a source (I find Monitor Capture works best due to a bug I've documented in another thread regarding Game Capture), moving it to the left side of the screen, then adding CLR Browser Plugin at a size of 320x720, adding the URL for the overlay as the source (see below), and moving it to the right hand side of the screen.

For a default installation into C:\xampp\htdocs\streamstatus, the url you want is http://127.0.0.1/streamstatus/ or http://127.0.0.1/streamstatus/index.html

5. Start up Final Fantasy 7 and load a saved game. *THIS IS IMPORTANT*. The status updater software *will not work* unless FF7 is running and ingame. If it can't find a valid savemap in RAM, it will complain and quit with an error. If you're running FF7 and ingame and you still get an error on steps 6-8, please check to make sure you aren't running two copies of ff7.exe (Ctrl+Alt+Del, Start Task Manager, Processes, look for ff7.exe). I've had this happen when ff7 didn't exit cleanly and it nearly gave me a heart attack. If you still have issues with the following step having made absolutely sure you have only one copy of ff7 running and it is ingame, please post your issue in this thread.

6. Start up the Updater GUI. This is StatusUpdater.exe in the same folder (C:\xampp\htdocs\streamstatus). Do not move this file out of the folder it's in, as it generates data files the web backend needs.

7. Type the last event (ie, "Just boarded the train back to Sector 7") into the top text box, then type any mods one by one into the lower textbox, clicking Add after each one. If you are using no mods, I would suggest typing in "None" and adding it. The content of these fields is essentially entirely up to you. Once you've done this, click commit changes.

8. Click Start. At this point, if you get an error, it is likely FF7 is not running or not ingame. If it is working properly, you should see "Running" where it originally read "Stopped", and the information in the upper left should update to match your game.

9. Preview your stream to make sure the overlay is working.

10. Start streaming!

11. Prior to quitting FF7, hit "Stop" for a graceful exit. It will exit automatically if it no longer finds FF7 running, but this behavior is somewhat undefined and may result in a corrupted status.xml file.

12. Feel free to delete any remaining status.xml and img(numbers).png files after you finish streaming, as these are generated on the fly by the program and will be overwritten by future uses of the program.



TECHNICAL DETAILS: (feel free to skip this entire block if you want)
Quote
The frontend of this program is using Visual Basic 2013 (aka VB .NET 4.5.1).  The frontend, when Start is pressed, looks for a process called "ff7.exe" and attaches itself to this process, and begins reading the in-memory copy of the Savemap, located at the offset 0xDBFD38 and at a size of roughly 4342 bytes. It grabs the entire savemap and turns it into a series of properties of an "FF7SaveMap" class. For this purpose I've also grabbed a number of variables which, as of yet, remain unused. I used the documentation of the SaveMap in the Qhimm wiki to find the important offsets for this purpose. It grabs this copy of this window of RAM every second, updates its internal variables, and then outputs the relevant variables to a very simple XML file, which is used by the backend to generate the image.

The backend of this program is using JavaScript and PHP.

The PHP portion takes a set of XML data provided by the frontend, and uses the PHP "GD" image editing library to add text to an image (it can also be used to create an image from scratch: replace calls to 'imagecreatefrompng("base/background.png")' with 'imagecreatetruecolor(320,720)' and follow these calls with 'imagesavealpha($img, true)'). As of the current version it relies on text spacing to enable creating the image using a variety of fonts and font sizes with similar results. Font sizes are currently expressed in Pixels. If you wish to express them in Point values instead, replace all references to "pxtoPt(19)" with the font size in Point. If you wish to simply change to a different Pixel size, replace "pxtoPt(19)" with "pxtoPt(yournumberhere)". If you wish to change the font from verdana, find and replace "font/verdana.ttf" with "font/yourchosenfonthere".

The JavaScript portion of the program is simple (and really, mostly not my own code :P. Though the code used is public domain.). It enables seamless updating of the image by loading new copies of the image in the background and swapping to them once they're loaded. Due to this, and depending on how slow your hard drive is and how much RAM you're using, the game timer can be "slow" by as much as a second, though it should usually be far less.

I am aware that a lot of this code is currently messy, and needs to be cleaned up to make it more easily user configurable. This cleanup is the current focus of work on the project. After cleanup, I intend to eventually make the program "generic" in scope, able to use a given pair of "memory layout" and "graphical layout" files to generate an overlay image for any game that has "stable" places in memory for its important gameplay variables. This will be most games running in emulators, most older games, and some (but not all or, really, most) newer ones.

EDIT: If you guys think this belongs in Tools, feel free to move it there. I didn't know if it really counted though, about half-and-half a streaming tool and an FF7 tool, and planned to become less and less targetted at FF7.

3
I'm trying to stream myself playing modded Final Fantasy 7 using the Open Broadcaster Software streaming suite, and I'm having some... odd issues, that seem to be unique to FF7.

So, I'm not sure *where* this goes as far as boardwise, because I don't know if this is an issue with the original game, with the Aali driver, or what, but, well:


The game itself is on the left, the stream preview is on the right.

As you can see, quite a large part of the bottom of the image is cut off when OBS captures the game.

This happens no matter what mods I have enabled. It *only* happens in the field. Battle, menu, and minigame screens are not cut off like this.

I have never seen any other game do this, and it's rather impeding the streamed playthrough I want to do.

Any ideas?

4
Troubleshooting / FF8 Occasional Scrambled Textures
« on: 2013-03-12 13:39:56 »
When playing FF8 with Aali's driver, Roses and Wine, and SeeD gui installed, it runs fine except that occasionally some textures will be replaced by complete garbage. Usually this is fixable by walking out of a screen and back in, but it happens quite frequently and I'm wondering why.

Here is my app.log, though its not going to be much help I assume since I don't see anything wrong in it:
Code: [Select]
INFO: FF7/FF8 OpenGL driver version 0.7.11b
INFO: Auto-detected version: FF8 1.2 US English
INFO: NVIDIA Corporation GeForce GTX 460/PCIe/SSE2 4.3.0
INFO: OpenGL 2.0 support detected
INFO: Found swap_control extension
INFO: Max texture size: 16384x16384
INFO: Number of texture units: 4
INFO: Original resolution 640x480, window size 1280x720, output resolution 960x720, internal resolution 1280x960
INFO: FBO extension detected, using fast scaling/postprocessing path
INFO: Shader limits: varying 124, vert uniform 4096, frag uniform 2048
INFO: Loading external library RaW
MATRIX INITIALIZE
INITIALIZING SOUND...
  initializing direct sound
  EAXDirectSoundCreate
  creating primary buffer
  initializing audio data
  OK
  initializing streaming
SOUND INITIALIZED
DIRECT MUSIC - Enumerating Ports...
PORT 0: Microsoft MIDI Mapper [Emulated]
GUID={0xafe9a8f9,0x51cf,0x4645,0x8a,0x57,0xd,0x2d,0xf0,0xd8,0x76,0xe2}
PORT 1: Microsoft GS Wavetable Synth [Emulated]
GUID={0xe9cbf53a,0x6fb7,0x49ef,0xbe,0xf2,0x7,0x78,0x8f,0xcc,0x46,0x10}
PORT 2: Microsoft Synthesizer
GUID={0x58c2b4d0,0x46e7,0x11d1,0x89,0xac,0x0,0xa0,0xc9,0x5,0x41,0x29}
Creating Port1...
    Microsoft Synthesizer
  Port1 supports XG data
BinkClose
GLITCH: missed palette write to external texture data/eng/menu/icon
SdMusicPlay ()
sd_music_play (number=0, song_id=79, volume=0)
midi_play...
Stopping Performance
Loading DLS...
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=41, volume=0)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=42, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=41, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=74, volume=100)
Can't open file: \ff8\data\eng\field\mapdata\te\testbl6\testbl6.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=4, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
Can't open file: \ff8\data\eng\field\mapdata\gw\gwenter1\gwenter1.sfx
Can't open file: \ff8\data\eng\field\mapdata\gw\gwgrass1\gwgrass1.sfx
Can't open file: \ff8\data\eng\field\mapdata\gw\gwbrook1\gwbrook1.sfx
Can't open file: \ff8\data\eng\field\mapdata\gw\gwpool1\gwpool1.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=62, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
GLITCH: unsupported texture format
SdMusicPlay ()
sd_music_play (number=0, song_id=1, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
Can't open file: \ff8\data\eng\field\mapdata\gw\gwpool1\gwpool1.sfx
sd_music_play (number=0, song_id=4, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=58, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
Can't open file: \ff8\data\eng\field\mapdata\gl\glgate3a\glgate3a.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=58, volume=127)
Can't open file: \ff8\data\eng\field\mapdata\gl\glstaup5\glstaup5.sfx
Can't open file: \ff8\data\eng\field\mapdata\gl\glstaup5\glstaup5.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=22, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
Can't open file: \ff8\data\eng\field\mapdata\gl\glclub4\glclub4.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=61, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=61, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=61, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=18, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=74, volume=10)
sd_music_play (number=1, song_id=60, volume=15)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=41, volume=0)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=57, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=57, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=51, volume=0)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=24, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=24, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=24, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=35, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
BinkClose
BinkClose
SdMusicPlay ()
sd_music_play (number=0, song_id=35, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=53, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=13, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
GLITCH: unsupported texture format
SdMusicPlay ()
sd_music_play (number=0, song_id=1, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
sd_music_play (number=0, song_id=53, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
Can't open file: \ff8\data\eng\field\mapdata\te\testbl2\testbl2.sfx
SdMusicPlay ()
sd_music_play (number=0, song_id=46, volume=127)
SdMusicPlay ()
sd_music_play (number=0, song_id=57, volume=0)
midi_play...
Stopping Performance
midi_play FAILED!:  returning 0
SdMusicPlay ()
sd_music_play (number=0, song_id=57, volume=127)
WM_CLOSE

Releasing Performance...


Releasing Loader...


Releasing Port1...


Releasing DirectMusic interface...

Releasing COM...


Pages: [1]