Author Topic: [FF7PC-98/Steam] Smoother 60FPS Battles (v0.83)  (Read 48813 times)

obesebear

  • Administrator
  • No life
  • *
  • Posts: 2975
  • Karma: 17
  • King of Model Importing
    • View Profile
    • Modders Haven
[FF7PC-98/Steam] Smoother 60FPS Battles (v0.83)
« on: 2010-06-17 04:13:55 »
Up to date as of 18 August 2014
Download HERE v0.83

Model animations... 99% (Remaining fixes rely on Kimera being updated)

Limit Break animations... 50% (Can be interpolated but weapon is lost.  Require Kimera update)

Camera animations... 95% (Thanks to NFITC1. Still a few camera movements at 30fps. )

Texture animations... 50%(Still searching for a way to at least slow them down)

Battle Interface... 99% (Thanks to DLPB.  Damage display cuts out too quickly)

I have made the sheethttps://docs.google.com/spreadsheets/d/1C7jyrSu4Kmwvyp51eJJIcPGXEX-KZz5GufMEBpUT-EI/edit#gid=0Send me a PM if you want the link to edit it.

Proof of Concept Videos
http://www.youtube.com/watch?v=D6ziBsBNSfI
http://www.youtube.com/watch?v=rx3DHs4iMzA

Important Information

Hello everyone and Merry Christams.

Maybe this is old news and I just missed it, but I just noticed where limit break animations are stored and thought I'd share it just in case. They are in magic.lgp, as expected, in a collection of standard summon animation files. These are the files:
*Barret: limbr2.a00, limbr3.a00, limbr4.a00, limbr5.a00, limbr6.a00, limbr7.a00, hvshot.d
*Cid: limcd1.a00, limcd2.a00, limcd3.a00, limcd4.a00, limcd5.a00, limcd6.a00
*Cloud: limcl2.a00, limcl3.a00, limcl4.a00, limcl5.a00, limcl6.a00, limcl7.a00, blaver.d, kyou.d
*Aerith: limea2.a00, limea3.a00, limea4.a00, limea5.a00, limea6.a00, limea7.a00, iyash.d, kodo.d
*Red XIII: limrd3.a00, limrd4.a00, limrd5.a00, limrd6.a00, limrd7.a00, limsled.a00
*Yuffie: limyf1.a00, limyf2.a00, limyf3.a00, limyf4.a00, limyf5.a00, limyf6.a00, limyf7.a00
*Tiffa: limfast.a00
*Cait Sith: dice.d

There is also a ".d" file for each animations pack, but it's empty, so you must use the battle skeleton stored at battle.lgp in order to open them.

Unfortunately, there seems to be something wrong with these animations packs. I'm able to parse correctly the first animations, but then the last one is always either completly grabled or imposible to decode. Since I can't find the weapon animations in these packs, my guess is this last "animation" is where such data is actually stored at. I'm not sure how to parse it though, yet.

I'll let you know if I find anything else.

EDIT: Forget about it, I found out what I was doing wrong. All limit animation packs have 8 body animations and 8 weapon animations (although most of them are empty).

Merry Christmas everyone!

It's been a while since my last update. Sorry about that, I've been busy. I had several new features I wanted to implement, but it's been way too long and I just couldn't let the year slip away without releasing something. So here you have, version 0.97 is out. Here is what's new:
  -Added support for limit break animations (needs data from battle.lgp).
  -Added a dialog to load animations that are used by a field model at some point (using Ifalna's filter)
  -Added a dialog to interpolate all the animations in char.lgp, battle.lgp and magic.lgp.
  -Implemented full compression support for battle animation packs.
  -Fixed a ton of bugs releated to animations interpolation and writting.

About Limit Breaks, please refer the post in the Scripting section to see where they are:
http://forums.qhimm.com/index.php?topic=13950.msg195791;boardseen#new
You'll need to tell Kimera the path where you have battle.lgp contents stored at. To do so, please edit Kimera.cfg and write it at BATTLE_LGP_PATH.

By the way, I also included all the DLLs that windows usually complains about. Hopefully, by using the same versions we will avoid the differing behaviours on different computers.

Happy new year everyone!

Changes
-added battle swirl fix
-fixed Eligor
-fixed Moth Slasher idle rotation
-fixed Aero Combatant propeller rotation
-fixed Bull Motor
-slightly fixed Motor Ball. Still has rotation issues.
-fixed Razor Weed
-fixed Hard Attacker
-fixed Christopher
-fixed Death Dealer idle (remaining animations still may need to be fixed)
« Last Edit: 2014-08-18 17:12:59 by obesebear »

sl1982

  • Administrator
  • No life
  • *
  • Posts: 3542
  • Karma: 20
  • GUI Master :P
    • View Profile
Re: Running FF7 at 60fps
« Reply #1 on: 2010-06-20 05:42:35 »
I will ask Borde about it, next time i see him online if you guys like. He maybe to busy to do anything but he might tell you where or if it can be done

Don't worry about it. I took care of it.

edit: Here is a video if anyone is interested of the battles running in 60fps. Fraps does drop the frames down a bit when recording but you get the idea. Interpolated animations were created with a modified version of kimera i made.

http://www.youtube.com/watch?v=D6ziBsBNSfI
« Last Edit: 2010-06-27 01:33:12 by sl1982 »

sl1982

  • Administrator
  • No life
  • *
  • Posts: 3542
  • Karma: 20
  • GUI Master :P
    • View Profile
Re: [WIP] Running all of FF7 at 60fps
« Reply #2 on: 2010-08-04 03:27:42 »
Just a little experiment with interpolating the sprites. Opinions please.




NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #3 on: 2011-03-11 20:25:21 »
Since a moderator necro'd this I'll follow suit. :)

It literally occurred to me this morning. You don't specifically need a camera editor, just something that will extend the camera's duration for things. That would take no more than a single pass through the camdat files and increasing/decreasing all the "steps/frame pauses" for all relevant codes. That I could probably cook up pretty quick. Enter the current fps, desired fps, the camdat file to process and you'll get the camera flowing the way it should! I'm going to give this a go real quick. Should be pretty easy. It's just picking out the codes and modifying the correct bytes. I'm pretty sure I found them all already. Let me take a crack at this.

Aali

  • No life
  • *
  • Posts: 1184
  • Karma: 37
    • View Profile
Re: Battles playing at 60fps
« Reply #4 on: 2011-03-12 01:16:19 »
.s files can be edited to include more frames but they wont play. The duration of those animations seems to be hardcoded.

sl1982

  • Administrator
  • No life
  • *
  • Posts: 3542
  • Karma: 20
  • GUI Master :P
    • View Profile
Re: Battles playing at 60fps
« Reply #5 on: 2011-03-12 13:30:06 »
Perhaps when they actually play can be edited? Say for example they play on frame 20 right now and we get them to play at frame 60 instead? It wouldnt totally solve the problem but it would help.

Aali

  • No life
  • *
  • Posts: 1184
  • Karma: 37
    • View Profile
Re: Battles playing at 60fps
« Reply #6 on: 2011-03-12 14:00:14 »
Thats also hardcoded. It can be fixed of course but it entails reprogramming every single spell effect in the game.

Your best bet with spell effects is probably to pretend the game is paused for 3 frames, advance one frame, rinse and repeat.

And yes, I am working on that as we speak.

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #7 on: 2011-04-08 03:20:13 »
I've been meaning to get back to this. Stupid addictive duodecim.......

The "solution" I came up with isn't perfect,but the only thing I can think of to so with this is to add wait periods to make the camera last as long as the animation. This has drawbacks though. Consider something simple like Matra Magic. The camera is supposed to follow the missiles from the caster to the target by performing XX transitions between looking at the caster and looking at the target. If that transition takes more than 64 frames, then the transition increment can only go to 255, then it'll have to wait the rest of the frames at the destination before the next transition takes place.

Say a transition is supposed to take 100 frames. If your increasing the fps from 15 to 60 then the new desired transition time would be 400 frames from point A to point B. But it can only really be increased to 255 transitional frames and made to wait the remaining 145. That will make the transition much faster, but it will be focusing on what it should focus on when it should focus on it.

That said, in order to do this, it requires splitting each camera script by type, editing them, then reconstructing the cam files From scratch. That's not as simple as it might sound because there are actually scripts that aren't used and there are lots of duplicate pointers.

There is no better solution unfortunately. In some cases we could calculate where the camera should be after 255 transitions between point A and point B, but there are some scripts with transitions between relative locations like "caster_center" and "target_center" that wouldn't work like that. Not unless we knew more about how it all works.

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #8 on: 2011-10-13 19:06:48 »
Well, if you can't increase the script's wait, make the game wait longer. If the F5 handler was changed from

Code: [Select]
005C2A95 PosCamF5:
005C2A95                 movsx   edx, [ebp+arg_0]
005C2A99                 imul    edx, 0Eh
005C2A9C                 xor     eax, eax
005C2A9E                 mov     ax, word_BE10F8[edx]
005C2AA5                 mov     ecx, [ebp+var_18]
005C2AA8                 mov     edx, [ecx+4]
005C2AAB                 movsx   ax, byte ptr [edx+eax]
005C2AB0                 movsx   ecx, [ebp+arg_0]
005C2AB4                 imul    ecx, 0Eh
005C2AB7                 mov     word_BE10FA[ecx], ax
005C2ABE                 movsx   edx, [ebp+arg_0]
005C2AC2                 imul    edx, 0Eh
005C2AC5                 mov     ax, word_BE10F8[edx]
005C2ACC                 add     ax, 1
005C2AD0                 movsx   ecx, [ebp+arg_0]
005C2AD4                 imul    ecx, 0Eh
005C2AD7                 mov     word_BE10F8[ecx], ax
005C2ADE                 jmp     loc_5C3C57

to something like:

Code: [Select]
005C2A95 PosCamF5:
005C2A95                 movsx   edx, [ebp+arg_0]
005C2A99                 imul    edx, 0Eh
005C2A9C                 xor     eax, eax
005C2A9E                 mov     ax, word_BE10F8[edx]
005C2AA5                 mov     ecx, [ebp+var_18]
005C2AA8                 mov     edx, [ecx+4]
005C2AAB                 movsx   ax, byte ptr [edx+eax]
005C2AB0                 imul    ax, 4
005C2AB3                 movsx   ecx, [ebp+arg_0]
005C2AB7                 imul    ecx, 0Eh
005C2ABA                 mov     word_BE10FA[ecx], ax
005C2AC1                 mov     ax, word_BE10F8[ecx]
005C2AC8                 add     ax, 1
005C2ACC                 movsx   ecx, [ebp+arg_0]
005C2AD0                 imul    ecx, 0Eh
005C2AD3                 mov     word_BE10F8[ecx], ax
005C2ADA                 jmp     loc_5C3C57
005C2ADF                 nop
005C2AE0                 nop
005C2AE1                 nop
005C2AE2                 nop

Then we'd be a lot closer. That's just forcing the wait counter to be four times as large as the script wants. This would also have to be done for the Focus Cam F5 handler and any other op that wants a increment of some sort. The problem is this solution isn't as wonderfully modular as altering the scripts themselves.

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #9 on: 2011-10-24 20:43:06 »
NTFIC1 i eagerly await your modified ff7.exe

*sigh* I have GOT to stop suggesting things. :(

For my own personal record I'll submit the following:

Cam Progress:
Position:

D8 - 0x5C3E6F; 100
E2 - 0x5C27DA; 100
E3 - 0x5C3E6F; 100
E4 - 0x5C3E6F; 100
E5 - 0x5C3E6F; 100 (I hope I'm not breaking these)
E7 - 0x5C352D; 100
E9 - 0x5C33B9; 100
EB - 0x5C31F8; 100
F5 - 0x5C2A95; 100 (this was a long one. Most others shouldn't be so bad)

-That didn't take as long as I thought. Still, there are a good number of changes that were made. Mostly it involves optimizing code and adding a harmless* imul ezx, 4 command in there.

Focus:
D8 - 0x5C52F8; 100
E2 - 0x5C4BAF; 100
E3 - 0x5C52F8; 100
E4 - 0x5C52F8; 100
E5 - 0x5C52F8; 100
E8 - 0x5C4963; 100
EA - 0x5C4800; 100
EC - 0x5C4651; 100
F5 - 0x5C4253; 100

I'm pretty sure those are all the cam ops that use delays or step increments. I don't know where the animation scripts are handled yet, but I'll look for them after I'm done with the camera parts and test them. I have a nice little dif file that shows what I changed from -> to if anyone is interested in trying it out.

* I say "harmless" because I think the register is completely cleared before the value is loaded. More modern processors will probably handle it correctly. Oddly enough, the game loads a byte value into a word-sized register chunk then stores that word-sized register chunk into another value that is modified later. Basically what I added was removing a redundant re-indexing (those are freaking everywhere) and shift some commands down and add a [dword-register] *= 4 command in there. The problem would be if the loading a byte into a word-sized chunk would result in clearing the register or not. If it does then there's no problem. If the upper part of the register still holds a value then the *4 could result in an overflow if the upper word is greater than 3FFFh. It doesn't look like that can happen in any of these cases, but it's now more vulnerable to error and possible BSOD-ing.

Take D8/E3/E4/E5's handler:
Code: [Select]
xor    eax, eax
mov    al, [edx+ecx]
mov    ecx, 0xC05FF4
imul   eax, 4
mov    [ecx], eax

This is actually completely safe by virtue of fuzzy logic. eax was cleared before manipulation so the upper part is empty.

Now take E2's:
Code: [Select]
xor    ecx, ecx
mov    cx, 0xBE10F8[eax]
mov    edx, [ebp+var_8]
mov    eax, [edx+4]
movsx  cx, byte ptr [eax+ecx]
mov    edx, [ebp+var_4]
imul   ecx, 4
mov    [edx+4], cx

The problem is in line five when it moves a byte-sized value to the word-sized register. Does the entire word get reset? Very likely. In fact, the entire ecx SHOULD only contain that value at the end of that statement. Since it's only moving a byte, it can't be larger than 255 and multiplying by four would yield no more than 1020 to be stored in that spot (which is the current camera script position).
« Last Edit: 2011-10-27 18:23:06 by NFITC1 »

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #11 on: 2011-11-22 03:33:06 »
You should probably change your name then.
 
 :P

Anyways it is the opening and closing battle camera pans. They run at the proper speed but get cut short.

I noticed that when I was showing off that tech demo. There might still be a duration counter that I'm missing. The battle timer begins so far into the initial camera motion. If there is a trigger for that it'll have to be moved down in each script. Try changing the battle mode to 'wait' and see if that makes a difference. I've long thought that the command for making the battle timer wait rests in the animation, but it might be in the cam scripts.
In reference to a prior post of mine, it could be DA, DB, DC, or F1 of the position cam or DB or DC of the focus cam codes. I should extract all the init cam scripts and see if I can find some commonality that they all share. They're all in the exe if someone wants to beat me to it.

Update:
It looks like E6 is also used to create increments in both the position and focus scripts. That won't affect all the scripts, but it would affect some.
« Last Edit: 2011-11-22 18:54:00 by NFITC1 »

Aali

  • No life
  • *
  • Posts: 1184
  • Karma: 37
    • View Profile
Re: Battles playing at 60fps
« Reply #12 on: 2011-12-03 21:08:32 »
I wrote these tools to help me read and edit .s files, maybe you can put them to good use. Simply adding more frames to the animations just caused it to cut out early when I tried it but maybe you can figure that out.

sptdump.c: .s file -> text format
Code: [Select]
#include <stdio.h>
#include "spt.h"

int main(int argc, char *argv[])
{
FILE *f;
struct spt_header header;
int i;
int j;

if(argc < 2)
{
printf("usage: sptdump <file>\n");
exit(1);
}

f = fopen(argv[1], "rb");

fread(&header, sizeof(header), 1, f);

printf("File type: %p\n", header.file_type);
printf("Version: %p\n", header.version);
printf("Number of SPT entries: %i\n", header.num_spt_entries);

printf("\n");

for(i = 0; i < header.num_spt_entries; i++)
{
struct spt_entry entry;

fread(&entry, sizeof(entry), 1, f);

printf(" SPT Entry %i: %p, %i\n", i, entry.field_0, entry.num_spt_struc_183);

for(j = 0; j < entry.num_spt_struc_183; j++)
{
struct spt_struc_183 struc_183;

fread(&struc_183, sizeof(struc_183), 1, f);

printf("  %i: %p %5i %5i %5i %5i %5i %5i 0x%04x %3u %3u %3u %3u\n", j, struc_183.flags, struc_183.x, struc_183.y, struc_183.field_8, struc_183.field_A, struc_183.texture_page, (struc_183.field_E & 0x3F) << 4, struc_183.field_E >> 6, struc_183.w1, struc_183.w2, struc_183.h1, struc_183.h2);
}
}

return 0;
}

sptbuilder.c: text format -> .s file
Code: [Select]
#include <stdio.h>
#include <string.h>
#include "spt.h"

const char file_type[] = "File type: ";
const char version[] = "Version: ";
const char num_spt_entries[] = "Number of SPT entries: ";

int main(int argc, char *argv[])
{
FILE *f;
FILE *of;
struct spt_header header;
int i;
int j;
char line[4096];

if(argc < 3)
{
printf("usage: sptbuilder <infile> <outfile>\n");
exit(1);
}

f = fopen(argv[1], "r");

of = fopen(argv[2], "wb");

if(!f)
{
perror("input file");
exit(1);
}

if(!of)
{
perror("output file");
exit(1);
}

while(1)
{
fgets(line, sizeof(line), f);

printf("%s", line);

if(!strncmp(line, file_type, sizeof(file_type) - 1)) sscanf(strstr(&line[sizeof(file_type)], "x") + 1, "%hhx", &header.file_type);
else if(!strncmp(line, version, sizeof(version) - 1)) sscanf(strstr(&line[sizeof(version)], "x") + 1, "%hhx", &header.version);
else if(!strncmp(line, num_spt_entries, sizeof(num_spt_entries) - 1)) sscanf(&line[sizeof(num_spt_entries) - 1], "%i", &header.num_spt_entries);
else break;
}

printf("Done parsing headers\n");

header.field_2 = 0;

fwrite(&header, sizeof(header), 1, of);

for(i = 0; i < header.num_spt_entries; i++)
{
struct spt_entry entry;

printf("Parsing SPT entry %i\n", i);

fgets(line, sizeof(line), f);

printf("%s", line);

strtok(line, ":,");

sscanf(strstr(strtok(0, ":,"), "x") + 1, "%hx", &entry.field_0);
sscanf(strtok(0, ":,"), "%hi", &entry.num_spt_struc_183);

fwrite(&entry, sizeof(entry), 1, of);

for(j = 0; j < entry.num_spt_struc_183; j++)
{
struct spt_struc_183 struc_183;
int tmp1;
int tmp2;

printf("%i\n", j);

fgets(line, sizeof(line), f);

printf("%s\n", strtok(line, ":"));

//printf("%s\n", strtok(0, ":"));

sscanf(strstr(strtok(0, ":"), "x") + 1, "%x %5hi %5hi %5hi %5hi %5hi %5i %p %3hhi %3hhi %3hhi %3hhi", &struc_183.flags, &struc_183.x, &struc_183.y, &struc_183.field_8, &struc_183.field_A, &struc_183.texture_page, &tmp1, &tmp2, &struc_183.w1, &struc_183.w2, &struc_183.h1, &struc_183.h2);

struc_183.field_E = tmp2 << 6;
struc_183.field_E |= tmp1 >> 4;

fwrite(&struc_183, sizeof(struc_183), 1, of);
}
}

fclose(of);

return 0;
}

spt.h: data structures used in both programs
Code: [Select]
#ifndef _SPT_H_
#define _SPT_H_

struct spt_header
{
unsigned char file_type;
unsigned char version;
unsigned short field_2;
unsigned int num_spt_entries;
} __attribute__((__packed__));

struct spt_entry
{
unsigned short field_0;
unsigned short num_spt_struc_183;
} __attribute__((__packed__));

struct spt_struc_183
{
unsigned int flags;
short x;
short y;
short field_8;
short field_A;
unsigned short texture_page;
short field_E;
unsigned char w1;
unsigned char w2;
unsigned char h1;
unsigned char h2;
} __attribute__((__packed__));

#endif

Kranmer

  • Freak
  • *
  • Posts: 747
  • Karma: 6
    • View Profile
Re: Battles playing at 60fps
« Reply #13 on: 2012-04-13 10:42:30 »
Of course that's all Greek to me.
Well it appears to be C, it should be easy to compile to EXE with a compiler like Mingw,
try installing mingw and msys (both free programs) to the default directory of C:\Mingw
then run mingw from your startmenu and you should get a command box, then copy and paste all the text in those code boxes into TXT files and use the filenames provided sptdump.c,sptbuilder.c,spt.h
then put these 3 files into your
C:\MinGW\msys\1.0\home\USERNAME
folder.
Then in the command line type
GCC -c sptdump.c -o sptdump.o
then press enter then type
GCC sptdump.o -o sptdump.exe

then you will have sptdump.exe then do this for sptbuilder

GCC -c sptbuilder.c -o sptbuilder.o
press enter then
GCC sptbuilder.o -o sptbuilder.exe

then you will have sptbuilder.exe and sptdump.exe files. And that should do it. hope this helps.
NOTE: in the line C:\MinGW\msys\1.0\home\USERNAME where it says USERNAME it should your windows username, so for me its Kram since i log into windows with that username.

NFITC1

  • No life
  • *
  • Posts: 2267
  • Karma: 29
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Battles playing at 60fps
« Reply #14 on: 2012-05-15 20:35:01 »
Unfortuanately, I must confess I'm complety at a loss here Obesebear. It would seem reasonable for limit break animations to be stored togheter with the other battle animations, but as long as I know, noone around here has found a trace about them. My information could be outdated, though, I've been away for quiet a while.

I don't think animation length can be automatically adjusted by the game engine. All other animations have a fixed framerate. But then again, who knows.

I thought limit break animations were contained with the magic animations. Pushing some magic anims beyond a certain number seemed to support that theory. Their effects range from 00h - 4Eh. I don't know where these are stored, but it doesn't seem like they're stored in the animation of the actors themselves. They're likely in the magic.lgp somewhere and made to specifically reference bones of the actor.

Kranmer

  • Freak
  • *
  • Posts: 747
  • Karma: 6
    • View Profile
Re: Battles playing at 60fps
« Reply #15 on: 2012-06-13 18:56:10 »
I did create a DLL a while ago to allow switching of FPS between values via hotkeys, I haven't had chance to fully test it (i did give it to pitbrat to test but i haven't been on IRC for a while so i haven't had chance to ask him how good/bad it worked).
So if you want to test it, it should allow you to switch between a lot of different FPS values (similar to the speedhack but different because this DLL only sets the FPS for what you choose, so if you choose to run battles at 60fps it will only run battles at 60fps and the field and stuff will stay the same where as the speedhack speeds up the whole game regardless)
So this will make it easier so you won't have to hex edit your EXE (i can make 1 just for battles if need be).
You can get it here
http://www.mediafire.com/?ee02tw422kfml2m
this is also a all in 1 DLL so it also includes other stuff like my AnyCd, load saved games, Always Run, Interface Switcher (only for use with menu overhaul) and move while talking.
here is a list of what the hotkeys are (so to set battles to 60FPS just press and hold the B button on your keyboard then press number 6 on your keyboard (using the top numbers NOT the side keypad))
Code: [Select]
WORLD MAP FPS CONTROL
W+1 = 15FPS
W+2 = 22FPS
W+3 = 30FPS
W+4 = 40FPS
W+5 = 45FPS
W+6 = 60FPS
W+7 = 80FPS
W+8 = 100FPS
W+9 = 200FPS
W+0 = 400FPS

FIELD FPS CONTROL
F+1 = 15FPS
F+2 = 22FPS
F+3 = 30FPS
F+4 = 40FPS
F+5 = 45FPS
F+6 = 60FPS
F+7 = 80FPS
F+8 = 100FPS
F+9 = 200FPS
F+0 = 400FPS

BATTLE FPS CONTROL
B+1 = 15FPS
B+2 = 22FPS
B+3 = 30FPS
B+4 = 40FPS
B+5 = 45FPS
B+6 = 60FPS
B+7 = 80FPS
B+8 = 100FPS
B+9 = 200FPS
B+0 = 400FPS

M+1 = Move While Talking V1 (glitched cloud but works at events)
M+2 = Move While Talking V2 (Doesn't work correctly at some events)
M+3 = Access Menu While Talking
M+4 = Highwind land on dark parts of the map or in forest's (Don't use on other vehicles only on highwind)
M+0 = Undo Move While Talking, Access Menu While Talking and Highwind landing

CTRL+F3 = Always Run Off
CTRL+F4 = Always Run On

CTRL+F5 = FFX Normal Interface
CTRL+F6 = FFIX Normal Interface
CTRL+F7 = FFX 9999 Interface
CTRL+F8 = FFIX 9999 Interface

CTRL+L = Load anywhere (press twice in field or once if in the in-game menu) NOTE: DO NOT USE THIS WHILE ON THE WORLD MAP (you can load saves on the world map just don't press CTRL+L on the world map)

FF7AnyCDv2 Built in
NOTES:
1. Set the FPS before you go into the desired part, so set the battle FPS before going into battle, Set the world map FPS before going to the world map, Set the field FPS while on the world map or in battle.
2. To run at over 60FPS you may need to disable Vsync in Aali's Driver and in your graphics card driver's control panel.
« Last Edit: 2012-06-13 19:01:24 by kranmer »

ficedula

  • No life
  • *
  • Posts: 2104
  • Karma: 13
    • View Profile
    • http://www.ficedula.co.uk
Re: Battles playing at 60fps
« Reply #16 on: 2012-07-13 13:28:53 »
As far as the field, I don't think we have anything that lists which animation is used by whom.   Though we could manually make a spreadsheet with each animation listed, then use Makou Reactor to go through each scene to find out which .hrcs are using which animations.

If you download Ifalna, there's a file in there (ifalna.filter) that lists for each HRC file, what field animations it thinks are associated with it.

It was generated based on parsing the field files, and this was done over 10 years ago when the format wasn't understood so well, so no guarantees it's totally accurate; but, it shouldn't be too far off.

DLPB

  • No life
  • *
  • Posts: 5322
  • Karma: 105
  • The King of the Rumbling Spires
    • View Profile
Re: Battles playing at 60fps
« Reply #17 on: 2012-08-12 15:41:09 »
I sent my findings to Dziugo, who in his god like knowledge of assembly showed me where it is going wrong.  So now Cait's reels work properly at 60fps, the way they did with PSX. 

I can't get anywhere with Tifa's slots, but assuming he has the time, I am sure Dziugo will!

To correct Cait's slots for use at 60fps:

Quote
0x6e2138: mov byte ptr [00DC3B6C],04
0x91eacc: set to 20

In ff7.exe this is simplified as:
002E153E: Set to 04
0051D4CC: Set to 20

I will look at Battle Arena slots myself.  Don't want to pester people too much :)


Borde

  • Freak
  • *
  • Posts: 894
  • Karma: 24
    • View Profile
Re: Battles playing at 60fps
« Reply #18 on: 2012-09-08 21:10:33 »
I'm impressed by the amount of progress this project has seen since the last time I checked. Great job guys.

As for my end, I finally have good news. After spending countless hours checking and rewriting my encoding/decoding functions,I found out what went wrong... at a completly different place. Turns out I was ignoring the root rotation. It was suposedly ignored by the game, but looks pretty damn clear it's not. That was also the reason why Cid's fleeing animation was wrong.

Borde

  • Freak
  • *
  • Posts: 894
  • Karma: 24
    • View Profile
Re: Battles playing at 60fps
« Reply #19 on: 2013-01-01 10:14:25 »
I think I solved all the problems regarding animations interpolation, so at least that's one less problem. The new version of Kiimera allows you to interpolate automatically all the animations in the game so there is no need to process one by one any more, either.

We still need to get effects interpolated. Anyone has information about them?

EDIT: Aali has been researching about effects and found out pretty much everything is hardcoded into the EXE. That means that getting interpolated effects implies finding all the functions used by effects and modifying them to work at the new framerate. I'm sorry to say I think the future of this mod looks very grim...
« Last Edit: 2013-01-13 00:34:47 by Borde »

obesebear

  • Administrator
  • No life
  • *
  • Posts: 2975
  • Karma: 17
  • King of Model Importing
    • View Profile
    • Modders Haven
Re: Battles playing at 60fps
« Reply #20 on: 2014-07-13 20:08:28 »

Project work is picking up again.

It was pretty defeating spending all that time interpolating the models only to find out they were messed up and completely unusable.  However, I recently quit my job, and after skimming this old topic it seems that everything (aside from those damn animation files) is in place to make this a reality.

I'm currently reinstalling FF7 and will begin work on it today.  But first this thread needs to be purged of all the old unhelpful information and I need to find a link to "multi.dll" that DLPB made.  I also couldn't find info on the limit break animations, but I know they were found and posted about somewhere...

Covarr

  • Covarr-Let
  • Administrator
  • No life
  • *
  • Posts: 3278
  • Karma: 57
  • The Great Redarr.
    • View Profile
Re: Battles playing at 60fps
« Reply #21 on: 2014-07-13 20:14:12 »
and I need to find a link to "multi.dll" that DLPB made.
You might have an easier time with HextLaunch. It can launch any app and inject as many DLLs as you want. In the long run I think it'll be easier to use, at least for testing and development, than multi.dll.

DLPB

  • No life
  • *
  • Posts: 5322
  • Karma: 105
  • The King of the Rumbling Spires
    • View Profile
Re: Battles playing at 60fps
« Reply #22 on: 2014-07-13 20:21:57 »
Yeah, multi.dll has been retired.  HextLaunch combines 3 of my tools into 1 :)

Also, the reels were fixed by Dziugo.  So that is ready for the day everything is sorted :)

obesebear

  • Administrator
  • No life
  • *
  • Posts: 2975
  • Karma: 17
  • King of Model Importing
    • View Profile
    • Modders Haven
Re: Battles playing at 60fps
« Reply #23 on: 2014-07-13 20:24:35 »
Great!  Trying to update the first post with all the correct, up-to-date, important information.  If there's something I missed or is wrong do let me know.  Like, I need to get rid of those manual .exe edits now.

DLPB

  • No life
  • *
  • Posts: 5322
  • Karma: 105
  • The King of the Rumbling Spires
    • View Profile
Re: Battles playing at 60fps
« Reply #24 on: 2014-07-13 20:26:48 »
Tifa, Cait's limit slots, battle square slots updated... 100% (Pretty sure Dziugo and DLPB got this taken care of)


<

Yup.  It's sorted.  Dziugo worked his magic.  I have the values needed for that.