Jump to content

[Denied]Better idea for Addons - One-way addons via Pipes


Recommended Posts

OK, so I am well aware of the dev's position on addons. The loading of 'unsafe' code which could be used to hack the game, yeah yeah. Well, I have an idea for a way to have addons without the risk of loading 'unsafe' code. 

 

I am not saying this should be implemented before other things of priority. This is merely a suggestion.

 

The idea:

The idea is for PokeMMO (the game on your computer, not the servers) to run an internal pipe server setup. Addon tools would connect to the PokeMMO (running on your computer) via this pipe and listen (and only listen, not send data back) for 'events' from the game.

 

Events could be as follows:

  1. Player places two egg compatible Pokemon in the daycare - Useful for egg timer tools. They could start a timer as soon as this event is sent over the pipe.
  2. Player enters a new area - Could be useful for a tool that pops up and shows you what Pokemon are in a route.
  3. Player catches a Pokemon - You already know this: IV calculators. PokeMMO can send this event along with some stats of the caught Pokemon.
  4. Etc.

Once a connected tool receives an event, it can handle the data accordingly. The best part about this approach is it is programming language independent. I'm pretty sure most of the mainstream programming languages support named pipes, and if they don't, an alternative could be sockets.

 

Anyway, yeah, that's my idea. Let me know what you guys think.

Link to comment

1 and 2 is not really needed in my opinion (there's a topic with implemented pokemon, it's not even a 30s to open up page and do ctrl+f)

 

Option 3 would be awesome like etc. :)

Merely examples, but you never know. Someone may find them useful.

Link to comment

Yeah that's true but IV calculator, step counter in safari could be really useful and things like that, about a "encyclopedia" could be handy if it would all (or nearly most) of pokemons would be implemented. That page what been made is far than enough. Egg counter -  well my own way is just to play in GC and check for one every 10minutes.

Link to comment

The "add-ons" you are citing work separate from the game itself. They were created for use with the game, but they were not meant to transmit data across the internet. Having a third party program that transmits data across the network would be fairly difficult to get approved. Not to mention that the 3rd party software in the Customization section is not maintained by PokeMMO, they are maintained by players from the community. Having a server like this would imply that the PokeMMO staff sponsor 3rd party software when they don't. They may approve of it being distributed, but that is where they draw the line. They do not request that such programs be created.

Link to comment

The "add-ons" you are citing work separate from the game itself. They were created for use with the game, but they were not meant to transmit data across the internet. Having a third party program that transmits data across the network would be fairly difficult to get approved. 

There seems to be a misunderstanding here. I apologize and have updated the original post.

 

When you run PokeMMO, behind the scenes, your 'instance' of PokeMMO on your PC sets up a 'computer-wide' pipe server. Only applications running on your computer can connect to it.

 

Not to mention that the 3rd party software in the Customization section is not maintained by PokeMMO, they are maintained by players from the community.

 

Nothing will change with the Customization forum. For IV calculators, instead of reading from the screen using OCR (or whatever screen reading method), they would have a direct link to the game data (via 'events'). Data that the developers can choose to provide to external tools.

Link to comment

There seems to be a misunderstanding here. I apologize and have updated the original post.

 

When you run PokeMMO, behind the scenes, your 'instance' of PokeMMO on your PC sets up a 'computer-wide' pipe server. Only applications running on your computer can connect to it.

Nothing will change with the Customization forum. For IV calculators, instead of reading from the screen using OCR (or whatever screen reading method), they would have a direct link to the game data (via 'events'). Data that the developers can choose to provide to external tools.

 

I'm pretty sure you're not understanding how the PokeMMO client actually runs. A good portion of the actual game is controlled by the game server and not the client. From my understanding, about the only thing the client handles is graphics rendering and sending the queries to the server. Besides, the devs have already stated that this is a closed source project multiple times. It is highly unlikely that they will allow 3rd party programs access to the data stream the client sends to the server, and by highly unlikely, I mean that there is about a 99.9% chance that it will not happen.

Link to comment

I'm pretty sure you're not understanding how the PokeMMO client actually runs. A good portion of the actual game is controlled by the game server and not the client. From my understanding, about the only thing the client handles is graphics rendering and sending the queries to the server. 

The game receives 'events' (actually, data packets) from the server when something happens: someone sends a message in the chat, someone moves on screen (which goes to the rendering engine), etc. The idea is to take information such as that and forward them to listening tools on your computer. 

 

Besides, the devs have already stated that this is a closed source project multiple times.

This has nothing to do with seeing the source. The source is not required for this to work.

 

 It is highly unlikely that they will allow 3rd party programs access to the data stream the client sends to the server, and by highly unlikely, I mean that there is about a 99.9% chance that it will not happen.

 

A guy can dream? This is roughly the same thing as 'standing near your alarm clock'. When it goes off, you're their to 'hear' it and do whatever you wanted to do. 

 

This is the same thing. A better analogy would be sending your zip code to a Text Message Weather service. From there, they would 'push' the weather to you whenever there is a change.

Link to comment

The game receives 'events' (actually, data packets) from the server when something happens: someone sends a message in the chat, someone moves on screen (which goes to the rendering engine), etc. The idea is to take information such as that and forward them to listening tools on your computer.

 
The client can also initiate events, like when you send a message in the chat as well. The same goes for interaction with other players. The server doesn't know what type of interaction you want with another player until you provide that information. The client also fires an event when you want to fish, use an item, or move. In the case of movement, the server provides the client with the character's location in the overworld.
 

This has nothing to do with seeing the source. The source is not needed for this to work.

 
Closed source doesn't just mean that the source code in unavailable for public viewing and editing.
 

intellectual property, esp computer source code,that is not made available to the general public by its creators

http://dictionary.reference.com/browse/closed+source
 
Compare that to the definition of Open Source



pertaining to or denoting software whose source code is available free of charge to the public to use, copy, modify, sublicense, or distribute.


pertaining to or denoting a product or system whose origins, formula, design, etc., are freely accessible to the public.

 
When something is labeled closed source, all aspects of the design and development, including the source code, are not made available to the public. The data streams created by the client fall under that as a design aspect.

 

 

A guy can dream? This is roughly the same thing as 'standing near your alarm clock'. When it goes off, you're their to 'hear' it and do whatever you wanted to do. 

 

This is the same thing. A better analogy would be sending your zip code to a Text Message Weather service. From there, they would 'push' the weather to you whenever there is a change.

 

Let's say for all intents and purposes that you are listening for your alarm clock because you have a pie in the oven. Your alarm clock isn't going to listen for the pie to be done since the pie is incapable of telling the alarm clock it is done, you have to set the alarm clock for the time you think the pie will be done. The alarm clock doesn't set itself, and it can't start itself when you close the over door, you have to put the pie in the oven, close the door, and then start the clock. In that example, you are acting on the alarm clock itself because once it goes off, you will be shutting it off and checking the pie. In terms of computer talk, you would be sending data back to the alarm clock to confirm that you received the alert to check the pie.

 

In the example of sending your zipcode to a text weather service, that server is set up to listen for those events, and then it sends the appropriate information back when an event is triggered. However, in either case involving you signing up for the service to send you alerts or sending data to the server each time you want the weather forecast, your phone is still sending data.

Link to comment

 
The client can also initiate events, like when you send a message in the chat as well. The same goes for interaction with other players. The server doesn't know what type of interaction you want with another player until you provide that information. The client also fires an event when you want to fish, use an item, or move. In the case of movement, the server provides the client with the character's location in the overworld.
 

OK. How does that prevent sending some sort of notification to listening programs? When the client tells the server that 'caught something', why it also listening tools?

 

Closed source doesn't just mean that the source code in unavailable for public viewing and editing.

 

http://dictionary.reference.com/browse/closed+source
 
Compare that to the definition of Open Source



 
When something is labeled closed source, all aspects of the design and development, including the source code, are not made available to the public. The data streams created by the client fall under that as a design aspect.

 

I'll give you that. However, we are not accessing the data streams created by the client and the server. We are simply listening for a notification from the client that something happened. We never touch the data streams.

 

Let's say for all intents and purposes that you are listening for your alarm clock because you have a pie in the oven. Your alarm clock isn't going to listen for the pie to be done since the pie is incapable of telling the alarm clock it is done, you have to set the alarm clock for the time you think the pie will be done. The alarm clock doesn't set itself, and it can't start itself when you close the over door, you have to put the pie in the oven, close the door, and then start the clock. In that example, you are acting on the alarm clock itself because once it goes off, you will be shutting it off and checking the pie. In terms of computer talk, you would be sending data back to the alarm clock to confirm that you received the alert to check the pie.

 

In the example of sending your zipcode to a text weather service, that server is set up to listen for those events, and then it sends the appropriate information back when an event is triggered. However, in either case involving you signing up for the service to send you alerts or sending data to the server each time you want the weather forecast, your phone is still sending data.

 

Way to over-complicate an analogy. Sure, the alarm clock analogy wasn't the best. In the case of the weather analogy, it maps to the real world idea as follows:

  1. Tool connects to the client via pipe. No networking is involved at all. It doesn't send anything to the client. - Phone sends it's zip code to the weather service.
  2. PokeMMO says 'hey, the player caught something!' to every listening tool via pipes. - Weather service sends "today's weather" to every subscribed phone.
  3. Tool handles said data event. - You read the text message and get on with your day.

The game knows when you put a pokemon in the daycare. The game knows when you caught something because it will show the summary screen.

Link to comment

OK. How does that prevent sending some sort of notification to listening programs? When the client tells the server that 'caught something', why it also listening tools?

 

Because the listening program would need to access the port the client receives the sever data from in order to get the notification. In the case of breeding, there is no system to graphically display when an egg is ready, so in order to accurately run a timer, the program would have to access that data stream to receive the proper notification, otherwise the timer will just stop after 10 minutes each time. When the system performs a check for an egg, the clock will have to reset if there is not an egg and remain stopped if there is an egg.

 

 

Way to over-complicate an analogy. Sure, the alarm clock analogy wasn't the best. In the case of the weather analogy, it maps to the real world idea as follows:

  1. Tool connects to the client via pipe. No networking is involved at all. It doesn't send anything to the client. - Phone sends it's zip code to the weather service.
  2. PokeMMO says 'hey, the player caught something!' to every listening tool via pipes. - Weather service sends "today's weather" to every subscribed phone.
  3. Tool handles said data event. - You read the text message and get on with your day.

The game knows when you put a pokemon in the daycare. The game knows when you caught something because it will show the summary screen.

 

You are forgetting one crucial part in your phone analogy, a connection to the local cellular network. Without that connection your phone becomes a useless brick. In order for your phone to connect to that network, it has to constantly ping the cellular towers in the area. Even in the case of your phone analogy, a network connection is necessary in order to receive alerts.

 

You're over-simplifying these events into 3 steps when there are literally hundreds, maybe even thousands, of instructions that have to be executed in order for any event to be fired in the computer world.

Link to comment

Because the listening program would need to access the port the client receives the sever data from in order to get the notification.

 

 


No, it doesn't. Pipes do not use ports.

 

 

 In the case of breeding, there is no system to graphically display when an egg is ready, so in order to accurately run a timer, the program would have to access that data stream to receive the proper notification, otherwise the timer will just stop after 10 minutes each time. When the system performs a check for an egg, the clock will have to reset if there is not an egg and remain stopped if there is an egg.

 

Just because there is no GUI implemented for it in the game, doesn't mean that the game doesn't get a notification for when an egg is ready. Anything having to do with getting the data is handled by the game. The developers choose what kind of 'notifications' we can get over the pipe. If they say all we can have is 'the Player catches something', that's all we can get.

 

WMhYkwO.png

 

 

 


You are forgetting one crucial part in your phone analogy, a connection to the local cellular network. Without that connection your phone becomes a useless brick. In order for your phone to connect to that network, it has to constantly ping the cellular towers in the area. Even in the case of your phone analogy, a network connection is necessary in order to receive alerts.

 

The network connection in the phone analogy correlates to pipes in the idea. The only difference is the phone 'polls' for a connection. The pipe doesn't poll for a connection, but for data.

 

 

 

You're over-simplifying these events into 3 steps when there are literally hundreds, maybe even thousands, of instructions that have to be executed in order for any event to be fired in the computer world.

You tell me if the code contains thousands of instructions.

Link to comment

 

No, it doesn't. Pipes do not use ports.

 

Just because there is no GUI implemented for it in the game, doesn't mean that the game doesn't get a notification for when an egg is ready. Anything having to do with getting the data is handled by the game. The developers choose what kind of 'notifications' we can get over the pipe. If they say all we can have is 'the Player catches something', that's all we can get.

 

WMhYkwO.png

 

 

The network connection in the phone analogy correlates to pipes in the idea. The only difference is the phone 'polls' for a connection. The pipe doesn't poll for a connection, but for data.

 

 

 

You tell me if the code contains thousands of instructions.

 

 

You do realize that the only real application that would benefit from this is the egg timer applications? This type of functionality could serve to reset the timer only when there is not an egg produced.

 

The IV calculators need to be triggered separately because the players who do use them are farming for a specific nature/ability, so they would only need to read the Pokemon's stats when they have one they want to scan. Having an IV calculator that automatically scans every time you catch a Pokemon would get annoying.

 

 

You do realize that code is a higher level language and does not even come close to simulating what I'm talking about. The closest you could get to what I'm talking about is Assembly language. Even then the instructions coded in there are broken down further. There is a lot more running on a computer than you think. Just because that Java code doesn't look like it contains thousands of instructions, that doesn't mean that it doesn't. When Java code is compiled it gets converted into Bytecode, which is a further breakdown of the Java language in order for the host OS to understand what it is being told.

 

http://en.wikipedia.org/wiki/Java_bytecode

 

From there the Java Virtual Machine has to send requests to the host operating system in order to have actions performed, like drawing a simple GUI. The host OS then has to take that instruction and break it down further so that all the registers in the CPU and in memory are updated accordingly, and when data needs to be loaded from the hard disk, the proper sector is accessed. There is a lot more to running stuff like this than you think. The human readable code only scratches the surface of the deeper workings of a computer.

 

http://en.wikipedia.org/wiki/Instruction_cycle

Link to comment

You do realize that the only real application that would benefit from this is the egg timer applications? This type of functionality could serve to reset the timer only when there is not an egg produced.

 

The IV calculators need to be triggered separately because the players who do use them are farming for a specific nature/ability, so they would only need to read the Pokemon's stats when they have one they want to scan. Having an IV calculator that automatically scans every time you catch a Pokemon would get annoying.

You make it sound like you can't program an IV calc to only worry about X nature.

 

You do realize that code is a higher level language and does not even come close to simulating what I'm talking about. The closest you could get to what I'm talking about is Assembly language. Even then the instructions coded in there are broken down further. There is a lot more running on a computer than you think. Just because that Java code doesn't look like it contains thousands of instructions, that doesn't mean that it doesn't. When Java code is compiled it gets converted into Bytecode, which is a further breakdown of the Java language in order for the host OS to understand what it is being told.

 

http://en.wikipedia.org/wiki/Java_bytecode

 

From there the Java Virtual Machine has to send requests to the host operating system in order to have actions performed, like drawing a simple GUI. The host OS then has to take that instruction and break it down further so that all the registers in the CPU and in memory are updated accordingly, and when data needs to be loaded from the hard disk, the proper sector is accessed. There is a lot more to running stuff like this than you think. The human readable code only scratches the surface of the deeper workings of a computer.

 

http://en.wikipedia.org/wiki/Instruction_cycle

 

I fail to see how the JVM inner workings even relate to this conversation. You went off topic once you started talking about instructions.

Link to comment

At this point I revert back to the bit about this being a Closed Source project. There is a reason that they don't want people to have access to the internal workings of this game. The fewer people working with the back-end parts of the system, the better.

Link to comment

At this point I revert back to the bit about this being a Closed Source project. There is a reason that they don't want people to have access to the internal workings of this game. The fewer people working with the back-end parts of the system, the better.

:blink: I'll take that as -support.

Link to comment
  • 2 weeks later...

I'd also support this, but I doubt the devs would allow us to do anything like this. In the cases of the IV calculators and egg timers, those are things that were set up by individuals that required no information from the devs and could easily have been kept for the creators convenience only; all that the devs had to do was test it before approval. In this case I think it would cut too close against their 'no help, closed source' policy regarding the development of the game if they were to provide even limited access to non-graphical game data for them to consider this viable. Which is a shame, as I would like to do stuff like this even if only for personal use.

 

In other news, I found this incredibly refreshing to read as a well-thought-out debate/discussion on both sides compared to most of the arguments that occur on these forums (generally of the sort that devolve into personal attacks.)

Link to comment

Would be nice, i can even imagine it, like some kind of WOW/Smite alike hehe, but seriously basic stuff like egg timers, and iv's calculators should be added like an ingame feature (at least if the devs wants to make PokeMMO be taken as a serious competitive pokemon game).
 
Off topic: i loved what I saw in your sig, looks like a nice "patch" for this, i was trying to get something like an all-in-one package but this could be easier.
"PokeMonitor - A tool for automatically running other tools when PokeMMO is started. Coming soon"

Link to comment

I like this idea. I think having a means of communication with the game would leave other hacked together pixel reading programs (which are a good stopgap in the meantime) seeming as if they were simplistic, inaccurate and clumsy (again something is better than nothing, and in that vein what has been created thus far has been amazing).

 

Some possible events and queries that I would like to see:

  • (event) Pokemon Added to Party
  • Pokemon in X location in party (name, stats, etc.)
  • (event) PC opened
  • (event) PC closed
  • Pokemon in X location in PC
  • (event) Pokemon fainted
  • (event) NPC Dialogue
  • Game time
  • (event) Item used
  • Inventory Items (Max in inventory, name at X, amount at X, etc.)
  • (event) Encountered Trainer Fight
  • (event) Encountered Pokemon Fight

 

If even just one of these were added (ie: get the stats of Pokemon in X location in party), then that in of itself would revolutionize how the 3rd party iv calculators work - making them far easier to use and install (they would be instant, with nearly no setup, and no need to 'switch' between the pokemon examine pages or have them open for that matter either).... to think if any of the other things listed above were added --- who knows what type of amazingly helpful things could be made 0-0

 

I agree that it "should (not) be implemented before other things of priority. This is merely a suggestion.". It might not be high priority, and it might be pretty hard to work up such a thing--- but I can assure you such a thing will be quite useful!

 

 

I support this idea!!

Link to comment

Frankly, this is an intelligent, well thought out idea and I commend you for it. To extend what ElderBerry was saying, if we had a SummaryPageOpenEvent to work with and a little extra API in place, we could even add custom GUI elements and put the IV calculations right on the summary screen as an additional stats page. That extra API is a bit of a problem, though, since it involves core client mechanics (in this case rendering), and I believe that that's what XelaKebert was at some point during his rant attempting to touch on. Since PokéMMO is indeed a closed source project, the chance of an API which would allow us to muck about with how the game renders is unlikely - as it involves playing about with the core client functionality, beyond simply intercepting data.

 

As far as your suggestion goes, however, it would be interesting to at least have third party tools able to intercept data filtered and output by the client itself - that, in fact, would be magical, and I fully support it.

 

I apologize if that wasn't as coherent as I thought it was, it's really late and I went back and edited through it quite a bit, and that tends to throw typographical and grammar errors all up in my writing.

Link to comment
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.