diff --git a/src/p_setup.c b/src/p_setup.c index 588815aee..7f9674e4e 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3046,48 +3046,55 @@ static void P_AddBinaryMapTags(void) { size_t i; - for (i = 0; i < numlines; i++) - { - // 96: Apply Tag to Tagged Sectors + for (i = 0; i < numlines; i++) { // 97: Apply Tag to Front Sector // 98: Apply Tag to Back Sector // 99: Apply Tag to Front and Back Sectors - if (lines[i].special == 96) { - size_t j; - mtag_t tag = Tag_FGet(&lines[i].frontsector->tags); - mtag_t target_tag = Tag_FGet(&lines[i].tags); - mtag_t offset_tags[4]; - memset(offset_tags, 0, sizeof(mtag_t)*4); - if (lines[i].flags & ML_EFFECT6) { - offset_tags[0] = (INT32)sides[lines[i].sidenum[0]].textureoffset / FRACUNIT; - offset_tags[1] = (INT32)sides[lines[i].sidenum[0]].rowoffset / FRACUNIT; - } - if (lines[i].flags & ML_TFERLINE) { - offset_tags[2] = (INT32)sides[lines[i].sidenum[1]].textureoffset / FRACUNIT; - offset_tags[3] = (INT32)sides[lines[i].sidenum[1]].rowoffset / FRACUNIT; - } + if (lines[i].special == 97 || lines[i].special == 99) + P_AddBinaryMapTagsFromLine(lines[i].frontsector, &lines[i]); + if (lines[i].special == 98 || lines[i].special == 99) + P_AddBinaryMapTagsFromLine(lines[i].backsector, &lines[i]); + } - for (j = 0; j < numsectors; j++) { - boolean matches_target_tag = target_tag && Tag_Find(§ors[j].tags, target_tag); - size_t k; for (k = 0; k < 4; k++) { - if (lines[i].flags & ML_EFFECT5) { - if (matches_target_tag || (offset_tags[k] && Tag_Find(§ors[j].tags, offset_tags[k]))) { - Tag_Add(§ors[j].tags, tag); - break; - } - } else if (matches_target_tag) { - if (k == 0) - Tag_Add(§ors[j].tags, tag); - if (offset_tags[k]) - Tag_Add(§ors[j].tags, offset_tags[k]); + // Run this loop after the 97-99 loop to ensure that 96 can search through all of the + // 97-99-applied tags. + for (i = 0; i < numlines; i++) { + size_t j; + mtag_t tag, target_tag; + mtag_t offset_tags[4]; + + // 96: Apply Tag to Tagged Sectors + if (lines[i].special != 96) + continue; + + tag = Tag_FGet(&lines[i].frontsector->tags); + target_tag = Tag_FGet(&lines[i].tags); + memset(offset_tags, 0, sizeof(mtag_t)*4); + if (lines[i].flags & ML_EFFECT6) { + offset_tags[0] = (INT32)sides[lines[i].sidenum[0]].textureoffset / FRACUNIT; + offset_tags[1] = (INT32)sides[lines[i].sidenum[0]].rowoffset / FRACUNIT; + } + if (lines[i].flags & ML_TFERLINE) { + offset_tags[2] = (INT32)sides[lines[i].sidenum[1]].textureoffset / FRACUNIT; + offset_tags[3] = (INT32)sides[lines[i].sidenum[1]].rowoffset / FRACUNIT; + } + + for (j = 0; j < numsectors; j++) { + boolean matches_target_tag = target_tag && Tag_Find(§ors[j].tags, target_tag); + size_t k; + for (k = 0; k < 4; k++) { + if (lines[i].flags & ML_EFFECT5) { + if (matches_target_tag || (offset_tags[k] && Tag_Find(§ors[j].tags, offset_tags[k]))) { + Tag_Add(§ors[j].tags, tag); + break; } + } else if (matches_target_tag) { + if (k == 0) + Tag_Add(§ors[j].tags, tag); + if (offset_tags[k]) + Tag_Add(§ors[j].tags, offset_tags[k]); } } - } else { - if (lines[i].special == 97 || lines[i].special == 99) - P_AddBinaryMapTagsFromLine(lines[i].frontsector, &lines[i]); - if (lines[i].special == 98 || lines[i].special == 99) - P_AddBinaryMapTagsFromLine(lines[i].backsector, &lines[i]); } } }