13 hours ago, Shaarigan said:
Whenever I hear "automatic" I get attended because it is very complicated to get something really automatically done. Either you have too much configuration, in case of networking for example the protocol to use or you are too limited in whatever you try to achieve and enter the complain about the engine loop again.
In the case of networking, this can't work if you expect it to work generally because there are too many possibilities in how the protocols look like, how the gameplay looks like and how that matches each other. Socket programming using some third party tools like RakNet is easy but you still have to implement client/server logic.
Same for serialization; it depends, most of the time your prefered game states are spread along a number of classes and also contain information you don't want to serialize but this is a more lighweight topic.
Collaboration is a good point because most engines I have used are stuck at single-asset-single-scene management and struggle when it comes to some kind of version control on the one hand, on the other hand I know from our software, it is a very difficult topic that needs a well designed concept to not hinder each other too much to their work. You don't want to have something changed you are currently working on for example or have someone placing assets in a scene where you currently design the gameplay. Most important is to have a bakcup of everything. This is the reason most engines don't think about real-time collaboration because you always have the chance to delete whatever you worked on the last 2 hours without disturbing someone else in an offline collaboration environment.
What I like and propably miss in my all-day engines is modularity in code. Plugins are maybe usefull too but the real power appears if you have the chance to add/remove/exchange features by modules and then rebuild the entire engine to your needs. No .dll/.so handling, no workspace polution and a slightly better runtime performance.
The second one is a compiler indipendent environment. I don't know what languages we are talking about but what I like is working with Visual Sudio 2010 but use the newest toolset if MSVC2017/2019 or even another non-ms compiler like clang. This is very difficult to setup so a simple solution would be nice to have. Work with whatever IDE you want and compile with whatever are your target specs
You are completely right about networking, automatic isn't the right term to use. I guess that we should say "hide some layers to the user", for example, the client prediction, interpolation, lag compensation, those are pretty easy to understand but hard to implement correctly. So it can be a nice idea to provide the user a "networking configuration file" where he can for instance say which packet should be sent using UDP or TCP and such. (Sometimes it can also be largely simplified, for example, if both users have a good connection, nobody prevents you to use a system similar to parsec)
About serialization, like I said a configuration file isn't prohibited, we can simply add a "configuration" file where the user has to list all the variables name that he wants to keep, sure it is a pretty dirty way but it is the simplest, it does not require the highest performance anyway.
I understand your concern about collaboration, in my case, I prefer productivity over security (in this case at least), a workaround can be to have a button like "save version" where the user will specify a version name and add a description, then the version can be loaded at any moment, what do you think about that ?
Concerning modules, can you give me an example of what you would have liked to add in X engine?