Jump to content

SkyNet - Co-Op Gameplay (Theory and potential structure)


hipolipolopigus

Recommended Posts

You sir deserve a cookie. I would pay some money to see this project working.

 

Not being a coder and all ive focused my thoughts onto the time and effort end of this project you've proposed. There might be a way to gain more support with this mod if you think you want to try. Set up a kickstarter fund of some sort and post your information on discussion boards. With the extra money that could come in from it you might be able to get some support from the community if you show your work and use the funds to continue the project. Obviously this would have to wait until the right tools are available and the project proven feasible.

 

Im not sure how Bethseda would react to this kind of project if it actually got funding and ended up working. You could be sued or given a job on their staff. Dont take advice from random people on the internet.

Link to comment
Share on other sites

  • Replies 129
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

I assume that LAN aspect means new saving system. What if you use NWN system (char saved on players pc, savegame (quest progress and so on) on the hosts pc). Instant system sounds reasonable (first to enter runs the instant as a server (there must be a server transfer system so if a current server for the world switches to inst , world server is transfered to another pc). Critical info sent to the host for save. On host disconect (host is the only player online no changes are saved).

 

Was it bad?

It's an option, for sure, but it does sound like a lot of unnecessary switching, which would cause sizable performance load issues.

Link to comment
Share on other sites

You sir deserve a cookie. I would pay some money to see this project working.

 

Not being a coder and all ive focused my thoughts onto the time and effort end of this project you've proposed. There might be a way to gain more support with this mod if you think you want to try. Set up a kickstarter fund of some sort and post your information on discussion boards. With the extra money that could come in from it you might be able to get some support from the community if you show your work and use the funds to continue the project. Obviously this would have to wait until the right tools are available and the project proven feasible.

 

Im not sure how Bethseda would react to this kind of project if it actually got funding and ended up working. You could be sued or given a job on their staff. Dont take advice from random people on the internet.

 

OMG YAY COOKIE! :D I wub cookies :happy:

 

Although I never intended it to be a money-making (Or even making ends meet) exercise, it could be a possible avenue. Having people with experience would be great, but most would want some kind of compensation. I'd probably look at contacting other coders of MMO private servers to get some input on structure and handling. They've dealt with the professional client-end and built a server from that alone.

 

Bethesda would have a bitchfit :happy: Plenty of reasons for them to, too. They had a bitchfit over the LAA fix which they could easily deploy themselves;

(See my screenie of how easy it is here)

 

So... Heh. To Bethesda, I say "Whatever". I paid for a broken game and I'll fix it how I damn well want :happy:

Edited by hipolipolopigus
Link to comment
Share on other sites

First off, good thinking. I agree with you that it's feasible using the process you described; you'd basically be running an extra pair of loops for message handling and game state update reporting outside of Skyrim's own game loop.

 

I kind of do dispute the need for a single world server. I think there definitely needs to be a 'primary master', but any time a player needs a cell loaded (indoor or outdoor) which the primary master doesn't have loaded, the client can handle it by becoming a 'secondary master' until the primary master comes into range. Or if the primary master leaves an area and another client still needs it, they would have to take over maintaining it. I have my doubts that the game engine is actually capable of keeping several disparate areas fully loaded like that.

 

There's also a challenge with running scripts, and not necessarily just quests, but simple things like long-running scripts that change the world state over time. Think like the switches that open the 'claw' doors in tombs; if the player activates it and the master leaves, does the script keep running, or does it pause and the door stops half-way? I actually don't know the answer to that. It'll probably be related to the previous questions about how much of the state for a zone is still active if the master doesn't have that cell loaded at the time.

 

One more problem I see needing a solution has to do with the game pausing while in menus; if that's a basic option, then just disable it, but I don't know how hard it would be to keep the world running while answering a dialog or in a menu. Along the same vein, dealing with fast travelling, sleeping, and time changes would be interesting. I guess you could just disable fast travel entirely, or replace it with teleportation (maybe a spell or fixed gates, to keep it 'in-character') and no change in the game time. And player timescales would have to be synched up in general.

 

Sounds like a hefty project, but definitely not insurmountable with good organization and technical skills, and I wish you well. I can't commit to this project right now because I'm going to be dragged off kicking and screaming to play sw:tor in a couple of weeks. Depending on how that goes, I may come look this up later and see if it's still ongoing.

Edited by Lucubration
Link to comment
Share on other sites

First off, good thinking. I agree with you that it's feasible using the process you described; you'd basically be running an extra pair of loops for message handling and game state update reporting outside of Skyrim's own game loop.

 

I kind of do dispute the need for a single world server. I think there definitely needs to be a 'primary master', but any time a player needs a cell loaded (indoor or outdoor) which the primary master doesn't have loaded, the client can handle it by becoming a 'secondary master' until the primary master comes into range. Or if the primary master leaves an area and another client still needs it, they would have to take over maintaining it. I have my doubts that the game engine is actually capable of keeping several disparate areas fully loaded like that.

 

There's also a challenge with running scripts, and not necessarily just quests, but simple things like long-running scripts that change the world state over time. Think like the switches that open the 'claw' doors in tombs; if the player activates it and the master leaves, does the script keep running, or does it pause and the door stops half-way? I actually don't know the answer to that. It'll probably be related to the previous questions about how much of the state for a zone is still active if the master doesn't have that cell loaded at the time.

 

One more problem I see needing a solution has to do with the game pausing while in menus; if that's a basic option, then just disable it, but I don't know how hard it would be to keep the world running while answering a dialog or in a menu. Along the same vein, dealing with fast travelling, sleeping, and time changes would be interesting. I guess you could just disable fast travel entirely, or replace it with teleportation (maybe a spell or fixed gates, to keep it 'in-character') and no change in the game time. And player timescales would have to be synched up in general.

 

Sounds like a hefty project, but definitely not insurmountable with good organization and technical skills, and I wish you well. I can't commit to this project right now because I'm going to be dragged off kicking and screaming to play sw:tor in a couple of weeks. Depending on how that goes, I may come look this up later and see if it's still ongoing.

...Wow... -Surrenders half-nommed cookie- I like your brain, it works like mine :happy:

 

I definitely like the sound of this primary/secondary master concept, though I fear it would fail miserably if used outside of a LAN environment. As far as I'm aware, that's what the cell buffer is for (uInterior/uExterior Cell Buffer in Skyrim.ini, if I remember correctly). Although that's as useful as a road-kill kite. Perhaps what we need is an INI with options. Lots of options :happy:

 

Yes, the scripts are going to be a pain. Which is why we need that Talos-damned CK so we can get a look-see :pinch: That's where the core-logic/content team would come in. It's an effort, but a worthwhile effort nonetheless.

 

For pausing, I may adopt a system like in Saints Row The Third. One player pausing causes all to pause and the server can kick that player for being annoying if they so desire. Sleeping would probably adopt a Minecraft system where all players need to be sleeping to start the script. Waiting would be... Hard. Perhaps bring up a confirmation screen on all clients asking "Do you wish to wait for {x}?".

 

This will still be here, I'll put my programming future on it (:ohdear: Eeep :sweat:). I don't expect this to be a fast project, perhaps taking many man-years (Total work, not relative work). You're more than welcome back, I'll keep an eye out for you :happy:

 

Just thinking about it, we don't need to run the server inside TESV.exe. Only make a thread inside talk to it. Could open up more dedicated server memory if it were implemented properly, though it could introduce latency issues because it would still need a client to act as a script-host.

Link to comment
Share on other sites

How much is actualy dinamicly calculated (relating to gamplay not video-audio (pc position, item position, etc) excluding static objects)? Client's PC can handle the graphics part of calculations.

You'd only need to send an update to each client when something moved or turned. Though you wouldn't do it for each point on the movement path. Perhaps it might look something like;

(Player set MoveVector to 1, 1, 0) // Player is moving along X and Y (Update with this until we receive something to indicate the contrary)

(Player set MoveVector to 0,1,1) //Player is moving along Y and Z (Update with this until we receive something to indicate the contrary)

(Player set MoveVector to 0,0,0) // Player stopped moving (Update with this until we receive something to indicate the contrary)

 

If... That makes any sense to anybody but me xD Obviously, the packets between client and client/server wouldn't be plain-text. Perhaps formatted as an array like [RefID, CommandID, CommandValue]

Link to comment
Share on other sites

Just thinking about it, we don't need to run the server inside TESV.exe. Only make a thread inside talk to it. Could open up more dedicated server memory if it were implemented properly, though it could introduce latency issues because it would still need a client to act as a script-host.

 

Good thought, there. I've always found that the overhead in local communication using .NET Sockets to be pretty negligible, so that's definitely something you'll want to explore.

 

Edit: For speeding up your netcode in general, you'd want to look into the obvious bits: definitely develop custom serialization for your .NET classes/messages, use socket and thread pools for handling communications, and asynchronous socket sends and receives.

Edited by Lucubration
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...