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

Pages: 1 2 3 4 5 [6] 7 8 9 10 11 ... 48
On a related note, why is the FF7 animation system so brittle? Why doesn't FF7 just degrade gracefully and let an actor without an animation to a spell or action just idle for a while?

Who in their right mind would allow programmers to focus on exception handling for a product with no user serviceable parts?

It's evident that FF7 has some kind of exception handling, or else we wouldn't get 'Data Errors' when actors attempted to use animations that the game couldn't look up. But exactly how does this handling work?

The 'data error' functionality doesn't seem particularly comprehensive - I've only ever reproduced instances where it captures animation problems (a code 32). Even then, I've noticed that it can't handle animation problems when the action is called as a 'follow-up' to another (called as the special effect 'call [Modifier] after completion', as per the second halves of Vincent's Satan Slam or Cloud's Finishing Touch) - the 'Scene: XX / Code: YY' message comes out as the nonsensical 'Scene: #$' (though it's not clear why).

Someone tripped that one enough times to piss of whoever was working on that code :) Or perhaps it was developed early on when the deadline wasn't looming around the corner.

I'm surprised that you're surprised about the lack of error handling, its difficult for any programmer to get it right, without the pressure of managers and deadlines and the I-dont-care-about-this-shit-I-just-want-to-get-it-out-the-door factor.

Only reason why modern games are (slightly) better is that the engine is usually not developed in-house and whichever company did write it has an interest in error handling so that it can tell its customers what they're doing wrong.

I expect FF7s system to be nothing but inconsistent kludges dealing with a particular situation that came up during development.

The hard limit is 65535 *vertices* per *group*, where a single .p file can contain more groups than you will ever need.

I can tell you that you'll most likely run into performance problems with worldmap/field models before they become a problem in battle. Beyond that, you tell me how far you can push it before it goes down the shitter.

Your card is a bit too old to do scaling properly. On that card you will only be able to use resolutions that are an even multiple of 640x480 (after aspect correction), such as 1280x960 or 1280x1024.

Most people dont have DEP enabled for regular applications.

Some people dont even have DEP capable hardware.

ah well  :o  I have dep ON and no issues?

You put code in a non-executable segment. You shouldn't do that.

when I open the APP, it says it uses an internal resolution of 1920x1440.

How can I change that? I want to set it higher and see, how the result looks.

No you dont. Best case you get an FSAA effect (which will be inferior to real anti-aliasing), worst case it just looks like crap.

Just as I thought. Turn off DEP and smack Dan for distributing such garbage :) (if anyone recalls I had the same problem with my modified FF7Config.exe)

Link doesn't work, please use something other than google docs.

But before you upload it somewhere else, look at the detailed error report (the one that comes after the drivers own crash message) and tell me if you see "BEX" in there.

I got something interesting coming up but I can't promise anything yet.

Its already fixed. Instead you should be asking when the next release will be out. If we're lucky it might be done in january.

Releases / Re: Battles playing at 60fps
« on: 2011-12-03 20: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");

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);


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");

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

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

perror("input file");

perror("output file");

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);


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__));


Unless its a really old card, the easiest fix is to upgrade those old graphics drivers.

Critical hit flash and other similar fullscreen effects will be fixed with the next version of the driver.

The black bar at the bottom of the screen was always there in the PC version and it will remain there for the foreseeable future.

The 9999 limit break functionality included in the driver does not play nice with the menu overhaul, leave it off.

The mdef fix should be turned off if you're running a mod which attempts to correct the issue by adding a spirit bonus to all armor, otherwise leave it on. That setting will override any mdef patch applied to ff7.exe.

Nope, by the time it reaches the driver its just a list of palettes, no realistic way to tell where it came from.

Much better.

The game tried to use palette #16 from usfont_a_l which only has 16 palettes (0-15).
I will add some code to prevent things like that from crashing the game but there's obviously something wrong with your .exe.

You need latest 7zip to open it :)  uses ultra compression from latest.


Would you mind uploading it in a more accessible format?


Probably my doing but it crashed when I selected Magic from main menu.  Cannot reproduce.

That archive is broken. Unless its related to the driver (or something very trivial) I will not have time to look into it any time soon, sorry.

First step to solve performance problems is always to change your resolution to 640x480 or 1280x960 (1280x1024 is also acceptable).

Solved Problems / Re: Error: Swapbuffers Failed
« on: 2011-08-13 12:19:04 »
"S3 Graphics VIA/S3G UniChrome IGP/MMX/K3D 1.2"

You have a very very very low end graphics card with matching very very very low end drivers. This is a common problem with this particular renderer and has nothing to do with FF7.

Releases / Re: [REL] Final Fantasy VII FMV Restoration
« on: 2011-08-10 16:33:02 »
Your CPU is an important piece of information here. Older versions of the movie plugin didn't use any MMX/SSE extentions because it was prone to crashing. That *should* be fixed now but its possible that there's a bug with one of the different decoding paths.

General Discussion / Re: Day and night mode FFVII.
« on: 2011-07-27 20:28:14 »
It would be fairly easy to make the worldmap have some kind of day/night cycle but it would just be weird when you enter field and suddenly its day again.

Troubleshooting / Re: FF7.exe load Black screen
« on: 2011-07-26 22:43:05 »
Hmm, not really. I bet if you run FF7Config again and re-set your sound driver it will work.

Do you have the 1.02 patch installed? Because it looks like you don't. The driver itself cannot tell if you try to use it with the retail version so you will not get any errors about that. The modified FF7Config.exe will try to tell which version you have by looking at FF7.exe but that might not be 100% accurate.

Troubleshooting / Re: FF7 issues (Minigame, reg)
« on: 2011-07-22 15:08:34 »
I've seen your message. Its not relevant here. Yours is an ATI card, this is an intel card. From what I can tell from the OP, the framelimiter is indeed not working at all for him.

Pages: 1 2 3 4 5 [6] 7 8 9 10 11 ... 48