From be140d8143d49dd5429647b7c1f6ca4b16e0ff5d Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 31 Dec 2016 23:47:47 +0000 Subject: [PATCH] Added "Flickylist = All" option. Couldn't get it to default to anything - it was causing crashes, and new years is in ten minutes, so let's do that tomorrow. --- src/dehacked.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 8a6c4ab04..c23f4379b 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1013,11 +1013,14 @@ static const struct { {"DOVE", MT_FLICKY_14}, {"CAT", MT_FLICKY_15}, {"CANARY", MT_FLICKY_16}, + {"a", 0}, // End of normal flickies - a lower case character so will never fastcmp valid with uppercase tmp //{"FLICKER", MT_FLICKER}, - {"SEED", MT_SEED},//MT_CDSEED}, + {"SEED", MT_SEED},//MT_CDSEED}, {NULL, 0} }; +#define MAXFLICKIES 64 + static void readlevelheader(MYFILE *f, INT32 num) { char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL); @@ -1126,9 +1129,24 @@ static void readlevelheader(MYFILE *f, INT32 num) mapheaderinfo[num-1]->flickies = NULL; mapheaderinfo[num-1]->numFlickies = 0; } + else if (fastcmp(word2, "ALL")) + { + mobjtype_t tmpflickies[MAXFLICKIES]; + + for (mapheaderinfo[num-1]->numFlickies = 0; + ((mapheaderinfo[num-1]->numFlickies < MAXFLICKIES) && FLICKYTYPES[mapheaderinfo[num-1]->numFlickies].type); + mapheaderinfo[num-1]->numFlickies++) + tmpflickies[mapheaderinfo[num-1]->numFlickies] = FLICKYTYPES[mapheaderinfo[num-1]->numFlickies].type; + + if (mapheaderinfo[num-1]->numFlickies) + { + size_t newsize = sizeof(mobjtype_t) * mapheaderinfo[num-1]->numFlickies; + mapheaderinfo[num-1]->flickies = Z_Realloc(mapheaderinfo[num-1]->flickies, newsize, PU_STATIC, NULL); + M_Memcpy(mapheaderinfo[num-1]->flickies, tmpflickies, newsize); + } + } else { -#define MAXFLICKIES 64 mobjtype_t tmpflickies[MAXFLICKIES]; mapheaderinfo[num-1]->numFlickies = 0; tmp = strtok(word2,","); @@ -1137,7 +1155,7 @@ static void readlevelheader(MYFILE *f, INT32 num) if (mapheaderinfo[num-1]->numFlickies == MAXFLICKIES) // never going to get above that number { deh_warning("Level header %d: too many flickies\n", num); - continue; + break; } if (fastncmp(tmp, "MT_", 3)) // support for specified mobjtypes... @@ -1175,7 +1193,6 @@ static void readlevelheader(MYFILE *f, INT32 num) } else deh_warning("Level header %d: no valid flicky types found\n", num); -#undef MAXFLICKIES } } @@ -1413,6 +1430,8 @@ static void readlevelheader(MYFILE *f, INT32 num) Z_Free(s); } +#undef MAXFLICKIES + static void readcutscenescene(MYFILE *f, INT32 num, INT32 scenenum) { char *s = Z_Calloc(MAXLINELEN, PU_STATIC, NULL);