Qhimm.com Forums

Miscellaneous Forums => General Discussion => Topic started by: Bosola on 2012-05-19 22:45:08

Title: Proposal: Nibelheim
Post by: Bosola on 2012-05-19 22:45:08
Nibelheim is my proposed GUI tool for creating AI scripts for creatures in Final Fantasy VII.

Some of you might be aware of my 'Welder' templates - 'plug and play' pieces of boilerplate script code that could be combined to create hierarchical, semi-randomized enemy AI for difficulty mods and my own, belated 'Rebirth' project. I've been thinking about turning these scrappy pieces of code into something more substantial and actually creating a GUI tool for assembling them together.

Specifically, what I have in mind is a tool broadly modelled on FFXII's gambit controls. For those who never played XII, party AI is managed by stringing together a set of prioritized condition checks, with the highest-ranking true condition winning. For instance, an actor's AI gambits might read:

Code: [Select]
Top priority: If HP < 25%, use potion on self
Mid priority: If ally is KOed, use Life2 on that ally
Low priority: Use attack on random enemy

Normally, the actor will hit random creatures with their weapon, but if an ally is taken down, reviving them takes priority. However, if the actor is in critical health, healing becomes most important, even if other allies are knocked out.

Nibelheim would handle similar decision trees, possibly with a flowchart UI:
(http://i.imgur.com/52ZT9.png)

What's the scope of what Nibelheim would create?

I'm not looking to create a high-level, Turing-complete scripting language that can be compiled into any feasible FF7 AI 'program'. There are constraints around what a Nibelheim 'script' would support, and what a Nibelheim application would do. Namely:
Nibelheim might support some randomized decision making, but would not replace simple templates for 'roulette' AI scripts. I'm thinking AI that makes smart but tactically predictable choices, with occasional random variation.

What would the technology be?

I want to open this application's source, so I don't need the language behind this project to compile into binary. I want an object-orientated, dynamically-typed language that gives me experience useful as a web designer (that's my profession), and that I could potentially deploy in a webapp. As such, I'm thinking about using Javascript, using a technology like Titanium or Adobe Air for distribution.

Why "Nibelheim"?

Because that's where FFVII's monsters were born!

What do I want from you?

The answers to three questions:

1. Would you use it?
2. What sorts of scripts do you write? What types of decisions do your monsters make? What types of scripts would you like to write, if only you knew FF7's AI scripting language better?
3. Would anyone else be prepared to help with this project? Not necessarily as a developer - bugtesters would also be a boon.
Title: Re: Proposal: Nibelheim
Post by: Vgr on 2012-05-21 15:43:25
Very nice idea there Bosola. As a former C++ programmer (I said former! I wouldn't release anything in the near future), I'd be interested to debug and seek for errors. JS isn't THAT different from C++, so it actually wouldn't be that hard.
Title: Re: Proposal: Nibelheim
Post by: strife98 on 2012-05-30 09:51:37
This seems like a really interesting project. I have used the FFXII gambit to the extent of not really needing to do anything as long as it wasn't a boss fight with ridiculous health and attack. So, a tool like this would be really interesting to use. I don't know much about coding or such, but I would gladly like to be a bug tester for it.
Title: Re: Proposal: Nibelheim
Post by: Cupcake on 2012-05-30 18:32:31
Very nice idea there Bosola. As a former C++ programmer (I said former! I wouldn't release anything in the near future), I'd be interested to debug and seek for errors. JS isn't THAT different from C++, so it actually wouldn't be that hard.

You're as much of a former C++ programmer, as I am a former crackhead.
Title: Re: Proposal: Nibelheim
Post by: Covarr on 2012-05-30 18:39:46
Enemies can't revive each other, can they? That flowchart example seems like it'd be better for players than for enemies.

That being said, I really like this concept. I wouldn't want to overuse smart enemies, because even something as simple as enemy behavior (while retaining existing moves and stats) can massively impact difficulty, but I could see this being very useful for coordinating specific enemy groups or bosses.
Title: Re: Proposal: Nibelheim
Post by: Cupcake on 2012-05-30 18:53:47
Enemies can't revive each other, can they? That flowchart example seems like it'd be better for players than for enemies.

That being said, I really like this concept. I wouldn't want to overuse smart enemies, because even something as simple as enemy behavior (while retaining existing moves and stats) can massively impact difficulty, but I could see this being very useful for coordinating specific enemy groups or bosses.

Enemies can most definitely revive each other.  Look at the SAMPLE boss in the Shinra building, or Gi Nattak.
Title: Re: Proposal: Nibelheim
Post by: Covarr on 2012-05-30 19:09:09
Enemies can most definitely revive each other.  Look at the SAMPLE boss in the Shinra building, or Gi Nattak.
My bad! I was thinking enemies were removed from play once they were killed, because of the whole "turn red, fade out" animation.

It's been far too long since I've actually played this game through.
Title: Re: Proposal: Nibelheim
Post by: nfitc1 on 2012-05-30 19:42:55
I was thinking enemies were removed from play once they were killed, because of the whole "turn red, fade out" animation.

They're actually still there in memory, just untargetable by the player. There's nothing stopping AI controlled actors from targeting inactive actors with actions.