(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
05-27-24 11:47 PM
0 users currently in SMW Hacking.
Acmlm's Board - I3 Archive - SMW Hacking - AI attempt at SMW New poll | |
Add to favorites | Next newer thread | Next older thread
User Post
GeniXPro
Newcomer


 





Since: 06-04-06

Last post: 6566 days
Last view: 6566 days
Posted on 06-04-06 11:02 PM Link | Quote
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.
Tatrion
<_<;


 





Since: 11-17-05

Last post: 6309 days
Last view: 6308 days
Posted on 06-04-06 11:16 PM Link | Quote
Interesting to say the least... what are your plans for it? Would you want it to be an external application that could control the emulator, or a hack inserted into the ROM itself, making it unuseable to actually play?

I'd give actual coding advice, but eh, see my avatar. I know nothing about any programming language you might use to program a SMW bot.
Skreename

Giant Red Paratroopa


 





Since: 11-18-05

Last post: 6314 days
Last view: 6308 days
Posted on 06-04-06 11:57 PM Link | Quote
It strikes me that it would be harder than you think... But I'm not sure. You have to take into account the actual path to get to the end of the level; you could try to figure the path out when the level is initially opened, but... still seems kinda hard to get it into terms for a computer to learn.

(Take Vanilla Secret 1 for instance. I can't think of any real way to make it so an AI player would be able to figure out how to get through that level AND the normal left-right levels without getting into something INCREDIBLY complex.)
GeniXPro
Newcomer


 





Since: 06-04-06

Last post: 6566 days
Last view: 6566 days
Posted on 06-05-06 07:19 PM Link | Quote
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.
Add to favorites | Next newer thread | Next older thread
Acmlm's Board - I3 Archive - SMW Hacking - AI attempt at SMW |


ABII

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

Page rendered in 0.036 seconds; used 365.48 kB (max 435.09 kB)