diff --git a/src/misn_lua.c b/src/misn_lua.c index 07273d1..b317409 100644 --- a/src/misn_lua.c +++ b/src/misn_lua.c @@ -12,6 +12,7 @@ #include "pilot.h" #include "player.h" #include "ltime.h" +#include "xml.h" #include "misn_lua.h" #define MISN_DEBUG(str, args...) (fprintf(stdout, "Mission '%s': "str"\n", \ @@ -222,6 +223,41 @@ int misn_run(Mission* misn, char* func) { return ret; } +// Save the mission variables. +int var_save(xmlTextWriterPtr writer) { + int i; + + xmlw_startElem(writer, "vars"); + + for(i = 0; i < var_nstack; i++) { + xmlw_startElem(writer, "vars"); + + xmlw_attr(writer, "name", var_stack[i].name); + + switch(var_stack[i].type) { + case MISN_VAR_NIL: + xmlw_attr(writer, "type", "nil"); + break; + case MISN_VAR_NUM: + xmlw_attr(writer, "type", "num"); + xmlw_str(writer, "%d", var_stack[i].d.num); + break; + case MISN_VAR_BOOL: + xmlw_attr(writer, "type", "bool"); + xmlw_str(writer, "%d", var_stack[i].d.b); + break; + case MISN_VAR_STR: + xmlw_attr(writer, "type", "str"); + xmlw_str(writer, var_stack[i].d.str); + break; + } + xmlw_endElem(writer); // var. + } + xmlw_endElem(writer); // vars. + + return 0; +} + // -- Lephisto. -- static int lephisto_lang(lua_State* L) { // TODO: multilanguage stuff. diff --git a/src/save.c b/src/save.c index d76f62c..93ac4de 100644 --- a/src/save.c +++ b/src/save.c @@ -6,6 +6,7 @@ // Externs. extern int player_save(xmlTextWriterPtr writer); extern int missions_save(xmlTextWriterPtr writer); +extern int var_save(xmlTextWriterPtr writer); // misn var. // Static. static int save_data(xmlTextWriterPtr writer); @@ -13,6 +14,7 @@ static int save_data(xmlTextWriterPtr writer) { // The data itself. if(player_save(writer) < 0) return -1; if(missions_save(writer) < 0) return -1; + if(var_save(writer) < 0) return -1; return 0; }