From b54d9876a82658f1ee236e9b6abeba9f93eed70f Mon Sep 17 00:00:00 2001 From: ac-stef Date: Wed, 3 Jun 2015 15:24:01 +0200 Subject: [PATCH] ask for replacement texture when deleting used texture slot deletetextureslot <"purge"> Deletes an unused texture slot. If "purge" is specified as second argument, it also deletes an used slot. All mapmodels that use that texture as skin are changed to default skin. All world geometry, which uses the texture, is instead set to use slot #255 or a specified replacement slot. Slots below #5 always require "purge", no matter if they are in use (default slots). Also enables automapconfig. DOCREF deletetextureslot --- source/src/texture.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/source/src/texture.cpp b/source/src/texture.cpp index eb8cb474..10e16700 100644 --- a/source/src/texture.cpp +++ b/source/src/texture.cpp @@ -1005,7 +1005,7 @@ void textureslotusage(int *n) // returns all mapmodel entity indices that use a } COMMAND(textureslotusage, "i"); -void deletetextureslot(int *n, char *opt) // delete texture slot - only if unused or "purge" is specified +void deletetextureslot(int *n, char *opt, char *_replace) // delete texture slot - only if unused or "purge" is specified { if(noteditmode("deletetextureslot") || multiplayer(true) || !slots.inrange(*n)) return; bool purgeall = !strcmp(opt, "purge"); @@ -1013,17 +1013,19 @@ void deletetextureslot(int *n, char *opt) // delete texture slot - only if unuse loopv(ents) if(ents[i].type == MAPMODEL && ents[i].attr4 == *n) mmused = true; if(!purgeall && *n <= DEFAULT_CEIL) { conoutf("texture slots below #%d should usually not be deleted", DEFAULT_CEIL + 1); return; } if(!purgeall && (mmused || testworldtexusage(*n))) { conoutf("texture slot #%d is in use: can't delete", *n); return; } - int deld = 0; + int deld = 0, replace = 256; + if(purgeall && isdigit(*_replace)) replace = strtol(_replace, NULL, 0) & 255; + if(replace > *n) replace--; sqr *s = world; loopirev(cubicsize) { // check, if cubes use the texture - if(s->wtex == *n) { s->wtex = 255; deld++; } + if(s->wtex == *n) { s->wtex = replace; deld++; } else if(s->wtex > *n) s->wtex--; - if(s->ctex == *n) { s->ctex = 255; deld++; } + if(s->ctex == *n) { s->ctex = replace; deld++; } else if(s->ctex > *n) s->ctex--; - if(s->ftex == *n) { s->ftex = 255; deld++; } + if(s->ftex == *n) { s->ftex = replace; deld++; } else if(s->ftex > *n) s->ftex--; - if(s->utex == *n) { s->utex = 255; deld++; } + if(s->utex == *n) { s->utex = replace; deld++; } else if(s->utex > *n) s->utex--; s++; } @@ -1042,11 +1044,12 @@ void deletetextureslot(int *n, char *opt) // delete texture slot - only if unuse // FIXME: texlists... slots.remove(*n); defformatstring(m)(" (%d uses removed)", deld); + if(replace != 255) formatstring(m)(" (%d uses changed to use slot #%d)", deld, replace); conoutf("texture slot #%d deleted%s", *n, deld ? m : ""); unsavededits++; hdr.flags |= MHF_AUTOMAPCONFIG; // requires automapcfg } -COMMAND(deletetextureslot, "is"); +COMMAND(deletetextureslot, "iss"); void edittextureslot(int *n, char *scale, char *name) // edit slot parameters != "" {