-
Implementing AI on marmotte's engine
Hi guys,
I'm trying to implement some computer behavior on marmotte's fighting game engine but I'm having some... unexpected problems:
I cannot figure out how and when the functions (like movment_left(), for example) are executed. I was expecting to find a function associated with an event like onEnterFrame on which to place my AI function, but I didn't.
I see that the functions are named like stand_enterframe(), but I simply cannot find where they are used.
Can you explain this a little bit to me?
Thank you.
-
M.D.
from what I remember there are blank movieclips with clipEvents which run code on the frames. There should be a control or brain layer I think
-
Thank you! You are right! There's a layer called "mc_function activation" and a little piece of code is placed there... like this:
Code:
onClipEvent (enterFrame) {
_parent.attack_enterFrame();
}
I think I saw them before, but I'm not used to this way of organizing...
Did you use the same engine when you've created your version of Street Fighter? I love your game! It's.. perfect... The gameplay is fantastic!
Where do you recommend to place some basic AI? I've never tried this before... I guess I'll start with some very very simple ai_getCloser(); and ai_attack(); functions... How should I use them in the source? I saw you are loading the sprites from outside, so, I think you didn't write the code for every character... Can you give me some tips?
Thank you very much for your help.
Last edited by virruss; 03-17-2008 at 06:29 AM.
-
M.D.
marmottes engine is quite old now, I'm sure he would re-write it if he wanted, but the logic still remains. I created my own engine, but its similar, definitely used his as inspiration.
I don't know if there's a golden AI algorithm for a fighting game. But my approach was a state based system. The AI would be put into different states, and within those states act accordingly, sometimes if a condition was met a new state would be entered and therefore give different functionality to the AI.
So yeah, put all your different functionality in seperate functions. Like a basic moveTowards(), jumpAway(), and have bigger functions which handle different behavior: attackBrain(), damageBrain(), defendBrain(), and within those, you run the specific actions you need.
And yes, I didn't write code for every character, only one, so I suggest using a OOP approach to simplify things.
AI extends Fighter extends Entity...
Player extends Fighter extends Entity...
and pass character attributes to the class (Ken, Ryu), because as I quickly found out, ActionScript doesn't support multiple inheritance.
-
DOT-INVADER
WOW, yes now that's a very, very old engine (something like 2003?)!
onClipEvent, haha
Anyway, I did a quick google search, and I found something that can be very interesting for you... http://www.gamedev.net/community/for...opic_id=157327
I did also read many in-depth guides at gamefaqs when I was developing the engine, there are many useful informations there (you should check with games like SF3, MvsC...). Nothing too much AI oriented, but hints.
That, and... I still want to create a fighting game in flash
(That's what I say since years)
-
Patron Saint of Beatings
Originally Posted by marmotte
That, and... I still want to create a fighting game in flash
(That's what I say since years)
Amen, brother ~!
-
Zombie Coder
There's some really indepth books written about how to code 3d fighters (complete with state machine AI routines) down my local bookshop.
Only problem is you'll have to learn Japanese first to read them!
-
IMO Inheritance is the wrong way to go for a fighter AI.
As far as I understand, there is only one "Level" of AI you will need, therefore you don't need to break it up into an inheritance hierarchy. Now, if, for example, as well as a full AI you also had tiny guys that just jumped around you may want to add a second level to the inheritance tree for code reuse.
I would approach it as what it is, a finite state machine, and use the State/Strategy pattern along with composition. This would be much easier to modify and allow you to fit portions of different AI together by splitting each state or subroutine into a separate class (or method, but class would have more benefits).
Of course, since you are aiming to adapt a prebuilt AI to your game, its somewhat moot since I will assume you aren't a strong coder. The problem with AI is that it is extremely difficult to make a cookie cutter solution since every scenario, even if they seem superficially similar, generally requires very different behavior.
I would suggest going for something extremely simple, consider how you would play the game and write down some rules:
- If he is far away, move closer
- If he is charging an attack, defend/run
- If he is in front of you, attack
Etc...
From there make a chain of if... else's to decide what action to take. Depending on the AIs reaction time (Perfect?) and how you choose your rules it could put up quite a fight, although it may be predictable (Throw in some randoms).
Last edited by 691175002; 03-17-2008 at 11:34 PM.
The greatest pleasure in life is doing what people say you cannot do.
- Walter Bagehot
The height of cleverness is to be able to conceal it.
- Francois de La Rochefoucauld
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|