diff --git a/dat/mission.xml b/dat/mission.xml index 8b8bbd7..5ee151e 100644 --- a/dat/mission.xml +++ b/dat/mission.xml @@ -31,9 +31,7 @@ es_cargo - - req_esd - + es_cargo 350 Computer diff --git a/src/misn_lua.c b/src/misn_lua.c index 1ea012b..bc0f089 100644 --- a/src/misn_lua.c +++ b/src/misn_lua.c @@ -46,6 +46,8 @@ static int var_mstack = 0; static Mission* cur_mission = NULL; static int misn_delete = 0; // If 1 delete current mission. +static void var_free(misn_var* var); + // -- Libraries. -- // Lephisto. @@ -329,18 +331,7 @@ static int var_pop(lua_State* L) { for(i = 0; i < var_nstack; i++) if(strcmp(str, var_stack[i].name)==0) { - switch(var_stack[i].type) { - case MISN_VAR_STR: - if(var_stack[i].d.str != NULL) { - free(var_stack[i].d.str); - var_stack[i].d.str = NULL; - } - break; - case MISN_VAR_NIL: - case MISN_VAR_NUM: - case MISN_VAR_BOOL: - break; - } + var_free(&var_stack[i]); memmove(&var_stack[i], &var_stack[i+1], sizeof(misn_var)*(var_nstack-i-1)); var_stack--; return 0; @@ -408,6 +399,37 @@ static int var_push(lua_State* L) { return 0; } +static void var_free(misn_var* var) { + switch(var->type) { + case MISN_VAR_STR: + if(var->d.str != NULL) { + free(var->d.str); + var->d.str = NULL; + } + break; + case MISN_VAR_NIL: + case MISN_VAR_NUM: + case MISN_VAR_BOOL: + break; + } + if(var->name != NULL) { + free(var->name); + var->name = NULL; + } +} + +void var_cleanup(void) { + int i; + for(i = 0; i < var_nstack; i++) + var_free(&var_stack[i]); + + if(var_stack != NULL) free(var_stack); + var_stack = NULL; + var_nstack = 0; + var_mstack = 0; +} + +// -- Space. -- static int space_getPlanet(lua_State* L) { int i; int *factions; diff --git a/src/misn_lua.h b/src/misn_lua.h index 812aa52..ce4283e 100644 --- a/src/misn_lua.h +++ b/src/misn_lua.h @@ -4,6 +4,7 @@ // Check if a flag exists on the variable stack. int var_checkflag(char* str); +void var_cleanup(void); // Load the libraries for a lua state. int misn_loadLibs(lua_State* L); diff --git a/src/player.c b/src/player.c index 78a1265..bc75f05 100644 --- a/src/player.c +++ b/src/player.c @@ -16,6 +16,7 @@ #include "menu.h" #include "toolkit.h" #include "mission.h" +#include "misn_lua.h" #include "player.h" #define XML_GUI_ID "GUIs" // XML section identifier. @@ -152,6 +153,9 @@ void player_new(void) { // Cleanup player stuff if we'll be re-creating. player_cleanup(); + // Cleanup stacks. + var_cleanup(); + player_name = dialogue_input("Player Name", 3, 20, "Please tell me your name:"); player_newMake();