+
+ bd_setup_pieces(minigame);
+}
+
+string bd_save_piece(entity minigame, entity e)
+{
+ string bd_string = "";
+
+ bd_string = strcat(bd_string, "\"", e.netname, "\" ");
+ bd_string = strcat(bd_string, ftos(e.bd_tiletype), " ");
+ bd_string = strcat(bd_string, sprintf("\"%.9v\"", e.bd_dir), " ");
+ bd_string = strcat(bd_string, "; ");
+
+ return bd_string;
+}
+
+void bd_set_nextlevel(entity minigame, string s)
+{
+ string blah = substring(s, 11, strlen(s));
+
+ if(minigame.bd_nextlevel) { strunzone(minigame.bd_nextlevel); }
+ minigame.bd_nextlevel = strzone(blah);
+}
+
+entity bd_load_piece(entity minigame, string s)
+{
+ // separate pieces between the ; symbols
+ tokenizebyseparator(s, "; ");
+ string bd_string = argv(0);
+
+ tokenize_console(bd_string);
+
+ entity e = msle_spawn(minigame,"minigame_board_piece");
+ e.team = 1;
+
+ int argv_num = 0;
+ e.netname = strzone(argv(argv_num)); ++argv_num;
+ e.bd_tiletype = stof(argv(argv_num)); ++argv_num;
+ e.bd_dir = stov(argv(argv_num)); ++argv_num;
+
+ minigame_server_sendflags(e,MINIG_SF_ALL);
+
+ return e;
+}
+
+bool bd_save_level(entity minigame)
+{
+ if(minigame.bd_levelname && minigame.bd_levelname != "")
+ {
+ // saves all objects to the database file
+ string file_name;
+ float file_get;
+
+ file_name = strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt");
+ file_get = fopen(file_name, FILE_WRITE);
+ fputs(file_get, strcat("// bulldozer storage \"", minigame.bd_levelname, "\" last updated ", strftime(true, "%d-%m-%Y %H:%M:%S"), "\n"));
+
+ if(minigame.bd_nextlevel && minigame.bd_nextlevel != "" && fexists(strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt")))
+ fputs(file_get, strcat("nextlevel=", minigame.bd_nextlevel, "\n"));
+
+ entity e = world;
+ while ( ( e = findentity(e,owner,minigame) ) )
+ if ( e.classname == "minigame_board_piece" )
+ {
+ // use a line of text for each object, listing all properties
+ fputs(file_get, strcat(bd_save_piece(minigame, e), "\n"));
+ }
+ fclose(file_get);
+
+ return true;
+ }
+
+ return false;
+}
+
+void bd_load_level(entity minigame)
+{
+ // loads all items from the database file
+ string file_read, file_name;
+ float file_get;
+
+ file_name = strcat("minigames/bulldozer/storage_", minigame.bd_levelname, ".txt");
+ file_get = fopen(file_name, FILE_READ);
+ if(file_get < 0)
+ {
+ LOG_INFO("^3BULLDOZER: ^7could not find storage file ^3", file_name, "^7, no items were loaded\n");
+ }
+ else
+ {
+ for(;;)
+ {
+ file_read = fgets(file_get);
+ if(file_read == "")
+ break;
+ if(substring(file_read, 0, 2) == "//")
+ continue;
+ if(substring(file_read, 0, 1) == "#")
+ continue;
+ if(substring(file_read, 0, 10) == "nextlevel=")
+ {
+ bd_set_nextlevel(minigame, file_read);
+ continue;
+ }
+
+ entity e;
+ e = bd_load_piece(minigame, file_read);
+ }
+ }
+ fclose(file_get);