• Just a reminder that providing specifics on, sharing links to, or naming websites where ROMs can be accessed is against the rules. If your post has any of this information it will be removed.
  • Ever thought it'd be cool to have your art, writing, or challenge runs featured on PokéCommunity? Click here for info - we'd love to spotlight your work!
  • Our weekly protagonist poll is now up! Vote for your favorite Trading Card Game 2 protagonist in the poll by clicking here.
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

[Other✓] Pokemon multiplayer rom hack idea pc only

  • 9
    Posts
    10
    Years
    • Seen Aug 15, 2018
    So i have an idea on how to possibly make co op with little rom hacking required as in ill be making an external program which will do most of the work.

    Now first thing first is something im not sure is even possible but bare with me i'm pretty sure it is as in it dosen't require too much. I want to use rom hacking in order to add another npc to the game which could be controlled using the keyboard, all that npc needs to do is be able to move and follow you around don't worry about the rest i'm not talking about actual couch co op like gang beasts or something for this part only one npc that could move using user input.

    Now we have another npc that can't do anything besides move for now. Now in order to actually turn this dumb npc into another user is actually pretty easy for me to do (3 days max). Here comes in that external program i promised, said program will take your key presses on your keyboard and send them to another computer (your friend playing with the useless npc) which will translate it to key presses moving the added npc both ways. Now you might be confused let me explain. Say you're playing your game using the W A S D keys, now you move your character to the left using the D key the program will then send a message to the other computer to make it press say the Left Arrow key and make the added npc move also, the added npc will essentially copy your movements and make him look like he is you, this will essentially work something like teamviewer just for a specific purpose.

    So we've added an npc that moves like your friend on another computer now what?, you see thats actually all you need.

    Both users play on their on client and have their on team and progress they can just see each other now, what about trading and battling each other? that's already implemented, you can do all that in pokecenters as if you were using cables, yes here you will have to use some cable alternative but my program will be forcing you to pc only anyway.

    This is just an idea at this point as in i don't know shit about rom hacking and before starting work on this im going to need help on the rom hacking part as in i don't know if its even possible.
    (this may sound unattractive to you but this has to be easy or its not even worth it, im willing to expand on this if anyone has any ideas and honestly there will be at least a few problems to deal with).

    Edit: im currently looking for a way to detect keypress and react to it by moving an npc, like setting a hotkey 'M' to make a specific npc walk.
    Could someone with some rom hacking and scripting experience help? is such a thing even possible? if not why?

    EditX2: better off alternatively id like to make custom cheats to the game to move the npc, (then just set a hotkey to those cheats in the emulator)
     
    Last edited:
    I'm not sure that I actually understand your idea. From a technical perspective it makes sense, although I think you could skip using an external program and instead just have two emulators running (or maybe you can use a single instance of No$GBA)?

    And then the other change you want to make is to allow two players to be permanently connected, and see each other move around if they're nearby on the map?
     
    I'm not sure that I actually understand your idea. From a technical perspective it makes sense, although I think you could skip using an external program and instead just have two emulators running (or maybe you can use a single instance of No$GBA)?

    And then the other change you want to make is to allow two players to be permanently connected, and see each other move around if they're nearby on the map?

    The external program is only necessary in order to play online, you can run two emulators and just mess with the key bindings there shouldn't be any problems that's more then good.

    Yeah pretty much, i kinda worry since i see why being permanently connected seems necessary as in if you're moving while the other user is offline his npc of you might get his location messed up. The simple work around is make sure you remember where you're standing on his client before he connects. But i might be able to help with that, you see what if i make the external program a launcher and as long as you launch your emulator through said launcher it'll record your movements so when the other user connects it'll make sure to catch up with those movements.

    (I probably shouldn't get ahead of myself and start fixing problems so early on so ill try and avoid that from now)
     
    The external program is only necessary in order to play online, you can run two emulators and just mess with the key bindings there shouldn't be any problems that's more then good.

    Yeah pretty much, i kinda worry since i see why being permanently connected seems necessary as in if you're moving while the other user is offline his npc of you might get his location messed up. The simple work around is make sure you remember where you're standing on his client before he connects. But i might be able to help with that, you see what if i make the external program a launcher and as long as you launch your emulator through said launcher it'll record your movements so when the other user connects it'll make sure to catch up with those movements.

    (I probably shouldn't get ahead of myself and start fixing problems so early on so ill try and avoid that from now)

    If it's an online thing, then the player's client side wont be saving the locations of other players lmao
     
    If it's an online thing, then the player's client side wont be saving the locations of other players lmao

    Uhhh kinda.
    You shouldn't worry about that too much but let me explain anyway. here take player1 and player2. what if player1 moves while player2 is offline?, player2's npc will stay in the same place when hes supposed to be moving according to player1's movements so his location will be wrong, as in you do save other's locations but that's only accurate if they don't change them when you're offline. now i proposed 2 fixes, just make sure player1 comes back to the same place as player2's npc when player1 connects, or have the external program try and fix that through lets just say magic because you don't really need to understand this part, if you care its not too complicated just read my previous reply again.
     
    Uhhh kinda.
    You shouldn't worry about that too much but let me explain anyway. here take player1 and player2. what if player1 moves while player2 is offline?, player2's npc will stay in the same place when hes supposed to be moving according to player1's movements so his location will be wrong, as in you do save other's locations but that's only accurate if they don't change them when you're offline. now i proposed 2 fixes, just make sure player1 comes back to the same place as player2's npc when player1 connects, or have the external program try and fix that through lets just say magic because you don't really need to understand this part, if you care its not too complicated just read my previous reply again.

    Just to say, the third option is to have the NPCs "warp" to wherever their "real" game thinks they are when they connect. e.g. player1 has moved but player2 doesn't know this, when player1 connects his NPC immediately disappears from where it was in player2's game and goes to where it is on player1's.

    ---

    Anyway, I imagine that this is all pretty feasible, there's a pretty simple way you can test how much work it is—use a map editor to expand one of the link cable rooms into a whole area with grass, trainers, ledges, boulders, rock smash, surf, etc, etc and see which things work how you expect when you have two people moving through this map.
     
    Uhhh kinda.
    You shouldn't worry about that too much but let me explain anyway. here take player1 and player2. what if player1 moves while player2 is offline?, player2's npc will stay in the same place when hes supposed to be moving according to player1's movements so his location will be wrong, as in you do save other's locations but that's only accurate if they don't change them when you're offline. now i proposed 2 fixes, just make sure player1 comes back to the same place as player2's npc when player1 connects, or have the external program try and fix that through lets just say magic because you don't really need to understand this part, if you care its not too complicated just read my previous reply again.

    Let me explain it with an example:
    When you're on a server in Minecraft, and one player logs out, they just disappear from the map. If the other players move around, and hte player that left rejoins, then everyone will show up in their actual positions. This is because the locations are ***NOT*** stored on the client-side. Multiplayer, by definition, doesn't store those dynamic things on the client, EVER. It doesn't matter what you say, the client-side never stores things like player locations - that's all handled by the server. Now, before you tell me "well it's more like a LAN connection, durr" let me just point out that LAN is an internal server, so, no, the client DOES NOT store players' locations. That data will be streamed to the client from the server.

    Basically, there's no way to make a multiplayer ROM hack, because you would have to rebuild the entire game to be able to be compatible with a server designed specifically for it.
     
    Last edited:
    Let me explain it with an example:
    When you're on a server in Minecraft, and one player logs out, they just disappear from the map. If the other players move around, and hte player that left rejoins, then everyone will show up in their actual positions. This is because the locations are ***NOT*** stored on the client-side. Multiplayer, by definition, doesn't store those dynamic things on the client, EVER. It doesn't matter what you say, the client-side never stores things like player locations - that's all handled by the server. Now, before you tell me "well it's more like a LAN connection, durr" let me just point out that LAN is an internal server, so, no, the client DOES NOT store players' locations. That data will be streamed to the client from the server.

    Basically, there's no way to make a multiplayer ROM hack, because you would have to rebuild the entire game to be able to be compatible with a server designed specifically for it.

    Well that doesn't seem right.

    1. You can have peer-to-peer games where each client maintains the state, it's uncommon these days, but not unheard of. The reason why it's uncommon is because it is less efficient than a central server once you have more than two players, but since we're talking about two-player co-op I think it won't work out any different.

    2. You can have all the games act as their own server, but be able to become clients and connect to another game's server. If the server goes away the remaining clients negotiate between themselves to pick a client to promote as the new server (when there's only two people this is simply "you go back to being a server if it disconnects").

    I would be very surprised if you couldn't adapt Pokémon to work like this, if you wanted. I mean, the existing link-cable rooms must be doing something practically identical to either 1 or 2.

    ---

    EDIT:

    Actually, I'd go so far as to say it's simply wrong. For a start, the locations are stored client-side (as in, are in the client's memory), how else can the client display where those players are? The server might be the only thing to store hidden state, such as the list of items a player has (if that's not visible to other players), but it would be equally valid to let each client store their own items. The reason why games don't normally do that is to prevent cheating (if I am responsible for my items what's to stop me claiming I have 99x Master Balls?), but I can promise you that I have worked on games where this is what happens.

    And in the case of for-fun co-op with people you know there's no need to worry about having an authoritative server, cheating will be obvious to all players.
     
    Last edited:
    Well that doesn't seem right.
    I would be very surprised if you couldn't adapt Pokémon to work like this, if you wanted.

    Yeah, if you wanted to completely recode how the game handles the existing multiplayer stuff.

    Actually, I'd go so far as to say it's simply wrong. For a start, the locations are stored client-side (as in, are in the client's memory), how else can the client display where those players are?

    Did you fucking read my reply? I explained it there. It streams the location from the server. If there's no data being given to the client, or the player being streamed to it logs out, they just disappear. Since the client that logs out doesn't have any player location data being streamed to it, all players become non-existent BECAUSE IT'S DISCONNECTED. FFS actually read what I'm writing, please, as you clearly know absolutely nothing about this.
     
    Did you fucking read my reply? I explained it there. It streams the location from the server. If there's no data being given to the client, or the player being streamed to it logs out, they just disappear. Since the client that logs out doesn't have any player location data being streamed to it, all players become non-existent BECAUSE IT'S DISCONNECTED. FFS actually read what I'm writing, please, as you clearly know absolutely nothing about this.

    Yes I did read your reply, although apparently I misread it and mortally offended you. Anyway, I digress.

    I don't understand why you're worried about disconnected clients, obviously you have to be connected to see what other players are doing or for them to see you, but what does that have to do with anything? SuperOrel gave two perfectly workable solutions to the problem (when you connect to a server it resets your position on the client to the last known position, and an external program stores all your inputs and replays them as you connect to a server so that it synchronizes with your client), and I gave another (when you connect to a server it updates its stored position to whatever your client thinks it is).

    Yeah, if you wanted to completely recode how the game handles the existing multiplayer stuff.

    So how do you think the existing multiplayer stuff works, if not like options 1 or 2?
     
    Last edited:
    SuperOrel gave two perfectly workable solutions to the problem (when you connect to a server it resets your position on the client to the last known position, and an external program stores all your inputs and replays them as you connect to a server so that it synchronizes with your client), and I gave another (when you connect to a server it updates its stored position to whatever your client thinks it is).

    When the client connects to a server, it should be downloading all of the necessary data, ie player locations. The client should NEVER store client locations SPECIFICALLY to avoid the issues you're talking about. You clearly know nothing about what you're talking about.
     
    When the client connects to a server, it should be downloading all of the necessary data, ie player locations. The client should NEVER store client locations SPECIFICALLY to avoid the issues you're talking about. You clearly know nothing about what you're talking about.

    Well it will download all the other player locations, but there's no reason why it can't upload its own. What do you think the problem with that is? I can assure you that you've played games that work that way.

    Let's take an easy one, in Dark Souls you can invade another user's world, do you think the server really kept track of where you were throughout the whole game and uses this to decide where you should spawn when the invasion happens? Of course not! It would be insane to simulate every players' game like this, even if we don't take into account that you're allowed to play offline. The server simply trusts that you will tell it that you're in a sensible place. Before you argue, remember this is a game where people are able to cheat and have impossible stats and equipment, which is clearly another example of a non-authoritative server.

    If you're going to claim that all games work a particular way, you should at least have some proof. Otherwise you make yourself look silly when you start throwing around "you clearly know nothing about what you're talking about".
     
    Well it will download all the other player locations, but there's no reason why it can't upload its own.

    The client doesn't store its own location. It doesn't store any locations. It only stores client-side data, such as the current resources (ie textures and sounds)
     
    The client doesn't store its own location. It doesn't store any locations. It only stores client-side data, such as the current resources (ie textures and sounds)
    When it comes to rom hacks, there is no server; only the two client emulators. Thus, when connecting to another rom, that player's location is stored in both roms somewhere.
     
    When it comes to rom hacks, there is no server; only the two client emulators. Thus, when connecting to another rom, that player's location is stored in both roms somewhere.

    Yes, and when one logs off, that player just disappears from the other's map.
     
    The client doesn't store its own location. It doesn't store any locations. It only stores client-side data, such as the current resources (ie textures and sounds)

    Can you name a networked game that you have worked on? I'm genuinely interested to see a game where the client can't be said to store its own location. Maybe interactive fiction, or something like Showdown that doesn't really have a concept of position on the server either.

    From your description it seems that you think the way that most games work is similar to Netflix (i.e. streaming), and that the server has all the information and it practically sends you a video.

    Can you tell me whether you would count what Quake 3 does as storing locations? Quake 3 even uses the information it has to predict what the player will do next so that the server is able to send smaller amounts of data, and send it less frequently.

    This is a common approach throughout the industry.

    EDIT:

    Yes, and when one logs off, that player just disappears from the other's map.

    Okay, now you're being obtuse. Nobody has ever argued against this point, although I will right now?there's nothing stopping you from making that player AI controlled (and I am sure that at least one game out there actually does this).

    Serious question, why does this point matter? Like, what about SuperOrel's idea doesn't work specifically because the player isn't able to be controlled any more. Why can't they, for example, just stand in their last location? Which is actually what happens in games, at least initially. I refuse to believe you've never seen somebody freeze in place (or keep moving in a single direction) for a few seconds before timing out. This is because the server sends out their last location while it waits for them to send the next message, and eventually drops them itself.
     
    Last edited:
    Let me explain it with an example:
    When you're on a server in Minecraft, and one player logs out, they just disappear from the map. If the other players move around, and hte player that left rejoins, then everyone will show up in their actual positions. This is because the locations are ***NOT*** stored on the client-side. Multiplayer, by definition, doesn't store those dynamic things on the client, EVER. It doesn't matter what you say, the client-side never stores things like player locations - that's all handled by the server. Now, before you tell me "well it's more like a LAN connection, durr" let me just point out that LAN is an internal server, so, no, the client DOES NOT store players' locations. That data will be streamed to the client from the server.

    Basically, there's no way to make a multiplayer ROM hack, because you would have to rebuild the entire game to be able to be compatible with a server designed specifically for it.

    You seem to have misunderstood my idea, i don't want to rebuild anything, all i want to do in terms of rom hacking is add another npc that could move according to key presses on the keyboard.

    I'm not making true multiplayer, its more similar to a split screen game played with a singe keyboard in terms of technical difficulty, i am going to make it online but through external programming.

    For now let me ask of you just don't worry about that part for now you don't need to. Your misunderstanding is only due to me over thinking things, please try and ignore the server part.
     
    You seem to have misunderstood my idea, i don't want to rebuild anything, all i want to do in terms of rom hacking is add another npc that could move according to key presses on the keyboard.

    I'm not making true multiplayer, its more similar to a split screen game played with a singe keyboard in terms of technical difficulty, i am going to make it online but through external programming.

    For now let me ask of you just don't worry about that part for now you don't need to. Your misunderstanding is only due to me over thinking things, please try and ignore the server part.

    If you want the client to be able to work with another like that, there's a lot of recoding to do, since Pok?mon games just aren't designed to do that. It seems YOU misunderstod what *I* wrote.
     
    Can you name a networked game that you have worked on? I'm genuinely interested to see a game where the client can't be said to store its own location. Maybe interactive fiction, or something like Showdown that doesn't really have a concept of position on the server either.

    From your description it seems that you think the way that most games work is similar to Netflix (i.e. streaming), and that the server has all the information and it practically sends you a video.

    Can you tell me whether you would count what Quake 3 does as storing locations? Quake 3 even uses the information it has to predict what the player will do next so that the server is able to send smaller amounts of data, and send it less frequently.

    This is a common approach throughout the industry.

    EDIT:



    Okay, now you're being obtuse. Nobody has ever argued against this point, although I will right now?there's nothing stopping you from making that player AI controlled (and I am sure that at least one game out there actually does this).

    Serious question, why does this point matter? Like, what about SuperOrel's idea doesn't work specifically because the player isn't able to be controlled any more. Why can't they, for example, just stand in their last location? Which is actually what happens in games, at least initially. I refuse to believe you've never seen somebody freeze in place (or keep moving in a single direction) for a few seconds before timing out. This is because the server sends out their last location while it waits for them to send the next message, and eventually drops them itself.

    Read my earlier replies. I've explained answers for all of this before, and you're saying dumb garbage now, so I'm not repeating myself anymore. Goodbye, kid.
     
    Just to say, the third option is to have the NPCs "warp" to wherever their "real" game thinks they are when they connect. e.g. player1 has moved but player2 doesn't know this, when player1 connects his NPC immediately disappears from where it was in player2's game and goes to where it is on player1's.

    ---

    Anyway, I imagine that this is all pretty feasible, there's a pretty simple way you can test how much work it is?use a map editor to expand one of the link cable rooms into a whole area with grass, trainers, ledges, boulders, rock smash, surf, etc, etc and see which things work how you expect when you have two people moving through this map.

    "warping" is in the back of my mind right now due to my lack of knowledge in rom hacking but i do think about it.

    Anyway im currently looking for a way to actually detect specific key press in the game and react to it by moving an npc.
     
    Back
    Top