Roadmap for 2018-2019

MikeHart

Administrator
Joined
Jun 19, 2017
Location
Germany
Hi folks,

today I was thinking that I should again outline the plans I have for CX in the future.

So what could be good for Cerberus-X to be worked on:
  • Be able to release CX on Linux and OSX again ( OSX done by myself, Linux done my dawlane)
  • Create an UWP target (Win10 market, XBox) *)
  • Create an Android NDK target
  • Add more platforms to the AppGameKit target ( Windows, OSX and iOS are done. Next is Linux and Android )
  • Enhanced deployment (one click) for all platforms
  • Enhance TED further (autocomplete, refactoring)
  • Refactor the target system so you don't need to recompile TRANS for new targets
  • Enhance TRANS with new variable types (pointer, unsigned...), be able to create DLLs and Libs
  • Make MSVC work again completely, it does only partially
  • Redo/enhance the documentation
  • Create more/new modern examples
  • Create a platform independent UI module
  • Create an official game framework for 2D and 3D games
  • Add INI and XML modules to CX
  • Add iPv6 support to Cerberus X
  • Add Steam support for the Desktop targets
*) Some parts depend on getting a new PC for development, so if you can spare a few bucks and help me out here at https://www.paypal.me/michaelhartlef , it would be awesome. A generous soul wants to sponsor a MacInCloud solution for me, so I can create OSX releases again and fix stuff on it. But to use such a solution, I need a much better performing PC. My Athlon X255 II with 8 GB of Ram and an onboard AMD HD 4200 graphic chip doesn't work well with it.

To target other platforms and add features like Steam more easily, a switch from GLFW to a different solution like SDL2 or even Xamarin could be mandatory. All these things above don't happen over night and some may not even happen. But it is always good to have an outlook, what to work on.

As before, everyone is welcome to help working on CX.

And feel free to raise your voice.

Cheers
Michael
 
Last edited:

PixelPaladin

Active Member
CX Code Contributor
3rd Party Module Dev
Joined
Aug 27, 2017
Location
Germany
I think most points on the list absolutely make sense. However I am not sure if pointers are a good idea. In (almost all?) non c++ targets they are not supported. And in c++ they could interfere with the garbage collector. Pointers to Objects are not needed in cerberus since all objects are passed by reference (so in this case we already have pointers). The only use case that I can see is for base types (integer float and boolean) – and for these we can use the boxing classes from the standard libraries. So in my opinion pointers are more dangerous than useful.
 

Holzchopf

Moderator
Joined
Jul 31, 2017
Location
Bern, Switzerland
  • Redo/enhance the documentation
  • Create more/new modern examples
These two things should interact better together, I think. The built-in docs of QBasic had short examples to every keyword / command - which was great for learning the language but doesn't work for CX for two reasons:
  1. you always need a "framework" around the one command you'd like to demonstrate
  2. there are too many commands, it would just end up in a mess

Therefore, I think the best would be if we added file links in the docs, like:
see Example helloworld.cxs to see how this command is used.
 

c0d3r9

New Member
Joined
Mar 18, 2018
I agree...
@Mike
-Refactor the target system so you don't need to recompile TRANS for new targets
-Enhance TRANS with new variable types (pointer, unsigned...), be able to create DLLs and Libs
-Make MSVC work again completely, it does only partially
-Create an official game framework for 2D and 3D games

That points sounds very good....the rest of course too.
But i don´t know if its important to add so much more platforms.
 

Phil7

Active Member
3rd Party Tool Dev
Joined
Jun 26, 2017
Those things are all useful indeed. Maybe it makes sense to decide which points can help to accelerate the developement of cerberus. Like enhancing the ide would speed up the generation of new examples.
Or decide about the standard cerberus should reach in some of the fields (docs, examples, ease of deployment), before showing it to the public (wikipedia, forums, ads?).
 

MikeHart

Administrator
Joined
Jun 19, 2017
Location
Germany
Thanks for your thoughts. You all make sence. If you want, please state what you would work on and in which order.
 

Phil7

Active Member
3rd Party Tool Dev
Joined
Jun 26, 2017
Well, I started already with a tool for configuration and deployment in PureBasic, but I think it would be much better to code it in Cerberus to make it at least possible for others to help. Therefore some kind of gui would be handy. At the moment I would still prefer a native gui, but I see that you can achieve a lot with something like mojoX in Monkey2.
Another thing I would like to work on is docs and examples. My english is not the best and my Cerberus skills are just rudimentary, but I have some experience in learning and teaching stuff.
 

dawlane

Active Member
CX Code Contributor
Joined
Jun 21, 2017
Create an official game framework for 2D and 3D games
Personally I would look at wrapping a ready made solution such as Urho3D. The problem with some of these libraries is that they:
  1. Don't support all the targets that you would like.
  2. Are still in a state of development, or need to be polished off.
  3. Require a number of addition libraries that may use different licences that could cause you a legal headache.
  4. Require you to make several virgin sacrifices to Satan to get the library to build or even work with the target platform.
Enhanced deployment (one click) for all platforms
That's one could be a bit tricky to maintain with all the changes happening to each target platform. All you have to do is look at the number of attempts made to created an "All-in-One" setup for MonkeyX that got abandoned when the author finally realised what a mammoth task it was. Only way I can think of doing this would be to create a core program that utilises either a modular plugin or scripting approach.

Enhance TRANS with new variable types (pointer, unsigned...), be able to create DLLs and Libs
The problem with data types is that you are stuck with what the lowest target platform supports. As for pointers, well I would only introduce and allow their use for binding external libraries only.

  • Redo/enhance the documentation
  • Create more/new modern examples
Definitely needed.

Add INI and XML modules to CX
There was an XML module for MonkeyX created by I think Skn3. May be worth looking into using it.

Edit: Found it! Skn3 XML

a switch from GLFW to a different solution like SDL2 or even Xamarin
The GLFW library needs to be updated to match it's current release state (3.3 currently is at 95% completion). SDL2 audio could be a bit of a pain, unless they have managed to fix one or two issues with it and I'm not too sure that Xamarin would be the way to go with it.
 
Last edited:

Holzchopf

Moderator
Joined
Jul 31, 2017
Location
Bern, Switzerland
I will definitely go through the docs and enhance it - as I already did here and there. I'm not sure if I'm the right person for linking the examples since going for minimalist examples isn't really my thing and I even struggle to find them although they're already right there... Short: I don't have the flair for beginner-friendly examples.

Another thing concerning pointer types: Aren't they necessary for some external declarations? How do you import a native c++ function that takes an int pointer?
 

Phil7

Active Member
3rd Party Tool Dev
Joined
Jun 26, 2017
@dawlane I think you are right with deployment enhancement. We need some kind of modular aproach and some flexible way to react to changes on the target side. One thing that is really annoying is, that you can't have one execution of a tool in the build process where all the stuff is done, but you have to do some tweakings before the build process, some after and some are only possible after the first build but need to be done before the final one.
 

Gerry Quinn

Active Member
Joined
Jun 24, 2017
I think Cerberus itself doesn't need pointers (just use 1D arrays and the indexes are nearly as good as pointers), but I do seem to recall people having trouble with external declarations. Don't remember the details, though.
 

dawlane

Active Member
CX Code Contributor
Joined
Jun 21, 2017
Gerry the problem with external declarations was down to data types and the lack of pointers. You have to wrap many of the external functions with your own implementation to get them to work. This of course add additional over head and not something that you want if an application that has to run in real time.

We need some kind of modular aproach and some flexible way to react to changes on the target side
Well the best and easiest solution for deployment would be a series of native scripts rather than a transcc or third-party hard coded solution. Windows Power Shell and bash on *Nix systems should be more than capable of doing build and deploy tasks. I've never been a big fan of how transcc and the MonkeyX/CerberusX works; it's just too wasteful. It just makes if harder to make any real changes to the build system as I discovered while trying to get rid of a lot of template copy and build. How I was going to do it would have worked, but unfortunately file linking on Windows has a serious problem that I could not easily work around.
 
Last edited:

Phil7

Active Member
3rd Party Tool Dev
Joined
Jun 26, 2017
Sorry for that stupid question, but what is system linking and what was the problem with it?

I can totally see the advantages of shell like scripts, but for people like me that are not into that, this is not easy to use and adapt.
What about a combination of a userfriendly gui to view and set the settings, choose files and so on and having the scripts do the work with their advantages in handling the file system and manipulating strings?
 

dawlane

Active Member
CX Code Contributor
Joined
Jun 21, 2017
Sorry for that stupid question, but what is system linking and what was the problem with it?
Sorry that should have been file linking. Now corrected to make it a little more clearer.

I've gotten to use to using the term system link for any type of link created to any type of file. The problems with some versions of Windows is that you have to enable the use of links and in some cases have administrator rights to create a link. The next problem is that it is very dangerous deleting a link. You can easily delete the target that the symbolic file links to, plus if you copy a directory where links are in the directory hierarchy, you actually end up making a copy of the target file.

What about a combination of a userfriendly gui to view and set the settings, choose files and so on and having the scripts do the work with their advantages in handling the file system and manipulating strings?
The problem with a GUI method is that it would have to meet a number of criteria:
  • Be cross platform for each Desktop OS.
  • The tools used to create them must be freely available and not something that you need to purchase a licence for. This makes it easier for anyone to update without the hassle of buying a tool that they may never use.
  • The tools used shouldn't need to depend on a third-party run-time interpreter; in other words "Python". Though you could use python and hope that one of the "Python compiler" tools will work.
The GUI it's self could be used to modify template scripts that in turn can be used with a third party tool such as Inno Installer or Nullsoft Scriptable Installer System (aka NSIS) or Power Shell/Bash.

EDIT: The NSIS site has been known to have problems, but you can still get it from here.

OK. So what tools to use to create a deployment package.
Windows:
  • A basic deployment would be a zip file or a self extracting zip file using the iExpress tool that comes with Windows. Search for the command line options and SED files for using iExpress.
  • One of the aforementioned installer tools.

Mac OS X:
Well you pretty much don't have to worry about files being all over the place with them being conveniently bundled. But you do have to choose a deployment method.​
  • Disk Image (dmg) or Flat Package (pkg). There should be plenty of info on how to use the command line tools for these.
  • You can use a standard tar.gz compression, but stay a way from compressing as zip file to avoid file permission issues. You should also be able to create a self extracting archive similar to how it's done on Linux.
  • Apple Store. Not an option really.
Linux:
  • A basic deployment would be a tar.gz (Tape ARchive/GunZip) file, as all file permissions will be preserved. NEVER COMPRESS AS A ZIP. Zip files don't preserve file permissions.
  • You can create a self extracting tar.gz version with various degrees of complexity. Not something a novice should try. There are to ways two do it:
  1. Using a bash script.
  2. Makeself
  • A distribution package such as .deb or .rpm. Very complex to do with the number of distributions. Again not for the faint of heart.
  • SNAPS. This is a Ubuntu thing for deploying applications and has been adopted by a number of distributions. Still requires a bit of work to use.
  • AppImage. OK. Possibly the easiest to use and virtually guaranteed to work on many distributions without a lot of additional packages to install. It's basically an image for a mini virtual file system.
EDIT: Using AppImage frees you from from being tied to those distribution repositories that could be out of date. Think along the lines of not needing to be suck with Qt 5.5 for Ted.
 
Last edited:

Phil7

Active Member
3rd Party Tool Dev
Joined
Jun 26, 2017
A lot to digest for me honestly, but I really appreciate your answer and flood of information. I am definitely not the one to evaluate your posts, but I am very glad there are experienced people like you on this forum!
 

dawlane

Active Member
CX Code Contributor
Joined
Jun 21, 2017
@Phil7: Here's a tool that I knocked up a few years back for Linux to create a self extracting archive for system wide installation. It's completely written in bash script and should still work out of the box, or with a few minor updates. If any changes need to be made, then a fair bit of knowledge is required on:
  • How to identify the Linux distribution and release.
  • How each distribution package manager works.
  • The package names used for a distribution release.
  • Bash and it's scripting language.
  • Use the Sequence EDitor (aka sed) and regular expressions.
  • How the Linux file hierarchy is structured.
  • Understanding user groups and permissions.
 
Last edited:

SLotman

Member
Joined
Jul 3, 2017
One thing that could be added to this list.... it's free now.

And I would kill for an XBox target. Ir have a devkit here with me (from the Id@Xbox thingie) and never got the time do to something properly with it :(

I'm still on the Monkey side (the renaming to .cerberus of everything still puts me off to try to convert everything I did on Monkey side...), but I'm even willing to pay up for an XBox target.

And what's wrong with MSVC? with 2012 I can compile things just fine here on Win8 on Monkey, why wouldn't it work with Cerberus? A problem with newer versions maybe?
 

dawlane

Active Member
CX Code Contributor
Joined
Jun 21, 2017
One thing that could be added to this list.... it's free now.
That statement is miss leading. Some people will get the impression that it's completely free. It's only free for personal, non-commercial and educational use. You are only allowed to use it for free for commercial use with restriction criteria and for one game a year if you are an indie developer. It's in Q&A on the licencing page.
 
Top Bottom