Amrykid Posted August 17, 2013 Share Posted August 17, 2013 Hello everyone. A couple of weeks ago, I set off to develop some tools for PokeMMO that were rather simple but felt like they are included in-game. They aren't, but they get pretty darn close. NOTE: All tools run only on Windows because they utilize the .NET framework. Mono (for OS X and *nix) does not support WPF at this time. Please consider these to be alpha quality as they have yet to be extensively tested as normal software applications are. Geeky stuff about the lib (for programmers) First of all, I created a .NET library for simplifying the development of tools for PokeMMO in .NET languages (such as C# and VB.NET). All the tools in this (collection/on-going program) utilize this library to create the illusion of the tools being inside of the game, along with some other nifty features such as watching for when the game has started and exited. More capabilities are on the way! Anyway, onto the tools themselves. The toolsPokeMonitor Spoiler The first of the tools I would like to release is called PokeMonitor. It is a relatively simple application that waits for PokeMMO to start and will automatically start any tools you have set to be executed. For example, you can set an IV calculator app to run whenever you run PokeMMO instead of manually running it yourself. PokeMonitor runs in your system tray with a 'Pokeball' icon. Simply right click on the icon to open the list of applications that will run when PokeMMO is executed. PokePad Spoiler The next tool I would like to introduce is PokePad. It doesn't get much simpler than this. PokePad is a bare-bones micro-notepad that runs inside of the PokeMMO window. Jot down anything you want and it will be automatically saved. Simple and easy. This is what PokePad looks like running inside of PokeMMO. And it wouldn't make sense to not be able to minimize it. PokeReleaseNotes Spoiler Last but not least is PokeReleaseNotes. As you could probably guess, the intention of this little tool is to fetch the latest PokeMMO changelog from this forum and display it in a window for you inside of PokeMMO. This tool works great with PokeMonitor because it will appear while you're on the login screen (if it was timed correctly). Doesn't get any simpler than that. System Requirements .NET Framework 4.0 - Client profile version, which is a scaled down version. Full 4.0 works too. Client profile version can be downloaded from here. PokeMMO Operating System: Windows XP or higher. Download & Source CodeAll of the tools (and future ones) are fully open source. You can view and download the source from from here. Lastly, you can download the binaries (.exe files) in a zip from here: v0.1-Alpha. If for any reason (in the future) that you want to download an older release, you can see all releases here. Future/possible tools In-game internet radio streaming application. Could probably stream PIRN: Pokémon Radio by default. Tool for displaying what Pokemon appear on what route. Etc? Link to comment
Dannnno Posted August 18, 2013 Share Posted August 18, 2013 Coolio Now add something to track my encounters pls without me having to manually click something kthx Link to comment
Amrykid Posted August 18, 2013 Author Share Posted August 18, 2013 Coolio Now add something to track my encounters pls without me having to manually click something kthx Could you explain what exactly do you want? Track your Pokemon encounters? Link to comment
StanFear Posted August 18, 2013 Share Posted August 18, 2013 seems interesting ! at first I was thinking you made a library to interact with PokeMMO, I was interested to be able to communicate with PokeMMO, but then I say it was "only" to add stuff in it ! this is quite awesome still ! Link to comment
Amrykid Posted August 18, 2013 Author Share Posted August 18, 2013 seems interesting ! at first I was thinking you made a library to interact with PokeMMO, I was interested to be able to communicate with PokeMMO, but then I say it was "only" to add stuff in it ! this is quite awesome still ! That's all coming soon (to the library). I am also interested in communicating with PokeMMO. Lately I've been exploring ways to interact with it but at the moment, the only thing I have is a way to make the game window 'flash'. Send/PostMessage, and Pipes have been considered, along with other unconventional methods which I will not use nor release code to do so. EDIT: Censored. Link to comment
Dannnno Posted August 18, 2013 Share Posted August 18, 2013 Could you explain what exactly do you want? Track your Pokemon encounters? I like shiny hunting, and I like counting how many Pokemon I see on the way. It sucks because I have this obnoxiously large spreadsheet sitting on my computer that shows down the process cuz I have to switch back and forth. I want something that will count them for me :L Link to comment
Amrykid Posted August 18, 2013 Author Share Posted August 18, 2013 I like shiny hunting, and I like counting how many Pokemon I see on the way. It sucks because I have this obnoxiously large spreadsheet sitting on my computer that shows down the process cuz I have to switch back and forth. I want something that will count them for me :L The problem with that is I have no way of knowing when you run into a Pokémon. My pipes suggestion for the game would allow for something like this but there has been no sign of the devs acknowledging it's existence. I could try taking a screenshot of the game every X seconds and look for.... That wouldn't work either. At this point, the only thing I could do is listen for a keyboard key and that would increment the counter. Unless, you or anyone else has a better idea. Link to comment
StanFear Posted August 18, 2013 Share Posted August 18, 2013 I could try taking a screenshot of the game every X seconds and look for.... That wouldn't work either. I'm intrigued, why would this not work ? Link to comment
Dannnno Posted August 18, 2013 Share Posted August 18, 2013 I'm intrigued, why would this not work ? its fairly impractical. I thought about trying to make something like that, and it would probably have to check very frequently, be able to identify both male/female and shiny pokemon, as well as differentiate between an NPC/PvP battle and a PvE battle. I was just hoping that the OP might have a better idea for how this could work. Link to comment
Amrykid Posted August 19, 2013 Author Share Posted August 19, 2013 I'm intrigued, why would this not work ? its fairly impractical. I thought about trying to make something like that, and it would probably have to check very frequently, be able to identify both male/female and shiny pokemon, as well as differentiate between an NPC/PvP battle and a PvE battle. I was just hoping that the OP might have a better idea for how this could work. Dannnno hit the nail on the head. It won't be easy trying to detect battle state. While I was away, I was thinking of the possibly of reading a pre-determined pixel and it's color would determine if there is a battle or not. I'll keep looking. Other than that, I've tried playing with OCR to read in-game text (from dialogue text, not menus) and that didn't work very well either. Your guesses are as good as mine. Link to comment
DopestDope Posted August 19, 2013 Share Posted August 19, 2013 Dannnno hit the nail on the head. It won't be easy trying to detect battle state. While I was away, I was thinking of the possibly of reading a pre-determined pixel and it's color would determine if there is a battle or not. I'll keep looking. Other than that, I've tried playing with OCR to read in-game text (from dialogue text, not menus) and that didn't work very well either. Your guesses are as good as mine. Couldn't you make it detect the pixels in "A wild X has appeared!"? Seems easy enough to me. Link to comment
Dannnno Posted August 19, 2013 Share Posted August 19, 2013 Couldn't you make it detect the pixels in "A wild X has appeared!"? Seems easy enough to me. I guess that would work, but it would require people to have their screens set up in a specific fashion (like a specifically placed chatbox at a certain size so it doesn't interfere with the image capture). That seems less than ideal to me, and would still require pretty constant scanning which increases CPU usage. The only thing I can think of that might work is to have a hotkey you press every time you enter a wild encounter and it would check what pokemon it is and add it to the tally. This would reduce how often the program has to check (reducing CPU load) and theoretically give you a more accurate count. It would also be less annoying than tallying by hand or switching tabs. To amrykid, would this sort of thing be doable/feasible from a programming perspective? I don't have enough know how to really get an idea of how well it would work. Link to comment
StanFear Posted August 19, 2013 Share Posted August 19, 2013 I guess that would work, but it would require people to have their screens set up in a specific fashion (like a specifically placed chatbox at a certain size so it doesn't interfere with the image capture). That seems less than ideal to me, and would still require pretty constant scanning which increases CPU usage. The only thing I can think of that might work is to have a hotkey you press every time you enter a wild encounter and it would check what pokemon it is and add it to the tally. This would reduce how often the program has to check (reducing CPU load) and theoretically give you a more accurate count. It would also be less annoying than tallying by hand or switching tabs. To amrykid, would this sort of thing be doable/feasible from a programming perspective? I don't have enough know how to really get an idea of how well it would work. Well, I don't think that it would b a problem to scan for encounters, with enough knowledge of the window screen, it could be calculated where this text appears ! and how tall it would be ! but, yes, it would require some CPU ! though I think, if it is done properly, it could be invisible to the player ! (capturing videos, can be almost invisible to the player, so checking 2 frames a sec,(I think it would be enough !) should not be too much ! the problem of hotkeys, is that many people don't like to have something to do at all (except looking at the results ^^), but it would be feasible, I think the best way would obviously be that the dev team gives an "API" with events (like OnBattleStart() which have the pokemon infos, whether it is a wild encounter or not, and why not the place where the fight is taking place) sent that can be used in other programs (would be easier to make them in java then) I actually think this could be emulated by watching the data sent through the network ! Link to comment
StanFear Posted August 19, 2013 Share Posted August 19, 2013 I actually think this could be emulated by watching the data sent through the network ! I'm going to look into that, and tell you all if this can be done ! (Yes I know, I'm replying to myself ! so what ?) Link to comment
Amrykid Posted August 19, 2013 Author Share Posted August 19, 2013 Well, I don't think that it would b a problem to scan for encounters, with enough knowledge of the window screen, it could be calculated where this text appears ! and how tall it would be ! but, yes, it would require some CPU ! though I think, if it is done properly, it could be invisible to the player ! (capturing videos, can be almost invisible to the player, so checking 2 frames a sec,(I think it would be enough !) should not be too much ! Using OCR to scan for 'text' is harder than usual because of the size of the text and it's unusual typeface. Believe me, I've tried it out (yesterday, in fact). the problem of hotkeys, is that many people don't like to have something to do at all (except looking at the results ^^), but it would be feasible, I think That's the only thing I can think of... for now. Last night, I began experimenting with taking tiny screenshots of a small section of the screen and determine if it was darker than usual. If it is darker, the player is in a battle. I can't get it to work the way I want however. the best way would obviously be that the dev team gives an "API" with events (like OnBattleStart() which have the pokemon infos, whether it is a wild encounter or not, and why not the place where the fight is taking place) sent that can be used in other programs (would be easier to make them in java then) I wish the developers would do that. I think it's kind of weird that they allow third party software but not have some sort of 'basic' API available. However, the game is still in Alpha. I would expect an API to be released in the Beta. I actually think this could be emulated by watching the data sent through the network ! I'm going to look into that, and tell you all if this can be done ! (Yes I know, I'm replying to myself ! so what ?) Prying the connection open and watching the data stream may be against the ToS. If it was possible, people could fake client actions and maybe even create bots that bypass the client itself. With that in mind, I don't see the developers ever allowing us to do that. :( Link to comment
Dannnno Posted August 19, 2013 Share Posted August 19, 2013 For scanning the screen, is it possible to change the font used like Archalias did in his IV calculator? Link to comment
Amrykid Posted August 19, 2013 Author Share Posted August 19, 2013 That might work. I'll have to experiment with it tonight. Link to comment
StanFear Posted August 19, 2013 Share Posted August 19, 2013 Prying the connection open and watching the data stream may be against the ToS. If it was possible, people could fake client actions and maybe even create bots that bypass the client itself. With that in mind, I don't see the developers ever allowing us to do that. :( seeing how complicates it seems to be, I don't think will ever have someone trying something like that ! but, you're right, I'll take a look at it ! Link to comment
StanFear Posted August 19, 2013 Share Posted August 19, 2013 Prying the connection open and watching the data stream may be against the ToS. If it was possible, people could fake client actions and maybe even create bots that bypass the client itself. With that in mind, I don't see the developers ever allowing us to do that. :( hummm... this is actually written in the code of conduct, though the code of conduct says (section 4 Paragraph D) : c. You may not use any unauthorized third-party software that intercepts or otherwise collects information from or through the Game or Service, including without limitation any software that reads areas of RAM used by the game, any program which reads and attempts to manipulate network traffic between your Game Client and the Game Server since what I want to do is just look at the traffic, and not manipulate it, I think it is not clear whether it is allowed or not ... (I guess it is not, but I'll send a request to have the permission !(it is said "unauthorized" so you can get an authorization right ?) Link to comment
Amrykid Posted August 19, 2013 Author Share Posted August 19, 2013 hummm... this is actually written in the code of conduct, though the code of conduct says (section 4 Paragraph D) : since what I want to do is just look at the traffic, and not manipulate it, I think it is not clear whether it is allowed or not ... (I guess it is not, but I'll send a request to have the permission !(it is said "unauthorized" so you can get an authorization right ?) The situation we're are in sucks: We can not break the rules while trying to provide tools that improve the user's experience. Let's say you do some how figure out how to look at the traffic, if the Code of Conduct states that you cannot do it, your software will not make it past the approval process (of getting it onto the forums). However, yes, if they do allow developers to go through some sort of authorization process, I would expect that our software will have to remain closed source for good reason. If the developers do not plan on providing us with an API or some way to communicate with the game, at the very least, allow us to read the RAM (under moderation). However, I don't see this happening anytime soon. In a hypothetical situation that they do allow us to read from the process' memory, we could: Very easily read Pokemon stats Know if the player is in a battle or not at any given time. Know the location of the player and be able to determine if the player is moving and how many steps they have taken. Think of the "/loc" command in game. Among other things ---- On the server note, if we could emulate the client or better yet, create a 'proxy' in between the client and the service, then we would be able to have access so when some of the 'events' above occur. That would take some reverse-engineering and time to figure out and isn't worth it. I won't go into my Pipes idea in this thread but it is still on the table. Probably the cleanest way of doing an API would be to implement some sort of REST api with a mix of Twitter's user streams feature. The REST API could be JSON based with several endpoints such as: /getplayer?name=Amrykid - Returns my name, how many badges acquired, what Pokémon I have with me (optional), and whether I'm online or not (could follow /dnd). /getpc - Requires authentication (OAuth?) - Gets every single Pokémon in your PC. Returns the name, nickname, level and a unique ID for retrieving detailed information. /getpokemon?id=blablabla - Requires authentication - Gets detailed information on whatever Pokémon corresponds to that ID in my PC. Returns stats, moves, EVs... everything in the summary screen in the game. /getfriends | /getblocklist - Requires auth. - Self explanatory. The 'user streams' idea would be connecting to the server directly (on another port) where a service that handles communicating with the actual game server is running. After some authentication, the application will be ready for data to be pushed to it. Things that can be 'pushed': Player (the one we care about) catches a Pokémon. Player location (or amount of steps taken since last 'push') - again, think "/loc". This can be sent at intervals of every 5 minutes as long as the player is online. Player accesses and closes their PC (if something has changed such as they changed their team). Friend comes online/offline. Someone whispers the player. ---- I think I spent a little too much time writing all that and lost my train of thought. Link to comment
TorCharDrawings Posted August 19, 2013 Share Posted August 19, 2013 very handy might try this sometime Link to comment
Amrykid Posted August 19, 2013 Author Share Posted August 19, 2013 very handy might try this sometime Thank you for taking interest in the project! :D Link to comment
RitchieStones Posted October 8, 2018 Share Posted October 8, 2018 Links are not working, pls fix it I'm interesed in this tools. Thnx NahuelCh 1 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now