(Link to AcmlmWiki) Offline: thank ||bass
Register | Login
Views: 13,040,846
Main | Memberlist | Active users | Calendar | Chat | Online users
Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album
06-29-24 02:21 PM
Acmlm's Board - I3 Archive - - Posts by GeniXPro
User Post
GeniXPro
Newcomer


 





Since: 06-04-06

Last post: 6598 days
Last view: 6598 days
Posted on 06-04-06 11:02 PM, in AI attempt at SMW Link
Hello, I've come with a proposition and i'm seeking advice.

I want to make an AI for SMW. An AI that does not use pre-recorded sequeces of moves, but it actually plays teh game (and various hacks of it).

I've been looking into how to approach this and I've found little help. I'm planning on making a modified version of Snes9x that will play the game. I've been looking at http://www.smwcentral.net/?p=map&type=ram in order to get some information about how to approach this, and so far, I haven't found much. Apparrently, there is little information about how maps and sprites are stored in memory.

So far, I've learned how I can input controls into the game, by modifiying $7E:0015 and $7E:0016, I can control marios movement. I've also found that I can get the end-point position, and thus, I can do the basic action of getting mario to run towoards the endpoint, ignoring everything else, (I haven't actually attempted this, but I have deferred that it is possible).

What I hope to do at the start, is to examine the sprites surrounding mario. He will find any of them that can hurt him, then calculate all possible jump-paths in order to find a way arround it. It will execute the jump when needed.

This may seem silly or impossible, but I think its quite do-able, provided te simplicity of Super Mario World, it may not be impossible to make an AI to play it. The AI by no means has to play it like a human, but it should be able to beat the game (in the end).

So, I'm wondering how to approach this. Should I jump right in and add a memory examiner into Snes9x (one that updates itself automatically and shows it, unlike the Cheats menu which does the same thing)? That seems like a first step, provided that I have to figure out how sprites are recorded in ram.

As soon as my code can make its own image of the level so it can examine it, the rest comes mostly easy. I could use navigating-points on all non-dangerous sprites that would allow mario to manouver through odd maps like Yoshis Island #2.
GeniXPro
Newcomer


 





Since: 06-04-06

Last post: 6598 days
Last view: 6598 days
Posted on 06-05-06 07:19 PM, in AI attempt at SMW Link
I have no intention to do something complex at the start. Heres my plan on navigation:

The algorithm bassically makes a "point" map comprising of all points arround sprites on the level. This, for the most part, would be the top of walkable portions of the level. (Modified version of this for water levels.). In the naive version (without nesseccary shortcuts), it would then calculate every point that is reachable by another point. This would use the a jumping formula in the shape of a parabola, as if you notice, that is the shape that mario falls in (however, he has a maxima vertical speed, so its only a parabola at the top, but i will handle that sufficiently). This is certainly a brute force approach to navigation, but indeed its possible. He will then use something like A* or Wavefront to make a path to the desired end point, and than go for it.

That is basic navigation, many levels will require allot of special cases in order for the bot to be successful.

And by the way, I intend to do this in C++, as its the only language that I'm familair with that has an emulator written in it. And I intend to do this by adding in a frame-by-frame memory examiner and modifier into Snes9x, every frame it checks for particular circumstances, then modifies the location in memory that takes controller input.
Acmlm's Board - I3 Archive - - Posts by GeniXPro


ABII

Acmlmboard 1.92.999, 9/17/2006
©2000-2006 Acmlm, Emuz, Blades, Xkeeper

Page rendered in 0.014 seconds; used 348.88 kB (max 406.59 kB)