DevLog Team DevLog MikeHart - Update 2022/03/28

Not open for further replies.
Huu, sorry I thought there was talk about the importance of using linux and the compatibility or support for this platform.
The topic is a development log on the projects that Mike is currently working on. Some topics do have a tendency go off topic.
@rickychus : No problem. I was ranting about Linux and I have no problems that people chime in and talk about their experience with Linux.
V2019-05-05 is out and creating a Linux build went well. I hope i fixed the reapeared retina bug in OSX but without a retina display, it is hard to tell.

The next 2 weeks i want to concentrate on as many bug fixes as possible. Then create a new distribution.

After that i will get back to Hades to bring it to a state where you guys can test its performance.

If this goes well, then i think it is time to work on some kind of version 2 of CX. Some members and i had good discussions about this topic in the beginning of the year. It clearly showed that everyone has different oppinions and preferences. But i expected it that way.
Besides tyding up some language features, i want the build process to be separated from trans. This way i envision that you could plug in new targets without the need to recompile trans. I have some more plans as well but i better talk about this another time.
When i see the open bugs, i think i should concentrate on that till there is non left.
At least i have a clear list what to work on, lol.
So don't expect many new features, if any at all.
Time for another update. Daily life and work took a toll on me in the last three weeks. At work the aircondition was broken. We sit in a building that is covered in glass. So even with normal temperatures outside, a little sun heads up the building quite fast. As we can't open windows we had to work at 28-30 degrees celcius each day. That was torture.
Thank good they fixed it on friday afternoon.

Regarding CX i was able to enhance TRANS to copy an existing icon.ico file and use it when building an exe. Have to extend that to osx too. And other platforms as well. The optimal thing would be that the user provides just a PNG file and trans takes care of the target icons.

Next problem i will tackle is the 64bit lib problem on Android. I was hoping someone from the community would share their solution but sadly no.

After that it will be a new release.

One thing you can be sure about is that there will be always something to work on in CX. One days Apple will cut off support for OpenGL and then i have to come up with a solution. And it is more sensible not to wait till the last day. I would not count on MoltenVK to be a solution for anything on Apple. Better to support Metal directly.

I also would love to work on more examples. But then, there is so much else that needs to be worked on. Definitely a fulltime job. If i could.

Anyway, the development of CX is not dead.

I took a small break from CX and study other things. Coming back to it i will concentrate on bug fixes. So just a reminder for myself...

Regarding the 64bit Android issue, i guess i have to publish my game to be able to see what is behind those errors that someone else got from his users. He didn't let me know how exactly he had created his libs, so i have to try myself and see myself.

The 64bit launcher issue on OSX is settled. That was easy with the help of Bmax-NG.
But more Apple trouble is looming, as they will drop support for OpenGL/ES at one point. Maybe in fall with the next release of OSX, maybe next year. Ouch. Writing a Metal2 renderer can be fun. :)

On both mobile platforms CX calls depreciated methods which should be replaced with official supported ones.

The colorization and auto casing in Ted needs to be recoded. As of the nature of the CX language, at least you have to look at the previous and also the following token to really see what you have to do with a token.
Only looking at the previous token is implemented, but that is not enough.

Anyone up for the job? Juuust kiddin' :)
A before i forget. I had asked Martin to move CX to my account. He never did it. So i am giving up on this idea.
Good luck with the Android issue. No, I didn't look into that. I just really wish you luck for finding a solution so I can then make use of it ;-)
I had asked Martin to move CX to my account
What you do for CX is definitely entitling you for having it on your account. I can only guess Martin was just too short of time to do this little stuff. Couldn't you just set up a new Cerberus X and then ask Martin to delete the one on his account?
The same goes for the GitHub repository!?
I can delete it there myself as i have admin rights. But i wanted a clean move. Guess your suggestion is what is needed.
Long time no see.... Well, here is what some users of this community and the dev team have added to CX so far and is already pushed onto Github:

***** v2020-04-10 *****

FIX: [DOCS/brl] Fixed missing entry for the admob, cerberusstore, gamecenter, fielpath, filesystem, url, tween, pool, process and markdown modules.
FIX: [DOCS/brl.databuffer] Fixed some typos.
FIX: [DOCS/cerberus] Fixed missing entry for the deque module.
FIX: [DOCS/cerberus.stack] Fixed some typos.
FIX: [mojo] Fixed padded usage in Font.Load:Font(url:String, flags:Int=Image.DefaultFlags)    (Author: Rich)
FIX: [mojo2] Fixed padded usage in Font.Load:Font(url:String, flags:Int=Image.Filter )    (Author: Rich)
FIX: [mojo2] Fixed padded parameter in Image.LoadFrames:Image[]( path:String,cellWidth:Int,cellHeight:Int,padded:Bool=False,xhandle:Float=.5,yhandle:Float=.5,flags:Int=Image.Filter|Image.Mipmap,shader:Shader=Null ).    (Author: Rich)

MOD: [cerberusstore] updated the underlying code to support the newest Google version.    (Author: Rich)
MOD: [DOCS/interpolate] Fixed and added some images.    (Author: Holzchopf)
MOD: [mojo] Added filter param to Font.Load:Font(url:String, flags:Int=Image.DefaultFlags )    (Author: Rich)
MOD: [mojo2] Added filter param to Font.Load:Font(url:String, flags:Int=Image.Filter )    (Author: Rich)
MOD: [mojo/mojo2] Font.Load(url:String, flags:Int=... ) accept now .FNT files and don't add a .TXT anymore.
MOD: [TRANS] Changed TRANS in a way so modules can add Android libs and lift up versions more easily.    (Author: Rich)
MOD: [TRANS] Data file filters are not being case sensitive anymore.

NEW: [cerberus.interpolate] Added InterpolateCustomLine:Float(dataY:Float[], pX:Float ).    (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBackEaseIn:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBackEaseIn:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBackEaseOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBackEaseInOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateElasticEaseIn:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateElasticEaseOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateElasticEaseInOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBounceEaseIn:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBounceEaseOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [cerberus.interpolate] Added InterpolateBounceEaseInOut:Float(pY0:Float, pY1:Float, pX:Float). (Author: Rich)
NEW: [brl.tween] Added a module to support easy tweening.    (Author: Rich)
NEW: [TRANS] Added app icon creation right into TRANS.    (Author: Rich)
NEW: [IOS] Added #IOS_APP_ICON to set icon of the app.    (Author: Rich)
NEW: [ANDROID] Added #ANDROID_APP_ICON to set icon of the app.    (Author: Rich)
NEW: [FLASH] Added #FLASH_APP_ICON to set the favicon of the browser tab.    (Author: Rich)
NEW: [HTML5] Added #HTML5_APP_ICON to set the favicon of the browser tab.    (Author: Rich)
NEW: [HTML5] Added #HTML5_APP_TITLE to be able to set the title of the browser tab.
NEW: [HTML5] Added #HTML5_CANVAS_WIDTH and #HTML5_CANVAS_HEIGHT control the size of the html5 canvas.
NEW: [HTML5] Added #HTML5_APP_FILENAME to set the output filename.
NEW: [HTML5] Added #HTML5_CANVAS_RESIZE_MODE to be able to set the CANVAS resize mode.
NEW: [HTML5] Added #HTML5_CONSOLE_SHOW to be able to hide the splitter and console area.


EDIT: Made the list more detailed.
Last edited:
[TRANS] Fixed reporting the wrong error line number whehn using multiline Strings inside multiline comments. (Author: dawlane)
Don't mark this as a permanent fix until I can figure out the how to deal with the preprocessor directives within a REM block.
The code I posted was an ugly hack.
Anyone interested in CX providing imGUI?

This is great, how did you do this? I saw it at the sokol demo site and liked it.
It is just a few lines of code, the source files from imgui and a little fiddling with the glfw target. It would only be useful if it could be used with mojo or mojo2. BUT.... so far I am unable to mix these two.:rolleyes: Better to stay in the CX territory.
@MikeHart :
Update to the BUILDING.txt file and for Linux.
Building instructions

Before you beging. You should check out one of the desktop sub forums for any issues and work arounds, or to ask questions.

NOTE: The CerberusX IDE requires that Qt 5.9.x be installed to your system.
The IDE does not work correctly with any version later than 5.9.9. And versions below 5.9 are not officially supported.

======= LINUX =======
You should find all the developer packages in your distributions online repository.

Unbuntu 18.04/Ubuntu 19.04 (packages should be the same for Linux Mint 18/19)
Cerberus standard development files for making applications
sudo apt-get install g++ libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libopenal-dev libglu1-mesa-dev

Cerberus IDE development files for Ubuntu 18.04/Linux Mint 18 Only (Uses Qt 5.9.5)
sudo apt-get install qtmultimedia5-dev qt5-default qtwebengine5-dev

OpenSUSE 15
Cerberus standard development files for making applications
sudo zypper in gcc-c++ Mesa-libGL-devel openal-soft-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel

Cerberus IDE development files for OpenSUSE 15 Only (Uses Qt 5.9.4)
sudo zypper in libqt5-qtwebengine-devel libqt5-qtmultimedia-devel

Fedora 29
Cerberus standard development files for making applications
sudo dnf install gcc-c++ mesa-libGLU-devel libXi-devel libXcursor-devel libXrandr-devel libXinerama-devel openal-soft-devel

Cerberus IDE development files for Fedora 29 Only (Uses Qt 5.11.2) and only listed here for reference or at some stage Ted is made to work with later versions of Qt.
sudo dnf install qt5-qtwebengine-devel qt5-qtmultimedia-devel
You should download the Qt SDK and install version 5.9.2. And follow Manual Install of Ted.

Raspbery Pi:
Open Terminal window:
sudo raspi-config

Navigate to:
7 - Advanced options >> A7 - GL Driver >> G1 - GL (Full KMS) OpenGL desktop driver with full KMS

sudo apt-get -y install g++ libglu1-mesa-dev libopenal-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-dev libxxf86vm-dev libx11-dev libgl1-mesa-dev
sudo apt-get -y install libqt5webkit5-dev libqt5sensors5-dev qtlocation5-dev libxslt1-dev libsqlite3-dev libgstreamer-plugins-base0.10-dev qt5-default libicu-dev

You will find a bash script called
If you have installed the Qt SDK directly from
And you have installed them to your home directory as a directory called Qt, or created a symbolic link to the Qt SDK in your home directory.
Then the script will automatically use those files, with the default being 5.9.2 if installed.
You can pass the Qt version to use from the command line.

If you have installed the distributions Qt pacakage, then you may have to edit the script to the
name that the distribution is using for executing Qt 5's qmake. Each distribution commonly uses their own naming scheme.

Open a bash shell and change directory to where this script is located.
Then type:
NOTE: The parameter QTVER is the version of Qt to use if you have got the Qt SDK from
The default is to use Qt 5.9.2.

The GCC compiler that comes with later versions of Linux is setup to produce Position-Independent Executable's, also known as PIE.
The file browser/manager in most distributions currently will not launch these files directly and may never will. And launching a file via the file manager may be removed entirely in future releases.

To run Cerberus you will have to open a bash shell and change directory to the Cerberus root directory and type:

For a much easier solution, see IMPORTANT NOTE at

======= WINDOWS 8 and 10 =======
You will require the Window version of GCC, but please note that newer versions will have issues.
It is recommended that you use the 64 bit version of TDM GCC 4.7/5.1.0.

To build the IDE for Cerberus, you will need to have Visual Studio 2017 installed.

You will find a power-shell script called rebuildall.ps1 that should work on Win7+.

NOTE: Before using this script make sure that the execution policy for the current user be set to unrestricted.
To do this open a power shell as administrator and use:
    get-executionpolicy -list
    set-executionpolicy -scope currentuser unrestricted
If the file is still blocked use:
    unblock-file -path "full_path_to_this_script"
You should reset the execution policy back to it's original state after using this script e.g.:
    set-executionpolicy -scope currentuser undefined

To use the script, open a power shell (not the noraml command shell) and change directory to where this script is located.
Then type:
.\rebuildall.ps1 -mingw "path_to_mingw_root_directory" -qtsdk "path_to_qtsdk_root_directory"

The parameters -mingw and -qtsdk are optional if you already have both paths set correctly in your system paths.
The defaults are shown
'path_to_mingw_root_directory' would be for example:

'path_to_qtsdk_root_directory' would be for example:

======= Mac OS X =======
#Quick and nasty linux shell rebuild all

#Make transcc
echo "building transcc"
g++ -O3 -DNDEBUG -o ../bin/transcc_linux transcc/ -lpthread

#Make makedocs
echo "building makedocs"
../bin/transcc_linux -target=C++_Tool  -clean -config=release +CPP_GC_MODE=0 makedocs/makedocs.cxs
mv makedocs/ ../bin/makedocs_linux
rm -rf makedocs/

#Make cserver
echo "building cserver"
../bin/transcc_linux "-target=Desktop_Game" -clean -config=release +CPP_GC_MODE=1 cserver/cserver.cxs
mv cserver/ ../bin/cserver_linux

# Make sure that there is a copy of the CX standard font in the bin directory
mv cserver/ ../bin/data
rm -rf cserver/

#Make launcher
echo "building launcher"
../bin/transcc_linux -target=C++_Tool -clean -config=release +CPP_GC_MODE=0 launcher/launcher.cxs
mv launcher/ ../Cerberus
rm -rf launcher/

#Make ted
echo "building ted"
rm -rf build-ted-Desktop-Release
mkdir build-ted-Desktop-Release
cd build-ted-Desktop-Release

# Check to see if there is a Qt SDK directory in the users home folder.
if [ -d "$HOME/Qt" ]; then
    if [ -z $1 ]; then

    echo "Qt SDK Located....."
    echo "Testing for qmake in $HOME/Qt/$QTVER/gcc_64"

    export PATH="$HOME/Qt:$HOME/Qt/$QTVER/gcc_64/bin:$PATH"
    if hash qmake 2>/dev/null; then
        qmake CONFIG+=release ../ted/
        echo "Cannot locate qmake. Check your Qt SDK installation and the version passed."
        exit 1
    make install
    # The Qt SDK isn't installed in the home directory, so
    # check for one of the known qmake variants.
    if hash qmake-qt5 2>/dev/null; then
        qmake-qt5 CONFIG+=release ../ted/
    elif hash qt5-qmake 2>/dev/null; then
        qmake-qt5 CONFIG+=release ../ted/
        echo "Unknown Qt SDK. Going with the default qmake."
        echo "Expect errors......"
        qmake CONFIG+=release ../ted/

cd ..
rm -rf build-ted-Desktop-Release

I'm new to Cerberus, only discovered it 2 days ago. I was reading through this devlog and noticed a new IDE is in the making called Hades but then I don't see anything mentioned about it lately. Can I ask when the new IDE is going to be released? I do like to current IDE because it is small and light weight but missing some features like auto completion, Intelli Sense and could be also interesting to be able to expose variables to the IDE so then we can modify their value without need to find them in code or even during debug preview without need to rebuild the project. Is any of this features coming in Hades or is Hades coming at all?

Not open for further replies.
Top Bottom