Add support for training and 2 segfault fixes

To continue our talk about assertion, this example is the typical way I see for the use of the macro : Adding a log to the log file and try to continue. If we are lucky, we will not have a crash and the game will continue. If not, we will have a crash later but we will know looking at the log that something weird happened here.
As you can guess, assertion should never fail so in any case, even if it doesn't lead to a crash, a log with failed assertion should never be considered as normal.
And the good point with the macro is that I had though of adding information about the assertion in the macro as a second paramter supposed to be a string to be added in the assertion failed log containing info on why the assertion failed. If it is a macro, the string would be computed only if the assertion fails. If it is a function call, it will always be computed even if it the assertion doesn't fail.