Why stop there? Go for skincolors too :^)
This commit is contained in:
parent
1793c2ea95
commit
1b095d220e
9 changed files with 31 additions and 60 deletions
|
|
@ -1277,9 +1277,6 @@ void D_SRB2Main(void)
|
|||
// MAINCFG is now taken care of where "OBJCTCFG" is handled
|
||||
G_LoadGameSettings();
|
||||
|
||||
// Test Dehacked lists
|
||||
DEH_TableCheck();
|
||||
|
||||
// Netgame URL special case: change working dir to EXE folder.
|
||||
ChangeDirForUrlHandler();
|
||||
|
||||
|
|
|
|||
|
|
@ -111,18 +111,17 @@ static inline int lib_freeslot(lua_State *L)
|
|||
else if (fastcmp(type, "SKINCOLOR"))
|
||||
{
|
||||
skincolornum_t i;
|
||||
for (i = 0; i < NUMCOLORFREESLOTS; i++)
|
||||
if (!FREE_SKINCOLORS[i]) {
|
||||
for (i = SKINCOLOR_FIRSTFREESLOT; i < MAXSKINCOLORS; i++)
|
||||
if (!skincolors[i].nameofs) {
|
||||
CONS_Printf("Skincolor SKINCOLOR_%s allocated.\n",word);
|
||||
FREE_SKINCOLORS[i] = Z_Malloc(strlen(word)+1, PU_STATIC, NULL);
|
||||
strcpy(FREE_SKINCOLORS[i],word);
|
||||
skincolors[i].nameofs = strbuf_append(&skincolornames, word);
|
||||
M_AddMenuColor(numskincolors++);
|
||||
K_ReloadHUDColorCvar();
|
||||
lua_pushinteger(L, SKINCOLOR_FIRSTFREESLOT + i);
|
||||
lua_pushinteger(L, i);
|
||||
r++;
|
||||
break;
|
||||
}
|
||||
if (i == NUMCOLORFREESLOTS)
|
||||
if (i == MAXSKINCOLORS)
|
||||
CONS_Alert(CONS_WARNING, "Ran out of free skincolor slots!\n");
|
||||
}
|
||||
else if (fastcmp(type, "SPR2"))
|
||||
|
|
@ -588,19 +587,14 @@ static int ScanConstants(lua_State *L, boolean mathlib, const char *word)
|
|||
}
|
||||
else if (fastncmp("SKINCOLOR_",word,10)) {
|
||||
p = word+10;
|
||||
for (i = 0; i < NUMCOLORFREESLOTS; i++) {
|
||||
if (!FREE_SKINCOLORS[i])
|
||||
for (i = 0; i < MAXSKINCOLORS; i++) {
|
||||
if (!skincolors[i].nameofs)
|
||||
break;
|
||||
if (fastcmp(p, FREE_SKINCOLORS[i])) {
|
||||
CacheAndPushConstant(L, word, SKINCOLOR_FIRSTFREESLOT+i);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < SKINCOLOR_FIRSTFREESLOT; i++)
|
||||
if (fastcmp(p, COLOR_ENUMS[i])) {
|
||||
if (fastcmp(p, strbuf_get(skincolornames, skincolors[i].nameofs))) {
|
||||
CacheAndPushConstant(L, word, i);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return luaL_error(L, "skincolor '%s' could not be found.\n", word);
|
||||
}
|
||||
else if (fastncmp("MN_",word,3)) {
|
||||
|
|
|
|||
|
|
@ -464,11 +464,10 @@ void readfreeslots(MYFILE *f)
|
|||
}
|
||||
else if (fastcmp(type, "SKINCOLOR"))
|
||||
{
|
||||
for (i = 0; i < NUMCOLORFREESLOTS; i++)
|
||||
if (!FREE_SKINCOLORS[i]) {
|
||||
for (i = SKINCOLOR_FIRSTFREESLOT; i < MAXSKINCOLORS; i++)
|
||||
if (!skincolors[i].nameofs) {
|
||||
CONS_Printf("Skincolor SKINCOLOR_%s allocated.\n",word);
|
||||
FREE_SKINCOLORS[i] = Z_Malloc(strlen(word)+1, PU_STATIC, NULL);
|
||||
strcpy(FREE_SKINCOLORS[i],word);
|
||||
skincolors[i].nameofs = strbuf_append(&skincolornames, word);
|
||||
M_AddMenuColor(numskincolors++);
|
||||
K_ReloadHUDColorCvar();
|
||||
break;
|
||||
|
|
@ -4298,15 +4297,12 @@ skincolornum_t get_skincolor(const char *word)
|
|||
return atoi(word);
|
||||
if (fastncmp("SKINCOLOR_",word,10))
|
||||
word += 10; // take off the SKINCOLOR_
|
||||
for (i = 0; i < NUMCOLORFREESLOTS; i++) {
|
||||
if (!FREE_SKINCOLORS[i])
|
||||
for (i = 0; i < MAXSKINCOLORS; i++) {
|
||||
if (!skincolors[i].nameofs)
|
||||
break;
|
||||
if (fastcmp(word, FREE_SKINCOLORS[i]))
|
||||
return SKINCOLOR_FIRSTFREESLOT+i;
|
||||
}
|
||||
for (i = 0; i < SKINCOLOR_FIRSTFREESLOT; i++)
|
||||
if (fastcmp(word, COLOR_ENUMS[i]))
|
||||
if (fastcmp(word, strbuf_get(skincolornames, skincolors[i].nameofs)))
|
||||
return i;
|
||||
}
|
||||
deh_warning("Couldn't find skincolor named 'SKINCOLOR_%s'",word);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
|
||||
strbuf_t *statenames;
|
||||
strbuf_t *mobjnames;
|
||||
char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
||||
strbuf_t *skincolornames;
|
||||
char *FREE_MENUS[NUMMENUFREESLOTS];
|
||||
UINT8 used_spr[(NUMSPRITEFREESLOTS / 8) + 1]; // Bitwise flag for sprite freeslot in use! I would use ceil() here if I could, but it only saves 1 byte of memory anyway.
|
||||
|
||||
|
|
@ -427,12 +427,6 @@ const char *const TO_LIST[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *COLOR_ENUMS[] = {
|
||||
#define _(name, ...) #name,
|
||||
#include "info/skincolors.h"
|
||||
#undef _
|
||||
};
|
||||
|
||||
const char *const POWERS_LIST[] = {
|
||||
"INVULNERABILITY",
|
||||
"SNEAKERS",
|
||||
|
|
@ -1511,15 +1505,3 @@ struct int_const_s const INT_CONST[] = {
|
|||
|
||||
{NULL,0}
|
||||
};
|
||||
|
||||
// For this to work compile-time without being in this file,
|
||||
// this function would need to check sizes at runtime, without sizeof
|
||||
void DEH_TableCheck(void)
|
||||
{
|
||||
#if defined(_DEBUG) || defined(PARANOIA)
|
||||
const size_t dehcolors = sizeof(COLOR_ENUMS)/sizeof(const char*);
|
||||
|
||||
if (dehcolors != SKINCOLOR_FIRSTFREESLOT)
|
||||
I_Error("You forgot to update the Dehacked colors list, you dolt!\n(%d colors defined, versus %s in the Dehacked list)\n", SKINCOLOR_FIRSTFREESLOT, sizeu1(dehcolors));
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,14 +28,14 @@ extern "C" {
|
|||
// The crazy word-reading stuff uses these.
|
||||
extern strbuf_t *statenames;
|
||||
extern strbuf_t *mobjnames;
|
||||
extern char *FREE_SKINCOLORS[NUMCOLORFREESLOTS];
|
||||
extern strbuf_t *skincolornames;
|
||||
extern char *FREE_MENUS[NUMMENUFREESLOTS];
|
||||
extern UINT8 used_spr[(NUMSPRITEFREESLOTS / 8) + 1]; // Bitwise flag for sprite freeslot in use! I would use ceil() here if I could, but it only saves 1 byte of memory anyway.
|
||||
|
||||
#define initfreeslots() {\
|
||||
statenames = strbuf_alloc();\
|
||||
mobjnames = strbuf_alloc();\
|
||||
memset(FREE_SKINCOLORS,0,sizeof(char *) * NUMCOLORFREESLOTS);\
|
||||
skincolornames = strbuf_alloc();\
|
||||
memset(used_spr,0,sizeof(UINT8) * ((NUMSPRITEFREESLOTS / 8) + 1));\
|
||||
}
|
||||
|
||||
|
|
@ -87,7 +87,6 @@ extern const char *const MSF_LIST[]; // Sector flags
|
|||
extern const char *const SSF_LIST[]; // Sector special flags
|
||||
extern const char *const SD_LIST[]; // Sector damagetype
|
||||
extern const char *const TO_LIST[]; // Sector triggerer
|
||||
extern const char *COLOR_ENUMS[];
|
||||
extern const char *const POWERS_LIST[];
|
||||
extern const char *const KARTSTUFF_LIST[];
|
||||
extern const char *const KARTHUD_LIST[];
|
||||
|
|
@ -98,9 +97,6 @@ extern struct menu_drawer_s const MENU_DRAWERS[];
|
|||
|
||||
extern struct int_const_s const INT_CONST[];
|
||||
|
||||
// Moved to this file because it can't work compile-time otherwise
|
||||
void DEH_TableCheck(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -188,6 +188,12 @@ static const char *hardcodestates =
|
|||
#undef _
|
||||
;
|
||||
|
||||
static const char *hardcodeskincolors =
|
||||
#define _(name, ...) #name "\0"
|
||||
#include "info/skincolors.h"
|
||||
#undef _
|
||||
;
|
||||
|
||||
static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
|
||||
{
|
||||
char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
|
||||
|
|
@ -208,6 +214,10 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
|
|||
name = hardcodestates;
|
||||
for (i = 0; i < S_FIRSTFREESLOT; i++, name += strlen(name)+1)
|
||||
states[i].nameofs = strbuf_append(&statenames, name);
|
||||
|
||||
name = hardcodeskincolors;
|
||||
for (i = 0; i < SKINCOLOR_FIRSTFREESLOT; i++, name += strlen(name)+1)
|
||||
skincolors[i].nameofs = strbuf_append(&skincolornames, name);
|
||||
}
|
||||
|
||||
deh_num_warning = 0;
|
||||
|
|
|
|||
|
|
@ -38,8 +38,6 @@ void DEH_LoadDehackedLumpPwad(UINT16 wad, UINT16 lump, boolean mainfile);
|
|||
extern int freeslotusage[2][2];
|
||||
void DEH_UpdateMaxFreeslots(void);
|
||||
|
||||
void DEH_Check(void);
|
||||
|
||||
fixed_t get_number(const char *word);
|
||||
FUNCPRINTF void deh_warning(const char *first, ...);
|
||||
void deh_strlcpy(char *dst, const char *src, size_t size, const char *warntext);
|
||||
|
|
|
|||
|
|
@ -222,6 +222,7 @@ extern char logfilename[1024];
|
|||
|
||||
struct skincolor_t
|
||||
{
|
||||
UINT32 nameofs; // Offset for internal name
|
||||
char name[MAXCOLORNAME+1]; // Skincolor name
|
||||
UINT8 ramp[COLORRAMPSIZE]; // Colormap ramp
|
||||
UINT16 invcolor; // Signpost color
|
||||
|
|
|
|||
|
|
@ -1185,10 +1185,7 @@ static void P_WriteSkincolor(INT32 constant, char **target)
|
|||
|| constant >= (INT32)numskincolors)
|
||||
return;
|
||||
|
||||
if (constant >= SKINCOLOR_FIRSTFREESLOT)
|
||||
color_name = FREE_SKINCOLORS[constant - SKINCOLOR_FIRSTFREESLOT];
|
||||
else
|
||||
color_name = COLOR_ENUMS[constant];
|
||||
color_name = strbuf_get(skincolornames, skincolors[constant].nameofs);
|
||||
|
||||
P_WriteDuplicateText(
|
||||
va("SKINCOLOR_%s", color_name),
|
||||
|
|
|
|||
Loading…
Reference in a new issue