X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_caveobject.c;h=b9c094251e33952afbf5a4bb4de3b2dcf5f31b3a;hb=fa8aab99c2bf447a57ea1914ac98030455c49bad;hp=57bc963c320a58d1e9dd1ff145e4482007ccd6d5;hpb=bd560c53129c84976b87827f1978ddf8de4ed57a;p=rocksndiamonds.git diff --git a/src/game_bd/bd_caveobject.c b/src/game_bd/bd_caveobject.c index 57bc963c..b9c09425 100644 --- a/src/game_bd/bd_caveobject.c +++ b/src/game_bd/bd_caveobject.c @@ -26,6 +26,91 @@ GdObjectLevels gd_levels_mask[] = GD_OBJECT_LEVEL5 }; +/* bdcff text description of object. caller should free string. */ +char *gd_object_get_bdcff(const GdObject *object) +{ + char *str = NULL; + int j; + const char *type; + + switch (object->type) + { + case GD_POINT: + return getStringPrint("Point=%d %d %s", object->x1, object->y1, gd_elements[object->element].filename); + + case GD_LINE: + return getStringPrint("Line=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename); + + case GD_RECTANGLE: + return getStringPrint("Rectangle=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename); + + case GD_FILLED_RECTANGLE: + /* if elements are not the same */ + if (object->fill_element!=object->element) + return getStringPrint("FillRect=%d %d %d %d %s %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename, gd_elements[object->fill_element].filename); + /* they are the same */ + return getStringPrint("FillRect=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename); + + case GD_RASTER: + return getStringPrint("Raster=%d %d %d %d %d %d %s", object->x1, object->y1, (object->x2-object->x1)/object->dx+1, (object->y2-object->y1)/object->dy+1, object->dx, object->dy, gd_elements[object->element].filename); + + case GD_JOIN: + return getStringPrint("Add=%d %d %s %s", object->dx, object->dy, gd_elements[object->element].filename, gd_elements[object->fill_element].filename); + + case GD_FLOODFILL_BORDER: + return getStringPrint("BoundaryFill=%d %d %s %s", object->x1, object->y1, gd_elements[object->fill_element].filename, gd_elements[object->element].filename); + + case GD_FLOODFILL_REPLACE: + return getStringPrint("FloodFill=%d %d %s %s", object->x1, object->y1, gd_elements[object->fill_element].filename, gd_elements[object->element].filename); + + case GD_MAZE: + case GD_MAZE_UNICURSAL: + case GD_MAZE_BRAID: + switch(object->type) + { + case GD_MAZE: + type = "perfect"; + break; + + case GD_MAZE_UNICURSAL: + type = "unicursal"; + break; + + case GD_MAZE_BRAID: + type = "braid"; + break; + + default: + /* never reached */ + break; + } + + return getStringPrint("Maze=%d %d %d %d %d %d %d %d %d %d %d %d %s %s %s", object->x1, object->y1, object->x2, object->y2, object->dx, object->dy, object->horiz, object->seed[0], object->seed[1], object->seed[2], object->seed[3], object->seed[4], gd_elements[object->element].filename, gd_elements[object->fill_element].filename, type); + + case GD_RANDOM_FILL: + appendStringPrint(&str, "%s=%d %d %d %d %d %d %d %d %d %s", object->c64_random?"RandomFillC64":"RandomFill", object->x1, object->y1, object->x2, object->y2, object->seed[0], object->seed[1], object->seed[2], object->seed[3], object->seed[4], gd_elements[object->fill_element].filename); + + /* seed and initial fill */ + for (j = 0; j < 4; j++) + if (object->random_fill_probability[j] != 0) + appendStringPrint(&str, " %s %d", gd_elements[object->random_fill[j]].filename, object->random_fill_probability[j]); + + if (object->element != O_NONE) + appendStringPrint(&str, " %s", gd_elements[object->element].filename); + + return str; + + case GD_COPY_PASTE: + return getStringPrint("CopyPaste=%d %d %d %d %d %d %s %s", object->x1, object->y1, object->x2, object->y2, object->dx, object->dy, object->mirror?"mirror":"nomirror", object->flip?"flip":"noflip"); + + case NONE: + /* never reached */ + break; + } + + return NULL; +} + /* create an INDIVIDUAL POINT CAVE OBJECT */ GdObject *gd_object_new_point(GdObjectLevels levels, int x, int y, GdElement elem) {