Local EUDs Made Multiplayer
Post #1
Kaias
Apr 1 2012, 10:22 pm
Post #2
Roy
Apr 1 2012, 10:30 pm
|
An artist's depiction of an Extended Unit Death
|
This is absolutely fantastic. You could kill the egg for "Current Player" to distinguish players, correct? For example, if everyone has an egg and Player 2 presses the L key, only his egg will die and it will be perfectly legal, and we would know that Player 2 pressed the key because he no longer has an egg.
Something like:
Edit: Wait, that wouldn't work; it would kill all eggs for one client. This post was edited 1 time, last edit by Roy: Apr 1 2012, 10:37 pm. ![]() ![]() ![]() ![]() ![]() ![]() Learn how to make EUDs: [EUD] A Mapmaker's Guide for Creating EPDs
Don't like learning? EUDGen2 Other stuff: Farlap Bound Maker [EUD] EUPCalc SC1 Maps: Dash: 1 2 3 4 5 6 7 8 9 X Jog: Original Warp Other: Super Mario SC Fireball Guard Your Civilian Strength Contest Interceptor Arena |
Post #3
Kaias
Apr 1 2012, 10:38 pm
|
No, this is where it gets tricky. Current Player refers the the player the triggers are being run for, not the player that the client is playing.
If you had a trigger that used current player and Player 1 and Player 2 owned the trigger, it would be identical to there being 2 triggers, one for each player with Player 1 and Player 2 substituted in place of Current Player. That means that if any player presses the L key, it activates the trigger for each player that owns the trigger, and consequently kills the egg for every player, causing a desync. Thats where the last bit comes into play. EDIT: And it seems you've realized your error already This post was edited 2 times, last edit by Kaias: Apr 1 2012, 10:50 pm. ![]() ![]() ![]() ![]() ![]() ![]() |
Post #4
O)FaRTy1billion
Apr 1 2012, 10:45 pm
|
.rapsdleF
|
Computer with lots of larva and AI building units that never finish, then give eggs?
![]() ![]() ![]() ![]() ![]() ![]() TinyMap2 - Latest in map compression! [ 8/26/12 - New build! Potentially fixed Win7 crash ]
EUD Action Enabler - Lightweight EUD/EPD support! (ChaosLauncher/MPQDraft support!) EUDDB - topic - Help out by adding your EUDs! Or Submit reference files in the References tab! MapSketch - New image->map generator! EUDTrig - topic - Quickly and easily convert offsets to EUDs! (extended players supported) SC2 Map Texture Mask Importer/Exporter - Edit texture placement in an image editor! times! |
Post #5
Kaias
Apr 1 2012, 10:52 pm
|
Thinking about it though, you could put all your "Current Player" triggers nested in a switch that contains the player delineator.
Example: TRIGGER 1: PLAYERS: Player 1 CONDITIONS: Client is Player 1 (eud shorthand) ACTIONS: Set Switch 1 TRIGGER 2: PLAYERS: Player 2 CONDITIONS: Client is Player 2 (eud shorthand) ACTIONS: Set Switch 1 TRIGGER 3: PLAYERS: Player 1, Player 2 CONDITIONS: Switch 1 is Set L is pressed ACTIONS: Kill Egg for Current Player TRIGGER 4: PLAYERS: Player 1, Player 2 CONDITIONS: Switch 1 is Set Current Player Commands 0 Zerg Eggs ACTIONS: Actions! TRIGGER 5: PLAYERS: Player 1, Player 2 CONDITIONS: Switch 1 is Set ACTIONS: Clear Switch 1 I haven't tried, is there a good script for that? I'm not very familiar with Campaign Scripts, but theoretically that might work. ![]() ![]() ![]() ![]() ![]() ![]() |
Post #6
O)FaRTy1billion
Apr 1 2012, 11:01 pm
|
.rapsdleF
|
Any of them?
giveeggs.scm (38.67 kb) -- 9 hits I just did drones because I figured they'd build a lot of them. I'm not really sure how the AIs work, so other units might work better ... This post was edited 1 time, last edit by FaRTy1billion: Apr 1 2012, 11:14 pm. ![]() ![]() ![]() ![]() ![]() ![]() TinyMap2 - Latest in map compression! [ 8/26/12 - New build! Potentially fixed Win7 crash ]
EUD Action Enabler - Lightweight EUD/EPD support! (ChaosLauncher/MPQDraft support!) EUDDB - topic - Help out by adding your EUDs! Or Submit reference files in the References tab! MapSketch - New image->map generator! EUDTrig - topic - Quickly and easily convert offsets to EUDs! (extended players supported) SC2 Map Texture Mask Importer/Exporter - Edit texture placement in an image editor! times! |
Post #7
jjf28
Apr 1 2012, 11:15 pm
|
Relax.
|
Nice work!
I've scanned the abyss for something like this for some time with absolutely no good results Don't have time to fuss with math atm, but remember that you have a second variable to manipulate here, Time!!! Have the host that reads the local EUD wait till the cycle of the desired value pops around before you send anything (if you can tolerate the extra cycles with no loss of functionality, that is). edit: Probationary math: range for send-able integers = 2^eggs * 2^(tolerable cycles-1) edit2: Almost forgot! these may or may not be able to increase your networking efficiency Cyclical Countoffs (possibly less eggs) This post was edited 3 times, last edit by jjf28: Apr 1 2012, 11:29 pm. |
Post #8
Kaias
Apr 1 2012, 11:18 pm
|
Computer with lots of larva and AI building units that never finish, then give eggs? giveeggs.scm (38.67 kb) -- 9 hits Wow, that was a lot better than I expected. Its pretty fast too. Though, if you're passing a Screen Position and Cursor Position coordinates combination, for example, the Egg demand could get really high. There's actually a (mostly concept) map that would be amazing if it used this that Lethal (primarily) and I made. It uses screen position and mouse position pairs to figure out where your mouse is on the map, which, without a regenerating Egg supply, couldn't feasibly use this on. I'll ask Lethal about posting the map when he gets online. ![]() ![]() ![]() ![]() ![]() ![]() |
Post #9
Biophysicist
Apr 1 2012, 11:42 pm
|
:(){ :|:& };:
|
...Do the eggs have to be created by a Larva morphing, or do other ways work too? (Like a preplaced egg, or one summoned by a modified AI script.)
Regardless this is amazing. Wheeeeeeeeeeeeee! ![]() ![]() ![]() ![]() ![]() ![]() Catapultam habeo. Nisi pecuniam omnem mihi dabis, ad caput tuum saxum immane mittam.
|
Post #10
Jack[RCDF
Apr 2 2012, 12:00 am
|
Skin to bone, steel to rust, ash to ashes, dust to dust.
|
Wow I am definitely going to be using this in my RPG, this is great news!
![]() ![]() ![]() ![]() ![]() ![]() Red classic. I have mostly left SEN except for the Temple Siege 2 forum (hidden to most of you). I am available via PM still, and Skype as JackRCDF. If it is important to you, you will find a way. Otherwise, you will find an excuse. -Unknown Magnificent! Perhaps you shouldn't be on SEN as much, too... Better than the iPad! |
Post #11
Kaias
Apr 2 2012, 2:30 am
|
Don't have time to fuss with math atm, but remember that you have a second variable to manipulate here, Time!!! Have the host that reads the local EUD wait till the cycle of the desired value pops around before you send anything (if you can tolerate the extra cycles with no loss of functionality, that is). edit: Probationary math: range for send-able integers = 2^eggs * 2^(tolerable cycles-1) edit2: Almost forgot! these may or may not be able to increase your networking efficiency Cyclical Countoffs (possibly less eggs) Cyclical Countoffs, very interesting. ![]() ![]() ![]() ![]() ![]() ![]() |
Post #12
jjf28
Apr 2 2012, 6:13 am
|
Relax.
|
ok so:
[11:56 pm] Kaias -- At this point I feel compelled to tell you Local EUDs Made Multiplayer is my April Fools Prank Slight disappointment aside: make note that Alliance Status is not an immediate desync contrary to http://farty1billion.dyndns.org/euddb/?pg=ref&a=actions, this is one of my lines of research put on hold, seeing as how alliance status actually does something, it may be worth looking into yes reporters, it happens to be past 12:00am SEN time ;p and I'm putting fourth something that could possibly make this thread useful. This post was edited 2 times, last edit by jjf28: Apr 2 2012, 7:02 am. |
Post #13
Roy
Apr 2 2012, 8:06 am
|
An artist's depiction of an Extended Unit Death
|
Slight disappointment aside: make note that Alliance Status is not an immediate desync contrary to http://farty1billion.dyndns.org/euddb/?pg=ref&a=actions, this is one of my lines of research put on hold, seeing as how alliance status actually does something, it may be worth looking into I actually had a lot of fun building a system for this, and it was a great excuse to take a break from EUDGen. Flawless 4-Player WASD map using the egg system (including chat/menu checks): This post was edited 1 time, last edit by Roy: Apr 2 2012, 8:12 am. ![]() ![]() ![]() ![]() ![]() ![]() Learn how to make EUDs: [EUD] A Mapmaker's Guide for Creating EPDs
Don't like learning? EUDGen2 Other stuff: Farlap Bound Maker [EUD] EUPCalc SC1 Maps: Dash: 1 2 3 4 5 6 7 8 9 X Jog: Original Warp Other: Super Mario SC Fireball Guard Your Civilian Strength Contest Interceptor Arena |
Post #15
Kaias
Apr 2 2012, 9:09 am
|
Slight disappointment aside: make note that Alliance Status is not an immediate desync contrary to http://farty1billion.dyndns.org/euddb/?pg=ref&a=actions, this is one of my lines of research put on hold, seeing as how alliance status actually does something, it may be worth looking into I actually had a lot of fun building a system for this, and it was a great excuse to take a break from EUDGen. Flawless 4-Player WASD map using the egg system (including chat/menu checks): ![]() ![]() ![]() ![]() ![]() ![]() |
Post #16
Roy
Apr 2 2012, 9:54 am
|
An artist's depiction of an Extended Unit Death
|
Aye, I kept running out of eggs, which led to the press/release idea. I thought it was going to be simple, but then I had a whole mess of the local and global switches getting desynchronized, so you could end up hitting down to go up, or you're always running left unless you hold down the right key. The fix for that was moving all the egg-killing to triggers that simply check for if the local and global switches are desynchronized; if they are, the appropriate egg is killed to flip the global switch to match the local one. This way, the global game state will inevitably synchronize with each player's local state.
At the very least, I'm ready in case we do discover an exploit like this. I know there is a way to accomplish local EUDs in multiplayer by abusing the lag timer, if you want to play Russian Roulette. Maybe something more practical will eventually come along... ![]() ![]() ![]() ![]() ![]() ![]() Learn how to make EUDs: [EUD] A Mapmaker's Guide for Creating EPDs
Don't like learning? EUDGen2 Other stuff: Farlap Bound Maker [EUD] EUPCalc SC1 Maps: Dash: 1 2 3 4 5 6 7 8 9 X Jog: Original Warp Other: Super Mario SC Fireball Guard Your Civilian Strength Contest Interceptor Arena |
Post #18
jjf28
Apr 2 2012, 8:08 pm
|
Relax.
|
To elaborate on my prior mention of alliance status...
What we really need to make something like this work is a single value - binary or otherwise - that gets sent between hosts as the sole result of triggers This list gives a rough outline of what is available (under actions that don't desync) most of these are entirely useless as they bring us full circle (such as unit speech, mission objectives, etc), they only execute something that matters locally, however, I think we have two actions (excluding overflow actions for the moment) that have possibilities for something getting transferred, THIS IS NOT PROBABLE, don't assume something will magically happen, it's merely possible. - Set Alliance Status - Set Invincibility Both of these have a unique property that allows them to change the nature of orders given to certain units, I think it's remotely possible that when an order is placed by a human, some kind of shorthand is used... rather than sending the xy coordinates of the click, when you tell a unit to attack another unit, something like the ID of the unit targeted is sent, I think it's possible to harness the mismatch in orders prior to Starcraft sensing a mismatch in unit position, and then (getting even deeper into improbabilities) correct the units' positions prior to a desync occurring, and using the data that could only possibly be there if the first host had one of the above actions performed (you know what this data is because you mapped it in!), sync for a global action. Again, very improbable; but possibly incredibly rewarding! |
Post #19
TiKels
Apr 2 2012, 8:36 pm
|
Interesting. I would have to do some testing as I am not positive about the nature of how the orders are sent. Does one player's computer check what a unit is doing and then send it? Pretty sure each player runs it for himself. Maybe make a unit that you cannot target because of vision but you have every ability to? The EUD activates and it gives vision so you fire and kill it? This would only work if it shares the attack command as if you had ordered it. I mean I suppose you could spoof that command with a program couldn't you (GOGOGO FARTY)? Alternatively you could own a unit you don't see and have it near another player's unit. When you do the EUD it unallies you and then causes you to fire. This would only work if the "attack" command is shared rather than the vision.
Meh. My 2 cents ![]() ![]() ![]() ![]() ![]() ![]() |
Post #20
Roy
Apr 3 2012, 3:37 am
|
An artist's depiction of an Extended Unit Death
|
Time to play Devil's Advocate...
Both of these have a unique property that allows them to change the nature of orders given to certain units... ... I think it's remotely possible that when an order is placed by a human, some kind of shorthand is used... rather than sending the xy coordinates of the click, when you tell a unit to attack another unit, something like the ID of the unit targeted is sent... If you make a unit invincible for only one client, and then bring a hostile unit in range of that unit, the hostile unit for the other clients will attack the unit, which will not match the client who has the unit as invincible, causing the desync. I think it's possible to harness the mismatch in orders prior to Starcraft sensing a mismatch in unit position, and then (getting even deeper into improbabilities) correct the units' positions prior to a desync occurring, and using the data that could only possibly be there if the first host had one of the above actions performed (you know what this data is because you mapped it in!), sync for a global action. Interesting. I would have to do some testing as I am not positive about the nature of how the orders are sent. Does one player's computer check what a unit is doing and then send it? Pretty sure each player runs it for himself. The way I visualize Battle.net's operation (which is not to be taken factually) is as follows: 1. Player sends any commands he has to Server. Server adds it to a list of commands for the next update (determined by game latency). 2. When the next update is expected, Player asks Server for all commands (other than his own). Server sends Player all commands performed from other players. If this process takes a while, the game will freeze until it is complete (network lag). 3. Player executes all commands. If this process takes a while, the game will freeze until it is complete (processor lag). That is approximately what happens. And now I forgot why I explained it... Hopefully it's an interesting read, at the very least. Maybe make a unit that you cannot target because of vision but you have every ability to? The EUD activates and it gives vision so you fire and kill it? This would only work if it shares the attack command as if you had ordered it. I mean I suppose you could spoof that command with a program couldn't you (GOGOGO FARTY)? Alternatively you could own a unit you don't see and have it near another player's unit. When you do the EUD it unallies you and then causes you to fire. This would only work if the "attack" command is shared rather than the vision. ![]() ![]() ![]() ![]() ![]() ![]() Learn how to make EUDs: [EUD] A Mapmaker's Guide for Creating EPDs
Don't like learning? EUDGen2 Other stuff: Farlap Bound Maker [EUD] EUPCalc SC1 Maps: Dash: 1 2 3 4 5 6 7 8 9 X Jog: Original Warp Other: Super Mario SC Fireball Guard Your Civilian Strength Contest Interceptor Arena |
0 members in this topic (italic members are currently writing a reply): None
+ guest(s)
+ guest(s)
[03:37 am]
[03:28 am]
[03:28 am]
[03:27 am]
[01:48 am]
[01:31 am]
[01:25 am]






times!

![[close]](/images/up.gif)