Reads files from a DSL in order to generate C code and header files for some game project in C (Warning: shitty code)
Uses ANTLR4 to generate the parser
usage : java -jar DQloneStatsDSL.jar DSLfile [destination]
DSL syntax :
FIGHTER {
-- init is the initial status (level 1)
init { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
-- Inside the parens we have the needed XP to get to this level
2 (200) { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
3 (300) { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
}
THIEF {
init { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
2 (200) { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
3 (300) { HP 10 ATK 20 DEF 10 AGI 20 MAG 0}
}
Generated code for stats_engine_codegen.c
//Code generated by DQloneStatsDSL on 2018-10-04T14:09:09.958
#include "stats_engine_codegen.h"
static void set_stats(stats_t* stats, uint_16 hp, uint_16 agi, uint_16 atk, uint_16 def, uint_16 mag);
static void set_stats(stats_t* stats, uint_16 hp, uint_16 agi, uint_16 atk, uint_16 def, uint_16 mag){
stats->hp = hp;
stats->agi = agi;
stats->atk = atk;
stats->def = def;
stats->mag = mag;
}
uint_32 get_nb_points_for_level(class_t class, uint_8 level) {
assert(level > 0);
if (class == THIEF){
if (level == 1) { return 0; }
if (level == 2) { return 200; }
if (level == 3) { return 300; }
}
if (class == FIGHTER){
if (level == 1) { return 0; }
if (level == 2) { return 200; }
if (level == 3) { return 300; }
}
return -1;
}
void increase_stats(stats_t* stats) {
if (stats->class == THIEF){
if (stats->level == 1) { set_stats(stats,10,20,20,10,0); return; }
if (stats->level == 2) { set_stats(stats,10,20,20,10,0); return; }
if (stats->level == 3) { set_stats(stats,10,20,20,10,0); return; }
}
if (stats->class == FIGHTER){
if (stats->level == 1) { set_stats(stats,10,20,20,10,0); return; }
if (stats->level == 2) { set_stats(stats,10,20,20,10,0); return; }
if (stats->level == 3) { set_stats(stats,10,20,20,10,0); return; }
}
}
Generated code for stats_engine_codegen.h
//Code generated by DQloneStatsDSL on 2018-10-04T14:09:09.955
#ifndef STATS_ENGINE_CODEGEN_H
#define STATS_ENGINE_CODEGEN_H
#include "types.h"
#include "assert.h"
typedef enum {THIEF,FIGHTER} class_t;
typedef struct {
class_t class;
uint_16 hp;
uint_16 agi;
uint_16 atk;
uint_16 def;
uint_16 mag;
uint_32 xp;
uint_8 level;
} stats_t;
uint_32 get_nb_points_for_level(class_t class, uint_8 level);
void increase_stats(stats_t* stats);
#endif