Staredit Network > Forums > SC1 UMS Theory and Ideas > Topic: [EUD] Indirect Coordination
[EUD] Indirect Coordination
Jul 18 2011, 4:49 pm
By: Cinolt  

Jul 18 2011, 4:49 pm Cinolt Post #1



It is impossible, through normal means, to change which data is shared and not shared between clients, e.g. resources and unit health are shared, while mouse position and keypresses are not. However, with the player as a gateway, it is possible to display local data through local means, such as leaderboard or text display, which influences him to create coordinated (shared) events (such as unit selection, unit orders) in such a way that they can be translated back into the local data through triggers in all clients.

The prime example is mouse position detection. Fixed in a 20x10 area with an 8-pixel accurate grid, there are 80 possible X positions and 40 possible Y positions. Displaying the mouse coordinates through the leaderboard and using selection detection with hotkeys (10 units for 10 number keys), the user can just type in the displayed score and, utilizing a location grid, a location can be placed under his mouse and then execute whatever actions (create unit, move unit) without desyncs. I threw together a simple test map in a few hours to demonstrate this concept, and I named it FREUDS in parody of Lethal_Illusion's FRAGS.

Other than mouse position detection, I couldn't really think of any other practical use for this concept. Feel free to post if you have any ideas/comments.

Attachments:
FREUDS.scm
Hits: 8 Size: 54.65kb
freuds.protrg
Hits: 4 Size: 34.95kb



None.

Jul 18 2011, 5:31 pm Kaias Post #2



This isn't terribly useful except perhaps in a Chess map. Still, the principle can be applied for easy menu systems in place of local key strike detection.



None.

Jul 19 2011, 6:51 pm TiKels Post #3



You could make a game like Nexus Word Wars with this actually, I would definitely play that.



"If a topic that clearly interest noone needs to be closed to underline the "we don't want this here" message, is up to debate."

-NudeRaider

Jul 27 2011, 2:58 am Sacrieur Post #4

Still Napping

Can this be used for something like mouse rollover, or must it always have a grid? Or could you have a location follow the mouse?



None.

Jul 27 2011, 12:39 pm Cinolt Post #5



It kind of loses meaning without a grid, e.g. for mouse rollover with, let's say 5 static locations, you might as well just detect hotkeyed unit selection of numbers 1-5, and players can just press it without moving the mouse. Or, if you wanted to, you could systematically randomize the numbers to enforce mouse rollover. The location would only be able to move under the mouse when the players input the numbers, so it is not practical in an RTS scenario.

Additional thoughts on the topic: As I look back on this, the concept I described as "Indirect Coordination" is nothing new, as the systems used in FRAGS and Elementa for instance all indirectly detect mouse position, just without EUDs (unit coordinate scanning/system of linear equations).

However I originally came up with this idea when thinking of P2P networking paradigms in games, and of how StarCraft specifically achieved it. First of all, unnaturally changing certain "shared" values in StarCraft, like resources, causes a desyncronization of yourself with the rest of the players. This implies that each host constantly interchanges what it thinks of the "game state" (most likely a calculated hash of a certain set of values), and inconsistent matches desync.

The game state is partially governed by static constructs defined by the map and the StarCraft client (triggers, auto aquired commands, units dying when their HP is 0, etc), and if all maps were 0-player (movie maps) this alone would be fine. However most scenarios additionally require volatile input (player input), shared between all hosts, and each host cannot predict player input of other hosts on its own like it can with static constructs, which is why they must be shared in the form of "events". These events are hardcoded, consisting of only:
  • Unit orders
  • Unit selection
  • Latency alteration
  • Text
  • Hotkeys?

As we all know keypresses and mouse/screen position are excluded from this list, even though they are the crucial volatile inputs of the players. Which is why I thought of devising a system to use what's given to us, the static list of events, have the player create events to "encode" (integer string input) local unshared data, and use triggers to globally "decode" (pseudo-atoi) these events back into the original data.

[Slightly off-topic]

Through both assignment and access buffer overflows it could be possible, with a bit of luck, to devise a system of "Direct Coordination" of local data like mouse position. For instance if StarCraft was set up so the packet struct was defined in the data segment in an array of 9 (1 for the Outgoing packet, 8 for Incoming packets), and it also happened to contain padding/unused bytes, it would be possible to write in custom data there and have it sent to the other hosts. However I lack the skills/motivation/patience to reverse engineer StarCraft to this extent, though I'd be much more motivated if a new buffer overflow was found, because enabling EUD Actions is essentially no different than a mod, and with a mod it would be more efficient to directly modify protocol semantics.

The only source of hope I see with assignment buffer overflows is in Extended Preplaced Units, if someone (Heinermann) could research (disassemble/analyze the stripped code) and document exactly how StarCraft initializes preplaced units to cause these buffer overflows, perhaps we could systematically use these buffer overflows to write data we want where we want it, and perhaps even dynamically in-game rather than just in initialization. My level of knowledge and skills limits me to initiate this kind of research myself.

Post has been edited 2 time(s), last time on Jul 27 2011, 12:49 pm by yoonkwun.



None.

Jul 29 2011, 3:34 pm Sacrieur Post #6

Still Napping

I mean in the application of single player, where desync is not an issue =P



None.

Jul 29 2011, 4:15 pm FoxWolf1 Post #7



Quote from Sacrieur
I mean in the application of single player, where desync is not an issue =P

Why even have a system designed for the purpose of (indirectly) coordinating non-shared data through the use of shared, trigger-directed human player acts in single player? If you want to do mouse rollover in single player, you could just have a location put onto the mouse with a grid system and EUDs (like this or this) and not use indirect coordination at all...



None.

Jul 29 2011, 4:51 pm Sacrieur Post #8

Still Napping

Quote from FoxWolf1
Quote from Sacrieur
I mean in the application of single player, where desync is not an issue =P

Why even have a system designed for the purpose of (indirectly) coordinating non-shared data through the use of shared, trigger-directed human player acts in single player? If you want to do mouse rollover in single player, you could just have a location put onto the mouse with a grid system and EUDs (like this or this) and not use indirect coordination at all...

Some of us aren't smart enough to figure out EUDs so quickly D=



None.

Options
  Back to forum
Please log in to reply to this topic or to report it.
Members in this topic: None.
[01:15 pm]
MTiger156 -- :wob: Rename it to Wob Box :wob:
[06:27 am]
UndeadStar -- :wob:
[04:18 am]
Ultraviolet -- :wob:
[01:55 am]
Vrael -- :wob:
[12:40 am]
Christien Chapman -- Lol
[12:40 am]
Christien Chapman -- Cm on I'm talking to you cmon
[12:40 am]
Christien Chapman -- This is the box where we shout it all out
[12:39 am]
Christien Chapman -- Shout shout let it all out
[12:39 am]
Christien Chapman -- Shout box be ded
[11:06 pm]
KlaSsicaL -- :wob:
Please log in to shout.


Members Online: Roy, Dem0n, Psychic_Genius, Rawflesh0615