[Recruiting] Programmers for Co-op project

Post » Fri May 18, 2012 7:17 pm

I have something to say to you that motivates everybody, money, I would pay for co-op in SKYRIM (just replacing the NPC companion would be enough).

Suggestion:
-Try to make it fast or else everyone is going to be playing something else

GOOD LUCK!

I'm pretty sure that putting up Mods for money is illegal, though Steamworks of course could change that. And considering that people still play Morrowind today, I think we don't have to rush into anything. We will try to get a working prototype out as soon as possible to convince Modders to create multiplayer content, but we are planning for this to be a long running project.
User avatar
Robert DeLarosa
 
Posts: 3415
Joined: Tue Sep 04, 2007 3:43 pm

Post » Fri May 18, 2012 7:48 pm

I'm very intrigued by this project.

First, about me: I'm 22. I've been programming primarily in ActionScript 3.0 for nearly 4 years now. I've used it to ship a small iPad game (currently unreleased, thankfully I'm not the distributor) and am now working on a second one. I spent a year working on an XBox game engine (http://www.sareptastudio.com/shadowpuppeteer/), where I mostly did interactions between the 2D and 3D world, camera path algorithms and other spatial stuff. I'm fluent in C#, good in C++ and know bits and bobs of .NET. The problem in this case is that I've absolutely no experience in network programming (I'm starting up my own web server using WAMP as a learning project though), and while I know the theory of code injection I probably have too little hands-on experience with lowlevel coding and .NET to be of much help with this project.

I do have a lot of experience with TESscripting however. Previous works include the Hoverboard mod for Fallout New Vegas and my vampire mod for Oblivion. If you need any scripts I'd be happy to help.

Back to the wonderful car anology here. What you're doing is essentially walking down to the highway, jumping onto a passing car without smashing yourself to bits, and then rebuilding it into a bus without the driver noticing or the engine stalling. From my naive and inexperienced point of view this does seem a bit ambitious, so I was wondering if it might not be a better idea to just http://stagevu.com/img/thumbnail/mqdzehkcngiwbig.jpg

I mean 2-player of course. Just two players. Less strain on the server side and more room for specialising the code to work in a 2-player solution. Maybe they could share the work, so that one part handles, say, pathfinding and scripting, and the other handles physics?

Anyway, good luck with the project however it turns out, and tell me if there's anything I can help with (testing, "slave" work like finding memory addresses, etc.).
User avatar
Siobhan Thompson
 
Posts: 3443
Joined: Sun Nov 12, 2006 10:40 am

Post » Fri May 18, 2012 9:59 pm

Nekhanimal, it sounds like you could be very helpful, even if your can't help with the core issues there is a lot of scripting to be done to make Skyrim enjoyable for multiple players. Fi you want to join us, just copy and paste this post into our forum at http://skynet.hipolipolopig.us/
User avatar
Andrew Tarango
 
Posts: 3454
Joined: Wed Oct 17, 2007 10:07 am

Post » Fri May 18, 2012 9:05 pm

It's certainly a neat idea, but I don't see how it "makes more sense" :confused:

I didn't mean it makes more sense than co-op, I meant "makes more sense" as like... as me and friend are chatting, and we make comments, the comments will make more sense in context of knowing where they are.
User avatar
Madeleine Rose Walsh
 
Posts: 3425
Joined: Wed Oct 04, 2006 2:07 am

Post » Fri May 18, 2012 1:13 pm

Personally I think this is kind of a poor project to start simply for learning experience.

Depends on your skill level. I'm half considering paying $500 for an Ida Pro license and trying to disassemble as much of the game engine as I can figure out, just to learn about disassembling. That's also not a project I'd recommend to most people just for the learning experience, but it fits me just fine. ;)

Modding is great for learning on two levels: it teaches you to anolyze and understand software ecosystems, and it teaches you to be creative about working around limitations in existing systems. This project, however you approach it, has both of those in spades.


It's just that in this instance, we have a working MP *framework* (it's very modular) that can easily be ported to Skyrim without having to rewrite all the other stuff that VaultMP already has (chat, querying master server, dealing with replicating moves from the server and remote client, etc.) and that is all written to be game agnostic already (the game-specific logic is all encapsulated, as is the data for functions and actor values).

That does sound quite nice. I'll have to take a peek at the code myself.


I can understand why some people would want to start from scratch too (to new programmers, starting from scratch often seems much easier than learning someone's codebase, even when that's far from the reality).

Ain't that the truth.

A new programmer writes his own solution. An intermediate programmer can tell you about an awesome framework/language that practically solves the problem for him. A true greybeard only writes his own solution after reading the source code of existing solutions and calling the authors idiots.

Hell is other people's code. :flamethrower:


Edit: One final note. While I'm sure this code base is a good find and it sounds very nice, it's also the easy part of the project. I don't think it's a coincidence that the author of your code got that far and petered out.

The hard part is retooling the game engine itself and the flow of the game content to actually work as a multiplayer system. That's the part that will take months or years, if it's even possible. Even getting something as simple as conversations with NPCs to work sanely in a multiplayer context will be very hard.

Think of just the opening sequence of the game. You and whichever guy you pick, running through tunnels to escape, gates clinking shut behind you, etc. The game expects at certain points that the player is in a particular part of the cell. What if player two is still chillin one room back? How do you resolve that without potentially breaking the whole series of scripted sequences?

Soooo much of the scripting and internal state tracking is designed to work for only one player. We're not just talking about stuff like owning the house in Whiterim. Even your unlocked dragon shouts are tracked in global variables. Whole swaths of important player information are stored not on the actor instance, but in globals.

Even if we use SKSE to add the necessary hooks to allow scripts to have awareness of a second player, we're still left with rewriting perhaps the majority of the game scripts to account for their possible presence. And that's just one aspect.
User avatar
NeverStopThe
 
Posts: 3405
Joined: Tue Mar 27, 2007 11:25 pm

Post » Fri May 18, 2012 5:17 pm

I have something to say to you that motivates everybody, money, I would pay for co-op in SKYRIM (just replacing the NPC companion would be enough).

I talked about you guys here:

http://www.gamesas.com/index.php?/topic/1301558-req-replace-npc-companion-with-real-friend/page__gopid__19662266#entry19662266

Regarding redoing stuff, everybody thought that 3D graphics were done in a certain manner, then Unlimited Detail (Euclideon) happened (no, it isn't a hoax, the government of Australia is funding them), so that defeats the argument of "throw away your ideas, use others".

Suggestion:
-Try to make it fast or else everyone is going to be playing something else

GOOD LUCK!
I just did a small network test since I just got the TcpClient to behave properly :happy: http://skynet.hipolipolopig.us/index.php?threads/84/
I'm very intrigued by this project.

First, about me: I'm 22. I've been programming primarily in ActionScript 3.0 for nearly 4 years now. I've used it to ship a small iPad game (currently unreleased, thankfully I'm not the distributor) and am now working on a second one. I spent a year working on an XBox game engine (http://www.sareptastudio.com/shadowpuppeteer/), where I mostly did interactions between the 2D and 3D world, camera path algorithms and other spatial stuff. I'm fluent in C#, good in C++ and know bits and bobs of .NET. The problem in this case is that I've absolutely no experience in network programming (I'm starting up my own web server using WAMP as a learning project though), and while I know the theory of code injection I probably have too little hands-on experience with lowlevel coding and .NET to be of much help with this project.

I do have a lot of experience with TESscripting however. Previous works include the Hoverboard mod for Fallout New Vegas and my vampire mod for Oblivion. If you need any scripts I'd be happy to help.

Back to the wonderful car anology here. What you're doing is essentially walking down to the highway, jumping onto a passing car without smashing yourself to bits, and then rebuilding it into a bus without the driver noticing or the engine stalling. From my naive and inexperienced point of view this does seem a bit ambitious, so I was wondering if it might not be a better idea to just http://stagevu.com/img/thumbnail/mqdzehkcngiwbig.jpg

I mean 2-player of course. Just two players. Less strain on the server side and more room for specialising the code to work in a 2-player solution. Maybe they could share the work, so that one part handles, say, pathfinding and scripting, and the other handles physics?

Anyway, good luck with the project however it turns out, and tell me if there's anything I can help with (testing, "slave" work like finding memory addresses, etc.).
You certainly have the capacity to help us out a lot! Please head on over to the forums and put an application in the http://skynet.hipolipolopig.us/index.php?forum/#3 :happy:

I didn't mean it makes more sense than co-op, I meant "makes more sense" as like... as me and friend are chatting, and we make comments, the comments will make more sense in context of knowing where they are.
Ah, I see... This would be possible (Even outside of this project), I imagine. It'd just require a quest marker that has its' position based on your friend's location :)

Long post is loooooooooong :P
Depending on the CK, we may be able to do things far more easily than we're thinking right now. I'm not waiting on the CK to get started, though! :happy: Stick around, I might throw some things your way if you're interested ;)
User avatar
Sam Parker
 
Posts: 3358
Joined: Sat May 12, 2007 3:10 am

Post » Sat May 19, 2012 1:51 am

Depends on your skill level. I'm half considering paying $500 for an Ida Pro license and trying to disassemble as much of the game engine as I can figure out, just to learn about disassembling. That's also not a project I'd recommend to most people just for the learning experience, but it fits me just fine. ;)
They have a free version of 5.0 with some reduced functionality.
Modding is great for learning on two levels: it teaches you to anolyze and understand software ecosystems, and it teaches you to be creative about working around limitations in existing systems. This project, however you approach it, has both of those in spades.
No argument there. I was specifically speaking about this team taking on this project simply for learning experience.



That does sound quite nice. I'll have to take a peek at the code myself.
I'm currently going through the IDA Book (2nd Ed.) so I can start finding all of the relevant function and data addresses. Mostly because the SKSE folks don't want to release their IDBs, which is pretty sad (they said they thought it was too much of a gray area, but IMO it's much less gray than SKSE itself). If I make any significant progress in annotating the IDB I'll definitely be releasing it.


Ain't that the truth.

A new programmer writes his own solution. An intermediate programmer can tell you about an awesome framework/language that practically solves the problem for him. A true greybeard only writes his own solution after reading the source code of existing solutions and calling the authors idiots.

Hell is other people's code. :flamethrower:
Hah, true that. Learning huge codebases is a pain, but over the years I've personally become comfortable with it more and more, especially after extensively learning Ageia's (when I started with it, now NVIDIA's) PhysX SDK. And that is a massive and hairy SDK/API, though it does have *fairly* good docs (though some things are pretty opaque until you go in and find out your ragdoll bone orientations are completely screwed).
Edit: One final note. While I'm sure this code base is a good find and it sounds very nice, it's also the easy part of the project. I don't think it's a coincidence that the author of your code got that far and petered out.
I'm completely aware of this. However, it gets the barebones up and running fast in a pretty well written framework. I think the jumpstart will be invaluable, since a lot of the stuff Recycler wrote is the most boring stuff to write in this type of project (IMO). After it's working the hard and interesting work of making the server the authority on game state can happen.

The hard part is retooling the game engine itself and the flow of the game content to actually work as a multiplayer system. That's the part that will take months or years, if it's even possible. Even getting something as simple as conversations with NPCs to work sanely in a multiplayer context will be very hard.

Think of just the opening sequence of the game. You and whichever guy you pick, running through tunnels to escape, gates clinking shut behind you, etc. The game expects at certain points that the player is in a particular part of the cell. What if player two is still chillin one room back? How do you resolve that without potentially breaking the whole series of scripted sequences?
While I agree with you, I don't ever expect any sort of actual perfection in a mulitplayer mod. For me, it's enough if you can roughly run around and smack [censored] with a buddy over network. In the particular case of players being in different areas, I'd probably provide a spell to summon your party and/or a command to summon a specific member of your party.
Soooo much of the scripting and internal state tracking is designed to work for only one player. We're not just talking about stuff like owning the house in Whiterim. Even your unlocked dragon shouts are tracked in global variables. Whole swaths of important player information are stored not on the actor instance, but in globals.

Even if we use SKSE to add the necessary hooks to allow scripts to have awareness of a second player, we're still left with rewriting perhaps the majority of the game scripts to account for their possible presence. And that's just one aspect.
I agree that doing that would be stupid difficult. In terms of state tracked globally for the single player, I'm thinking it's possible to design a system to light-weightly replicate this to the server (everything the first time, then only things that are changed afterwards during the session) the global state for a remote client.

I don't think rewriting game scripts for multiplayer presence is even necessary, at least in the immediate future of such a project. Perhaps long-term, yeah, but for now getting a barebones network layer to work on is IMO the best way to go. I'm going to be working on getting all the necessary stuff for the VaultMP port ready for when SKSE is mature enough to work with it (I haven't really investigated whether SKSE has the stuff it needs for VaultMP's Script Extender plugin) or when I'm ready to start testing it if SKSE does already have what's needed.
User avatar
AnDres MeZa
 
Posts: 3349
Joined: Thu Aug 16, 2007 1:39 pm

Post » Fri May 18, 2012 1:26 pm

Keep up the bad work! - as somebody once said :foodndrink:
User avatar
Rich O'Brien
 
Posts: 3381
Joined: Thu Jun 14, 2007 3:53 am

Post » Sat May 19, 2012 4:11 am

I'm currently going through the IDA Book (2nd Ed.) so I can start finding all of the relevant function and data addresses. Mostly because the SKSE folks don't want to release their IDBs, which is pretty sad (they said they thought it was too much of a gray area, but IMO it's much less gray than SKSE itself). If I make any significant progress in annotating the IDB I'll definitely be releasing it.
An IDB file is standalone - it contains a complete copy of the game code/data. This makes it equivalent to distributing an unpacked (or otherwise) executable, which is clearly not OK.

I'd be fine with distributing an .idc export of the database after some cleanup (they generally aren't importable raw) as that just contains the annotations I've made. Note that as with (all?) previous games I've been working from the originally-released runtime and patching forward for release, so that may be a problem if you update along with each patch.

I try to put every bit of useful information directly in to the source code releases unless I haven't found a way to properly expose it yet, so I'm a bit confused as to why you find it "sad".
User avatar
Lou
 
Posts: 3518
Joined: Wed Aug 23, 2006 6:56 pm

Post » Fri May 18, 2012 8:42 pm

Released the working initial Proof-Of-Concept plugin to my dev staff, we have Skyrim communicating to the outside world! (As "Outside" as Localhost is :P)
http://www.hipolipolopig.us/image/skynet_initialPOC.png
User avatar
Glu Glu
 
Posts: 3352
Joined: Sun Apr 01, 2007 5:39 am

Post » Fri May 18, 2012 5:47 pm

An IDB file is standalone - it contains a complete copy of the game code/data. This makes it equivalent to distributing an unpacked (or otherwise) executable, which is clearly not OK.

I'd be fine with distributing an .idc export of the database after some cleanup (they generally aren't importable raw) as that just contains the annotations I've made. Note that as with (all?) previous games I've been working from the originally-released runtime and patching forward for release, so that may be a problem if you update along with each patch.

I try to put every bit of useful information directly in to the source code releases unless I haven't found a way to properly expose it yet, so I'm a bit confused as to why you find it "sad".
My apologies. I haven't used IDA in years, so I'd forgotten the distinction there. The IDC would indeed be quite useful.
User avatar
Marine x
 
Posts: 3327
Joined: Thu Mar 29, 2007 4:54 am

Post » Fri May 18, 2012 11:31 pm

Released the working initial Proof-Of-Concept plugin to my dev staff, we have Skyrim communicating to the outside world! (As "Outside" as Localhost is :P)
http://www.hipolipolopig.us/image/skynet_initialPOC.png

I am genuinely curious how you did that, and what it actually is that I am looking at. I am proficient-enough with C# that this has my interest piqued.
User avatar
Daramis McGee
 
Posts: 3378
Joined: Mon Sep 03, 2007 10:47 am

Post » Fri May 18, 2012 10:37 pm

I am genuinely curious how you did that, and what it actually is that I am looking at. I am proficient-enough with C# that this has my interest piqued.
At the moment, the C# side only comprises of a few lines (That "Tester.exe" console window) and most of the code is currently an SKSE plugin (That other console window created using SKSE's IConsole class)

The C# is short enough to post here, I suppose :P
        static void Main(string[] args)        {            TcpListener listen = new TcpListener(8850);            listen.Start();            Console.WriteLine("Awaiting connection");            TcpClient client = listen.AcceptTcpClient();            NetworkStream clientStream = client.GetStream();            byte[] bufferRead = new byte[3],                bufferWrite = new byte[] { 20, 40 };            while (client.Connected)            {                Console.WriteLine("Writing 20, 40");                clientStream.Write(bufferWrite, 0, 2);                Console.WriteLine("Waiting for read...");                clientStream.Read(bufferRead, 0, 3);                Console.WriteLine("Read. Checking...");                Console.WriteLine((bufferRead[0] == 200 && bufferRead[1] == 255 && bufferRead[2] == 50 ? "V" : "Inv") + "alid");            }        }

The initial idea of injecting the CLR has more or less gone out the window, it was too unstable (At least in 1.2, may test it later with 1.3) :3

Anyway, as I said, proof of concept. What you're seeing here is not at all representative of our goals or motivations :happy:
User avatar
Jamie Lee
 
Posts: 3415
Joined: Sun Jun 17, 2007 9:15 am

Post » Sat May 19, 2012 3:08 am

I'm a total newfag when It comes to tech stuff, but I'll give you my two septims on the matter:

Do something like Nehrim did: Build a client that copies your game to a new folder, with no mods, except for the ones specifically developed for It. Otherwise embrace for an stupid ammount of incompatibilities, weird stuff and crashes.
User avatar
Schel[Anne]FTL
 
Posts: 3384
Joined: Thu Nov 16, 2006 6:53 pm

Post » Fri May 18, 2012 7:51 pm

I'm a total newfag when It comes to tech stuff, but I'll give you my two septims on the matter:

Do something like Nehrim did: Build a client that copies your game to a new folder, with no mods, except for the ones specifically developed for It. Otherwise embrace for an stupid ammount of incompatibilities, weird stuff and crashes.
It's easy enough to read the Skyrim INI to find out which mods are active. Just read the lists (There's two, not quite sure why; sArchiveList and sArchiveList2) and check each to see if it's compatible or not. Alternatively, disallow all mods and only allow core content (And our modified core content) :happy:
User avatar
Charles Mckinna
 
Posts: 3511
Joined: Mon Nov 12, 2007 6:51 am

Post » Fri May 18, 2012 1:37 pm

Ah. I'm still quite interested. For one reason or the other I didn't utilize OBSE but I might just have to for Skyrim. I imagine remotely controlling an NPC can be made easier by working off of the "TC" command. Just something that occurred to me driving home.
User avatar
Javaun Thompson
 
Posts: 3397
Joined: Fri Sep 21, 2007 10:28 am

Post » Sat May 19, 2012 2:58 am

Being a long time TES fan I feel pretty confident that there is a 99% chance of this becoming vaporware.
However it would be [censored] amazing to see it happen and its popularity might convince bethesda to include some network friendly code in their next game.

Best of luck gents. Hope you don't die from the strain.
User avatar
Carys
 
Posts: 3369
Joined: Wed Aug 23, 2006 11:15 pm

Post » Fri May 18, 2012 9:44 pm

Let's say that you get this mod to the point where on each co-op system you have an NPC whose decisions are guided by PC decisions on another system...

The next step will be getting the dynamic parts of these shared worlds to be in sync. Otherwise you have one NPC fighting a bear, another talking to a hunter another catching butterflies, and none of these secondary elements will be in your world.

One approach you can use here is non-randomness. This might be as simple as changing the random number generator to use pre-defined values. Note however, that the order in which values get used will be different on different machines (especially if random numbers are being generated in different threads). And note also that data driven parts of the system (for example, Radiant) also need to be kept in sync, somehow.

And, because of communication lag, "synchronization events" are going to not look the same on different machines, and you are going to need to deal with this somehow. As a first step, just making the issues visible will be important. And then, once you have done your best to minimize the problems you need to start working on hiding them. One "hiding" approach is to just let the systems behave differently and then minimizing the consequences of divergence. Another approach is to blend states while bringing systems back into sync. Another approach is to hide problem behavior with clouds of fog. And so on...

Me? I barely have enough time to play the game...
User avatar
k a t e
 
Posts: 3378
Joined: Fri Jan 19, 2007 9:00 am

Post » Sat May 19, 2012 1:12 am

http://www.youtube.com/watch?v=QNQugg-7prs (Still being processed)

Show time, kiddies! Initial vector transmission model is go!
User avatar
Sebrina Johnstone
 
Posts: 3456
Joined: Sat Jun 24, 2006 12:58 pm

Post » Fri May 18, 2012 6:02 pm

http://www.youtube.com/watch?v=QNQugg-7prs (Still being processed)

Show time, kiddies! Initial vector transmission model is go!
Whee! Lots of numbers! The heart and soul of software engineering :D.

Seriously, nice job :thumbsup:.
User avatar
louise hamilton
 
Posts: 3412
Joined: Wed Jun 07, 2006 9:16 am

Post » Sat May 19, 2012 3:25 am

Another POC, this time for player states (Sneaking, running, walking, blocking etc)

http://www.youtube.com/watch?v=pjn_2OXwbC0
User avatar
jess hughes
 
Posts: 3382
Joined: Tue Oct 24, 2006 8:10 pm

Post » Sat May 19, 2012 12:29 am

Is this still being written in c#? If so I am willing to throw my hat into the ring.
User avatar
NAkeshIa BENNETT
 
Posts: 3519
Joined: Fri Jun 16, 2006 12:23 pm

Post » Fri May 18, 2012 7:21 pm

The server-side is pure C#, and I'm looking at making the core C# now that I have the CLR working. Heck, I might even make it open source so that all the lovely peeps can see we're not using our closed-ness to do anything nasty with their data :happy: ;)
User avatar
jessica breen
 
Posts: 3524
Joined: Thu Aug 03, 2006 1:04 am

Post » Sat May 19, 2012 1:13 am

There is another project for getting skyrim online located at this site: http://skyrim-online.com/

Maybe it speed it up by working together and/or sharing information
User avatar
u gone see
 
Posts: 3388
Joined: Tue Oct 02, 2007 2:53 pm

Post » Fri May 18, 2012 11:39 pm

There is another project for getting skyrim online located at this site: http://skyrim-online.com/

Maybe it speed it up by working together and/or sharing information
I'm more than aware of Skyrim Online, thanks :P

Unfortunately our teams (Although as I understand it, SO is a single dev) have different ideals. Due to some recent revelations (Which I will explain in a new post), our mod will be free and open-source. This should also ramp up the "trust factor" a lot, I dislike SO simply because I've no idea what I'm transmitting and I've no idea where I'm transmitting to.

Edit New post http://www.gamesas.com/index.php?/topic/1320314-wip-skynet-open-source-skyrim-co-op/.
User avatar
TASTY TRACY
 
Posts: 3282
Joined: Thu Jun 22, 2006 7:11 pm

Previous

Return to V - Skyrim