From d6746348750831697e20199c9e64968f89653760 Mon Sep 17 00:00:00 2001 From: NepDisk <16447892+NepDisk@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:21:07 -0400 Subject: [PATCH] Implement UDMF versioning system and add support for srb2kart namespace --- src/p_setup.c | 17 +++++++++++++++-- src/r_state.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/p_setup.c b/src/p_setup.c index 544c2aaaf..61843216f 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -115,6 +115,7 @@ unsigned char mapmd5[16]; // boolean udmf; +INT32 udmf_version; size_t numvertexes, numsegs, numsectors, numsubsectors, numnodes, numlines, numsides, nummapthings; size_t num_orig_vertexes; vertex_t *vertexes; @@ -1539,8 +1540,18 @@ static boolean TextmapCount(size_t size) // Check if namespace is valid. tkn = M_TokenizerRead(0); - if (!(fastcmp(tkn, "srb2") || fastcmp(tkn, "ringracers"))) // Would like to use "ringracers", but it turns off features in UZB. - CONS_Alert(CONS_WARNING, "Invalid namespace '%s', only 'srb2' or 'ringracers' is supported.\n", tkn); + if (!(fastcmp(tkn, "srb2") || fastcmp(tkn, "ringracers") || fastcmp(tkn, "srb2kart"))) + CONS_Alert(CONS_WARNING, "Invalid namespace '%s', only 'srb2' or 'ringracers' or 'srb2kart' is supported.\n", tkn); + + // Check for version + tkn = M_TokenizerRead(0); + if (fastcmp(tkn, "version")) + { + tkn = M_TokenizerRead(0); + udmf_version = atoi(tkn); + if (udmf_version > UDMF_CURRENT_VERSION) + CONS_Alert(CONS_WARNING, "Map is intended for future UDMF version '%d', current supported version is '%d'. This map may have issues loading.\n", udmf_version, UDMF_CURRENT_VERSION); + } while ((tkn = M_TokenizerRead(0)) && M_TokenizerGetEndPos() < size) { @@ -2503,6 +2514,7 @@ static void P_WriteTextmap(void) } fprintf(f, "namespace = \"srb2\";\n"); + fprintf(f, "version = %d;\n", UDMF_CURRENT_VERSION); for (i = k = 0; i < nummapthings; i++) { if (wmapthings[i].type == mobjinfo[MT_WAYPOINT].doomednum @@ -7232,6 +7244,7 @@ static boolean P_LoadMapFromFile(void) virtlump_t *textmap = vres_Find(virt, "TEXTMAP"); size_t i; udmf = textmap != NULL; + udmf_version = 0; if (!P_LoadMapData(virt)) return false; diff --git a/src/r_state.h b/src/r_state.h index dc577448e..2de829c39 100644 --- a/src/r_state.h +++ b/src/r_state.h @@ -63,6 +63,7 @@ extern size_t numspritelumps, max_spritelumps; // // Lookup tables for map data. // +#define UDMF_CURRENT_VERSION (1) extern boolean udmf; extern size_t numsprites;