Quite the set of questions but I could do with a brief break from writing code
1) With CryMono integrated into the SDK, you potentially have two options for programming in C++.
Firstly, you can edit the GameDLL project directly, as you would without CryMono installed. There's limited interaction; within the CryMono project, you can manipulate the C# environment as you like via Mono, but the reverse is only possible via what are called scriptbinds
. These expose C++ functions to C# code, and that's how we link our libraries to the engine.
Thinking of C++ in this instance as being a level below the higher-level C# should help. The C++ is responsible for
the C# environment; it's effectively in control.
The second method, and I should state that this is highly untested
, is to use C++/CLI, a variant of C++ that runs on the .NET framework (formerly known as managed C++). In theory, it should be possible to compile this to an assembly that can be referenced by your C# code and loaded by CryMono, providing language interoperability. This is not, however, the same as standard C++.
It's a language unto itself, and concepts from C++ don't always translate. On the flipside, it's .NET, so you get extra features like a garbage collector.
Unity's interop is derived from the fact that both C# and their proprietary UnityScript are .NET languages. CryENGINE3 uses native C++, not C++/CLI, so interop is only possible via the methods mentioned above.
2) You can still use Lua to a degree
. CryMono overrides how game rules (the classes that control game flow and logic) work and consequently Lua gamerules will not work. Most Lua entities will work though, except in instances where they themselves are dependent on the Lua gamerules.
Lua code itself cannot see C# code (again, Lua is called directly by the native C++ engine whilst C# runs in our Mono environment). However, we're working to make the inverse true; we're creating an interface so that C# code can access Lua scripts.
You could also, in theory, create Lua scriptbinds in C++ that interact with the C# environment but that seems like an awful lot of work for not a lot of gain.
3) The stability is pretty good for the following tech stack: .NET (game scripts) loaded by .NET (compilers) loaded by .NET (CryBrary) loaded by C++ (CryMono) with the help of pure C (Mono) loaded by C++ (the GameDLL) loaded by C++ (the engine)
More seriously, we're not yet at 1.0, which we're aiming to be the first production-ready release. With regards to the imaging, we iterate on CryMono fairly quickly; 0.1 was released back in December
, and we've just shipped 0.5, bearing in mind some of these versions have included the wrapping of whole engine systems. Obviously I don't know how strict your IT department are but finding a way to get updates would be hugely beneficial, given that even the Free SDK will go through a few releases in a year. If necessary I can provide support for upgrade instructions etc.
Finally: you can use Seasons
(the stock SDK with CryMono) or Angry Boids
(a minimal SDK build with CryMono) as a base; this comes with CryMono preinstalled. However, to get the latest and greatest versions, you'll want to compile from source
Hope that answers your questions! Just shout if stuff isn't clear.