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

Pages: [1]
Scripting and Reverse Engineering / Hacking info
« on: 2015-06-18 06:52:51 »
Hey guys,

Thought it might be useful to document the process I've used to extract some info from the game, so I've set up a blog and posted how I tracked down the dialogue choices for Ultrasound.

Doubt it'll be comprehensible unless you've got a programming background already, but if you're already familiar with hex / pointers and just don't know where to start at hacking the game, it could be useful to get you going.

I intend to make more posts, not necessarily all FF7 related, but certainly some will be.


FF7 Tools / [PSX/PC] AI Script compiler - Conformer (v0.2)
« on: 2015-02-15 16:18:32 »
v0.2 download:

Old versions:

v0.1 download: (you will need an up to date version of the .NET framework installed also).

This is an initial release: there's many things missing I'd like to add but enough is working now for it to be functional and for me to gather some feedback, so, here you go.

Conformer is essentially a script compiler for the AI scripts. (It doesn't replace Proud Clod - in fact you currently need Proud Clod to make any good use of it). The idea is that rather than writing AI scripts in the raw bytecode you can write them in a vaguely friendly scripting language and Conformer will compile your textual script down into the bytecode FF7 uses.

Here's a very simple example:

Code: [Select]
Import common

const word ATT_BODYBLOW := $0172
const word ATT_FANG := $0189

function AI.Main: void
Targets := PickRandomBit(Enemies)
if (Random() mod 2) = 0 then
        Call Perform(ENEMY_ATTACK, ATT_FANG)
        Call Perform(ENEMY_ATTACK, ATT_BODYBLOW)
end if
end function

Obviously this is pretty simple and the sort of thing you could code in the bytecode manually but it's a bit nicer to do it this way ;)

Here's something a bit more complex:

Code: [Select]
Import common

const word ATT_BODYBLOW := $0172

function AI.Main: void
if LoadStats(Me, StatCurrentHP) < (LoadStats(Me, StatMaxHP) / 2) then
Targets := PickRandomBit(FindLargest(LoadStats(Enemies, StatCurrentHP)))
Targets := PickRandomBit(Allies)
end if
end function

I can't see why you would implement a script like this ;) but it's a good example of the language. In this case, it loads the current creature's HP, and if it's less than half of their maximum HP, it loads the HP of all the enemies, finds which of them has the most, and picks a random one of those to target. Otherwise it targets a random ally.

How to actually use it...:

You type your script into location (1). (You can load, save, etc. scripts from the menu like normal.)

Once you've entered your script, pick one of the AI functions you've written (e.g. AI.Main) from the list (2).

Then click Compile (3).

Either it'll work, or it'll show you errors in the listbox (4), in which case you need to fix the errors first!

If it works, it'll output the bytecode in area (5), in three formats: plain binary, commented binary explaining what each block of bytecode is doing, and (most usefully) in the text format Proud Clod expects for you to paste into the AI editor. Since Conformer doesn't have an option yet to edit the scene.bin files that's how you'll want to get your AI into the actual game.

A language reference is available from the Help menu or here: or off course post questions here!

I have quite a few planned features to add; direct write support into scene.bin is an obvious one, the bytecode it produces could be optimised further, and some other things, but requests are also welcome.


Completely Unrelated / Off to Japan
« on: 2014-12-23 21:17:17 »
I'm currently planning out a holiday to Japan with a friend next September. Provisionally we'll be visiting Tokyo, Nagoya, Kyoto and Hiroshima.

Anybody have recommendations for particular places we should go or things we should do while we're out there?

FF7Voice / FF7 Voices - assessing interest
« on: 2014-07-07 20:05:20 »
So as per this topic there's some interest in reviving the FF7 Voices project, and I've coded up basic tools necessary for the project. But there's no point continuing unless there's sufficient interest for the project to actually get anywhere.

So are people interested? Probably most important other than, you know, people to actually voice characters, is somebody with the time, skills and interest to actually direct/manage the project ... I don't mind handling the technical programming aspects, but I have no audio experience.

A new topic seems to make sense to me so I can update post 1 with download links as and when.

So, Ultrasound v0.42:

Changes since v0.41:
-Added 7H plugin support

Changes since v0.4:
-Support for voicing choices on popup/selection

Changes since v0.3:
-OpenAL output
-OGG support
-Support selecting audio files based on party members

Changes since v0.2:

-Lower latency on sound playback
-Fix a few crashes
-Add Pan and Volume properties to sounds
-Add Ambient sounds, optionally looping

How to use the options:

See audio\Ultrasound.xml in the download ;) But to go into detail:

Ambient sounds are sounds that are triggered to play not because FF7 was playing a sound effect, but because some variable in the game (so far - FieldID or PPV) changed.
Currently only one ambient sound is playing at a time - whenever the FieldID/PPV changes, Ultrasound checks its list of ambient sounds, and finds the first one whose conditions match. It stops any sound that's already playing, and then plays the new sound (if any!).

(The only kind-of exception so that is that if the new sound filename is the same as the old one, it just updates the existing sound with a new pan/volume - it doesn't actually stop and then start the same sound playing.)

So, for example;

  <Ambient FieldIDs="195" Loop="true">ultrasound\rain-heavy.mp3</Ambient>
  <Ambient FieldIDs="202" Loop="true" Volume="0.5">ultrasound\rain-heavy.mp3</Ambient>

  ...if FieldID is 195, it plays the rain-heavy file (on loop). When you go into FieldID 202 (which is indoors), it carrys on playing the same sound, but at 50% volume.
  If you need to set a pan, an attribute called Pan sets the panning; 0 = Full left, 1 = Full right, 0.5=Middle (default). It won't have any effect on stereo files though!

  You can set Volume on replacement sound effects, but Pan won't work - Ultrasound uses whatever pan FF7 has set on the sound instead.

Completely Unrelated / NaNoRenO
« on: 2008-03-16 15:45:14 »
Not been around for a while, and it occurred to me I'd never posted about NaNoRenO...

NaNoRenO is like the other various NaNo challenges, but in this case it's a challenge to "write a visual novel in a month". Most people seem to interpret that as a Renai style game for some reason, I can't possibly imagine why...

Anyway, it's sort of become a regular March thing now so as per normal I'm participating with some of my crazy friends. Some progress has been made so far...

We'll have something out by the end of the month, but if anybody's interested we did release a game last year that you can download and play ... it'll probably be reasonably fun if you like anime or renai games or both, and partially incomprehensible if you don't ;) If anybody does download it the game thread is here for comments/help/bug reports/etc.


Scripting and Reverse Engineering / World map viewer app
« on: 2006-09-17 13:59:56 »
I've uploaded a world map viewer application to my website; download it from as per normal (under "FF7 Programs", "Reeve").

See;'s not perfect yet, but I reckon about 90% of the textures are correct now. Controls are as per Zangan and my other 3d apps; right click to turn viewpoint around, hold left mouse button to fly forwards, press A/Z to increase or decrease height.

Essentially the entirety of the 3d mesh format is already documented here; I've just added on textures. Additional information on the file format:

In the triangle data, Unknown1 (1byte) seems to be walkmap status; I haven't investigated thoroughly, but the following values I've observed:
$23 = Deep sea (can't land highwind, water spray when flying low)
$22 = No sea spray from highwind, still can't land
$21 = No sea spray from highwind, still can't land
$20 = No sea spray, can land & walk

It may not be a simple bitmask, since $22 and $21 give the same results (I'd hoped that the lowest bit was "show spray", but apparently not.) I rather suspect at least some bits in this variable will control which chocobos can traverse the tile, too (which means figuring this out could be tedious, you might have to fudge some values, and then try every chocobo types plus vehicle type over that tile...)

The second Unknown field (2 bytes) is texture; the lower 9 bits contain a texture number (0-511, but only 0-281 appear to be used). The text files in the Reeve download show how each number maps to one (or more) .TEX files within WORLD_US.LGP. The upper bits are something to do with texture coordinate mapping; 90% of the textures work fine if you ignore them, but I'm hoping the ones that look wrong in my viewer will be due to these bits, which I don't do anything with, yet. It's most obvious on the "rocky" tiles, such as around Mideel and Midgar, which look rubbish and have muddy green patches on them.

(The viewing distance is currently rubbish in my app; this I know about.)

Archive / New version of FF7Music
« on: 2005-10-14 21:13:49 »
Topic says it all, I think. Well, maybe not all. Download it from my webpage.

New features in this version;

  • Looping works properly with MP3s
  • No longer requires patching the EXE. May make it easier to apply other patches.
  • ...and therefore runs in a separate process, which may resolve some crashing problems.
  • Doesn't require FICEDULA.DLL which again should help with instability problems (wrong version issues...)
  • Supports multiple input plugins (play MP3s, PSF's, etc, all in same profile)
  • [/list:u]

    The version up there is tested on my PC only, so I'm not sure how well it will run generally, please test it ;)  It definitely runs on 2K/XP, probably 98, 95 is dubious.  It'll use the same FF7Music.ini as the older version so you don't need to setup a profile again, but please
remember to remove the old version of FF7Music first. If you've patched the exe that means going back to a 'clean' v1.02 install (and then applying any other patches you need - although obviously try without any other patches if you have crashing issues).

Some of you guys may be interested in this:

You'll probably want a GBA emulator, although I tried it on real hardware a while ago and it worked. Don't expect too much to come of it, though...

General Discussion / Gomen everybody
« on: 2003-03-12 20:41:05 »
Long time no see ;)

Well, I'm back now. Long story, but essentially I've been absolutely snowed under with work at university for the past month or so - combination of normal uni work, third year project (more or less like a programming dissertation) and job applications/interviews conspired to kill pretty much most of my free time, and society work at uni took up the rest.
Not to suggest that I don't have work *now* or anything - I have this nice little 15,000 word report I have to write on the project - but at least now I have 5 weeks more-or-less off to actually do it in.

I know some of you have been wanting to get hold of my programs ( ;) ) so my site is now up at:

That's the Computing Society server (well, one of them) at uni, so it should be pretty reliable, fast, and so on. I don't however have much disk space on it, so only the most recent version of every program is available for download. That should be enough for most people, of course. (more on this in the appropriate thread elsewhere...)

If anybody's posted stuff needing my attention, I *have* read most of the backlog over the past month, although not all, so I'll try and reply to anything still relevant. Get in touch if I've missed something though ;)  Same applies to email - if you've sent me something and I've not replied, try again (perhaps with a different email; my spamfilters can be a bit enthusiastic).

In the spirit of releasing funky screenshots (spurred on by Alhexx and the new Ultima...) here's the latest work I've made on the Remake engine. I'll just link to the pictures, they're moderately large. Enjoy!

A few more updates to the field module. Finally I've got filtering on *all* the tiles working so no more (well ... almost none :D ) black lines on the backgrounds. Models also have textures working, not that you can really see the faces on this location, unfortunately.

Finally, some graphical display! Not much else to say about this ;)

...the tool I used to test stuff out...

Worklog from the engine.

Scripting and Reverse Engineering / Open season!
« on: 2002-08-22 10:46:50 »
OK ... so I've *finally* updated one of my programs (plug: ). Now I'm actually kind of in a programming 'mood' I thought I might as well throw open to the forum for suggestions ;)

Anyone got bug reports and/or feature suggestions for my programs? I know there's probably been lots of posts about them in the past ... but it'd be cool for anyone who's /still/ got requests to post them now ;)

Oh, and feel free to post anything ... I don't promise anything (requests like "Get FF7Music working perfectly with everyone's computer!" will be answered with a "well, I can *try*"...) but I'm willing to consider whatever's posted :P

General Discussion / Problems viewing forums?
« on: 2002-04-10 22:08:00 » just took me to Qhimm's homepage. Hmm, think I, something's up with the redirection. Sure enough, got me here - but some of the links (New Topic, Post Reply, many graphics) are broken too (had to get the address manually to post this).

Anyone else (I assume so, looks like a server problem)? Can it be fixed?

General Discussion / Remake Project
« on: 2001-12-30 17:42:00 »
The Remake site is back online! No updates on project progress at the moment of course, but hopefully we'll have something new soon.

Anybody who's interested in applying for the project; send applications to Seph3d (storyline) or SaiNt (other applications) and we'll get back to you, hopefully. If there are any good artists out there, we *really* need you! Any other applications will be considered, of course.

Scripting and Reverse Engineering / Ultima
« on: 2001-12-15 16:23:00 »
Since Alhexx's DNS still sucks, I'm posting this news for him;

New version of Ultima's been uploaded to his website. Apparently lots of spiffy new features ;)

General Discussion / SaiNt....
« on: 2001-11-05 07:59:00 »
...have you done something freaky to the board layout again?!

Logged on this morning to find all the colours fuxored. Perfectly possible it's just my PC, of course, but you're suspect #2 :grin:

General Discussion / The Big 10,000
« on: 2001-11-01 10:57:00 »
My god - we've hit 10,000 posts! Has to be good!
(Assuming the counts are correct)

(I guess this is the 10,001st post then...)

General Discussion / The Remake Project: updates
« on: 2001-10-25 20:23:00 »
OK, I'm afraid not much work has got done on the Remake recently ... I guess a lot of us have been starting uni/school again for one thing. However, we *do* have something you might find useful; go to

for a *very* small site. Doesn't contain much that hasn't already been posted on this forum but the good thing is that the site is hosted on the server in my living room (hehe) so it gets updated automatically. In other words, if I do some coding in Delphi on the new engine, the news script picks out new items from my Delphi work log and posts them on the automatically, without me having to do a thing. Hopefully this means you'll actually SEE updates on the site :wink:

I am hoping to start work on my projects (including the Remake) sometime next latest piece of coursework is due in on Monday, so that's all over with one way or the other soon.

Archive / FF8 Configurator
« on: 2001-10-22 22:48:00 »
So I received an email today from someone using the configurator pointing out that you can't use it to change the keyboard settings. Really? Dammit, he's right - you can't! So he's inspired me to fix this :wink:

The upshot is that I'm reopening the Configurator for an update to it. Maybe not in the next few days (for reasons I've detailed on my site) but it IS on my little list of Things To Do.  So, anyone got any things that need fixing with it?

Couple of points:

1) This isn't a major rewrite ... comments like "Make it play MP3's" will be used as fuel to warm my house.

2) This isn't going to be an ongoing thing - it's just that next week when I have time I WILL be working on it, so now's your chance to add support for Other Things.

3) Don't worry, I'm not dropping other programs to make way for this :wink: The Configurator is a low-work job...

General Discussion / Don't you just HATE it...
« on: 2001-10-12 00:43:00 »
...when a program spews random garbage onto your hard drive and corrupts the boot sector and FAT (file allocation tables) of your main data partition?

I've just spent the past three hours frantically trying to repair my data partition. That contains EVERY piece of work I've ever written, EVERY program I've coded, ALL my personal documents ... god. Just thinking I'd lost that was like a nightmare.

After trawling the net for far, far too long I finally came up with Norton diskedit (German version, but hey) which rescued me :wink: Why the %$^&* there aren't more programs that let you edit the boot sectors I don't know...

Oh, wait. I do know. It's because if you ever need to do that, you're fux0red.

Well, if I ever need to repair a boot sector from scratch, at least I know how now....

First thing tomorrow: Burn my WHOLE hard drive to a large stack of CD's. Thank goodness I bought that stack of 100 CDR's earlier this week...

Scripting and Reverse Engineering / Ultima
« on: 2001-08-15 02:54:00 »
Sorry to draw traffic away from your first topic, Alhexx, but 6 pages is getting a wee bit long  :D ...

Anyhoo: Ultima: Latest version: Doesn't run on my PC. Error message: "Runtime error 429: ActiveX component can't create component."

I suspect either:

A) You've used an ActiveX component that's not standard (ie. part of Win9X)
B) Your DLL needs to register itself as an ActiveX component and hasn't.

I don't know which; just my guess.

Scripting and Reverse Engineering / Uber-FF7 is here...
« on: 2001-07-20 21:47:00 »
I was working on something pretty unrelated for the remake when I came across something useful in FF7 ... thought I'd work on it for a bit, and one day on, here I am.

What am I talking about? FF7 in 32-bit colour, MWAHAHAHAAH! MWAHAHAHA! BWAHAHA . Ahem.

Anyhoo, I got FF7 running in 32-bit colour on *my* PC (and spewing out tons of debug messages, but that's not *quite* as impressive). So: Can people try and get it working on *their* PC's now? Download the patches from my website.

Scripting and Reverse Engineering / Tech issues
« on: 2001-03-22 03:41:00 »
OK. I know we're keeping most tech discussion in the open forum, but there are a few things we need to discuss related specifically to the remake. I know that most of these have probably been brought up in the public tech forum already, but I'd like to keep this discussion separate - it is, after all, 100% relevant to the remake only.

The first - main - problem we face is: game engine. For the sake of completeness (been said already, but...) we have 2 options:

1) Use the existing FF7 engine.

-Less likely to attract adverse attention from Square - it makes our remake a patch to the existing FF7 game.
-Reuse all the existing graphics, spells, models, just adding the new ones we need as well.
-Everybody likes it!

-We NEED to figure out *at least* the "script" part of the level files. As anyone following Cosmo will know, we currently have about 90% of the text and backgrounds decoded but nothing whatsoever from the rest of the file - and since the rest could be in absolutely ANY format, it's gonna be hell to decode. I'm not sure if it'll ever be done.

2) Use another engine.

-We can start work NOW. No delays waiting for people to hack file formats.
-Change anything in the engine we need to.

-Can anyone say "Copyright violation?". Sure, any remake is a breach of copyright - but a "mod" to the game is less likely to be contested. We don't need Square pressuring our website hosts to cancel accounts.
-It's not gonna look quite the same. People might be put off.
-MAJOR downloads. Gonna have to recode lots of files.

You'll probably know, I'm somewhat dubious over whether we can decode the script format. (I think we'll never decode every format in the game unless Square release source code, which won't ever happen). Bitmaps were relatively easy - there's only so many ways to store a bitmap, and Square (understandably!) reused an existing format. Same with sound effects. Text - well, you can read some of it yourself once the file's decompressed! Scripts - it's a format invented just for FF7, totally binary (or near enough) - REAL problems.

So where does this leave us?

My preference: Those of us involved in the tech side of things should try to decode the script format. Yes, it's hard, but we should *try*. If we haven't got anywhere by, say, June? then we use our own engine. There's really no other choice.

Something to bear in mind: We can code up our own engine. Why not? That has the BIG advantage that we can program it to reuse *some* of the files from FF7 - like the music, sound effects, text, and some of the 3d data (basically everything we know how to decode!). Major advantage: requires an existing install of FF7, hence making less problems over Square getting p***ed off with us. Don't think it won't happen; IF we ever release this remake (I'm not trying to be awkward here, but it's by no means 100% it'll get finished) then Square could well get stroppy.

So: comments, anyone?

Pages: [1]