top of page
Search
krramos8732

Nostale Mini Game Bot: A Source Code of Memory-Based Botting



Nostale (The Tale of Nomads ofSilver Spirit) is a free fantasy MMORPG with cartoon graphics thatwas launched in Korea in 2006. This game can now be played in manyother languages including English, Japanese, French, and Chinese.What has caused the international expansion of this game? Two keyfeatures have played a major role in the game's expansion, Nosmatesand Mini Lands. Nosmates, along with pets, serve as companions tocharacters. Nosmates are essentially NPCs that can be equipped witharmor and weapons. Think of a henchman from Guild Wars Nightfall andyou will not be too far off. This feature is nice, but the moststandout feature of the game has to be the Mini Land system. A MiniLand is a piece of land owned by a character for various things suchas having a house, training Nosmates, and playing Mini Games. Thisfeature gives players a sense of ownership that is lacking in mostMMOs. More MMOs need to allow players to own a small piece of thegame world. Along with specialist cards that allow run-of-the millclasses to be expanded, Nosmates and Mini Lands make Nostale a greatgame for any casual MMORPGer to try.




Nostale Mini Game Bot



Author: tottalylocoRating: 10Comment: This game is fantastic. I finally found a game this goodafter months of searching for an MMORPG that isn't all aboutgrinding.Gameplay: Fantastic! You can have your own little army of NPCs andpets and the missions are almost all story-based instead the usualkill quests. This game has fantastic dungeons that you have to findthe exit or something else...original!


Graphics: Its a very dynamic kindof view that is not totally like Pirate King like another reviewer,said but just a little bit betterTotal: Nostale gets a 9.5 because the gameplay is something that you have never seen before. I know because I have played almostall of the MMORPGs.


Yes also, i agree with that. I know there are problems related to the man-power; however, criticizing the problems is our duty as players. For example, there are problems related to the "ticket responding period", we all know that the problem is caused by the lack of administrators; however, if we do not criticize the problems we can not stimulate the formation of a better Game Team.


This tutorial teaches how to write a bot that can automatically play the Flash game Sushi Go Round. The concepts in this tutorial can be applied to make bots that play other games as well. It's inspired by the How to Build a Python Bot That Can Play Web Games by Chris Kiehl. The primary improvement of this tutorial is it uses the cross-platform PyAutoGUI module to control the mouse and take screenshots. It is documented on its ReadTheDocs page.


Sushi Go Round is a resource management game similar to "Dine N Dash". You fill customer orders for different types of sushi and place them on the conveyor belt. Incoming customers may take other customer's sushi orders, forcing you to remake orders. Customers who wait too long to get orders end up leaving, costing you reputation. Angry customers can be placated with saki, but this bot does not make use of that feature. Ingredients will have to be ordered as they get low.


I've refined this bot so that it can successfully play all the way through the game, ending up with a score of about 38,000. The top scores are a little over 100,000, so there is still room for improvement with this bot. You can watch a YouTube video of the bot playing.


And finally set up some global variables which will store coordinates for various things in the game window. The GAME_REGION variable stores the position of the Sushi Go Round game itself. Once that value has been acquired, the setupCoordinates() function (described later) will populate the values in these variables:


The main() ties together the code that runs from the very start of the bot program. It assumes that the Sushi Go Round game is visible on the screen and at the opening start screen (which has the flashing "PLAY" button).


Computer vision and optical character recognition (OCR) are major topics of computer science. The good thing about Sushi Go Round is that you don't need to know any of that because the game uses static 2D sprites. A california roll in the game will always look the same down to the pixel. So we can use PyAutoGUI's pixel-recognition functions to "see" where on the screen different objects are.


The location of the game window itself will be stored later in the GAME_REGION variable, which holds a (left, top, width, height) tuple of integers. (The (left, top, width, height) tuples are used throughout PyAutoGUI.) These values are visualized in the following graphic:


To find the game window, we search for the top-right corner image, which is stored in top_right_corner.png. (These image files are included in the zip file download.) Once this image is located on the screen, the GAME_REGION variable can be populated.


Note that running PyAutoGUI's image recongition takes a relatively long time to execute (several hundred milliseconds). This can be mitigated by searching a smaller region instead of the entire screen. And since some objects will always appear in the same place in the game window, you can rely on using static integer coordinates instead of image recognition to find them.


Many of the buttons in the game's user interface will always be in the same location. The coordinates for these buttons can be pre-programmed ahead of time. You could take a screenshot, paste the image into a graphics program such as Photoshop or MS Paint, and find all of the XY coordinates yourself. But this tutorial has done this step for you. The other coordinate global variables are populated in the setupCoordinates() function. Note that they are all relative to where the game window (whose coordinates are in GAME_REGION) is.


Since the SKIP button in the game is flashing, the pyautogui.locateCenterOnScreen(imPath('skip_button.png'), region=GAME_REGION) call might not be able to find it if it is flashing in the other color than skip_button.png has. This is why there is a while loop that keeps searching until it finds it. Remember, locateCenterOnScreen() will return None if it can't find the image on the screen.


When you order ingredients they don't arrive immediately. If you used image recognition for the numbers in the lower left corner of the game window it would require grabbing tons of screenshots and slow down the bot. Instead, since orders take less than 7 seconds to arrive (which is why the NORMAL_RESTOCK_TIME is set to 7), the ORDERING_COMPLETE can store unix timestamps for 7 seconds in the future when INVENTORY can be updated.


Customer orders appear as dish images in word bubbles above their heads. PyAutoGUI's image recognition can be used to scan this region of the game screen and match them to the images in california_roll_order.png, gunkan_maki_order.png, onigiri_order.png, and so on:


This is an important check: if the bot starts clicking on ingredients when the rolling mat is occupied, then the bot's INVENTORY dictionary will contain an inaccurate count of ingredients, leading to other mistakes and eventually losing the game.


Just before the rolling mat is clicked though, the bot will check the conveyor belt for any excess dishes that weren't picked up by customers. While this is a waste of ingredients, these excess dishes tend to pile up (especially in the later levels), and slow down the bot from serving dishes to the point that it could lose the game. The call to findAndClickPlatesOnBelt() (described next) gets rid of any excess dishes that happen to be on the conveyor belt.


When the bot needs more ingredients, it must navigate the menu buttons on the phone in the lower right corner of the game window. This tutorial has already figured out these coordinates for you, but you could use the pyautogui.displayMousePosition() function to find coordinates for any pixel on the screen.


The bot can tell when the level is over by doing image recognition for the you_win.png or you_fail.png images. If the game is over, the program terminates by calling sys.exit(). If the level has been beaten, the bot clicks on the "You Win" window so that it immediately tallies the stats and returns the string in the LEVEL_WIN_MESSAGE.


Sushi Go Round is a good candidate for creating a bot since it's 2D sprite graphics are static and easy to identify from screenshots. If you find any other similar such games, please list them in the comments below! I've found that the "Skill" genre on Newgrounds, "puzzle", "gathering", and "rhythm" games are usually bot-friendly since their images are easier to identify. (There's a list of Flash game genres here.) Look for ones that have retro pixel graphics. In particular, these games seem like good candidates for making bots:


NosTale is a free-to-play anime-styled fantasy MMORPG that features 3D graphics in an isometric perspective, reminiscent of games such as Ragnarok Online and Secret of the Solstice. Create a character level up to 20 to choose your first class from Archer, Swordsman, and Mage, then unlock specialist cards to unleash the powers of stronger classes. Specialist classes give you new skills, weapons, and equipment on top of your main class, allowing you to specialize for challenging battles. Explore a large game world and liberate the forest from the evil monsters that arrived with the appearance of mysterious crystals. Enter the crystal worlds for timed challenge missions with awesome completion rewards, complete quests given by the game's NPCs, and team up with friends to take on challenging raids and events. Capture pets and summon them to your side in battle, storing unused pets in Miniland which acts as your home base. 2ff7e9595c


0 views0 comments

Recent Posts

See All

Comments


bottom of page