Syncing map files in multiplayer

Questions about the content creation procedure go here, including using Forge, Anvil, or other editors, or operating emulators like Basilisk II.

Post Jun 30th '09, 02:05

So with my testing of Eternal X 1.1 coop lately, I'm noticing an odd thing. Even though (so it appears) the gatherer's map is sent to all the joiners when the game begins, I'm finding that unless the joiners first download the supplementary map file and replace their old map file with it, we inevitably go out of sync.

What can be done about this, if anything?

On a related note, since the texture placement and sequence IDs and so on are all the same between Eternal X 1.0.x and later versions, is there any reason why the <scenario> tag and its sub-tags should be different between 1.0.x and later versions? (1.1.0b1 accidentally has "Eternal X Omega" in there instead of "Eternal X" like the 1.0.x versions did, although that doesn't seem to prevent people with 1.0.x versions from joining 1.1.0b1 games, oddly enough).
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California

Post Jun 30th '09, 13:13

Pfhorrest wrote:So with my testing of Eternal X 1.1 coop lately, I'm noticing an odd thing. Even though (so it appears) the gatherer's map is sent to all the joiners when the game begins, I'm finding that unless the joiners first download the supplementary map file and replace their old map file with it, we inevitably go out of sync.

What can be done about this, if anything?

This can be caused by the old type of embedded MML and Lua (TEXT resources). Aleph One now has a feature where it will not load TEXT resource scripts if the map checksums do not match! This usually fixes more harm than it causes, but in your case, it's probably detrimental.

A good way to fix it is to use Atque to embed the MML and Lua directly into the level, instead of using TEXT resources. For a scenario as large as Eternal X, this could be a lot of work.

On a related note, since the texture placement and sequence IDs and so on are all the same between Eternal X 1.0.x and later versions, is there any reason why the <scenario> tag and its sub-tags should be different between 1.0.x and later versions? (1.1.0b1 accidentally has "Eternal X Omega" in there instead of "Eternal X" like the 1.0.x versions did, although that doesn't seem to prevent people with 1.0.x versions from joining 1.1.0b1 games, oddly enough).

The name and version attributes are for display only, so you might as well update the version attribute. Change the id attribute only when there is a change that would make players go out of sync, such as new shapes or global MML.
Last edited by treellama on Jun 30th '09, 13:19, edited 1 time in total.
User avatar

treellama
Pittsburgh

Post Jun 30th '09, 23:12

Treellama wrote:This can be caused by the old type of embedded MML and Lua (TEXT resources). Aleph One now has a feature where it will not load TEXT resource scripts if the map checksums do not match! This usually fixes more harm than it causes, but in your case, it's probably detrimental.

I don't quite follow what this change was. Are you saying that AO now (since which version? I'm still using the last stable build) sees that the joiner's map and gatherer's map differ, and because of that does *not* transmit the resource fork of the gatherer's map to the joiner? Whereas before it would send the whole thing if they differed? What harm was the old way causing that the new way fixes?

A good way to fix it is to use Atque to embed the MML and Lua directly into the level, instead of using TEXT resources. For a scenario as large as Eternal X, this could be a lot of work.
Couldn't I just use Forge merging like I have been for all my dev work, then just split and remerge the resultant map file with Atque, to get the newer format? Or will Atque ignore the resource fork of the Forge-merged map? If so, would it help to macbinary the map before splitting it with Atque, or no?

The name and version attributes are for display only, so you might as well update the version attribute. Change the id attribute only when there is a change that would make players go out of sync, such as new shapes or global MML.

Thanks, will do!
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California

Post Jun 30th '09, 23:27

Pfhorrest wrote:I don't quite follow what this change was. Are you saying that AO now (since which version? I'm still using the last stable build) sees that the joiner's map and gatherer's map differ, and because of that does *not* transmit the resource fork of the gatherer's map to the joiner? Whereas before it would send the whole thing if they differed? What harm was the old way causing that the new way fixes?

Before, if you had any map with embedded MML or Lua selected, and you joined a net game, you'd load that map's MML and/or Lua and go out of sync! Aleph One never transmits the resource fork, remember, not even terminal PICTs.

Couldn't I just use Forge merging like I have been for all my dev work, then just split and remerge the resultant map file with Atque, to get the newer format?
Yes, but it will still embed it as TEXT resources, which aren't transmitted, unless you change the files to .lua and .mml and stick them in the with appropriate levels instead. https://sourceforge.net/apps/mediawiki/ ... que_Manual
Or will Atque ignore the resource fork of the Forge-merged map?

No, it preserves existing resources as best it can, although it merges them using M2-Win95 style resources, not MacBinary resources.
If so, would it help to macbinary the map before splitting it with Atque, or no?

Nope, Atque in Mac OS X can read native resources just fine, as well as MacBinary and M2-Win95, for the purposes of splitting.
Last edited by treellama on Jun 30th '09, 23:33, edited 1 time in total.
User avatar

treellama
Pittsburgh

Post Jul 1st '09, 01:36

Treellama wrote:Before, if you had any map with embedded MML or Lua selected, and you joined a net game, you'd load that map's MML and/or Lua and go out of sync! Aleph One never transmits the resource fork, remember, not even terminal PICTs.

Oh, I see now - the change wasn't to stop transmitting the embedded resources, it was to stop loading them, since they weren't being transmitted to the other players. Though it makes me wonder, why not transmit the gatherer's embedded Lua and MML to the joiners to prevent the OOS, instead of not loading the gatherer's embedded Lua and MML?

In either case, that doesn't appear to be what's happening, because without the embedded Lua, Eternal's weapons function all wonkily - and in these coop games they seem to be functioning fine. Also, without the embedded MML, the in-game music wouldn't play, but it is. So both the joiners and the gatherer are loading the embedded Lua and MML resources, but we're still getting OOS errors unless we manually sync our map files ahead of time.

Also, if it's relevant at all, none of the embedded resources between the two map files are different at all, just some changes in the actual map data; some texture placement, and a missing level reinstituted. Although, I'm not entirely sure how that level didn't get merged into the original 1.1.0b1 to begin with, so maybe the map file in 1.1.0b1 is borked and that's causing some of these troubles somehow...
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California

Post Jul 1st '09, 01:52

Pfhorrest wrote:Oh, I see now - the change wasn't to stop transmitting the embedded resources, it was to stop loading them, since they weren't being transmitted to the other players. Though it makes me wonder, why not transmit the gatherer's embedded Lua and MML to the joiners to prevent the OOS, instead of not loading the gatherer's embedded Lua and MML?

It would have been a lot of work to do this, compared to transmission of map chunk embedded Lua and MML which came almost for free. Given the paucity of scenarios using it, and the likelihood that scenario MML would resolve the OOS issues in those cases since most only came with one map file, I judged it not to be worth the effort.

In either case, that doesn't appear to be what's happening, because without the embedded Lua, Eternal's weapons function all wonkily - and in these coop games they seem to be functioning fine. Also, without the embedded MML, the in-game music wouldn't play, but it is. So both the joiners and the gatherer are loading the embedded Lua and MML resources, but we're still getting OOS errors unless we manually sync our map files ahead of time.

I don't understand how it's even possible for joiners who don't have the 1.1.0b1 map to run its scripts! The game shouldn't run any scripts at all if it can't find that file. Are you sure they don't have it somewhere, in a subdirectory maybe?
User avatar

treellama
Pittsburgh

Post Jul 1st '09, 05:33

Treellama wrote:I don't understand how it's even possible for joiners who don't have the 1.1.0b1 map to run its scripts! The game shouldn't run any scripts at all if it can't find that file. Are you sure they don't have it somewhere, in a subdirectory maybe?


Hmm... I feel like maybe we are OOS in this conversation here :-)

There are four setups in question here:

- old Eternal X 1.0.x fresh installs (ok, technically this is several setups, but I doubt anyone is using anything lower than 1.0.3, and the differences between 1.0.x versions are tiny)
- old Eternal X 1.0.x installs plus the replacement map file
- Eternal X 1.1.0b1 fresh installs
- Eternal X 1.1.0b1 installs plus the replacement map file

The embedded MML and Lua in 1.1.0b1's map file and in the newer replacement map file are identical. The embedded MML and Lua in 1.0.x is at most very slightly different. Other differences between 1.0.x and 1.1.0, outside the Map and Images file and the texture DDS files, are trivial, if any at all.

I'm hosting with 1.1.0b1 plus the replacement map file.

If someone with a 1.1.0b1 fresh install joins, we get OOS.
If that someone then downloads the replacement map file, it works fine.
If someone with a 1.0.x fresh install joins, we get OOS.
If that someone then downloads the replacement map file, it works fine.

In all cases, even when we OOS, the weapon-munging Lua and music-playing MML (all of which are map-embedded and without significant, if any, differences in all versions under discussion here), work for both gatherer and joiner. The only difference is OOSing.

Also, I don't play enough AO multiplayer to know: does AO give an OOS warning normally, or do we just rely on players noticing each other running into walls, etc? Cause we're not getting any warnings from the game, we're just noticing each other running into walls, etc.
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California

Post Jul 1st '09, 13:02

I'm not sure how to be more clear than this. With text resource MML and Lua, everyone has to have the same map file as the gatherer somewhere in their folder or the game will go OOS :)

If people without the map file are still seeing Lua and MML scripts being run, there is either a bug in the engine, or the checksums of those map files match. Can you post the checksums I guess?

Aleph One does not have an OOS warning.
Last edited by treellama on Jul 1st '09, 13:20, edited 1 time in total.
User avatar

treellama
Pittsburgh

Post Jul 1st '09, 22:35

Treellama wrote:If people without the map file are still seeing Lua and MML scripts being run, there is either a bug in the engine, or the checksums of those map files match.

So it wouldn't (or at least shouldn't) be running the scripts in their older versions of the map file (which are all also named Eternal_Maps.sceA)? Unless the checksums between them match, which I really doubt they would. If the checksums differ, we should all be seeing no (embedded) MML or Lua at all, and be going out of sync?

Can you post the checksums I guess?

How do I checked sum?
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California

Post Jul 2nd '09, 13:28

Pfhorrest wrote:So it wouldn't (or at least shouldn't) be running the scripts in their older versions of the map file (which are all also named Eternal_Maps.sceA)? Unless the checksums between them match, which I really doubt they would. If the checksums differ, we should all be seeing no (embedded) MML or Lua at all, and be going out of sync?

That's the idea, obviously it's not working that way.
How do I checked sum?

Mmm...yeah, good question. I think if you pick the map file in Aleph One, then quit and open the prefs file, there's a map checksum in there somewhere. Or, you can send them to me and I'll test them, maybe.

As you might know, a new addition to the family is keeping me very busy, so I don't know when I'll be able to help.
User avatar

treellama
Pittsburgh

Post Jul 2nd '09, 17:38

Treellama wrote:Mmm...yeah, good question. I think if you pick the map file in Aleph One, then quit and open the prefs file, there's a map checksum in there somewhere.

Thanks, I'll try that later tonight.

As you might know, a new addition to the family is keeping me very busy, so I don't know when I'll be able to help.

I did not know that! Congratulations!
-Forrest Cameranesi, Geek of All Trades
Director of the Xeventh Project, the team behind Eternal
"I am Sam. Sam I am. I do not like trolls, flames, or spam."
User avatar

Pfhorrest
California


Return to Editors, Emulation, Etcetera



Who is online

Users browsing this forum: No registered users

cron