RavynousHunter on 10/4/2009 at 02:24
'Ey, I'm sure most of us are just curious; take as long as ya need.
sNeaksieGarrett on 10/4/2009 at 04:30
I'm surprised no one has said anything about said problems in 205.:erm:
RavynousHunter on 11/4/2009 at 17:21
Reading some of the older posts here has got me thinking about how exactly to get mid-game joining working, but I'll need some information first.
OK, first off, its pretty obvious that there's scripts that initialize the game's various objects and NPC's; but is there a script that calls them all at once (like first_heartbeat, or somesuch), or does the game call them all individually?
If that's so, and the joining client is trying to join the game in-progress, it may be that Dark is skipping that first heartbeat; you could force that first heartbeat for the client, then have them update the info based on what's happened.
Something like this maybe:
Code:
if ( server.active == true )
{
me.first_heartbeat(); // me in this case being the client
// ask the server for the current map data,
// then reflect those changes in the client's game
me.update_from_server();
}
You could have the update_from_server() function do a quicksave, then have the client load the map data from that quicksave, then have them sync with the server.
Again, this is all theoretical, and I don't know how Dark works exactly, so I'm pretty much just tossing ideas out there to see if one of them works.
Tos on 11/4/2009 at 20:45
It's not that simple, unfortunately.
One of the major sticking points is the large number of properties that can be applied to objects in Dark Engine games, and how to inform late joiners about any changes that might've been made to those properties before they joined the game. One quick look through the object hierarchy in Dromed should be enough to tell you how bandwidth-intensive sending the state of all of every single object's properties to new players would be. :)
The only solution I can think of for this is coming up with some sort of way to narrow down the number of properties that need to be sent for each object, but this would require that the game know a little about what "type" of object it is (and therefore what information can be safely omitted), and objects in the Dark Engine are so abstract and can be so many different things (particularly in fan-made missions) that this would be extremely challenging.
The most seemingly workable idea that I've come up with so far is to create a new object property that gives the game a "hint" about what kind of object it is, and put that property on the base archetypes that most other objects are derived from in the gamesys. The advantage of doing it this way of course is that it could be overridden for child objects that need more information sent about them than the parent, though I'd need to release a patched version of Dromed to allow people to see and edit the property for their own missions.
This is all just theoretical though, I haven't actually tried to do any of it yet. There are plenty of other problems too, such as synchronizing the state of the mission's quest vars with the new player and probably dozens of other things I haven't even thought of yet...
RavynousHunter on 12/4/2009 at 01:56
Yeah, I kinda thought it wouldn't be that simple, I've seen the lotsa, lotsa stuff in DromED.
Correct me if I'm wrong, but isn't there a way that you can tell from what a particular object is derived, like a "childof" variable or somesuch?
Tos on 13/4/2009 at 19:00
It's relatively simple to tell what object an object is immediately derived from or whether it's a child of a specific object/archetype using the game functions. It's probably possible to retrieve the entire inheritance tree too, though nothing I've done has ever required that I figure out how to do that.
Tos on 14/4/2009 at 04:09
I've decided to go ahead and release what I've done on the next version so far. This hasn't been tested as much as the previous versions were so I'm holding off on posting it to the official site, but you can grab it (
http://thief.procyonserver.com/downloads/T2MPSetup_210.exe) here for now.
Change list:
- The automap and readables are now displayed as overlays in the game world. Viewing these will not pause the game for other players.
- Removed framerate limit settings. Made some changes to Thief’s timing that should prevent the game speed from varying excessively with changes in frame rate. The framerate is now limited to a maximum of 100 FPS.
- AIs should now speak the exact same lines for each player in the game.
- The starting mission dropdown in the host game dialog now shows currently installed fan missions.
- Sped up mission loading/synchronization a bit.
- The mission will now end correctly if an objective fails while the host is dead.
- Loot is now displayed normally in client inventories when loot sharing is enabled.
- Loot totals are displayed correctly at the end of the mission for clients.
- The time limit no longer counts down while the game is paused.
----------------------------------------------------------
The overlays for books and other readables may appear corrupted if you have installed the Thief Enhancement Pack or other graphical mods. I'm not sure what's causing this exactly or if it's even still an issue (this was discovered during testing several months ago), but if it's a problem you can turn off the overlays by editing ThiefMP.ini and changing the "UseOverlays" setting.
Poesta on 14/4/2009 at 07:18
Nice work Tos. The overlays work, but could you make the automap centered like the books? And I don't understand this:
- The mission will now end correctly if an objective fails while the host is dead.
If an objective fails the mission should fail too right?
Oh, and the installer puts '\Thief2' behind the install path if you select it in the popup screen (not if you enter it manually) so you will run the older version if you don't check this and run thief2.exe.
clearing on 14/4/2009 at 10:45
Thanks, Tos!
Thief-anewnickname on 15/4/2009 at 01:18
Do we have a way of getting in touch with each other to play these games multiplayer? Seeing as I don't know anyone that plays this game (still) it would be good if we could schedule games and have people message to a thread when a game is about to start.