Author Topic: Proposal: Nibelheim  (Read 6431 times)

Bosola

  • Fire hazard!
  • *
  • Posts: 1752
    • View Profile
    • My YouTube Channel
Proposal: Nibelheim
« 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:


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:
  • Assume creatures will always act, and do so by taking one action. This action will always be a spell or ability.
  • Scripts only control actions. They do not allow the user to arbitrarily set status flags or set data.
  • Scripts are highly abstracted. They do not expose memory, or the 'compiled' FF7 pseudo-assembler. No inline opcodes.
  • Allow users to export and distribute abstracted scripts in a non-proprietary format
  • Assume users will insert 'compiled' scripts into FF7 data files themselves, using WallMarket / Proud Clod
  • Assume that Nibelheim scripts should be forwards-compatible, and that any Nibelheim release could extend the features of scripts, and the types of data users can access
  • Assume that the application source should be available for others to modify, extend and redistribute
  • Not support decision trees that would fall outside the simple 'flowchart' model / gambit system outlined above
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.
« Last Edit: 2012-05-19 22:50:30 by Bosola »

Vgr

  • Global moderator
  • *
  • Posts: 2163
  • If it quacks like a duck, it must be a duck
    • View Profile
Re: Proposal: Nibelheim
« Reply #1 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.

strife98

  • Global moderator
  • *
  • Posts: 244
  • Doink!
    • View Profile
Re: Proposal: Nibelheim
« Reply #2 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.

Cupcake

  • And then it dawned on me, that Satan is also an old fuck.
  • *
  • Posts: 906
    • View Profile
Re: Proposal: Nibelheim
« Reply #3 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.

Covarr

  • Covarr-Let
  • Administrator
  • *
  • Posts: 3941
  • Just Covarr. No "n".
    • View Profile
Re: Proposal: Nibelheim
« Reply #4 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.

Cupcake

  • And then it dawned on me, that Satan is also an old fuck.
  • *
  • Posts: 906
    • View Profile
Re: Proposal: Nibelheim
« Reply #5 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.

Covarr

  • Covarr-Let
  • Administrator
  • *
  • Posts: 3941
  • Just Covarr. No "n".
    • View Profile
Re: Proposal: Nibelheim
« Reply #6 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.

nfitc1

  • *
  • Posts: 3011
  • I just don't know what went wrong.
    • View Profile
    • WM/PrC Blog
Re: Proposal: Nibelheim
« Reply #7 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.