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

Pages: [1] 2 3 ... 67
What we have is a polished up version of the setup system they used to test the job classes. It's very likely that enemyskills were meant for Red XIII (Cait Sith maybe too). The game would make even more sense with Job Class Materia, because you would use the abilities of a Cetra or Cetras.

That's a really interesting idea: that the original plan was to have materia bound to archetypal character classes. Where did you hear that?

General discussion / Re: The voice in clouds head ....
« on: 2016-10-17 20:38:45 »
Yes, 'clones' is a very unfortunate choice of terminology indeed. When Sephiroth reveals Cloud was never the man he thought he was, I'm sure a lot of players interpreted 'clone' to mean Cloud was some kind of artificial, genetic copy, grown in a vat somewhere.

I'm not sure what translation I'd use myself. 'Derivative'? 'Imitation'? 'Analogue'?

FFVII's monsters are probably the weakest element of its design. Now, I have an interest in saying that - I've worked on a mod for several years (on and off) that drastically modifies enemy stats and formations - but the world map encounters are the most clearly insipid of the bunch. Enemies are slow, hit for trivial amounts of damage, rarely inflict status effects and are essentially interchangeable. Their graphic design is vibrant and varied, but that becomes a problem in itself when that creature design itself is so random and arbitrary.

Enemies are rarely explained or have much to do with their surroundings. They generally do not follow any consistent rules for status or elemental vulnerabilities, and their statistics are mostly interchangeable. We can all remember what a Zuu looked like, or a Yin-Yang, or even a Vlakorados, but can you remember what their attacks were? Any special tactics they demanded? Even the bosses were mostly copy-pastes of each other with incremental stat raises.

Edit : Interestingly, Jenova-birth's standard laser attack does about 175 damage to characters in the front row and half that to characters in the backrow, even though it is NOT listed as a short range attack and should not be affected by the row modifiers

All enemy attacks are treated as short-range. See here:

Because - FFIX is perfect!

As Dan says, though, it's a much more rounded and polished title. It examines all of its forebears and takes what works from each: the aesthetics of the older titles, a skill system like Tactics', ATB from the later games, a villain fleshed out from VII's, and an engine that built on what PSX developers had learned by the time of that consoles' maturity. It couldn't have come at any other time.

Completely unrelated / Crash Bandicoot disassembly
« on: 2016-03-03 22:31:24 »
It turns out there's a small group of developers who've taken to reverse engineering the Playstation-era Crash Bandicoot games.

There's a very thorough Crash 1 disassembly document over on Github, some file format docs for both the released games and the Crash 1 prototype, a Crash 2 port in C and even - and this is really impressive - a Crash 1/2/3 level editor.

Star Wars: Episode VII was quite an achievement! Specifically, what it achieved was to make George Lucas retrospectively appear a competent and inventive steward of the series. It was not a sequel, it was a reboot in exactly the same manner as all the other franchise reboots from the last five years: a vampiric pastiche of everyone's treasured memories from the original series, leaping from scene to scene hell for leather, relying on the fans' memory of Ep. IV/V to give those scenes meaning and plot significance when the film itself can't be bothered to.

It is quite a cynical and lifeless film, and I'm left wondering if Star Wars is really a franchise trapped by its reputation, too expensive and too big to innovate further. What once seemed like intransigence on Lucas' part now seems quite wise - he never let fan expectation box in his vision, even if that meant taking a few missteps now and then. His films always tried to expand the universe and the franchise, and whilst aiming his films at kids alienated many fans, at least Lucas tried to grow the franchise, in that sense, not just sit on top of it like Disney and collect its annual Star Wars tithe. I think we will never see another truly exciting Star Wars film again.

hey guys

do you guys remember when this whole board used to go under alot of stress a long time ago

Sure, I remember 2014.

Other Modding / Re: valid link?
« on: 2015-06-24 20:13:17 »
There's a whole plethora of links in that post - which ones in particular are you worried about?

You might find it easier to simply test them all yourself.

Completely unrelated / Reverse Engineering WipEout
« on: 2015-04-17 09:12:51 »
Someone has reverse-engineered WipEout's (PSX 1995) texture format and written an in-browser WebGL track viewer in JavaScript.

The blog post:

The viewer:

The viewer's source:

Update: Ficedula's site is currently down, but you can access a cached version of the language specification at

I've also sent a PM to the OP to see if they can get the server up and running again.

Also, RE: a reference for common functions like LoadStats: there's a text file in the package (common.conformer) full of function declarations. Here's its text:

Code: [Select]
#Some common battle values that you'll probably want
const word^ Enemies := $20A0
const word^ ActiveEnemies := $20B0
const word^ Targets := $2070
const word^ Allies := $2080
const word^ ActiveAllies := $2090
const word^ Me := $2060
const word^ AllCreatures := $2050

const word^ StatCurrentMP := $4140
const word^ StatMaxMP := $4150
const dword^ StatCurrentHP := $4160
const dword^ StatMaxHP := $4180

#Kinds of attack
const byte ENEMY_ATTACK := $20

raw function PickRandomBit(word w): dword
end function

raw function Random: Word
end function

raw function Perform(byte kind, word ability): void #Note attack kind FIRST, not ability code!
end function

raw function LoadStats(word chars, dword stat): dword
end function

raw function FindLargest(dword stats): dword
end function

raw function FindSmallest(dword stats): dword
end function

I assume packages can just be added to the root of the Conformer directory and called in the same way as Common using the 'import' keyword.

I also notice that opcodes can be inlined by just adding them as hex numbers.

This is a great piece of work that I think the community has been wanting for quite some time now. I did have the idea to do something along these lines, but it was a daunting prospect to write a compiler, and to be honest, I don't think I'd have ever got around to it.

Now I can write AI scripts as I like, without the ardour of manually scripting, debugging and editing. I can write scripts in a high level language, keep them in version control, and re-compile scripts as and when the compiler improves. This is absolutely the way we should be doing modding - not scrabbling around with binary files. Such an approach just isn't scalable in a large project.

I do have a couple questions, though:
1. How confident are you in the output of the compiler? Would you say it's fairly reliable?
2. Is there a reference for some of those inbuilt functions, like 'LoadStats()'?

...And once again - well done.

Why does everyone just give up when it comes to animations? This is why we'll never have 60 fps effects, ya'll. Stop giving up.

I agree; it's strange for a reverse engineering community to throw its hands up in the air and declare stuff impossible. It's not like it's obfuscated; it just requires patience and skill. We're not going to get anywhere if we treat FFVII like a big scary black box.

FWIW I think shortening the animation will be the easy part. The difficult part will be alternating between long and short animations, FFIX-style. We would have to add some extra hook into the animation scripts for the anim handler to look for. I don't know how stateless animations are; it's probably not just a matter of starting at point X in a script.

Certainly doable if we reverse it, though.

Completely unrelated / Golang?
« on: 2014-12-02 19:59:15 »
Has anyone here ever played with Golang? What's people's opinions with it? It looks quite interesting at first glance; kind of like a cleaned up C++. I was going to look at Node for web development but it seems to me that Go's Goroutines are a lot more intrinsically attractive than the various workarounds for callback hell in server-side JavaScript (promises etc.)

I was going to have a play with Scala over the holidays but maybe Go might be more interesting.

If you wish to share state between multiple actors in a battle, you should use the battle variable block. This is what the Manholes use to copy their stats across to one another.

I can't remember if there are any restrictions on pushing and pulling from the global vars. Possibly writes to the globals are not synchronous and are only performed at the end of battle. Someone else will know better.

The site hosting binaries of the excellent pSX emulator,, appears to have gone down.

I've added a mirror on my own domain and sent a message to the owner over Twitter.

Completely unrelated / Re: Need new high-end laptop
« on: 2014-10-12 20:51:23 »
Must it be a laptop? And what's your budget?

Orthogonality is key for any modding ecosystem. Plus, a framework or DLL allows for cross-mod dependency management. I can't see why you wouldn't do this.

Gameplay Modding / Re: Final Fantasy VIII AI info
« on: 2014-09-07 23:26:53 »
It sounds like you're talking about a list of commands - attack IDs - just mapped to conditions, am I correct? I'm talking about a proper scripting language with variables, flow control and direct access to battle functions.

Anyway, OP, I'm sure I've seen a thread at some point detailing an (incomplete) reverse of the enemy scripts. I will try and find it for you.

Gameplay Modding / Re: Final Fantasy VIII AI info
« on: 2014-09-07 21:06:02 »
Monster AI is probably done much in the same way as in the RPG maker series. Each monster has a full list of commands and a percentage chance to use them given certain conditions (health, who's in your party, etc).

What makes you say that? VI and VII both have fully-fledged script engines, and there are lots of scripted sets of actions in FFVIII battles.

I'm all for this idea. I liked the idea of your blocks "way back when", but if you make this online, can you make a way for other users to build their own conditions for others to use? There's lots we don't know still and undoubtedly things that one person won't consider.

I intend to GPL any tool(s) I create, and I can't see why I wouldn't put templates in their own module for extensibility's sake. If I have the time I'd quite like to write some template unit tests that can check whether a template creates well-formed scripts, whether it leaves the stack in the right state, etc. A simple state machine should be enough - perhaps as a separate project that others can use standalone. With unit tests, adding new templates should be a lot simpler; anyone who runs a new template against them should just be able to make a pull request (or add it to their fork). Testing that AI scripts don't crash the battle engine is quite time consuming, so unit tests are really important.

Sounds like it'd be a handy time-saver, but a key thing will be how much control the user has over the conditions. If they can mix and match them together then it'll be fine, otherwise it'll be quite restricting (for instance, if I was making this example script with the proposed tool would I be able to tack on Random MOD or a Reflect check to the Cure condition block? Or do I need to use a pre-made block?)

I see templates as being relatively restrictive in control flow but quite liberal in variable use. They'll need to translate fairly easily into script blocks. But there needn't be any limit on the number of templates, and obviously they should be abstracted such that you could specify which variables to check. As I see it, though, no GUI tool is going to be able to match the absolute flexibility of a real script, and I don't have the time or the skill to write a compiled language for FFVII scripts, so this should aim to be a half-way house providing simple scripts that cater to the most common use-cases.

We've had Hojo. We've seen Heidegger, later Proud Clod. White Choco and Black Choco have been claimed. Meteror, Palmer, and Ochu have been used as editor names too. There's one big name missing, and I'd like to fill that gap. That name is Sephiroth. And rather appropriately for someone who manipulates people, I think he'd be suited to an AI editor of some kind.

My proposal is a GUI AI script builder broadly based around the AI templating snippets I wrote way back when, taking a similar concept to FFXII's gambits. You build a script by creating a 'decision flow', essentially a list of 'possibilities'. Each possibility has a condition and an associated action. We build an AI script by giving each type of possibility a template, which can produce 'meta script' with symbolic addresses which we can fill in fairly easily in a single pass, as the templates each have a fixed length. Each template leaves two values on the stack - a target and an action ID - and each script ends by executing those items and calling the standard script exit function.

I've got a pretty decent idea how I'd implement this. I'd probably use web technologies as I did with the FFVII calculator, meaning a JavaScript application that can be packaged as something desktop-shaped if needs be.

I managed to get a basic UI up and going just now using a few of the frameworks I expected to use. That's the easy part, but perhaps it shows exactly how something like this might fit together:

What do people think? If it's something people are really keen on I reckon I could get something up in maybe a couple of weeks.

FF7 Graphical Releases / Re: [REL] Red Werewolf
« on: 2014-09-05 22:25:44 »
Are you guys still struggling with generating ff7.exe patch files? Bdiff and xdelta might be useful tools. There's a project named 'Xdelta UI' that provides a Windows frontend for creating and applying binary patches.

@Wolfman - I can't really help with modifying limits, I'm afraid. All I can say is that remapping animations can be a lot of hard work. Good luck all the same.

...Why did you need to play with only one hand?


A great piece of work, LB. Thanks for the contribution.

Searching the disc image won't work; you're assuming the executable is unencoded and uncompressed. No, you're going to have to trace writes to the memory location where the instruction lives, then follow the writes back to a disc access instruction.

It won't be a convenient process but I can't see how else you would do it.

Pages: [1] 2 3 ... 67