Skip to main content

News

Topic: Spectacles: Bruce's Story (Read 36747 times) previous topic - next topic

0 Members and 1 Guest are viewing this topic.
  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #45
Zombie is actually one of my favorite FF statuses because it's so balanced (despite my picking on it my last post).  The fact that the final boss of FFX is not immune to it is a testiment to that: A well-designed enemy AI can compensate for it.  That balance is exactly what I'm shooting for with all statuses in Spectacles.  That I was able to set up a final boss that doesn't have a single immunity shows it's working. :-)

But wait, you mean to tell me that two zombies in FF can heal each other correctly?  How did I not know this?!  That would have made the battle with a certain ancient summoner so much easier...
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #46
So my latest commit on GitHub for this is not gameplay-related at all, but something lower-level than that: an overhaul to the AI engine.  My original system, for as powerful as it was, was ultimately pretty basic: The battle engine calls a strategy function on the enemy class and performs the action it returns.  Well, technically I had a queuing system in place so the AI didn't have to be called every single turn, but the effect is ultimately the same.  The system led to some pretty dumb bosses overall; most of the seeming intelligence came from the fact that the strategy function had access to the turn predictor.

The new system is much more flexible.  It's object-oriented, allowing the AI to maintain its own state (the old system had rudimentary support for this through a data object, but it was still very clunky), and--here's where all the flexibility comes in--event-based.  The .strategize() method is still there to choose moves, however the AI can hook events on the underlying BattleUnit to adjust its strategy in realtime based on what happens to it, the same way a human player might.  For example, the Headless Horse has a two-turn move (Rearing Kick) where, if the attack is interrupted during the first turn by hitting it with a physical attack, it retaliates with Flame Breath, which hits the entire party and Ignites them.  This wasn't possible with the old system, where enemies could only act on what was known on their turn, meaning things like units' current health and magic, stats, that kind of thing.  Now they can also track things like what attacks are used against them, who is attacking them, etc., allowing for much more dynamic strategies.
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #47
Just posted a new battle engine demo, showing off nearly the full potential of my battle system, as well as the awesome "Hollow Mind" AI engine.  Check it out, and try to beat Robert Spellbinder! :D

...I promise he's beatable this time, I swear!  My beta tester has managed to do so several times. :)
  • Last Edit: April 23, 2014, 10:28:29 am by Lord English
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Rahkiin
  • [*][*][*]
Re: Spectacles: Bruce's Story
Reply #48
Too bad there is no working Sphere engine for OSX. I would really like to play it.

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #49
So has anyone tried the new demo yet?  I really want to see what everyone's reaction to the AI is.

I also just updated the version linked in the OP to the most recent version as of today, which includes the full implementation of the Stance system I mentioned earlier in the thread (the last one had a rudimentary--and glitchy--prototype implementation).  For convenience, here's the Google Drive link:
https://drive.google.com/file/d/0BxPKLRqQOUSNdHR2akhMYmhwdGM/edit?usp=sharing

Edit: Just re-uploaded the demo to fix a severe bug caused by the recent Link update--if you changed to a non-attacking stance, you would get locked into it permanently!
  • Last Edit: April 27, 2014, 12:55:39 pm by Lord English
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Radnen
  • [*][*][*][*][*]
  • Senior Staff
  • Wise Warrior
Re: Spectacles: Bruce's Story
Reply #50
That battle is nearly impossible for me! I don't see any healing items, possibly because the graphics/descriptions are not there. Also, my moves just deal next to nothing against the opponent and I can die in two moves.

I don't know man, just because you had a playtester defeat him doesn't mean it can be done so easily. He developed a trick and optimized around it, this always happens in focused playtesting. Not until you put it into the hands of someone who hasn't played your game before do you realize things like difficulty, UI and controls being either perfect or awkward.

That said I think the UI is rather good, and  I know the graphics will come later.

After some time I was able to get a bit further, the super tonic seems to heal you for a lot but then sometimes it insta-kills you and I don't know why. Maybe because you become a zombie? I'm lost at that stage. All in all I can barely get his health down by 10%. :/
If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

Sphere-sfml here
Sphere Studio editor here

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #51
Okay, here are a few hints:
- Healing damages you if you're a zombie, use Holy Water to remove. (Necromancy inflicts Zombie)
- Higher ranked attacks set you back further in the turn order
- Rank 3 magics (Hellfire et al.) inflict statuses.
- Crackdown reduces damage from consecutive attacks of the same type
- Alcohol is a full heal (excluding zombie) but makes you drunk
- Red Bull restores all MP; MP also regenerates slowly over time
- You can switch to Counter Stance (default key: C) for a double-powered reprisal against an incoming attack, or Defend Stance (default key: V) to halve damage or endure an insta-kill with 1HP.
- Vaccine grants immunity to most statuses for 3 turns

He's definitely beatable - you just have to manage your turns and resources right and make good use of statuses.  But it's not meant to be easy--even I can't beat him 100% of the time!
  • Last Edit: April 27, 2014, 02:00:29 pm by Lord English
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Radnen
  • [*][*][*][*][*]
  • Senior Staff
  • Wise Warrior
Re: Spectacles: Bruce's Story
Reply #52
I guess I'd have known more of those tricks if I were to play a full game! :P It's been some time since I played any FF game and I didn't know exactly what mapped to what. I'll definitely consider more of those combos the next time through.

But yeah, if you develop more of the game then people can have an introduction on statuses like zombification etc. by playing through it. I was partially lost during that battle since I was like thrown into it all of a sudden. I'm sure it's fine, and I can't honestly say if it's balanced well enough until there is more of a game.
If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

Sphere-sfml here
Sphere Studio editor here

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #53
To be fair, I wasn't really looking for critique on balance yet.  Like I said, the battle is winnable, which is what matters for the purposes of the demo.  What I was actually hoping for was reactions to the AI.  I've created what I think is a very intelligent boss with no "computer is a cheating bastard" factor at all; I was showing off the power of my AI engine. :D
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Radnen
  • [*][*][*][*][*]
  • Senior Staff
  • Wise Warrior
Re: Spectacles: Bruce's Story
Reply #54
Well it felt like an FF game that's for certain! The AI I think seems pretty solid. But to be sure I'd like to see more battles with it, however I think it's really quite good. Then one day someone will come along with an exploit or two. :P
If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

Sphere-sfml here
Sphere Studio editor here

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #55
It's funny you mention exploits; there are actually several ways you can exploit Robert's AI right now that I purposely left in just to make the fight feel more realistic, and then just rebalanced around them.  It takes away from the fun when the AI is too perfect!

In case you were wondering, what I was referring to when I said there was no "cheating bastard" factor earlier is that, literally, the computer doesn't cheat.  Hollow Mind is built on the premise of the CPU observing what happens in the fight the same way the player does--what attacks are performed, items utilized, etc.--and deciding what to do based on what it sees.  For example, Robert will defer his first use of Necromancy if you use your Vaccine in the beginning of the fight, waiting until the immunity wears off to cast it.  This is done internally exactly the same way a player without access to the enemy's current status would: After observing that Scott used a Vaccine, count turns until the immunity is due to expire, then cast Necromancy.  Not once does the boss directly read the player's statistics, only his own.

To put this as succinctly as possible: The AI is imperfect by design. :)  And it's STILL a challenge! I like to think that's pretty impressive.
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Radnen
  • [*][*][*][*][*]
  • Senior Staff
  • Wise Warrior
Re: Spectacles: Bruce's Story
Reply #56
So you hard-code these behaviors in? Because unlike a human, there could be hundreds of possibilities. We have the ability to think on our feet so to speak.
If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

Sphere-sfml here
Sphere Studio editor here

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #57
Some are hard-coded, others are decided by an RNG roll with dynamic odds.  For example, the chance of Robert re-casting Necromancy after curing it goes down with each action taken between--simulating complacency.  The point is that the trigger itself always activates--it's up to the boss's AI to decide if and how to act on it.  Obviously the ultimate method of attack selection is quite different from a human player, but there's enough of a balance between hard-coded behavior and RNG use that it gives the illusion you're fighting a real battler as opposed to a computerized simulation of one.  Which is honestly a lot more than I can say for most of the FF bosses I've fought.

But yes, the AI can think on its feet to some extent.  A great example of this is if you try to exploit zombification to do a ton of damage to Robert with Power Tonics.  His usual mode of action in that case is to use a Holy Water as soon as possible to cure the status, heal himself, then blast the player with magic.  But this move combo is not set in stone: If you re-zombify him immediately after Holy Water, he substitutes the healing for Desperation Slash, an instant-kill attack.  This in turn can be countered by the player by having Scott Defend to endure the insta-kill, heal, and continue on.

Another example of this: In the fifth phase (after a certain... um, pivotal event), as the battle is winding down, he hits you with one final Rank 3 magic, either Hellfire or Windchill, to try to kill you with residual damage.  Which one he uses is decided on who got more turns over the course of the fight.  If the player had more turns than the boss, this means they are likely turn-whoring (as Robert is faster than Scott) and so casts Windchill, since Frostbite does more damage per hit than Ignite.  This is information not directly available at the time the attack is decided, but the AI is able to compile it over the course of the fight by hooking the unitReady event and observing the turn patterns. Even though the behavior is hard-coded, it's quite a bit more complex than "Oh hey, the player just did that, let me do this as a countermeasure and hope it works".  Decisions can be made based on anything that happened at any point in the fight, just as they can for the player.  And sure, there are lots of ways you can exploit it.  But there are lots of ways you can exploit a human player's assumptions as well!

Essentially I designed the AI with the assumption that the player WILL try to find exploits, and balanced the difficulty from there.  This ensures that there are multiple viable strategies to win (essentially turning the exploits into full-fledged strategies), making feel like a real boss battle instead of just a glorified puzzle, while at the same time minimizing the chance of gamebreakers arising.

If it makes you feel any better though, the difficulty of the demo as posted was indeed way too high--my playtester confirmed this. :-[  I've since made a few modifications, available on GitHub, that bring it back to being a fair fight.  For example, reducing the rank of Defend and increasing the base power of counterattacks.
  • Last Edit: April 28, 2014, 09:56:10 am by Lord English
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Fat Cerberus
  • [*][*][*][*][*]
  • Global Moderator
  • Sphere Developer
Re: Spectacles: Bruce's Story
Reply #58
So I have to apologize, the demo I posted above turned out to have the difficulty set much too high. :-[  Here's a version that's much more fair:
https://drive.google.com/file/d/0BxPKLRqQOUSNbXBfbFprMVVOMm8/edit?usp=sharing

I will also update the OP to link to the new version.  Hard to get a feel for the AI with an unwinnable fight!
neoSphere 5.9.2 - neoSphere engine - Cell compiler - SSj debugger
forum thread | on GitHub

  • Radnen
  • [*][*][*][*][*]
  • Senior Staff
  • Wise Warrior
Re: Spectacles: Bruce's Story
Reply #59
Much better at that difficulty. I can only get him just below half health before I run out of all useful items. :/

The zombie/tonic combo is really great but reduces the tonics you can use on yourself. The higher mp spells do lots of damage but the mana goes down quickly. I actually feel threatened more by the resources than the boss. :P

With wiser healing choices I think I could have lasted, but it's a marathon like any good boss challenge. Is this a simulation of the first boss or last boss of the game? Is the players items and level right as they should be? Or is this demo just a giant what-if for testing purposes? Because I think as a standalone it's great but depending on how you levelled before the boss - what skills you invested more in can determine how it's played out.

Sometimes FF bosses may feel awkward since you might have made a character build slightly off from one that would see the boss at that time if they followed a more normative leveling approach (whatever that is). I feel a robustness test can really only be done with an actual Act I (for example) to play with.
If you use code to help you code you can use less code to code. Also, I have approximate knowledge of many things.

Sphere-sfml here
Sphere Studio editor here