Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Assets DarkRift Networking 2: The next level of networking

Discussion in 'Works In Progress - Archive' started by Jamster, Jan 20, 2016.

  1. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Would it make sense to theoretically run multiple instances of DarkRift 2 on a single machine? (for example, having 10 instances of a game running).

    Or is DarkRift 2 meant to be run as a single instance, and then within the plugin, handle the concept of multiple rooms?
     
  2. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    There will be systems for creating new processes I hope as for Unity based server it can be much better if the rooms are separate. I've just changed DarkRift 2's architecture quite a bit so I've got to rebuild quite a lot of it first but this is still on the list, it was part built!

    I think Hazel is almost ready for beta, maybe by the end of the week :)
     
    ManHunterITA likes this.
  3. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Great! I'm running a pure C# server if that helps. :)

    Really excited to test out Hazel.
     
    Jamster likes this.
  4. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
  5. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Can't wait to try it out! I have a bunch of other stuff on my plate first, sadly.
     
  6. Saikozou

    Saikozou

    Joined:
    Jan 14, 2015
    Posts:
    4
    Hey @Jamster, any place we can watch progress on DarkRift 2 aside from here? There hasn't been a post in this thread in a while so I'm wondering how far out it is.

    I'm starting a new project and I definitely favour DarkRift for my network implementation, but since I know DR2 is going to be a thing I've been procrastinating actually making any network stuff in the hopes that I can use this instead of the original. Especially since the original has that bug I outlined not too long ago.
     
  7. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    I believe that, for now, any progress updates are being made in the Hazel thread linked in Jamster's signature.

    On an unrelated note, on a scale of 1 to 10, with 10 being essentially having to re-write everything, how hard will it be to go from DarkRift to DarkRift2?
     
  8. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    @Saikozou I havn't posted here in a while, you're quite right! I've been partially rewriting DarkRift to strip some features that I've changed my mind on away and to also introduce some new, larger, features that I couldn't without major rewriting.

    Here's a very brief summary, I'll update the first post eventually!
    - Hot swapping of plugins has gone, though I would like this feature to be added later the future so it might come back.
    - DarkRiftSerializers have gone, though this was reported with an explaination before.
    - Plugin sandboxing has gone because it was hideous, slow and useless!
    + Database code has been started, needs testing though.
    + I've added a fairly simple data persistence system so DarkRift and its plugins can save things if need be.
    + I've begun adding first time installation for plugins so if they need to create DB tables etc they can. The old DarkRift had this but it was very simplistic!
    + The log system has been remade to be modular so that now methods of logging can be easily added and you can choose which events go to which outputs (console/file etc.)
    + I've remade the communication layers a bit so the whole Tag-Subject thing is optional, it could very easily be setup to use a string or ints or whatever you want really! It should even allow me to form a basic RPC system etc if that's what people want :)
    + I'm taking the time to really make everything modifiable in the config file, it's changed to XML rather than my bizarre colon/new line based format and there is already tones of stuff you can change - I've attached the current default one just to show you the improvement over the old format!

    The biggest change (and probably 50% of the reason I rewrote it) is to add in a proxy, essentially clients connect to the proxy instead of the server and that allows you to move them between servers and hopefully do much more to take the load off your main server in the future - still a work in progress though! It's also optional, you can use a DarkRift 2 server in the same way you'd use a DarkRift 1 server if you like :)

    It's probably now looking like late September beta, it's taking a lot longer than I anticipated :(

    @Vedrit Hazel's still in the works yes, and I've done a bit to that but most of the work is on DarkRift 2 now actually!

    On your scale I'd go for 4; a lot of it will need to be rewritten but it follows the same principles of Tag-Subject messages etc. so none of your game logic will need to change. Most of the API should seem familiar, it's just that they will have a different name or will be accessed slightly differently etc.

    The most irritating thing may very well be that I've changed from Unity's camelCase to the c# recommended PascalCase for events/public variables etc :p

    Hope that clears things up and I'll try and post more!

    Jamie
     

    Attached Files:

    Last edited: Jul 29, 2016
  9. Vytek

    Vytek

    Joined:
    Apr 29, 2016
    Posts:
    51
    Jamster and WildStyle69 like this.
  10. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    514
    Will we be able to modify functions that come packaged in DarkRift2? E.G. DarkRiftAPI.onDataDetailed
     
  11. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I'm not sure yet, there will certainly be a lot more information available in events and simpler calling of events (e.g. onData and onDataDetailed will be merged as there is no point having both!) but I'm not sure if this will be open source thus allowing you to physically change them.

    I've not got a lot of time over the next month to work on DarkRift (holiday's etc.) and I've got a backlog of bugs to fix in DarkRift 1 as well so it's not looking like this will be done by the end of summer. I'll continue working on it but people should know that my idea of a late September release is looking pretty unlikely... :(

    I'm going to focus on the main server and put proxies on the backburner for the minute because they could always be added in an update and so are less crucial to the main project, this should help get it released sooner.

    Jamie
     
  12. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Update!

    I've finished adding the installation system for Plugins, when you add a plugin for the first time it will be "installed" by DarkRift allowing it to add any DB tables it needs etc. If you later update your plugin (by setting the version number higher) DarkRift will "upgrade" the plugin to allow it to make any modifications to resources it needs in order to work. Hopefully this system should make upgrading a little smoother!

    I've also finished the communication layer so that you can send message using many different formats to Tag-Subject if you prefer. Currently I've only added the Tag-Subject message and one with no meta information (i.e. just data) but I'm happy to add more and I will try and make it extensible at some point so that your own messages can be added!

    Finally I'm working on adding commands to DarkRift 2, essentially they will be the same as DarkRift 1 but this time it will group together arguments a little better so text in speech marks denote 1 argument and you can also easily search the arguments for flags (i.e. "-f") etc.

    I still need to sort inter-server communication, I'd sort have forgotten about that, but overall it's looking like progress!

    Jamie
     
  13. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Commands are finished! The algorithm for extracting each argument is a little rough at the moment and so I might come back and rewrite it but overall it's working!

    I've also added a fairly basic anti-hack system to DarkRift, if a client sends invalid data of any form or if your plugins think that they may be cheating a "strike" will be added to the client, after they get a predefined number of strikes they will get kicked. It might not be the most sophisticated anti cheat system but it's a good basis and should catch a good number of people trying to break your servers!

    Jamie
     
  14. WildStyle69

    WildStyle69

    Joined:
    Jul 20, 2016
    Posts:
    318
    @Jamster - this is looking super interesting for my project. I'm getting close to the point in my project where I'll start implementing multiplayer and am looking to decide on the best fit solution.

    DarkRift is definitely a front-runner, as I'd like to have have the best, low-latency multiplayer possible. From reading the asset store feedback DarkRift 1x is already great for performance, how about the new version in-development, as relates to performance / speed?

    My project involves art creation in a multiplayer environment, so 2-3 users could potentially be working on the same larger canvas / piece together, at the same time. Would DarkRift be a good fit for this type of multiplayer use-case?

    Also -- are you still looking good for a September / October beta launch?

    Thanks !

    // WildStyle
     
  15. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I haven't benchmarked the new DarkRift yet because it's not near enough to completion!

    I'd estimate that it will be slightly slower than DarkRift 1 as there are more layers for data to go through (DarkRift 2 is very modular inside but DarkRift 1 is mostly about 3 methods).

    DarkRift would be a great fit for this I expect, possibly slight overkill as I suspect you could safely use peer-to-peer communication for something like this.

    Not sure yet, hopefully October but it'll only be a beta at that stage.

    Jamie :)
     
  16. WildStyle69

    WildStyle69

    Joined:
    Jul 20, 2016
    Posts:
    318
    Thanks Jamie,

    To clarify on my project - there will be online persistent levels, where people can join / leave. Then within those levels there could be multiple groups of persons working on pieces together at different locations in the level. So there could be quite a few people on the level collaborating concurrently.

    If I did want to start before the new version of DarkRift came out, then I'd be creating more work for myself right, as I'd have to refactor everything for 2x?

    I'll keep working and watch this space for future updates.

    Cheers!

    //WildStyle
     
  17. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    In that case it sounds like DarkRift will fit perfectly!

    It wont be too much work, the architecture is mostly the same it will just be a different API and a slightly different way of doing things - I would probably wait :)
     
  18. Tiny-Tree

    Tiny-Tree

    Joined:
    Dec 26, 2012
    Posts:
    1,314
    if i understand well this server run on unity instance ? if not will it have solutions for server side physics and pathfinding?
     
  19. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    It will be able to run under Unity yes :)
     
  20. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    So today I remade DarkRiftReader and DarkRiftWriter. Instead of relying on .NET classes such as BinaryReader, BinaryWriter or BitConverter for their read/write operations they are now backed by DarkRift 2's BigEndianHelper.

    You shouldn't notice any difference other than it will handle different endian systems better and may be slightly faster but for me it makes it a lot easier to move data in and out of them and it also means that all DarkRift's read/write operations for the network go through the BigEndianHelper which will aid in testing and general maintenance.

    So there's what I've been doing... :)
     
    Lisk and ManHunterITA like this.
  21. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Exciting stuff, keep up the great work Jamster! Really hoping for release before the end of the year, otherwise we'll launch with regular DarkRift.
     
    Jamster likes this.
  22. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    To get a little break from working on DarkRift this weekend I have built a room system! (Better late than never!)

    I've promised it for DarkRift 1 for a very long time but, whilst it was pretty much built, it was ridiculously complicated and so it never got released. This time however I'm stuck to DarkRift's principles and made it very simple, yet very flexible.

    Plugins can create a RoomManager which they can then assign players to, this will then choose the most suitable room (also adaptable via your own algorithm for things like matching player rank etc.) or create a new one if there aren't any available. You can also inherit the Room class in order to provide custom logic and I'm going to work a little more at expanding the functionality available there.

    As you can see it's ridiculously simple yet should be incredibly effective. I'm also planning on writing an Area of Interest plugin at some point too, plus perhaps a few other things.

    Jamie
     
    Megaphone_ and Lisk like this.
  23. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    That's exciting, Jamster.

    Is the RoomManager suited for running on one server machine and then having it pass on the connection to a separate game server?
     
    Vedrit and Megaphone_ like this.
  24. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    It isn't currently, I'll make sure that it's easy enough for me to expand to that when I release the proxy at some point in the future.
     
  25. Deusald

    Deusald

    Joined:
    Feb 11, 2014
    Posts:
    31
    Hey :) Are we becoming close to beta? :p
     
  26. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Still hard to say, we're certainly getting closer... :)

    In terms of to do, it's mainly little things like testing, fixing bugs that are still around and finishing off the odd feature. I think the only major items are the Unity integration (currently it's just built for general .NET), Documentation and examples (which are all fairly big items but have to be done near the end!).

    I'm really looking forward to showing off DarkRift 2, I'm confident that it will easily surpass every other networking system for Unity, I just don't want to rush it. To rush it now could ruin it :(

    I've pushed the release date back and back but it's never gone stale, if anything I'm enjoying working on it now more than I ever have.

    Jamie
     
    Vytek, MOLITHAL, WildStyle69 and 2 others like this.
  27. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    Loving the confidence! Keep up the great work. :)
     
  28. MassDivide

    MassDivide

    Joined:
    Apr 16, 2013
    Posts:
    4
    Dying to get my hands on this. Been waiting along time. I would love to beta test it. xD
     
  29. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I'm now working through the todo list and I have a good basis for the Unity integration! Promising stuff!

    I also remade the MessageUtility class a few days ago, it was originally an internal static helper class that oversaw the conversion of messages into bytes but now we have MessageFrame which acts a bit more like another layer (i.e. Data is wrapped by a Message which is wrapped by a MessageFrame). In the end you wont see this but it's a little more straight forward inside and it also means that properties aren't repeatedly decoded from the bytes, rather they're all decoded at once and then stored. There is probably a small performance hit for some use cases but in general it shouldn't affect it too much.

    Finally, I'm also about to start formally writing down the protocols used, I don't know if I'll release these docs but they'll be useful to me for debugging and resolving issues!

    Jamie
     
  30. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I'm thinking that I may include small parts of DarkRift 2's core functionality as built-in plugins, i.e. classes loaded as plugins but not actually stored in separate DLLs. It might not be used in the final product but it could be a very useful feature for disconnected, yet still important features.

    As an example it makes sense to have the built-in commands in their own plugin rather than having to build in a mechanism to make the Command Engine look though both plugin and built-in commands for each command entered. It might seem trivial but actually it's quite effective.

    On that topic, here's the first server command, something distinctly lacking from DarkRift 1 (I always meant to add it, ever wonder why you had to specify a description and support email...?)
    Capture.PNG
    I've also spent the evening prettifying the console window's alignment...

    Time well spent me thinks... :rolleyes:
     
    Lisk likes this.
  31. Dakkerst

    Dakkerst

    Joined:
    Oct 24, 2016
    Posts:
    9
    I'm excited for this! I'm using PUN right now and it's kind of limiting, but it's great for prototyping.

    I remember reading somewhere (maybe in this thread?) that DarkRift is not for LAN based gaming - it should (must?) be done with an external server. Is this also true for DarkRift 2? If so, is it possible for a user to host the server on their computer and connect to the server that they are hosting, and then allowing others to connect to their computer? Having both would be superb!

    Keep up the great work Jamster!
     
  32. ManHunterITA

    ManHunterITA

    Joined:
    Sep 3, 2013
    Posts:
    341
    You can connect to your DarkRift server also in your LAN. You can do it since the first DarkRift.
    I know because we tested our MMORPG multiple times over our LAN.
     
    Dakkerst likes this.
  33. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Yes it's possible to host and join over LAN, I'm not entirely sure what the license for DarkRift 2 will be however so it might not be legal to :p

    You wouldn't be able to connect from outside as the server has no NAT traversal functionality so you'd need to port forward everything and hope your ISP doesn't share IP addresses!

    Jamie
     
  34. Dakkerst

    Dakkerst

    Joined:
    Oct 24, 2016
    Posts:
    9
    Thanks to the both of you! I actually realized I didn't even mean LAN, I meant self-hosting instead of hosting on an external server (easier for testing purposes at the beginning, I would think, unless it would be hosted on one of your servers). Would this be outside of the DarkRift 2 license?
     
  35. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    It's not easy to technically, it's much better to provide from the cloud to which it's then significantly easier for you to do it rather than your players!

    In terms of DarkRift 2's license I can't really speculate I'm afraid...
     
  36. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    As I'm sort of tidying things up at the moment and so wont be posting many updates I'm going to keep the DarkRift 2 hype going by positing some simple code snippets and explaining the design choices!

    The first I want to show is how to send messages. From the client it looks something like
    Code (csharp):
    1. DarkRiftWriter writer = new DarkRiftWriter();
    2. writer.Write(position.x);
    3. writer.Write(position.y);
    4. writer.Write(position.z);
    5. client.SendMessage(new TagSubjectMessage(0, 2, writer), MessageIntention.All);
    One of the familiar things should be the DarkRiftWriter, while underneath it's completely different it's actually the same (ish) interface on the surface. To send messages you must now use DarkRiftWriters (i.e. you can't just send the object and let DarkRift handle the serialization for you) because it's much faster, more efficient and in general the only reason to using automatic serialisation was ease (and that not a very good reason).

    On the other hand the TagSubjecMessage object will be brand new, I've added these so that you don't have to use the whole tag-subject thing, you can send messages with only data (SimpleMessage), internally DarkRift can send control messages which only contain a 16 bit control code and in the future you will be able to build your own message types to allow you to send with strings, ints, build RPC systems, whatever!

    Finally we now have a MessageIntention field, it's fairly similar to how DarkRift 1 worked underneath the SendMessageToAll/Others/ID etc. so not much has actually changed, jus the interface.

    I hope that's given you a little tease into a very small part of the new layout, I'll be posting more of these for rooms, message distribution, whatever you want (comment!) in the following days!

    Jamie
     
    Lisk and ManHunterITA like this.
  37. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    I suppose the next logical thing to showcase is the new distribution system. The original DarkRift put quite an emphasis on the client selecting exactly where data should go and then the plugins validating that; with experience I've realised the emphasis should definitely be the other way round.

    The distribution code has now all merged with the standard message handling code so that there is only one event, MessageReceived, and instead of you having to distribute the message on your own (which then caused problems for other plugins who also wanted to control distribution) you can now democratically decide which clients to send the data to. Essentially a list is prepopulated with the clients that the sender wanted the message to be distributed to and each plugin takes it in turn to modify the list, once all plugins have seen the message the server will send it to all those in the list at the end.
    Code (csharp):
    1. void MessageRecevied (object sender, MessageReceivedEventArgs e)
    2. {
    3.     e.DistributeTo.Add(client1);
    4.     e.DistributeTo.Remove(client2);
    5.     //etc
    6. }
    Of course a lot of messages should not be distributed at all and so to speed this operation up the server can set e.ShouldDistribute to false and it will bypass all the other distribution code (Server messages have this set false by default).

    This should mean that distributing messages in a custom way is much easier and will work better when multiple plugins want to set distributions, maybe you want both a Room system and Area of Interest system operating at the same time? :)
     
    Lisk likes this.
  38. RizeoftheSummonds

    RizeoftheSummonds

    Joined:
    Nov 5, 2016
    Posts:
    49
    Cool.
     
  39. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    As we approach 1am with a full day for me tomorrow, lets talk about looking at data throughput on the server!

    In DarkRift 1 the way to look at the data clients were sending was to set logData to true in the config file. Not at all useful for a production server because you'd have to restart it to make changes take affect and it also output every message that came through (imagine than in an MMO...)

    So my solution in DarkRift 2 is to add the sniffer! The sniffer is implemented as an internal plugin in DarkRift (see here) so it uses a very similar API to what your plugins will see (it actually has access to internal methods too), helps me identify what functionality is missing for plugins and even better means that there's less messy bolt on classes in the code - it's much more modular.

    The sniffer uses the standard command system so to start listening you type sniff * * into the console and all data will be shown on screen. When you're done type sniff * * -remove and it will stop!

    The syntax for the sniffer allows you to isolate individual tags/subjects and allows * to act as a wildcard for all. So if you're only interested in player movement you could do something like sniff 1 * to only show data with tag 1.


    I'm looking to add ranges, sniffing by player ID and will need to work out how to allow combinations (e.g. player 1, tag 1 only).

    Hope you like it, I do!

    Jamie

    P.S. If you haven't seen it, there's a Hazel update out ;)
     
    ManHunterITA likes this.
  40. Deusald

    Deusald

    Joined:
    Feb 11, 2014
    Posts:
    31
    Can you tell more about "Process based Servers and Server Groups"? Is it implemented?
     
  41. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    Not really...

    Originally I was going to structure it so that individual server objects were part of a local server group that allowed them all to talk to each other. Those local server groups (1 per process) would then talk to each other on each machine and then the machines would mesh together.

    The problem is that there are few single points of failure which could break whole portions of your servers if they go wrong.

    Since I've decided to added proxies that's changed things a bit. I suspect I will just mesh all servers together but for large server clusters this might not work so I'll think more. Chances are it wont be until the first or second major update (aiming for proxies to be the first).

    Jamie
     
  42. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    As well, yesterday I changed the sniffing tool syntax so that it's a bit more flexible. Instead of the completely ambiguous sniff <tag> <subject> it's now much more explicit sniff -t=<tag> -s=<subject>. That way I can also add ID, IP, etc. :)
     
  43. Skenderbee

    Skenderbee

    Joined:
    Oct 26, 2014
    Posts:
    3
    Jamster,

    Keep at it and please let us know if you want any testers. I'm extremely exited about this project as the modular approach you have taken lines up very well with my microservices state of mind. Looking towards the future, please make sure the server code can be compiled in Linux via mono so we can deploy it on docker containers.

    As far as DarkRift1, should a new acolyte like myself start learning from it or wait for DR2?
     
  44. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    That's for the kind words, I'll be looking for testers soon I think so stay subscribed!

    It will hopefully be Mono compatible, maybe .NET Core at some point but not for a while!

    You can start learning DarkRift 1, the principles and general ideas are the same but the API and code underneath are quite different beasts :)
     
  45. WildStyle69

    WildStyle69

    Joined:
    Jul 20, 2016
    Posts:
    318
    @Jamster -- hi man, sounds like you are making good progress! ;) Please consider me for the testing phase also. I've been waiting patiently for DR V2 to be ready, however am nearly at the point where I have to start looking at multiplayer... probably by January 2017.

    Cheers!

    //WildStyle
     
    Jamster likes this.
  46. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    So today I did something radical... I made DarkRift 99% authoritative.

    In DarkRift 1 the client sent a message and in it specified where they wanted it to go: all clients, other clients, Server or a specific ID. This was very unhelpful because it meant the server had to perform an extra check to ensure the client wasn't maliciously sending packets to the wrong people (and that was annoying to change anyway) and the only thing DarkRift gained from it was that you could write non-authoritative games (which I definitely should not be encouraging).

    So I just flat out got rid of it. Now if you send a message to the server you don't specify where it goes instead the server plugins get to decide, without influence, where it goes. One less check, one less thing to worry about and frankly cleaner code for me and you. If there are no plugins listening the server will default to everyone for testing (but I might also add a stern warning if you do this).

    Of course if you use this feature I'll make sure I add in the docs how to live without it ;)

    Jamie
     
    Lisk and ManHunterITA like this.
  47. Lisk

    Lisk

    Joined:
    Oct 23, 2013
    Posts:
    99
    That sounds great, honestly!

    Cleaner code for me :)
     
    Jamster likes this.
  48. Entacast

    Entacast

    Joined:
    May 18, 2013
    Posts:
    7
    I was completely sold on DarkRift over any other networking solution, can hardly wait for DarkRift 2!

    One question—for somebody starting a networked game now, how difficult would it be to start working in DarkRift, then switch to this when you're ready for release? Would it be best to try and wait for DarkRift 2? I'm not on a schedule, so I'd rather just wait if it'd work best that way.
     
  49. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    1,102
    To be honest my estimations of a release date have been appalling so I've stopped making them now.

    I would start working in DarkRift then move to DarkRift 2 when it comes out. The transition isn't too bad and it's a lot easier to put networking into your game in the early stages.

    Jamie
     
  50. Deusald

    Deusald

    Joined:
    Feb 11, 2014
    Posts:
    31
    Any news? :)
     
    Vytek likes this.