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 4 5 6 7 ... 67
26
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.

27
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.

28
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.

29
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.

30
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: http://phoboslab.org/log/2015/04/reverse-engineering-wipeout-psx

The viewer: http://phoboslab.org/wipeout/

The viewer's source: https://github.com/phoboslab/wipeout/

31
Update: Ficedula's site is currently down, but you can access a cached version of the language specification at http://webcache.googleusercontent.com/search?q=cache:http://www.ficedula.co.uk/Conformer/0.1/Language.html

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
$82
end function

raw function Random: Word
$81
end function

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

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

raw function FindLargest(dword stats): dword
$84
end function

raw function FindSmallest(dword stats): dword
$85
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.

32
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.

33
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.

34
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.

35
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.

36
The site hosting binaries of the excellent pSX emulator, http://psxemulator.gazaxian.com/, appears to have gone down.

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

37
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?

38
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.

39
Gameplay / 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.

40
Gameplay / 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.

41
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.

42
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.

43
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.

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

:-O

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

46
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.

47
I've learned a lot about the process of writing code and what the best practices are mostly through its development.

I've always felt that I've mostly learned by either screwing up and picking up the pieces, or picking up the pieces of someone else's screwup. There's nothing like pulling your hair out after your assumption or shortcut trips you up for learning why not to do it. And I made plenty of mistakes in my FFVII work.

This, incidentally, is why I think it's healthy for junior developers to take ownership of their work and maintain it going forward, so they can learn first hand what does and doesn't work for maintainers.

48
I owe my career to these forums.

I'd always been interested in computers growing up. Since the age of 8 or 9 I was obsessed with tinkering and exploring, and I took every opportunity I could to play with any computer I saw. Growing up, I kept a keen interest in programming and understanding how pieces of hardware and software 'fitted together'. I wrote several (bad) QBASIC programs, most notably 'Space Warrior', a repetitive space shmup with limited mechanics and flickery graphics (I don't think QBASIC's graphics API let me do any kind of double-buffer rendering). For my GCSE in electronics, I took the unusual route of programming a PIC controller in what was, retrospectively, a crude, stack-based assembly language.

But I stopped. Somewhere along the way I convinced myself that programming was outside of my capabilities. Perhaps I was burned by my attempts to program in C++ without the help of the internet and only a few snippets of tutorials I managed to read up on the school computers. Or maybe my other academic goals took over; by the time of my A-levels I'd decided I wanted to go into academia in the humanities. In any case, software was something I talked about passionately, but never pursued.

My plans took a diversion in 2010, though. With the recession in tow and trouble finding work before my planned (and abandoned) postgraduate studies, I found myself with a room, a poorly specced laptop and a lot of spare time. I'm not sure exactly when, but at some point the thought of modding FFVII crossed my mind and I made my first, tentative post on these forums. Somewhere along the way I learned I could gain a great deal from AI scripting, and began programming again for the first time since my teens. With the release of LiBrE (embarrassingly written in retrospect), I'd taken baby steps in my first 'proper' language, Python.

This didn't lead directly into a career as a software developer. But when I'd exhausted my options as a technical writer, then UX designer, my hobby led me to the conclusion that I always wanted to be a programmer. It was with some trepidation, as I still believed I might not succeed, but once I started (as a front end developer) my progress was rapid and my job satisfaction transformed my life. It's egotistical to say, but it became clear pretty quickly that I was an exceedingly strong engineer - much, much more than I'd written myself off as - and once that was recognized my confidence and self-esteem - and much more, my sense of worth - could grow properly.

And so, here we are now. As a self-taught developer I've still a lot to learn and do. And the field I work in has turned upside down over the last three or four years, with new technologies emerging every day. But wherever I go, my path will have started here - a little spark, in 2010.

49
If you want to both hide images and remove them from flow (i.e. so they don't leave a space), use the display: none property / value pair.

Code: [Select]
.post img {
    display: none;
}

50
No need to be so rude, Shard.

But yeah, this should work. Not sure what address you need to play with for coercing the PSX version, though.

Pages: 1 [2] 3 4 5 6 7 ... 67